diff --git a/.hgtags b/.hgtags index 45683c43953..ee8e1c5db34 100644 --- a/.hgtags +++ b/.hgtags @@ -166,3 +166,8 @@ c029c972396cea042a0dc67c0f7ccf2fe68007d4 jdk8-b41 5c5a64ec0839df5affe9394b99ff338c363acbca jdk8-b42 69d8a827cdf9236be9694a46d75c710d71dac7d7 jdk8-b43 7e981cb0ad6a194f1fa859f9ad47586db461f269 jdk8-b44 +9b19b2302c28f4da6d4078f66234abecfed5688a jdk8-b45 +600c9a1feb01633cbcf2341a43d1d21e6497ecd0 jdk8-b46 +b820143a6f1ce993c6e6f31db4d64de990f42654 jdk8-b47 +086271e35b0a419b38e8bda9bebd70693811df0a jdk8-b48 +cecd7026f30cbd83b0601925a7a5e059aec98138 jdk8-b49 diff --git a/.hgtags-top-repo b/.hgtags-top-repo index 44ad17af265..c47986f8eda 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -166,3 +166,8 @@ a2b2d435f1d275fa8010774c653197c64e326d3a jdk8-b40 1ce5dc16416611c58b7480ca67a2eee5153498a6 jdk8-b42 661c9aae602bbd9766d12590800c90f1edd1d8dd jdk8-b43 e4f81a817447c3a4f6868f083c81c2fb1b15d44c jdk8-b44 +633f2378c904c92bb922a6e19e9f62fe8eac14af jdk8-b45 +27fa766a2298ba8347dc198f0cf85ba6618e17db jdk8-b46 +1dcb4b7b9373e64e135c12fe1f8699f1f80e51e8 jdk8-b47 +3f6c72d1c2a6e5c9e7d81c3dc984886678a128ad jdk8-b48 +c97b99424815c43818e3cc3ffcdd1a60f3198b52 jdk8-b49 diff --git a/THIRD_PARTY_README b/THIRD_PARTY_README index ee5463a922e..759733bfceb 100644 --- a/THIRD_PARTY_README +++ b/THIRD_PARTY_README @@ -3383,3 +3383,397 @@ included with JRE 7, JDK 7, and OpenJDK 7, except where noted: ------------------------------------------------------------------------------- +%% This notice is provided with respect to Mozilla Network Security +Services (NSS), which is supplied with the JDK test suite in the OpenJDK +source code repository. It is licensed under Mozilla Public License (MPL), +version 2.0. + +The NSS libraries are supplied in executable form, built from unmodified +NSS source code labeled with the "NSS_3.13.1_RTM" release tag. + +The NSS source code is available in the OpenJDK source code repository at: + jdk/test/sun/security/pkcs11/nss/src + +The NSS libraries are available in the OpenJDK source code repository at: + jdk/test/sun/security/pkcs11/nss/lib + +--- begin of LICENSE --- + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + +--- end of LICENSE --- + +------------------------------------------------------------------------------- + diff --git a/common/autoconf/autogen.sh b/common/autoconf/autogen.sh index 5f6937c52f7..ce56d2719d6 100644 --- a/common/autoconf/autogen.sh +++ b/common/autoconf/autogen.sh @@ -22,5 +22,19 @@ # questions. # -autoconf -W all configure.ac > configure -rm -rf config.status config.log autom4te.cache +script_dir=`dirname $0` +closed_script_dir="$script_dir/../../jdk/make/closed/autoconf" + +# Create a timestamp as seconds since epoch +TIMESTAMP=`date +%s` + +cat $script_dir/configure.ac | sed -e "s|@DATE_WHEN_GENERATED@|$TIMESTAMP|" | autoconf -W all -I$script_dir - > $script_dir/generated-configure.sh +rm -rf autom4te.cache + +if test -e $closed_script_dir/closed-hook.m4; then + # We have closed sources available; also generate configure script + # with closed hooks compiled in. + cat $script_dir/configure.ac | sed -e "s|@DATE_WHEN_GENERATED@|$TIMESTAMP|" | \ + sed -e "s|AC_DEFUN_ONCE(\[CLOSED_HOOK\])|m4_include([$closed_script_dir/closed-hook.m4])|" | autoconf -W all -I$script_dir - > $closed_script_dir/generated-configure.sh + rm -rf autom4te.cache +fi diff --git a/common/autoconf/basics.m4 b/common/autoconf/basics.m4 new file mode 100644 index 00000000000..370854d45fc --- /dev/null +++ b/common/autoconf/basics.m4 @@ -0,0 +1,485 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN([ADD_JVM_ARG_IF_OK], +[ + # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3) + # If so, then append $1 to $2 + FOUND_WARN=`$3 $1 -version 2>&1 | grep -i warn` + FOUND_VERSION=`$3 $1 -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + $2="[$]$2 $1" + fi +]) + +AC_DEFUN([WHICHCMD], +[ + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="[$]$1" + car="${tmp%% *}" + tmp="[$]$1 EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + WHICHCMD_SPACESAFE(car) + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + $1="$car ${cdr% *}" + else + $1="$car" + fi +]) + +AC_DEFUN([SPACESAFE], +[ + # Fail with message $2 if var $1 contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "[$]$1" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + $1=`$CYGPATH -s -m -a "[$]$1"` + $1=`$CYGPATH -u "[$]$1"` + else + AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"]) + fi + fi +]) + +AC_DEFUN([WHICHCMD_SPACESAFE], +[ + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="[$]$1" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "[$]$1"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + $1="$tmp" +]) + +AC_DEFUN([REMOVE_SYMBOLIC_LINKS], +[ + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + AC_PATH_PROG(READLINK, readlink) + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | grep GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + $1=`$READLINK -f [$]$1` + else + STARTDIR=$PWD + COUNTER=0 + DIR=`dirname [$]$1` + FIL=`basename [$]$1` + while test $COUNTER -lt 20; do + ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $DIR + cd `dirname $ISLINK` + DIR=`pwd` + FIL=`basename $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + $1=$DIR/$FIL + fi + fi +]) + +AC_DEFUN_ONCE([BASIC_INIT], +[ +# Save the original command line. This is passed to us by the wrapper configure script. +AC_SUBST(CONFIGURE_COMMAND_LINE) +DATE_WHEN_CONFIGURED=`LANG=C date` +AC_SUBST(DATE_WHEN_CONFIGURED) + +# Locate the directory of this script. +SCRIPT="[$]0" +REMOVE_SYMBOLIC_LINKS(SCRIPT) +AUTOCONF_DIR=`dirname [$]0` +]) + +AC_DEFUN_ONCE([BASIC_SETUP_PATHS], +[ +# Where is the source? It is located two levels above the configure script. +CURDIR="$PWD" +cd "$AUTOCONF_DIR/../.." +SRC_ROOT="`pwd`" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + SRC_ROOT_LENGTH=`pwd|wc -m` + if test $SRC_ROOT_LENGTH -gt 100; then + AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported]) + fi +fi +AC_SUBST(SRC_ROOT) +cd "$CURDIR" + +SPACESAFE(SRC_ROOT,[the path to the source root]) +SPACESAFE(CURDIR,[the path to the current directory]) +]) + +AC_DEFUN_ONCE([BASIC_SETUP_SEARCHPATH], +[ +if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then + # Add extra search paths on solaris for utilities like ar and as etc... + PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin" +fi +]) + +AC_DEFUN_ONCE([BASIC_SETUP_PATH_SEP], +[ +# For cygwin we need cygpath first, since it is used everywhere. +AC_PATH_PROG(CYGPATH, cygpath) +PATH_SEP=":" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$CYGPATH" = x; then + AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path]) + fi + PATH_SEP=";" +fi +AC_SUBST(PATH_SEP) +]) + +AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR], +[ + +AC_ARG_WITH(conf-name, [AS_HELP_STRING([--with-conf-name], + [use this as the name of the configuration, overriding the generated default])], + [ CONF_NAME=${with_conf_name} ]) + +# Test from where we are running configure, in or outside of src root. +if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then + # We are running configure from the src root. + # Create a default ./build/target-variant-debuglevel output root. + if test "x${CONF_NAME}" = x; then + CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" + fi + OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" + mkdir -p "$OUTPUT_ROOT" + if test ! -d "$OUTPUT_ROOT"; then + AC_MSG_ERROR([Could not create build directory $OUTPUT_ROOT]) + fi +else + # We are running configure from outside of the src dir. + # Then use the current directory as output dir! + # If configuration is situated in normal build directory, just use the build + # directory name as configuration name, otherwise use the complete path. + if test "x${CONF_NAME}" = x; then + CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` + fi + OUTPUT_ROOT="$CURDIR" +fi + +SPACESAFE(OUTPUT_ROOT,[the path to the output root]) + +AC_SUBST(SPEC, $OUTPUT_ROOT/spec.gmk) +AC_SUBST(CONF_NAME, $CONF_NAME) +AC_SUBST(OUTPUT_ROOT, $OUTPUT_ROOT) + +# Most of the probed defines are put into config.h +AC_CONFIG_HEADERS([$OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in]) +# The spec.gmk file contains all variables for the make system. +AC_CONFIG_FILES([$OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in]) +# The spec.sh file contains variables for compare{images|-objects}.sh scrips. +AC_CONFIG_FILES([$OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in]) +# The generated Makefile knows where the spec.gmk is and where the source is. +# You can run make from the OUTPUT_ROOT, or from the top-level Makefile +# which will look for generated configurations +AC_CONFIG_FILES([$OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in]) + +# Save the arguments given to us +echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments +]) + +AC_DEFUN_ONCE([BASIC_SETUP_LOGGING], +[ +# Setup default logging of stdout and stderr to build.log in the output root. +BUILD_LOG='$(OUTPUT_ROOT)/build.log' +BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old' +BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' +AC_SUBST(BUILD_LOG) +AC_SUBST(BUILD_LOG_PREVIOUS) +AC_SUBST(BUILD_LOG_WRAPPER) +]) + + +#%%% Simple tools %%% + +AC_DEFUN([BASIC_CHECK_FIND_DELETE], +[ + # Test if find supports -delete + AC_MSG_CHECKING([if find supports -delete]) + FIND_DELETE="-delete" + + DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) + + echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete + + TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` + if test -f $DELETEDIR/TestIfFindSupportsDelete; then + # No, it does not. + rm $DELETEDIR/TestIfFindSupportsDelete + FIND_DELETE="-exec rm \{\} \+" + AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([yes]) + fi + rmdir $DELETEDIR +]) + +AC_DEFUN([CHECK_NONEMPTY], +[ + # Test that variable $1 is not empty. + if test "" = "[$]$1"; then AC_MSG_ERROR(Could not find translit($1,A-Z,a-z) !); fi +]) + +AC_DEFUN_ONCE([BASIC_SETUP_TOOLS], +[ +# Start with tools that do not need have cross compilation support +# and can be expected to be found in the default PATH. These tools are +# used by configure. Nor are these tools expected to be found in the +# devkit from the builddeps server either, since they are +# needed to download the devkit. +AC_PROG_AWK +CHECK_NONEMPTY(AWK) +AC_PATH_PROG(CAT, cat) +CHECK_NONEMPTY(CAT) +AC_PATH_PROG(CHMOD, chmod) +CHECK_NONEMPTY(CHMOD) +AC_PATH_PROG(CP, cp) +CHECK_NONEMPTY(CP) +AC_PATH_PROG(CPIO, cpio) +CHECK_NONEMPTY(CPIO) +AC_PATH_PROG(CUT, cut) +CHECK_NONEMPTY(CUT) +AC_PATH_PROG(DATE, date) +CHECK_NONEMPTY(DATE) +AC_PATH_PROG(DF, df) +CHECK_NONEMPTY(DF) +AC_PATH_PROG(DIFF, diff) +CHECK_NONEMPTY(DIFF) +# Warning echo is really, really unportable!!!!! Different +# behaviour in bash and dash and in a lot of other shells! +# Use printf for serious work! +AC_PATH_PROG(ECHO, echo) +CHECK_NONEMPTY(ECHO) +AC_PROG_EGREP +CHECK_NONEMPTY(EGREP) +AC_PROG_FGREP +CHECK_NONEMPTY(FGREP) + +AC_PATH_PROG(FIND, find) +CHECK_NONEMPTY(FIND) +BASIC_CHECK_FIND_DELETE +AC_SUBST(FIND_DELETE) + +AC_PROG_GREP +CHECK_NONEMPTY(GREP) +AC_PATH_PROG(HEAD, head) +CHECK_NONEMPTY(HEAD) +AC_PATH_PROG(LN, ln) +CHECK_NONEMPTY(LN) +AC_PATH_PROG(LS, ls) +CHECK_NONEMPTY(LS) +AC_PATH_PROGS(MAKE, [gmake make]) +CHECK_NONEMPTY(MAKE) +MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[[12346789]]'` +if test "x$MAKE_VERSION" = x; then + AC_MSG_ERROR([You must use GNU make 3.81 or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure.]) +fi +AC_PATH_PROG(MKDIR, mkdir) +CHECK_NONEMPTY(MKDIR) +AC_PATH_PROG(MV, mv) +CHECK_NONEMPTY(MV) +AC_PATH_PROGS(NAWK, [nawk gawk awk]) +CHECK_NONEMPTY(NAWK) +AC_PATH_PROG(PRINTF, printf) +CHECK_NONEMPTY(PRINTF) +AC_PATH_PROG(THEPWDCMD, pwd) +AC_PATH_PROG(RM, rm) +CHECK_NONEMPTY(RM) +RM="$RM -f" +AC_PROG_SED +CHECK_NONEMPTY(SED) +AC_PATH_PROG(SH, sh) +CHECK_NONEMPTY(SH) +AC_PATH_PROG(SORT, sort) +CHECK_NONEMPTY(SORT) +AC_PATH_PROG(TAR, tar) +CHECK_NONEMPTY(TAR) +AC_PATH_PROG(TAIL, tail) +CHECK_NONEMPTY(TAIL) +AC_PATH_PROG(TEE, tee) +CHECK_NONEMPTY(TEE) +AC_PATH_PROG(TR, tr) +CHECK_NONEMPTY(TR) +AC_PATH_PROG(TOUCH, touch) +CHECK_NONEMPTY(TOUCH) +AC_PATH_PROG(WC, wc) +CHECK_NONEMPTY(WC) +AC_PATH_PROG(XARGS, xargs) +CHECK_NONEMPTY(XARGS) +AC_PATH_PROG(ZIP, zip) +CHECK_NONEMPTY(ZIP) +AC_PATH_PROG(UNZIP, unzip) +CHECK_NONEMPTY(UNZIP) +AC_PATH_PROG(LDD, ldd) +if test "x$LDD" = "x"; then + # List shared lib dependencies is used for + # debug output and checking for forbidden dependencies. + # We can build without it. + LDD="true" +fi +AC_PATH_PROG(OTOOL, otool) +if test "x$OTOOL" = "x"; then + OTOOL="true" +fi +AC_PATH_PROG(READELF, readelf) +AC_PATH_PROG(EXPR, expr) +CHECK_NONEMPTY(EXPR) +AC_PATH_PROG(FILE, file) +CHECK_NONEMPTY(FILE) +AC_PATH_PROG(HG, hg) +]) + + + +AC_DEFUN_ONCE([BASIC_COMPILE_UNCYGDRIVE], +[ +# When using cygwin, we need a wrapper binary that renames +# /cygdrive/c/ arguments into c:/ arguments and peeks into +# @files and rewrites these too! This wrapper binary is +# called uncygdrive.exe. +UNCYGDRIVE= +if test "x$OPENJDK_BUILD_OS" = xwindows; then + AC_MSG_CHECKING([if uncygdrive can be created]) + UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` + rm -f $OUTPUT_ROOT/uncygdrive* + UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` + cd $OUTPUT_ROOT + $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 + cd $CURDIR + + if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then + AC_MSG_RESULT([no]) + cat $OUTPUT_ROOT/uncygdrive1.log + AC_MSG_ERROR([Could not create $OUTPUT_ROOT/uncygdrive.exe]) + fi + AC_MSG_RESULT([$UNCYGDRIVE]) + AC_MSG_CHECKING([if uncygdrive.exe works]) + cd $OUTPUT_ROOT + $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 + cd $CURDIR + if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then + AC_MSG_RESULT([no]) + cat $OUTPUT_ROOT/uncygdrive2.log + AC_MSG_ERROR([Uncygdrive did not work!]) + fi + AC_MSG_RESULT([yes]) + rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj +fi + +AC_SUBST(UNCYGDRIVE) +]) + + +# Check if build directory is on local disk. +# Argument 1: directory to test +# Argument 2: what to do if it is on local disk +# Argument 3: what to do otherwise (remote disk or failure) +AC_DEFUN([BASIC_CHECK_DIR_ON_LOCAL_DISK], +[ + # df -l lists only local disks; if the given directory is not found then + # a non-zero exit code is given + if $DF -l $1 > /dev/null 2>&1; then + $2 + else + $3 + fi +]) + +AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES], +[ + +AC_MSG_CHECKING([if build directory is on local disk]) +BASIC_CHECK_DIR_ON_LOCAL_DISK($OUTPUT_ROOT, + [OUTPUT_DIR_IS_LOCAL="yes"], + [OUTPUT_DIR_IS_LOCAL="no"]) +AC_MSG_RESULT($OUTPUT_DIR_IS_LOCAL) + +# Check if the user has any old-style ALT_ variables set. +FOUND_ALT_VARIABLES=`env | grep ^ALT_` + +# Before generating output files, test if they exist. If they do, this is a reconfigure. +# Since we can't properly handle the dependencies for this, warn the user about the situation +if test -e $OUTPUT_ROOT/spec.gmk; then + IS_RECONFIGURE=yes +else + IS_RECONFIGURE=no +fi + +if test -e $SRC_ROOT/build/.hide-configure-performance-hints; then + HIDE_PERFORMANCE_HINTS=yes +else + HIDE_PERFORMANCE_HINTS=no + # Hide it the next time around... + $TOUCH $SRC_ROOT/build/.hide-configure-performance-hints > /dev/null 2>&1 +fi + +]) diff --git a/common/autoconf/boot-jdk.m4 b/common/autoconf/boot-jdk.m4 new file mode 100644 index 00000000000..f8204f9c2d2 --- /dev/null +++ b/common/autoconf/boot-jdk.m4 @@ -0,0 +1,295 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# Fixes paths on windows to be mixed mode short. +AC_DEFUN([BOOTJDK_WIN_FIX_PATH], +[ + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + AC_PATH_PROG(CYGPATH, cygpath) + tmp="[$]$1" + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + $1="$tmp" + fi +]) + +AC_DEFUN([BOOTJDK_MISSING_ERROR], +[ + AC_MSG_NOTICE([This might be fixed by explicitely setting --with-boot-jdk]) + AC_MSG_ERROR([Cannot continue]) +]) + +############################################################################### +# +# We need a Boot JDK to bootstrap the build. +# + +AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK], +[ +BOOT_JDK_FOUND=no +AC_ARG_WITH(boot-jdk, [AS_HELP_STRING([--with-boot-jdk], + [path to Boot JDK (used to bootstrap build) @<:@probed@:>@])]) + +if test "x$with_boot_jdk" != x; then + BOOT_JDK=$with_boot_jdk + BOOT_JDK_FOUND=yes +fi +if test "x$BOOT_JDK_FOUND" = xno; then + BDEPS_CHECK_MODULE(BOOT_JDK, boot-jdk, xxx, [BOOT_JDK_FOUND=yes], [BOOT_JDK_FOUND=no]) +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + if test "x$JAVA_HOME" != x; then + if test ! -d "$JAVA_HOME"; then + AC_MSG_NOTICE([Your JAVA_HOME points to a non-existing directory!]) + BOOTJDK_MISSING_ERROR + fi + # Aha, the user has set a JAVA_HOME + # let us use that as the Boot JDK. + BOOT_JDK="$JAVA_HOME" + BOOT_JDK_FOUND=yes + # To be on the safe side, lets check that it is a JDK. + if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then + JAVAC="$BOOT_JDK/bin/javac" + JAVA="$BOOT_JDK/bin/java" + BOOT_JDK_FOUND=yes + else + AC_MSG_NOTICE([Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=[$]JAVA_HOME]) + BOOTJDK_MISSING_ERROR + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + AC_PATH_PROG(JAVAC_CHECK, javac) + AC_PATH_PROG(JAVA_CHECK, java) + BINARY="$JAVAC_CHECK" + if test "x$JAVAC_CHECK" = x; then + BINARY="$JAVA_CHECK" + fi + if test "x$BINARY" != x; then + # So there is a java(c) binary, it might be part of a JDK. + # Lets find the JDK/JRE directory by following symbolic links. + # Linux/GNU systems often have links from /usr/bin/java to + # /etc/alternatives/java to the real JDK binary. + WHICHCMD_SPACESAFE(BINARY,[path to javac]) + REMOVE_SYMBOLIC_LINKS(BINARY) + BOOT_JDK=`dirname $BINARY` + BOOT_JDK=`cd $BOOT_JDK/..; pwd` + if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then + JAVAC=$BOOT_JDK/bin/javac + JAVA=$BOOT_JDK/bin/java + BOOT_JDK_FOUND=yes + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + # Try the MacOSX way. + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home` + if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then + JAVAC=$BOOT_JDK/bin/javac + JAVA=$BOOT_JDK/bin/java + BOOT_JDK_FOUND=yes + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + AC_PATH_PROG(JAVA_CHECK, java) + if test "x$JAVA_CHECK" != x; then + # There is a java in the path. But apparently we have not found a javac + # in the path, since that would have been tested earlier. + if test "x$OPENJDK_TARGET_OS" = xwindows; then + # Now if this is a windows platform. The default installation of a JDK + # actually puts the JRE in the path and keeps the JDK out of the path! + # Go look in the default installation location. + BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1` + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=yes + fi + fi + if test "x$BOOT_JDK_FOUND" = xno; then + HELP_MSG_MISSING_DEPENDENCY([openjdk]) + AC_MSG_NOTICE([Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG]) + BOOTJDK_MISSING_ERROR + fi + else + HELP_MSG_MISSING_DEPENDENCY([openjdk]) + AC_MSG_NOTICE([Could not find a JDK. $HELP_MSG]) + BOOTJDK_MISSING_ERROR + fi +fi + +BOOTJDK_WIN_FIX_PATH(BOOT_JDK) + +# Now see if we can find the rt.jar, or its nearest equivalent. +BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar" +SPACESAFE(BOOT_RTJAR,[the path to the Boot JDK rt.jar (or nearest equivalent)]) + +BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar" +SPACESAFE(BOOT_TOOLSJAR,[the path to the Boot JDK tools.jar (or nearest equivalent)]) + +if test ! -f $BOOT_RTJAR; then + # On MacOSX it is called classes.jar + BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar + if test ! -f $BOOT_RTJAR; then + AC_MSG_NOTICE([Cannot find the rt.jar or its equivalent!]) + AC_MSG_NOTICE([This typically means that configure failed to automatically find a suitable Boot JDK]) + BOOTJDK_MISSING_ERROR + fi + # Remove the .. + BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" + # The tools.jar is part of classes.jar + BOOT_TOOLSJAR="$BOOT_RTJAR" +fi + +AC_SUBST(BOOT_JDK) +AC_SUBST(BOOT_RTJAR) +AC_SUBST(BOOT_TOOLSJAR) +AC_MSG_CHECKING([for Boot JDK]) +AC_MSG_RESULT([$BOOT_JDK]) +AC_MSG_CHECKING([for Boot rt.jar]) +AC_MSG_RESULT([$BOOT_RTJAR]) +AC_MSG_CHECKING([for Boot tools.jar]) +AC_MSG_RESULT([$BOOT_TOOLSJAR]) + +# Use the java tool from the Boot JDK. +AC_MSG_CHECKING([for java in Boot JDK]) +JAVA=$BOOT_JDK/bin/java +if test ! -x $JAVA; then + AC_MSG_NOTICE([Could not find a working java]) + BOOTJDK_MISSING_ERROR +fi +BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` +AC_MSG_RESULT([yes $BOOT_JDK_VERSION]) +AC_SUBST(JAVA) + +# Extra M4 quote needed to protect [] in grep expression. +[FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'`] +if test "x$FOUND_VERSION_78" = x; then + HELP_MSG_MISSING_DEPENDENCY([openjdk]) + AC_MSG_NOTICE([Your boot-jdk must be version 7 or 8. $HELP_MSG]) + BOOTJDK_MISSING_ERROR +fi + +# When compiling code to be executed by the Boot JDK, force jdk7 compatibility. +BOOT_JDK_SOURCETARGET="-source 7 -target 7" +AC_SUBST(BOOT_JDK_SOURCETARGET) + +# Use the javac tool from the Boot JDK. +AC_MSG_CHECKING([for javac in Boot JDK]) +JAVAC=$BOOT_JDK/bin/javac +if test ! -x $JAVAC; then + AC_MSG_ERROR([Could not find a working javac]) +fi +AC_MSG_RESULT(yes) +AC_SUBST(JAVAC) +AC_SUBST(JAVAC_FLAGS) + +# Use the javah tool from the Boot JDK. +AC_MSG_CHECKING([for javah in Boot JDK]) +JAVAH=$BOOT_JDK/bin/javah +if test ! -x $JAVAH; then + AC_MSG_NOTICE([Could not find a working javah]) + BOOTJDK_MISSING_ERROR +fi +AC_MSG_RESULT(yes) +AC_SUBST(JAVAH) + +# Use the jar tool from the Boot JDK. +AC_MSG_CHECKING([for jar in Boot JDK]) +JAR=$BOOT_JDK/bin/jar +if test ! -x $JAR; then + AC_MSG_NOTICE([Could not find a working jar]) + BOOTJDK_MISSING_ERROR +fi +AC_SUBST(JAR) +AC_MSG_RESULT(yes) + +# Use the rmic tool from the Boot JDK. +AC_MSG_CHECKING([for rmic in Boot JDK]) +RMIC=$BOOT_JDK/bin/rmic +if test ! -x $RMIC; then + AC_MSG_NOTICE([Could not find a working rmic]) + BOOTJDK_MISSING_ERROR +fi +AC_SUBST(RMIC) +AC_MSG_RESULT(yes) + +# Use the native2ascii tool from the Boot JDK. +AC_MSG_CHECKING([for native2ascii in Boot JDK]) +NATIVE2ASCII=$BOOT_JDK/bin/native2ascii +if test ! -x $NATIVE2ASCII; then + AC_MSG_NOTICE([Could not find a working native2ascii]) + BOOTJDK_MISSING_ERROR +fi +AC_MSG_RESULT(yes) +AC_SUBST(NATIVE2ASCII) +]) + +AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS], +[ +############################################################################## +# +# Specify options for anything that is run with the Boot JDK. +# +AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs], + [specify JVM arguments to be passed to all invocations of the Boot JDK, overriding the default values, + e.g --with-boot-jdk-jvmargs="-Xmx8G -enableassertions"])]) + +if test "x$with_boot_jdk_jvmargs" = x; then + # Not all JVM:s accept the same arguments on the command line. + # OpenJDK specific increase in thread stack for JDK build, + # well more specifically, when running javac. + if test "x$BUILD_NUM_BITS" = x32; then + STACK_SIZE=768 + else + # Running Javac on a JVM on a 64-bit machine, the stack takes more space + # since 64-bit pointers are pushed on the stach. Apparently, we need + # to increase the stack space when javacing the JDK.... + STACK_SIZE=1536 + fi + + # Minimum amount of heap memory. + ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs,[$JAVA]) + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + # Why does macosx need more heap? Its the huge JDK batch. + ADD_JVM_ARG_IF_OK([-Xmx1600M],boot_jdk_jvmargs,[$JAVA]) + else + ADD_JVM_ARG_IF_OK([-Xmx1100M],boot_jdk_jvmargs,[$JAVA]) + fi + # When is adding -client something that speeds up the JVM? + # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA]) + ADD_JVM_ARG_IF_OK([-XX:PermSize=32m],boot_jdk_jvmargs,[$JAVA]) + ADD_JVM_ARG_IF_OK([-XX:MaxPermSize=160m],boot_jdk_jvmargs,[$JAVA]) + ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs,[$JAVA]) + # Disable special log output when a debug build is used as Boot JDK... + ADD_JVM_ARG_IF_OK([-XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput],boot_jdk_jvmargs,[$JAVA]) +fi + +AC_SUBST(BOOT_JDK_JVMARGS, $boot_jdk_jvmargs) +]) diff --git a/common/autoconf/build-aux/autoconf-config.guess b/common/autoconf/build-aux/autoconf-config.guess new file mode 100644 index 00000000000..e69905d5201 --- /dev/null +++ b/common/autoconf/build-aux/autoconf-config.guess @@ -0,0 +1,1531 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2008-01-23' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + echo "int main(){}" > $dummy.c + if test "`$CC_FOR_BUILD -o $dummy $dummy.c; file $dummy | grep -c x86_64`" = 1 ; then + UNAME_PROCESSOR=x86_64 + fi + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/common/autoconf/build-aux/config.guess b/common/autoconf/build-aux/config.guess index e69905d5201..389eedfc1d1 100644 --- a/common/autoconf/build-aux/config.guess +++ b/common/autoconf/build-aux/config.guess @@ -1,1531 +1,38 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 -# Free Software Foundation, Inc. - -timestamp='2008-01-23' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. +#!/bin/sh # -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. # -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). # -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. -me=`echo "$0" | sed -e 's,.*/,,'` +# This is a wrapper for the config.guess from autoconf. The latter does not properly +# detect amd64 systems, since that require isainfo instead of uname. Instead of patching +# the autoconf system (which might easily get lost in a future update), we wrap it and +# fix the broken property, if needed. -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 +DIR=`dirname $0` +OUT=`. $DIR/autoconf-config.guess` +echo $OUT | grep i386-pc-solaris > /dev/null 2> /dev/null +if test $? = 0; then + # isainfo -n returns either i386 or amd64 on Intel systems + REAL_CPU=`isainfo -n` + OUT=$REAL_CPU`echo $OUT | sed -e 's/[^-]*//'` fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[456]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:[3456]*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - EM64T | authenticamd) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build - echo "int main(){}" > $dummy.c - if test "`$CC_FOR_BUILD -o $dummy $dummy.c; file $dummy | grep -c x86_64`" = 1 ; then - UNAME_PROCESSOR=x86_64 - fi - case $UNAME_PROCESSOR in - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: +echo $OUT diff --git a/common/autoconf/build-performance.m4 b/common/autoconf/build-performance.m4 new file mode 100644 index 00000000000..964f890b792 --- /dev/null +++ b/common/autoconf/build-performance.m4 @@ -0,0 +1,378 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN([BPERF_CHECK_CORES], +[ + AC_MSG_CHECKING([for number of cores]) + NUM_CORES=1 + FOUND_CORES=no + + if test -f /proc/cpuinfo; then + # Looks like a Linux system + NUM_CORES=`cat /proc/cpuinfo | grep -c processor` + FOUND_CORES=yes + fi + + if test -x /usr/sbin/psrinfo; then + # Looks like a Solaris system + NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` + FOUND_CORES=yes + fi + + if test -x /usr/sbin/system_profiler; then + # Looks like a MacOSX system + NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'` + FOUND_CORES=yes + fi + + if test "x$build_os" = xwindows; then + NUM_CORES=4 + fi + + # For c/c++ code we run twice as many concurrent build + # jobs than we have cores, otherwise we will stall on io. + CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` + + if test "x$FOUND_CORES" = xyes; then + AC_MSG_RESULT([$NUM_CORES]) + else + AC_MSG_RESULT([could not detect number of cores, defaulting to 1!]) + fi + +]) + +AC_DEFUN([BPERF_CHECK_MEMORY_SIZE], +[ + AC_MSG_CHECKING([for memory size]) + # Default to 1024MB + MEMORY_SIZE=1024 + FOUND_MEM=no + + if test -f /proc/cpuinfo; then + # Looks like a Linux system + MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print [$]2}'` + MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` + FOUND_MEM=yes + fi + + if test -x /usr/sbin/prtconf; then + # Looks like a Solaris system + MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print [$]3 }'` + FOUND_MEM=yes + fi + + if test -x /usr/sbin/system_profiler; then + # Looks like a MacOSX system + MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print [$]2}'` + MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` + FOUND_MEM=yes + fi + + if test "x$build_os" = xwindows; then + MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'` + FOUND_MEM=yes + fi + + if test "x$FOUND_MEM" = xyes; then + AC_MSG_RESULT([$MEMORY_SIZE MB]) + else + AC_MSG_RESULT([could not detect memory size defaulting to 1024MB!]) + fi +]) + +AC_DEFUN_ONCE([BPERF_SETUP_BUILD_CORES], +[ +# How many cores do we have on this build system? +AC_ARG_WITH(num-cores, [AS_HELP_STRING([--with-num-cores], + [number of cores in the build system, e.g. --with-num-cores=8 @<:@probed@:>@])]) +if test "x$with_num_cores" = x; then + # The number of cores were not specified, try to probe them. + BPERF_CHECK_CORES +else + NUM_CORES=$with_num_cores + CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` +fi +AC_SUBST(NUM_CORES) +AC_SUBST(CONCURRENT_BUILD_JOBS) +]) + +AC_DEFUN_ONCE([BPERF_SETUP_BUILD_MEMORY], +[ +# How much memory do we have on this build system? +AC_ARG_WITH(memory-size, [AS_HELP_STRING([--with-memory-size], + [memory (in MB) available in the build system, e.g. --with-memory-size=1024 @<:@probed@:>@])]) +if test "x$with_memory_size" = x; then + # The memory size was not specified, try to probe it. + BPERF_CHECK_MEMORY_SIZE +else + MEMORY_SIZE=$with_memory_size +fi +AC_SUBST(MEMORY_SIZE) +]) + +AC_DEFUN([BPERF_SETUP_CCACHE], +[ + AC_ARG_ENABLE([ccache], + [AS_HELP_STRING([--disable-ccache], + [use ccache to speed up recompilations @<:@enabled@:>@])], + [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes]) + if test "x$ENABLE_CCACHE" = xyes; then + AC_PATH_PROG(CCACHE, ccache) + else + AC_MSG_CHECKING([for ccache]) + AC_MSG_RESULT([explicitly disabled]) + CCACHE= + fi + AC_SUBST(CCACHE) + + AC_ARG_WITH([ccache-dir], + [AS_HELP_STRING([--with-ccache-dir], + [where to store ccache files @<:@~/.ccache@:>@])]) + + if test "x$with_ccache_dir" != x; then + # When using a non home ccache directory, assume the use is to share ccache files + # with other users. Thus change the umask. + SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" + fi + CCACHE_FOUND="" + if test "x$CCACHE" != x; then + BPERF_SETUP_CCACHE_USAGE + fi +]) + +AC_DEFUN([BPERF_SETUP_CCACHE_USAGE], +[ + if test "x$CCACHE" != x; then + CCACHE_FOUND="true" + # Only use ccache if it is 3.1.4 or later, which supports + # precompiled headers. + AC_MSG_CHECKING([if ccache supports precompiled headers]) + HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null` + if test "x$HAS_GOOD_CCACHE" = x; then + AC_MSG_RESULT([no, disabling ccache]) + CCACHE= + else + AC_MSG_RESULT([yes]) + AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers]) + PUSHED_FLAGS="$CXXFLAGS" + CXXFLAGS="-fpch-preprocess $CXXFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no]) + CXXFLAGS="$PUSHED_FLAGS" + if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no, disabling ccaching of precompiled headers]) + CCACHE= + fi + fi + fi + + if test "x$CCACHE" != x; then + CCACHE_SLOPPINESS=time_macros + CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" + CCACHE_FLAGS=-fpch-preprocess + + if test "x$SET_CCACHE_DIR" != x; then + mkdir -p $CCACHE_DIR > /dev/null 2>&1 + chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 + fi + fi +]) + +AC_DEFUN_ONCE([BPERF_SETUP_PRECOMPILED_HEADERS], +[ + +############################################################################### +# +# Can the C/C++ compiler use precompiled headers? +# +AC_ARG_ENABLE([precompiled-headers], [AS_HELP_STRING([--disable-precompiled-headers], + [use precompiled headers when compiling C++ @<:@enabled@:>@])], + [ENABLE_PRECOMPH=${enable_precompiled-headers}], [ENABLE_PRECOMPH=yes]) + +USE_PRECOMPILED_HEADER=1 +if test "x$ENABLE_PRECOMPH" = xno; then + USE_PRECOMPILED_HEADER=0 +fi + +if test "x$ENABLE_PRECOMPH" = xyes; then + # Check that the compiler actually supports precomp headers. + if test "x$GCC" = xyes; then + AC_MSG_CHECKING([that precompiled headers work]) + echo "int alfa();" > conftest.h + $CXX -x c++-header conftest.h -o conftest.hpp.gch + if test ! -f conftest.hpp.gch; then + echo Precompiled header is not working! + USE_PRECOMPILED_HEADER=0 + AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([yes]) + fi + rm -f conftest.h + fi +fi + +AC_SUBST(USE_PRECOMPILED_HEADER) +]) + + +AC_DEFUN_ONCE([BPERF_SETUP_SMART_JAVAC], +[ +AC_ARG_WITH(server-java, [AS_HELP_STRING([--with-server-java], + [use this java binary for running the javac background server and other long running java tasks in the build process, + e.g. ---with-server-java="/opt/jrockit/bin/java -server"])]) + +if test "x$with_server_java" != x; then + SERVER_JAVA="$with_server_java" + FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" = x; then + AC_MSG_ERROR([Could not execute server java: $SERVER_JAVA]) + fi +else + SERVER_JAVA="" + # Hotspot specific options. + ADD_JVM_ARG_IF_OK([-XX:+UseParallelOldGC],SERVER_JAVA,[$JAVA]) + ADD_JVM_ARG_IF_OK([-verbosegc],SERVER_JAVA,[$JAVA]) + # JRockit specific options. + ADD_JVM_ARG_IF_OK([-Xverbose:gc],SERVER_JAVA,[$JAVA]) + SERVER_JAVA="$JAVA $SERVER_JAVA" +fi +AC_SUBST(SERVER_JAVA) + +AC_MSG_CHECKING([whether to use shared server for javac]) +AC_ARG_ENABLE([javac-server], [AS_HELP_STRING([--enable-javac-server], + [enable the shared javac server during the build process @<:@disabled@:>@])], + [ENABLE_JAVAC_SERVER="${enableval}"], [ENABLE_JAVAC_SERVER='no']) +AC_MSG_RESULT([$ENABLE_JAVAC_SERVER]) +if test "x$ENABLE_JAVAC_SERVER" = xyes; then + JAVAC_USE_REMOTE=true + JAVAC_SERVERS="$OUTPUT_ROOT/javacservers" +else + JAVAC_USE_REMOTE=false + JAVAC_SERVERS= +fi +AC_SUBST(JAVAC_USE_REMOTE) +AC_SUBST(JAVAC_SERVERS) + +AC_ARG_WITH(javac-server-cores, [AS_HELP_STRING([--with-javac-server-cores], + [use at most this number of concurrent threads on the javac server @<:@probed@:>@])]) +if test "x$with_javac_server_cores" != x; then + JAVAC_SERVER_CORES="$with_javac_server_cores" +else + if test "$NUM_CORES" -gt 16; then + # We set this arbitrary limit because we want to limit the heap + # size of the javac server. + # In the future we will make the javac compilers in the server + # share more and more state, thus enabling us to use more and + # more concurrent threads in the server. + JAVAC_SERVER_CORES="16" + else + JAVAC_SERVER_CORES="$NUM_CORES" + fi + + if test "$MEMORY_SIZE" -gt "17000"; then + MAX_HEAP_MEM=10000 + ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xms10G -Xmx10G],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn2G],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "10000"; then + MAX_HEAP_MEM=6000 + ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xms6G -Xmx6G],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn1G],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "5000"; then + MAX_HEAP_MEM=3000 + ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xms1G -Xmx3G],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "3800"; then + MAX_HEAP_MEM=2500 + ADD_JVM_ARG_IF_OK([-Xms1G -Xmx2500M],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "1900"; then + MAX_HEAP_MEM=1200 + ADD_JVM_ARG_IF_OK([-Xms700M -Xmx1200M],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) + elif test "$MEMORY_SIZE" -gt "1000"; then + MAX_HEAP_MEM=900 + ADD_JVM_ARG_IF_OK([-Xms400M -Xmx900M],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA]) + else + MAX_HEAP_MEM=512 + ADD_JVM_ARG_IF_OK([-Xms256M -Xmx512M],SERVER_JAVA,[$SERVER_JAVA]) + ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA]) + fi + + MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501` + if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then + AC_MSG_CHECKING([if number of server cores must be reduced]) + JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP" + AC_MSG_RESULT([yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB]) + fi +fi +AC_SUBST(JAVAC_SERVER_CORES) + +AC_MSG_CHECKING([whether to track dependencies between Java packages]) +AC_ARG_ENABLE([javac-deps], [AS_HELP_STRING([--enable-javac-deps], + [enable the dependency tracking between Java packages @<:@disabled@:>@])], + [ENABLE_JAVAC_DEPS="${enableval}"], [ENABLE_JAVAC_DEPS='no']) +AC_MSG_RESULT([$ENABLE_JAVAC_DEPS]) +if test "x$ENABLE_JAVAC_DEPS" = xyes; then + JAVAC_USE_DEPS=true +else + JAVAC_USE_DEPS=false +fi +AC_SUBST(JAVAC_USE_DEPS) + +AC_MSG_CHECKING([whether to use multiple cores for javac compilation]) +AC_ARG_ENABLE([javac-multi-core], [AS_HELP_STRING([--enable-javac-multi-core], + [compile Java packages concurrently @<:@disabled@:>@])], + [ENABLE_JAVAC_MULTICORE="${enableval}"], [ENABLE_JAVAC_MULTICORE='no']) +AC_MSG_RESULT([$ENABLE_JAVAC_MULTICORE]) +if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then + JAVAC_USE_MODE=MULTI_CORE_CONCURRENT +else + JAVAC_USE_MODE=SINGLE_THREADED_BATCH + if test "x$ENABLE_JAVAC_DEPS" = xyes; then + AC_MSG_WARN([Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options.]) + AC_MSG_WARN([Disabling dependency tracking for you now.]) + JAVAC_USE_DEPS=false + fi + if test "x$ENABLE_JAVAC_SERVER" = xyes; then + AC_MSG_WARN([The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options.]) + AC_MSG_WARN([Disabling javac server for you now.]) + JAVAC_USE_REMOTE=false + fi +fi +AC_SUBST(JAVAC_USE_MODE) + +AC_MSG_CHECKING([whether to use sjavac]) +AC_ARG_ENABLE([sjavac], [AS_HELP_STRING([--enable-sjavac], + [use sjavac to do fast incremental compiles @<:@disabled@:>@])], + [ENABLE_SJAVAC="${enableval}"], [ENABLE_SJAVAC='no']) +AC_MSG_RESULT([$ENABLE_SJAVAC]) +AC_SUBST(ENABLE_SJAVAC) + +]) diff --git a/common/autoconf/builddeps.conf.example b/common/autoconf/builddeps.conf.example index f285ffb4a29..d97033611f7 100644 --- a/common/autoconf/builddeps.conf.example +++ b/common/autoconf/builddeps.conf.example @@ -31,11 +31,11 @@ # Translate a configuration triplet/quadruplet into something # known by this configuration file. -# If no rewrite was found, then rewritten_host=${host} +# If no rewrite was found, then rewritten_target=${OPENJDK_TARGET_SYSTEM} REWRITE_i686_pc_linux_gnu=i686-unknown-linux-gnu REWRITE_i386_pc_solaris2_10=i686-sun-solaris2_10 -# The needed cups builddeps are host independent header files. +# The needed cups builddeps are platform independent header files. # I.e. they need not be part of the devkit. builddep_cups=lib/cups_1_3_9.zip builddep_cups_CFLAGS=-I${depdir} @@ -44,10 +44,10 @@ builddep_cups_CFLAGS=-I${depdir} # for the build platform. builddep_devkit=sdk/sdk-${rewritten_build}-20110921.tar.gz -# The freetype dependency is partyl host dependent. +# The freetype dependency is partly platform dependent. # It is stored inside the sys-root. builddep_freetype2=sdk/sdk-${rewritten_build}-20110921.tar.gz -builddep_freetype2_CFLAGS=-I${depdir}/${rewritten_host}/sys-root/usr/include/freetype2 +builddep_freetype2_CFLAGS=-I${depdir}/${rewritten_target}/sys-root/usr/include/freetype2 builddep_freetype2_LIBS=-lfreetype # There are many other build dependencies, but they are implicitly diff --git a/common/autoconf/builddeps.m4 b/common/autoconf/builddeps.m4 index 1be92ecf870..31797070da1 100644 --- a/common/autoconf/builddeps.m4 +++ b/common/autoconf/builddeps.m4 @@ -23,7 +23,7 @@ # questions. # -AC_DEFUN([BDEPS_SCAN_FOR_BUILDDEPS], +AC_DEFUN_ONCE([BDEPS_SCAN_FOR_BUILDDEPS], [ define(LIST_OF_BUILD_DEPENDENCIES,) if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then @@ -50,27 +50,27 @@ AC_DEFUN([BDEPS_SCAN_FOR_BUILDDEPS], AC_MSG_ERROR([Could not find any builddeps.conf at all!]) fi fi - # Create build and host names that use _ instead of "-" and ".". + # Create build and target names that use _ instead of "-" and ".". # This is necessary to use them in variable names. - build_var=`echo ${build} | tr '-' '_' | tr '.' '_'` - host_var=`echo ${host} | tr '-' '_' | tr '.' '_'` - # Extract rewrite information for build and host + build_var=`echo ${OPENJDK_BUILD_SYSTEM} | tr '-' '_' | tr '.' '_'` + target_var=`echo ${OPENJDK_TARGET_SYSTEM} | tr '-' '_' | tr '.' '_'` + # Extract rewrite information for build and target eval rewritten_build=\${REWRITE_${build_var}} if test "x$rewritten_build" = x; then - rewritten_build=${build} + rewritten_build=${OPENJDK_BUILD_SYSTEM} echo Build stays the same $rewritten_build else echo Rewriting build for builddeps into $rewritten_build fi - eval rewritten_host=\${REWRITE_${host_var}} - if test "x$rewritten_host" = x; then - rewritten_host=${host} - echo Host stays the same $rewritten_host + eval rewritten_target=\${REWRITE_${target_var}} + if test "x$rewritten_target" = x; then + rewritten_target=${OPENJDK_TARGET_SYSTEM} + echo Target stays the same $rewritten_target else - echo Rewriting host for builddeps into $rewritten_host + echo Rewriting target for builddeps into $rewritten_target fi rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` - rewritten_host_var=`echo ${rewritten_host} | tr '-' '_' | tr '.' '_'` + rewritten_target_var=`echo ${rewritten_target} | tr '-' '_' | tr '.' '_'` fi AC_CHECK_PROGS(BDEPS_UNZIP, [7z unzip]) if test "x$BDEPS_UNZIP" = x7z; then @@ -127,11 +127,11 @@ AC_DEFUN([BDEPS_CHECK_MODULE], if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then # Source the builddeps file again, to make sure it uses the latest variables! . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_$2_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} + # Look for a target and build machine specific resource! + eval resource=\${builddep_$2_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_$2_HOST_${rewritten_host_var}} + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_$2_TARGET_${rewritten_target_var}} fi if test "x$resource" = x; then # Ok, lets instead look for a build specific resource @@ -228,3 +228,33 @@ AC_DEFUN([BDEPS_FETCH], $5=$installdir fi ]) + +AC_DEFUN_ONCE([BDEPS_CONFIGURE_BUILDDEPS], +[ +AC_ARG_WITH(builddeps-conf, [AS_HELP_STRING([--with-builddeps-conf], + [use this configuration file for the builddeps])]) + +AC_ARG_WITH(builddeps-server, [AS_HELP_STRING([--with-builddeps-server], + [download and use build dependencies from this server url, e.g. --with-builddeps-server=ftp://example.com/dir])]) + +AC_ARG_WITH(builddeps-dir, [AS_HELP_STRING([--with-builddeps-dir], + [store downloaded build dependencies here @<:@d/localhome/builddeps@:>@])], + [], + [with_builddeps_dir=/localhome/builddeps]) + +AC_ARG_WITH(builddeps-group, [AS_HELP_STRING([--with-builddeps-group], + [chgrp the downloaded build dependencies to this group])]) + +AC_ARG_ENABLE([list-builddeps], [AS_HELP_STRING([--enable-list-builddeps], + [list all build dependencies known to the configure script])], + [LIST_BUILDDEPS="${enableval}"], [LIST_BUILDDEPS='no']) + +if test "x$LIST_BUILDDEPS" = xyes; then + echo + echo List of build dependencies known to the configure script, + echo that can be used in builddeps.conf files: + cat $AUTOCONF_DIR/*.ac $AUTOCONF_DIR/*.m4 | grep BDEPS_CHECK_MODUL[E]\( | cut -f 2 -d ',' | tr -d ' ' | sort + echo + exit 1 +fi +]) diff --git a/common/autoconf/configure b/common/autoconf/configure index 68f93765ea6..85861c9ce1b 100644 --- a/common/autoconf/configure +++ b/common/autoconf/configure @@ -1,16781 +1,121 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for openjdk version-0.1. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## +#!/bin/sh -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: build-infra-dev@openjdk.java.net about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='openjdk' -PACKAGE_TARNAME='openjdk' -PACKAGE_VERSION='version-0.1' -PACKAGE_STRING='openjdk version-0.1' -PACKAGE_BUGREPORT='build-infra-dev@openjdk.java.net' -PACKAGE_URL='' - -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='LTLIBOBJS -LIBOBJS -CACERTS_FILE -TEST_IN_BUILD -SALIB_NAME -OS_VERSION_MICRO -OS_VERSION_MINOR -OS_VERSION_MAJOR -LIBCXX -LDFLAGS_JDKEXE_SUFFIX -LDFLAGS_JDKLIB_SUFFIX -LDFLAGS_JDKEXE -LDFLAGS_JDKLIB -CXXFLAGS_JDKEXE -CXXFLAGS_JDKLIB -CFLAGS_JDKEXE -CFLAGS_JDKLIB -PACKAGE_PATH -IMAGES_MAKE_ARGS -IMAGES_OUTPUTDIR -JDK_MAKE_ARGS -JDK_OUTPUTDIR -HOTSPOT_MAKE_ARGS -HOTSPOT_DIST -HOTSPOT_OUTPUTDIR -JAXWS_MAKE_ARGS -JAXWS_DIST -JAXWS_OUTPUTDIR -JAXP_MAKE_ARGS -JAXP_DIST -JAXP_OUTPUTDIR -CORBA_MAKE_ARGS -CORBA_DIST -CORBA_OUTPUTDIR -LANGTOOLS_MAKE_ARGS -LANGTOOLS_DIST -LANGTOOLS_OUTPUTDIR -CXX_FLAG_DEPS -C_FLAG_DEPS -CXX_O_FLAG_NONE -CXX_O_FLAG_NORM -CXX_O_FLAG_HI -CXX_O_FLAG_HIGHEST -C_O_FLAG_NONE -C_O_FLAG_NORM -C_O_FLAG_HI -C_O_FLAG_HIGHEST -DISABLE_NIMBUS -GENERATE_DOCS -ENABLE_DOCS -LIBDL -LIBM -USE_EXTERNAL_LIBZ -USE_EXTERNAL_LIBGIF -USE_EXTERNAL_LIBJPEG -PULSE_LIBS -PULSE_CFLAGS -LIBPULSE_LIBS -LIBPULSE_CFLAGS -ALSA_LIBS -ALSA_CFLAGS -FREETYPE2_LIB_PATH -USING_SYSTEM_FT_LIB -FREETYPE2_LIBS -FREETYPE2_CFLAGS -CUPS_LIBS -CUPS_CFLAGS -OPENWIN_HOME -X_EXTRA_LIBS -X_LIBS -X_PRE_LIBS -X_CFLAGS -XMKMF -JAVAC_USE_MODE -JAVAC_USE_DEPS -JAVAC_SERVER_CORES -JAVAC_SERVERS -JAVAC_USE_REMOTE -SERVER_JAVA -BOOT_JDK_JVMARGS -OVERRIDE_SRC_ROOT -ADD_SRC_ROOT -NATIVE2ASCII -RMIC -JAR -JAVAH -JAVAC_FLAGS -JAVAC -BOOT_JDK_SOURCETARGET -JAVA -BOOT_TOOLSJAR -BOOT_RTJAR -BOOT_JDK -JAVA_CHECK -JAVAC_CHECK -ENDIAN -POST_MCS_CMD -POST_STRIP_CMD -SET_SHARED_LIBRARY_ORIGIN -CXX_FLAG_REORDER -C_FLAG_REORDER -SET_SHARED_LIBRARY_MAPFILE -SET_SHARED_LIBRARY_NAME -SHARED_LIBRARY_FLAGS -EXE_SUFFIX -STATIC_LIBRARY_SUFFIX -SHARED_LIBRARY_SUFFIX -LIBRARY_PREFIX -STATIC_LIBRARY -SHARED_LIBRARY -OBJ_SUFFIX -USE_PRECOMPILED_HEADER -ARCH_DATA_MODEL -LP64 -BUILD_LOG_WRAPPER -BUILD_LOG -CCACHE -UNCYGDRIVE -MCS -STRIP -NM -ASFLAGS -AS -CXXCPP -CPP -COMPILER_TYPE -RC_FLAGS -DUMPBIN -WINAR -RC -MT -WINLD -ARFLAGS -AR -LDEXECXX -LDCXX -LDEXE -LD -ac_ct_OBJC -OBJCFLAGS -OBJC -ac_ct_CXX -CXXFLAGS -CXX -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -HOSTCXX -HOSTCC -HOST_CXX -HOST_CC -DEFINE_CROSS_COMPILE_ARCH -AR_OUT_OPTION -LD_OUT_OPTION -EXE_OUT_OPTION -CC_OUT_OPTION -SYS_ROOT -BDEPS_FTP -BDEPS_UNZIP -PKG_CONFIG -JDK_TOPDIR -HOTSPOT_TOPDIR -JAXWS_TOPDIR -JAXP_TOPDIR -CORBA_TOPDIR -LANGTOOLS_TOPDIR -OUTPUT_ROOT -CONF_NAME -SPEC -MSVCR100DLL -CHECK_FOR_VCINSTALLDIR -SETUPDEVENV -COOKED_BUILD_NUMBER -FULL_VERSION -RELEASE -JDK_VERSION -RUNTIME_NAME -COPYRIGHT_YEAR -COMPANY_NAME -JDK_RC_PLATFORM_NAME -PRODUCT_SUFFIX -PRODUCT_NAME -LAUNCHER_NAME -MILESTONE -JDK_BUILD_NUMBER -JDK_UPDATE_VERSION -JDK_MICRO_VERSION -JDK_MINOR_VERSION -JDK_MAJOR_VERSION -BUILD_VARIANT_RELEASE -DEBUG_CLASSFILES -FASTDEBUG -VARIANT -DEBUG_LEVEL -JVM_VARIANT_ZEROSHARK -JVM_VARIANT_ZERO -JVM_VARIANT_KERNEL -JVM_VARIANT_CLIENT -JVM_VARIANT_SERVER -JVM_VARIANTS -BUILD_HEADLESS_ONLY -BUILD_HEADLESS -SUPPORT_HEADFUL -SUPPORT_HEADLESS -JDK_VARIANT -MINIMIZE_RAM_USAGE -JAVASE_EMBEDDED -JIGSAW -SET_OPENJDK -PATH_SEP -CYGPATH -SRC_ROOT -MEMORY_SIZE -CONCURRENT_BUILD_JOBS -NUM_CORES -DATE_WHEN_CONFIGURED -REQUIRED_OS_VERSION -REQUIRED_OS_NAME -LEGACY_BUILD_CPU3 -LEGACY_BUILD_CPU2 -LEGACY_BUILD_CPU1 -BUILD_CPU_ENDIAN -BUILD_CPU_BITS -BUILD_CPU_ARCH -BUILD_CPU -LEGACY_BUILD_OS_API -BUILD_OS_API -BUILD_OS_FAMILY -BUILD_OS -LEGACY_HOST_CPU3 -LEGACY_HOST_CPU2 -LEGACY_HOST_CPU1 -HOST_CPU_ENDIAN -HOST_CPU_BITS -HOST_CPU_ARCH -HOST_CPU -LEGACY_HOST_OS_API -HOST_OS_API -HOST_OS_FAMILY -HOST_OS -BUILD -HOST -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -HG -FILE -EXPR -READELF -OTOOL -LDD -UNZIP -ZIP -XARGS -WC -TOUCH -TR -TEE -TAIL -TAR -SORT -SH -SED -RM -THEPWDCMD -PRINTF -NAWK -MV -MKDIR -MAKE -LS -LN -HEAD -FIND_DELETE -FIND -FGREP -EGREP -GREP -ECHO -DIFF -DF -DATE -CUT -CPIO -CP -CHMOD -CAT -AWK -READLINK -CONFIGURE_COMMAND_LINE -PKGHANDLER -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -with_data_model -with_num_cores -with_memory_size -enable_openjdk_only -enable_jigsaw -with_jdk_variant -enable_headful -with_jvm_variants -enable_debug -with_debug_level -with_msvcr100dll -with_builddeps_conf -with_builddeps_server -with_builddeps_dir -with_builddeps_group -enable_list_builddeps -with_sys_root -enable_ccache -with_ccache_dir -enable_precompiled_headers -with_boot_jdk -with_add_source_root -with_override_source_root -with_adds_and_overrides -with_override_langtools -with_override_corba -with_override_jaxp -with_override_jaxws -with_override_hotspot -with_override_jdk -with_boot_jdk_jvmargs -with_server_java -enable_javac_server -with_javac_server_cores -enable_javac_deps -enable_javac_multi_core -enable_macosx_runtime_support -with_x -with_cups -with_cups_include -with_cups_lib -with_freetype -with_alsa -with_alsa_include -with_alsa_lib -with_pulse -with_pulse_include -with_pulse_lib -enable_docs -enable_nimbus -enable_static_link_stdc__ -enable_hotspot_test_in_build -with_cacerts_file -' - ac_precious_vars='build_alias -host_alias -target_alias -PKG_CONFIG -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CXX -CXXFLAGS -CCC -OBJC -OBJCFLAGS -CPP -CXXCPP -XMKMF -FREETYPE2_CFLAGS -FREETYPE2_LIBS -ALSA_CFLAGS -ALSA_LIBS -LIBPULSE_CFLAGS -LIBPULSE_LIBS' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures openjdk version-0.1 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/openjdk] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -X features: - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of openjdk version-0.1:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-openjdk-only build OpenJDK regardless of the presence of closed - repositories [disabled] - --enable-jigsaw build Jigsaw images (not yet available) [disabled] - --disable-headful build headful support (graphical UI support) - [enabled] - --enable-debug set the debug level to fastdebug (shorthand for - --with-debug-level=fastdebug) [disabled] - --enable-list-builddeps list all build dependencies known to the configure - script - --disable-ccache use ccache to speed up recompilations [enabled] - --disable-precompiled-headers - use precompiled headers when compiling C++ [enabled] - --enable-javac-server enable the shared javac server during the build - process [disabled] - --enable-javac-deps enable the dependency tracking between Java packages - [disabled] - --enable-javac-multi-core - compile Java packages concurrently [disabled] - --disable-macosx-runtime-support - disable the use of MacOSX Java runtime support - framework [enabled] - --enable-docs enable generation of Javadoc documentation - [disabled] - --disable-nimbus disable Nimbus L&F [enabled] - --disable-static-link-stdc++ - disable static linking of the C++ runtime on Linux - [enabled] - --enable-hotspot-test-in-build - enable running of Queens test after Hotspot build - (not yet available) [disabled] - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-data-model build 32-bit or 64-bit binaries (for platforms that - support it), e.g. --with-data-model=32 [guessed] - --with-num-cores number of cores in the build system, e.g. - --with-num-cores=8 [probed] - --with-memory-size memory (in MB) available in the build system, e.g. - --with-memory-size=1024 [probed] - --with-jdk-variant JDK variant to build (normal, embedded) [normal] - --with-jvm-variants JVM variants (separated by commas) to build (server, - client, kernel, zero, zeroshark) [server] - --with-debug-level set the debug level (release, fastdebug, slowdebug) - [release] - --with-msvcr100dll copy this msvcr100.dll into the built JDK - --with-builddeps-conf use this configuration file for the builddeps - --with-builddeps-server download and use build dependencies from this server - url, e.g. - --with-builddeps-server=ftp://example.com/dir - --with-builddeps-dir store downloaded build dependencies here - [d/localhome/builddeps] - --with-builddeps-group chgrp the downloaded build dependencies to this - group - --with-sys-root pass this sys-root to the compilers and linker - (useful if the sys-root encoded in the cross - compiler tools is incorrect) - --with-ccache-dir where to store ccache files [~/.ccache] - --with-boot-jdk path to Boot JDK (used to bootstrap build) [probed] - --with-add-source-root for each and every source directory, look in this - additional source root for the same directory; if it - exists and have files in it, include it in the build - --with-override-source-root - for each and every source directory, look in this - override source root for the same directory; if it - exists, use that directory instead and ignore the - directory in the original source root - --with-adds-and-overrides - use the subdirs 'adds' and 'overrides' in the - specified directory as add-source-root and - override-source-root - --with-override-langtools - use this langtools dir for the build - --with-override-corba use this corba dir for the build - --with-override-jaxp use this jaxp dir for the build - --with-override-jaxws use this jaxws dir for the build - --with-override-hotspot use this hotspot dir for the build - --with-override-jdk use this jdk dir for the build - --with-boot-jdk-jvmargs specify JVM arguments to be passed to all - invocations of the Boot JDK, overriding the default - values, e.g --with-boot-jdk-jvmargs="-Xmx8G - -enableassertions" - --with-server-java use this java binary for running the javac - background server and other long running java tasks - in the build process, e.g. - ---with-server-java="/opt/jrockit/bin/java -server" - --with-javac-server-cores - use at most this number of concurrent threads on the - javac server [probed] - --with-x use the X Window System - --with-cups specify prefix directory for the cups package - (expecting the libraries under PATH/lib and the - headers under PATH/include) - --with-cups-include specify directory for the cups include files - --with-cups-lib specify directory for the cups library - --with-freetype specify prefix directory for the freetype2 package - (expecting the libraries under PATH/lib and the - headers under PATH/include) - --with-alsa specify prefix directory for the alsa package - (expecting the libraries under PATH/lib and the - headers under PATH/include) - --with-alsa-include specify directory for the alsa include files - --with-alsa-lib specify directory for the alsa library - --with-pulse specify prefix directory for the pulseaudio package - (expecting the libraries under PATH/lib and the - headers under PATH/include) - --with-pulse-include specify directory for the pulseaudio include files - --with-pulse-lib specify directory for the pulseaudio library - --with-cacerts-file specify alternative cacerts file - -Some influential environment variables: - PKG_CONFIG path to pkg-config utility - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CXX C++ compiler command - CXXFLAGS C++ compiler flags - OBJC Objective C compiler command - OBJCFLAGS Objective C compiler flags - CPP C preprocessor - CXXCPP C++ preprocessor - XMKMF Path to xmkmf, Makefile generator for X Window System - FREETYPE2_CFLAGS - C compiler flags for FREETYPE2, overriding pkg-config - FREETYPE2_LIBS - linker flags for FREETYPE2, overriding pkg-config - ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config - ALSA_LIBS linker flags for ALSA, overriding pkg-config - LIBPULSE_CFLAGS - C compiler flags for LIBPULSE, overriding pkg-config - LIBPULSE_LIBS - linker flags for LIBPULSE, overriding pkg-config - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -openjdk configure version-0.1 -generated by GNU Autoconf 2.67 - -Copyright (C) 2010 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_objc_try_compile LINENO -# ----------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_objc_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_objc_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_objc_try_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_cpp - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_link - -# ac_fn_cxx_try_run LINENO -# ------------------------ -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_cxx_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_run - -# ac_fn_cxx_compute_int LINENO EXPR VAR INCLUDES -# ---------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_cxx_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - echo >>conftest.val; read $3 &5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_header_compile - -# ac_fn_cxx_check_func LINENO FUNC VAR -# ------------------------------------ -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_cxx_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_func - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ----------------------------------------------- ## -## Report this to build-infra-dev@openjdk.java.net ## -## ----------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_mongrel - -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES -# --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ----------------------------------------------- ## -## Report this to build-infra-dev@openjdk.java.net ## -## ----------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_cxx_check_header_mongrel -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by openjdk $as_me version-0.1, which was -generated by GNU Autoconf 2.67. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5 ; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_aux_dir= -for ac_dir in build-aux "$srcdir"/build-aux; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# -# Copyright © 2004 Scott James Remnant . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- -# PKG_PROG_PKG_CONFIG - -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# -# Similar to PKG_CHECK_MODULES, make sure that the first instance of -# this or PKG_CHECK_MODULES is called, or make sure to call -# PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- - - - -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- -# _PKG_CONFIG - -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- -# _PKG_SHORT_ERRORS_SUPPORTED - - -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- -# PKG_CHECK_MODULES - -# -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - - - - - - - - -# -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Fixes paths on windows hosts to be mixed mode short. - - - - -# -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - - - - -# -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -function prepare_help_system { - for ac_prog in apt-get yum port pkgutil pkgadd -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PKGHANDLER+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PKGHANDLER"; then - ac_cv_prog_PKGHANDLER="$PKGHANDLER" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PKGHANDLER="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PKGHANDLER=$ac_cv_prog_PKGHANDLER -if test -n "$PKGHANDLER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGHANDLER" >&5 -$as_echo "$PKGHANDLER" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PKGHANDLER" && break -done - -} - -function help_on_build_dependency { - # Print a helpful message on how to acquire the necessary build dependency. - # $1 is the help tag: freetyp2, cups, pulse, alsa etc - MISSING_DEPENDENCY=$1 - PKGHANDLER_COMMAND= - - case $PKGHANDLER in - apt-get) - apt_help $MISSING_DEPENDENCY ;; - yum) - yum_help $MISSING_DEPENDENCY ;; - port) - port_help $MISSING_DEPENDENCY ;; - pkgutil) - pkgutil_help $MISSING_DEPENDENCY ;; - pkgadd) - pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; - esac - - if test "x$PKGHANDLER_COMMAND" != x; then - HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." - fi -} - -function apt_help { - case $1 in - devkit) - PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;; - openjdk) - PKGHANDLER_COMMAND="sudo apt-get install openjdk-7-jdk" ;; - alsa) - PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;; - cups) - PKGHANDLER_COMMAND="sudo apt-get install libcups2-dev" ;; - freetype2) - PKGHANDLER_COMMAND="sudo apt-get install libfreetype6-dev" ;; - pulse) - PKGHANDLER_COMMAND="sudo apt-get install libpulse-dev" ;; - x11) - PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev" ;; - ccache) - PKGHANDLER_COMMAND="sudo apt-get install ccache" ;; - * ) - break ;; - esac -} - -function yum_help { - case $1 in - devkit) - PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;; - openjdk) - PKGHANDLER_COMMAND="sudo yum install java-1.7.0-openjdk" ;; - alsa) - PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;; - cups) - PKGHANDLER_COMMAND="sudo yum install cups-devel" ;; - freetype2) - PKGHANDLER_COMMAND="sudo yum install freetype2-devel" ;; - pulse) - PKGHANDLER_COMMAND="sudo yum install pulseaudio-libs-devel" ;; - x11) - PKGHANDLER_COMMAND="sudo yum install libXtst-devel" ;; - ccache) - PKGHANDLER_COMMAND="sudo yum install ccache" ;; - * ) - break ;; - esac -} - -function port_help { - PKGHANDLER_COMMAND="" -} - -function pkgutil_help { - PKGHANDLER_COMMAND="" -} - -function pkgadd_help { - PKGHANDLER_COMMAND="" -} - - -# Save the command line. Do this very early, before it is lost by calling autoconf macros. CONFIGURE_COMMAND_LINE="$@" +conf_script_dir=`dirname $0` +conf_closed_script_dir="$conf_script_dir/../../jdk/make/closed/autoconf" +### +### Test that the generated configure is up-to-date +### -# Locate the directory of this script. -SCRIPT="$0" +# On Solaris /bin/sh doesn't support test -nt but /usr/bin/test does. +TEST=`which test` - if test "x$BUILD_OS" != xwindows; then - # Follow a chain of symbolic links. Use readlink - # where it exists, else fall back to horribly - # complicated shell code. - # Extract the first word of "readlink", so it can be a program name with args. -set dummy readlink; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READLINK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READLINK in - [\\/]* | ?:[\\/]*) - ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +print_error_not_up_to_date() { + echo "Error: The configure source files is newer than the generated files." + echo "Please run 'sh autogen.sh' to update the generated files." +} - ;; -esac -fi -READLINK=$ac_cv_path_READLINK -if test -n "$READLINK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 -$as_echo "$READLINK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$READLINK_TESTED" != yes; then - # On MacOSX there is a readlink tool with a different - # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` - if test "x$ISGNU" = x; then - # A readlink that we do not know how to use. - # Are there other non-GNU readlinks out there? - READLINK_TESTED=yes - READLINK= - fi - fi - - if test "x$READLINK" != x; then - SCRIPT=`$READLINK -f $SCRIPT` - else - STARTDIR=$PWD - COUNTER=0 - DIR=`dirname $SCRIPT` - FIL=`basename $SCRIPT` - while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` - if test "x$ISLINK" == x; then - # This is not a symbolic link! We are done! - break - fi - # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` - let COUNTER=COUNTER+1 - done - cd $STARTDIR - SCRIPT=$DIR/$FIL - fi - fi - -AUTOCONF_DIR=`dirname $0` - -# Start with tools that do not need have cross compilation support -# and can be expected to be found in the default PATH. These tools are -# used by configure. Nor are these tools expected to be found in the -# devkit from the builddeps server either, since they are -# needed to download the devkit. -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - - - # Test that variable AWK is not empty. - if test "" = "$AWK"; then as_fn_error $? "Could not find awk !" "$LINENO" 5 ; fi - -# Extract the first word of "cat", so it can be a program name with args. -set dummy cat; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CAT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CAT in - [\\/]* | ?:[\\/]*) - ac_cv_path_CAT="$CAT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CAT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CAT=$ac_cv_path_CAT -if test -n "$CAT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAT" >&5 -$as_echo "$CAT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CAT is not empty. - if test "" = "$CAT"; then as_fn_error $? "Could not find cat !" "$LINENO" 5 ; fi - -# Extract the first word of "chmod", so it can be a program name with args. -set dummy chmod; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CHMOD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CHMOD in - [\\/]* | ?:[\\/]*) - ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CHMOD=$ac_cv_path_CHMOD -if test -n "$CHMOD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5 -$as_echo "$CHMOD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CHMOD is not empty. - if test "" = "$CHMOD"; then as_fn_error $? "Could not find chmod !" "$LINENO" 5 ; fi - -# Extract the first word of "cp", so it can be a program name with args. -set dummy cp; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CP in - [\\/]* | ?:[\\/]*) - ac_cv_path_CP="$CP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CP=$ac_cv_path_CP -if test -n "$CP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5 -$as_echo "$CP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CP is not empty. - if test "" = "$CP"; then as_fn_error $? "Could not find cp !" "$LINENO" 5 ; fi - -# Extract the first word of "cpio", so it can be a program name with args. -set dummy cpio; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CPIO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CPIO in - [\\/]* | ?:[\\/]*) - ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CPIO=$ac_cv_path_CPIO -if test -n "$CPIO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5 -$as_echo "$CPIO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CPIO is not empty. - if test "" = "$CPIO"; then as_fn_error $? "Could not find cpio !" "$LINENO" 5 ; fi - -# Extract the first word of "cut", so it can be a program name with args. -set dummy cut; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CUT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CUT in - [\\/]* | ?:[\\/]*) - ac_cv_path_CUT="$CUT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CUT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CUT=$ac_cv_path_CUT -if test -n "$CUT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUT" >&5 -$as_echo "$CUT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable CUT is not empty. - if test "" = "$CUT"; then as_fn_error $? "Could not find cut !" "$LINENO" 5 ; fi - -# Extract the first word of "date", so it can be a program name with args. -set dummy date; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_DATE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $DATE in - [\\/]* | ?:[\\/]*) - ac_cv_path_DATE="$DATE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DATE=$ac_cv_path_DATE -if test -n "$DATE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DATE" >&5 -$as_echo "$DATE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable DATE is not empty. - if test "" = "$DATE"; then as_fn_error $? "Could not find date !" "$LINENO" 5 ; fi - -# Extract the first word of "df", so it can be a program name with args. -set dummy df; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_DF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $DF in - [\\/]* | ?:[\\/]*) - ac_cv_path_DF="$DF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DF=$ac_cv_path_DF -if test -n "$DF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 -$as_echo "$DF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable DF is not empty. - if test "" = "$DF"; then as_fn_error $? "Could not find df !" "$LINENO" 5 ; fi - -# Extract the first word of "diff", so it can be a program name with args. -set dummy diff; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_DIFF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $DIFF in - [\\/]* | ?:[\\/]*) - ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DIFF=$ac_cv_path_DIFF -if test -n "$DIFF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5 -$as_echo "$DIFF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable DIFF is not empty. - if test "" = "$DIFF"; then as_fn_error $? "Could not find diff !" "$LINENO" 5 ; fi - -# Warning echo is really, really unportable!!!!! Different -# behaviour in bash and dash and in a lot of other shells! -# Use printf for serious work! -# Extract the first word of "echo", so it can be a program name with args. -set dummy echo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ECHO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ECHO in - [\\/]* | ?:[\\/]*) - ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ECHO=$ac_cv_path_ECHO -if test -n "$ECHO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5 -$as_echo "$ECHO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable ECHO is not empty. - if test "" = "$ECHO"; then as_fn_error $? "Could not find echo !" "$LINENO" 5 ; fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - - - # Test that variable EGREP is not empty. - if test "" = "$EGREP"; then as_fn_error $? "Could not find egrep !" "$LINENO" 5 ; fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - - - # Test that variable FGREP is not empty. - if test "" = "$FGREP"; then as_fn_error $? "Could not find fgrep !" "$LINENO" 5 ; fi - - -# Extract the first word of "find", so it can be a program name with args. -set dummy find; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_FIND+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $FIND in - [\\/]* | ?:[\\/]*) - ac_cv_path_FIND="$FIND" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -FIND=$ac_cv_path_FIND -if test -n "$FIND"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5 -$as_echo "$FIND" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable FIND is not empty. - if test "" = "$FIND"; then as_fn_error $? "Could not find find !" "$LINENO" 5 ; fi - - - # Test if find supports -delete - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if find supports -delete" >&5 -$as_echo_n "checking if find supports -delete... " >&6; } - FIND_DELETE="-delete" - - DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) - - echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete - - TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` - if test -f $DELETEDIR/TestIfFindSupportsDelete; then - # No, it does not. - rm $DELETEDIR/TestIfFindSupportsDelete - FIND_DELETE="-exec rm \{\} \+" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - rmdir $DELETEDIR - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - - - # Test that variable GREP is not empty. - if test "" = "$GREP"; then as_fn_error $? "Could not find grep !" "$LINENO" 5 ; fi - -# Extract the first word of "head", so it can be a program name with args. -set dummy head; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HEAD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $HEAD in - [\\/]* | ?:[\\/]*) - ac_cv_path_HEAD="$HEAD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HEAD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HEAD=$ac_cv_path_HEAD -if test -n "$HEAD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HEAD" >&5 -$as_echo "$HEAD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable HEAD is not empty. - if test "" = "$HEAD"; then as_fn_error $? "Could not find head !" "$LINENO" 5 ; fi - -# Extract the first word of "ln", so it can be a program name with args. -set dummy ln; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_LN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $LN in - [\\/]* | ?:[\\/]*) - ac_cv_path_LN="$LN" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -LN=$ac_cv_path_LN -if test -n "$LN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5 -$as_echo "$LN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable LN is not empty. - if test "" = "$LN"; then as_fn_error $? "Could not find ln !" "$LINENO" 5 ; fi - -# Extract the first word of "ls", so it can be a program name with args. -set dummy ls; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_LS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $LS in - [\\/]* | ?:[\\/]*) - ac_cv_path_LS="$LS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_LS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -LS=$ac_cv_path_LS -if test -n "$LS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LS" >&5 -$as_echo "$LS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable LS is not empty. - if test "" = "$LS"; then as_fn_error $? "Could not find ls !" "$LINENO" 5 ; fi - -for ac_prog in gmake make -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MAKE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MAKE in - [\\/]* | ?:[\\/]*) - ac_cv_path_MAKE="$MAKE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_MAKE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MAKE=$ac_cv_path_MAKE -if test -n "$MAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKE" >&5 -$as_echo "$MAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$MAKE" && break -done - - - # Test that variable MAKE is not empty. - if test "" = "$MAKE"; then as_fn_error $? "Could not find make !" "$LINENO" 5 ; fi - -MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[12346789]'` -if test "x$MAKE_VERSION" = x; then - as_fn_error $? "You must use GNU make 3.81 or newer! Please put it in the path." "$LINENO" 5 -fi -# Extract the first word of "mkdir", so it can be a program name with args. -set dummy mkdir; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MKDIR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MKDIR in - [\\/]* | ?:[\\/]*) - ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MKDIR=$ac_cv_path_MKDIR -if test -n "$MKDIR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5 -$as_echo "$MKDIR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable MKDIR is not empty. - if test "" = "$MKDIR"; then as_fn_error $? "Could not find mkdir !" "$LINENO" 5 ; fi - -# Extract the first word of "mv", so it can be a program name with args. -set dummy mv; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MV+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MV in - [\\/]* | ?:[\\/]*) - ac_cv_path_MV="$MV" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MV=$ac_cv_path_MV -if test -n "$MV"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5 -$as_echo "$MV" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable MV is not empty. - if test "" = "$MV"; then as_fn_error $? "Could not find mv !" "$LINENO" 5 ; fi - -for ac_prog in nawk gawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_NAWK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $NAWK in - [\\/]* | ?:[\\/]*) - ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -NAWK=$ac_cv_path_NAWK -if test -n "$NAWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 -$as_echo "$NAWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$NAWK" && break -done - - - # Test that variable NAWK is not empty. - if test "" = "$NAWK"; then as_fn_error $? "Could not find nawk !" "$LINENO" 5 ; fi - -# Extract the first word of "printf", so it can be a program name with args. -set dummy printf; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PRINTF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $PRINTF in - [\\/]* | ?:[\\/]*) - ac_cv_path_PRINTF="$PRINTF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PRINTF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PRINTF=$ac_cv_path_PRINTF -if test -n "$PRINTF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRINTF" >&5 -$as_echo "$PRINTF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable PRINTF is not empty. - if test "" = "$PRINTF"; then as_fn_error $? "Could not find printf !" "$LINENO" 5 ; fi - -# Extract the first word of "pwd", so it can be a program name with args. -set dummy pwd; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_THEPWDCMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $THEPWDCMD in - [\\/]* | ?:[\\/]*) - ac_cv_path_THEPWDCMD="$THEPWDCMD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_THEPWDCMD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -THEPWDCMD=$ac_cv_path_THEPWDCMD -if test -n "$THEPWDCMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $THEPWDCMD" >&5 -$as_echo "$THEPWDCMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -# Extract the first word of "rm", so it can be a program name with args. -set dummy rm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_RM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $RM in - [\\/]* | ?:[\\/]*) - ac_cv_path_RM="$RM" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -RM=$ac_cv_path_RM -if test -n "$RM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 -$as_echo "$RM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable RM is not empty. - if test "" = "$RM"; then as_fn_error $? "Could not find rm !" "$LINENO" 5 ; fi - -RM="$RM -f" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - - - # Test that variable SED is not empty. - if test "" = "$SED"; then as_fn_error $? "Could not find sed !" "$LINENO" 5 ; fi - -# Extract the first word of "sh", so it can be a program name with args. -set dummy sh; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_SH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $SH in - [\\/]* | ?:[\\/]*) - ac_cv_path_SH="$SH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -SH=$ac_cv_path_SH -if test -n "$SH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH" >&5 -$as_echo "$SH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable SH is not empty. - if test "" = "$SH"; then as_fn_error $? "Could not find sh !" "$LINENO" 5 ; fi - -# Extract the first word of "sort", so it can be a program name with args. -set dummy sort; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_SORT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $SORT in - [\\/]* | ?:[\\/]*) - ac_cv_path_SORT="$SORT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_SORT="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -SORT=$ac_cv_path_SORT -if test -n "$SORT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SORT" >&5 -$as_echo "$SORT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable SORT is not empty. - if test "" = "$SORT"; then as_fn_error $? "Could not find sort !" "$LINENO" 5 ; fi - -# Extract the first word of "tar", so it can be a program name with args. -set dummy tar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TAR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TAR in - [\\/]* | ?:[\\/]*) - ac_cv_path_TAR="$TAR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TAR=$ac_cv_path_TAR -if test -n "$TAR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5 -$as_echo "$TAR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TAR is not empty. - if test "" = "$TAR"; then as_fn_error $? "Could not find tar !" "$LINENO" 5 ; fi - -# Extract the first word of "tail", so it can be a program name with args. -set dummy tail; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TAIL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TAIL in - [\\/]* | ?:[\\/]*) - ac_cv_path_TAIL="$TAIL" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TAIL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TAIL=$ac_cv_path_TAIL -if test -n "$TAIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAIL" >&5 -$as_echo "$TAIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TAIL is not empty. - if test "" = "$TAIL"; then as_fn_error $? "Could not find tail !" "$LINENO" 5 ; fi - -# Extract the first word of "tee", so it can be a program name with args. -set dummy tee; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TEE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TEE in - [\\/]* | ?:[\\/]*) - ac_cv_path_TEE="$TEE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TEE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TEE=$ac_cv_path_TEE -if test -n "$TEE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEE" >&5 -$as_echo "$TEE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TEE is not empty. - if test "" = "$TEE"; then as_fn_error $? "Could not find tee !" "$LINENO" 5 ; fi - -# Extract the first word of "tr", so it can be a program name with args. -set dummy tr; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TR in - [\\/]* | ?:[\\/]*) - ac_cv_path_TR="$TR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TR=$ac_cv_path_TR -if test -n "$TR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TR" >&5 -$as_echo "$TR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TR is not empty. - if test "" = "$TR"; then as_fn_error $? "Could not find tr !" "$LINENO" 5 ; fi - -# Extract the first word of "touch", so it can be a program name with args. -set dummy touch; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TOUCH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $TOUCH in - [\\/]* | ?:[\\/]*) - ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_TOUCH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -TOUCH=$ac_cv_path_TOUCH -if test -n "$TOUCH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOUCH" >&5 -$as_echo "$TOUCH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable TOUCH is not empty. - if test "" = "$TOUCH"; then as_fn_error $? "Could not find touch !" "$LINENO" 5 ; fi - -# Extract the first word of "wc", so it can be a program name with args. -set dummy wc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_WC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $WC in - [\\/]* | ?:[\\/]*) - ac_cv_path_WC="$WC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_WC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -WC=$ac_cv_path_WC -if test -n "$WC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WC" >&5 -$as_echo "$WC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable WC is not empty. - if test "" = "$WC"; then as_fn_error $? "Could not find wc !" "$LINENO" 5 ; fi - -# Extract the first word of "xargs", so it can be a program name with args. -set dummy xargs; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_XARGS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $XARGS in - [\\/]* | ?:[\\/]*) - ac_cv_path_XARGS="$XARGS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_XARGS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -XARGS=$ac_cv_path_XARGS -if test -n "$XARGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XARGS" >&5 -$as_echo "$XARGS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable XARGS is not empty. - if test "" = "$XARGS"; then as_fn_error $? "Could not find xargs !" "$LINENO" 5 ; fi - -# Extract the first word of "zip", so it can be a program name with args. -set dummy zip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ZIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ZIP=$ac_cv_path_ZIP -if test -n "$ZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 -$as_echo "$ZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable ZIP is not empty. - if test "" = "$ZIP"; then as_fn_error $? "Could not find zip !" "$LINENO" 5 ; fi - -# Extract the first word of "unzip", so it can be a program name with args. -set dummy unzip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_UNZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $UNZIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -UNZIP=$ac_cv_path_UNZIP -if test -n "$UNZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 -$as_echo "$UNZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable UNZIP is not empty. - if test "" = "$UNZIP"; then as_fn_error $? "Could not find unzip !" "$LINENO" 5 ; fi - -# Extract the first word of "ldd", so it can be a program name with args. -set dummy ldd; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_LDD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $LDD in - [\\/]* | ?:[\\/]*) - ac_cv_path_LDD="$LDD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -LDD=$ac_cv_path_LDD -if test -n "$LDD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 -$as_echo "$LDD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "x$LDD" = "x"; then - # List shared lib dependencies is used for - # debug output and checking for forbidden dependencies. - # We can build without it. - LDD="true" -fi -# Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $OTOOL in - [\\/]* | ?:[\\/]*) - ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -OTOOL=$ac_cv_path_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "x$OTOOL" = "x"; then - OTOOL="true" -fi -# Extract the first word of "readelf", so it can be a program name with args. -set dummy readelf; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READELF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READELF in - [\\/]* | ?:[\\/]*) - ac_cv_path_READELF="$READELF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -READELF=$ac_cv_path_READELF -if test -n "$READELF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 -$as_echo "$READELF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -# Extract the first word of "expr", so it can be a program name with args. -set dummy expr; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_EXPR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $EXPR in - [\\/]* | ?:[\\/]*) - ac_cv_path_EXPR="$EXPR" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_EXPR="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -EXPR=$ac_cv_path_EXPR -if test -n "$EXPR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPR" >&5 -$as_echo "$EXPR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable EXPR is not empty. - if test "" = "$EXPR"; then as_fn_error $? "Could not find expr !" "$LINENO" 5 ; fi - -# Extract the first word of "file", so it can be a program name with args. -set dummy file; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_FILE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $FILE in - [\\/]* | ?:[\\/]*) - ac_cv_path_FILE="$FILE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_FILE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -FILE=$ac_cv_path_FILE -if test -n "$FILE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5 -$as_echo "$FILE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Test that variable FILE is not empty. - if test "" = "$FILE"; then as_fn_error $? "Could not find file !" "$LINENO" 5 ; fi - -# Extract the first word of "hg", so it can be a program name with args. -set dummy hg; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $HG in - [\\/]* | ?:[\\/]*) - ac_cv_path_HG="$HG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HG=$ac_cv_path_HG -if test -n "$HG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 -$as_echo "$HG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - -# Figure out the build and host system. -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - - -# Check whether --with-data-model was given. -if test "${with_data_model+set}" = set; then : - withval=$with_data_model; -fi - - -if test "x$with_data_model" != x && \ - test "x$with_data_model" != x32 && \ - test "x$with_data_model" != x64 ; then - as_fn_error $? "The data model can only be 32 or 64!" "$LINENO" 5 -fi -# Translate the standard cpu-vendor-kernel-os quadruplets into -# the new HOST_.... and BUILD_... and the legacy names used by -# the openjdk build. -# It uses $host_os $host_cpu $build_os $build_cpu and $with_data_model - - # Expects $host_os $host_cpu $build_os and $build_cpu - # and $with_data_model to have been setup! - # - # Translate the standard triplet(quadruplet) definition - # of the host/build system into - # HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows - # HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince - # HOST_OS_API=posix,winapi - # - # HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 - # HOST_CPU_ARCH=x86,sparc,pcc,arm - # HOST_CPU_BITS=32,64 - # HOST_CPU_ENDIAN=big,little - # - # The same values are setup for BUILD_... - # - # And the legacy variables, for controlling the old makefiles. - # LEGACY_HOST_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... - # LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... - # LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris) - # LEGACY_HOST_OS_API=solaris,windows - # - # We also copy the autoconf trip/quadruplet - # verbatim to HOST and BUILD - HOST=${host} - - BUILD=${build} - - - - - case "$host_os" in - *linux*) - VAR_OS=linux - VAR_OS_API=posix - VAR_OS_FAMILY=gnu - ;; - *solaris*) - VAR_OS=solaris - VAR_OS_API=posix - VAR_OS_FAMILY=sysv - ;; - *darwin*) - VAR_OS=macosx - VAR_OS_API=posix - VAR_OS_FAMILY=bsd - ;; - *bsd*) - VAR_OS=bsd - VAR_OS_API=posix - VAR_OS_FAMILY=bsd - ;; - *cygwin*|*windows*) - VAR_OS=windows - VAR_OS_API=winapi - VAR_OS_FAMILY=windows - ;; - *) - as_fn_error $? "unsupported host operating system $host_os" "$LINENO" 5 - ;; - esac - - HOST_OS="$VAR_OS" - HOST_OS_FAMILY="$VAR_OS_FAMILY" - HOST_OS_API="$VAR_OS_API" - - - - - - if test "x$HOST_OS_API" = xposix; then - LEGACY_HOST_OS_API="solaris" - fi - if test "x$HOST_OS_API" = xwinapi; then - LEGACY_HOST_OS_API="windows" - fi - - - - - # First argument is the cpu name from the trip/quad - case "$host_cpu" in - x86_64) - VAR_CPU=x64 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=little - VAR_LEGACY_CPU=amd64 - ;; - i?86) - VAR_CPU=ia32 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - VAR_LEGACY_CPU=i586 - ;; - alpha*) - VAR_CPU=alpha - VAR_CPU_ARCH=alpha - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=alpha - ;; - arm*) - VAR_CPU=arm - VAR_CPU_ARCH=arm - VAR_CPU_BITS=3264 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=arm - ;; - mips) - VAR_CPU=mips - VAR_CPU_ARCH=mips - VAR_CPU_BITS=woot - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=mips - ;; - mipsel) - VAR_CPU=mipsel - VAR_CPU_ARCH=mips - VAR_CPU_BITS=woot - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=mipsel - ;; - powerpc) - VAR_CPU=ppc - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=ppc - ;; - powerpc64) - VAR_CPU=ppc64 - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=32 - VAR_LEGACY_CPU=ppc64 - ;; - sparc) - VAR_CPU=sparc - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc - ;; - sparc64) - VAR_CPU=sparcv9 - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc_sparcv9 - ;; - s390) - VAR_CPU=s390 - VAR_CPU_ARCH=s390 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=s390 - VAR_LEGACY_CPU=s390 - ;; - s390x) - VAR_CPU=s390x - VAR_CPU_ARCH=s390 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=s390x - ;; - *) - as_fn_error $? "unsupported cpu $host_cpu" "$LINENO" 5 - ;; - esac - - # Workaround cygwin not knowing about 64 bit. - if test "x$VAR_OS" = "xwindows"; then - if test "x$PROCESSOR_IDENTIFIER" != "x"; then - PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '` - case "$PROC_ARCH" in - intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) - VAR_CPU=x64 - VAR_CPU_BITS=64 - VAR_LEGACY_CPU=amd64 - ;; - esac - fi - fi - - if test "x$VAR_CPU_ARCH" = "xx86"; then - if test "x$with_data_model" = "x64"; then - VAR_CPU=x64 - VAR_CPU_BITS=64 - VAR_LEGACY_CPU=amd64 - fi - if test "x$with_data_model" = "x32"; then - VAR_CPU=ia32 - VAR_CPU_BITS=32 - VAR_LEGACY_CPU=i586 - fi - fi - - HOST_CPU="$VAR_CPU" - HOST_CPU_ARCH="$VAR_CPU_ARCH" - HOST_CPU_BITS="$VAR_CPU_BITS" - HOST_CPU_ENDIAN="$VAR_CPU_ENDIAN" - - - - - - - # Also store the legacy naming of the cpu. - # Ie i586 and amd64 instead of ia32 and x64 - LEGACY_HOST_CPU1="$VAR_LEGACY_CPU" - - - # And the second legacy naming of the cpu. - # Ie i386 and amd64 instead of ia32 and x64. - LEGACY_HOST_CPU2="$LEGACY_HOST_CPU1" - if test "x$LEGACY_HOST_CPU1" = xi586; then - LEGACY_HOST_CPU2=i386 - fi - - - # And the third legacy naming of the cpu. - # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris. - LEGACY_HOST_CPU3="" - if test "x$HOST_CPU" = xx64; then - LEGACY_HOST_CPU3=amd64 - fi - if test "x$HOST_CPU" = xsparcv9; then - LEGACY_HOST_CPU3=sparvc9 - fi - - - - - - case "$build_os" in - *linux*) - VAR_OS=linux - VAR_OS_API=posix - VAR_OS_FAMILY=gnu - ;; - *solaris*) - VAR_OS=solaris - VAR_OS_API=posix - VAR_OS_FAMILY=sysv - ;; - *darwin*) - VAR_OS=macosx - VAR_OS_API=posix - VAR_OS_FAMILY=bsd - ;; - *bsd*) - VAR_OS=bsd - VAR_OS_API=posix - VAR_OS_FAMILY=bsd - ;; - *cygwin*|*windows*) - VAR_OS=windows - VAR_OS_API=winapi - VAR_OS_FAMILY=windows - ;; - *) - as_fn_error $? "unsupported host operating system $build_os" "$LINENO" 5 - ;; - esac - - BUILD_OS="$VAR_OS" - BUILD_OS_FAMILY="$VAR_OS_FAMILY" - BUILD_OS_API="$VAR_OS_API" - - - - - - if test "x$BUILD_OS_API" = xposix; then - LEGACY_BUILD_OS_API="solaris" - fi - if test "x$BUILD_OS_API" = xwinapi; then - LEGACY_BUILD_OS_API="windows" - fi - - - - - # First argument is the cpu name from the trip/quad - case "$build_cpu" in - x86_64) - VAR_CPU=x64 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=little - VAR_LEGACY_CPU=amd64 - ;; - i?86) - VAR_CPU=ia32 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - VAR_LEGACY_CPU=i586 - ;; - alpha*) - VAR_CPU=alpha - VAR_CPU_ARCH=alpha - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=alpha - ;; - arm*) - VAR_CPU=arm - VAR_CPU_ARCH=arm - VAR_CPU_BITS=3264 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=arm - ;; - mips) - VAR_CPU=mips - VAR_CPU_ARCH=mips - VAR_CPU_BITS=woot - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=mips - ;; - mipsel) - VAR_CPU=mipsel - VAR_CPU_ARCH=mips - VAR_CPU_BITS=woot - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=mipsel - ;; - powerpc) - VAR_CPU=ppc - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=ppc - ;; - powerpc64) - VAR_CPU=ppc64 - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=32 - VAR_LEGACY_CPU=ppc64 - ;; - sparc) - VAR_CPU=sparc - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc - ;; - sparc64) - VAR_CPU=sparcv9 - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc_sparcv9 - ;; - s390) - VAR_CPU=s390 - VAR_CPU_ARCH=s390 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=s390 - VAR_LEGACY_CPU=s390 - ;; - s390x) - VAR_CPU=s390x - VAR_CPU_ARCH=s390 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=woot - VAR_LEGACY_CPU=s390x - ;; - *) - as_fn_error $? "unsupported cpu $build_cpu" "$LINENO" 5 - ;; - esac - - # Workaround cygwin not knowing about 64 bit. - if test "x$VAR_OS" = "xwindows"; then - if test "x$PROCESSOR_IDENTIFIER" != "x"; then - PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '` - case "$PROC_ARCH" in - intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) - VAR_CPU=x64 - VAR_CPU_BITS=64 - VAR_LEGACY_CPU=amd64 - ;; - esac - fi - fi - - if test "x$VAR_CPU_ARCH" = "xx86"; then - if test "x$with_data_model" = "x64"; then - VAR_CPU=x64 - VAR_CPU_BITS=64 - VAR_LEGACY_CPU=amd64 - fi - if test "x$with_data_model" = "x32"; then - VAR_CPU=ia32 - VAR_CPU_BITS=32 - VAR_LEGACY_CPU=i586 - fi - fi - - BUILD_CPU="$VAR_CPU" - BUILD_CPU_ARCH="$VAR_CPU_ARCH" - BUILD_CPU_BITS="$VAR_CPU_BITS" - BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" - - - - - - - # Also store the legacy naming of the cpu. - # Ie i586 and amd64 instead of ia32 and x64 - LEGACY_BUILD_CPU1="$VAR_LEGACY_CPU" - - - # And the second legacy naming of the cpu. - # Ie i386 and amd64 instead of ia32 and x64. - LEGACY_BUILD_CPU2="$LEGACY_BUILD_CPU1" - if test "x$LEGACY_BUILD_CPU1" = xi586; then - LEGACY_BUILD_CPU2=i386 - fi - - - # And the third legacy naming of the cpu. - # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris. - LEGACY_BUILD_CPU3="" - if test "x$BUILD_CPU" = xx64; then - LEGACY_BUILD_CPU3=amd64 - fi - if test "x$BUILD_CPU" = xsparcv9; then - LEGACY_BUILD_CPU3=sparvc9 - fi - - - - if test "x$HOST_OS" != xsolaris; then - LEGACY_HOST_CPU3="" - LEGACY_BUILD_CPU3="" - fi - - # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_HOST_CPU1) ... - if test "x$HOST_OS" = xmacosx && test "x$HOST_CPU" = xx64; then - LEGACY_HOST_CPU1="x86_64" - fi - - - if test "x$HOST_OS" = "xsolaris"; then - REQUIRED_OS_NAME=SunOS - REQUIRED_OS_VERSION=5.10 - fi - if test "x$HOST_OS" = "xlinux"; then - REQUIRED_OS_NAME=Linux - REQUIRED_OS_VERSION=2.6 - fi - if test "x$HOST_OS" = "xwindows"; then - REQUIRED_OS_NAME=Windows - REQUIRED_OS_VERSION=5.1 - fi - if test "x$HOST_OS" = "xmacosx"; then - REQUIRED_OS_NAME=Darwin - REQUIRED_OS_VERSION=11.2 - fi - - - - - -# Now the following vars are defined. -# HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows -# HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince -# HOST_OS_API=posix,winapi -# -# HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 -# HOST_CPU_ARCH=x86,sparc,pcc,arm -# HOST_CPU_BITS=32,64 -# HOST_CPU_ENDIAN=big,little -# -# There is also a: -# LEGACY_HOST_CPU1=i586,amd64,.... # used to set the old var ARCH -# LEGACY_HOST_CPU2=i386,amd64,.... # used to set the old var LIBARCH -# LEGACY_HOST_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris -# There was also a BUILDARCH that had i486,amd64,... but we do not use that -# in the new build. -# LEGACY_HOST_OS_API=solaris,windows # used to select source roots - -DATE_WHEN_CONFIGURED=`LANG=C date` - - -# How many cores do we have on this build system? - -# Check whether --with-num-cores was given. -if test "${with_num_cores+set}" = set; then : - withval=$with_num_cores; -fi - -if test "x$with_num_cores" = x; then - # The number of cores were not specified, try to probe them. - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for number of cores" >&5 -$as_echo_n "checking for number of cores... " >&6; } - NUM_CORES=1 - FOUND_CORES=no - - if test -f /proc/cpuinfo; then - # Looks like a Linux system - NUM_CORES=`cat /proc/cpuinfo | grep -c processor` - FOUND_CORES=yes - fi - - if test -x /usr/sbin/psrinfo; then - # Looks like a Solaris system - NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` - FOUND_CORES=yes - fi - - if test -x /usr/sbin/system_profiler; then - # Looks like a MacOSX system - NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print $5}'` - FOUND_CORES=yes - fi - - if test "x$build_os" = xwindows; then - NUM_CORES=4 - fi - - # For c/c++ code we run twice as many concurrent build - # jobs than we have cores, otherwise we will stall on io. - CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` - - if test "x$FOUND_CORES" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NUM_CORES" >&5 -$as_echo "$NUM_CORES" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect number of cores, defaulting to 1!" >&5 -$as_echo "could not detect number of cores, defaulting to 1!" >&6; } - fi - - -else - NUM_CORES=$with_num_cores - CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` -fi - - - -# How many cores do we have on this build system? - -# Check whether --with-memory-size was given. -if test "${with_memory_size+set}" = set; then : - withval=$with_memory_size; -fi - -if test "x$with_memory_size" = x; then - # The memory size was not specified, try to probe it. - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memory size" >&5 -$as_echo_n "checking for memory size... " >&6; } - # Default to 1024MB - MEMORY_SIZE=1024 - FOUND_MEM=no - - if test -f /proc/cpuinfo; then - # Looks like a Linux system - MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` - FOUND_MEM=yes - fi - - if test -x /usr/sbin/prtconf; then - # Looks like a Solaris system - MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print $3 }'` - FOUND_MEM=yes - fi - - if test -x /usr/sbin/system_profiler; then - # Looks like a MacOSX system - MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print $2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` - FOUND_MEM=yes - fi - - if test "x$build_os" = xwindows; then - MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print $4 }' | sed 's/,//'` - FOUND_MEM=yes - fi - - if test "x$FOUND_MEM" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MEMORY_SIZE MB" >&5 -$as_echo "$MEMORY_SIZE MB" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect memory size defaulting to 1024MB!" >&5 -$as_echo "could not detect memory size defaulting to 1024MB!" >&6; } - fi - -else - MEMORY_SIZE=$with_memory_size -fi - - -# Where is the source? It is located two levels above the configure script. -CURDIR="$PWD" -cd "$AUTOCONF_DIR/../.." -SRC_ROOT="`pwd`" - -cd "$CURDIR" - -# For cygwin we need cygpath first, since it is used everywhere. -# Extract the first word of "cygpath", so it can be a program name with args. -set dummy cygpath; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CYGPATH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CYGPATH in - [\\/]* | ?:[\\/]*) - ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CYGPATH=$ac_cv_path_CYGPATH -if test -n "$CYGPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 -$as_echo "$CYGPATH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -PATH_SEP=":" -if test "x$BUILD_OS" = "xwindows"; then - if test "x$CYGPATH" = x; then - as_fn_error $? "Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path" "$LINENO" 5 - fi - PATH_SEP=";" -fi - - - - # Fail with message the path to the source root if var SRC_ROOT contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$SRC_ROOT" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - SRC_ROOT=`$CYGPATH -s -m -a "$SRC_ROOT"` - SRC_ROOT=`$CYGPATH -u "$SRC_ROOT"` - else - as_fn_error $? "You cannot have spaces in the path to the source root! \"$SRC_ROOT\"" "$LINENO" 5 - fi - fi - - - # Fail with message the path to the current directory if var CURDIR contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$CURDIR" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - CURDIR=`$CYGPATH -s -m -a "$CURDIR"` - CURDIR=`$CYGPATH -u "$CURDIR"` - else - as_fn_error $? "You cannot have spaces in the path to the current directory! \"$CURDIR\"" "$LINENO" 5 - fi - fi - - -if test "x$BUILD_OS" = "xsolaris"; then - # Also search in /usr/ccs/bin for utilities like ar and as. - PATH="/usr/ccs/bin:$PATH" -fi - -############################################################################### -# -# OpenJDK or closed -# -# Check whether --enable-openjdk-only was given. -if test "${enable_openjdk_only+set}" = set; then : - enableval=$enable_openjdk_only; -fi - - -if test "x$enable_openjdk_only" = "xyes"; then - OPENJDK=true -elif test "x$enable_openjdk_only" = "xno"; then - OPENJDK=false -elif test -d "$SRC_ROOT/jdk/src/closed"; then - OPENJDK=false -else - OPENJDK=true -fi - -if test "x$OPENJDK" = "xtrue"; then - SET_OPENJDK=OPENJDK=true -fi - - - -############################################################################### -# -# JIGSAW or not. The JIGSAW variable is used during the intermediate -# stage when we are building both the old style JDK and the new style modularized JDK. -# When the modularized JDK is finalized, this option will go away. -# -# Check whether --enable-jigsaw was given. -if test "${enable_jigsaw+set}" = set; then : - enableval=$enable_jigsaw; -fi - - -if test "x$enable_jigsaw" = "xyes"; then - JIGSAW=true -else - JIGSAW=false -fi - - -############################################################################### -# -# Check which variant of the JDK that we want to build. -# Currently we have: -# normal: standard edition -# embedded: cut down to a smaller footprint -# -# Effectively the JDK variant gives a name to a specific set of -# modules to compile into the JDK. In the future, these modules -# might even be Jigsaw modules. -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of the JDK to build" >&5 -$as_echo_n "checking which variant of the JDK to build... " >&6; } - -# Check whether --with-jdk-variant was given. -if test "${with_jdk_variant+set}" = set; then : - withval=$with_jdk_variant; -fi - - -if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then - JAVASE_EMBEDDED="" - MINIMIZE_RAM_USAGE="" - JDK_VARIANT="normal" -elif test "x$with_jdk_variant" = xembedded; then - JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true" - MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" - JDK_VARIANT="embedded" -else - as_fn_error $? "The available JDK variants are: normal, embedded" "$LINENO" 5 -fi - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JDK_VARIANT" >&5 -$as_echo "$JDK_VARIANT" >&6; } - -############################################################################### -# -# Should we build a JDK/JVM with head support (ie a graphical ui)? -# We always build headless support. -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking headful support" >&5 -$as_echo_n "checking headful support... " >&6; } -# Check whether --enable-headful was given. -if test "${enable_headful+set}" = set; then : - enableval=$enable_headful; SUPPORT_HEADFUL=${enable_headful} -else - SUPPORT_HEADFUL=yes -fi - - -SUPPORT_HEADLESS=yes -BUILD_HEADLESS="BUILD_HEADLESS:=true" - -if test "x$SUPPORT_HEADFUL" = xyes; then - # We are building both headful and headless. - BUILD_HEADLESS_ONLY="" - headful_msg="inlude support for both headful and headless" -fi - -if test "x$SUPPORT_HEADFUL" = xno; then - # Thus we are building headless only. - BUILD_HEADLESS="BUILD_HEADLESS:=true" - BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true" - headful_msg="headless only" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $headful_msg" >&5 -$as_echo "$headful_msg" >&6; } - - - - - - -############################################################################### -# -# Check which variants of the JVM that we want to build. -# Currently we have: -# server: normal interpreter and a tiered C1/C2 compiler -# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms) -# kernel: kernel footprint JVM that passes the TCK without major performance problems, -# ie normal interpreter and C1, only the serial GC, kernel jvmti etc -# zero: no machine code interpreter, no compiler -# zeroshark: zero interpreter and shark/llvm compiler backend -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM that should be built" >&5 -$as_echo_n "checking which variants of the JVM that should be built... " >&6; } - -# Check whether --with-jvm-variants was given. -if test "${with_jvm_variants+set}" = set; then : - withval=$with_jvm_variants; -fi - - -if test "x$with_jvm_variants" = x; then - if test "x$JDK_VARIANT" = xembedded; then - with_jvm_variants="kernel" - elif test "x$HOST_CPU_BITS" = x64; then - with_jvm_variants="server" - else - # Yes, on 32-bit machines, the same source (almost) is compiled twice - # to generate two libjvm.so files. Fun, fun. - with_jvm_variants="client,server" - fi -fi - -JVM_VARIANTS=",$with_jvm_variants," -TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` - -if test "x$TEST_VARIANTS" != "x,"; then - as_fn_error $? "The available JVM variants are: server, client, kernel, zero, zeroshark" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_jvm_variants" >&5 -$as_echo "$with_jvm_variants" >&6; } - -JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'` -JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'` -JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` -JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` -JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` - -if test "x$JVM_VARIANT_CLIENT" = xtrue; then - if test "x$HOST_CPU_BITS" = x64; then - as_fn_error $? "You cannot build a client JVM for a 64-bit machine." "$LINENO" 5 - fi -fi -if test "x$JVM_VARIANT_KERNEL" = xtrue; then - if test "x$HOST_CPU_BITS" = x64; then - as_fn_error $? "You cannot build a kernel JVM for a 64-bit machine." "$LINENO" 5 - fi -fi - -COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` -# Replace the commas with AND for use in the build directory name. -ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` -if test "x$COUNT_VARIANTS" != "x,1"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: NOTE! Longer build time since we are building more than one version of the libjvm! $with_jvm_variants" >&5 -$as_echo "$as_me: NOTE! Longer build time since we are building more than one version of the libjvm! $with_jvm_variants" >&6;} -fi - - - - - - - - -############################################################################### -# -# Set the debug level -# release: no debug information, all optimizations, no asserts. -# fastdebug: debug information (-g), all optimizations, all asserts -# slowdebug: debug information (-g), no optimizations, all asserts -# -DEBUG_LEVEL="release" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which debug level to use" >&5 -$as_echo_n "checking which debug level to use... " >&6; } -# Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : - enableval=$enable_debug; - ENABLE_DEBUG="${enableval}" - DEBUG_LEVEL="fastdebug" - -else - ENABLE_DEBUG="no" -fi - - - -# Check whether --with-debug-level was given. -if test "${with_debug_level+set}" = set; then : - withval=$with_debug_level; - DEBUG_LEVEL="${withval}" - if test "x$ENABLE_DEBUG" = xyes; then - as_fn_error $? "You cannot use both --enable-debug and --with-debug-level at the same time." "$LINENO" 5 - fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEBUG_LEVEL" >&5 -$as_echo "$DEBUG_LEVEL" >&6; } - -if test "x$DEBUG_LEVEL" != xrelease && \ - test "x$DEBUG_LEVEL" != xfastdebug && \ - test "x$DEBUG_LEVEL" != xslowdebug; then - as_fn_error $? "Allowed debug levels are: release, fastdebug and slowdebug" "$LINENO" 5 -fi - -case $DEBUG_LEVEL in - release ) - VARIANT="OPT" - FASTDEBUG="false" - DEBUG_CLASSFILES="false" - BUILD_VARIANT_RELEASE="" - ;; - fastdebug ) - VARIANT="DBG" - FASTDEBUG="true" - DEBUG_CLASSFILES="true" - BUILD_VARIANT_RELEASE="-fastdebug" - ;; - slowdebug ) - VARIANT="DBG" - FASTDEBUG="false" - DEBUG_CLASSFILES="true" - BUILD_VARIANT_RELEASE="-debug" - ;; -esac - - - - - - - -# Source the version numbers -. $AUTOCONF_DIR/version.numbers -if test "x$OPENJDK" = "xfalse"; then - . $AUTOCONF_DIR/closed.version.numbers -fi -# Now set the JDK version, milestone, build number etc. - - - - - - - - - - - - -COPYRIGHT_YEAR=`date +'%Y'` - - -RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX" - - -if test "x$JDK_UPDATE_VERSION" != x; then - JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}" -else - JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}" -fi - - -if test "x$MILESTONE" != x; then - RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}" -else - RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}" -fi - - -if test "x$JDK_BUILD_NUMBER" != x; then - FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}" -else - JDK_BUILD_NUMBER=b00 - BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` - # Avoid [:alnum:] since it depends on the locale. - CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` - USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" -fi - -COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` - - -# Test from where we are running configure, in or outside of src root. -if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then - # We are running configure from the src root. - # Create a default ./build/host-variant-debuglevel output root. - CONF_NAME="${HOST_OS}-${HOST_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" - OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" - mkdir -p "$OUTPUT_ROOT" - if test ! -d "$OUTPUT_ROOT"; then - as_fn_error $? "Could not create build directory $OUTPUT_ROOT" "$LINENO" 5 - fi -else - # We are running configure from outside of the src dir. - # Then use the current directory as output dir! - # If configuration is situated in normal build directory, just use the build - # directory name as configuration name, otherwise use the complete path. - CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` - OUTPUT_ROOT="$CURDIR" -fi - - - # Fail with message the path to the output root if var OUTPUT_ROOT contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$OUTPUT_ROOT" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - OUTPUT_ROOT=`$CYGPATH -s -m -a "$OUTPUT_ROOT"` - OUTPUT_ROOT=`$CYGPATH -u "$OUTPUT_ROOT"` - else - as_fn_error $? "You cannot have spaces in the path to the output root! \"$OUTPUT_ROOT\"" "$LINENO" 5 - fi - fi - - -# Save the arguments given to us -echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments - -# Check if the VS env variables were setup prior to running configure. -# If not, then find vcvarsall.bat and run it automatically, and integrate -# the set env variables into the spec file. -SETUPDEVENV="# No special vars" -if test "x$BUILD_OS" = "xwindows"; then - # If vcvarsall.bat has been run, then VCINSTALLDIR is set. - if test "x$VCINSTALLDIR" != x; then - # No further setup is needed. The build will happen from this kind - # of shell. - SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." - # Make sure to remind you, if you forget to run make from a cygwin bash shell - # that is spawned "bash -l" from a VS command prompt. - CHECK_FOR_VCINSTALLDIR=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you are running from within a VS command prompt" >&5 -$as_echo_n "checking if you are running from within a VS command prompt... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. - if test "x$VS100COMNTOOLS" != x; then - VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` - SEARCH_ROOT="$VS100COMNTOOLS" - else - VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` - SEARCH_ROOT="$PROGRAMFILES" - fi - VCPATH=`dirname "$VARSBAT"` - VCPATH=`cygpath -w "$VCPATH"` - if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 -$as_echo_n "checking if we can find the VS installation... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - case "$LEGACY_HOST_CPU1" in - i?86) - VARSBAT_ARCH=x86 - ;; - *) - VARSBAT_ARCH=$LEGACY_HOST_CPU1 - ;; - esac - # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat - cd $OUTPUT_ROOT - bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" - cd $CURDIR - if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can extract the needed env variables" >&5 -$as_echo_n "checking if we can extract the needed env variables... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not succesfully extract the env variables needed for the VS setup. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - # Now set all paths and other env variables. This will allow the rest of - # the configure script to find and run the compiler in the proper way. - . $OUTPUT_ROOT/localdevenv.sh - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 -$as_echo_n "checking if we can find the VS installation... " >&6; } - if test "x$VCINSTALLDIR" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VCINSTALLDIR" >&5 -$as_echo "$VCINSTALLDIR" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not find VS installation. Please install. If you are sure you have installed VS, then please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - CHECK_FOR_VCINSTALLDIR=no - SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for msvcr100.dll" >&5 -$as_echo_n "checking for msvcr100.dll... " >&6; } - -# Check whether --with-msvcr100dll was given. -if test "${with_msvcr100dll+set}" = set; then : - withval=$with_msvcr100dll; -fi - - if test "x$with_msvcr100dll" != x; then - MSVCR100DLL="$with_msvcr100dll" - else - if test "x$HOST_CPU_BITS" = x64; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` - else - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` - if test "x$MSVCR100DLL" = x; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` - fi - fi - fi - if test "x$MSVCR100DLL" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not find msvcr100.dll !" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSVCR100DLL" >&5 -$as_echo "$MSVCR100DLL" >&6; } - - # Fail with message the path to msvcr100.dll if var MSVCR100DLL contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$MSVCR100DLL" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - MSVCR100DLL=`$CYGPATH -s -m -a "$MSVCR100DLL"` - MSVCR100DLL=`$CYGPATH -u "$MSVCR100DLL"` - else - as_fn_error $? "You cannot have spaces in the path to msvcr100.dll! \"$MSVCR100DLL\"" "$LINENO" 5 - fi - fi - - fi -fi - - - - -# Most of the probed defines are put into config.h -ac_config_headers="$ac_config_headers $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" - -# The spec.gmk file contains all variables for the make system. -ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" - -# The generated Makefile knows where the spec.gmk is and where the source is. -# You can run make from the OUTPUT_ROOT. If you have only -# one configured host, then you can also run make from the SRC_ROOT, -# since it will go look for a single spec.gmk file. Or perhaps it -# should instead make all configured hosts it can find? -ac_config_files="$ac_config_files $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" - - -SPEC=$OUTPUT_ROOT/spec.gmk - -CONF_NAME=$CONF_NAME - -OUTPUT_ROOT=$OUTPUT_ROOT - - -# Where are the sources. Any of these can be overridden -# using --with-override-corba and the likes. -LANGTOOLS_TOPDIR="$SRC_ROOT/langtools" -CORBA_TOPDIR="$SRC_ROOT/corba" -JAXP_TOPDIR="$SRC_ROOT/jaxp" -JAXWS_TOPDIR="$SRC_ROOT/jaxws" -HOTSPOT_TOPDIR="$SRC_ROOT/hotspot" -JDK_TOPDIR="$SRC_ROOT/jdk" - - - - - - - -# Check if pkg-config is available. - - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG - fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi - -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=0.9.0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PKG_CONFIG="" - fi - -fi - - -# Check whether --with-builddeps-conf was given. -if test "${with_builddeps_conf+set}" = set; then : - withval=$with_builddeps_conf; -fi - - - -# Check whether --with-builddeps-server was given. -if test "${with_builddeps_server+set}" = set; then : - withval=$with_builddeps_server; -fi - - - -# Check whether --with-builddeps-dir was given. -if test "${with_builddeps_dir+set}" = set; then : - withval=$with_builddeps_dir; -else - with_builddeps_dir=/localhome/builddeps -fi - - - -# Check whether --with-builddeps-group was given. -if test "${with_builddeps_group+set}" = set; then : - withval=$with_builddeps_group; -fi - - -# Check whether --enable-list-builddeps was given. -if test "${enable_list_builddeps+set}" = set; then : - enableval=$enable_list_builddeps; LIST_BUILDDEPS="${enableval}" -else - LIST_BUILDDEPS='no' -fi - - -if test "x$LIST_BUILDDEPS" = xyes; then - echo - echo List of build dependencies known to the configure script, - echo that can be used in builddeps.conf files: - cat $SRC_ROOT/configure.ac | grep BDEPS_CHECK_MODUL | grep -v configure.ac | cut -f 2 -d ',' | tr -d ' ' | sort - echo +for file in configure.ac *.m4 ; do + if $TEST $file -nt generated-configure.sh; then + print_error_not_up_to_date exit 1 -fi - -# If builddeps server or conf file is given. Setup buildeps usage. - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - if test "x$with_builddeps_conf" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supplied builddeps configuration file" >&5 -$as_echo_n "checking for supplied builddeps configuration file... " >&6; } - builddepsfile=$with_builddeps_conf - if test -s $builddepsfile; then - . $builddepsfile - { $as_echo "$as_me:${as_lineno-$LINENO}: result: loaded!" >&5 -$as_echo "loaded!" >&6; } - else - as_fn_error $? "The given builddeps conf file $with_builddeps_conf could not be loaded!" "$LINENO" 5 - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for builddeps.conf files in sources..." >&5 -$as_echo_n "checking for builddeps.conf files in sources...... " >&6; } - builddepsfile=`mktemp` - touch $builddepsfile - # Put all found confs into a single file. - find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile - # Source the file to acquire the variables - if test -s $builddepsfile; then - . $builddepsfile - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found at least one!" >&5 -$as_echo "found at least one!" >&6; } - else - as_fn_error $? "Could not find any builddeps.conf at all!" "$LINENO" 5 - fi - fi - # Create build and host names that use _ instead of "-" and ".". - # This is necessary to use them in variable names. - build_var=`echo ${build} | tr '-' '_' | tr '.' '_'` - host_var=`echo ${host} | tr '-' '_' | tr '.' '_'` - # Extract rewrite information for build and host - eval rewritten_build=\${REWRITE_${build_var}} - if test "x$rewritten_build" = x; then - rewritten_build=${build} - echo Build stays the same $rewritten_build - else - echo Rewriting build for builddeps into $rewritten_build - fi - eval rewritten_host=\${REWRITE_${host_var}} - if test "x$rewritten_host" = x; then - rewritten_host=${host} - echo Host stays the same $rewritten_host - else - echo Rewriting host for builddeps into $rewritten_host - fi - rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` - rewritten_host_var=`echo ${rewritten_host} | tr '-' '_' | tr '.' '_'` - fi - for ac_prog in 7z unzip -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$BDEPS_UNZIP"; then - ac_cv_prog_BDEPS_UNZIP="$BDEPS_UNZIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_BDEPS_UNZIP="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 fi done - done -IFS=$as_save_IFS -fi -fi -BDEPS_UNZIP=$ac_cv_prog_BDEPS_UNZIP -if test -n "$BDEPS_UNZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_UNZIP" >&5 -$as_echo "$BDEPS_UNZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$BDEPS_UNZIP" && break -done - - if test "x$BDEPS_UNZIP" = x7z; then - BDEPS_UNZIP="7z x" +if $TEST -e $conf_closed_script_dir/generated-configure.sh; then + # If closed source configure is available, make sure it is up-to-date as well. + for file in configure.ac *.m4 $conf_closed_script_dir/*.m4; do + if $TEST $file -nt $conf_closed_script_dir/generated-configure.sh; then + print_error_not_up_to_date + exit 1 fi - - for ac_prog in wget lftp ftp -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$BDEPS_FTP"; then - ac_cv_prog_BDEPS_FTP="$BDEPS_FTP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_BDEPS_FTP="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done done -IFS=$as_save_IFS -fi -fi -BDEPS_FTP=$ac_cv_prog_BDEPS_FTP -if test -n "$BDEPS_FTP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_FTP" >&5 -$as_echo "$BDEPS_FTP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + # Test if open configure is newer than closed configure, if so, closed needs to + # be regenerated. + conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_script_dir/generated-configure.sh | cut -d" " -f 3` + conf_closed_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_closed_script_dir/generated-configure.sh | cut -d" " -f 3` + if $TEST $conf_open_configure_timestamp -gt $conf_closed_configure_timestamp; then + print_error_not_up_to_date + exit 1 + fi + fi +### +### Process command-line arguments +### +conf_processed_arguments= +conf_openjdk_target= +conf_extra_cflags= +conf_extra_cxxflags= - test -n "$BDEPS_FTP" && break -done - - - -############################################################################### -# -# Configure the development tool paths and potential sysroot. -# -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -DEVKIT= -SYS_ROOT=/ - - -# The option used to specify the target .o,.a or .so file. -# When compiling, how to specify the to be created object file. -CC_OUT_OPTION='-o$(SPACE)' -# When linking, how to specify the to be created executable. -EXE_OUT_OPTION='-o$(SPACE)' -# When linking, how to specify the to be created dynamically linkable library. -LD_OUT_OPTION='-o$(SPACE)' -# When archiving, how to specify the to be create static archive for object files. -AR_OUT_OPTION='rcs$(SPACE)' - - - - - -# If --build AND --host is set, then the configure script will find any -# cross compilation tools in the PATH. Cross compilation tools -# follows the cross compilation standard where they are prefixed with ${host}. -# For example the binary i686-sun-solaris2.10-gcc -# will cross compile for i686-sun-solaris2.10 -# If neither of build and host is not set, then build=host and the -# default compiler found in the path will be used. -# Setting only --host, does not seem to be really supported. -# Please set both --build and --host if you want to cross compile. - -DEFINE_CROSS_COMPILE_ARCH="" -HOSTCC="" -HOSTCXX="" - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if this is a cross compile" >&5 -$as_echo_n "checking if this is a cross compile... " >&6; } -if test "x$build_var" != "x$host_var"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, from $build_var to $host_var" >&5 -$as_echo "yes, from $build_var to $host_var" >&6; } - # We have detected a cross compile! - DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_HOST_CPU1" - # Now we to find a C/C++ compiler that can build executables for the build - # platform. We can't use the AC_PROG_CC macro, since it can only be used - # once. - for ac_prog in cl cc gcc +for conf_option do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HOSTCC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $HOSTCC in - [\\/]* | ?:[\\/]*) - ac_cv_path_HOSTCC="$HOSTCC" # Let the user override the test with a path. - ;; + case $conf_option in + --openjdk-target=*) + conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'` + continue ;; + --with-extra-cflags=*) + conf_extra_cflags=`expr "X$conf_option" : '[^=]*=\(.*\)'` + continue ;; + --with-extra-cxxflags=*) + conf_extra_cxxflags=`expr "X$conf_option" : '[^=]*=\(.*\)'` + continue ;; *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HOSTCC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HOSTCC=$ac_cv_path_HOSTCC -if test -n "$HOSTCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCC" >&5 -$as_echo "$HOSTCC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$HOSTCC" && break -done - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$HOSTCC" - car="${tmp%% *}" - tmp="$HOSTCC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - HOSTCC="$car ${cdr% *}" - else - HOSTCC="$car" - fi - - for ac_prog in cl CC g++ -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HOSTCXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $HOSTCXX in - [\\/]* | ?:[\\/]*) - ac_cv_path_HOSTCXX="$HOSTCXX" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HOSTCXX="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HOSTCXX=$ac_cv_path_HOSTCXX -if test -n "$HOSTCXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCXX" >&5 -$as_echo "$HOSTCXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$HOSTCXX" && break -done - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$HOSTCXX" - car="${tmp%% *}" - tmp="$HOSTCXX EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - HOSTCXX="$car ${cdr% *}" - else - HOSTCXX="$car" - fi - - # Building for the build platform should be easy. Therefore - # we do not need any linkers or assemblers etc. -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - -# You can force the sys-root if the sys-root encoded into the cross compiler tools -# is not correct. - -# Check whether --with-sys-root was given. -if test "${with_sys_root+set}" = set; then : - withval=$with_sys_root; -fi - - -if test "x$with_sys_root" != x; then - SYS_ROOT=$with_sys_root -fi - -# If a devkit is found on the builddeps server, then prepend its path to the -# PATH variable. If there are cross compilers available in the devkit, these -# will be found by AC_PROG_CC et al. - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_devkit_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The devkit comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_devkit} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for devkit" >&5 -$as_echo "$as_me: Using builddeps $resource for devkit" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# devkit is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/devkit.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_devkit_ROOT} - thecflags=${builddep_devkit_CFLAGS} - thelibs=${builddep_devkit_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency devkit" "$LINENO" 5 - fi - DEVKIT=$depdir - if test "x$theroot" != x; then - DEVKIT="$theroot" - fi - if test "x$thecflags" != x; then - DEVKIT_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - DEVKIT_LIBS="$thelibs" - fi - # Found devkit - PATH="$DEVKIT/bin:$PATH" - SYS_ROOT="$DEVKIT/${rewritten_host}/sys-root" - if test "x$x_includes" = "xNONE"; then - x_includes="$SYS_ROOT/usr/include/X11" - fi - if test "x$x_libraries" = "xNONE"; then - x_libraries="$SYS_ROOT/usr/lib" - fi - - - fi - - fi - - -if test "x$SYS_ROOT" != "x/" ; then - CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" - CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" - OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" - OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" - CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" - LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" -fi - -# Store the CFLAGS etal passed to the configure script. -ORG_CFLAGS="$CFLAGS" -ORG_CXXFLAGS="$CXXFLAGS" -ORG_OBJCFLAGS="$OBJCFLAGS" - -prepare_help_system - -# gcc is almost always present, but on Windows we -# prefer cl.exe and on Solaris we prefer CC. -# Thus test for them in this order. -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in cl cc gcc - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl cc gcc -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5 ; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5 ; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5 ; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5 ; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5 ; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -if test "x$CC" = x; then - help_on_build_dependency devkit - as_fn_error $? "Could not find a compiler. $HELP_MSG" "$LINENO" 5 -fi -if test "x$CC" = xcc && test "x$BUILD_OS" = xmacosx; then - # Do not use cc on MacOSX use gcc instead. - CC="gcc" -fi - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CC" - car="${tmp%% *}" - tmp="$CC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CC="$car ${cdr% *}" - else - CC="$car" - fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in cl CC g++ - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in cl CC g++ -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -if test "x$CXX" = xCC && test "x$BUILD_OS" = xmacosx; then - # The found CC, even though it seems to be a g++ derivate, cannot compile - # c++ code. Override. - CXX="g++" -fi - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CXX" - car="${tmp%% *}" - tmp="$CXX EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CXX="$car ${cdr% *}" - else - CXX="$car" - fi - - -if test "x$CXX" = x || test "x$CC" = x; then - help_on_build_dependency devkit - as_fn_error $? "Could not find the needed compilers! $HELP_MSG " "$LINENO" 5 -fi - -if test "x$BUILD_OS" != xwindows; then - ac_ext=m -ac_cpp='$OBJCPP $CPPFLAGS' -ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_objc_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in gcc objcc objc cc CC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJC"; then - ac_cv_prog_OBJC="$OBJC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJC=$ac_cv_prog_OBJC -if test -n "$OBJC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJC" >&5 -$as_echo "$OBJC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$OBJC" && break - done -fi -if test -z "$OBJC"; then - ac_ct_OBJC=$OBJC - for ac_prog in gcc objcc objc cc CC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJC"; then - ac_cv_prog_ac_ct_OBJC="$ac_ct_OBJC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJC=$ac_cv_prog_ac_ct_OBJC -if test -n "$ac_ct_OBJC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJC" >&5 -$as_echo "$ac_ct_OBJC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_OBJC" && break -done - - if test "x$ac_ct_OBJC" = x; then - OBJC="gcc" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJC=$ac_ct_OBJC - fi -fi - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for Objective C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Objective C compiler" >&5 -$as_echo_n "checking whether we are using the GNU Objective C compiler... " >&6; } -if test "${ac_cv_objc_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_objc_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_objc_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objc_compiler_gnu" >&5 -$as_echo "$ac_cv_objc_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GOBJC=yes -else - GOBJC= -fi -ac_test_OBJCFLAGS=${OBJCFLAGS+set} -ac_save_OBJCFLAGS=$OBJCFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $OBJC accepts -g" >&5 -$as_echo_n "checking whether $OBJC accepts -g... " >&6; } -if test "${ac_cv_prog_objc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_objc_werror_flag=$ac_objc_werror_flag - ac_objc_werror_flag=yes - ac_cv_prog_objc_g=no - OBJCFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_objc_try_compile "$LINENO"; then : - ac_cv_prog_objc_g=yes -else - OBJCFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_objc_try_compile "$LINENO"; then : - -else - ac_objc_werror_flag=$ac_save_objc_werror_flag - OBJCFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_objc_try_compile "$LINENO"; then : - ac_cv_prog_objc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_objc_werror_flag=$ac_save_objc_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_objc_g" >&5 -$as_echo "$ac_cv_prog_objc_g" >&6; } -if test "$ac_test_OBJCFLAGS" = set; then - OBJCFLAGS=$ac_save_OBJCFLAGS -elif test $ac_cv_prog_objc_g = yes; then - if test "$GOBJC" = yes; then - OBJCFLAGS="-g -O2" - else - OBJCFLAGS="-g" - fi -else - if test "$GOBJC" = yes; then - OBJCFLAGS="-O2" - else - OBJCFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$OBJC" - car="${tmp%% *}" - tmp="$OBJC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - OBJC="$car ${cdr% *}" - else - OBJC="$car" - fi - -else - OBJC= -fi - -# Restore the flags to the user specified values. -# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" -CFLAGS="$ORG_CFLAGS" -CXXFLAGS="$ORG_CXXFLAGS" -OBJCFLAGS="$ORG_OBJCFLAGS" - -# If we are not cross compiling, use the same compilers for -# building the build platform executables. -if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then - HOSTCC="$CC" - HOSTCXX="$CXX" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args. -set dummy ${ac_tool_prefix}ld; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LD"; then - ac_cv_prog_LD="$LD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_LD="${ac_tool_prefix}ld" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -LD=$ac_cv_prog_LD -if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LD"; then - ac_ct_LD=$LD - # Extract the first word of "ld", so it can be a program name with args. -set dummy ld; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LD"; then - ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_LD="ld" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_LD=$ac_cv_prog_ac_ct_LD -if test -n "$ac_ct_LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 -$as_echo "$ac_ct_LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LD" = x; then - LD="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - LD=$ac_ct_LD - fi -else - LD="$ac_cv_prog_LD" -fi - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$LD" - car="${tmp%% *}" - tmp="$LD EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - LD="$car ${cdr% *}" - else - LD="$car" - fi - -LD="$CC" -LDEXE="$CC" -LDCXX="$CXX" -LDEXECXX="$CXX" -# LDEXE is the linker to use, when creating executables. - -# Linking C++ libraries. - -# Linking C++ executables. - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$AR" - car="${tmp%% *}" - tmp="$AR EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - AR="$car ${cdr% *}" - else - AR="$car" - fi - -if test "x$BUILD_OS" = xmacosx; then - ARFLAGS="-r" -else - ARFLAGS="" -fi - - -COMPILER_NAME=gcc -COMPILER_TYPE=CC -if test "x$BUILD_OS" = xwindows; then : - - # For now, assume that we are always compiling using cl.exe. - CC_OUT_OPTION=-Fo - EXE_OUT_OPTION=-out: - LD_OUT_OPTION=-out: - AR_OUT_OPTION=-out: - # On Windows, reject /usr/bin/link, which is a cygwin - # program for something completely different. - # Extract the first word of "link", so it can be a program name with args. -set dummy link; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_WINLD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$WINLD"; then - ac_cv_prog_WINLD="$WINLD" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/link"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_WINLD="link" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_WINLD - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set WINLD to just the basename; use the full file name. - shift - ac_cv_prog_WINLD="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -WINLD=$ac_cv_prog_WINLD -if test -n "$WINLD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINLD" >&5 -$as_echo "$WINLD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - # Since we must ignore the first found link, WINLD will contain - # the full path to the link.exe program. - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$WINLD" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$WINLD"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - WINLD="$tmp" - - LD="$WINLD" - LDEXE="$WINLD" - LDCXX="$WINLD" - LDEXECXX="$WINLD" - - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_MT+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MT"; then - ac_cv_prog_MT="$MT" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/mt"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_MT="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_MT - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set MT to just the basename; use the full file name. - shift - ac_cv_prog_MT="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -MT=$ac_cv_prog_MT -if test -n "$MT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MT" >&5 -$as_echo "$MT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$MT" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$MT"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - MT="$tmp" - - # The resource compiler - # Extract the first word of "rc", so it can be a program name with args. -set dummy rc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RC"; then - ac_cv_prog_RC="$RC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/rc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_RC="rc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_RC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set RC to just the basename; use the full file name. - shift - ac_cv_prog_RC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -RC=$ac_cv_prog_RC -if test -n "$RC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 -$as_echo "$RC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$RC" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$RC"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - RC="$tmp" - - - RC_FLAGS="-nologo /l 0x409 /r" - if test "x$VARIANT" = xOPT; then : - - RC_FLAGS="$RC_FLAGS -d NDEBUG" - -fi - JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION - if test "x$JDK_UPDATE_VERSION" = x; then : - - JDK_UPDATE_VERSION_NOTNULL=0 - -fi - RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" - - # lib.exe is used to create static libraries. - # Extract the first word of "lib", so it can be a program name with args. -set dummy lib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_WINAR+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$WINAR"; then - ac_cv_prog_WINAR="$WINAR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_WINAR="lib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -WINAR=$ac_cv_prog_WINAR -if test -n "$WINAR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINAR" >&5 -$as_echo "$WINAR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$WINAR" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$WINAR"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - WINAR="$tmp" - - AR="$WINAR" - ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" - - # Extract the first word of "dumpbin", so it can be a program name with args. -set dummy dumpbin; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DUMPBIN="dumpbin" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$DUMPBIN" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$DUMPBIN"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - DUMPBIN="$tmp" - - - COMPILER_TYPE=CL - CCXXFLAGS="$CCXXFLAGS -nologo" - LDFLAGS="$LDFLAGS -nologo -opt:ref -incremental:no" - if test "x$LEGACY_HOST_CPU1" = xi586; then - LDFLAGS="$LDFLAGS -safeseh" - fi - # TODO: make -debug optional "--disable-full-debug-symbols" - LDFLAGS="$LDFLAGS -debug" - -fi - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5 ; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CPP" - car="${tmp%% *}" - tmp="$CPP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CPP="$car ${cdr% *}" - else - CPP="$car" - fi - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5 ; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CXXCPP" - car="${tmp%% *}" - tmp="$CXXCPP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CXXCPP="$car ${cdr% *}" - else - CXXCPP="$car" - fi - - -# Find the right assembler. -if test "x$BUILD_OS" = xsolaris; then - # Extract the first word of "as", so it can be a program name with args. -set dummy as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_AS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $AS in - [\\/]* | ?:[\\/]*) - ac_cv_path_AS="$AS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_AS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -AS=$ac_cv_path_AS -if test -n "$AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 -$as_echo "$AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$AS" - car="${tmp%% *}" - tmp="$AS EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - AS="$car ${cdr% *}" - else - AS="$car" - fi - - ASFLAGS=" " -else - AS="$CC -c" - ASFLAGS=" " -fi - - - -if test "x$HOST_CPU_BITS" = x32 && test "x$HOST_OS" = xmacosx; then - # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. - # While waiting for a better solution, the current workaround is to use -mstackrealign. - CFLAGS="$CFLAGS -mstackrealign" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 32-bit compiler supports -mstackrealign" >&5 -$as_echo_n "checking if 32-bit compiler supports -mstackrealign... " >&6; } - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int main() { return 0; } -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path." "$LINENO" 5 - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - -if test "x$BUILD_OS" = xsolaris; then - # Extract the first word of "nm", so it can be a program name with args. -set dummy nm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $NM in - [\\/]* | ?:[\\/]*) - ac_cv_path_NM="$NM" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -NM=$ac_cv_path_NM -if test -n "$NM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 -$as_echo "$NM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$NM" - car="${tmp%% *}" - tmp="$NM EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - NM="$car ${cdr% *}" - else - NM="$car" - fi - - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $STRIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -STRIP=$ac_cv_path_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$STRIP" - car="${tmp%% *}" - tmp="$STRIP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - STRIP="$car ${cdr% *}" - else - STRIP="$car" - fi - - # Extract the first word of "mcs", so it can be a program name with args. -set dummy mcs; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MCS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $MCS in - [\\/]* | ?:[\\/]*) - ac_cv_path_MCS="$MCS" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MCS=$ac_cv_path_MCS -if test -n "$MCS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5 -$as_echo "$MCS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MCS" - car="${tmp%% *}" - tmp="$MCS EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MCS="$car ${cdr% *}" - else - MCS="$car" - fi - -else - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. -set dummy ${ac_tool_prefix}nm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - ac_cv_prog_NM="$NM" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_NM="${ac_tool_prefix}nm" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -NM=$ac_cv_prog_NM -if test -n "$NM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 -$as_echo "$NM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NM"; then - ac_ct_NM=$NM - # Extract the first word of "nm", so it can be a program name with args. -set dummy nm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NM"; then - ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_NM="nm" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_NM=$ac_cv_prog_ac_ct_NM -if test -n "$ac_ct_NM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5 -$as_echo "$ac_ct_NM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NM" = x; then - NM="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - NM=$ac_ct_NM - fi -else - NM="$ac_cv_prog_NM" -fi - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$NM" - car="${tmp%% *}" - tmp="$NM EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - NM="$car ${cdr% *}" - else - NM="$car" - fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$STRIP" - car="${tmp%% *}" - tmp="$STRIP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - STRIP="$car ${cdr% *}" - else - STRIP="$car" - fi - -fi - -# When using cygwin, we need a wrapper binary that renames -# /cygdrive/c/ arguments into c:/ arguments and peeks into -# @files and rewrites these too! This wrapper binary is -# called uncygdrive.exe. -UNCYGDRIVE= -if test "x$BUILD_OS" = xwindows; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive can be created" >&5 -$as_echo_n "checking if uncygdrive can be created... " >&6; } - UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` - rm -f $OUTPUT_ROOT/uncygdrive* - UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` - cd $OUTPUT_ROOT - $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 - cd $CURDIR - - if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - cat $OUTPUT_ROOT/uncygdrive1.log - as_fn_error $? "Could not create $OUTPUT_ROOT/uncygdrive.exe" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNCYGDRIVE" >&5 -$as_echo "$UNCYGDRIVE" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive.exe works" >&5 -$as_echo_n "checking if uncygdrive.exe works... " >&6; } - cd $OUTPUT_ROOT - $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 - cd $CURDIR - if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - cat $OUTPUT_ROOT/uncygdrive2.log - as_fn_error $? "Uncygdrive did not work!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj -fi - - - - - # Check whether --enable-ccache was given. -if test "${enable_ccache+set}" = set; then : - enableval=$enable_ccache; ENABLE_CCACHE=${enable_ccache} -else - ENABLE_CCACHE=yes -fi - - if test "x$ENABLE_CCACHE" = xyes; then - # Extract the first word of "ccache", so it can be a program name with args. -set dummy ccache; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CCACHE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CCACHE in - [\\/]* | ?:[\\/]*) - ac_cv_path_CCACHE="$CCACHE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CCACHE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CCACHE=$ac_cv_path_CCACHE -if test -n "$CCACHE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCACHE" >&5 -$as_echo "$CCACHE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ccache" >&5 -$as_echo_n "checking for ccache... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: explicitly disabled" >&5 -$as_echo "explicitly disabled" >&6; } - CCACHE= - fi - - - -# Check whether --with-ccache-dir was given. -if test "${with_ccache_dir+set}" = set; then : - withval=$with_ccache_dir; -fi - - - if test "x$with_ccache_dir" != x; then - # When using a non home ccache directory, assume the use is to share ccache files - # with other users. Thus change the umask. - SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" - fi - CCACHE_FOUND="" - if test "x$CCACHE" != x; then - - if test "x$CCACHE" != x; then - CCACHE_FOUND="true" - # Only use ccache if it is 3.1.4 or later, which supports - # precompiled headers. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ccache supports precompiled headers" >&5 -$as_echo_n "checking if ccache supports precompiled headers... " >&6; } - HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.[456789]) 2> /dev/null` - if test "x$HAS_GOOD_CCACHE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccache" >&5 -$as_echo "no, disabling ccache" >&6; } - CCACHE= - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C-compiler supports ccache precompiled headers" >&5 -$as_echo_n "checking if C-compiler supports ccache precompiled headers... " >&6; } - PUSHED_FLAGS="$CXXFLAGS" - CXXFLAGS="-fpch-preprocess $CXXFLAGS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - CC_KNOWS_CCACHE_TRICK=yes -else - CC_KNOWS_CCACHE_TRICK=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CXXFLAGS="$PUSHED_FLAGS" - if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccaching of precompiled headers" >&5 -$as_echo "no, disabling ccaching of precompiled headers" >&6; } - CCACHE= - fi - fi - fi - - if test "x$CCACHE" != x; then - CCACHE_SLOPPINESS=time_macros - CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" - CCACHE_FLAGS=-fpch-preprocess - - if test "x$SET_CCACHE_DIR" != x; then - mkdir -p $CCACHE_DIR > /dev/null 2>&1 - chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 - fi - fi - - fi - - -# Used on GNU/Linux systems, can be empty... -#AC_PATH_PROG(ELFDUMP, elfdump) - -# Setup default logging of stdout and stderr to build.log in the output root. -BUILD_LOG='$(OUTPUT_ROOT)/build.log' -BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' - - - -############################################################################### -# -# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. -# (The JVM can use 32 or 64 bit Java pointers but that decision -# is made at runtime.) -# -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -OLD_CXXFLAGS="$CXXFLAGS" -if test "x$HOST_OS" = xsolaris && test "x$with_data_model" != x; then - CXXFLAGS="-m{$with_data_model} $CXXFLAGS" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int *" >&5 -$as_echo_n "checking size of int *... " >&6; } -if test "${ac_cv_sizeof_int_p+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int *))" "ac_cv_sizeof_int_p" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_int_p" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (int *) -See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_int_p=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int_p" >&5 -$as_echo "$ac_cv_sizeof_int_p" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT_P $ac_cv_sizeof_int_p -_ACEOF - - -CXXFLAGS="$OLD_CXXFLAGS" -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -if test "x$ac_cv_sizeof_int_p" = x0; then - # The test failed, lets pick the assumed value. - ARCH_DATA_MODEL=$HOST_CPU_BITS -else - ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` -fi - -if test "x$ARCH_DATA_MODEL" = x64; then - A_LP64="LP64:=" - ADD_LP64="-D_LP64=1" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for host address size" >&5 -$as_echo_n "checking for host address size... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ARCH_DATA_MODEL bits" >&5 -$as_echo "$ARCH_DATA_MODEL bits" >&6; } -LP64=$A_LP64 - - - -if test "x$ARCH_DATA_MODEL" != "x$HOST_CPU_BITS"; then - as_fn_error $? "The tested number of bits in the host ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the host ($HOST_CPU_BITS)" "$LINENO" 5 -fi - -############################################################################### -# -# Can the C/C++ compiler use precompiled headers? -# -# Check whether --enable-precompiled-headers was given. -if test "${enable_precompiled_headers+set}" = set; then : - enableval=$enable_precompiled_headers; ENABLE_PRECOMPH=${enable_precompiled-headers} -else - ENABLE_PRECOMPH=yes -fi - - -USE_PRECOMPILED_HEADER=1 -if test "x$ENABLE_PRECOMPH" = xno; then - USE_PRECOMPILED_HEADER=0 -fi - -if test "x$ENABLE_PRECOMPH" = xyes; then - # Check that the compiler actually supports precomp headers. - if test "x$GCC" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking that precompiled headers work" >&5 -$as_echo_n "checking that precompiled headers work... " >&6; } - echo "int alfa();" > conftest.h - $CXX -x c++-header conftest.h -o conftest.hpp.gch - if test ! -f conftest.hpp.gch; then - echo Precompiled header is not working! - USE_PRECOMPILED_HEADER=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - rm -f conftest.h - fi -fi - - - -############################################################################### -# -# How to compile shared libraries. -# - -if test "x$GCC" = xyes; then - COMPILER_NAME=gcc - PICFLAG="-fPIC" - LIBRARY_PREFIX=lib - SHARED_LIBRARY='lib$1.so' - STATIC_LIBRARY='lib$1.a' - SHARED_LIBRARY_FLAGS="-shared" - SHARED_LIBRARY_SUFFIX='.so' - STATIC_LIBRARY_SUFFIX='.a' - OBJ_SUFFIX='.o' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1' - SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$1' - C_FLAG_REORDER='' - CXX_FLAG_REORDER='' - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1' - LD="$CC" - LDEXE="$CC" - LDCXX="$CXX" - LDEXECXX="$CXX" - # TODO: for embedded set --strip-unneeded - POST_STRIP_CMD="$STRIP -g" - - # Linking is different on MacOSX - if test "x$BUILD_OS" = xmacosx; then - # Might change in the future to clang. - COMPILER_NAME=gcc - SHARED_LIBRARY='lib$1.dylib' - SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" - SHARED_LIBRARY_SUFFIX='.dylib' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' - SET_SHARED_LIBRARY_MAPFILE='' - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' - POST_STRIP_CMD="$STRIP -S" - fi -else - if test "x$BUILD_OS" = xsolaris; then - # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler - COMPILER_NAME=ossc - PICFLAG="-KPIC" - LIBRARY_PREFIX=lib - SHARED_LIBRARY='lib$1.so' - STATIC_LIBRARY='lib$1.a' - SHARED_LIBRARY_FLAGS="-G" - SHARED_LIBRARY_SUFFIX='.so' - STATIC_LIBRARY_SUFFIX='.a' - OBJ_SUFFIX='.o' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='-M $1' - C_FLAG_REORDER='-xF' - CXX_FLAG_REORDER='-xF' - SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1' - CFLAGS_JDKLIB_EXTRA='-xstrconst -D__solaris__' - POST_STRIP_CMD="$STRIP -x" - POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" - fi - if test "x$BUILD_OS" = xwindows; then - # If it is not gcc, then assume it is the MS Visual Studio compiler - COMPILER_NAME=cl - PICFLAG="" - LIBRARY_PREFIX= - SHARED_LIBRARY='$1.dll' - STATIC_LIBRARY='$1.lib' - SHARED_LIBRARY_FLAGS="-LD" - SHARED_LIBRARY_SUFFIX='.dll' - STATIC_LIBRARY_SUFFIX='.lib' - OBJ_SUFFIX='.obj' - EXE_SUFFIX='.exe' - SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='' - SET_SHARED_LIBRARY_ORIGIN='' - fi -fi - - - - - - - - - - - - - - - - - -# The (cross) compiler is now configured, we can now test capabilities -# of the host platform. - -############################################################################### -# -# Is the host little of big endian? -# - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main () -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_c_bigendian=yes -else - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes; then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main () -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_run "$LINENO"; then : - ac_cv_c_bigendian=no -else - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - ENDIAN="big";; #( - no) - ENDIAN="little" ;; #( - universal) - ENDIAN="universal" - ;; #( - *) - ENDIAN="unknown" ;; - esac - - -if test "x$ENDIAN" = xuniversal; then - as_fn_error $? "It seems like someone needs to decide how we are to deal with universal binaries on the MacOSX?" "$LINENO" 5 -fi -if test "x$ENDIAN" = xunknown; then - ENDIAN="$HOST_CPU_ENDIAN" -fi -if test "x$ENDIAN" != "x$HOST_CPU_ENDIAN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)" >&5 -$as_echo "$as_me: WARNING: The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)" >&2;} - ENDIAN="$HOST_CPU_ENDIAN" -fi - - -############################################################################### -# -# We need a Boot JDK to bootstrap the build. -# -BOOT_JDK_FOUND=no - -# Check whether --with-boot-jdk was given. -if test "${with_boot_jdk+set}" = set; then : - withval=$with_boot_jdk; -fi - - -if test "x$with_boot_jdk" != x; then - BOOT_JDK=$with_boot_jdk - BOOT_JDK_FOUND=yes -fi -if test "x$BOOT_JDK_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_boot-jdk_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_boot-jdk_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_boot-jdk_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The boot-jdk comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_boot-jdk} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for boot-jdk" >&5 -$as_echo "$as_me: Using builddeps $resource for boot-jdk" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# boot-jdk is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency boot-jdk from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency boot-jdk from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/boot-jdk.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_boot-jdk_ROOT} - thecflags=${builddep_boot-jdk_CFLAGS} - thelibs=${builddep_boot-jdk_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency boot-jdk" "$LINENO" 5 - fi - BOOT_JDK=$depdir - if test "x$theroot" != x; then - BOOT_JDK="$theroot" - fi - if test "x$thecflags" != x; then - BOOT_JDK_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - BOOT_JDK_LIBS="$thelibs" - fi - BOOT_JDK_FOUND=yes - else BOOT_JDK_FOUND=no - - fi - else BOOT_JDK_FOUND=no - - fi - -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - if test "x$JAVA_HOME" != x; then - if test ! -d "$JAVA_HOME"; then - as_fn_error $? "Your JAVA_HOME points to a non-existing directory!" "$LINENO" 5 - fi - # Aha, the user has set a JAVA_HOME - # let us use that as the Boot JDK. - BOOT_JDK="$JAVA_HOME" - BOOT_JDK_FOUND=yes - # To be on the safe side, lets check that it is a JDK. - if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then - JAVAC="$BOOT_JDK/bin/javac" - JAVA="$BOOT_JDK/bin/java" - BOOT_JDK_FOUND=yes - else - as_fn_error $? "Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=$JAVA_HOME" "$LINENO" 5 - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - # Extract the first word of "javac", so it can be a program name with args. -set dummy javac; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_JAVAC_CHECK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $JAVAC_CHECK in - [\\/]* | ?:[\\/]*) - ac_cv_path_JAVAC_CHECK="$JAVAC_CHECK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_JAVAC_CHECK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -JAVAC_CHECK=$ac_cv_path_JAVAC_CHECK -if test -n "$JAVAC_CHECK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC_CHECK" >&5 -$as_echo "$JAVAC_CHECK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - # Extract the first word of "java", so it can be a program name with args. -set dummy java; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_JAVA_CHECK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $JAVA_CHECK in - [\\/]* | ?:[\\/]*) - ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -JAVA_CHECK=$ac_cv_path_JAVA_CHECK -if test -n "$JAVA_CHECK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5 -$as_echo "$JAVA_CHECK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - BINARY="$JAVAC_CHECK" - if test "x$JAVAC_CHECK" = x; then - BINARY="$JAVA_CHECK" - fi - if test "x$BINARY" != x; then - # So there is a java(c) binary, it might be part of a JDK. - # Lets find the JDK/JRE directory by following symbolic links. - # Linux/GNU systems often have links from /usr/bin/java to - # /etc/alternatives/java to the real JDK binary. - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$BINARY" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$BINARY"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - BINARY="$tmp" - - - if test "x$BUILD_OS" != xwindows; then - # Follow a chain of symbolic links. Use readlink - # where it exists, else fall back to horribly - # complicated shell code. - # Extract the first word of "readlink", so it can be a program name with args. -set dummy readlink; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READLINK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READLINK in - [\\/]* | ?:[\\/]*) - ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -READLINK=$ac_cv_path_READLINK -if test -n "$READLINK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 -$as_echo "$READLINK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$READLINK_TESTED" != yes; then - # On MacOSX there is a readlink tool with a different - # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` - if test "x$ISGNU" = x; then - # A readlink that we do not know how to use. - # Are there other non-GNU readlinks out there? - READLINK_TESTED=yes - READLINK= - fi - fi - - if test "x$READLINK" != x; then - BINARY=`$READLINK -f $BINARY` - else - STARTDIR=$PWD - COUNTER=0 - DIR=`dirname $BINARY` - FIL=`basename $BINARY` - while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` - if test "x$ISLINK" == x; then - # This is not a symbolic link! We are done! - break - fi - # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` - let COUNTER=COUNTER+1 - done - cd $STARTDIR - BINARY=$DIR/$FIL - fi - fi - - BOOT_JDK=`dirname $BINARY` - BOOT_JDK=`cd $BOOT_JDK/..; pwd` - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - # Try the MacOSX way. - if test -x /usr/libexec/java_home; then - BOOT_JDK=`/usr/libexec/java_home` - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - # Extract the first word of "java", so it can be a program name with args. -set dummy java; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_JAVA_CHECK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $JAVA_CHECK in - [\\/]* | ?:[\\/]*) - ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -JAVA_CHECK=$ac_cv_path_JAVA_CHECK -if test -n "$JAVA_CHECK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5 -$as_echo "$JAVA_CHECK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$JAVA_CHECK" != x; then - # There is a java in the path. But apparently we have not found a javac - # in the path, since that would have been tested earlier. - if test "x$HOST_OS" = xwindows; then - # Now if this is a windows platform. The default installation of a JDK - # actually puts the JRE in the path and keeps the JDK out of the path! - # Go look in the default installation location. - BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1` - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=yes - fi - fi - if test "x$BOOT_JDK_FOUND" = xno; then - help_on_build_dependency openjdk - as_fn_error $? "Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG" "$LINENO" 5 - fi - else - help_on_build_dependency openjdk - as_fn_error $? "Could not find a JDK. $HELP_MSG" "$LINENO" 5 - fi -fi - - - if test "x$BUILD_OS" = "xwindows"; then - # Extract the first word of "cygpath", so it can be a program name with args. -set dummy cygpath; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CYGPATH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CYGPATH in - [\\/]* | ?:[\\/]*) - ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CYGPATH=$ac_cv_path_CYGPATH -if test -n "$CYGPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 -$as_echo "$CYGPATH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - tmp="$BOOT_JDK" - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - BOOT_JDK="$tmp" - fi - - -# Now see if we can find the rt.jar, or its nearest equivalent. -BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar" - - # Fail with message the path to the Boot JDK rt.jar (or nearest equivalent) if var BOOT_RTJAR contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_RTJAR" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - BOOT_RTJAR=`$CYGPATH -s -m -a "$BOOT_RTJAR"` - BOOT_RTJAR=`$CYGPATH -u "$BOOT_RTJAR"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK rt.jar (or nearest equivalent)! \"$BOOT_RTJAR\"" "$LINENO" 5 - fi - fi - - -BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar" - - # Fail with message the path to the Boot JDK tools.jar (or nearest equivalent) if var BOOT_TOOLSJAR contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_TOOLSJAR" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - BOOT_TOOLSJAR=`$CYGPATH -s -m -a "$BOOT_TOOLSJAR"` - BOOT_TOOLSJAR=`$CYGPATH -u "$BOOT_TOOLSJAR"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK tools.jar (or nearest equivalent)! \"$BOOT_TOOLSJAR\"" "$LINENO" 5 - fi - fi - - -if test ! -f $BOOT_RTJAR; then - # On MacOSX it is called classes.jar - BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar - if test ! -f $BOOT_RTJAR; then - as_fn_error $? "Cannot find the rt.jar or its equivalent!" "$LINENO" 5 - fi - # Remove the .. - BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" - # The tools.jar is part of classes.jar - BOOT_TOOLSJAR="$BOOT_RTJAR" -fi - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 -$as_echo_n "checking for Boot JDK... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 -$as_echo "$BOOT_JDK" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot rt.jar" >&5 -$as_echo_n "checking for Boot rt.jar... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_RTJAR" >&5 -$as_echo "$BOOT_RTJAR" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot tools.jar" >&5 -$as_echo_n "checking for Boot tools.jar... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_TOOLSJAR" >&5 -$as_echo "$BOOT_TOOLSJAR" >&6; } - -# Use the java tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5 -$as_echo_n "checking for java in Boot JDK... " >&6; } -JAVA=$BOOT_JDK/bin/java -if test ! -x $JAVA; then - as_fn_error $? "Could not find a working java" "$LINENO" 5 -fi -BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes $BOOT_JDK_VERSION" >&5 -$as_echo "yes $BOOT_JDK_VERSION" >&6; } - - -# Extra M4 quote needed to protect [] in grep expression. -FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` -if test "x$FOUND_VERSION_78" = x; then - help_on_build_dependency openjdk - as_fn_error $? "Your boot-jdk must be version 7 or 8. $HELP_MSG" "$LINENO" 5 -fi - -# When compiling code to be executed by the Boot JDK, force jdk7 compatibility. -BOOT_JDK_SOURCETARGET="-source 7 -target 7" - - -# Use the javac tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5 -$as_echo_n "checking for javac in Boot JDK... " >&6; } -JAVAC=$BOOT_JDK/bin/javac -if test ! -x $JAVAC; then - as_fn_error $? "Could not find a working javac" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - - - -# Use the javah tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 -$as_echo_n "checking for javah in Boot JDK... " >&6; } -JAVAH=$BOOT_JDK/bin/javah -if test ! -x $JAVAH; then - as_fn_error $? "Could not find a working javah" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - - -# Use the jar tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5 -$as_echo_n "checking for jar in Boot JDK... " >&6; } -JAR=$BOOT_JDK/bin/jar -if test ! -x $JAR; then - as_fn_error $? "Could not find a working jar" "$LINENO" 5 -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -# Use the rmic tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rmic in Boot JDK" >&5 -$as_echo_n "checking for rmic in Boot JDK... " >&6; } -RMIC=$BOOT_JDK/bin/rmic -if test ! -x $RMIC; then - as_fn_error $? "Could not find a working rmic" "$LINENO" 5 -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -# Use the native2ascii tool from the Boot JDK. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native2ascii in Boot JDK" >&5 -$as_echo_n "checking for native2ascii in Boot JDK... " >&6; } -NATIVE2ASCII=$BOOT_JDK/bin/native2ascii -if test ! -x $NATIVE2ASCII; then - as_fn_error $? "Could not find a working native2ascii" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - - -############################################################################### -# -# Pickup additional source for a component from outside of the source root -# or override source for a component. -# - -# Check whether --with-add-source-root was given. -if test "${with_add_source_root+set}" = set; then : - withval=$with_add_source_root; -fi - - - -# Check whether --with-override-source-root was given. -if test "${with_override_source_root+set}" = set; then : - withval=$with_override_source_root; -fi - - - -# Check whether --with-adds-and-overrides was given. -if test "${with_adds_and_overrides+set}" = set; then : - withval=$with_adds_and_overrides; -fi - - -if test "x$with_adds_and_overrides" != x; then - with_add_source_root="$with_adds_and_overrides/adds" - with_override_source_root="$with_adds_and_overrides/overrides" -fi - -if test "x$with_add_source_root" != x; then - if ! test -d $with_add_source_root; then - as_fn_error $? "Trying to use a non-existant add-source-root $with_add_source_root" "$LINENO" 5 - fi - CURDIR="$PWD" - cd "$with_add_source_root" - ADD_SRC_ROOT="`pwd`" - cd "$CURDIR" - # Verify that the addon source root does not have any root makefiles. - # If it does, then it is usually an error, prevent this. - if test -f $with_add_source_root/langtools/makefiles/Makefile || \ - test -f $with_add_source_root/langtools/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/corba/makefiles/Makefile || \ - test -f $with_add_source_root/corba/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full corba repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ - test -f $with_add_source_root/jaxp/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ - test -f $with_add_source_root/jaxws/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ - test -f $with_add_source_root/hotspot/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources." "$LINENO" 5 - fi - if test -f $with_add_source_root/jdk/makefiles/Makefile || \ - test -f $with_add_source_root/jdk/make/Makefile; then - as_fn_error $? "Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources." "$LINENO" 5 - fi -fi - - -if test "x$with_override_source_root" != x; then - if ! test -d $with_override_source_root; then - as_fn_error $? "Trying to use a non-existant override-source-root $with_override_source_root" "$LINENO" 5 - fi - CURDIR="$PWD" - cd "$with_override_source_root" - OVERRIDE_SRC_ROOT="`pwd`" - cd "$CURDIR" - if test -f $with_override_source_root/langtools/makefiles/Makefile || \ - test -f $with_override_source_root/langtools/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/corba/makefiles/Makefile || \ - test -f $with_override_source_root/corba/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full corba repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ - test -f $with_override_source_root/jaxp/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ - test -f $with_override_source_root/jaxws/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ - test -f $with_override_source_root/hotspot/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override." "$LINENO" 5 - fi - if test -f $with_override_source_root/jdk/makefiles/Makefile || \ - test -f $with_override_source_root/jdk/make/Makefile; then - as_fn_error $? "Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override." "$LINENO" 5 - fi -fi - - -############################################################################### -# -# Override a repo completely, this is used for example when you have 3 small -# development sandboxes of the langtools sources and want to avoid having 3 full -# OpenJDK sources checked out on disk. -# -# Assuming that the 3 langtools sandboxes are located here: -# /home/fredrik/sandbox1/langtools -# /home/fredrik/sandbox2/langtools -# /home/fredrik/sandbox3/langtools -# -# From the source root you create build subdirs manually: -# mkdir -p build1 build2 build3 -# in each build directory run: -# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make) -# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make) -# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make) -# - - -# Check whether --with-override-langtools was given. -if test "${with_override_langtools+set}" = set; then : - withval=$with_override_langtools; -fi - - - -# Check whether --with-override-corba was given. -if test "${with_override_corba+set}" = set; then : - withval=$with_override_corba; -fi - - - -# Check whether --with-override-jaxp was given. -if test "${with_override_jaxp+set}" = set; then : - withval=$with_override_jaxp; -fi - - - -# Check whether --with-override-jaxws was given. -if test "${with_override_jaxws+set}" = set; then : - withval=$with_override_jaxws; -fi - - - -# Check whether --with-override-hotspot was given. -if test "${with_override_hotspot+set}" = set; then : - withval=$with_override_hotspot; -fi - - - -# Check whether --with-override-jdk was given. -if test "${with_override_jdk+set}" = set; then : - withval=$with_override_jdk; -fi - - -if test "x$with_override_langtools" != x; then - CURDIR="$PWD" - cd "$with_override_langtools" - LANGTOOLS_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override langtools with a full langtools repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if langtools should be overridden" >&5 -$as_echo_n "checking if langtools should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $LANGTOOLS_TOPDIR" >&5 -$as_echo "yes with $LANGTOOLS_TOPDIR" >&6; } -fi -if test "x$with_override_corba" != x; then - CURDIR="$PWD" - cd "$with_override_corba" - CORBA_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override corba with a full corba repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if corba should be overridden" >&5 -$as_echo_n "checking if corba should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $CORBA_TOPDIR" >&5 -$as_echo "yes with $CORBA_TOPDIR" >&6; } -fi -if test "x$with_override_jaxp" != x; then - CURDIR="$PWD" - cd "$with_override_jaxp" - JAXP_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override jaxp with a full jaxp repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxp should be overridden" >&5 -$as_echo_n "checking if jaxp should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXP_TOPDIR" >&5 -$as_echo "yes with $JAXP_TOPDIR" >&6; } -fi -if test "x$with_override_jaxws" != x; then - CURDIR="$PWD" - cd "$with_override_jaxws" - JAXWS_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override jaxws with a full jaxws repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxws should be overridden" >&5 -$as_echo_n "checking if jaxws should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXWS_TOPDIR" >&5 -$as_echo "yes with $JAXWS_TOPDIR" >&6; } -fi -if test "x$with_override_hotspot" != x; then - CURDIR="$PWD" - cd "$with_override_hotspot" - HOTSPOT_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ - ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override hotspot with a full hotspot repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if hotspot should be overridden" >&5 -$as_echo_n "checking if hotspot should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $HOTSPOT_TOPDIR" >&5 -$as_echo "yes with $HOTSPOT_TOPDIR" >&6; } -fi -if test "x$with_override_jdk" != x; then - CURDIR="$PWD" - cd "$with_override_jdk" - JDK_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JDK_TOPDIR/makefiles/Makefile; then - as_fn_error $? "You have to override JDK with a full JDK repo!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if JDK should be overridden" >&5 -$as_echo_n "checking if JDK should be overridden... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JDK_TOPDIR" >&5 -$as_echo "yes with $JDK_TOPDIR" >&6; } -fi - -############################################################################### -# -# Specify options for anything that is run with the Boot JDK. -# - -# Check whether --with-boot-jdk-jvmargs was given. -if test "${with_boot_jdk_jvmargs+set}" = set; then : - withval=$with_boot_jdk_jvmargs; -fi - - -if test "x$with_boot_jdk_jvmargs" = x; then - # Not all JVM:s accept the same arguments on the command line. - # OpenJDK specific increase in thread stack for JDK build, - # well more specifically, when running javac. - if test "x$BUILD_NUM_BITS" = x32; then - STACK_SIZE=768 - else - # Running Javac on a JVM on a 64-bit machine, the stack takes more space - # since 64-bit pointers are pushed on the stach. Apparently, we need - # to increase the stack space when javacing the JDK.... - STACK_SIZE=1536 - fi - - # Minimum amount of heap memory. - - # Test if -Xms64M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -Xms64M to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -Xms64M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -Xms64M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -Xms64M" - fi - - if test "x$HOST_OS" = "xmacosx"; then - # Why does macosx need more heap? Its the huge JDK batch. - - # Test if -Xmx1600M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -Xmx1600M to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -Xmx1600M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -Xmx1600M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1600M" - fi - - else - - # Test if -Xmx1100M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -Xmx1100M to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -Xmx1100M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -Xmx1100M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1100M" - fi - - fi - # When is adding -client something that speeds up the JVM? - # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA]) - - # Test if -XX:PermSize=32m is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:PermSize=32m to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -XX:PermSize=32m -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:PermSize=32m -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:PermSize=32m" - fi - - - # Test if -XX:MaxPermSize=160m is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:MaxPermSize=160m to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:MaxPermSize=160m" - fi - - - # Test if -XX:ThreadStackSize=$STACK_SIZE is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:ThreadStackSize=$STACK_SIZE to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:ThreadStackSize=$STACK_SIZE" - fi - - # Disable special log output when a debug build is used as Boot JDK... - - # Test if -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput to boot_jdk_jvmargs - FOUND_WARN=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput" - fi - -fi - -BOOT_JDK_JVMARGS=$boot_jdk_jvmargs - - - -# Check whether --with-server-java was given. -if test "${with_server_java+set}" = set; then : - withval=$with_server_java; -fi - - -if test "x$with_server_java" != x; then - SERVER_JAVA="$with_server_java" - FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" = x; then - as_fn_error $? "Could not execute server java: $SERVER_JAVA" "$LINENO" 5 - fi -else - SERVER_JAVA="" - # Hotspot specific options. - - # Test if -XX:+UseParallelOldGC is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -XX:+UseParallelOldGC to SERVER_JAVA - FOUND_WARN=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -XX:+UseParallelOldGC" - fi - - - # Test if -verbosegc is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -verbosegc to SERVER_JAVA - FOUND_WARN=`$JAVA -verbosegc -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -verbosegc -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -verbosegc" - fi - - # JRockit specific options. - - # Test if -Xverbose:gc is a valid argument to $JAVA (often is $JAVA passed as $JAVA) - # If so, then append -Xverbose:gc to SERVER_JAVA - FOUND_WARN=`$JAVA -Xverbose:gc -version 2>&1 | grep -i warn` - FOUND_VERSION=`$JAVA -Xverbose:gc -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xverbose:gc" - fi - - SERVER_JAVA="$JAVA $SERVER_JAVA" -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use shared server for javac" >&5 -$as_echo_n "checking whether to use shared server for javac... " >&6; } -# Check whether --enable-javac-server was given. -if test "${enable_javac_server+set}" = set; then : - enableval=$enable_javac_server; ENABLE_JAVAC_SERVER="${enableval}" -else - ENABLE_JAVAC_SERVER='no' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_SERVER" >&5 -$as_echo "$ENABLE_JAVAC_SERVER" >&6; } -if test "x$ENABLE_JAVAC_SERVER" = xyes; then - JAVAC_USE_REMOTE=true - JAVAC_SERVERS="$OUTPUT_ROOT/javacservers" -else - JAVAC_USE_REMOTE=false - JAVAC_SERVERS= -fi - - - - -# Check whether --with-javac-server-cores was given. -if test "${with_javac_server_cores+set}" = set; then : - withval=$with_javac_server_cores; -fi - -if test "x$with_javac_server_cores" != x; then - JAVAC_SERVER_CORES="$with_javac_server_cores" -else - if test "$NUM_CORES" -gt 16; then - # We set this arbitrary limit because we want to limit the heap - # size of the javac server. - # In the future we will make the javac compilers in the server - # share more and more state, thus enabling us to use more and - # more concurrent threads in the server. - JAVAC_SERVER_CORES="16" - else - JAVAC_SERVER_CORES="$NUM_CORES" - fi - - if test "$MEMORY_SIZE" -gt "17000"; then - MAX_HEAP_MEM=10000 - - # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -d64 to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -d64" - fi - - - # Test if -Xms10G -Xmx10G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms10G -Xmx10G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms10G -Xmx10G" - fi - - - # Test if -Xmn2G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn2G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn2G" - fi - - elif test "$MEMORY_SIZE" -gt "10000"; then - MAX_HEAP_MEM=6000 - - # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -d64 to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -d64" - fi - - - # Test if -Xms6G -Xmx6G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms6G -Xmx6G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms6G -Xmx6G" - fi - - - # Test if -Xmn1G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn1G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn1G" - fi - - elif test "$MEMORY_SIZE" -gt "5000"; then - MAX_HEAP_MEM=3000 - - # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -d64 to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -d64" - fi - - - # Test if -Xms1G -Xmx3G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms1G -Xmx3G to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx3G" - fi - - - # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn256M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn256M" - fi - - elif test "$MEMORY_SIZE" -gt "3800"; then - MAX_HEAP_MEM=2500 - - # Test if -Xms1G -Xmx2500M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms1G -Xmx2500M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx2500M" - fi - - - # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn256M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn256M" - fi - - elif test "$MEMORY_SIZE" -gt "1900"; then - MAX_HEAP_MEM=1200 - - # Test if -Xms700M -Xmx1200M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms700M -Xmx1200M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms700M -Xmx1200M" - fi - - - # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn256M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn256M" - fi - - elif test "$MEMORY_SIZE" -gt "1000"; then - MAX_HEAP_MEM=900 - - # Test if -Xms400M -Xmx900M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms400M -Xmx900M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms400M -Xmx900M" - fi - - - # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn128M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn128M" - fi - - else - MAX_HEAP_MEM=512 - - # Test if -Xms256M -Xmx512M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xms256M -Xmx512M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xms256M -Xmx512M" - fi - - - # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) - # If so, then append -Xmn128M to SERVER_JAVA - FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn` - FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - SERVER_JAVA="$SERVER_JAVA -Xmn128M" - fi - - fi - - MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501` - if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if number of server cores must be reduced" >&5 -$as_echo_n "checking if number of server cores must be reduced... " >&6; } - JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&5 -$as_echo "yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&6; } - fi -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to track dependencies between Java packages" >&5 -$as_echo_n "checking whether to track dependencies between Java packages... " >&6; } -# Check whether --enable-javac-deps was given. -if test "${enable_javac_deps+set}" = set; then : - enableval=$enable_javac_deps; ENABLE_JAVAC_DEPS="${enableval}" -else - ENABLE_JAVAC_DEPS='no' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_DEPS" >&5 -$as_echo "$ENABLE_JAVAC_DEPS" >&6; } -if test "x$ENABLE_JAVAC_DEPS" = xyes; then - JAVAC_USE_DEPS=true -else - JAVAC_USE_DEPS=false -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use multiple cores for javac compilation" >&5 -$as_echo_n "checking whether to use multiple cores for javac compilation... " >&6; } -# Check whether --enable-javac-multi-core was given. -if test "${enable_javac_multi_core+set}" = set; then : - enableval=$enable_javac_multi_core; ENABLE_JAVAC_MULTICORE="${enableval}" -else - ENABLE_JAVAC_MULTICORE='no' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_MULTICORE" >&5 -$as_echo "$ENABLE_JAVAC_MULTICORE" >&6; } -if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then - JAVAC_USE_MODE=MULTI_CORE_CONCURRENT -else - JAVAC_USE_MODE=SINGLE_THREADED_BATCH - if test "x$ENABLE_JAVAC_DEPS" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&5 -$as_echo "$as_me: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling dependency tracking for you now." >&5 -$as_echo "$as_me: WARNING: Disabling dependency tracking for you now." >&2;} - JAVAC_USE_DEPS=false - fi - if test "x$ENABLE_JAVAC_SERVER" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&5 -$as_echo "$as_me: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling javac server for you now." >&5 -$as_echo "$as_me: WARNING: Disabling javac server for you now." >&2;} - JAVAC_USE_REMOTE=false - fi -fi - - -############################################################################### -# -# OS specific settings that we never will need to probe. -# -if test "x$HOST_OS" = xlinux; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Linux?" >&5 -$as_echo_n "checking what is not needed on Linux?... " >&6; } - PULSE_NOT_NEEDED=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: pulse" >&5 -$as_echo "pulse" >&6; } -fi - -if test "x$HOST_OS" = xsolaris; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Solaris?" >&5 -$as_echo_n "checking what is not needed on Solaris?... " >&6; } - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 -$as_echo "alsa pulse" >&6; } -fi - -if test "x$HOST_OS" = xwindows; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Windows?" >&5 -$as_echo_n "checking what is not needed on Windows?... " >&6; } - CUPS_NOT_NEEDED=yes - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - X11_NOT_NEEDED=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa cups pulse x11" >&5 -$as_echo "alsa cups pulse x11" >&6; } -fi - -if test "x$HOST_OS" = xmacosx; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on MacOSX?" >&5 -$as_echo_n "checking what is not needed on MacOSX?... " >&6; } - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - X11_NOT_NEEDED=yes - FREETYPE2_NOT_NEEDED=yes - # If the java runtime framework is disabled, then we need X11. - # This will be adjusted below. - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse x11" >&5 -$as_echo "alsa pulse x11" >&6; } -fi - -if test "x$HOST_OS" = xbsd; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on bsd?" >&5 -$as_echo_n "checking what is not needed on bsd?... " >&6; } - ALSA_NOT_NEEDED=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa" >&5 -$as_echo "alsa" >&6; } -fi - -############################################################################### -# -# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM -# that uses this API. -# -# Check whether --enable-macosx-runtime-support was given. -if test "${enable_macosx_runtime_support+set}" = set; then : - enableval=$enable_macosx_runtime_support; MACOSX_RUNTIME_SUPPORT="${enableval}" -else - MACOSX_RUNTIME_SUPPORT="no" -fi - - -USE_MACOSX_RUNTIME_SUPPORT=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for explicit Java runtime support in the OS" >&5 -$as_echo_n "checking for explicit Java runtime support in the OS... " >&6; } -if test -f /System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers/JavaRuntimeSupport.h; then - if test "x$MACOSX_RUNTIME_SUPPORT" != xno; then - MACOSX_RUNTIME_SUPPORT=yes - USE_MACOSX_RUNTIME_SUPPORT=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, does not need alsa freetype2 pulse and X11" >&5 -$as_echo "yes, does not need alsa freetype2 pulse and X11" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, but explicitly disabled." >&5 -$as_echo "yes, but explicitly disabled." >&6; } - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - -if test "x$HOST_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on an X11 build on MacOSX?" >&5 -$as_echo_n "checking what is not needed on an X11 build on MacOSX?... " >&6; } - X11_NOT_NEEDED= - FREETYPE2_NOT_NEEDED= - { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 -$as_echo "alsa pulse" >&6; } -fi - -############################################################################### -# -# Check for X Windows -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 -$as_echo_n "checking for X... " >&6; } - - -# Check whether --with-x was given. -if test "${with_x+set}" = set; then : - withval=$with_x; -fi - -# $have_x is `yes', `no', `disabled', or empty when we do not yet know. -if test "x$with_x" = xno; then - # The user explicitly disabled X. - have_x=disabled -else - case $x_includes,$x_libraries in #( - *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5 ;; #( - *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # One or both of the vars are not set, and there is no cached value. -ac_x_includes=no ac_x_libraries=no -rm -f -r conftest.dir -if mkdir conftest.dir; then - cd conftest.dir - cat >Imakefile <<'_ACEOF' -incroot: - @echo incroot='${INCROOT}' -usrlibdir: - @echo usrlibdir='${USRLIBDIR}' -libdir: - @echo libdir='${LIBDIR}' -_ACEOF - if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then - # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. - for ac_var in incroot usrlibdir libdir; do - eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" - done - # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. - for ac_extension in a so sl dylib la dll; do - if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && - test -f "$ac_im_libdir/libX11.$ac_extension"; then - ac_im_usrlibdir=$ac_im_libdir; break - fi - done - # Screen out bogus values from the imake configuration. They are - # bogus both because they are the default anyway, and because - # using them would break gcc on systems where it needs fixed includes. - case $ac_im_incroot in - /usr/include) ac_x_includes= ;; - *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; - esac - case $ac_im_usrlibdir in - /usr/lib | /usr/lib64 | /lib | /lib64) ;; - *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; - esac - fi - cd .. - rm -f -r conftest.dir -fi - -# Standard set of common directories for X headers. -# Check X11 before X11Rn because it is often a symlink to the current release. -ac_x_header_dirs=' -/usr/X11/include -/usr/X11R7/include -/usr/X11R6/include -/usr/X11R5/include -/usr/X11R4/include - -/usr/include/X11 -/usr/include/X11R7 -/usr/include/X11R6 -/usr/include/X11R5 -/usr/include/X11R4 - -/usr/local/X11/include -/usr/local/X11R7/include -/usr/local/X11R6/include -/usr/local/X11R5/include -/usr/local/X11R4/include - -/usr/local/include/X11 -/usr/local/include/X11R7 -/usr/local/include/X11R6 -/usr/local/include/X11R5 -/usr/local/include/X11R4 - -/usr/X386/include -/usr/x386/include -/usr/XFree86/include/X11 - -/usr/include -/usr/local/include -/usr/unsupported/include -/usr/athena/include -/usr/local/x11r5/include -/usr/lpp/Xamples/include - -/usr/openwin/include -/usr/openwin/share/include' - -if test "$ac_x_includes" = no; then - # Guess where to find include files, by looking for Xlib.h. - # First, try using that file with no special directory specified. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # We can compile using X headers with no special include directory. -ac_x_includes= -else - for ac_dir in $ac_x_header_dirs; do - if test -r "$ac_dir/X11/Xlib.h"; then - ac_x_includes=$ac_dir - break - fi -done -fi -rm -f conftest.err conftest.i conftest.$ac_ext -fi # $ac_x_includes = no - -if test "$ac_x_libraries" = no; then - # Check for the libraries. - # See if we find them without any special options. - # Don't add to $LIBS permanently. - ac_save_LIBS=$LIBS - LIBS="-lX11 $LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -XrmInitialize () - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - LIBS=$ac_save_LIBS -# We can link X programs with no special library path. -ac_x_libraries= -else - LIBS=$ac_save_LIBS -for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` -do - # Don't even attempt the hair of trying to link an X program! - for ac_extension in a so sl dylib la dll; do - if test -r "$ac_dir/libX11.$ac_extension"; then - ac_x_libraries=$ac_dir - break 2 - fi - done -done -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi # $ac_x_libraries = no - -case $ac_x_includes,$ac_x_libraries in #( - no,* | *,no | *\'*) - # Didn't find X, or a directory has "'" in its name. - ac_cv_have_x="have_x=no";; #( - *) - # Record where we found X for the cache. - ac_cv_have_x="have_x=yes\ - ac_x_includes='$ac_x_includes'\ - ac_x_libraries='$ac_x_libraries'" -esac -fi -;; #( - *) have_x=yes;; - esac - eval "$ac_cv_have_x" -fi # $with_x != no - -if test "$have_x" != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 -$as_echo "$have_x" >&6; } - no_x=yes -else - # If each of the values was on the command line, it overrides each guess. - test "x$x_includes" = xNONE && x_includes=$ac_x_includes - test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries - # Update the cache value to reflect the command line values. - ac_cv_have_x="have_x=yes\ - ac_x_includes='$x_includes'\ - ac_x_libraries='$x_libraries'" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 -$as_echo "libraries $x_libraries, headers $x_includes" >&6; } -fi - -if test "$no_x" = yes; then - # Not all programs may use this symbol, but it does not hurt to define it. - -$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h - - X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= -else - if test -n "$x_includes"; then - X_CFLAGS="$X_CFLAGS -I$x_includes" - fi - - # It would also be nice to do this for all -L options, not just this one. - if test -n "$x_libraries"; then - X_LIBS="$X_LIBS -L$x_libraries" - # For Solaris; some versions of Sun CC require a space after -R and - # others require no space. Words are not sufficient . . . . - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 -$as_echo_n "checking whether -R must be followed by a space... " >&6; } - ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" - ac_xsave_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - X_LIBS="$X_LIBS -R$x_libraries" -else - LIBS="$ac_xsave_LIBS -R $x_libraries" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - X_LIBS="$X_LIBS -R $x_libraries" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 -$as_echo "neither works" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - ac_cxx_werror_flag=$ac_xsave_cxx_werror_flag - LIBS=$ac_xsave_LIBS - fi - - # Check for system-dependent libraries X programs must link with. - # Do this before checking for the system-independent R6 libraries - # (-lICE), since we may need -lsocket or whatever for X linking. - - if test "$ISC" = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" - else - # Martyn Johnson says this is needed for Ultrix, if the X - # libraries were built with DECnet support. And Karl Berry says - # the Alpha needs dnet_stub (dnet does not exist). - ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char XOpenDisplay (); -int -main () -{ -return XOpenDisplay (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 -$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } -if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dnet_ntoa (); -int -main () -{ -return dnet_ntoa (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_dnet_dnet_ntoa=yes -else - ac_cv_lib_dnet_dnet_ntoa=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 -$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } -if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" -fi - - if test $ac_cv_lib_dnet_dnet_ntoa = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 -$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } -if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet_stub $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dnet_ntoa (); -int -main () -{ -return dnet_ntoa (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_dnet_stub_dnet_ntoa=yes -else - ac_cv_lib_dnet_stub_dnet_ntoa=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 -$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } -if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" -fi - - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$ac_xsave_LIBS" - - # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, - # to get the SysV transport functions. - # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) - # needs -lnsl. - # The nsl library prevents programs from opening the X display - # on Irix 5.2, according to T.E. Dickey. - # The functions gethostbyname, getservbyname, and inet_addr are - # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. - ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" -if test "x$ac_cv_func_gethostbyname" = x""yes; then : - -fi - - if test $ac_cv_func_gethostbyname = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 -$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } -if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_nsl_gethostbyname=yes -else - ac_cv_lib_nsl_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 -$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" -fi - - if test $ac_cv_lib_nsl_gethostbyname = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 -$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } -if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lbsd $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_bsd_gethostbyname=yes -else - ac_cv_lib_bsd_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 -$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } -if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" -fi - - fi - fi - - # lieder@skyler.mavd.honeywell.com says without -lsocket, - # socket/setsockopt and other routines are undefined under SCO ODT - # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary - # on later versions), says Simon Leinen: it contains gethostby* - # variants that don't use the name server (or something). -lsocket - # must be given before -lnsl if both are needed. We assume that - # if connect needs -lnsl, so does gethostbyname. - ac_fn_cxx_check_func "$LINENO" "connect" "ac_cv_func_connect" -if test "x$ac_cv_func_connect" = x""yes; then : - -fi - - if test $ac_cv_func_connect = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 -$as_echo_n "checking for connect in -lsocket... " >&6; } -if test "${ac_cv_lib_socket_connect+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $X_EXTRA_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char connect (); -int -main () -{ -return connect (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_socket_connect=yes -else - ac_cv_lib_socket_connect=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 -$as_echo "$ac_cv_lib_socket_connect" >&6; } -if test "x$ac_cv_lib_socket_connect" = x""yes; then : - X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" -fi - - fi - - # Guillermo Gomez says -lposix is necessary on A/UX. - ac_fn_cxx_check_func "$LINENO" "remove" "ac_cv_func_remove" -if test "x$ac_cv_func_remove" = x""yes; then : - -fi - - if test $ac_cv_func_remove = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 -$as_echo_n "checking for remove in -lposix... " >&6; } -if test "${ac_cv_lib_posix_remove+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lposix $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char remove (); -int -main () -{ -return remove (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_posix_remove=yes -else - ac_cv_lib_posix_remove=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 -$as_echo "$ac_cv_lib_posix_remove" >&6; } -if test "x$ac_cv_lib_posix_remove" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" -fi - - fi - - # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. - ac_fn_cxx_check_func "$LINENO" "shmat" "ac_cv_func_shmat" -if test "x$ac_cv_func_shmat" = x""yes; then : - -fi - - if test $ac_cv_func_shmat = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 -$as_echo_n "checking for shmat in -lipc... " >&6; } -if test "${ac_cv_lib_ipc_shmat+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lipc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shmat (); -int -main () -{ -return shmat (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_ipc_shmat=yes -else - ac_cv_lib_ipc_shmat=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 -$as_echo "$ac_cv_lib_ipc_shmat" >&6; } -if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : - X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" -fi - - fi - fi - - # Check for libraries that X11R6 Xt/Xaw programs need. - ac_save_LDFLAGS=$LDFLAGS - test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" - # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to - # check for ICE first), but we must link in the order -lSM -lICE or - # we get undefined symbols. So assume we have SM if we have ICE. - # These have to be linked with before -lX11, unlike the other - # libraries we check for below, so use a different variable. - # John Interrante, Karl Berry - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 -$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } -if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lICE $X_EXTRA_LIBS $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char IceConnectionNumber (); -int -main () -{ -return IceConnectionNumber (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_ICE_IceConnectionNumber=yes -else - ac_cv_lib_ICE_IceConnectionNumber=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 -$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } -if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : - X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" -fi - - LDFLAGS=$ac_save_LDFLAGS - -fi - - -if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then - help_on_build_dependency x11 - as_fn_error $? "Could not find X11 libraries. $HELP_MSG" "$LINENO" 5 -fi - -# Some of the old makefiles require a setting of OPENWIN_HOME -# Since the X11R6 directory has disappeared on later Linuxes, -# we need to probe for it. -if test "x$HOST_OS" = xlinux; then - if test -d "$SYS_ROOT/usr/X11R6"; then - OPENWIN_HOME="$SYS_ROOT/usr/X11R6" - fi - if test -d "$SYS_ROOT/usr/include/X11"; then - OPENWIN_HOME="$SYS_ROOT/usr" - fi -fi -if test "x$HOST_OS" = xsolaris; then - OPENWIN_HOME="/usr/openwin" -fi - - - -# -# Weird Sol10 something check...TODO change to try compile -# -if test "x${HOST_OS}" = xsolaris; then - if test "`uname -r`" = "5.10"; then - if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then - X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS" - fi - fi -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -OLD_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $X_CFLAGS" - - -for ac_header in X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - X11_A_OK=yes -else - X11_A_OK=no -fi - -done - -CFLAGS="$OLD_CFLAGS" -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then - help_on_build_dependency x11 - as_fn_error $? "Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG" "$LINENO" 5 -fi - - - - -############################################################################### -# -# The common unix printing system cups is used to print from java. -# - -# Check whether --with-cups was given. -if test "${with_cups+set}" = set; then : - withval=$with_cups; -fi - - -# Check whether --with-cups-include was given. -if test "${with_cups_include+set}" = set; then : - withval=$with_cups_include; -fi - - -# Check whether --with-cups-lib was given. -if test "${with_cups_lib+set}" = set; then : - withval=$with_cups_lib; -fi - - -if test "x$CUPS_NOT_NEEDED" = xyes; then - if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cups not used, so --with-cups is ignored" >&5 -$as_echo "$as_me: WARNING: cups not used, so --with-cups is ignored" >&2;} - fi - CUPS_CFLAGS= - CUPS_LIBS= -else - CUPS_FOUND=no - - if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then - as_fn_error $? "It is not possible to disable the use of cups. Remove the --without-cups option." "$LINENO" 5 - fi - - if test "x${with_cups}" != x; then - CUPS_LIBS="-L${with_cups}/lib -lcups" - CUPS_CFLAGS="-I${with_cups}/include" - CUPS_FOUND=yes - fi - if test "x${with_cups_include}" != x; then - CUPS_CFLAGS="-I${with_cups_include}" - CUPS_FOUND=yes - fi - if test "x${with_cups_lib}" != x; then - CUPS_LIBS="-L${with_cups_lib} -lcups" - CUPS_FOUND=yes - fi - if test "x$CUPS_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_cups_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_cups_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_cups_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The cups comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_cups} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for cups" >&5 -$as_echo "$as_me: Using builddeps $resource for cups" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# cups is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/cups.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_cups_ROOT} - thecflags=${builddep_cups_CFLAGS} - thelibs=${builddep_cups_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency cups" "$LINENO" 5 - fi - CUPS=$depdir - if test "x$theroot" != x; then - CUPS="$theroot" - fi - if test "x$thecflags" != x; then - CUPS_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - CUPS_LIBS="$thelibs" - fi - CUPS_FOUND=yes - - fi - - fi - - fi - if test "x$CUPS_FOUND" = xno; then - # Are the cups headers installed in the default /usr/include location? - for ac_header in cups/cups.h cups/ppd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - CUPS_FOUND=yes - CUPS_CFLAGS= - CUPS_LIBS="-lcups" - DEFAULT_CUPS=yes -fi - -done - - fi - if test "x$CUPS_FOUND" = xno; then - # Getting nervous now? Lets poke around for standard Solaris third-party - # package installation locations. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers and libs" >&5 -$as_echo_n "checking for cups headers and libs... " >&6; } - if test -s /opt/sfw/cups/include/cups/cups.h; then - # An SFW package seems to be installed! - CUPS_FOUND=yes - CUPS_CFLAGS="-I/opt/sfw/cups/include" - CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" - elif test -s /opt/csw/include/cups/cups.h; then - # A CSW package seems to be installed! - CUPS_FOUND=yes - CUPS_CFLAGS="-I/opt/csw/include" - CUPS_LIBS="-L/opt/csw/lib -lcups" - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_FOUND" >&5 -$as_echo "$CUPS_FOUND" >&6; } - fi - if test "x$CUPS_FOUND" = xno; then - help_on_build_dependency cups - as_fn_error $? "Could not find cups! $HELP_MSG " "$LINENO" 5 - fi -fi - - - - -############################################################################### -# -# The ubiquitous freetype2 library is used to render fonts. -# - -# Check whether --with-freetype was given. -if test "${with_freetype+set}" = set; then : - withval=$with_freetype; -fi - - -# If we are using the OS installed system lib for freetype, then we do not need to copy it to the build tree -USING_SYSTEM_FT_LIB=false - -if test "x$FREETYPE2_NOT_NEEDED" = xyes; then - if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: freetype not used, so --with-freetype is ignored" >&5 -$as_echo "$as_me: WARNING: freetype not used, so --with-freetype is ignored" >&2;} - fi - FREETYPE2_CFLAGS= - FREETYPE2_LIBS= - FREETYPE2_LIB_PATH= -else - FREETYPE2_FOUND=no - - if test "x$with_freetype" != x; then - - # Fail with message the path to freetype if var with_freetype contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$with_freetype" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - with_freetype=`$CYGPATH -s -m -a "$with_freetype"` - with_freetype=`$CYGPATH -u "$with_freetype"` - else - as_fn_error $? "You cannot have spaces in the path to freetype! \"$with_freetype\"" "$LINENO" 5 - fi - fi - - FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" - if test "x$HOST_OS" = xwindows; then - FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" - fi - FREETYPE2_LIB_PATH="$with_freetype/lib" - FREETYPE2_CFLAGS="-I$with_freetype/include" - if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then - FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include" - fi - FREETYPE2_FOUND=yes - if test "x$FREETYPE2_FOUND" = xyes; then - # Verify that the directories exist - if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then - as_fn_error $? "Could not find the expected directories $with_freetype/lib and $with_freetype/include" "$LINENO" 5 - fi - # List the contents of the lib. - FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` - if test "x$FREETYPELIB" = x; then - as_fn_error $? "Could not find libfreetype.se nor freetype.dll in $with_freetype/lib" "$LINENO" 5 - fi - # Check one h-file - if ! test -s "$with_freetype/include/ft2build.h"; then - as_fn_error $? "Could not find $with_freetype/include/ft2build.h" "$LINENO" 5 - fi - fi - fi - if test "x$FREETYPE2_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_freetype2_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The freetype2 comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_freetype2} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for freetype2" >&5 -$as_echo "$as_me: Using builddeps $resource for freetype2" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# freetype2 is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/freetype2.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_freetype2_ROOT} - thecflags=${builddep_freetype2_CFLAGS} - thelibs=${builddep_freetype2_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency freetype2" "$LINENO" 5 - fi - FREETYPE2=$depdir - if test "x$theroot" != x; then - FREETYPE2="$theroot" - fi - if test "x$thecflags" != x; then - FREETYPE2_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - FREETYPE2_LIBS="$thelibs" - fi - FREETYPE2_FOUND=yes - else FREETYPE2_FOUND=no - - fi - else FREETYPE2_FOUND=no - - fi - - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE2" >&5 -$as_echo_n "checking for FREETYPE2... " >&6; } - -if test -n "$FREETYPE2_CFLAGS"; then - pkg_cv_FREETYPE2_CFLAGS="$FREETYPE2_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$FREETYPE2_LIBS"; then - pkg_cv_FREETYPE2_LIBS="$FREETYPE2_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_FREETYPE2_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "freetype2" 2>&1` - else - FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --print-errors "freetype2" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$FREETYPE2_PKG_ERRORS" >&5 - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - FREETYPE2_FOUND=no -elif test $pkg_failed = untried; then - FREETYPE2_FOUND=no -else - FREETYPE2_CFLAGS=$pkg_cv_FREETYPE2_CFLAGS - FREETYPE2_LIBS=$pkg_cv_FREETYPE2_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - FREETYPE2_FOUND=yes -fi - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype in some standard locations" >&5 -$as_echo_n "checking for freetype in some standard locations... " >&6; } - - if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then - DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include" - DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype" - fi - if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then - DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2" - DEFAULT_FREETYPE_LIBS="-lfreetype" - fi - - PREV_CXXCFLAGS="$CXXFLAGS" - PREV_LDFLAGS="$LDFLAGS" - CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS" - LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include FT_FREETYPE_H - int main() { return 0; } - -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - # Yes, the default cflags and libs did the trick. - FREETYPE2_FOUND=yes - FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS" - FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS" - -else - - FREETYPE2_FOUND=no - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CXXCFLAGS="$PREV_CXXFLAGS" - LDFLAGS="$PREV_LDFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE2_FOUND" >&5 -$as_echo "$FREETYPE2_FOUND" >&6; } - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - help_on_build_dependency freetype2 - as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5 - fi -fi - - - - - - -############################################################################### -# -# Check for alsa headers and libraries. Used on Linux/GNU systems. -# - -# Check whether --with-alsa was given. -if test "${with_alsa+set}" = set; then : - withval=$with_alsa; -fi - - -# Check whether --with-alsa-include was given. -if test "${with_alsa_include+set}" = set; then : - withval=$with_alsa_include; -fi - - -# Check whether --with-alsa-lib was given. -if test "${with_alsa_lib+set}" = set; then : - withval=$with_alsa_lib; -fi - - -if test "x$ALSA_NOT_NEEDED" = xyes; then - if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: alsa not used, so --with-alsa is ignored" >&5 -$as_echo "$as_me: WARNING: alsa not used, so --with-alsa is ignored" >&2;} - fi - ALSA_CFLAGS= - ALSA_LIBS= -else - ALSA_FOUND=no - - if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then - as_fn_error $? "It is not possible to disable the use of alsa. Remove the --without-alsa option." "$LINENO" 5 - fi - - if test "x${with_alsa}" != x; then - ALSA_LIBS="-L${with_alsa}/lib -lalsa" - ALSA_CFLAGS="-I${with_alsa}/include" - ALSA_FOUND=yes - fi - if test "x${with_alsa_include}" != x; then - ALSA_CFLAGS="-I${with_alsa_include}" - ALSA_FOUND=yes - fi - if test "x${with_alsa_lib}" != x; then - ALSA_LIBS="-L${with_alsa_lib} -lalsa" - ALSA_FOUND=yes - fi - if test "x$ALSA_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_alsa_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The alsa comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_alsa} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for alsa" >&5 -$as_echo "$as_me: Using builddeps $resource for alsa" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# alsa is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/alsa.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_alsa_ROOT} - thecflags=${builddep_alsa_CFLAGS} - thelibs=${builddep_alsa_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency alsa" "$LINENO" 5 - fi - ALSA=$depdir - if test "x$theroot" != x; then - ALSA="$theroot" - fi - if test "x$thecflags" != x; then - ALSA_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - ALSA_LIBS="$thelibs" - fi - ALSA_FOUND=yes - else ALSA_FOUND=no - - fi - else ALSA_FOUND=no - - fi - - fi - if test "x$ALSA_FOUND" = xno; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA" >&5 -$as_echo_n "checking for ALSA... " >&6; } - -if test -n "$ALSA_CFLAGS"; then - pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 - ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$ALSA_LIBS"; then - pkg_cv_ALSA_LIBS="$ALSA_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 - ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs "alsa" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "alsa" 2>&1` - else - ALSA_PKG_ERRORS=`$PKG_CONFIG --print-errors "alsa" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$ALSA_PKG_ERRORS" >&5 - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ALSA_FOUND=no -elif test $pkg_failed = untried; then - ALSA_FOUND=no -else - ALSA_CFLAGS=$pkg_cv_ALSA_CFLAGS - ALSA_LIBS=$pkg_cv_ALSA_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - ALSA_FOUND=yes -fi - fi - if test "x$ALSA_FOUND" = xno; then - for ac_header in alsa/asoundlib.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default" -if test "x$ac_cv_header_alsa_asoundlib_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ALSA_ASOUNDLIB_H 1 -_ACEOF - ALSA_FOUND=yes - ALSA_CFLAGS=-Iignoreme - ALSA_LIBS=-lasound - DEFAULT_ALSA=yes -else - ALSA_FOUND=no -fi - -done - - fi - if test "x$ALSA_FOUND" = xno; then - help_on_build_dependency alsa - as_fn_error $? "Could not find alsa! $HELP_MSG " "$LINENO" 5 - fi -fi - - - - -############################################################################### -# -# Check for pulse audio headers and libraries. -# -PULSE_FOUND=no - -# Check whether --with-pulse was given. -if test "${with_pulse+set}" = set; then : - withval=$with_pulse; -fi - - -# Check whether --with-pulse-include was given. -if test "${with_pulse_include+set}" = set; then : - withval=$with_pulse_include; -fi - - -# Check whether --with-pulse-lib was given. -if test "${with_pulse_lib+set}" = set; then : - withval=$with_pulse_lib; -fi - - -if test "x${with_pulse}" != x; then - PULSE_LIBS="-L${with_pulse}/lib -lfreetype" - PULSE_CFLAGS="-I${with_pulse}/include" - PULSE_FOUND=yes -fi -if test "x${with_pulse_include}" != x; then - PULSE_CFLAGS="-I${with_pulse_include}" - PULSE_FOUND=yes -fi -if test "x${with_pulse_lib}" != x; then - PULSE_LIBS="-L${with_pulse_lib} -lpulse" - PULSE_FOUND=yes -fi -if test "x$PULSE_FOUND" = xno; then - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - # Source the builddeps file again, to make sure it uses the latest variables! - . $builddepsfile - # Look for a host and build machine specific resource! - eval resource=\${builddep_pulse_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}} - if test "x$resource" = x; then - # Ok, lets instead look for a host specific resource - eval resource=\${builddep_pulse_HOST_${rewritten_host_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a build specific resource - eval resource=\${builddep_pulse_BUILD_${rewritten_build_var}} - fi - if test "x$resource" = x; then - # Ok, lets instead look for a generic resource - # (The pulse comes from M4 and not the shell, thus no need for eval here.) - resource=${builddep_pulse} - fi - if test "x$resource" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for pulse" >&5 -$as_echo "$as_me: Using builddeps $resource for pulse" >&6;} - # If the resource in the builddeps.conf file is an existing directory, - # for example /java/linux/cups - if test -d ${resource}; then - depdir=${resource} - else - -# pulse is for example mymodule -# $resource is for example libs/general/libmymod_1_2_3.zip -# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps -# $with_builddeps_dir is for example /localhome/builddeps -# depdir is the name of the variable into which we store the depdir, eg MYMOD -# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and -# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 - filename=`basename $resource` - filebase=`echo $filename | sed 's/\.[^\.]*$//'` - filebase=${filename%%.*} - extension=${filename#*.} - installdir=$with_builddeps_dir/$filebase - if test ! -f $installdir/$filename.unpacked; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency pulse from $with_builddeps_server/$resource and installing into $installdir" >&5 -$as_echo "$as_me: Downloading build dependency pulse from $with_builddeps_server/$resource and installing into $installdir" >&6;} - if test ! -d $installdir; then - mkdir -p $installdir - fi - if test ! -d $installdir; then - as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 - fi - tmpfile=`mktemp $installdir/pulse.XXXXXXXXX` - touch $tmpfile - if test ! -f $tmpfile; then - as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 - fi - - # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip - # $tmpfile is the local file name for the downloaded file. - VALID_TOOL=no - if test "x$BDEPS_FTP" = xwget; then - VALID_TOOL=yes - wget -O $tmpfile $with_builddeps_server/$resource - fi - if test "x$BDEPS_FTP" = xlftp; then - VALID_TOOL=yes - lftp -c "get $with_builddeps_server/$resource -o $tmpfile" - fi - if test "x$BDEPS_FTP" = xftp; then - VALID_TOOL=yes - FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` - FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` - FTPUSERPWD=${FTPSERVER%%@*} - if test "x$FTPSERVER" != "x$FTPUSERPWD"; then - FTPUSER=${userpwd%%:*} - FTPPWD=${userpwd#*@} - FTPSERVER=${FTPSERVER#*@} - else - FTPUSER=ftp - FTPPWD=ftp - fi - # the "pass" command does not work on some - # ftp clients (read ftp.exe) but if it works, - # passive mode is better! - (\ - echo "user $FTPUSER $FTPPWD" ;\ - echo "pass" ;\ - echo "bin" ;\ - echo "get $FTPPATH $tmpfile" ;\ - ) | ftp -in $FTPSERVER - fi - if test "x$VALID_TOOL" != xyes; then - as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 - fi - - mv $tmpfile $installdir/$filename - if test ! -s $installdir/$filename; then - as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 - fi - case "$extension" in - zip) echo "Unzipping $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) - ;; - tar.gz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - tgz) echo "Untaring $installdir/$filename..." - (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) - ;; - *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 - ;; - esac - fi - if test -f $installdir/$filename.unpacked; then - depdir=$installdir - fi - - fi - # Source the builddeps file again, because in the previous command, the depdir - # was updated to point at the current build dependency install directory. - . $builddepsfile - # Now extract variables from the builddeps.conf files. - theroot=${builddep_pulse_ROOT} - thecflags=${builddep_pulse_CFLAGS} - thelibs=${builddep_pulse_LIBS} - if test "x$depdir" = x; then - as_fn_error $? "Could not download build dependency pulse" "$LINENO" 5 - fi - PULSE=$depdir - if test "x$theroot" != x; then - PULSE="$theroot" - fi - if test "x$thecflags" != x; then - PULSE_CFLAGS="$thecflags" - fi - if test "x$thelibs" != x; then - PULSE_LIBS="$thelibs" - fi - PULSE_FOUND=yes - else PULSE_FOUND=no - - fi - else PULSE_FOUND=no - - fi - -fi -if test "x$PULSE_FOUND" = xno; then - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBPULSE" >&5 -$as_echo_n "checking for LIBPULSE... " >&6; } - -if test -n "$LIBPULSE_CFLAGS"; then - pkg_cv_LIBPULSE_CFLAGS="$LIBPULSE_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.11\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libpulse >= 0.9.11") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LIBPULSE_CFLAGS=`$PKG_CONFIG --cflags "libpulse >= 0.9.11" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$LIBPULSE_LIBS"; then - pkg_cv_LIBPULSE_LIBS="$LIBPULSE_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.11\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libpulse >= 0.9.11") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_LIBPULSE_LIBS=`$PKG_CONFIG --libs "libpulse >= 0.9.11" 2>/dev/null` -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - LIBPULSE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libpulse >= 0.9.11" 2>&1` - else - LIBPULSE_PKG_ERRORS=`$PKG_CONFIG --print-errors "libpulse >= 0.9.11" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$LIBPULSE_PKG_ERRORS" >&5 - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PULSE_FOUND=no -elif test $pkg_failed = untried; then - PULSE_FOUND=no -else - LIBPULSE_CFLAGS=$pkg_cv_LIBPULSE_CFLAGS - LIBPULSE_LIBS=$pkg_cv_LIBPULSE_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PULSE_FOUND=yes -fi -fi -if test "x$PULSE_FOUND" = xno; then - for ac_header in pulse/pulseaudio.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "pulse/pulseaudio.h" "ac_cv_header_pulse_pulseaudio_h" "$ac_includes_default" -if test "x$ac_cv_header_pulse_pulseaudio_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PULSE_PULSEAUDIO_H 1 -_ACEOF - PULSE_FOUND=yes - PULSE_CFLAGS=-Iignoreme - PULSE_LIBS= - DEFAULT_PULSE=yes -else - PULSE_FOUND=no -fi - -done - -fi - -if test "x$PULSE_FOUND" = xno && test "x$PULSE_NOT_NEEDED" != xyes; then - help_on_build_dependency pulse - as_fn_error $? "Could not find pulse audio libraries. $HELP_MSG " "$LINENO" 5 -fi - - - - -############################################################################### -# -# Check for the jpeg library -# - -USE_EXTERNAL_LIBJPEG=true -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ljpeg" >&5 -$as_echo_n "checking for main in -ljpeg... " >&6; } -if test "${ac_cv_lib_jpeg_main+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ljpeg $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_jpeg_main=yes -else - ac_cv_lib_jpeg_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5 -$as_echo "$ac_cv_lib_jpeg_main" >&6; } -if test "x$ac_cv_lib_jpeg_main" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBJPEG 1 -_ACEOF - - LIBS="-ljpeg $LIBS" - -else - USE_EXTERNAL_LIBJPEG=false - { $as_echo "$as_me:${as_lineno-$LINENO}: Will use jpeg decoder bundled with the OpenJDK source" >&5 -$as_echo "$as_me: Will use jpeg decoder bundled with the OpenJDK source" >&6;} - -fi - - - -############################################################################### -# -# Check for the gif library -# - -USE_EXTERNAL_LIBJPEG=true -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgif" >&5 -$as_echo_n "checking for main in -lgif... " >&6; } -if test "${ac_cv_lib_gif_main+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgif $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_gif_main=yes -else - ac_cv_lib_gif_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5 -$as_echo "$ac_cv_lib_gif_main" >&6; } -if test "x$ac_cv_lib_gif_main" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBGIF 1 -_ACEOF - - LIBS="-lgif $LIBS" - -else - USE_EXTERNAL_LIBGIF=false - { $as_echo "$as_me:${as_lineno-$LINENO}: Will use gif decoder bundled with the OpenJDK source" >&5 -$as_echo "$as_me: Will use gif decoder bundled with the OpenJDK source" >&6;} - -fi - - - -############################################################################### -# -# Check for the zlib library -# - -USE_EXTERNAL_LIBZ=true -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lz" >&5 -$as_echo_n "checking for main in -lz... " >&6; } -if test "${ac_cv_lib_z_main+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lz $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_z_main=yes -else - ac_cv_lib_z_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_main" >&5 -$as_echo "$ac_cv_lib_z_main" >&6; } -if test "x$ac_cv_lib_z_main" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBZ 1 -_ACEOF - - LIBS="-lz $LIBS" - -else - USE_EXTERNAL_LIBZ=false - { $as_echo "$as_me:${as_lineno-$LINENO}: Will use zlib bundled with the OpenJDK source" >&5 -$as_echo "$as_me: Will use zlib bundled with the OpenJDK source" >&6;} - -fi - - - -############################################################################### -# -# Check if altzone exists in time.h -# - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -return (int)altzone; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - has_altzone=yes -else - has_altzone=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "x$has_altzone" = xyes; then - -$as_echo "#define HAVE_ALTZONE 1" >>confdefs.h - -fi - -############################################################################### -# -# Check the maths library -# - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 -$as_echo_n "checking for cos in -lm... " >&6; } -if test "${ac_cv_lib_m_cos+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char cos (); -int -main () -{ -return cos (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_m_cos=yes -else - ac_cv_lib_m_cos=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 -$as_echo "$ac_cv_lib_m_cos" >&6; } -if test "x$ac_cv_lib_m_cos" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBM 1 -_ACEOF - - LIBS="-lm $LIBS" - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: Maths library was not found" >&5 -$as_echo "$as_me: Maths library was not found" >&6;} - -fi - - - -############################################################################### -# -# Check for libdl.so - -save_LIBS="$LIBS" -LIBS="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBDL 1 -_ACEOF - - LIBS="-ldl $LIBS" - -fi - -LIBDL="$LIBS" - -LIBS="$save_LIBS" - -############################################################################### -# -# Should we run the painfully slow javadoc tool? -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build documentation" >&5 -$as_echo_n "checking whether to build documentation... " >&6; } -# Check whether --enable-docs was given. -if test "${enable_docs+set}" = set; then : - enableval=$enable_docs; ENABLE_DOCS="${enableval}" -else - ENABLE_DOCS='no' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_DOCS" >&5 -$as_echo "$ENABLE_DOCS" >&6; } - -GENERATE_DOCS=false -if test "x$ENABLE_DOCS" = xyes; then - GENERATE_DOCS=true -fi - - -############################################################################### -# -# Should we compile nimbus swing L&F? We can probably remove this option -# since nimbus is officially part of javax now. -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build nimbus L&F" >&5 -$as_echo_n "checking whether to build nimbus L&F... " >&6; } -# Check whether --enable-nimbus was given. -if test "${enable_nimbus+set}" = set; then : - enableval=$enable_nimbus; ENABLE_NIMBUS="${enableval}" -else - ENABLE_NIMBUS='yes' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_NIMBUS" >&5 -$as_echo "$ENABLE_NIMBUS" >&6; } -DISABLE_NIMBUS= -if test "x$ENABLE_NIMBUS" = xno; then - DISABLE_NIMBUS=true -fi - - -############################################################################### -# -# Setup the opt flags for different compilers -# and different operating systems. -# -C_FLAG_DEPS="-MMD -MF" -CXX_FLAG_DEPS="-MMD -MF" - -case $COMPILER_TYPE in - CC ) - D_FLAG="-g" - case $COMPILER_NAME in - gcc ) - case $PLATFORM in - macosx ) - # On MacOSX we optimize for size, something - # we should do for all platforms? - C_O_FLAG_HI="-Os" - C_O_FLAG_NORM="-Os" - C_O_FLAG_NONE="" - ;; - *) - C_O_FLAG_HI="-O3" - C_O_FLAG_NORM="-O2" - C_O_FLAG_NONE="-O0" - ;; - esac - CXX_O_FLAG_HI="$C_O_FLAG_HI" - CXX_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_NONE="$C_O_FLAG_NONE" - ;; - ossc ) - # - # Forte has different names for this with their C++ compiler... - # - CXX_FLAG_DEPS="-xMMD -xMF" - -# Extra options used with HIGHEST -# -# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be -# done with care, there are some assumptions below that need to -# be understood about the use of pointers, and IEEE behavior. -# -# Use non-standard floating point mode (not IEEE 754) -CC_HIGHEST="$CC_HIGHEST -fns" -# Do some simplification of floating point arithmetic (not IEEE 754) -CC_HIGHEST="$CC_HIGHEST -fsimple" -# Use single precision floating point with 'float' -CC_HIGHEST="$CC_HIGHEST -fsingle" -# Assume memory references via basic pointer types do not alias -# (Source with excessing pointer casting and data access with mixed -# pointer types are not recommended) -CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" -# Use intrinsic or inline versions for math/std functions -# (If you expect perfect errno behavior, do not use this) -CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" -# Loop data dependency optimizations (need -xO3 or higher) -CC_HIGHEST="$CC_HIGHEST -xdepend" -# Pointer parameters to functions do not overlap -# (Similar to -xalias_level=basic usage, but less obvious sometimes. -# If you pass in multiple pointers to the same data, do not use this) -CC_HIGHEST="$CC_HIGHEST -xrestrict" -# Inline some library routines -# (If you expect perfect errno behavior, do not use this) -CC_HIGHEST="$CC_HIGHEST -xlibmil" -# Use optimized math routines -# (If you expect perfect errno behavior, do not use this) -# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now -#CC_HIGHEST="$CC_HIGHEST -xlibmopt" - - case $LEGACY_HOST_CPU1 in - i586) - C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" - C_O_FLAG_HI="-xO4 -Wu,-O4~yz" - C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" - C_O_FLAG_NONE="" - CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" - CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" - CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" - CXX_O_FLAG_NONE="" - ;; - sparc) - C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" - C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" - C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" - C_O_FLAG_NONE="" - CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" - CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" - CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" - CXX_O_FLAG_NONE="" - ;; - esac - esac - ;; - CL ) - D_FLAG= - C_O_FLAG_HI="-O2" - C_O_FLAG_NORM="-O1" - C_O_FLAG_NONE="-Od" - CXX_O_FLAG_HI="$C_O_FLAG_HI" - CXX_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_NONE="$C_O_FLAG_NONE" - ;; -esac - -if test -z "$C_O_FLAG_HIGHEST"; then - C_O_FLAG_HIGHEST="$C_O_FLAG_HI" -fi - -if test -z "$CXX_O_FLAG_HIGHEST"; then - CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" -fi - - - - - - - - - - - - -############################################################################### -# -# Setup legacy vars/targets and new vars to deal with different debug levels. -# -case $DEBUG_LEVEL in - release ) - HOTSPOT_DEBUG_LEVEL="product" - HOTSPOT_EXPORT="product" - ;; - fastdebug ) - HOTSPOT_DEBUG_LEVEL="fastdebug" - HOTSPOT_EXPORT="fastdebug" - CFLAGS="$CFLAGS $D_FLAG" - JAVAC_FLAGS="$JAVAC_FLAGS -g" - ;; - slowdebug ) - HOTSPOT_DEBUG_LEVEL="jvmg" - HOTSPOT_EXPORT="debug" - CFLAGS="$CFLAGS $D_FLAG" - C_O_FLAG_HI="$C_O_FLAG_NONE" - C_O_FLAG_NORM="$C_O_FLAG_NONE" - CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" - CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" - JAVAC_FLAGS="$JAVAC_FLAGS -g" - ;; -esac - -############################################################################### -# -# Generate the legacy makefile targets for hotspot. -# The hotspot api for selecting the build artifacts, really, needs to be improved. -# -HOTSPOT_TARGET="" - -if test "x$JVM_VARIANT_SERVER" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} " -fi - -if test "x$JVM_VARIANT_CLIENT" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 " -fi - -if test "x$JVM_VARIANT_KERNEL" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel " -fi - -if test "x$JVM_VARIANT_ZERO" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero " -fi - -if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " -fi - -HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" - -############################################################################### -# -# Setup all directories for the subrepoes and the arguments to the sub makes. -# -LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools" -LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist" -LANGTOOLS_MAKE_ARGS="" - - - - -CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba" -CORBA_DIST="$OUTPUT_ROOT/corba/dist" -CORBA_MAKE_ARGS="" - - - - -JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp" -JAXP_DIST="$OUTPUT_ROOT/jaxp/dist" -JAXP_MAKE_ARGS="" - - - - -JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws" -JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist" -JAXWS_MAKE_ARGS="" - - - - -HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot" -HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist" -HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET" - - - - -JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk" -JDK_MAKE_ARGS="ALT_OUTPUTDIR=\"$OUTPUT_ROOT/jdk\"" - - - -IMAGES_OUTPUTDIR=$OUTPUT_ROOT/images -IMAGES_MAKE_ARGS="ALT_OUTPUTDIR=$OUTPUT_ROOT/jdk \ - SHARE_SRC=$JDK_TOPDIR/src/share \ - PLATFORM_SRC=$JDK_TOPDIR/src/$LEGACY_HOST_OS_API \ - TEMPDIR=$IMAGES_OUTPUTDIR/tmp \ - ABS_TEMPDIR=$IMAGES_OUTPUTDIR/tmp " - - - -############################################################################### -# -# Now setup the CFLAGS and LDFLAGS for the JDK build. -# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. -# -case $COMPILER_NAME in - gcc ) - CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ - -pipe -fno-omit-frame-pointer \ - -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" - CFLAGS_JDK="$CFLAGS_JDK -fno-strict-aliasing" - ;; - ossc ) - CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" - CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" - ;; - cl ) - CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ - -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ - -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ - -DWIN32 -DIAL" - case $LEGACY_HOST_CPU1 in - i?86 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" - ;; - amd64 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" - ;; - esac - ;; -esac - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" - -# The package path is used only on macosx? -PACKAGE_PATH=/opt/local - - -# Sometimes we use a cpu dir (.../lib/amd64/server) -# Sometimes not (.../lib/server) -LIBARCHDIR="$LEGACY_HOST_CPU2/" -if test "x$ENDIAN" = xlittle; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" -else - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" -fi -if test "x$HOST_OS" = xlinux; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" -fi -if test "x$HOST_OS" = xwindows; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" -fi -if test "x$HOST_OS" = xsolaris; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" -fi -if test "x$HOST_OS" = xmacosx; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" - LIBARCHDIR="" -fi -if test "x$HOST_OS" = xbsd; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" -fi -if test "x$DEBUG_LEVEL" = xrelease; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" -else - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" -fi - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_HOST_CPU1\"' -D$LEGACY_HOST_CPU1" -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ - -I${JDK_OUTPUTDIR}/include \ - -I${JDK_OUTPUTDIR}/include/$PLATFORM \ - -I${JDK_TOPDIR}/src/share/javavm/export \ - -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/javavm/export \ - -I${JDK_TOPDIR}/src/share/native/common \ - -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/native/common" - -# The shared libraries are compiled using the picflag. -CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" -CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG" - -# Executable flags -CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" -CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" - -# Now this is odd. The JDK native libraries have to link against libjvm.so -# On 32-bit machines there is normally two distinct libjvm.so:s, client and server. -# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library -# is identical for client and server? Yes. Which is picked at runtime (client or server)? -# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following -# libraries will link to whatever is in memory. Yuck. -# -# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. -if test "x$COMPILER_TYPE" = xCL; then - LDFLAGS_JDKLIB="$LDFLAGS -dll -libpath:${JDK_OUTPUTDIR}/lib -libpath:${JDK_OUTPUTDIR}/objs" - LDFLAGS_JDKLIB_SUFFIX="" - if test "$HOST_CPU_BITS" == "64"; then - LDFLAGS_STACK_SIZE=1048576 - else - LDFLAGS_STACK_SIZE=327680 - fi - LDFLAGS_JDKEXE="$LDFLAGS /STACK:$LDFLAGS_STACK_SIZE" -else - # If this is a --hash-style=gnu system, use --hash-style=both, why? - HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` - if test -n "$HAS_GNU_HASH"; then - # And since we now know that the linker is gnu, then add -z defs, to forbid - # undefined symbols in object files. - LDFLAGS="$LDFLAGS -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" - if test "x$DEBUG_LEVEL" == "xrelease"; then - # When building release libraries, tell the linker optimize them. - # Should this be supplied to the OSS linker as well? - LDFLAGS="$LDFLAGS -Xlinker -O1" - fi - fi - - LDFLAGS_JDKLIB="$LDFLAGS $SHARED_LIBRARY_FLAGS \ - -L${JDK_OUTPUTDIR}/objs \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" - LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" - if test "x$COMPILER_NAME" = xossc; then - LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" - fi - - # Only the jli library is explicitly linked when the launchers are built. - # The libjvm is then dynamically loaded/linked by the launcher. - if test "x$HOST_OS" != "xmacosx"; then - LDFLAGS_JDKEXE="$LDFLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" - LDFLAGS_JDKEXE_SUFFIX="-ljli" - fi -fi - - - - - - - - - - - - - - -############################################################################### -# -# statically link libstdc++ before C++ ABI is stablized on Linux unless -# dynamic build is configured on command line. -# -# Check whether --enable-static-link-stdc++ was given. -if test "${enable_static_link_stdc__+set}" = set; then : - enableval=$enable_static_link_stdc__; -else - - enable_static_link_stdc__=yes - -fi - - -if test "x$HOST_OS" = xlinux; then - # Test if -lstdc++ works. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if dynamic link of stdc++ is possible" >&5 -$as_echo_n "checking if dynamic link of stdc++ is possible... " >&6; } - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - OLD_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -lstdc++" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - has_dynamic_libstdcxx=yes -else - has_dynamic_libstdcxx=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CXXFLAGS="$OLD_CXXFLAGS" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_dynamic_libstdcxx" >&5 -$as_echo "$has_dynamic_libstdcxx" >&6; } - - # Test if stdc++ can be linked statically. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if static link of stdc++ is possible" >&5 -$as_echo_n "checking if static link of stdc++ is possible... " >&6; } - STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - OLD_LIBS="$LIBS" - OLD_CXX="$CXX" - LIBS="$STATIC_STDCXX_FLAGS" - CXX="$CC" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - has_static_libstdcxx=yes -else - has_static_libstdcxx=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$OLD_LIBS" - CXX="$OLD_CXX" - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_static_libstdcxx" >&5 -$as_echo "$has_static_libstdcxx" >&6; } - - if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then - as_fn_error $? "I cannot link to stdc++! Neither dynamically nor statically." "$LINENO" 5 - fi - - if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Static linking of libstdc++ was not possible reverting to dynamic linking." >&5 -$as_echo "$as_me: Static linking of libstdc++ was not possible reverting to dynamic linking." >&6;} - enable_static_link_stdc__=no - fi - - if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Dynamic linking of libstdc++ was not possible reverting to static linking." >&5 -$as_echo "$as_me: Dynamic linking of libstdc++ was not possible reverting to static linking." >&6;} - enable_static_link_stdc__=yes - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libstdc++" >&5 -$as_echo_n "checking how to link with libstdc++... " >&6; } - if test "x$enable_static_link_stdc__" = xyes; then - LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" - LDCXX="$CC" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 -$as_echo "static" >&6; } - else - LIBCXX="$LIBCXX -lstdc++" - LDCXX="$CXX" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamic" >&5 -$as_echo "dynamic" >&6; } - fi -fi - -############################################################################### -# -# Could someone enlighten this configure script with a comment about libCrun? -# The LEGACY_HOST_CPU3 is the setting for ISA_DIR. -# -if test "x$HOST_OS" = xsolaris && test "x$LIBCXX" = x; then - LIBCXX="/usr/lib${LEGACY_HOST_CPU3}/libCrun.so.1" -fi - -# TODO better (platform agnostic) test -if test "x$HOST_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then - LIBCXX="-lstdc++" -fi - - - -############################################################################### - -OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" -OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" -OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" -OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" - - - - -############################################################################### -# -# Misc -# - -# The name of the Service Agent jar. -SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}" -if test "x$HOST_OS" = "xwindows"; then - SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}" -fi - - -# Control wether Hotspot runs Queens test after build. -# Check whether --enable-hotspot-test-in-build was given. -if test "${enable_hotspot_test_in_build+set}" = set; then : - enableval=$enable_hotspot_test_in_build; -else - enable_hotspot_test_in_build=no -fi - -if test "x$enable_hotspot_test_in_build" = "xyes"; then - TEST_IN_BUILD=true -else - TEST_IN_BUILD=false -fi - - -############################################################################### -# -# Choose cacerts source file -# - -# Check whether --with-cacerts-file was given. -if test "${with_cacerts_file+set}" = set; then : - withval=$with_cacerts_file; -fi - -if test "x$with_cacerts_file" != x; then - CACERTS_FILE=$with_cacerts_file -else - if test "x$OPENJDK" = "xtrue"; then - CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts - else - CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal - fi -fi - - -# Check if build directory is on local disk. -# return 0 if it is on local disk, non-0 if on remote disk or failure -function is_directory_on_local_disk { - # df -l lists only local disks; if the given directory is not found then - # a non-zero exit code is given - $DF -l $1 > /dev/null 2>&1 -} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if build directory is on local disk" >&5 -$as_echo_n "checking if build directory is on local disk... " >&6; } -if is_directory_on_local_disk $OUTPUT_ROOT; then - OUTPUT_DIR_IS_LOCAL="yes" -else - OUTPUT_DIR_IS_LOCAL="no" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OUTPUT_DIR_IS_LOCAL" >&5 -$as_echo "$OUTPUT_DIR_IS_LOCAL" >&6; } - -# We're messing a bit with internal autoconf variables to put the config.status in the -# output directory instead of the current directory. -CONFIG_STATUS=$OUTPUT_ROOT/config.status - -# Now create the actual output files, after this, the main work of configure is done -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by openjdk $as_me version-0.1, which was -generated by GNU Autoconf 2.67. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -openjdk config.status version-0.1 -configured by $0, generated by GNU Autoconf 2.67, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; + conf_processed_arguments="$conf_processed_arguments $conf_option" ;; esac - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "$OUTPUT_ROOT/config.h") CONFIG_HEADERS="$CONFIG_HEADERS $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" ;; - "$OUTPUT_ROOT/spec.gmk") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" ;; - "$OUTPUT_ROOT/Makefile") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; + case $conf_option in + -build | --build | --buil | --bui | --bu |-build=* | --build=* | --buil=* | --bui=* | --bu=*) + conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; + -target | --target | --targe | --targ | --tar | --ta | --t | -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; + -host | --host | --hos | --ho | -host=* | --host=* | --hos=* | --ho=*) + conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; esac done - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +if $TEST "x$conf_legacy_crosscompile" != "x"; then + if $TEST "x$conf_openjdk_target" != "x"; then + echo "Error: Specifying --openjdk-target together with autoconf" + echo "legacy cross-compilation flags is not supported." + echo "You specified: --openjdk-target=$conf_openjdk_target and $conf_legacy_crosscompile." + echo "The recommended use is just --openjdk-target." + exit 1 else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + echo "Warning: You are using legacy autoconf cross-compilation flags." + echo "It is recommended that you use --openjdk-target instead." + echo "" fi -done -rm -f conf$$subs.sh +fi -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" +if $TEST "x$conf_openjdk_target" != "x"; then + conf_build_platform=`sh $conf_script_dir/build-aux/config.guess` + conf_processed_arguments="--build=$conf_build_platform --host=$conf_openjdk_target --target=$conf_openjdk_target $conf_processed_arguments" +fi -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } +# Make configure exit with error on invalid options as default. +# Can be overridden by --disable-option-checking, since we prepend our argument +# and later options override earlier. +conf_processed_arguments="--enable-option-checking=fatal $conf_processed_arguments" - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +### +### Call the configure script +### +if $TEST -e $conf_closed_script_dir/generated-configure.sh; then + # Closed source configure available; run that instead + . $conf_closed_script_dir/generated-configure.sh $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags" else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' + . $conf_script_dir/generated-configure.sh $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags" fi -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" +### +### Post-processing +### -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi - ;; - - - esac - -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - -# Finally output some useful information to the user - -if test "x$CCACHE_FOUND" != x; then - if test "x$HAS_GOOD_CCACHE" = x; then - CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" - CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." - else - CCACHE_STATUS="installed and in use" - fi -else - if test "x$GCC" = xyes; then - CCACHE_STATUS="not installed (consider installing)" - CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." - else - CCACHE_STATUS="not available for your system" - fi -fi - -printf "\n" -printf "====================================================\n" -printf "A new configuration has been successfully created in\n" -printf "$OUTPUT_ROOT\n" -if test "x$CONFIGURE_COMMAND_LINE" != x; then - printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n" -else - printf "using default settings.\n" -fi - -printf "\n" -printf "Configuration summary:\n" -printf "* Debug level: $DEBUG_LEVEL\n" -printf "* JDK variant: $JDK_VARIANT\n" -printf "* JVM variants: $with_jvm_variants\n" -printf "* Host info: OS: $HOST_OS, CPU architecture: $HOST_CPU_ARCH, address length: $HOST_CPU_BITS\n" -printf "* Boot JDK: $BOOT_JDK\n" - -printf "\n" -printf "Build performance summary:\n" -printf "* Cores to use: $NUM_CORES\n" -printf "* Memory limit: $MEMORY_SIZE MB\n" -printf "* ccache status: $CCACHE_STATUS\n" - -if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then - printf "\n" - printf "WARNING: Your build output directory is not on a local disk.\n" - printf "This will severely degrade build performance!\n" - printf "It is recommended that you create an output directory on a local disk,\n" - printf "and run the configure script again from that directory.\n" -fi - -if test "x$CCACHE_HELP_MSG" != x; then - printf "\n" - printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" - printf "$CCACHE_HELP_MSG\n" - - help_on_build_dependency ccache - printf "$HELP_MSG\n" +# Move the log file to the output root, if this was successfully created +if $TEST -d "$OUTPUT_ROOT"; then + mv -f config.log "$OUTPUT_ROOT" 2> /dev/null fi diff --git a/common/autoconf/configure.ac b/common/autoconf/configure.ac index be678cc2f15..df8c5f1bcb5 100644 --- a/common/autoconf/configure.ac +++ b/common/autoconf/configure.ac @@ -23,2856 +23,204 @@ # questions. # +############################################################################### +# +# Includes and boilerplate +# +############################################################################### + + AC_PREREQ([2.61]) -AC_INIT(openjdk, version-0.1, build-infra-dev@openjdk.java.net) +AC_INIT(openjdk, jdk8, build-dev@openjdk.java.net) + +# Do not change or remove the following line, it is needed for consistency checks: +# DATE_WHEN_GENERATED: @DATE_WHEN_GENERATED@ AC_CONFIG_AUX_DIR([build-aux]) - m4_include([build-aux/pkg.m4]) + +# Include these first... +m4_include([basics.m4]) m4_include([builddeps.m4]) -m4_include([platform.m4]) -m4_include([cores.m4]) +# ... then the rest +m4_include([boot-jdk.m4]) +m4_include([build-performance.m4]) m4_include([help.m4]) +m4_include([jdk-options.m4]) +m4_include([libraries.m4]) +m4_include([platform.m4]) +m4_include([source-dirs.m4]) +m4_include([toolchain.m4]) -# Save the command line. Do this very early, before it is lost by calling autoconf macros. -CONFIGURE_COMMAND_LINE="$@" -AC_SUBST(CONFIGURE_COMMAND_LINE) - -# Locate the directory of this script. -SCRIPT="[$]0" -REMOVE_SYMBOLIC_LINKS(SCRIPT) -AUTOCONF_DIR=`dirname [$]0` - -# Start with tools that do not need have cross compilation support -# and can be expected to be found in the default PATH. These tools are -# used by configure. Nor are these tools expected to be found in the -# devkit from the builddeps server either, since they are -# needed to download the devkit. -AC_PROG_AWK -CHECK_NONEMPTY(AWK) -AC_PATH_PROG(CAT, cat) -CHECK_NONEMPTY(CAT) -AC_PATH_PROG(CHMOD, chmod) -CHECK_NONEMPTY(CHMOD) -AC_PATH_PROG(CP, cp) -CHECK_NONEMPTY(CP) -AC_PATH_PROG(CPIO, cpio) -CHECK_NONEMPTY(CPIO) -AC_PATH_PROG(CUT, cut) -CHECK_NONEMPTY(CUT) -AC_PATH_PROG(DATE, date) -CHECK_NONEMPTY(DATE) -AC_PATH_PROG(DF, df) -CHECK_NONEMPTY(DF) -AC_PATH_PROG(DIFF, diff) -CHECK_NONEMPTY(DIFF) -# Warning echo is really, really unportable!!!!! Different -# behaviour in bash and dash and in a lot of other shells! -# Use printf for serious work! -AC_PATH_PROG(ECHO, echo) -CHECK_NONEMPTY(ECHO) -AC_PROG_EGREP -CHECK_NONEMPTY(EGREP) -AC_PROG_FGREP -CHECK_NONEMPTY(FGREP) - -AC_PATH_PROG(FIND, find) -CHECK_NONEMPTY(FIND) -CHECK_FIND_DELETE -AC_SUBST(FIND_DELETE) - -AC_PROG_GREP -CHECK_NONEMPTY(GREP) -AC_PATH_PROG(HEAD, head) -CHECK_NONEMPTY(HEAD) -AC_PATH_PROG(LN, ln) -CHECK_NONEMPTY(LN) -AC_PATH_PROG(LS, ls) -CHECK_NONEMPTY(LS) -AC_PATH_PROGS(MAKE, [gmake make]) -CHECK_NONEMPTY(MAKE) -MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[[12346789]]'` -if test "x$MAKE_VERSION" = x; then - AC_MSG_ERROR([You must use GNU make 3.81 or newer! Please put it in the path.]) -fi -AC_PATH_PROG(MKDIR, mkdir) -CHECK_NONEMPTY(MKDIR) -AC_PATH_PROG(MV, mv) -CHECK_NONEMPTY(MV) -AC_PATH_PROGS(NAWK, [nawk gawk awk]) -CHECK_NONEMPTY(NAWK) -AC_PATH_PROG(PRINTF, printf) -CHECK_NONEMPTY(PRINTF) -AC_PATH_PROG(THEPWDCMD, pwd) -AC_PATH_PROG(RM, rm) -CHECK_NONEMPTY(RM) -RM="$RM -f" -AC_PROG_SED -CHECK_NONEMPTY(SED) -AC_PATH_PROG(SH, sh) -CHECK_NONEMPTY(SH) -AC_PATH_PROG(SORT, sort) -CHECK_NONEMPTY(SORT) -AC_PATH_PROG(TAR, tar) -CHECK_NONEMPTY(TAR) -AC_PATH_PROG(TAIL, tail) -CHECK_NONEMPTY(TAIL) -AC_PATH_PROG(TEE, tee) -CHECK_NONEMPTY(TEE) -AC_PATH_PROG(TR, tr) -CHECK_NONEMPTY(TR) -AC_PATH_PROG(TOUCH, touch) -CHECK_NONEMPTY(TOUCH) -AC_PATH_PROG(WC, wc) -CHECK_NONEMPTY(WC) -AC_PATH_PROG(XARGS, xargs) -CHECK_NONEMPTY(XARGS) -AC_PATH_PROG(ZIP, zip) -CHECK_NONEMPTY(ZIP) -AC_PATH_PROG(UNZIP, unzip) -CHECK_NONEMPTY(UNZIP) -AC_PATH_PROG(LDD, ldd) -if test "x$LDD" = "x"; then - # List shared lib dependencies is used for - # debug output and checking for forbidden dependencies. - # We can build without it. - LDD="true" -fi -AC_PATH_PROG(OTOOL, otool) -if test "x$OTOOL" = "x"; then - OTOOL="true" -fi -AC_PATH_PROG(READELF, readelf) -AC_PATH_PROG(EXPR, expr) -CHECK_NONEMPTY(EXPR) -AC_PATH_PROG(FILE, file) -CHECK_NONEMPTY(FILE) -AC_PATH_PROG(HG, hg) - -# Figure out the build and host system. -AC_CANONICAL_BUILD -AC_CANONICAL_HOST - -AC_ARG_WITH(data-model, [AS_HELP_STRING([--with-data-model], - [build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-data-model=32 @<:@guessed@:>@])]) - -if test "x$with_data_model" != x && \ - test "x$with_data_model" != x32 && \ - test "x$with_data_model" != x64 ; then - AC_MSG_ERROR([The data model can only be 32 or 64!]) -fi -# Translate the standard cpu-vendor-kernel-os quadruplets into -# the new HOST_.... and BUILD_... and the legacy names used by -# the openjdk build. -# It uses $host_os $host_cpu $build_os $build_cpu and $with_data_model -EXTRACT_HOST_AND_BUILD_AND_LEGACY_VARS -# Now the following vars are defined. -# HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows -# HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince -# HOST_OS_API=posix,winapi -# -# HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 -# HOST_CPU_ARCH=x86,sparc,pcc,arm -# HOST_CPU_BITS=32,64 -# HOST_CPU_ENDIAN=big,little -# -# There is also a: -# LEGACY_HOST_CPU1=i586,amd64,.... # used to set the old var ARCH -# LEGACY_HOST_CPU2=i386,amd64,.... # used to set the old var LIBARCH -# LEGACY_HOST_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris -# There was also a BUILDARCH that had i486,amd64,... but we do not use that -# in the new build. -# LEGACY_HOST_OS_API=solaris,windows # used to select source roots - -DATE_WHEN_CONFIGURED=`LANG=C date` -AC_SUBST(DATE_WHEN_CONFIGURED) - -# How many cores do we have on this build system? -AC_ARG_WITH(num-cores, [AS_HELP_STRING([--with-num-cores], - [number of cores in the build system, e.g. --with-num-cores=8 @<:@probed@:>@])]) -if test "x$with_num_cores" = x; then - # The number of cores were not specified, try to probe them. - CHECK_CORES -else - NUM_CORES=$with_num_cores - CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` -fi -AC_SUBST(NUM_CORES) -AC_SUBST(CONCURRENT_BUILD_JOBS) - -# How many cores do we have on this build system? -AC_ARG_WITH(memory-size, [AS_HELP_STRING([--with-memory-size], - [memory (in MB) available in the build system, e.g. --with-memory-size=1024 @<:@probed@:>@])]) -if test "x$with_memory_size" = x; then - # The memory size was not specified, try to probe it. - CHECK_MEMORY_SIZE -else - MEMORY_SIZE=$with_memory_size -fi -AC_SUBST(MEMORY_SIZE) - -# Where is the source? It is located two levels above the configure script. -CURDIR="$PWD" -cd "$AUTOCONF_DIR/../.." -SRC_ROOT="`pwd`" -AC_SUBST(SRC_ROOT) -cd "$CURDIR" - -# For cygwin we need cygpath first, since it is used everywhere. -AC_PATH_PROG(CYGPATH, cygpath) -PATH_SEP=":" -if test "x$BUILD_OS" = "xwindows"; then - if test "x$CYGPATH" = x; then - AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path]) - fi - PATH_SEP=";" -fi -AC_SUBST(PATH_SEP) - -SPACESAFE(SRC_ROOT,[the path to the source root]) -SPACESAFE(CURDIR,[the path to the current directory]) - -if test "x$BUILD_OS" = "xsolaris"; then - # Also search in /usr/ccs/bin for utilities like ar and as. - PATH="/usr/ccs/bin:$PATH" -fi +# This line needs to be here, verbatim, after all includes. +# It is replaced with closed functionality when building +# closed sources. +AC_DEFUN_ONCE([CLOSED_HOOK]) ############################################################################### # -# OpenJDK or closed +# Initialization # -AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only], - [build OpenJDK regardless of the presence of closed repositories @<:@disabled@:>@])],,) - -if test "x$enable_openjdk_only" = "xyes"; then - OPENJDK=true -elif test "x$enable_openjdk_only" = "xno"; then - OPENJDK=false -elif test -d "$SRC_ROOT/jdk/src/closed"; then - OPENJDK=false -else - OPENJDK=true -fi - -if test "x$OPENJDK" = "xtrue"; then - SET_OPENJDK=OPENJDK=true -fi - -AC_SUBST(SET_OPENJDK) - ############################################################################### -# -# JIGSAW or not. The JIGSAW variable is used during the intermediate -# stage when we are building both the old style JDK and the new style modularized JDK. -# When the modularized JDK is finalized, this option will go away. -# -AC_ARG_ENABLE([jigsaw], [AS_HELP_STRING([--enable-jigsaw], - [build Jigsaw images (not yet available) @<:@disabled@:>@])],,) -if test "x$enable_jigsaw" = "xyes"; then - JIGSAW=true -else - JIGSAW=false -fi -AC_SUBST(JIGSAW) +# Basic initialization that must happen first of all +BASIC_INIT +BASIC_SETUP_PATHS +BASIC_SETUP_LOGGING -############################################################################### -# -# Check which variant of the JDK that we want to build. -# Currently we have: -# normal: standard edition -# embedded: cut down to a smaller footprint -# -# Effectively the JDK variant gives a name to a specific set of -# modules to compile into the JDK. In the future, these modules -# might even be Jigsaw modules. -# -AC_MSG_CHECKING([which variant of the JDK to build]) -AC_ARG_WITH([jdk-variant], [AS_HELP_STRING([--with-jdk-variant], - [JDK variant to build (normal, embedded) @<:@normal@:>@])]) +# Must be done before we can call HELP_MSG_MISSING_DEPENDENCY. +HELP_SETUP_DEPENDENCY_HELP -if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then - JAVASE_EMBEDDED="" - MINIMIZE_RAM_USAGE="" - JDK_VARIANT="normal" -elif test "x$with_jdk_variant" = xembedded; then - JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true" - MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" - JDK_VARIANT="embedded" -else - AC_MSG_ERROR([The available JDK variants are: normal, embedded]) -fi - -AC_SUBST(JAVASE_EMBEDDED) -AC_SUBST(MINIMIZE_RAM_USAGE) -AC_SUBST(JDK_VARIANT) +# Setup simple tools, that do not need have cross compilation support. +# Without these, we can't properly run the rest of the configure script. +BASIC_SETUP_TOOLS -AC_MSG_RESULT([$JDK_VARIANT]) - -############################################################################### -# -# Should we build a JDK/JVM with head support (ie a graphical ui)? -# We always build headless support. -# -AC_MSG_CHECKING([headful support]) -AC_ARG_ENABLE([headful], [AS_HELP_STRING([--disable-headful], - [build headful support (graphical UI support) @<:@enabled@:>@])], - [SUPPORT_HEADFUL=${enable_headful}], [SUPPORT_HEADFUL=yes]) - -SUPPORT_HEADLESS=yes -BUILD_HEADLESS="BUILD_HEADLESS:=true" - -if test "x$SUPPORT_HEADFUL" = xyes; then - # We are building both headful and headless. - BUILD_HEADLESS_ONLY="" - headful_msg="inlude support for both headful and headless" -fi - -if test "x$SUPPORT_HEADFUL" = xno; then - # Thus we are building headless only. - BUILD_HEADLESS="BUILD_HEADLESS:=true" - BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true" - headful_msg="headless only" -fi - -AC_MSG_RESULT([$headful_msg]) - -AC_SUBST(SUPPORT_HEADLESS) -AC_SUBST(SUPPORT_HEADFUL) -AC_SUBST(BUILD_HEADLESS) -AC_SUBST(BUILD_HEADLESS_ONLY) - -############################################################################### -# -# Check which variants of the JVM that we want to build. -# Currently we have: -# server: normal interpreter and a tiered C1/C2 compiler -# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms) -# kernel: kernel footprint JVM that passes the TCK without major performance problems, -# ie normal interpreter and C1, only the serial GC, kernel jvmti etc -# zero: no machine code interpreter, no compiler -# zeroshark: zero interpreter and shark/llvm compiler backend -AC_MSG_CHECKING([which variants of the JVM that should be built]) -AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants], - [JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) @<:@server@:>@])]) - -if test "x$with_jvm_variants" = x; then - if test "x$JDK_VARIANT" = xembedded; then - with_jvm_variants="kernel" - elif test "x$HOST_CPU_BITS" = x64; then - with_jvm_variants="server" - else - # Yes, on 32-bit machines, the same source (almost) is compiled twice - # to generate two libjvm.so files. Fun, fun. - with_jvm_variants="client,server" - fi -fi - -JVM_VARIANTS=",$with_jvm_variants," -TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` - -if test "x$TEST_VARIANTS" != "x,"; then - AC_MSG_ERROR([The available JVM variants are: server, client, kernel, zero, zeroshark]) -fi -AC_MSG_RESULT([$with_jvm_variants]) - -JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'` -JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'` -JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` -JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` -JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` - -if test "x$JVM_VARIANT_CLIENT" = xtrue; then - if test "x$HOST_CPU_BITS" = x64; then - AC_MSG_ERROR([You cannot build a client JVM for a 64-bit machine.]) - fi -fi -if test "x$JVM_VARIANT_KERNEL" = xtrue; then - if test "x$HOST_CPU_BITS" = x64; then - AC_MSG_ERROR([You cannot build a kernel JVM for a 64-bit machine.]) - fi -fi - -COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` -# Replace the commas with AND for use in the build directory name. -ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` -if test "x$COUNT_VARIANTS" != "x,1"; then - AC_MSG_NOTICE([NOTE! Longer build time since we are building more than one version of the libjvm! $with_jvm_variants]) -fi - -AC_SUBST(JVM_VARIANTS) -AC_SUBST(JVM_VARIANT_SERVER) -AC_SUBST(JVM_VARIANT_CLIENT) -AC_SUBST(JVM_VARIANT_KERNEL) -AC_SUBST(JVM_VARIANT_ZERO) -AC_SUBST(JVM_VARIANT_ZEROSHARK) - -############################################################################### -# -# Set the debug level -# release: no debug information, all optimizations, no asserts. -# fastdebug: debug information (-g), all optimizations, all asserts -# slowdebug: debug information (-g), no optimizations, all asserts -# -DEBUG_LEVEL="release" -AC_MSG_CHECKING([which debug level to use]) -AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], - [set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) @<:@disabled@:>@])], - [ - ENABLE_DEBUG="${enableval}" - DEBUG_LEVEL="fastdebug" - ], [ENABLE_DEBUG="no"]) - -AC_ARG_WITH([debug-level], [AS_HELP_STRING([--with-debug-level], - [set the debug level (release, fastdebug, slowdebug) @<:@release@:>@])], - [ - DEBUG_LEVEL="${withval}" - if test "x$ENABLE_DEBUG" = xyes; then - AC_MSG_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.]) - fi - ]) -AC_MSG_RESULT([$DEBUG_LEVEL]) - -if test "x$DEBUG_LEVEL" != xrelease && \ - test "x$DEBUG_LEVEL" != xfastdebug && \ - test "x$DEBUG_LEVEL" != xslowdebug; then - AC_MSG_ERROR([Allowed debug levels are: release, fastdebug and slowdebug]) -fi - -case $DEBUG_LEVEL in - release ) - VARIANT="OPT" - FASTDEBUG="false" - DEBUG_CLASSFILES="false" - BUILD_VARIANT_RELEASE="" - ;; - fastdebug ) - VARIANT="DBG" - FASTDEBUG="true" - DEBUG_CLASSFILES="true" - BUILD_VARIANT_RELEASE="-fastdebug" - ;; - slowdebug ) - VARIANT="DBG" - FASTDEBUG="false" - DEBUG_CLASSFILES="true" - BUILD_VARIANT_RELEASE="-debug" - ;; -esac - -AC_SUBST(DEBUG_LEVEL) -AC_SUBST(VARIANT) -AC_SUBST(FASTDEBUG) -AC_SUBST(DEBUG_CLASSFILES) -AC_SUBST(BUILD_VARIANT_RELEASE) - -# Source the version numbers -. $AUTOCONF_DIR/version.numbers -if test "x$OPENJDK" = "xfalse"; then - . $AUTOCONF_DIR/closed.version.numbers -fi -# Now set the JDK version, milestone, build number etc. -AC_SUBST(JDK_MAJOR_VERSION) -AC_SUBST(JDK_MINOR_VERSION) -AC_SUBST(JDK_MICRO_VERSION) -AC_SUBST(JDK_UPDATE_VERSION) -AC_SUBST(JDK_BUILD_NUMBER) -AC_SUBST(MILESTONE) -AC_SUBST(LAUNCHER_NAME) -AC_SUBST(PRODUCT_NAME) -AC_SUBST(PRODUCT_SUFFIX) -AC_SUBST(JDK_RC_PLATFORM_NAME) -AC_SUBST(COMPANY_NAME) - -COPYRIGHT_YEAR=`date +'%Y'` -AC_SUBST(COPYRIGHT_YEAR) - -RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX" -AC_SUBST(RUNTIME_NAME) - -if test "x$JDK_UPDATE_VERSION" != x; then - JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}" -else - JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}" -fi -AC_SUBST(JDK_VERSION) - -if test "x$MILESTONE" != x; then - RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}" -else - RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}" -fi -AC_SUBST(RELEASE) - -if test "x$JDK_BUILD_NUMBER" != x; then - FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}" -else - JDK_BUILD_NUMBER=b00 - BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` - # Avoid [:alnum:] since it depends on the locale. - CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` - USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" -fi -AC_SUBST(FULL_VERSION) -COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` -AC_SUBST(COOKED_BUILD_NUMBER) - -# Test from where we are running configure, in or outside of src root. -if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then - # We are running configure from the src root. - # Create a default ./build/host-variant-debuglevel output root. - CONF_NAME="${HOST_OS}-${HOST_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" - OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" - mkdir -p "$OUTPUT_ROOT" - if test ! -d "$OUTPUT_ROOT"; then - AC_MSG_ERROR([Could not create build directory $OUTPUT_ROOT]) - fi -else - # We are running configure from outside of the src dir. - # Then use the current directory as output dir! - # If configuration is situated in normal build directory, just use the build - # directory name as configuration name, otherwise use the complete path. - CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` - OUTPUT_ROOT="$CURDIR" -fi - -SPACESAFE(OUTPUT_ROOT,[the path to the output root]) - -# Save the arguments given to us -echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments - -# Check if the VS env variables were setup prior to running configure. -# If not, then find vcvarsall.bat and run it automatically, and integrate -# the set env variables into the spec file. -SETUPDEVENV="# No special vars" -if test "x$BUILD_OS" = "xwindows"; then - # If vcvarsall.bat has been run, then VCINSTALLDIR is set. - if test "x$VCINSTALLDIR" != x; then - # No further setup is needed. The build will happen from this kind - # of shell. - SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." - # Make sure to remind you, if you forget to run make from a cygwin bash shell - # that is spawned "bash -l" from a VS command prompt. - CHECK_FOR_VCINSTALLDIR=yes - AC_MSG_CHECKING([if you are running from within a VS command prompt]) - AC_MSG_RESULT([yes]) - else - # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. - if test "x$VS100COMNTOOLS" != x; then - VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` - SEARCH_ROOT="$VS100COMNTOOLS" - else - VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` - SEARCH_ROOT="$PROGRAMFILES" - fi - VCPATH=`dirname "$VARSBAT"` - VCPATH=`cygpath -w "$VCPATH"` - if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then - AC_MSG_CHECKING([if we can find the VS installation]) - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - case "$LEGACY_HOST_CPU1" in - i?86) - VARSBAT_ARCH=x86 - ;; - *) - VARSBAT_ARCH=$LEGACY_HOST_CPU1 - ;; - esac - # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat - cd $OUTPUT_ROOT - bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" - cd $CURDIR - if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then - AC_MSG_CHECKING([if we can extract the needed env variables]) - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not succesfully extract the env variables needed for the VS setup. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - # Now set all paths and other env variables. This will allow the rest of - # the configure script to find and run the compiler in the proper way. - . $OUTPUT_ROOT/localdevenv.sh - AC_MSG_CHECKING([if we can find the VS installation]) - if test "x$VCINSTALLDIR" != x; then - AC_MSG_RESULT([$VCINSTALLDIR]) - else - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not find VS installation. Please install. If you are sure you have installed VS, then please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - CHECK_FOR_VCINSTALLDIR=no - SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" - - AC_MSG_CHECKING([for msvcr100.dll]) - AC_ARG_WITH(msvcr100dll, [AS_HELP_STRING([--with-msvcr100dll], - [copy this msvcr100.dll into the built JDK])]) - if test "x$with_msvcr100dll" != x; then - MSVCR100DLL="$with_msvcr100dll" - else - if test "x$HOST_CPU_BITS" = x64; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` - else - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` - if test "x$MSVCR100DLL" = x; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` - fi - fi - fi - if test "x$MSVCR100DLL" = x; then - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not find msvcr100.dll !]) - fi - AC_MSG_RESULT([$MSVCR100DLL]) - SPACESAFE(MSVCR100DLL,[the path to msvcr100.dll]) - fi -fi -AC_SUBST(SETUPDEVENV) -AC_SUBST(CHECK_FOR_VCINSTALLDIR) -AC_SUBST(MSVCR100DLL) - -# Most of the probed defines are put into config.h -AC_CONFIG_HEADERS([$OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in]) -# The spec.gmk file contains all variables for the make system. -AC_CONFIG_FILES([$OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in]) -# The generated Makefile knows where the spec.gmk is and where the source is. -# You can run make from the OUTPUT_ROOT. If you have only -# one configured host, then you can also run make from the SRC_ROOT, -# since it will go look for a single spec.gmk file. Or perhaps it -# should instead make all configured hosts it can find? -AC_CONFIG_FILES([$OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in]) - -AC_SUBST(SPEC, $OUTPUT_ROOT/spec.gmk) -AC_SUBST(CONF_NAME, $CONF_NAME) -AC_SUBST(OUTPUT_ROOT, $OUTPUT_ROOT) - -# Where are the sources. Any of these can be overridden -# using --with-override-corba and the likes. -LANGTOOLS_TOPDIR="$SRC_ROOT/langtools" -CORBA_TOPDIR="$SRC_ROOT/corba" -JAXP_TOPDIR="$SRC_ROOT/jaxp" -JAXWS_TOPDIR="$SRC_ROOT/jaxws" -HOTSPOT_TOPDIR="$SRC_ROOT/hotspot" -JDK_TOPDIR="$SRC_ROOT/jdk" -AC_SUBST(LANGTOOLS_TOPDIR) -AC_SUBST(CORBA_TOPDIR) -AC_SUBST(JAXP_TOPDIR) -AC_SUBST(JAXWS_TOPDIR) -AC_SUBST(HOTSPOT_TOPDIR) -AC_SUBST(JDK_TOPDIR) +# Setup builddeps, for automatic downloading of tools we need. +# This is needed before we can call BDEPS_CHECK_MODULE, which is done in +# boot-jdk setup, but we need to have basic tools setup first. +BDEPS_CONFIGURE_BUILDDEPS +BDEPS_SCAN_FOR_BUILDDEPS # Check if pkg-config is available. PKG_PROG_PKG_CONFIG -AC_ARG_WITH(builddeps-conf, [AS_HELP_STRING([--with-builddeps-conf], - [use this configuration file for the builddeps])]) +############################################################################### +# +# Determine OpenJDK build and target platforms. +# +############################################################################### -AC_ARG_WITH(builddeps-server, [AS_HELP_STRING([--with-builddeps-server], - [download and use build dependencies from this server url, e.g. --with-builddeps-server=ftp://example.com/dir])]) +PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET +PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION -AC_ARG_WITH(builddeps-dir, [AS_HELP_STRING([--with-builddeps-dir], - [store downloaded build dependencies here @<:@d/localhome/builddeps@:>@])], - [], - [with_builddeps_dir=/localhome/builddeps]) - -AC_ARG_WITH(builddeps-group, [AS_HELP_STRING([--with-builddeps-group], - [chgrp the downloaded build dependencies to this group])]) - -AC_ARG_ENABLE([list-builddeps], [AS_HELP_STRING([--enable-list-builddeps], - [list all build dependencies known to the configure script])], - [LIST_BUILDDEPS="${enableval}"], [LIST_BUILDDEPS='no']) - -if test "x$LIST_BUILDDEPS" = xyes; then - echo - echo List of build dependencies known to the configure script, - echo that can be used in builddeps.conf files: - cat $SRC_ROOT/configure.ac | grep BDEPS_CHECK_MODUL | grep -v configure.ac | cut -f 2 -d ',' | tr -d ' ' | sort - echo - exit 1 -fi - -# If builddeps server or conf file is given. Setup buildeps usage. -BDEPS_SCAN_FOR_BUILDDEPS +# With knowledge of the build platform, setup more basic things. +BASIC_SETUP_PATH_SEP +BASIC_SETUP_SEARCHPATH ############################################################################### # -# Configure the development tool paths and potential sysroot. +# Determine OpenJDK variants, options and version numbers. # -AC_LANG(C++) -DEVKIT= -SYS_ROOT=/ -AC_SUBST(SYS_ROOT) +############################################################################### -# The option used to specify the target .o,.a or .so file. -# When compiling, how to specify the to be created object file. -CC_OUT_OPTION='-o$(SPACE)' -# When linking, how to specify the to be created executable. -EXE_OUT_OPTION='-o$(SPACE)' -# When linking, how to specify the to be created dynamically linkable library. -LD_OUT_OPTION='-o$(SPACE)' -# When archiving, how to specify the to be create static archive for object files. -AR_OUT_OPTION='rcs$(SPACE)' -AC_SUBST(CC_OUT_OPTION) -AC_SUBST(EXE_OUT_OPTION) -AC_SUBST(LD_OUT_OPTION) -AC_SUBST(AR_OUT_OPTION) +# We need build & target for this. +JDKOPT_SETUP_JDK_VARIANT +JDKOPT_SETUP_JVM_VARIANTS +JDKOPT_SETUP_DEBUG_LEVEL +JDKOPT_SETUP_JDK_OPTIONS +JDKOPT_SETUP_JDK_VERSION_NUMBERS -# If --build AND --host is set, then the configure script will find any -# cross compilation tools in the PATH. Cross compilation tools -# follows the cross compilation standard where they are prefixed with ${host}. -# For example the binary i686-sun-solaris2.10-gcc -# will cross compile for i686-sun-solaris2.10 -# If neither of build and host is not set, then build=host and the -# default compiler found in the path will be used. -# Setting only --host, does not seem to be really supported. -# Please set both --build and --host if you want to cross compile. - -DEFINE_CROSS_COMPILE_ARCH="" -HOSTCC="" -HOSTCXX="" -AC_SUBST(DEFINE_CROSS_COMPILE_ARCH) -AC_SUBST(HOST_CC) -AC_SUBST(HOST_CXX) -AC_MSG_CHECKING([if this is a cross compile]) -if test "x$build_var" != "x$host_var"; then - AC_MSG_RESULT([yes, from $build_var to $host_var]) - # We have detected a cross compile! - DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_HOST_CPU1" - # Now we to find a C/C++ compiler that can build executables for the build - # platform. We can't use the AC_PROG_CC macro, since it can only be used - # once. - AC_PATH_PROGS(HOSTCC, [cl cc gcc]) - WHICHCMD(HOSTCC) - AC_PATH_PROGS(HOSTCXX, [cl CC g++]) - WHICHCMD(HOSTCXX) - # Building for the build platform should be easy. Therefore - # we do not need any linkers or assemblers etc. -else - AC_MSG_RESULT([no]) -fi - -# You can force the sys-root if the sys-root encoded into the cross compiler tools -# is not correct. -AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root], - [pass this sys-root to the compilers and linker (useful if the sys-root encoded in - the cross compiler tools is incorrect)])]) - -if test "x$with_sys_root" != x; then - SYS_ROOT=$with_sys_root -fi - -# If a devkit is found on the builddeps server, then prepend its path to the -# PATH variable. If there are cross compilers available in the devkit, these -# will be found by AC_PROG_CC et al. -BDEPS_CHECK_MODULE(DEVKIT, devkit, xxx, - [# Found devkit - PATH="$DEVKIT/bin:$PATH" - SYS_ROOT="$DEVKIT/${rewritten_host}/sys-root" - if test "x$x_includes" = "xNONE"; then - x_includes="$SYS_ROOT/usr/include/X11" - fi - if test "x$x_libraries" = "xNONE"; then - x_libraries="$SYS_ROOT/usr/lib" - fi - ], - []) - -if test "x$SYS_ROOT" != "x/" ; then - CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" - CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" - OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" - OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" - CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" - LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" -fi - -# Store the CFLAGS etal passed to the configure script. -ORG_CFLAGS="$CFLAGS" -ORG_CXXFLAGS="$CXXFLAGS" -ORG_OBJCFLAGS="$OBJCFLAGS" - -prepare_help_system - -# gcc is almost always present, but on Windows we -# prefer cl.exe and on Solaris we prefer CC. -# Thus test for them in this order. -AC_PROG_CC([cl cc gcc]) -if test "x$CC" = x; then - help_on_build_dependency devkit - AC_MSG_ERROR([Could not find a compiler. $HELP_MSG]) -fi -if test "x$CC" = xcc && test "x$BUILD_OS" = xmacosx; then - # Do not use cc on MacOSX use gcc instead. - CC="gcc" -fi -WHICHCMD(CC) - -AC_PROG_CXX([cl CC g++]) -if test "x$CXX" = xCC && test "x$BUILD_OS" = xmacosx; then - # The found CC, even though it seems to be a g++ derivate, cannot compile - # c++ code. Override. - CXX="g++" -fi -WHICHCMD(CXX) - -if test "x$CXX" = x || test "x$CC" = x; then - help_on_build_dependency devkit - AC_MSG_ERROR([Could not find the needed compilers! $HELP_MSG ]) -fi - -if test "x$BUILD_OS" != xwindows; then - AC_PROG_OBJC - WHICHCMD(OBJC) -else - OBJC= -fi - -# Restore the flags to the user specified values. -# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" -CFLAGS="$ORG_CFLAGS" -CXXFLAGS="$ORG_CXXFLAGS" -OBJCFLAGS="$ORG_OBJCFLAGS" - -# If we are not cross compiling, use the same compilers for -# building the build platform executables. -if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then - HOSTCC="$CC" - HOSTCXX="$CXX" -fi - -AC_CHECK_TOOL(LD, ld) -WHICHCMD(LD) -LD="$CC" -LDEXE="$CC" -LDCXX="$CXX" -LDEXECXX="$CXX" -# LDEXE is the linker to use, when creating executables. -AC_SUBST(LDEXE) -# Linking C++ libraries. -AC_SUBST(LDCXX) -# Linking C++ executables. -AC_SUBST(LDEXECXX) - -AC_CHECK_TOOL(AR, ar) -WHICHCMD(AR) -if test "x$BUILD_OS" = xmacosx; then - ARFLAGS="-r" -else - ARFLAGS="" -fi -AC_SUBST(ARFLAGS) - -COMPILER_NAME=gcc -COMPILER_TYPE=CC -AS_IF([test "x$BUILD_OS" = xwindows], [ - # For now, assume that we are always compiling using cl.exe. - CC_OUT_OPTION=-Fo - EXE_OUT_OPTION=-out: - LD_OUT_OPTION=-out: - AR_OUT_OPTION=-out: - # On Windows, reject /usr/bin/link, which is a cygwin - # program for something completely different. - AC_CHECK_PROG([WINLD], [link],[link],,, [/usr/bin/link]) - # Since we must ignore the first found link, WINLD will contain - # the full path to the link.exe program. - WHICHCMD_SPACESAFE([WINLD]) - LD="$WINLD" - LDEXE="$WINLD" - LDCXX="$WINLD" - LDEXECXX="$WINLD" - - AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt]) - WHICHCMD_SPACESAFE([MT]) - # The resource compiler - AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc]) - WHICHCMD_SPACESAFE([RC]) - - RC_FLAGS="-nologo /l 0x409 /r" - AS_IF([test "x$VARIANT" = xOPT], [ - RC_FLAGS="$RC_FLAGS -d NDEBUG" - ]) - JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION - AS_IF([test "x$JDK_UPDATE_VERSION" = x], [ - JDK_UPDATE_VERSION_NOTNULL=0 - ]) - RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" - RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" - - # lib.exe is used to create static libraries. - AC_CHECK_PROG([WINAR], [lib],[lib],,,) - WHICHCMD_SPACESAFE([WINAR]) - AR="$WINAR" - ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" - - AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,) - WHICHCMD_SPACESAFE([DUMPBIN]) - - COMPILER_TYPE=CL - CCXXFLAGS="$CCXXFLAGS -nologo" - LDFLAGS="$LDFLAGS -nologo -opt:ref -incremental:no" - if test "x$LEGACY_HOST_CPU1" = xi586; then - LDFLAGS="$LDFLAGS -safeseh" - fi - # TODO: make -debug optional "--disable-full-debug-symbols" - LDFLAGS="$LDFLAGS -debug" -]) -AC_SUBST(RC_FLAGS) -AC_SUBST(COMPILER_TYPE) - -AC_PROG_CPP -WHICHCMD(CPP) - -AC_PROG_CXXCPP -WHICHCMD(CXXCPP) - -# Find the right assembler. -if test "x$BUILD_OS" = xsolaris; then - AC_PATH_PROG(AS, as) - WHICHCMD(AS) - ASFLAGS=" " -else - AS="$CC -c" - ASFLAGS=" " -fi -AC_SUBST(AS) -AC_SUBST(ASFLAGS) - -if test "x$HOST_CPU_BITS" = x32 && test "x$HOST_OS" = xmacosx; then - # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. - # While waiting for a better solution, the current workaround is to use -mstackrealign. - CFLAGS="$CFLAGS -mstackrealign" - AC_MSG_CHECKING([if 32-bit compiler supports -mstackrealign]) - AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], - [ - AC_MSG_RESULT([yes]) - ], - [ - AC_MSG_RESULT([no]) - AC_MSG_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.]) - ]) -fi - -if test "x$BUILD_OS" = xsolaris; then - AC_PATH_PROG(NM, nm) - WHICHCMD(NM) - AC_PATH_PROG(STRIP, strip) - WHICHCMD(STRIP) - AC_PATH_PROG(MCS, mcs) - WHICHCMD(MCS) -else - AC_CHECK_TOOL(NM, nm) - WHICHCMD(NM) - AC_CHECK_TOOL(STRIP, strip) - WHICHCMD(STRIP) -fi - -# When using cygwin, we need a wrapper binary that renames -# /cygdrive/c/ arguments into c:/ arguments and peeks into -# @files and rewrites these too! This wrapper binary is -# called uncygdrive.exe. -UNCYGDRIVE= -if test "x$BUILD_OS" = xwindows; then - AC_MSG_CHECKING([if uncygdrive can be created]) - UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` - rm -f $OUTPUT_ROOT/uncygdrive* - UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` - cd $OUTPUT_ROOT - $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 - cd $CURDIR - - if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then - AC_MSG_RESULT([no]) - cat $OUTPUT_ROOT/uncygdrive1.log - AC_MSG_ERROR([Could not create $OUTPUT_ROOT/uncygdrive.exe]) - fi - AC_MSG_RESULT([$UNCYGDRIVE]) - AC_MSG_CHECKING([if uncygdrive.exe works]) - cd $OUTPUT_ROOT - $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 - cd $CURDIR - if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then - AC_MSG_RESULT([no]) - cat $OUTPUT_ROOT/uncygdrive2.log - AC_MSG_ERROR([Uncygdrive did not work!]) - fi - AC_MSG_RESULT([yes]) - rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj -fi - -AC_SUBST(UNCYGDRIVE) - -TESTFOR_PROG_CCACHE - -# Used on GNU/Linux systems, can be empty... -#AC_PATH_PROG(ELFDUMP, elfdump) - -# Setup default logging of stdout and stderr to build.log in the output root. -BUILD_LOG='$(OUTPUT_ROOT)/build.log' -BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' -AC_SUBST(BUILD_LOG) -AC_SUBST(BUILD_LOG_WRAPPER) +# To properly create a configuration name, we need to have the OpenJDK target +# and options (variants and debug level) parsed. +BASIC_SETUP_OUTPUT_DIR ############################################################################### # -# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. -# (The JVM can use 32 or 64 bit Java pointers but that decision -# is made at runtime.) +# Setup BootJDK, used to bootstrap the build. # -AC_LANG_PUSH(C++) -OLD_CXXFLAGS="$CXXFLAGS" -if test "x$HOST_OS" = xsolaris && test "x$with_data_model" != x; then - CXXFLAGS="-m{$with_data_model} $CXXFLAGS" -fi -AC_CHECK_SIZEOF([int *], [1111]) -CXXFLAGS="$OLD_CXXFLAGS" -AC_LANG_POP(C++) +############################################################################### -if test "x$ac_cv_sizeof_int_p" = x0; then - # The test failed, lets pick the assumed value. - ARCH_DATA_MODEL=$HOST_CPU_BITS -else - ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` -fi - -if test "x$ARCH_DATA_MODEL" = x64; then - A_LP64="LP64:=" - ADD_LP64="-D_LP64=1" -fi -AC_MSG_CHECKING([for host address size]) -AC_MSG_RESULT([$ARCH_DATA_MODEL bits]) -AC_SUBST(LP64,$A_LP64) -AC_SUBST(ARCH_DATA_MODEL) - -if test "x$ARCH_DATA_MODEL" != "x$HOST_CPU_BITS"; then - AC_MSG_ERROR([The tested number of bits in the host ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the host ($HOST_CPU_BITS)]) -fi +BOOTJDK_SETUP_BOOT_JDK +BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS ############################################################################### # +# Configure the sources to use. We can add or override individual directories. +# +############################################################################### + +SRCDIRS_SETUP_TOPDIRS +SRCDIRS_SETUP_ALTERNATIVE_TOPDIRS +SRCDIRS_SETUP_OUTPUT_DIRS + +############################################################################### +# +# Setup the toolchain (compilers etc), i.e. the tools that need to be +# cross-compilation aware. +# +############################################################################### + +TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS +TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV +# Locate the actual tools +TOOLCHAIN_SETUP_PATHS + +# FIXME: Currently we must test this after paths but before flags. Fix! + +# And we can test some aspects on the target using configure macros. +PLATFORM_TEST_OPENJDK_TARGET_BITS +PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS + +# Configure flags for the tools +TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_LIBS +TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION +TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK + +# After we have toolchain, we can compile the uncygdrive helper +BASIC_COMPILE_UNCYGDRIVE + + +# Setup debug symbols (need objcopy from the toolchain for that) +JDKOPT_SETUP_DEBUG_SYMBOLS + +############################################################################### +# +# Check dependencies for external and internal libraries. +# +############################################################################### + +LIB_SETUP_INIT +LIB_SETUP_X11 +LIB_SETUP_CUPS +LIB_SETUP_FREETYPE +LIB_SETUP_ALSA +LIB_SETUP_MISC_LIBS +LIB_SETUP_STATIC_LINK_LIBSTDCPP + +############################################################################### +# +# We need to do some final tweaking, when everything else is done. +# +############################################################################### + +JDKOPT_SETUP_BUILD_TWEAKS + +############################################################################### +# +# Configure parts of the build that only affect the build performance, +# not the result. +# +############################################################################### + +BPERF_SETUP_BUILD_CORES +BPERF_SETUP_BUILD_MEMORY + +# Setup smart javac (after cores and memory have been setup) +BPERF_SETUP_SMART_JAVAC + # Can the C/C++ compiler use precompiled headers? -# -AC_ARG_ENABLE([precompiled-headers], [AS_HELP_STRING([--disable-precompiled-headers], - [use precompiled headers when compiling C++ @<:@enabled@:>@])], - [ENABLE_PRECOMPH=${enable_precompiled-headers}], [ENABLE_PRECOMPH=yes]) +BPERF_SETUP_PRECOMPILED_HEADERS -USE_PRECOMPILED_HEADER=1 -if test "x$ENABLE_PRECOMPH" = xno; then - USE_PRECOMPILED_HEADER=0 -fi - -if test "x$ENABLE_PRECOMPH" = xyes; then - # Check that the compiler actually supports precomp headers. - if test "x$GCC" = xyes; then - AC_MSG_CHECKING([that precompiled headers work]) - echo "int alfa();" > conftest.h - $CXX -x c++-header conftest.h -o conftest.hpp.gch - if test ! -f conftest.hpp.gch; then - echo Precompiled header is not working! - USE_PRECOMPILED_HEADER=0 - AC_MSG_RESULT([no]) - else - AC_MSG_RESULT([yes]) - fi - rm -f conftest.h - fi -fi - -AC_SUBST(USE_PRECOMPILED_HEADER) +# Setup use of ccache, if available +BPERF_SETUP_CCACHE ############################################################################### # -# How to compile shared libraries. +# And now the finish... # - -if test "x$GCC" = xyes; then - COMPILER_NAME=gcc - PICFLAG="-fPIC" - LIBRARY_PREFIX=lib - SHARED_LIBRARY='lib$1.so' - STATIC_LIBRARY='lib$1.a' - SHARED_LIBRARY_FLAGS="-shared" - SHARED_LIBRARY_SUFFIX='.so' - STATIC_LIBRARY_SUFFIX='.a' - OBJ_SUFFIX='.o' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1' - SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$1' - C_FLAG_REORDER='' - CXX_FLAG_REORDER='' - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1' - LD="$CC" - LDEXE="$CC" - LDCXX="$CXX" - LDEXECXX="$CXX" - # TODO: for embedded set --strip-unneeded - POST_STRIP_CMD="$STRIP -g" - - # Linking is different on MacOSX - if test "x$BUILD_OS" = xmacosx; then - # Might change in the future to clang. - COMPILER_NAME=gcc - SHARED_LIBRARY='lib$1.dylib' - SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" - SHARED_LIBRARY_SUFFIX='.dylib' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' - SET_SHARED_LIBRARY_MAPFILE='' - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' - POST_STRIP_CMD="$STRIP -S" - fi -else - if test "x$BUILD_OS" = xsolaris; then - # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler - COMPILER_NAME=ossc - PICFLAG="-KPIC" - LIBRARY_PREFIX=lib - SHARED_LIBRARY='lib$1.so' - STATIC_LIBRARY='lib$1.a' - SHARED_LIBRARY_FLAGS="-G" - SHARED_LIBRARY_SUFFIX='.so' - STATIC_LIBRARY_SUFFIX='.a' - OBJ_SUFFIX='.o' - EXE_SUFFIX='' - SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='-M $1' - C_FLAG_REORDER='-xF' - CXX_FLAG_REORDER='-xF' - SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1' - CFLAGS_JDKLIB_EXTRA='-xstrconst -D__solaris__' - POST_STRIP_CMD="$STRIP -x" - POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" - fi - if test "x$BUILD_OS" = xwindows; then - # If it is not gcc, then assume it is the MS Visual Studio compiler - COMPILER_NAME=cl - PICFLAG="" - LIBRARY_PREFIX= - SHARED_LIBRARY='$1.dll' - STATIC_LIBRARY='$1.lib' - SHARED_LIBRARY_FLAGS="-LD" - SHARED_LIBRARY_SUFFIX='.dll' - STATIC_LIBRARY_SUFFIX='.lib' - OBJ_SUFFIX='.obj' - EXE_SUFFIX='.exe' - SET_SHARED_LIBRARY_NAME='' - SET_SHARED_LIBRARY_MAPFILE='' - SET_SHARED_LIBRARY_ORIGIN='' - fi -fi - -AC_SUBST(OBJ_SUFFIX) -AC_SUBST(SHARED_LIBRARY) -AC_SUBST(STATIC_LIBRARY) -AC_SUBST(LIBRARY_PREFIX) -AC_SUBST(SHARED_LIBRARY_SUFFIX) -AC_SUBST(STATIC_LIBRARY_SUFFIX) -AC_SUBST(EXE_SUFFIX) -AC_SUBST(SHARED_LIBRARY_FLAGS) -AC_SUBST(SET_SHARED_LIBRARY_NAME) -AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) -AC_SUBST(C_FLAG_REORDER) -AC_SUBST(CXX_FLAG_REORDER) -AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) -AC_SUBST(POST_STRIP_CMD) -AC_SUBST(POST_MCS_CMD) - -# The (cross) compiler is now configured, we can now test capabilities -# of the host platform. - -############################################################################### -# -# Is the host little of big endian? -# -AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="universal"]) - -if test "x$ENDIAN" = xuniversal; then - AC_MSG_ERROR([It seems like someone needs to decide how we are to deal with universal binaries on the MacOSX?]) -fi -if test "x$ENDIAN" = xunknown; then - ENDIAN="$HOST_CPU_ENDIAN" -fi -if test "x$ENDIAN" != "x$HOST_CPU_ENDIAN"; then - AC_MSG_WARN([The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)]) - ENDIAN="$HOST_CPU_ENDIAN" -fi -AC_SUBST(ENDIAN) - -############################################################################### -# -# We need a Boot JDK to bootstrap the build. -# -BOOT_JDK_FOUND=no -AC_ARG_WITH(boot-jdk, [AS_HELP_STRING([--with-boot-jdk], - [path to Boot JDK (used to bootstrap build) @<:@probed@:>@])]) - -if test "x$with_boot_jdk" != x; then - BOOT_JDK=$with_boot_jdk - BOOT_JDK_FOUND=yes -fi -if test "x$BOOT_JDK_FOUND" = xno; then - BDEPS_CHECK_MODULE(BOOT_JDK, boot-jdk, xxx, [BOOT_JDK_FOUND=yes], [BOOT_JDK_FOUND=no]) -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - if test "x$JAVA_HOME" != x; then - if test ! -d "$JAVA_HOME"; then - AC_MSG_ERROR([Your JAVA_HOME points to a non-existing directory!]) - fi - # Aha, the user has set a JAVA_HOME - # let us use that as the Boot JDK. - BOOT_JDK="$JAVA_HOME" - BOOT_JDK_FOUND=yes - # To be on the safe side, lets check that it is a JDK. - if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then - JAVAC="$BOOT_JDK/bin/javac" - JAVA="$BOOT_JDK/bin/java" - BOOT_JDK_FOUND=yes - else - AC_MSG_ERROR([Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=[$]JAVA_HOME]) - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - AC_PATH_PROG(JAVAC_CHECK, javac) - AC_PATH_PROG(JAVA_CHECK, java) - BINARY="$JAVAC_CHECK" - if test "x$JAVAC_CHECK" = x; then - BINARY="$JAVA_CHECK" - fi - if test "x$BINARY" != x; then - # So there is a java(c) binary, it might be part of a JDK. - # Lets find the JDK/JRE directory by following symbolic links. - # Linux/GNU systems often have links from /usr/bin/java to - # /etc/alternatives/java to the real JDK binary. - WHICHCMD_SPACESAFE(BINARY,[path to javac]) - REMOVE_SYMBOLIC_LINKS(BINARY) - BOOT_JDK=`dirname $BINARY` - BOOT_JDK=`cd $BOOT_JDK/..; pwd` - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - # Try the MacOSX way. - if test -x /usr/libexec/java_home; then - BOOT_JDK=`/usr/libexec/java_home` - if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then - JAVAC=$BOOT_JDK/bin/javac - JAVA=$BOOT_JDK/bin/java - BOOT_JDK_FOUND=yes - fi - fi -fi - -if test "x$BOOT_JDK_FOUND" = xno; then - AC_PATH_PROG(JAVA_CHECK, java) - if test "x$JAVA_CHECK" != x; then - # There is a java in the path. But apparently we have not found a javac - # in the path, since that would have been tested earlier. - if test "x$HOST_OS" = xwindows; then - # Now if this is a windows platform. The default installation of a JDK - # actually puts the JRE in the path and keeps the JDK out of the path! - # Go look in the default installation location. - BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1` - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=yes - fi - fi - if test "x$BOOT_JDK_FOUND" = xno; then - help_on_build_dependency openjdk - AC_MSG_ERROR([Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG]) - fi - else - help_on_build_dependency openjdk - AC_MSG_ERROR([Could not find a JDK. $HELP_MSG]) - fi -fi - -WIN_FIX_PATH(BOOT_JDK) - -# Now see if we can find the rt.jar, or its nearest equivalent. -BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar" -SPACESAFE(BOOT_RTJAR,[the path to the Boot JDK rt.jar (or nearest equivalent)]) - -BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar" -SPACESAFE(BOOT_TOOLSJAR,[the path to the Boot JDK tools.jar (or nearest equivalent)]) - -if test ! -f $BOOT_RTJAR; then - # On MacOSX it is called classes.jar - BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar - if test ! -f $BOOT_RTJAR; then - AC_MSG_ERROR([Cannot find the rt.jar or its equivalent!]) - fi - # Remove the .. - BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" - # The tools.jar is part of classes.jar - BOOT_TOOLSJAR="$BOOT_RTJAR" -fi - -AC_SUBST(BOOT_JDK) -AC_SUBST(BOOT_RTJAR) -AC_SUBST(BOOT_TOOLSJAR) -AC_MSG_CHECKING([for Boot JDK]) -AC_MSG_RESULT([$BOOT_JDK]) -AC_MSG_CHECKING([for Boot rt.jar]) -AC_MSG_RESULT([$BOOT_RTJAR]) -AC_MSG_CHECKING([for Boot tools.jar]) -AC_MSG_RESULT([$BOOT_TOOLSJAR]) - -# Use the java tool from the Boot JDK. -AC_MSG_CHECKING([for java in Boot JDK]) -JAVA=$BOOT_JDK/bin/java -if test ! -x $JAVA; then - AC_MSG_ERROR([Could not find a working java]) -fi -BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` -AC_MSG_RESULT([yes $BOOT_JDK_VERSION]) -AC_SUBST(JAVA) - -# Extra M4 quote needed to protect [] in grep expression. -[FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'`] -if test "x$FOUND_VERSION_78" = x; then - help_on_build_dependency openjdk - AC_MSG_ERROR([Your boot-jdk must be version 7 or 8. $HELP_MSG]) -fi - -# When compiling code to be executed by the Boot JDK, force jdk7 compatibility. -BOOT_JDK_SOURCETARGET="-source 7 -target 7" -AC_SUBST(BOOT_JDK_SOURCETARGET) - -# Use the javac tool from the Boot JDK. -AC_MSG_CHECKING([for javac in Boot JDK]) -JAVAC=$BOOT_JDK/bin/javac -if test ! -x $JAVAC; then - AC_MSG_ERROR([Could not find a working javac]) -fi -AC_MSG_RESULT(yes) -AC_SUBST(JAVAC) -AC_SUBST(JAVAC_FLAGS) - -# Use the javah tool from the Boot JDK. -AC_MSG_CHECKING([for javah in Boot JDK]) -JAVAH=$BOOT_JDK/bin/javah -if test ! -x $JAVAH; then - AC_MSG_ERROR([Could not find a working javah]) -fi -AC_MSG_RESULT(yes) -AC_SUBST(JAVAH) - -# Use the jar tool from the Boot JDK. -AC_MSG_CHECKING([for jar in Boot JDK]) -JAR=$BOOT_JDK/bin/jar -if test ! -x $JAR; then - AC_MSG_ERROR([Could not find a working jar]) -fi -AC_SUBST(JAR) -AC_MSG_RESULT(yes) - -# Use the rmic tool from the Boot JDK. -AC_MSG_CHECKING([for rmic in Boot JDK]) -RMIC=$BOOT_JDK/bin/rmic -if test ! -x $RMIC; then - AC_MSG_ERROR([Could not find a working rmic]) -fi -AC_SUBST(RMIC) -AC_MSG_RESULT(yes) - -# Use the native2ascii tool from the Boot JDK. -AC_MSG_CHECKING([for native2ascii in Boot JDK]) -NATIVE2ASCII=$BOOT_JDK/bin/native2ascii -if test ! -x $NATIVE2ASCII; then - AC_MSG_ERROR([Could not find a working native2ascii]) -fi -AC_MSG_RESULT(yes) -AC_SUBST(NATIVE2ASCII) - -############################################################################### -# -# Pickup additional source for a component from outside of the source root -# or override source for a component. -# -AC_ARG_WITH(add-source-root, [AS_HELP_STRING([--with-add-source-root], - [for each and every source directory, look in this additional source root for - the same directory; if it exists and have files in it, include it in the build])]) - -AC_ARG_WITH(override-source-root, [AS_HELP_STRING([--with-override-source-root], - [for each and every source directory, look in this override source root for - the same directory; if it exists, use that directory instead and - ignore the directory in the original source root])]) - -AC_ARG_WITH(adds-and-overrides, [AS_HELP_STRING([--with-adds-and-overrides], - [use the subdirs 'adds' and 'overrides' in the specified directory as - add-source-root and override-source-root])]) - -if test "x$with_adds_and_overrides" != x; then - with_add_source_root="$with_adds_and_overrides/adds" - with_override_source_root="$with_adds_and_overrides/overrides" -fi - -if test "x$with_add_source_root" != x; then - if ! test -d $with_add_source_root; then - AC_MSG_ERROR([Trying to use a non-existant add-source-root $with_add_source_root]) - fi - CURDIR="$PWD" - cd "$with_add_source_root" - ADD_SRC_ROOT="`pwd`" - cd "$CURDIR" - # Verify that the addon source root does not have any root makefiles. - # If it does, then it is usually an error, prevent this. - if test -f $with_add_source_root/langtools/makefiles/Makefile || \ - test -f $with_add_source_root/langtools/make/Makefile; then - AC_MSG_ERROR([Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/corba/makefiles/Makefile || \ - test -f $with_add_source_root/corba/make/Makefile; then - AC_MSG_ERROR([Your add source root seems to contain a full corba repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ - test -f $with_add_source_root/jaxp/make/Makefile; then - AC_MSG_ERROR([Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ - test -f $with_add_source_root/jaxws/make/Makefile; then - AC_MSG_ERROR([Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ - test -f $with_add_source_root/hotspot/make/Makefile; then - AC_MSG_ERROR([Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources.]) - fi - if test -f $with_add_source_root/jdk/makefiles/Makefile || \ - test -f $with_add_source_root/jdk/make/Makefile; then - AC_MSG_ERROR([Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources.]) - fi -fi -AC_SUBST(ADD_SRC_ROOT) - -if test "x$with_override_source_root" != x; then - if ! test -d $with_override_source_root; then - AC_MSG_ERROR([Trying to use a non-existant override-source-root $with_override_source_root]) - fi - CURDIR="$PWD" - cd "$with_override_source_root" - OVERRIDE_SRC_ROOT="`pwd`" - cd "$CURDIR" - if test -f $with_override_source_root/langtools/makefiles/Makefile || \ - test -f $with_override_source_root/langtools/make/Makefile; then - AC_MSG_ERROR([Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/corba/makefiles/Makefile || \ - test -f $with_override_source_root/corba/make/Makefile; then - AC_MSG_ERROR([Your override source root seems to contain a full corba repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ - test -f $with_override_source_root/jaxp/make/Makefile; then - AC_MSG_ERROR([Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ - test -f $with_override_source_root/jaxws/make/Makefile; then - AC_MSG_ERROR([Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ - test -f $with_override_source_root/hotspot/make/Makefile; then - AC_MSG_ERROR([Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override.]) - fi - if test -f $with_override_source_root/jdk/makefiles/Makefile || \ - test -f $with_override_source_root/jdk/make/Makefile; then - AC_MSG_ERROR([Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override.]) - fi -fi -AC_SUBST(OVERRIDE_SRC_ROOT) - -############################################################################### -# -# Override a repo completely, this is used for example when you have 3 small -# development sandboxes of the langtools sources and want to avoid having 3 full -# OpenJDK sources checked out on disk. -# -# Assuming that the 3 langtools sandboxes are located here: -# /home/fredrik/sandbox1/langtools -# /home/fredrik/sandbox2/langtools -# /home/fredrik/sandbox3/langtools -# -# From the source root you create build subdirs manually: -# mkdir -p build1 build2 build3 -# in each build directory run: -# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make) -# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make) -# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make) -# - -AC_ARG_WITH(override-langtools, [AS_HELP_STRING([--with-override-langtools], - [use this langtools dir for the build])]) - -AC_ARG_WITH(override-corba, [AS_HELP_STRING([--with-override-corba], - [use this corba dir for the build])]) - -AC_ARG_WITH(override-jaxp, [AS_HELP_STRING([--with-override-jaxp], - [use this jaxp dir for the build])]) - -AC_ARG_WITH(override-jaxws, [AS_HELP_STRING([--with-override-jaxws], - [use this jaxws dir for the build])]) - -AC_ARG_WITH(override-hotspot, [AS_HELP_STRING([--with-override-hotspot], - [use this hotspot dir for the build])]) - -AC_ARG_WITH(override-jdk, [AS_HELP_STRING([--with-override-jdk], - [use this jdk dir for the build])]) - -if test "x$with_override_langtools" != x; then - CURDIR="$PWD" - cd "$with_override_langtools" - LANGTOOLS_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then - AC_MSG_ERROR([You have to override langtools with a full langtools repo!]) - fi - AC_MSG_CHECKING([if langtools should be overridden]) - AC_MSG_RESULT([yes with $LANGTOOLS_TOPDIR]) -fi -if test "x$with_override_corba" != x; then - CURDIR="$PWD" - cd "$with_override_corba" - CORBA_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then - AC_MSG_ERROR([You have to override corba with a full corba repo!]) - fi - AC_MSG_CHECKING([if corba should be overridden]) - AC_MSG_RESULT([yes with $CORBA_TOPDIR]) -fi -if test "x$with_override_jaxp" != x; then - CURDIR="$PWD" - cd "$with_override_jaxp" - JAXP_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then - AC_MSG_ERROR([You have to override jaxp with a full jaxp repo!]) - fi - AC_MSG_CHECKING([if jaxp should be overridden]) - AC_MSG_RESULT([yes with $JAXP_TOPDIR]) -fi -if test "x$with_override_jaxws" != x; then - CURDIR="$PWD" - cd "$with_override_jaxws" - JAXWS_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then - AC_MSG_ERROR([You have to override jaxws with a full jaxws repo!]) - fi - AC_MSG_CHECKING([if jaxws should be overridden]) - AC_MSG_RESULT([yes with $JAXWS_TOPDIR]) -fi -if test "x$with_override_hotspot" != x; then - CURDIR="$PWD" - cd "$with_override_hotspot" - HOTSPOT_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ - ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then - AC_MSG_ERROR([You have to override hotspot with a full hotspot repo!]) - fi - AC_MSG_CHECKING([if hotspot should be overridden]) - AC_MSG_RESULT([yes with $HOTSPOT_TOPDIR]) -fi -if test "x$with_override_jdk" != x; then - CURDIR="$PWD" - cd "$with_override_jdk" - JDK_TOPDIR="`pwd`" - cd "$CURDIR" - if ! test -f $JDK_TOPDIR/makefiles/Makefile; then - AC_MSG_ERROR([You have to override JDK with a full JDK repo!]) - fi - AC_MSG_CHECKING([if JDK should be overridden]) - AC_MSG_RESULT([yes with $JDK_TOPDIR]) -fi - -############################################################################### -# -# Specify options for anything that is run with the Boot JDK. -# -AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs], - [specify JVM arguments to be passed to all invocations of the Boot JDK, overriding the default values, - e.g --with-boot-jdk-jvmargs="-Xmx8G -enableassertions"])]) - -if test "x$with_boot_jdk_jvmargs" = x; then - # Not all JVM:s accept the same arguments on the command line. - # OpenJDK specific increase in thread stack for JDK build, - # well more specifically, when running javac. - if test "x$BUILD_NUM_BITS" = x32; then - STACK_SIZE=768 - else - # Running Javac on a JVM on a 64-bit machine, the stack takes more space - # since 64-bit pointers are pushed on the stach. Apparently, we need - # to increase the stack space when javacing the JDK.... - STACK_SIZE=1536 - fi - - # Minimum amount of heap memory. - ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs,[$JAVA]) - if test "x$HOST_OS" = "xmacosx"; then - # Why does macosx need more heap? Its the huge JDK batch. - ADD_JVM_ARG_IF_OK([-Xmx1600M],boot_jdk_jvmargs,[$JAVA]) - else - ADD_JVM_ARG_IF_OK([-Xmx1100M],boot_jdk_jvmargs,[$JAVA]) - fi - # When is adding -client something that speeds up the JVM? - # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA]) - ADD_JVM_ARG_IF_OK([-XX:PermSize=32m],boot_jdk_jvmargs,[$JAVA]) - ADD_JVM_ARG_IF_OK([-XX:MaxPermSize=160m],boot_jdk_jvmargs,[$JAVA]) - ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs,[$JAVA]) - # Disable special log output when a debug build is used as Boot JDK... - ADD_JVM_ARG_IF_OK([-XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput],boot_jdk_jvmargs,[$JAVA]) -fi - -AC_SUBST(BOOT_JDK_JVMARGS, $boot_jdk_jvmargs) - -AC_ARG_WITH(server-java, [AS_HELP_STRING([--with-server-java], - [use this java binary for running the javac background server and other long running java tasks in the build process, - e.g. ---with-server-java="/opt/jrockit/bin/java -server"])]) - -if test "x$with_server_java" != x; then - SERVER_JAVA="$with_server_java" - FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" = x; then - AC_MSG_ERROR([Could not execute server java: $SERVER_JAVA]) - fi -else - SERVER_JAVA="" - # Hotspot specific options. - ADD_JVM_ARG_IF_OK([-XX:+UseParallelOldGC],SERVER_JAVA,[$JAVA]) - ADD_JVM_ARG_IF_OK([-verbosegc],SERVER_JAVA,[$JAVA]) - # JRockit specific options. - ADD_JVM_ARG_IF_OK([-Xverbose:gc],SERVER_JAVA,[$JAVA]) - SERVER_JAVA="$JAVA $SERVER_JAVA" -fi -AC_SUBST(SERVER_JAVA) - -AC_MSG_CHECKING([whether to use shared server for javac]) -AC_ARG_ENABLE([javac-server], [AS_HELP_STRING([--enable-javac-server], - [enable the shared javac server during the build process @<:@disabled@:>@])], - [ENABLE_JAVAC_SERVER="${enableval}"], [ENABLE_JAVAC_SERVER='no']) -AC_MSG_RESULT([$ENABLE_JAVAC_SERVER]) -if test "x$ENABLE_JAVAC_SERVER" = xyes; then - JAVAC_USE_REMOTE=true - JAVAC_SERVERS="$OUTPUT_ROOT/javacservers" -else - JAVAC_USE_REMOTE=false - JAVAC_SERVERS= -fi -AC_SUBST(JAVAC_USE_REMOTE) -AC_SUBST(JAVAC_SERVERS) - -AC_ARG_WITH(javac-server-cores, [AS_HELP_STRING([--with-javac-server-cores], - [use at most this number of concurrent threads on the javac server @<:@probed@:>@])]) -if test "x$with_javac_server_cores" != x; then - JAVAC_SERVER_CORES="$with_javac_server_cores" -else - if test "$NUM_CORES" -gt 16; then - # We set this arbitrary limit because we want to limit the heap - # size of the javac server. - # In the future we will make the javac compilers in the server - # share more and more state, thus enabling us to use more and - # more concurrent threads in the server. - JAVAC_SERVER_CORES="16" - else - JAVAC_SERVER_CORES="$NUM_CORES" - fi - - if test "$MEMORY_SIZE" -gt "17000"; then - MAX_HEAP_MEM=10000 - ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xms10G -Xmx10G],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn2G],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "10000"; then - MAX_HEAP_MEM=6000 - ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xms6G -Xmx6G],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn1G],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "5000"; then - MAX_HEAP_MEM=3000 - ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xms1G -Xmx3G],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "3800"; then - MAX_HEAP_MEM=2500 - ADD_JVM_ARG_IF_OK([-Xms1G -Xmx2500M],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "1900"; then - MAX_HEAP_MEM=1200 - ADD_JVM_ARG_IF_OK([-Xms700M -Xmx1200M],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA]) - elif test "$MEMORY_SIZE" -gt "1000"; then - MAX_HEAP_MEM=900 - ADD_JVM_ARG_IF_OK([-Xms400M -Xmx900M],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA]) - else - MAX_HEAP_MEM=512 - ADD_JVM_ARG_IF_OK([-Xms256M -Xmx512M],SERVER_JAVA,[$SERVER_JAVA]) - ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA]) - fi - - MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501` - if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then - AC_MSG_CHECKING([if number of server cores must be reduced]) - JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP" - AC_MSG_RESULT([yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB]) - fi -fi -AC_SUBST(JAVAC_SERVER_CORES) - -AC_MSG_CHECKING([whether to track dependencies between Java packages]) -AC_ARG_ENABLE([javac-deps], [AS_HELP_STRING([--enable-javac-deps], - [enable the dependency tracking between Java packages @<:@disabled@:>@])], - [ENABLE_JAVAC_DEPS="${enableval}"], [ENABLE_JAVAC_DEPS='no']) -AC_MSG_RESULT([$ENABLE_JAVAC_DEPS]) -if test "x$ENABLE_JAVAC_DEPS" = xyes; then - JAVAC_USE_DEPS=true -else - JAVAC_USE_DEPS=false -fi -AC_SUBST(JAVAC_USE_DEPS) - -AC_MSG_CHECKING([whether to use multiple cores for javac compilation]) -AC_ARG_ENABLE([javac-multi-core], [AS_HELP_STRING([--enable-javac-multi-core], - [compile Java packages concurrently @<:@disabled@:>@])], - [ENABLE_JAVAC_MULTICORE="${enableval}"], [ENABLE_JAVAC_MULTICORE='no']) -AC_MSG_RESULT([$ENABLE_JAVAC_MULTICORE]) -if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then - JAVAC_USE_MODE=MULTI_CORE_CONCURRENT -else - JAVAC_USE_MODE=SINGLE_THREADED_BATCH - if test "x$ENABLE_JAVAC_DEPS" = xyes; then - AC_MSG_WARN([Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options.]) - AC_MSG_WARN([Disabling dependency tracking for you now.]) - JAVAC_USE_DEPS=false - fi - if test "x$ENABLE_JAVAC_SERVER" = xyes; then - AC_MSG_WARN([The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options.]) - AC_MSG_WARN([Disabling javac server for you now.]) - JAVAC_USE_REMOTE=false - fi -fi -AC_SUBST(JAVAC_USE_MODE) - -############################################################################### -# -# OS specific settings that we never will need to probe. -# -if test "x$HOST_OS" = xlinux; then - AC_MSG_CHECKING([what is not needed on Linux?]) - PULSE_NOT_NEEDED=yes - AC_MSG_RESULT([pulse]) -fi - -if test "x$HOST_OS" = xsolaris; then - AC_MSG_CHECKING([what is not needed on Solaris?]) - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - AC_MSG_RESULT([alsa pulse]) -fi - -if test "x$HOST_OS" = xwindows; then - AC_MSG_CHECKING([what is not needed on Windows?]) - CUPS_NOT_NEEDED=yes - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - X11_NOT_NEEDED=yes - AC_MSG_RESULT([alsa cups pulse x11]) -fi - -if test "x$HOST_OS" = xmacosx; then - AC_MSG_CHECKING([what is not needed on MacOSX?]) - ALSA_NOT_NEEDED=yes - PULSE_NOT_NEEDED=yes - X11_NOT_NEEDED=yes - FREETYPE2_NOT_NEEDED=yes - # If the java runtime framework is disabled, then we need X11. - # This will be adjusted below. - AC_MSG_RESULT([alsa pulse x11]) -fi - -if test "x$HOST_OS" = xbsd; then - AC_MSG_CHECKING([what is not needed on bsd?]) - ALSA_NOT_NEEDED=yes - AC_MSG_RESULT([alsa]) -fi - -############################################################################### -# -# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM -# that uses this API. -# -AC_ARG_ENABLE([macosx-runtime-support], [AS_HELP_STRING([--disable-macosx-runtime-support], - [disable the use of MacOSX Java runtime support framework @<:@enabled@:>@])], - [MACOSX_RUNTIME_SUPPORT="${enableval}"],[MACOSX_RUNTIME_SUPPORT="no"]) - -USE_MACOSX_RUNTIME_SUPPORT=no -AC_MSG_CHECKING([for explicit Java runtime support in the OS]) -if test -f /System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers/JavaRuntimeSupport.h; then - if test "x$MACOSX_RUNTIME_SUPPORT" != xno; then - MACOSX_RUNTIME_SUPPORT=yes - USE_MACOSX_RUNTIME_SUPPORT=yes - AC_MSG_RESULT([yes, does not need alsa freetype2 pulse and X11]) - else - AC_MSG_RESULT([yes, but explicitly disabled.]) - fi -else - AC_MSG_RESULT([no]) -fi - -if test "x$HOST_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then - AC_MSG_CHECKING([what is not needed on an X11 build on MacOSX?]) - X11_NOT_NEEDED= - FREETYPE2_NOT_NEEDED= - AC_MSG_RESULT([alsa pulse]) -fi - -############################################################################### -# -# Check for X Windows -# -AC_PATH_XTRA - -if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then - help_on_build_dependency x11 - AC_MSG_ERROR([Could not find X11 libraries. $HELP_MSG]) -fi - -# Some of the old makefiles require a setting of OPENWIN_HOME -# Since the X11R6 directory has disappeared on later Linuxes, -# we need to probe for it. -if test "x$HOST_OS" = xlinux; then - if test -d "$SYS_ROOT/usr/X11R6"; then - OPENWIN_HOME="$SYS_ROOT/usr/X11R6" - fi - if test -d "$SYS_ROOT/usr/include/X11"; then - OPENWIN_HOME="$SYS_ROOT/usr" - fi -fi -if test "x$HOST_OS" = xsolaris; then - OPENWIN_HOME="/usr/openwin" -fi -AC_SUBST(OPENWIN_HOME) - - -# -# Weird Sol10 something check...TODO change to try compile -# -if test "x${HOST_OS}" = xsolaris; then - if test "`uname -r`" = "5.10"; then - if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then - X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS" - fi - fi -fi - -AC_LANG_PUSH(C) -OLD_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $X_CFLAGS" -AC_CHECK_HEADERS([X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h], - [X11_A_OK=yes], - [X11_A_OK=no]) -CFLAGS="$OLD_CFLAGS" -AC_LANG_POP(C) - -if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then - help_on_build_dependency x11 - AC_MSG_ERROR([Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG]) -fi - -AC_SUBST(X_CFLAGS) -AC_SUBST(X_LIBS) - -############################################################################### -# -# The common unix printing system cups is used to print from java. -# -AC_ARG_WITH(cups, [AS_HELP_STRING([--with-cups], - [specify prefix directory for the cups package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) -AC_ARG_WITH(cups-include, [AS_HELP_STRING([--with-cups-include], - [specify directory for the cups include files])]) -AC_ARG_WITH(cups-lib, [AS_HELP_STRING([--with-cups-lib], - [specify directory for the cups library])]) - -if test "x$CUPS_NOT_NEEDED" = xyes; then - if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then - AC_MSG_WARN([cups not used, so --with-cups is ignored]) - fi - CUPS_CFLAGS= - CUPS_LIBS= -else - CUPS_FOUND=no - - if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then - AC_MSG_ERROR([It is not possible to disable the use of cups. Remove the --without-cups option.]) - fi - - if test "x${with_cups}" != x; then - CUPS_LIBS="-L${with_cups}/lib -lcups" - CUPS_CFLAGS="-I${with_cups}/include" - CUPS_FOUND=yes - fi - if test "x${with_cups_include}" != x; then - CUPS_CFLAGS="-I${with_cups_include}" - CUPS_FOUND=yes - fi - if test "x${with_cups_lib}" != x; then - CUPS_LIBS="-L${with_cups_lib} -lcups" - CUPS_FOUND=yes - fi - if test "x$CUPS_FOUND" = xno; then - BDEPS_CHECK_MODULE(CUPS, cups, xxx, [CUPS_FOUND=yes]) - fi - if test "x$CUPS_FOUND" = xno; then - # Are the cups headers installed in the default /usr/include location? - AC_CHECK_HEADERS([cups/cups.h cups/ppd.h], - [CUPS_FOUND=yes - CUPS_CFLAGS= - CUPS_LIBS="-lcups" - DEFAULT_CUPS=yes]) - fi - if test "x$CUPS_FOUND" = xno; then - # Getting nervous now? Lets poke around for standard Solaris third-party - # package installation locations. - AC_MSG_CHECKING([for cups headers and libs]) - if test -s /opt/sfw/cups/include/cups/cups.h; then - # An SFW package seems to be installed! - CUPS_FOUND=yes - CUPS_CFLAGS="-I/opt/sfw/cups/include" - CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" - elif test -s /opt/csw/include/cups/cups.h; then - # A CSW package seems to be installed! - CUPS_FOUND=yes - CUPS_CFLAGS="-I/opt/csw/include" - CUPS_LIBS="-L/opt/csw/lib -lcups" - fi - AC_MSG_RESULT([$CUPS_FOUND]) - fi - if test "x$CUPS_FOUND" = xno; then - help_on_build_dependency cups - AC_MSG_ERROR([Could not find cups! $HELP_MSG ]) - fi -fi - -AC_SUBST(CUPS_CFLAGS) -AC_SUBST(CUPS_LIBS) - -############################################################################### -# -# The ubiquitous freetype2 library is used to render fonts. -# -AC_ARG_WITH(freetype, [AS_HELP_STRING([--with-freetype], - [specify prefix directory for the freetype2 package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) - -# If we are using the OS installed system lib for freetype, then we do not need to copy it to the build tree -USING_SYSTEM_FT_LIB=false - -if test "x$FREETYPE2_NOT_NEEDED" = xyes; then - if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then - AC_MSG_WARN([freetype not used, so --with-freetype is ignored]) - fi - FREETYPE2_CFLAGS= - FREETYPE2_LIBS= - FREETYPE2_LIB_PATH= -else - FREETYPE2_FOUND=no - - if test "x$with_freetype" != x; then - SPACESAFE(with_freetype,[the path to freetype]) - FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" - if test "x$HOST_OS" = xwindows; then - FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" - fi - FREETYPE2_LIB_PATH="$with_freetype/lib" - FREETYPE2_CFLAGS="-I$with_freetype/include" - if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then - FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include" - fi - FREETYPE2_FOUND=yes - if test "x$FREETYPE2_FOUND" = xyes; then - # Verify that the directories exist - if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then - AC_MSG_ERROR([Could not find the expected directories $with_freetype/lib and $with_freetype/include]) - fi - # List the contents of the lib. - FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` - if test "x$FREETYPELIB" = x; then - AC_MSG_ERROR([Could not find libfreetype.se nor freetype.dll in $with_freetype/lib]) - fi - # Check one h-file - if ! test -s "$with_freetype/include/ft2build.h"; then - AC_MSG_ERROR([Could not find $with_freetype/include/ft2build.h]) - fi - fi - fi - if test "x$FREETYPE2_FOUND" = xno; then - BDEPS_CHECK_MODULE(FREETYPE2, freetype2, xxx, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - PKG_CHECK_MODULES(FREETYPE2, freetype2, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - AC_MSG_CHECKING([for freetype in some standard locations]) - - if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then - DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include" - DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype" - fi - if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then - DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2" - DEFAULT_FREETYPE_LIBS="-lfreetype" - fi - - PREV_CXXCFLAGS="$CXXFLAGS" - PREV_LDFLAGS="$LDFLAGS" - CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS" - LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS" - AC_LINK_IFELSE([AC_LANG_SOURCE([[#include - #include FT_FREETYPE_H - int main() { return 0; } - ]])], - [ - # Yes, the default cflags and libs did the trick. - FREETYPE2_FOUND=yes - FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS" - FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS" - ], - [ - FREETYPE2_FOUND=no - ]) - CXXCFLAGS="$PREV_CXXFLAGS" - LDFLAGS="$PREV_LDFLAGS" - AC_MSG_RESULT([$FREETYPE2_FOUND]) - USING_SYSTEM_FT_LIB=true - fi - if test "x$FREETYPE2_FOUND" = xno; then - help_on_build_dependency freetype2 - AC_MSG_ERROR([Could not find freetype2! $HELP_MSG ]) - fi -fi - -AC_SUBST(USING_SYSTEM_FT_LIB) -AC_SUBST(FREETYPE2_LIB_PATH) -AC_SUBST(FREETYPE2_CFLAGS) -AC_SUBST(FREETYPE2_LIBS) - -############################################################################### -# -# Check for alsa headers and libraries. Used on Linux/GNU systems. -# -AC_ARG_WITH(alsa, [AS_HELP_STRING([--with-alsa], - [specify prefix directory for the alsa package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) -AC_ARG_WITH(alsa-include, [AS_HELP_STRING([--with-alsa-include], - [specify directory for the alsa include files])]) -AC_ARG_WITH(alsa-lib, [AS_HELP_STRING([--with-alsa-lib], - [specify directory for the alsa library])]) - -if test "x$ALSA_NOT_NEEDED" = xyes; then - if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then - AC_MSG_WARN([alsa not used, so --with-alsa is ignored]) - fi - ALSA_CFLAGS= - ALSA_LIBS= -else - ALSA_FOUND=no - - if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then - AC_MSG_ERROR([It is not possible to disable the use of alsa. Remove the --without-alsa option.]) - fi - - if test "x${with_alsa}" != x; then - ALSA_LIBS="-L${with_alsa}/lib -lalsa" - ALSA_CFLAGS="-I${with_alsa}/include" - ALSA_FOUND=yes - fi - if test "x${with_alsa_include}" != x; then - ALSA_CFLAGS="-I${with_alsa_include}" - ALSA_FOUND=yes - fi - if test "x${with_alsa_lib}" != x; then - ALSA_LIBS="-L${with_alsa_lib} -lalsa" - ALSA_FOUND=yes - fi - if test "x$ALSA_FOUND" = xno; then - BDEPS_CHECK_MODULE(ALSA, alsa, xxx, [ALSA_FOUND=yes], [ALSA_FOUND=no]) - fi - if test "x$ALSA_FOUND" = xno; then - PKG_CHECK_MODULES(ALSA, alsa, [ALSA_FOUND=yes], [ALSA_FOUND=no]) - fi - if test "x$ALSA_FOUND" = xno; then - AC_CHECK_HEADERS([alsa/asoundlib.h], - [ALSA_FOUND=yes - ALSA_CFLAGS=-Iignoreme - ALSA_LIBS=-lasound - DEFAULT_ALSA=yes], - [ALSA_FOUND=no]) - fi - if test "x$ALSA_FOUND" = xno; then - help_on_build_dependency alsa - AC_MSG_ERROR([Could not find alsa! $HELP_MSG ]) - fi -fi - -AC_SUBST(ALSA_CFLAGS) -AC_SUBST(ALSA_LIBS) - -############################################################################### -# -# Check for pulse audio headers and libraries. -# -PULSE_FOUND=no -AC_ARG_WITH(pulse, [AS_HELP_STRING([--with-pulse], - [specify prefix directory for the pulseaudio package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) -AC_ARG_WITH(pulse-include, [AS_HELP_STRING([--with-pulse-include], - [specify directory for the pulseaudio include files])]) -AC_ARG_WITH(pulse-lib, [AS_HELP_STRING([--with-pulse-lib], - [specify directory for the pulseaudio library])]) - -if test "x${with_pulse}" != x; then - PULSE_LIBS="-L${with_pulse}/lib -lfreetype" - PULSE_CFLAGS="-I${with_pulse}/include" - PULSE_FOUND=yes -fi -if test "x${with_pulse_include}" != x; then - PULSE_CFLAGS="-I${with_pulse_include}" - PULSE_FOUND=yes -fi -if test "x${with_pulse_lib}" != x; then - PULSE_LIBS="-L${with_pulse_lib} -lpulse" - PULSE_FOUND=yes -fi -if test "x$PULSE_FOUND" = xno; then - BDEPS_CHECK_MODULE(PULSE, pulse, xxx, [PULSE_FOUND=yes], [PULSE_FOUND=no]) -fi -if test "x$PULSE_FOUND" = xno; then - PKG_CHECK_MODULES(LIBPULSE,[libpulse >= 0.9.11],[PULSE_FOUND=yes],[PULSE_FOUND=no]) -fi -if test "x$PULSE_FOUND" = xno; then - AC_CHECK_HEADERS([pulse/pulseaudio.h], - [PULSE_FOUND=yes - PULSE_CFLAGS=-Iignoreme - PULSE_LIBS= - DEFAULT_PULSE=yes], - [PULSE_FOUND=no]) -fi - -if test "x$PULSE_FOUND" = xno && test "x$PULSE_NOT_NEEDED" != xyes; then - help_on_build_dependency pulse - AC_MSG_ERROR([Could not find pulse audio libraries. $HELP_MSG ]) -fi - -AC_SUBST(PULSE_CFLAGS) -AC_SUBST(PULSE_LIBS) - -############################################################################### -# -# Check for the jpeg library -# - -USE_EXTERNAL_LIBJPEG=true -AC_CHECK_LIB(jpeg, main, [], - [ USE_EXTERNAL_LIBJPEG=false - AC_MSG_NOTICE([Will use jpeg decoder bundled with the OpenJDK source]) - ]) -AC_SUBST(USE_EXTERNAL_LIBJPEG) - -############################################################################### -# -# Check for the gif library -# - -USE_EXTERNAL_LIBJPEG=true -AC_CHECK_LIB(gif, main, [], - [ USE_EXTERNAL_LIBGIF=false - AC_MSG_NOTICE([Will use gif decoder bundled with the OpenJDK source]) - ]) -AC_SUBST(USE_EXTERNAL_LIBGIF) - -############################################################################### -# -# Check for the zlib library -# - -USE_EXTERNAL_LIBZ=true -AC_CHECK_LIB(z, main, [], - [ USE_EXTERNAL_LIBZ=false - AC_MSG_NOTICE([Will use zlib bundled with the OpenJDK source]) - ]) -AC_SUBST(USE_EXTERNAL_LIBZ) - -############################################################################### -# -# Check if altzone exists in time.h -# - -AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [return (int)altzone;])], - [has_altzone=yes], - [has_altzone=no]) -if test "x$has_altzone" = xyes; then - AC_DEFINE([HAVE_ALTZONE], 1, [Define if you have the external 'altzone' variable in time.h]) -fi - -############################################################################### -# -# Check the maths library -# - -AC_CHECK_LIB(m, cos, [], - [ - AC_MSG_NOTICE([Maths library was not found]) - ]) -AC_SUBST(LIBM) - -############################################################################### -# -# Check for libdl.so - -save_LIBS="$LIBS" -LIBS="" -AC_CHECK_LIB(dl,dlopen) -LIBDL="$LIBS" -AC_SUBST(LIBDL) -LIBS="$save_LIBS" - -############################################################################### -# -# Should we run the painfully slow javadoc tool? -# -AC_MSG_CHECKING([whether to build documentation]) -AC_ARG_ENABLE([docs], [AS_HELP_STRING([--enable-docs], - [enable generation of Javadoc documentation @<:@disabled@:>@])], - [ENABLE_DOCS="${enableval}"], [ENABLE_DOCS='no']) -AC_MSG_RESULT([$ENABLE_DOCS]) -AC_SUBST(ENABLE_DOCS) -GENERATE_DOCS=false -if test "x$ENABLE_DOCS" = xyes; then - GENERATE_DOCS=true -fi -AC_SUBST(GENERATE_DOCS) - -############################################################################### -# -# Should we compile nimbus swing L&F? We can probably remove this option -# since nimbus is officially part of javax now. -# -AC_MSG_CHECKING([whether to build nimbus L&F]) -AC_ARG_ENABLE([nimbus], [AS_HELP_STRING([--disable-nimbus], - [disable Nimbus L&F @<:@enabled@:>@])], - [ENABLE_NIMBUS="${enableval}"], [ENABLE_NIMBUS='yes']) -AC_MSG_RESULT([$ENABLE_NIMBUS]) -DISABLE_NIMBUS= -if test "x$ENABLE_NIMBUS" = xno; then - DISABLE_NIMBUS=true -fi -AC_SUBST(DISABLE_NIMBUS) - -############################################################################### -# -# Setup the opt flags for different compilers -# and different operating systems. -# -C_FLAG_DEPS="-MMD -MF" -CXX_FLAG_DEPS="-MMD -MF" - -case $COMPILER_TYPE in - CC ) - D_FLAG="-g" - case $COMPILER_NAME in - gcc ) - case $PLATFORM in - macosx ) - # On MacOSX we optimize for size, something - # we should do for all platforms? - C_O_FLAG_HI="-Os" - C_O_FLAG_NORM="-Os" - C_O_FLAG_NONE="" - ;; - *) - C_O_FLAG_HI="-O3" - C_O_FLAG_NORM="-O2" - C_O_FLAG_NONE="-O0" - ;; - esac - CXX_O_FLAG_HI="$C_O_FLAG_HI" - CXX_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_NONE="$C_O_FLAG_NONE" - ;; - ossc ) - # - # Forte has different names for this with their C++ compiler... - # - CXX_FLAG_DEPS="-xMMD -xMF" - -# Extra options used with HIGHEST -# -# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be -# done with care, there are some assumptions below that need to -# be understood about the use of pointers, and IEEE behavior. -# -# Use non-standard floating point mode (not IEEE 754) -CC_HIGHEST="$CC_HIGHEST -fns" -# Do some simplification of floating point arithmetic (not IEEE 754) -CC_HIGHEST="$CC_HIGHEST -fsimple" -# Use single precision floating point with 'float' -CC_HIGHEST="$CC_HIGHEST -fsingle" -# Assume memory references via basic pointer types do not alias -# (Source with excessing pointer casting and data access with mixed -# pointer types are not recommended) -CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" -# Use intrinsic or inline versions for math/std functions -# (If you expect perfect errno behavior, do not use this) -CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" -# Loop data dependency optimizations (need -xO3 or higher) -CC_HIGHEST="$CC_HIGHEST -xdepend" -# Pointer parameters to functions do not overlap -# (Similar to -xalias_level=basic usage, but less obvious sometimes. -# If you pass in multiple pointers to the same data, do not use this) -CC_HIGHEST="$CC_HIGHEST -xrestrict" -# Inline some library routines -# (If you expect perfect errno behavior, do not use this) -CC_HIGHEST="$CC_HIGHEST -xlibmil" -# Use optimized math routines -# (If you expect perfect errno behavior, do not use this) -# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now -#CC_HIGHEST="$CC_HIGHEST -xlibmopt" - - case $LEGACY_HOST_CPU1 in - i586) - C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" - C_O_FLAG_HI="-xO4 -Wu,-O4~yz" - C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" - C_O_FLAG_NONE="" - CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" - CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" - CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" - CXX_O_FLAG_NONE="" - ;; - sparc) - C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" - C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" - C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" - C_O_FLAG_NONE="" - CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" - CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" - CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" - CXX_O_FLAG_NONE="" - ;; - esac - esac - ;; - CL ) - D_FLAG= - C_O_FLAG_HI="-O2" - C_O_FLAG_NORM="-O1" - C_O_FLAG_NONE="-Od" - CXX_O_FLAG_HI="$C_O_FLAG_HI" - CXX_O_FLAG_NORM="$C_O_FLAG_NORM" - CXX_O_FLAG_NONE="$C_O_FLAG_NONE" - ;; -esac - -if test -z "$C_O_FLAG_HIGHEST"; then - C_O_FLAG_HIGHEST="$C_O_FLAG_HI" -fi - -if test -z "$CXX_O_FLAG_HIGHEST"; then - CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" -fi - -AC_SUBST(C_O_FLAG_HIGHEST) -AC_SUBST(C_O_FLAG_HI) -AC_SUBST(C_O_FLAG_NORM) -AC_SUBST(C_O_FLAG_NONE) -AC_SUBST(CXX_O_FLAG_HIGHEST) -AC_SUBST(CXX_O_FLAG_HI) -AC_SUBST(CXX_O_FLAG_NORM) -AC_SUBST(CXX_O_FLAG_NONE) -AC_SUBST(C_FLAG_DEPS) -AC_SUBST(CXX_FLAG_DEPS) - -############################################################################### -# -# Setup legacy vars/targets and new vars to deal with different debug levels. -# -case $DEBUG_LEVEL in - release ) - HOTSPOT_DEBUG_LEVEL="product" - HOTSPOT_EXPORT="product" - ;; - fastdebug ) - HOTSPOT_DEBUG_LEVEL="fastdebug" - HOTSPOT_EXPORT="fastdebug" - CFLAGS="$CFLAGS $D_FLAG" - JAVAC_FLAGS="$JAVAC_FLAGS -g" - ;; - slowdebug ) - HOTSPOT_DEBUG_LEVEL="jvmg" - HOTSPOT_EXPORT="debug" - CFLAGS="$CFLAGS $D_FLAG" - C_O_FLAG_HI="$C_O_FLAG_NONE" - C_O_FLAG_NORM="$C_O_FLAG_NONE" - CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" - CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" - JAVAC_FLAGS="$JAVAC_FLAGS -g" - ;; -esac - -############################################################################### -# -# Generate the legacy makefile targets for hotspot. -# The hotspot api for selecting the build artifacts, really, needs to be improved. -# -HOTSPOT_TARGET="" - -if test "x$JVM_VARIANT_SERVER" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} " -fi - -if test "x$JVM_VARIANT_CLIENT" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 " -fi - -if test "x$JVM_VARIANT_KERNEL" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel " -fi - -if test "x$JVM_VARIANT_ZERO" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero " -fi - -if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then - HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " -fi - -HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" - -############################################################################### -# -# Setup all directories for the subrepoes and the arguments to the sub makes. -# -LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools" -LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist" -LANGTOOLS_MAKE_ARGS="" -AC_SUBST(LANGTOOLS_OUTPUTDIR) -AC_SUBST(LANGTOOLS_DIST) -AC_SUBST(LANGTOOLS_MAKE_ARGS) - -CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba" -CORBA_DIST="$OUTPUT_ROOT/corba/dist" -CORBA_MAKE_ARGS="" -AC_SUBST(CORBA_OUTPUTDIR) -AC_SUBST(CORBA_DIST) -AC_SUBST(CORBA_MAKE_ARGS) - -JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp" -JAXP_DIST="$OUTPUT_ROOT/jaxp/dist" -JAXP_MAKE_ARGS="" -AC_SUBST(JAXP_OUTPUTDIR) -AC_SUBST(JAXP_DIST) -AC_SUBST(JAXP_MAKE_ARGS) - -JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws" -JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist" -JAXWS_MAKE_ARGS="" -AC_SUBST(JAXWS_OUTPUTDIR) -AC_SUBST(JAXWS_DIST) -AC_SUBST(JAXWS_MAKE_ARGS) - -HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot" -HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist" -HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET" -AC_SUBST(HOTSPOT_OUTPUTDIR) -AC_SUBST(HOTSPOT_DIST) -AC_SUBST(HOTSPOT_MAKE_ARGS) - -JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk" -JDK_MAKE_ARGS="ALT_OUTPUTDIR=\"$OUTPUT_ROOT/jdk\"" -AC_SUBST(JDK_OUTPUTDIR) -AC_SUBST(JDK_MAKE_ARGS) - -IMAGES_OUTPUTDIR=$OUTPUT_ROOT/images -IMAGES_MAKE_ARGS="ALT_OUTPUTDIR=$OUTPUT_ROOT/jdk \ - SHARE_SRC=$JDK_TOPDIR/src/share \ - PLATFORM_SRC=$JDK_TOPDIR/src/$LEGACY_HOST_OS_API \ - TEMPDIR=$IMAGES_OUTPUTDIR/tmp \ - ABS_TEMPDIR=$IMAGES_OUTPUTDIR/tmp " -AC_SUBST(IMAGES_OUTPUTDIR) -AC_SUBST(IMAGES_MAKE_ARGS) - -############################################################################### -# -# Now setup the CFLAGS and LDFLAGS for the JDK build. -# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. -# -case $COMPILER_NAME in - gcc ) - CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ - -pipe -fno-omit-frame-pointer \ - -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" - CFLAGS_JDK="$CFLAGS_JDK -fno-strict-aliasing" - ;; - ossc ) - CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" - CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" - ;; - cl ) - CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ - -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ - -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ - -DWIN32 -DIAL" - case $LEGACY_HOST_CPU1 in - i?86 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" - ;; - amd64 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" - ;; - esac - ;; -esac - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" - -# The package path is used only on macosx? -PACKAGE_PATH=/opt/local -AC_SUBST(PACKAGE_PATH) - -# Sometimes we use a cpu dir (.../lib/amd64/server) -# Sometimes not (.../lib/server) -LIBARCHDIR="$LEGACY_HOST_CPU2/" -if test "x$ENDIAN" = xlittle; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" -else - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" -fi -if test "x$HOST_OS" = xlinux; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" -fi -if test "x$HOST_OS" = xwindows; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" -fi -if test "x$HOST_OS" = xsolaris; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" -fi -if test "x$HOST_OS" = xmacosx; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" - LIBARCHDIR="" -fi -if test "x$HOST_OS" = xbsd; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" -fi -if test "x$DEBUG_LEVEL" = xrelease; then - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" -else - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" -fi - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_HOST_CPU1\"' -D$LEGACY_HOST_CPU1" -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" - -CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ - -I${JDK_OUTPUTDIR}/include \ - -I${JDK_OUTPUTDIR}/include/$PLATFORM \ - -I${JDK_TOPDIR}/src/share/javavm/export \ - -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/javavm/export \ - -I${JDK_TOPDIR}/src/share/native/common \ - -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/native/common" - -# The shared libraries are compiled using the picflag. -CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" -CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG" - -# Executable flags -CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" -CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" - -# Now this is odd. The JDK native libraries have to link against libjvm.so -# On 32-bit machines there is normally two distinct libjvm.so:s, client and server. -# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library -# is identical for client and server? Yes. Which is picked at runtime (client or server)? -# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following -# libraries will link to whatever is in memory. Yuck. -# -# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. -if test "x$COMPILER_TYPE" = xCL; then - LDFLAGS_JDKLIB="$LDFLAGS -dll -libpath:${JDK_OUTPUTDIR}/lib -libpath:${JDK_OUTPUTDIR}/objs" - LDFLAGS_JDKLIB_SUFFIX="" - if test "$HOST_CPU_BITS" == "64"; then - LDFLAGS_STACK_SIZE=1048576 - else - LDFLAGS_STACK_SIZE=327680 - fi - LDFLAGS_JDKEXE="$LDFLAGS /STACK:$LDFLAGS_STACK_SIZE" -else - # If this is a --hash-style=gnu system, use --hash-style=both, why? - HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` - if test -n "$HAS_GNU_HASH"; then - # And since we now know that the linker is gnu, then add -z defs, to forbid - # undefined symbols in object files. - LDFLAGS="$LDFLAGS -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" - if test "x$DEBUG_LEVEL" == "xrelease"; then - # When building release libraries, tell the linker optimize them. - # Should this be supplied to the OSS linker as well? - LDFLAGS="$LDFLAGS -Xlinker -O1" - fi - fi - - LDFLAGS_JDKLIB="$LDFLAGS $SHARED_LIBRARY_FLAGS \ - -L${JDK_OUTPUTDIR}/objs \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" - LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" - if test "x$COMPILER_NAME" = xossc; then - LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" - fi - - # Only the jli library is explicitly linked when the launchers are built. - # The libjvm is then dynamically loaded/linked by the launcher. - if test "x$HOST_OS" != "xmacosx"; then - LDFLAGS_JDKEXE="$LDFLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" - LDFLAGS_JDKEXE_SUFFIX="-ljli" - fi -fi - - -AC_SUBST(CFLAGS_JDKLIB) -AC_SUBST(CFLAGS_JDKEXE) - -AC_SUBST(CXXFLAGS_JDKLIB) -AC_SUBST(CXXFLAGS_JDKEXE) - -AC_SUBST(LDFLAGS_JDKLIB) -AC_SUBST(LDFLAGS_JDKEXE) -AC_SUBST(LDFLAGS_JDKLIB_SUFFIX) -AC_SUBST(LDFLAGS_JDKEXE_SUFFIX) - - -############################################################################### -# -# statically link libstdc++ before C++ ABI is stablized on Linux unless -# dynamic build is configured on command line. -# -AC_ARG_ENABLE([static-link-stdc++], [AS_HELP_STRING([--disable-static-link-stdc++], - [disable static linking of the C++ runtime on Linux @<:@enabled@:>@])],, - [ - enable_static_link_stdc__=yes - ]) - -if test "x$HOST_OS" = xlinux; then - # Test if -lstdc++ works. - AC_MSG_CHECKING([if dynamic link of stdc++ is possible]) - AC_LANG_PUSH(C++) - OLD_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -lstdc++" - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], - [has_dynamic_libstdcxx=yes], - [has_dynamic_libstdcxx=no]) - CXXFLAGS="$OLD_CXXFLAGS" - AC_LANG_POP(C++) - AC_MSG_RESULT([$has_dynamic_libstdcxx]) - - # Test if stdc++ can be linked statically. - AC_MSG_CHECKING([if static link of stdc++ is possible]) - STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic" - AC_LANG_PUSH(C++) - OLD_LIBS="$LIBS" - OLD_CXX="$CXX" - LIBS="$STATIC_STDCXX_FLAGS" - CXX="$CC" - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], - [has_static_libstdcxx=yes], - [has_static_libstdcxx=no]) - LIBS="$OLD_LIBS" - CXX="$OLD_CXX" - AC_LANG_POP(C++) - AC_MSG_RESULT([$has_static_libstdcxx]) - - if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then - AC_MSG_ERROR([I cannot link to stdc++! Neither dynamically nor statically.]) - fi - - if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then - AC_MSG_NOTICE([Static linking of libstdc++ was not possible reverting to dynamic linking.]) - enable_static_link_stdc__=no - fi - - if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then - AC_MSG_NOTICE([Dynamic linking of libstdc++ was not possible reverting to static linking.]) - enable_static_link_stdc__=yes - fi - - AC_MSG_CHECKING([how to link with libstdc++]) - if test "x$enable_static_link_stdc__" = xyes; then - LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" - LDCXX="$CC" - AC_MSG_RESULT([static]) - else - LIBCXX="$LIBCXX -lstdc++" - LDCXX="$CXX" - AC_MSG_RESULT([dynamic]) - fi -fi - -############################################################################### -# -# Could someone enlighten this configure script with a comment about libCrun? -# The LEGACY_HOST_CPU3 is the setting for ISA_DIR. -# -if test "x$HOST_OS" = xsolaris && test "x$LIBCXX" = x; then - LIBCXX="/usr/lib${LEGACY_HOST_CPU3}/libCrun.so.1" -fi - -# TODO better (platform agnostic) test -if test "x$HOST_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then - LIBCXX="-lstdc++" -fi - -AC_SUBST(LIBCXX) - ############################################################################### -OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" -OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" -OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" -OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" -AC_SUBST(OS_VERSION_MAJOR) -AC_SUBST(OS_VERSION_MINOR) -AC_SUBST(OS_VERSION_MICRO) +# Check for some common pitfalls +BASIC_TEST_USABILITY_ISSUES -############################################################################### -# -# Misc -# +# At the end, call the closed hook. (Dummy macro if no closed sources available) +CLOSED_HOOK -# The name of the Service Agent jar. -SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}" -if test "x$HOST_OS" = "xwindows"; then - SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}" -fi -AC_SUBST(SALIB_NAME) - -# Control wether Hotspot runs Queens test after build. -AC_ARG_ENABLE([hotspot-test-in-build], [AS_HELP_STRING([--enable-hotspot-test-in-build], - [enable running of Queens test after Hotspot build (not yet available) @<:@disabled@:>@])],, - [enable_hotspot_test_in_build=no]) -if test "x$enable_hotspot_test_in_build" = "xyes"; then - TEST_IN_BUILD=true -else - TEST_IN_BUILD=false -fi -AC_SUBST(TEST_IN_BUILD) - -############################################################################### -# -# Choose cacerts source file -# -AC_ARG_WITH(cacerts-file, [AS_HELP_STRING([--with-cacerts-file], - [specify alternative cacerts file])]) -if test "x$with_cacerts_file" != x; then - CACERTS_FILE=$with_cacerts_file -else - if test "x$OPENJDK" = "xtrue"; then - CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts - else - CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal - fi -fi -AC_SUBST(CACERTS_FILE) - -# Check if build directory is on local disk. -# return 0 if it is on local disk, non-0 if on remote disk or failure -function is_directory_on_local_disk { - # df -l lists only local disks; if the given directory is not found then - # a non-zero exit code is given - $DF -l $1 > /dev/null 2>&1 -} - -AC_MSG_CHECKING([if build directory is on local disk]) -if is_directory_on_local_disk $OUTPUT_ROOT; then - OUTPUT_DIR_IS_LOCAL="yes" -else - OUTPUT_DIR_IS_LOCAL="no" -fi -AC_MSG_RESULT($OUTPUT_DIR_IS_LOCAL) - -# We're messing a bit with internal autoconf variables to put the config.status in the -# output directory instead of the current directory. -CONFIG_STATUS=$OUTPUT_ROOT/config.status - -# Now create the actual output files, after this, the main work of configure is done +# We're messing a bit with internal autoconf variables to put the config.status +# in the output directory instead of the current directory. +CONFIG_STATUS="$OUTPUT_ROOT/config.status" +# Create the actual output files. Now the main work of configure is done. AC_OUTPUT # Finally output some useful information to the user - -if test "x$CCACHE_FOUND" != x; then - if test "x$HAS_GOOD_CCACHE" = x; then - CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" - CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." - else - CCACHE_STATUS="installed and in use" - fi -else - if test "x$GCC" = xyes; then - CCACHE_STATUS="not installed (consider installing)" - CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." - else - CCACHE_STATUS="not available for your system" - fi -fi - -printf "\n" -printf "====================================================\n" -printf "A new configuration has been successfully created in\n" -printf "$OUTPUT_ROOT\n" -if test "x$CONFIGURE_COMMAND_LINE" != x; then - printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n" -else - printf "using default settings.\n" -fi - -printf "\n" -printf "Configuration summary:\n" -printf "* Debug level: $DEBUG_LEVEL\n" -printf "* JDK variant: $JDK_VARIANT\n" -printf "* JVM variants: $with_jvm_variants\n" -printf "* Host info: OS: $HOST_OS, CPU architecture: $HOST_CPU_ARCH, address length: $HOST_CPU_BITS\n" -printf "* Boot JDK: $BOOT_JDK\n" - -printf "\n" -printf "Build performance summary:\n" -printf "* Cores to use: $NUM_CORES\n" -printf "* Memory limit: $MEMORY_SIZE MB\n" -printf "* ccache status: $CCACHE_STATUS\n" - -if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then - printf "\n" - printf "WARNING: Your build output directory is not on a local disk.\n" - printf "This will severely degrade build performance!\n" - printf "It is recommended that you create an output directory on a local disk,\n" - printf "and run the configure script again from that directory.\n" -fi - -if test "x$CCACHE_HELP_MSG" != x; then - printf "\n" - printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" - printf "$CCACHE_HELP_MSG\n" - - help_on_build_dependency ccache - printf "$HELP_MSG\n" -fi +HELP_PRINT_SUMMARY_AND_WARNINGS diff --git a/common/autoconf/cores.m4 b/common/autoconf/cores.m4 deleted file mode 100644 index f48887d36be..00000000000 --- a/common/autoconf/cores.m4 +++ /dev/null @@ -1,103 +0,0 @@ -# -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -AC_DEFUN([CHECK_CORES], -[ - AC_MSG_CHECKING([for number of cores]) - NUM_CORES=1 - FOUND_CORES=no - - if test -f /proc/cpuinfo; then - # Looks like a Linux system - NUM_CORES=`cat /proc/cpuinfo | grep -c processor` - FOUND_CORES=yes - fi - - if test -x /usr/sbin/psrinfo; then - # Looks like a Solaris system - NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` - FOUND_CORES=yes - fi - - if test -x /usr/sbin/system_profiler; then - # Looks like a MacOSX system - NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'` - FOUND_CORES=yes - fi - - if test "x$build_os" = xwindows; then - NUM_CORES=4 - fi - - # For c/c++ code we run twice as many concurrent build - # jobs than we have cores, otherwise we will stall on io. - CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` - - if test "x$FOUND_CORES" = xyes; then - AC_MSG_RESULT([$NUM_CORES]) - else - AC_MSG_RESULT([could not detect number of cores, defaulting to 1!]) - fi - -]) - -AC_DEFUN([CHECK_MEMORY_SIZE], -[ - AC_MSG_CHECKING([for memory size]) - # Default to 1024MB - MEMORY_SIZE=1024 - FOUND_MEM=no - - if test -f /proc/cpuinfo; then - # Looks like a Linux system - MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print [$]2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` - FOUND_MEM=yes - fi - - if test -x /usr/sbin/prtconf; then - # Looks like a Solaris system - MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print [$]3 }'` - FOUND_MEM=yes - fi - - if test -x /usr/sbin/system_profiler; then - # Looks like a MacOSX system - MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print [$]2}'` - MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` - FOUND_MEM=yes - fi - - if test "x$build_os" = xwindows; then - MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'` - FOUND_MEM=yes - fi - - if test "x$FOUND_MEM" = xyes; then - AC_MSG_RESULT([$MEMORY_SIZE MB]) - else - AC_MSG_RESULT([could not detect memory size defaulting to 1024MB!]) - fi -]) diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh new file mode 100644 index 00000000000..5f7058f9300 --- /dev/null +++ b/common/autoconf/generated-configure.sh @@ -0,0 +1,18054 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.67 for openjdk jdk8. +# +# Report bugs to . +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: build-dev@openjdk.java.net about your system, including +$0: any error possibly output before this message. Then +$0: install a modern shell, or manually run the script +$0: under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='openjdk' +PACKAGE_TARNAME='openjdk' +PACKAGE_VERSION='jdk8' +PACKAGE_STRING='openjdk jdk8' +PACKAGE_BUGREPORT='build-dev@openjdk.java.net' +PACKAGE_URL='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='LTLIBOBJS +LIBOBJS +CCACHE +USE_PRECOMPILED_HEADER +ENABLE_SJAVAC +JAVAC_USE_MODE +JAVAC_USE_DEPS +JAVAC_SERVER_CORES +JAVAC_SERVERS +JAVAC_USE_REMOTE +SERVER_JAVA +MEMORY_SIZE +CONCURRENT_BUILD_JOBS +NUM_CORES +SALIB_NAME +HOTSPOT_MAKE_ARGS +LIBCXX +LIBDL +LIBM +LIBZIP_CAN_USE_MMAP +USE_EXTERNAL_LIBZ +USE_EXTERNAL_LIBGIF +USE_EXTERNAL_LIBJPEG +ALSA_LIBS +ALSA_CFLAGS +FREETYPE2_LIB_PATH +USING_SYSTEM_FT_LIB +FREETYPE2_LIBS +FREETYPE2_CFLAGS +CUPS_LIBS +CUPS_CFLAGS +OPENWIN_HOME +X_EXTRA_LIBS +X_LIBS +X_PRE_LIBS +X_CFLAGS +XMKMF +CXXFLAGS_DEBUG_SYMBOLS +CFLAGS_DEBUG_SYMBOLS +ZIP_DEBUGINFO_FILES +ENABLE_DEBUG_SYMBOLS +UNCYGDRIVE +LDFLAGS_JDKEXE_SUFFIX +LDFLAGS_JDKLIB_SUFFIX +LDFLAGS_JDKEXE +LDFLAGS_JDKLIB +CXXFLAGS_JDKEXE +CXXFLAGS_JDKLIB +CFLAGS_JDKEXE +CFLAGS_JDKLIB +PACKAGE_PATH +CXX_FLAG_DEPS +C_FLAG_DEPS +CXX_O_FLAG_NONE +CXX_O_FLAG_NORM +CXX_O_FLAG_HI +CXX_O_FLAG_HIGHEST +C_O_FLAG_NONE +C_O_FLAG_NORM +C_O_FLAG_HI +C_O_FLAG_HIGHEST +POST_MCS_CMD +POST_STRIP_CMD +SET_SHARED_LIBRARY_ORIGIN +CXX_FLAG_REORDER +C_FLAG_REORDER +SET_SHARED_LIBRARY_MAPFILE +SET_SHARED_LIBRARY_NAME +SHARED_LIBRARY_FLAGS +EXE_SUFFIX +STATIC_LIBRARY_SUFFIX +SHARED_LIBRARY_SUFFIX +LIBRARY_PREFIX +STATIC_LIBRARY +SHARED_LIBRARY +OBJ_SUFFIX +ENDIAN +ARCH_DATA_MODEL +LP64 +OBJCOPY +MCS +STRIP +NM +ASFLAGS +AS +CXXCPP +CPP +COMPILER_TYPE +RC_FLAGS +DUMPBIN +WINAR +RC +MT +WINLD +ARFLAGS +AR +LDEXECXX +LDCXX +LDEXE +LD +ac_ct_OBJC +OBJCFLAGS +OBJC +ac_ct_CXX +CXXFLAGS +CXX +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +HOSTLD +HOSTCXX +HOSTCC +DEFINE_CROSS_COMPILE_ARCH +MSVCR100DLL +CHECK_FOR_VCINSTALLDIR +SETUPDEVENV +AR_OUT_OPTION +LD_OUT_OPTION +EXE_OUT_OPTION +CC_OUT_OPTION +SYS_ROOT +HOTSPOT_DIST +JAXWS_DIST +JAXP_DIST +CORBA_DIST +LANGTOOLS_DIST +IMAGES_OUTPUTDIR +JDK_OUTPUTDIR +HOTSPOT_OUTPUTDIR +JAXWS_OUTPUTDIR +JAXP_OUTPUTDIR +CORBA_OUTPUTDIR +LANGTOOLS_OUTPUTDIR +OVERRIDE_SRC_ROOT +ADD_SRC_ROOT +JDK_TOPDIR +HOTSPOT_TOPDIR +JAXWS_TOPDIR +JAXP_TOPDIR +CORBA_TOPDIR +LANGTOOLS_TOPDIR +BOOT_JDK_JVMARGS +NATIVE2ASCII +RMIC +JAR +JAVAH +JAVAC_FLAGS +JAVAC +BOOT_JDK_SOURCETARGET +JAVA +BOOT_TOOLSJAR +BOOT_RTJAR +BOOT_JDK +JAVA_CHECK +JAVAC_CHECK +OUTPUT_ROOT +CONF_NAME +SPEC +COOKED_BUILD_NUMBER +FULL_VERSION +RELEASE +JDK_VERSION +RUNTIME_NAME +COPYRIGHT_YEAR +COMPANY_NAME +JDK_RC_PLATFORM_NAME +PRODUCT_SUFFIX +PRODUCT_NAME +LAUNCHER_NAME +MILESTONE +JDK_BUILD_NUMBER +JDK_UPDATE_VERSION +JDK_MICRO_VERSION +JDK_MINOR_VERSION +JDK_MAJOR_VERSION +ENABLE_JFR +COMPRESS_JARS +CACERTS_FILE +TEST_IN_BUILD +DISABLE_NIMBUS +GENERATE_DOCS +ENABLE_DOCS +BUILD_HEADLESS_ONLY +BUILD_HEADLESS +SUPPORT_HEADFUL +SUPPORT_HEADLESS +JIGSAW +SET_OPENJDK +BUILD_VARIANT_RELEASE +DEBUG_CLASSFILES +FASTDEBUG +VARIANT +DEBUG_LEVEL +JVM_VARIANT_ZEROSHARK +JVM_VARIANT_ZERO +JVM_VARIANT_KERNEL +JVM_VARIANT_CLIENT +JVM_VARIANT_SERVER +JVM_VARIANTS +JDK_VARIANT +MINIMIZE_RAM_USAGE +JAVASE_EMBEDDED +PATH_SEP +CYGPATH +OS_VERSION_MICRO +OS_VERSION_MINOR +OS_VERSION_MAJOR +REQUIRED_OS_VERSION +REQUIRED_OS_NAME +LEGACY_OPENJDK_BUILD_CPU3 +LEGACY_OPENJDK_BUILD_CPU2 +LEGACY_OPENJDK_BUILD_CPU1 +OPENJDK_BUILD_CPU_ENDIAN +OPENJDK_BUILD_CPU_BITS +OPENJDK_BUILD_CPU_ARCH +OPENJDK_BUILD_CPU +LEGACY_OPENJDK_BUILD_OS_API +OPENJDK_BUILD_OS_API +OPENJDK_BUILD_OS_FAMILY +OPENJDK_BUILD_OS +LEGACY_OPENJDK_TARGET_CPU3 +LEGACY_OPENJDK_TARGET_CPU2 +LEGACY_OPENJDK_TARGET_CPU1 +OPENJDK_TARGET_CPU_ENDIAN +OPENJDK_TARGET_CPU_BITS +OPENJDK_TARGET_CPU_ARCH +OPENJDK_TARGET_CPU +LEGACY_OPENJDK_TARGET_OS_API +OPENJDK_TARGET_OS_API +OPENJDK_TARGET_OS_FAMILY +OPENJDK_TARGET_OS +OPENJDK_BUILD_SYSTEM +OPENJDK_TARGET_SYSTEM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +PKG_CONFIG +BDEPS_FTP +BDEPS_UNZIP +HG +FILE +EXPR +READELF +OTOOL +LDD +UNZIP +ZIP +XARGS +WC +TOUCH +TR +TEE +TAIL +TAR +SORT +SH +SED +RM +THEPWDCMD +PRINTF +NAWK +MV +MKDIR +MAKE +LS +LN +HEAD +FIND_DELETE +FIND +FGREP +EGREP +GREP +ECHO +DIFF +DF +DATE +CUT +CPIO +CP +CHMOD +CAT +AWK +PKGHANDLER +BUILD_LOG_WRAPPER +BUILD_LOG_PREVIOUS +BUILD_LOG +SRC_ROOT +READLINK +DATE_WHEN_CONFIGURED +CONFIGURE_COMMAND_LINE +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +with_builddeps_conf +with_builddeps_server +with_builddeps_dir +with_builddeps_group +enable_list_builddeps +with_target_bits +with_jdk_variant +with_jvm_variants +enable_debug +with_debug_level +enable_openjdk_only +enable_jigsaw +enable_headful +enable_docs +enable_nimbus +enable_hotspot_test_in_build +with_cacerts_file +enable_jfr +with_conf_name +with_boot_jdk +with_boot_jdk_jvmargs +with_add_source_root +with_override_source_root +with_adds_and_overrides +with_override_langtools +with_override_corba +with_override_jaxp +with_override_jaxws +with_override_hotspot +with_override_jdk +with_msvcr100dll +with_sys_root +with_tools_dir +with_devkit +with_extra_cflags +with_extra_cxxflags +with_extra_ldflags +enable_debug_symbols +enable_zip_debug_info +enable_macosx_runtime_support +with_x +with_cups +with_cups_include +with_cups_lib +with_freetype +with_alsa +with_alsa_include +with_alsa_lib +with_zlib +enable_static_link_stdc__ +with_num_cores +with_memory_size +with_server_java +enable_javac_server +with_javac_server_cores +enable_javac_deps +enable_javac_multi_core +enable_sjavac +enable_precompiled_headers +enable_ccache +with_ccache_dir +' + ac_precious_vars='build_alias +host_alias +target_alias +PKG_CONFIG +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +OBJC +OBJCFLAGS +CPP +CXXCPP +XMKMF +FREETYPE2_CFLAGS +FREETYPE2_LIBS +ALSA_CFLAGS +ALSA_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures openjdk jdk8 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/openjdk] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +X features: + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of openjdk jdk8:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-list-builddeps list all build dependencies known to the configure + script + --enable-debug set the debug level to fastdebug (shorthand for + --with-debug-level=fastdebug) [disabled] + --enable-openjdk-only build OpenJDK regardless of the presence of closed + repositories [disabled] + --enable-jigsaw build Jigsaw images (not yet available) [disabled] + --disable-headful build headful support (graphical UI support) + [enabled] + --enable-docs enable generation of Javadoc documentation + [disabled] + --disable-nimbus disable Nimbus L&F [enabled] + --enable-hotspot-test-in-build + enable running of Queens test after Hotspot build + (not yet available) [disabled] + --enable-jfr enable jfr (default is no) + ENABLE_JFR="${enableval}" + --disable-debug-symbols disable generation of debug symbols ([enabled]) + --disable-zip-debug-info + don't zip debug-info files ([enabled@:@) + --disable-macosx-runtime-support + disable the use of MacOSX Java runtime support + framework [enabled] + --disable-static-link-stdc++ + disable static linking of the C++ runtime on Linux + [enabled] + --enable-javac-server enable the shared javac server during the build + process [disabled] + --enable-javac-deps enable the dependency tracking between Java packages + [disabled] + --enable-javac-multi-core + compile Java packages concurrently [disabled] + --enable-sjavac use sjavac to do fast incremental compiles + [disabled] + --disable-precompiled-headers + use precompiled headers when compiling C++ [enabled] + --disable-ccache use ccache to speed up recompilations [enabled] + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-builddeps-conf use this configuration file for the builddeps + --with-builddeps-server download and use build dependencies from this server + url, e.g. + --with-builddeps-server=ftp://example.com/dir + --with-builddeps-dir store downloaded build dependencies here + [d/localhome/builddeps] + --with-builddeps-group chgrp the downloaded build dependencies to this + group + --with-target-bits build 32-bit or 64-bit binaries (for platforms that + support it), e.g. --with-target-bits=32 [guessed] + --with-jdk-variant JDK variant to build (normal, embedded) [normal] + --with-jvm-variants JVM variants (separated by commas) to build (server, + client, kernel, zero, zeroshark) [server] + --with-debug-level set the debug level (release, fastdebug, slowdebug) + [release] + --with-cacerts-file specify alternative cacerts file + --with-conf-name use this as the name of the configuration, + overriding the generated default + --with-boot-jdk path to Boot JDK (used to bootstrap build) [probed] + --with-boot-jdk-jvmargs specify JVM arguments to be passed to all + invocations of the Boot JDK, overriding the default + values, e.g --with-boot-jdk-jvmargs="-Xmx8G + -enableassertions" + --with-add-source-root for each and every source directory, look in this + additional source root for the same directory; if it + exists and have files in it, include it in the build + --with-override-source-root + for each and every source directory, look in this + override source root for the same directory; if it + exists, use that directory instead and ignore the + directory in the original source root + --with-adds-and-overrides + use the subdirs 'adds' and 'overrides' in the + specified directory as add-source-root and + override-source-root + --with-override-langtools + use this langtools dir for the build + --with-override-corba use this corba dir for the build + --with-override-jaxp use this jaxp dir for the build + --with-override-jaxws use this jaxws dir for the build + --with-override-hotspot use this hotspot dir for the build + --with-override-jdk use this jdk dir for the build + --with-msvcr100dll copy this msvcr100.dll into the built JDK + --with-sys-root pass this sys-root to the compilers and linker + (useful if the sys-root encoded in the cross + compiler tools is incorrect) + --with-tools-dir search this directory for compilers and tools + --with-devkit use this directory as base for tools-dir and + sys-root + --with-extra-cflags extra flags to be used when compiling jdk c-files + --with-extra-cxxflags extra flags to be used when compiling jdk c++-files + --with-extra-ldflags extra flags to be used when linking jdk + --with-x use the X Window System + --with-cups specify prefix directory for the cups package + (expecting the libraries under PATH/lib and the + headers under PATH/include) + --with-cups-include specify directory for the cups include files + --with-cups-lib specify directory for the cups library + --with-freetype specify prefix directory for the freetype2 package + (expecting the libraries under PATH/lib and the + headers under PATH/include) + --with-alsa specify prefix directory for the alsa package + (expecting the libraries under PATH/lib and the + headers under PATH/include) + --with-alsa-include specify directory for the alsa include files + --with-alsa-lib specify directory for the alsa library + --with-zlib use zlib from build system or OpenJDK source + (system, bundled) [bundled] + --with-num-cores number of cores in the build system, e.g. + --with-num-cores=8 [probed] + --with-memory-size memory (in MB) available in the build system, e.g. + --with-memory-size=1024 [probed] + --with-server-java use this java binary for running the javac + background server and other long running java tasks + in the build process, e.g. + ---with-server-java="/opt/jrockit/bin/java -server" + --with-javac-server-cores + use at most this number of concurrent threads on the + javac server [probed] + --with-ccache-dir where to store ccache files [~/.ccache] + +Some influential environment variables: + PKG_CONFIG path to pkg-config utility + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + OBJC Objective C compiler command + OBJCFLAGS Objective C compiler flags + CPP C preprocessor + CXXCPP C++ preprocessor + XMKMF Path to xmkmf, Makefile generator for X Window System + FREETYPE2_CFLAGS + C compiler flags for FREETYPE2, overriding pkg-config + FREETYPE2_LIBS + linker flags for FREETYPE2, overriding pkg-config + ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config + ALSA_LIBS linker flags for ALSA, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +openjdk configure jdk8 +generated by GNU Autoconf 2.67 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_objc_try_compile LINENO +# ----------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_objc_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_objc_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_objc_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_run LINENO +# ------------------------ +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_cxx_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_run + +# ac_fn_cxx_compute_int LINENO EXPR VAR INCLUDES +# ---------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_cxx_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_cxx_check_header_compile + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_cxx_check_func LINENO FUNC VAR +# ------------------------------------ +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_cxx_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_cxx_check_func + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval "test \"\${$3+set}\"" = set; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ----------------------------------------- ## +## Report this to build-dev@openjdk.java.net ## +## ----------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel + +# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES +# --------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_cxx_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval "test \"\${$3+set}\"" = set; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ----------------------------------------- ## +## Report this to build-dev@openjdk.java.net ## +## ----------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_cxx_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by openjdk $as_me jdk8, which was +generated by GNU Autoconf 2.67. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5 ; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +# Do not change or remove the following line, it is needed for consistency checks: +# DATE_WHEN_GENERATED: 1341161875 + +ac_aux_dir= +for ac_dir in build-aux "$srcdir"/build-aux; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- + + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +# PKG_CHECK_MODULES + + +# Include these first... +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + + + + + + + + + + + + + + +#%%% Simple tools %%% + + + + + + + + + + + + +# Check if build directory is on local disk. +# Argument 1: directory to test +# Argument 2: what to do if it is on local disk +# Argument 3: what to do otherwise (remote disk or failure) + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + +# ... then the rest +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# Fixes paths on windows to be mixed mode short. + + + + +############################################################################### +# +# We need a Boot JDK to bootstrap the build. +# + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + + + + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + +apt_help() { + case $1 in + devkit) + PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;; + openjdk) + PKGHANDLER_COMMAND="sudo apt-get install openjdk-7-jdk" ;; + alsa) + PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;; + cups) + PKGHANDLER_COMMAND="sudo apt-get install libcups2-dev" ;; + freetype2) + PKGHANDLER_COMMAND="sudo apt-get install libfreetype6-dev" ;; + pulse) + PKGHANDLER_COMMAND="sudo apt-get install libpulse-dev" ;; + x11) + PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev" ;; + ccache) + PKGHANDLER_COMMAND="sudo apt-get install ccache" ;; + * ) + break ;; + esac +} + +yum_help() { + case $1 in + devkit) + PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;; + openjdk) + PKGHANDLER_COMMAND="sudo yum install java-1.7.0-openjdk" ;; + alsa) + PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;; + cups) + PKGHANDLER_COMMAND="sudo yum install cups-devel" ;; + freetype2) + PKGHANDLER_COMMAND="sudo yum install freetype2-devel" ;; + pulse) + PKGHANDLER_COMMAND="sudo yum install pulseaudio-libs-devel" ;; + x11) + PKGHANDLER_COMMAND="sudo yum install libXtst-devel" ;; + ccache) + PKGHANDLER_COMMAND="sudo yum install ccache" ;; + * ) + break ;; + esac +} + +port_help() { + PKGHANDLER_COMMAND="" +} + +pkgutil_help() { + PKGHANDLER_COMMAND="" +} + +pkgadd_help() { + PKGHANDLER_COMMAND="" +} + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + + + +#%%% Build and target systems %%% + + + + + + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + + + + + + + + + +# This line needs to be here, verbatim, after all includes. +# It is replaced with closed functionality when building +# closed sources. + + +############################################################################### +# +# Initialization +# +############################################################################### + +# Basic initialization that must happen first of all + +# Save the original command line. This is passed to us by the wrapper configure script. + +DATE_WHEN_CONFIGURED=`LANG=C date` + + +# Locate the directory of this script. +SCRIPT="$0" + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + # Extract the first word of "readlink", so it can be a program name with args. +set dummy readlink; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_READLINK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $READLINK in + [\\/]* | ?:[\\/]*) + ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READLINK=$ac_cv_path_READLINK +if test -n "$READLINK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 +$as_echo "$READLINK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | grep GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + SCRIPT=`$READLINK -f $SCRIPT` + else + STARTDIR=$PWD + COUNTER=0 + DIR=`dirname $SCRIPT` + FIL=`basename $SCRIPT` + while test $COUNTER -lt 20; do + ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $DIR + cd `dirname $ISLINK` + DIR=`pwd` + FIL=`basename $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + SCRIPT=$DIR/$FIL + fi + fi + +AUTOCONF_DIR=`dirname $0` + + +# Where is the source? It is located two levels above the configure script. +CURDIR="$PWD" +cd "$AUTOCONF_DIR/../.." +SRC_ROOT="`pwd`" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + SRC_ROOT_LENGTH=`pwd|wc -m` + if test $SRC_ROOT_LENGTH -gt 100; then + as_fn_error $? "Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported" "$LINENO" 5 + fi +fi + +cd "$CURDIR" + + + # Fail with message the path to the source root if var SRC_ROOT contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$SRC_ROOT" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + SRC_ROOT=`$CYGPATH -s -m -a "$SRC_ROOT"` + SRC_ROOT=`$CYGPATH -u "$SRC_ROOT"` + else + as_fn_error $? "You cannot have spaces in the path to the source root! \"$SRC_ROOT\"" "$LINENO" 5 + fi + fi + + + # Fail with message the path to the current directory if var CURDIR contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$CURDIR" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + CURDIR=`$CYGPATH -s -m -a "$CURDIR"` + CURDIR=`$CYGPATH -u "$CURDIR"` + else + as_fn_error $? "You cannot have spaces in the path to the current directory! \"$CURDIR\"" "$LINENO" 5 + fi + fi + + + +# Setup default logging of stdout and stderr to build.log in the output root. +BUILD_LOG='$(OUTPUT_ROOT)/build.log' +BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old' +BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' + + + + + +# Must be done before we can call HELP_MSG_MISSING_DEPENDENCY. + + for ac_prog in apt-get yum port pkgutil pkgadd +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PKGHANDLER+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PKGHANDLER"; then + ac_cv_prog_PKGHANDLER="$PKGHANDLER" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PKGHANDLER="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PKGHANDLER=$ac_cv_prog_PKGHANDLER +if test -n "$PKGHANDLER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGHANDLER" >&5 +$as_echo "$PKGHANDLER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PKGHANDLER" && break +done + + + +# Setup simple tools, that do not need have cross compilation support. +# Without these, we can't properly run the rest of the configure script. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + + +# Start with tools that do not need have cross compilation support +# and can be expected to be found in the default PATH. These tools are +# used by configure. Nor are these tools expected to be found in the +# devkit from the builddeps server either, since they are +# needed to download the devkit. +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + + + # Test that variable AWK is not empty. + if test "" = "$AWK"; then as_fn_error $? "Could not find awk !" "$LINENO" 5 ; fi + +# Extract the first word of "cat", so it can be a program name with args. +set dummy cat; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CAT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CAT="$CAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CAT=$ac_cv_path_CAT +if test -n "$CAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAT" >&5 +$as_echo "$CAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CAT is not empty. + if test "" = "$CAT"; then as_fn_error $? "Could not find cat !" "$LINENO" 5 ; fi + +# Extract the first word of "chmod", so it can be a program name with args. +set dummy chmod; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CHMOD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CHMOD in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHMOD=$ac_cv_path_CHMOD +if test -n "$CHMOD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5 +$as_echo "$CHMOD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CHMOD is not empty. + if test "" = "$CHMOD"; then as_fn_error $? "Could not find chmod !" "$LINENO" 5 ; fi + +# Extract the first word of "cp", so it can be a program name with args. +set dummy cp; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CP="$CP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CP=$ac_cv_path_CP +if test -n "$CP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5 +$as_echo "$CP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CP is not empty. + if test "" = "$CP"; then as_fn_error $? "Could not find cp !" "$LINENO" 5 ; fi + +# Extract the first word of "cpio", so it can be a program name with args. +set dummy cpio; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CPIO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CPIO in + [\\/]* | ?:[\\/]*) + ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CPIO=$ac_cv_path_CPIO +if test -n "$CPIO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5 +$as_echo "$CPIO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CPIO is not empty. + if test "" = "$CPIO"; then as_fn_error $? "Could not find cpio !" "$LINENO" 5 ; fi + +# Extract the first word of "cut", so it can be a program name with args. +set dummy cut; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CUT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CUT in + [\\/]* | ?:[\\/]*) + ac_cv_path_CUT="$CUT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CUT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CUT=$ac_cv_path_CUT +if test -n "$CUT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUT" >&5 +$as_echo "$CUT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable CUT is not empty. + if test "" = "$CUT"; then as_fn_error $? "Could not find cut !" "$LINENO" 5 ; fi + +# Extract the first word of "date", so it can be a program name with args. +set dummy date; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DATE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DATE in + [\\/]* | ?:[\\/]*) + ac_cv_path_DATE="$DATE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DATE=$ac_cv_path_DATE +if test -n "$DATE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DATE" >&5 +$as_echo "$DATE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable DATE is not empty. + if test "" = "$DATE"; then as_fn_error $? "Could not find date !" "$LINENO" 5 ; fi + +# Extract the first word of "df", so it can be a program name with args. +set dummy df; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DF="$DF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DF=$ac_cv_path_DF +if test -n "$DF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 +$as_echo "$DF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable DF is not empty. + if test "" = "$DF"; then as_fn_error $? "Could not find df !" "$LINENO" 5 ; fi + +# Extract the first word of "diff", so it can be a program name with args. +set dummy diff; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DIFF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DIFF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIFF=$ac_cv_path_DIFF +if test -n "$DIFF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5 +$as_echo "$DIFF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable DIFF is not empty. + if test "" = "$DIFF"; then as_fn_error $? "Could not find diff !" "$LINENO" 5 ; fi + +# Warning echo is really, really unportable!!!!! Different +# behaviour in bash and dash and in a lot of other shells! +# Use printf for serious work! +# Extract the first word of "echo", so it can be a program name with args. +set dummy echo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ECHO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ECHO in + [\\/]* | ?:[\\/]*) + ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ECHO=$ac_cv_path_ECHO +if test -n "$ECHO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5 +$as_echo "$ECHO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable ECHO is not empty. + if test "" = "$ECHO"; then as_fn_error $? "Could not find echo !" "$LINENO" 5 ; fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + + # Test that variable EGREP is not empty. + if test "" = "$EGREP"; then as_fn_error $? "Could not find egrep !" "$LINENO" 5 ; fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + + + # Test that variable FGREP is not empty. + if test "" = "$FGREP"; then as_fn_error $? "Could not find fgrep !" "$LINENO" 5 ; fi + + +# Extract the first word of "find", so it can be a program name with args. +set dummy find; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_FIND+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $FIND in + [\\/]* | ?:[\\/]*) + ac_cv_path_FIND="$FIND" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FIND=$ac_cv_path_FIND +if test -n "$FIND"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5 +$as_echo "$FIND" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable FIND is not empty. + if test "" = "$FIND"; then as_fn_error $? "Could not find find !" "$LINENO" 5 ; fi + + + # Test if find supports -delete + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if find supports -delete" >&5 +$as_echo_n "checking if find supports -delete... " >&6; } + FIND_DELETE="-delete" + + DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) + + echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete + + TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` + if test -f $DELETEDIR/TestIfFindSupportsDelete; then + # No, it does not. + rm $DELETEDIR/TestIfFindSupportsDelete + FIND_DELETE="-exec rm \{\} \+" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + rmdir $DELETEDIR + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + + + # Test that variable GREP is not empty. + if test "" = "$GREP"; then as_fn_error $? "Could not find grep !" "$LINENO" 5 ; fi + +# Extract the first word of "head", so it can be a program name with args. +set dummy head; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HEAD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HEAD in + [\\/]* | ?:[\\/]*) + ac_cv_path_HEAD="$HEAD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HEAD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HEAD=$ac_cv_path_HEAD +if test -n "$HEAD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HEAD" >&5 +$as_echo "$HEAD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable HEAD is not empty. + if test "" = "$HEAD"; then as_fn_error $? "Could not find head !" "$LINENO" 5 ; fi + +# Extract the first word of "ln", so it can be a program name with args. +set dummy ln; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $LN in + [\\/]* | ?:[\\/]*) + ac_cv_path_LN="$LN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LN=$ac_cv_path_LN +if test -n "$LN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5 +$as_echo "$LN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable LN is not empty. + if test "" = "$LN"; then as_fn_error $? "Could not find ln !" "$LINENO" 5 ; fi + +# Extract the first word of "ls", so it can be a program name with args. +set dummy ls; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $LS in + [\\/]* | ?:[\\/]*) + ac_cv_path_LS="$LS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_LS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LS=$ac_cv_path_LS +if test -n "$LS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LS" >&5 +$as_echo "$LS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable LS is not empty. + if test "" = "$LS"; then as_fn_error $? "Could not find ls !" "$LINENO" 5 ; fi + +for ac_prog in gmake make +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_MAKE="$MAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MAKE=$ac_cv_path_MAKE +if test -n "$MAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKE" >&5 +$as_echo "$MAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MAKE" && break +done + + + # Test that variable MAKE is not empty. + if test "" = "$MAKE"; then as_fn_error $? "Could not find make !" "$LINENO" 5 ; fi + +MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[12346789]'` +if test "x$MAKE_VERSION" = x; then + as_fn_error $? "You must use GNU make 3.81 or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure." "$LINENO" 5 +fi +# Extract the first word of "mkdir", so it can be a program name with args. +set dummy mkdir; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MKDIR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MKDIR in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKDIR=$ac_cv_path_MKDIR +if test -n "$MKDIR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5 +$as_echo "$MKDIR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable MKDIR is not empty. + if test "" = "$MKDIR"; then as_fn_error $? "Could not find mkdir !" "$LINENO" 5 ; fi + +# Extract the first word of "mv", so it can be a program name with args. +set dummy mv; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MV+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MV in + [\\/]* | ?:[\\/]*) + ac_cv_path_MV="$MV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MV=$ac_cv_path_MV +if test -n "$MV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5 +$as_echo "$MV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable MV is not empty. + if test "" = "$MV"; then as_fn_error $? "Could not find mv !" "$LINENO" 5 ; fi + +for ac_prog in nawk gawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_NAWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $NAWK in + [\\/]* | ?:[\\/]*) + ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NAWK=$ac_cv_path_NAWK +if test -n "$NAWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5 +$as_echo "$NAWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$NAWK" && break +done + + + # Test that variable NAWK is not empty. + if test "" = "$NAWK"; then as_fn_error $? "Could not find nawk !" "$LINENO" 5 ; fi + +# Extract the first word of "printf", so it can be a program name with args. +set dummy printf; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PRINTF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PRINTF in + [\\/]* | ?:[\\/]*) + ac_cv_path_PRINTF="$PRINTF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PRINTF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PRINTF=$ac_cv_path_PRINTF +if test -n "$PRINTF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRINTF" >&5 +$as_echo "$PRINTF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable PRINTF is not empty. + if test "" = "$PRINTF"; then as_fn_error $? "Could not find printf !" "$LINENO" 5 ; fi + +# Extract the first word of "pwd", so it can be a program name with args. +set dummy pwd; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_THEPWDCMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $THEPWDCMD in + [\\/]* | ?:[\\/]*) + ac_cv_path_THEPWDCMD="$THEPWDCMD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_THEPWDCMD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +THEPWDCMD=$ac_cv_path_THEPWDCMD +if test -n "$THEPWDCMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $THEPWDCMD" >&5 +$as_echo "$THEPWDCMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "rm", so it can be a program name with args. +set dummy rm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_RM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $RM in + [\\/]* | ?:[\\/]*) + ac_cv_path_RM="$RM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RM=$ac_cv_path_RM +if test -n "$RM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 +$as_echo "$RM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable RM is not empty. + if test "" = "$RM"; then as_fn_error $? "Could not find rm !" "$LINENO" 5 ; fi + +RM="$RM -f" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + + # Test that variable SED is not empty. + if test "" = "$SED"; then as_fn_error $? "Could not find sed !" "$LINENO" 5 ; fi + +# Extract the first word of "sh", so it can be a program name with args. +set dummy sh; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_SH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $SH in + [\\/]* | ?:[\\/]*) + ac_cv_path_SH="$SH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SH=$ac_cv_path_SH +if test -n "$SH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH" >&5 +$as_echo "$SH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable SH is not empty. + if test "" = "$SH"; then as_fn_error $? "Could not find sh !" "$LINENO" 5 ; fi + +# Extract the first word of "sort", so it can be a program name with args. +set dummy sort; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_SORT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $SORT in + [\\/]* | ?:[\\/]*) + ac_cv_path_SORT="$SORT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_SORT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SORT=$ac_cv_path_SORT +if test -n "$SORT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SORT" >&5 +$as_echo "$SORT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable SORT is not empty. + if test "" = "$SORT"; then as_fn_error $? "Could not find sort !" "$LINENO" 5 ; fi + +# Extract the first word of "tar", so it can be a program name with args. +set dummy tar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TAR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TAR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAR="$TAR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAR=$ac_cv_path_TAR +if test -n "$TAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5 +$as_echo "$TAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TAR is not empty. + if test "" = "$TAR"; then as_fn_error $? "Could not find tar !" "$LINENO" 5 ; fi + +# Extract the first word of "tail", so it can be a program name with args. +set dummy tail; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TAIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TAIL in + [\\/]* | ?:[\\/]*) + ac_cv_path_TAIL="$TAIL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TAIL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TAIL=$ac_cv_path_TAIL +if test -n "$TAIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAIL" >&5 +$as_echo "$TAIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TAIL is not empty. + if test "" = "$TAIL"; then as_fn_error $? "Could not find tail !" "$LINENO" 5 ; fi + +# Extract the first word of "tee", so it can be a program name with args. +set dummy tee; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TEE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TEE in + [\\/]* | ?:[\\/]*) + ac_cv_path_TEE="$TEE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TEE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TEE=$ac_cv_path_TEE +if test -n "$TEE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEE" >&5 +$as_echo "$TEE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TEE is not empty. + if test "" = "$TEE"; then as_fn_error $? "Could not find tee !" "$LINENO" 5 ; fi + +# Extract the first word of "tr", so it can be a program name with args. +set dummy tr; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TR in + [\\/]* | ?:[\\/]*) + ac_cv_path_TR="$TR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TR=$ac_cv_path_TR +if test -n "$TR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TR" >&5 +$as_echo "$TR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TR is not empty. + if test "" = "$TR"; then as_fn_error $? "Could not find tr !" "$LINENO" 5 ; fi + +# Extract the first word of "touch", so it can be a program name with args. +set dummy touch; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TOUCH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TOUCH in + [\\/]* | ?:[\\/]*) + ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TOUCH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TOUCH=$ac_cv_path_TOUCH +if test -n "$TOUCH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOUCH" >&5 +$as_echo "$TOUCH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable TOUCH is not empty. + if test "" = "$TOUCH"; then as_fn_error $? "Could not find touch !" "$LINENO" 5 ; fi + +# Extract the first word of "wc", so it can be a program name with args. +set dummy wc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_WC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $WC in + [\\/]* | ?:[\\/]*) + ac_cv_path_WC="$WC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_WC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WC=$ac_cv_path_WC +if test -n "$WC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WC" >&5 +$as_echo "$WC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable WC is not empty. + if test "" = "$WC"; then as_fn_error $? "Could not find wc !" "$LINENO" 5 ; fi + +# Extract the first word of "xargs", so it can be a program name with args. +set dummy xargs; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_XARGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $XARGS in + [\\/]* | ?:[\\/]*) + ac_cv_path_XARGS="$XARGS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_XARGS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +XARGS=$ac_cv_path_XARGS +if test -n "$XARGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XARGS" >&5 +$as_echo "$XARGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable XARGS is not empty. + if test "" = "$XARGS"; then as_fn_error $? "Could not find xargs !" "$LINENO" 5 ; fi + +# Extract the first word of "zip", so it can be a program name with args. +set dummy zip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ZIP=$ac_cv_path_ZIP +if test -n "$ZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 +$as_echo "$ZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable ZIP is not empty. + if test "" = "$ZIP"; then as_fn_error $? "Could not find zip !" "$LINENO" 5 ; fi + +# Extract the first word of "unzip", so it can be a program name with args. +set dummy unzip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_UNZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $UNZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNZIP=$ac_cv_path_UNZIP +if test -n "$UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 +$as_echo "$UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable UNZIP is not empty. + if test "" = "$UNZIP"; then as_fn_error $? "Could not find unzip !" "$LINENO" 5 ; fi + +# Extract the first word of "ldd", so it can be a program name with args. +set dummy ldd; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LDD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $LDD in + [\\/]* | ?:[\\/]*) + ac_cv_path_LDD="$LDD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LDD=$ac_cv_path_LDD +if test -n "$LDD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 +$as_echo "$LDD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "x$LDD" = "x"; then + # List shared lib dependencies is used for + # debug output and checking for forbidden dependencies. + # We can build without it. + LDD="true" +fi +# Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $OTOOL in + [\\/]* | ?:[\\/]*) + ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OTOOL=$ac_cv_path_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "x$OTOOL" = "x"; then + OTOOL="true" +fi +# Extract the first word of "readelf", so it can be a program name with args. +set dummy readelf; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_READELF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $READELF in + [\\/]* | ?:[\\/]*) + ac_cv_path_READELF="$READELF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READELF=$ac_cv_path_READELF +if test -n "$READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +$as_echo "$READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "expr", so it can be a program name with args. +set dummy expr; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_EXPR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $EXPR in + [\\/]* | ?:[\\/]*) + ac_cv_path_EXPR="$EXPR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_EXPR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +EXPR=$ac_cv_path_EXPR +if test -n "$EXPR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPR" >&5 +$as_echo "$EXPR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable EXPR is not empty. + if test "" = "$EXPR"; then as_fn_error $? "Could not find expr !" "$LINENO" 5 ; fi + +# Extract the first word of "file", so it can be a program name with args. +set dummy file; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_FILE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $FILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_FILE="$FILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_FILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FILE=$ac_cv_path_FILE +if test -n "$FILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5 +$as_echo "$FILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Test that variable FILE is not empty. + if test "" = "$FILE"; then as_fn_error $? "Could not find file !" "$LINENO" 5 ; fi + +# Extract the first word of "hg", so it can be a program name with args. +set dummy hg; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HG in + [\\/]* | ?:[\\/]*) + ac_cv_path_HG="$HG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HG=$ac_cv_path_HG +if test -n "$HG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 +$as_echo "$HG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + +# Setup builddeps, for automatic downloading of tools we need. +# This is needed before we can call BDEPS_CHECK_MODULE, which is done in +# boot-jdk setup, but we need to have basic tools setup first. + + +# Check whether --with-builddeps-conf was given. +if test "${with_builddeps_conf+set}" = set; then : + withval=$with_builddeps_conf; +fi + + + +# Check whether --with-builddeps-server was given. +if test "${with_builddeps_server+set}" = set; then : + withval=$with_builddeps_server; +fi + + + +# Check whether --with-builddeps-dir was given. +if test "${with_builddeps_dir+set}" = set; then : + withval=$with_builddeps_dir; +else + with_builddeps_dir=/localhome/builddeps +fi + + + +# Check whether --with-builddeps-group was given. +if test "${with_builddeps_group+set}" = set; then : + withval=$with_builddeps_group; +fi + + +# Check whether --enable-list-builddeps was given. +if test "${enable_list_builddeps+set}" = set; then : + enableval=$enable_list_builddeps; LIST_BUILDDEPS="${enableval}" +else + LIST_BUILDDEPS='no' +fi + + +if test "x$LIST_BUILDDEPS" = xyes; then + echo + echo List of build dependencies known to the configure script, + echo that can be used in builddeps.conf files: + cat $AUTOCONF_DIR/*.ac $AUTOCONF_DIR/*.m4 | grep BDEPS_CHECK_MODULE\( | cut -f 2 -d ',' | tr -d ' ' | sort + echo + exit 1 +fi + + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + if test "x$with_builddeps_conf" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supplied builddeps configuration file" >&5 +$as_echo_n "checking for supplied builddeps configuration file... " >&6; } + builddepsfile=$with_builddeps_conf + if test -s $builddepsfile; then + . $builddepsfile + { $as_echo "$as_me:${as_lineno-$LINENO}: result: loaded!" >&5 +$as_echo "loaded!" >&6; } + else + as_fn_error $? "The given builddeps conf file $with_builddeps_conf could not be loaded!" "$LINENO" 5 + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for builddeps.conf files in sources..." >&5 +$as_echo_n "checking for builddeps.conf files in sources...... " >&6; } + builddepsfile=`mktemp` + touch $builddepsfile + # Put all found confs into a single file. + find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile + # Source the file to acquire the variables + if test -s $builddepsfile; then + . $builddepsfile + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found at least one!" >&5 +$as_echo "found at least one!" >&6; } + else + as_fn_error $? "Could not find any builddeps.conf at all!" "$LINENO" 5 + fi + fi + # Create build and target names that use _ instead of "-" and ".". + # This is necessary to use them in variable names. + build_var=`echo ${OPENJDK_BUILD_SYSTEM} | tr '-' '_' | tr '.' '_'` + target_var=`echo ${OPENJDK_TARGET_SYSTEM} | tr '-' '_' | tr '.' '_'` + # Extract rewrite information for build and target + eval rewritten_build=\${REWRITE_${build_var}} + if test "x$rewritten_build" = x; then + rewritten_build=${OPENJDK_BUILD_SYSTEM} + echo Build stays the same $rewritten_build + else + echo Rewriting build for builddeps into $rewritten_build + fi + eval rewritten_target=\${REWRITE_${target_var}} + if test "x$rewritten_target" = x; then + rewritten_target=${OPENJDK_TARGET_SYSTEM} + echo Target stays the same $rewritten_target + else + echo Rewriting target for builddeps into $rewritten_target + fi + rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` + rewritten_target_var=`echo ${rewritten_target} | tr '-' '_' | tr '.' '_'` + fi + for ac_prog in 7z unzip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BDEPS_UNZIP"; then + ac_cv_prog_BDEPS_UNZIP="$BDEPS_UNZIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_BDEPS_UNZIP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BDEPS_UNZIP=$ac_cv_prog_BDEPS_UNZIP +if test -n "$BDEPS_UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_UNZIP" >&5 +$as_echo "$BDEPS_UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BDEPS_UNZIP" && break +done + + if test "x$BDEPS_UNZIP" = x7z; then + BDEPS_UNZIP="7z x" + fi + + for ac_prog in wget lftp ftp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BDEPS_FTP"; then + ac_cv_prog_BDEPS_FTP="$BDEPS_FTP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_BDEPS_FTP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BDEPS_FTP=$ac_cv_prog_BDEPS_FTP +if test -n "$BDEPS_FTP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_FTP" >&5 +$as_echo "$BDEPS_FTP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BDEPS_FTP" && break +done + + + +# Check if pkg-config is available. + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi + +############################################################################### +# +# Determine OpenJDK build and target platforms. +# +############################################################################### + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5 ;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +# Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target" +# is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the +# product you're building. The target of this build is called "host". Since this is confusing to most people, we +# have not adopted that system, but use "target" as the platform we are building for. In some places though we need +# to use the configure naming style. + + + + + +# Check whether --with-target-bits was given. +if test "${with_target_bits+set}" = set; then : + withval=$with_target_bits; +fi + + +if test "x$with_target_bits" != x && \ + test "x$with_target_bits" != x32 && \ + test "x$with_target_bits" != x64 ; then + as_fn_error $? "--with-target-bits can only be 32 or 64, you specified $with_target_bits!" "$LINENO" 5 +fi +# Translate the standard cpu-vendor-kernel-os quadruplets into +# the new TARGET_.... and BUILD_... and the legacy names used by +# the openjdk build. +# It uses $host_os $host_cpu $build_os $build_cpu and $with_target_bits + + # Expects $host_os $host_cpu $build_os and $build_cpu + # and $with_target_bits to have been setup! + # + # Translate the standard triplet(quadruplet) definition + # of the target/build system into + # OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows + # OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince + # OPENJDK_TARGET_OS_API=posix,winapi + # + # OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 + # OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm + # OPENJDK_TARGET_CPU_BITS=32,64 + # OPENJDK_TARGET_CPU_ENDIAN=big,little + # + # The same values are setup for BUILD_... + # + # And the legacy variables, for controlling the old makefiles. + # LEGACY_OPENJDK_TARGET_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... + # LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... + # LEGACY_OPENJDK_TARGET_CPU3=sparcv9,amd64 (but only on solaris) + # LEGACY_OPENJDK_TARGET_OS_API=solaris,windows + # + # We also copy the autoconf trip/quadruplet + # verbatim to OPENJDK_TARGET_SYSTEM (from the autoconf "host") and OPENJDK_BUILD_SYSTEM + OPENJDK_TARGET_SYSTEM="$host" + OPENJDK_BUILD_SYSTEM="$build" + + + + + + case "$host_os" in + *linux*) + VAR_OS=linux + VAR_OS_API=posix + VAR_OS_FAMILY=gnu + ;; + *solaris*) + VAR_OS=solaris + VAR_OS_API=posix + VAR_OS_FAMILY=sysv + ;; + *darwin*) + VAR_OS=macosx + VAR_OS_API=posix + VAR_OS_FAMILY=bsd + ;; + *bsd*) + VAR_OS=bsd + VAR_OS_API=posix + VAR_OS_FAMILY=bsd + ;; + *cygwin*|*windows*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_FAMILY=windows + ;; + *) + as_fn_error $? "unsupported operating system $host_os" "$LINENO" 5 + ;; + esac + + OPENJDK_TARGET_OS="$VAR_OS" + OPENJDK_TARGET_OS_FAMILY="$VAR_OS_FAMILY" + OPENJDK_TARGET_OS_API="$VAR_OS_API" + + + + + + if test "x$OPENJDK_TARGET_OS_API" = xposix; then + LEGACY_OPENJDK_TARGET_OS_API="solaris" + fi + if test "x$OPENJDK_TARGET_OS_API" = xwinapi; then + LEGACY_OPENJDK_TARGET_OS_API="windows" + fi + + + + + # First argument is the cpu name from the trip/quad + case "$host_cpu" in + x86_64) + VAR_CPU=x64 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=amd64 + ;; + i?86) + VAR_CPU=ia32 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=i586 + ;; + alpha*) + VAR_CPU=alpha + VAR_CPU_ARCH=alpha + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=alpha + ;; + arm*) + VAR_CPU=arm + VAR_CPU_ARCH=arm + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=arm + ;; + mips) + VAR_CPU=mips + VAR_CPU_ARCH=mips + VAR_CPU_BITS=woot + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=mips + ;; + mipsel) + VAR_CPU=mipsel + VAR_CPU_ARCH=mips + VAR_CPU_BITS=woot + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=mipsel + ;; + powerpc) + VAR_CPU=ppc + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=ppc + ;; + powerpc64) + VAR_CPU=ppc64 + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=ppc64 + ;; + sparc) + VAR_CPU=sparc + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=sparc + ;; + sparc64) + VAR_CPU=sparcv9 + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=sparcv9 + ;; + s390) + VAR_CPU=s390 + VAR_CPU_ARCH=s390 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=s390 + VAR_LEGACY_CPU=s390 + ;; + s390x) + VAR_CPU=s390x + VAR_CPU_ARCH=s390 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=s390x + ;; + *) + as_fn_error $? "unsupported cpu $host_cpu" "$LINENO" 5 + ;; + esac + + # Workaround cygwin not knowing about 64 bit. + if test "x$VAR_OS" = "xwindows"; then + if test "x$PROCESSOR_IDENTIFIER" != "x"; then + PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '` + case "$PROC_ARCH" in + intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) + VAR_CPU=x64 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=amd64 + ;; + esac + fi + fi + + # on solaris x86...default seems to be 32-bit + if test "x$VAR_OS" = "xsolaris" && \ + test "x$with_target_bits" = "x" && \ + test "x$VAR_CPU_ARCH" = "xx86" + then + with_target_bits=32 + fi + + if test "x$VAR_CPU_ARCH" = "xx86"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=x64 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=amd64 + fi + if test "x$with_target_bits" = "x32"; then + VAR_CPU=ia32 + VAR_CPU_BITS=32 + VAR_LEGACY_CPU=i586 + fi + fi + + if test "x$VAR_CPU_ARCH" = "xsparc"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=sparcv9 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=sparcv9 + fi + fi + + OPENJDK_TARGET_CPU="$VAR_CPU" + OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH" + OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS" + OPENJDK_TARGET_CPU_ENDIAN="$VAR_CPU_ENDIAN" + + + + + + + # Also store the legacy naming of the cpu. + # Ie i586 and amd64 instead of ia32 and x64 + LEGACY_OPENJDK_TARGET_CPU1="$VAR_LEGACY_CPU" + + + # And the second legacy naming of the cpu. + # Ie i386 and amd64 instead of ia32 and x64. + LEGACY_OPENJDK_TARGET_CPU2="$LEGACY_OPENJDK_TARGET_CPU1" + if test "x$LEGACY_OPENJDK_TARGET_CPU1" = xi586; then + LEGACY_OPENJDK_TARGET_CPU2=i386 + fi + + + # And the third legacy naming of the cpu. + # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris. + LEGACY_OPENJDK_TARGET_CPU3="" + if test "x$OPENJDK_TARGET_CPU" = xx64; then + LEGACY_OPENJDK_TARGET_CPU3=amd64 + fi + if test "x$OPENJDK_TARGET_CPU" = xsparcv9; then + LEGACY_OPENJDK_TARGET_CPU3=sparcv9 + fi + + + + + + case "$build_os" in + *linux*) + VAR_OS=linux + VAR_OS_API=posix + VAR_OS_FAMILY=gnu + ;; + *solaris*) + VAR_OS=solaris + VAR_OS_API=posix + VAR_OS_FAMILY=sysv + ;; + *darwin*) + VAR_OS=macosx + VAR_OS_API=posix + VAR_OS_FAMILY=bsd + ;; + *bsd*) + VAR_OS=bsd + VAR_OS_API=posix + VAR_OS_FAMILY=bsd + ;; + *cygwin*|*windows*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_FAMILY=windows + ;; + *) + as_fn_error $? "unsupported operating system $build_os" "$LINENO" 5 + ;; + esac + + OPENJDK_BUILD_OS="$VAR_OS" + OPENJDK_BUILD_OS_FAMILY="$VAR_OS_FAMILY" + OPENJDK_BUILD_OS_API="$VAR_OS_API" + + + + + + if test "x$OPENJDK_BUILD_OS_API" = xposix; then + LEGACY_OPENJDK_BUILD_OS_API="solaris" + fi + if test "x$OPENJDK_BUILD_OS_API" = xwinapi; then + LEGACY_OPENJDK_BUILD_OS_API="windows" + fi + + + + + # First argument is the cpu name from the trip/quad + case "$build_cpu" in + x86_64) + VAR_CPU=x64 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=amd64 + ;; + i?86) + VAR_CPU=ia32 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=i586 + ;; + alpha*) + VAR_CPU=alpha + VAR_CPU_ARCH=alpha + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=alpha + ;; + arm*) + VAR_CPU=arm + VAR_CPU_ARCH=arm + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + VAR_LEGACY_CPU=arm + ;; + mips) + VAR_CPU=mips + VAR_CPU_ARCH=mips + VAR_CPU_BITS=woot + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=mips + ;; + mipsel) + VAR_CPU=mipsel + VAR_CPU_ARCH=mips + VAR_CPU_BITS=woot + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=mipsel + ;; + powerpc) + VAR_CPU=ppc + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=ppc + ;; + powerpc64) + VAR_CPU=ppc64 + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=ppc64 + ;; + sparc) + VAR_CPU=sparc + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=sparc + ;; + sparc64) + VAR_CPU=sparcv9 + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + VAR_LEGACY_CPU=sparcv9 + ;; + s390) + VAR_CPU=s390 + VAR_CPU_ARCH=s390 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=s390 + VAR_LEGACY_CPU=s390 + ;; + s390x) + VAR_CPU=s390x + VAR_CPU_ARCH=s390 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=woot + VAR_LEGACY_CPU=s390x + ;; + *) + as_fn_error $? "unsupported cpu $build_cpu" "$LINENO" 5 + ;; + esac + + # Workaround cygwin not knowing about 64 bit. + if test "x$VAR_OS" = "xwindows"; then + if test "x$PROCESSOR_IDENTIFIER" != "x"; then + PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '` + case "$PROC_ARCH" in + intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) + VAR_CPU=x64 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=amd64 + ;; + esac + fi + fi + + # on solaris x86...default seems to be 32-bit + if test "x$VAR_OS" = "xsolaris" && \ + test "x$with_target_bits" = "x" && \ + test "x$VAR_CPU_ARCH" = "xx86" + then + with_target_bits=32 + fi + + if test "x$VAR_CPU_ARCH" = "xx86"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=x64 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=amd64 + fi + if test "x$with_target_bits" = "x32"; then + VAR_CPU=ia32 + VAR_CPU_BITS=32 + VAR_LEGACY_CPU=i586 + fi + fi + + if test "x$VAR_CPU_ARCH" = "xsparc"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=sparcv9 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=sparcv9 + fi + fi + + OPENJDK_BUILD_CPU="$VAR_CPU" + OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" + OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" + OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" + + + + + + + # Also store the legacy naming of the cpu. + # Ie i586 and amd64 instead of ia32 and x64 + LEGACY_OPENJDK_BUILD_CPU1="$VAR_LEGACY_CPU" + + + # And the second legacy naming of the cpu. + # Ie i386 and amd64 instead of ia32 and x64. + LEGACY_OPENJDK_BUILD_CPU2="$LEGACY_OPENJDK_BUILD_CPU1" + if test "x$LEGACY_OPENJDK_BUILD_CPU1" = xi586; then + LEGACY_OPENJDK_BUILD_CPU2=i386 + fi + + + # And the third legacy naming of the cpu. + # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris. + LEGACY_OPENJDK_BUILD_CPU3="" + if test "x$OPENJDK_BUILD_CPU" = xx64; then + LEGACY_OPENJDK_BUILD_CPU3=amd64 + fi + if test "x$OPENJDK_BUILD_CPU" = xsparcv9; then + LEGACY_OPENJDK_BUILD_CPU3=sparcv9 + fi + + + + if test "x$OPENJDK_TARGET_OS" != xsolaris; then + LEGACY_OPENJDK_TARGET_CPU3="" + LEGACY_OPENJDK_BUILD_CPU3="" + fi + + # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_OPENJDK_TARGET_CPU1) ... + if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$OPENJDK_TARGET_CPU" = xx64; then + LEGACY_OPENJDK_TARGET_CPU1="x86_64" + fi + + + if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then + REQUIRED_OS_NAME=SunOS + REQUIRED_OS_VERSION=5.10 + fi + if test "x$OPENJDK_TARGET_OS" = "xlinux"; then + REQUIRED_OS_NAME=Linux + REQUIRED_OS_VERSION=2.6 + fi + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + REQUIRED_OS_NAME=Windows + REQUIRED_OS_VERSION=5.1 + fi + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + REQUIRED_OS_NAME=Darwin + REQUIRED_OS_VERSION=11.2 + fi + + + + + + +# The LEGACY_OPENJDK_TARGET_CPU3 is the setting for ISA_DIR. +if test "x$LEGACY_OPENJDK_TARGET_CPU3" != x; then + LEGACY_OPENJDK_TARGET_CPU3="/${LEGACY_OPENJDK_TARGET_CPU3}" +fi + +# Now the following vars are defined. +# OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows +# OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince +# OPENJDK_TARGET_OS_API=posix,winapi +# +# OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 +# OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm +# OPENJDK_TARGET_CPU_BITS=32,64 +# OPENJDK_TARGET_CPU_ENDIAN=big,little +# +# There is also a: +# LEGACY_OPENJDK_TARGET_CPU1=i586,amd64,.... # used to set the old var ARCH +# LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,.... # used to set the old var LIBARCH +# LEGACY_OPENJDK_TARGET_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris +# There was also a BUILDARCH that had i486,amd64,... but we do not use that +# in the new build. +# LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # used to select source roots + + +############################################################################### + +# Note that this is the build platform OS version! + +OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" +OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" +OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" +OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" + + + + + +# With knowledge of the build platform, setup more basic things. + +# For cygwin we need cygpath first, since it is used everywhere. +# Extract the first word of "cygpath", so it can be a program name with args. +set dummy cygpath; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CYGPATH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CYGPATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CYGPATH=$ac_cv_path_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +PATH_SEP=":" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$CYGPATH" = x; then + as_fn_error $? "Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path" "$LINENO" 5 + fi + PATH_SEP=";" +fi + + + +if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then + # Add extra search paths on solaris for utilities like ar and as etc... + PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin" +fi + + +############################################################################### +# +# Determine OpenJDK variants, options and version numbers. +# +############################################################################### + +# We need build & target for this. + +############################################################################### +# +# Check which variant of the JDK that we want to build. +# Currently we have: +# normal: standard edition +# embedded: cut down to a smaller footprint +# +# Effectively the JDK variant gives a name to a specific set of +# modules to compile into the JDK. In the future, these modules +# might even be Jigsaw modules. +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of the JDK to build" >&5 +$as_echo_n "checking which variant of the JDK to build... " >&6; } + +# Check whether --with-jdk-variant was given. +if test "${with_jdk_variant+set}" = set; then : + withval=$with_jdk_variant; +fi + + +if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then + JAVASE_EMBEDDED="" + MINIMIZE_RAM_USAGE="" + JDK_VARIANT="normal" +elif test "x$with_jdk_variant" = xembedded; then + JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true" + MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" + JDK_VARIANT="embedded" +else + as_fn_error $? "The available JDK variants are: normal, embedded" "$LINENO" 5 +fi + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JDK_VARIANT" >&5 +$as_echo "$JDK_VARIANT" >&6; } + + + +############################################################################### +# +# Check which variants of the JVM that we want to build. +# Currently we have: +# server: normal interpreter and a tiered C1/C2 compiler +# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms) +# kernel: kernel footprint JVM that passes the TCK without major performance problems, +# ie normal interpreter and C1, only the serial GC, kernel jvmti etc +# zero: no machine code interpreter, no compiler +# zeroshark: zero interpreter and shark/llvm compiler backend +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM that should be built" >&5 +$as_echo_n "checking which variants of the JVM that should be built... " >&6; } + +# Check whether --with-jvm-variants was given. +if test "${with_jvm_variants+set}" = set; then : + withval=$with_jvm_variants; +fi + + +if test "x$with_jvm_variants" = x; then + if test "x$JDK_VARIANT" = xembedded; then + with_jvm_variants="client" + else + with_jvm_variants="server" + fi +fi + +JVM_VARIANTS=",$with_jvm_variants," +TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` + +if test "x$TEST_VARIANTS" != "x,"; then + as_fn_error $? "The available JVM variants are: server, client, kernel, zero, zeroshark" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_jvm_variants" >&5 +$as_echo "$with_jvm_variants" >&6; } + +JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'` +JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'` +JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` +JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` +JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` + +if test "x$JVM_VARIANT_CLIENT" = xtrue; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + as_fn_error $? "You cannot build a client JVM for a 64-bit machine." "$LINENO" 5 + fi +fi +if test "x$JVM_VARIANT_KERNEL" = xtrue; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + as_fn_error $? "You cannot build a kernel JVM for a 64-bit machine." "$LINENO" 5 + fi +fi + +# Replace the commas with AND for use in the build directory name. +ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` +COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` +if test "x$COUNT_VARIANTS" != "x,1"; then + BUILDING_MULTIPLE_JVM_VARIANTS=yes +else + BUILDING_MULTIPLE_JVM_VARIANTS=no +fi + + + + + + + + + + + +############################################################################### +# +# Set the debug level +# release: no debug information, all optimizations, no asserts. +# fastdebug: debug information (-g), all optimizations, all asserts +# slowdebug: debug information (-g), no optimizations, all asserts +# +DEBUG_LEVEL="release" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which debug level to use" >&5 +$as_echo_n "checking which debug level to use... " >&6; } +# Check whether --enable-debug was given. +if test "${enable_debug+set}" = set; then : + enableval=$enable_debug; + ENABLE_DEBUG="${enableval}" + DEBUG_LEVEL="fastdebug" + +else + ENABLE_DEBUG="no" +fi + + + +# Check whether --with-debug-level was given. +if test "${with_debug_level+set}" = set; then : + withval=$with_debug_level; + DEBUG_LEVEL="${withval}" + if test "x$ENABLE_DEBUG" = xyes; then + as_fn_error $? "You cannot use both --enable-debug and --with-debug-level at the same time." "$LINENO" 5 + fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEBUG_LEVEL" >&5 +$as_echo "$DEBUG_LEVEL" >&6; } + +if test "x$DEBUG_LEVEL" != xrelease && \ + test "x$DEBUG_LEVEL" != xfastdebug && \ + test "x$DEBUG_LEVEL" != xslowdebug; then + as_fn_error $? "Allowed debug levels are: release, fastdebug and slowdebug" "$LINENO" 5 +fi + + +############################################################################### +# +# Setup legacy vars/targets and new vars to deal with different debug levels. +# + +case $DEBUG_LEVEL in + release ) + VARIANT="OPT" + FASTDEBUG="false" + DEBUG_CLASSFILES="false" + BUILD_VARIANT_RELEASE="" + HOTSPOT_DEBUG_LEVEL="product" + HOTSPOT_EXPORT="product" + ;; + fastdebug ) + VARIANT="DBG" + FASTDEBUG="true" + DEBUG_CLASSFILES="true" + BUILD_VARIANT_RELEASE="-fastdebug" + HOTSPOT_DEBUG_LEVEL="fastdebug" + HOTSPOT_EXPORT="fastdebug" + ;; + slowdebug ) + VARIANT="DBG" + FASTDEBUG="false" + DEBUG_CLASSFILES="true" + BUILD_VARIANT_RELEASE="-debug" + HOTSPOT_DEBUG_LEVEL="jvmg" + HOTSPOT_EXPORT="debug" + ;; +esac + +##### +# Generate the legacy makefile targets for hotspot. +# The hotspot api for selecting the build artifacts, really, needs to be improved. +# +HOTSPOT_TARGET="" + +if test "x$JVM_VARIANT_SERVER" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} " +fi + +if test "x$JVM_VARIANT_CLIENT" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 " +fi + +if test "x$JVM_VARIANT_KERNEL" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel " +fi + +if test "x$JVM_VARIANT_ZERO" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero " +fi + +if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " +fi + +HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" + +##### + + + + + + + + + +############################################################################### +# +# Should we build only OpenJDK even if closed sources are present? +# +# Check whether --enable-openjdk-only was given. +if test "${enable_openjdk_only+set}" = set; then : + enableval=$enable_openjdk_only; +fi + + +if test "x$enable_openjdk_only" = "xyes"; then + OPENJDK=true +elif test "x$enable_openjdk_only" = "xno"; then + OPENJDK=false +elif test -d "$SRC_ROOT/jdk/src/closed"; then + OPENJDK=false +else + OPENJDK=true +fi + +if test "x$OPENJDK" = "xtrue"; then + SET_OPENJDK=OPENJDK=true +fi + + + +############################################################################### +# +# JIGSAW or not. The JIGSAW variable is used during the intermediate +# stage when we are building both the old style JDK and the new style modularized JDK. +# When the modularized JDK is finalized, this option will go away. +# +# Check whether --enable-jigsaw was given. +if test "${enable_jigsaw+set}" = set; then : + enableval=$enable_jigsaw; +fi + + +if test "x$enable_jigsaw" = "xyes"; then + JIGSAW=true +else + JIGSAW=false +fi + + +############################################################################### +# +# Should we build a JDK/JVM with headful support (ie a graphical ui)? +# We always build headless support. +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking headful support" >&5 +$as_echo_n "checking headful support... " >&6; } +# Check whether --enable-headful was given. +if test "${enable_headful+set}" = set; then : + enableval=$enable_headful; SUPPORT_HEADFUL=${enable_headful} +else + SUPPORT_HEADFUL=yes +fi + + +SUPPORT_HEADLESS=yes +BUILD_HEADLESS="BUILD_HEADLESS:=true" + +if test "x$SUPPORT_HEADFUL" = xyes; then + # We are building both headful and headless. + BUILD_HEADLESS_ONLY="" + headful_msg="inlude support for both headful and headless" +fi + +if test "x$SUPPORT_HEADFUL" = xno; then + # Thus we are building headless only. + BUILD_HEADLESS="BUILD_HEADLESS:=true" + BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true" + headful_msg="headless only" +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $headful_msg" >&5 +$as_echo "$headful_msg" >&6; } + + + + + + +############################################################################### +# +# Should we run the painfully slow javadoc tool? +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build documentation" >&5 +$as_echo_n "checking whether to build documentation... " >&6; } +# Check whether --enable-docs was given. +if test "${enable_docs+set}" = set; then : + enableval=$enable_docs; ENABLE_DOCS="${enableval}" +else + ENABLE_DOCS='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_DOCS" >&5 +$as_echo "$ENABLE_DOCS" >&6; } + +GENERATE_DOCS=false +if test "x$ENABLE_DOCS" = xyes; then + GENERATE_DOCS=true +fi + + +############################################################################### +# +# Should we compile nimbus swing L&F? We can probably remove this option +# since nimbus is officially part of javax now. +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build nimbus L&F" >&5 +$as_echo_n "checking whether to build nimbus L&F... " >&6; } +# Check whether --enable-nimbus was given. +if test "${enable_nimbus+set}" = set; then : + enableval=$enable_nimbus; ENABLE_NIMBUS="${enableval}" +else + ENABLE_NIMBUS='yes' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_NIMBUS" >&5 +$as_echo "$ENABLE_NIMBUS" >&6; } +DISABLE_NIMBUS= +if test "x$ENABLE_NIMBUS" = xno; then + DISABLE_NIMBUS=true +fi + + +# Control wether Hotspot runs Queens test after build. +# Check whether --enable-hotspot-test-in-build was given. +if test "${enable_hotspot_test_in_build+set}" = set; then : + enableval=$enable_hotspot_test_in_build; +else + enable_hotspot_test_in_build=no +fi + +if test "x$enable_hotspot_test_in_build" = "xyes"; then + TEST_IN_BUILD=true +else + TEST_IN_BUILD=false +fi + + +############################################################################### +# +# Choose cacerts source file +# + +# Check whether --with-cacerts-file was given. +if test "${with_cacerts_file+set}" = set; then : + withval=$with_cacerts_file; +fi + +if test "x$with_cacerts_file" != x; then + CACERTS_FILE=$with_cacerts_file +else + if test "x$OPENJDK" = "xtrue"; then + CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts + else + CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal + fi +fi + + +############################################################################### +# +# Compress jars +# +COMPRESS_JARS=false + +# default for embedded is yes... +if test "x$JDK_VARIANT" = "xembedded"; then + COMPRESS_JARS=true +fi + + +############################################################################### +# +# Should we compile JFR +# default no, except for on closed-jdk and !embedded +# +ENABLE_JFR=no + +# Is the JFR source present + +# +# For closed && !embedded default is yes if the source is present +# +if test "x${OPENJDK}" != "xtrue" && test "x$JDK_VARIANT" != "xembedded" && test -d "$SRC_ROOT/jdk/src/closed/share/native/oracle/jfr"; then + ENABLE_JFR=yes +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build jfr" >&5 +$as_echo_n "checking whether to build jfr... " >&6; } +# Check whether --enable-jfr was given. +if test "${enable_jfr+set}" = set; then : + enableval=$enable_jfr; +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ENABLE_JFR}" >&5 +$as_echo "${ENABLE_JFR}" >&6; } + +if test "x$ENABLE_JFR" = "xyes"; then + ENABLE_JFR=true +elif test "x$ENABLE_JFR" = "xno"; then + ENABLE_JFR=false +else + as_fn_error $? "Invalid argument to --enable-jfr" "$LINENO" 5 +fi + + + + +# Source the version numbers +. $AUTOCONF_DIR/version.numbers +if test "x$OPENJDK" = "xfalse"; then + . $AUTOCONF_DIR/closed.version.numbers +fi +# Now set the JDK version, milestone, build number etc. + + + + + + + + + + + + +COPYRIGHT_YEAR=`date +'%Y'` + + +RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX" + + +if test "x$JDK_UPDATE_VERSION" != x; then + JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}" +else + JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}" +fi + + +if test "x$MILESTONE" != x; then + RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}" +else + RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}" +fi + + +if test "x$JDK_BUILD_NUMBER" != x; then + FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}" +else + JDK_BUILD_NUMBER=b00 + BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` + # Avoid [:alnum:] since it depends on the locale. + CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` + USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` + FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" +fi + +COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` + + + +# To properly create a configuration name, we need to have the OpenJDK target +# and options (variants and debug level) parsed. + + + +# Check whether --with-conf-name was given. +if test "${with_conf_name+set}" = set; then : + withval=$with_conf_name; CONF_NAME=${with_conf_name} +fi + + +# Test from where we are running configure, in or outside of src root. +if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then + # We are running configure from the src root. + # Create a default ./build/target-variant-debuglevel output root. + if test "x${CONF_NAME}" = x; then + CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" + fi + OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" + mkdir -p "$OUTPUT_ROOT" + if test ! -d "$OUTPUT_ROOT"; then + as_fn_error $? "Could not create build directory $OUTPUT_ROOT" "$LINENO" 5 + fi +else + # We are running configure from outside of the src dir. + # Then use the current directory as output dir! + # If configuration is situated in normal build directory, just use the build + # directory name as configuration name, otherwise use the complete path. + if test "x${CONF_NAME}" = x; then + CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` + fi + OUTPUT_ROOT="$CURDIR" +fi + + + # Fail with message the path to the output root if var OUTPUT_ROOT contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$OUTPUT_ROOT" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + OUTPUT_ROOT=`$CYGPATH -s -m -a "$OUTPUT_ROOT"` + OUTPUT_ROOT=`$CYGPATH -u "$OUTPUT_ROOT"` + else + as_fn_error $? "You cannot have spaces in the path to the output root! \"$OUTPUT_ROOT\"" "$LINENO" 5 + fi + fi + + +SPEC=$OUTPUT_ROOT/spec.gmk + +CONF_NAME=$CONF_NAME + +OUTPUT_ROOT=$OUTPUT_ROOT + + +# Most of the probed defines are put into config.h +ac_config_headers="$ac_config_headers $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" + +# The spec.gmk file contains all variables for the make system. +ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" + +# The spec.sh file contains variables for compare{images|-objects}.sh scrips. +ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in" + +# The generated Makefile knows where the spec.gmk is and where the source is. +# You can run make from the OUTPUT_ROOT, or from the top-level Makefile +# which will look for generated configurations +ac_config_files="$ac_config_files $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" + + +# Save the arguments given to us +echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments + + +############################################################################### +# +# Setup BootJDK, used to bootstrap the build. +# +############################################################################### + + +BOOT_JDK_FOUND=no + +# Check whether --with-boot-jdk was given. +if test "${with_boot_jdk+set}" = set; then : + withval=$with_boot_jdk; +fi + + +if test "x$with_boot_jdk" != x; then + BOOT_JDK=$with_boot_jdk + BOOT_JDK_FOUND=yes +fi +if test "x$BOOT_JDK_FOUND" = xno; then + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_boot-jdk_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_boot-jdk_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_boot-jdk_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The boot-jdk comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_boot-jdk} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for boot-jdk" >&5 +$as_echo "$as_me: Using builddeps $resource for boot-jdk" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# boot-jdk is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency boot-jdk from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency boot-jdk from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/boot-jdk.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_boot-jdk_ROOT} + thecflags=${builddep_boot-jdk_CFLAGS} + thelibs=${builddep_boot-jdk_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency boot-jdk" "$LINENO" 5 + fi + BOOT_JDK=$depdir + if test "x$theroot" != x; then + BOOT_JDK="$theroot" + fi + if test "x$thecflags" != x; then + BOOT_JDK_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + BOOT_JDK_LIBS="$thelibs" + fi + BOOT_JDK_FOUND=yes + else BOOT_JDK_FOUND=no + + fi + else BOOT_JDK_FOUND=no + + fi + +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + if test "x$JAVA_HOME" != x; then + if test ! -d "$JAVA_HOME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Your JAVA_HOME points to a non-existing directory!" >&5 +$as_echo "$as_me: Your JAVA_HOME points to a non-existing directory!" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi + # Aha, the user has set a JAVA_HOME + # let us use that as the Boot JDK. + BOOT_JDK="$JAVA_HOME" + BOOT_JDK_FOUND=yes + # To be on the safe side, lets check that it is a JDK. + if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then + JAVAC="$BOOT_JDK/bin/javac" + JAVA="$BOOT_JDK/bin/java" + BOOT_JDK_FOUND=yes + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=$JAVA_HOME" >&5 +$as_echo "$as_me: Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=$JAVA_HOME" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + # Extract the first word of "javac", so it can be a program name with args. +set dummy javac; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_JAVAC_CHECK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $JAVAC_CHECK in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVAC_CHECK="$JAVAC_CHECK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_JAVAC_CHECK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVAC_CHECK=$ac_cv_path_JAVAC_CHECK +if test -n "$JAVAC_CHECK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC_CHECK" >&5 +$as_echo "$JAVAC_CHECK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "java", so it can be a program name with args. +set dummy java; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_JAVA_CHECK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $JAVA_CHECK in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVA_CHECK=$ac_cv_path_JAVA_CHECK +if test -n "$JAVA_CHECK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5 +$as_echo "$JAVA_CHECK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + BINARY="$JAVAC_CHECK" + if test "x$JAVAC_CHECK" = x; then + BINARY="$JAVA_CHECK" + fi + if test "x$BINARY" != x; then + # So there is a java(c) binary, it might be part of a JDK. + # Lets find the JDK/JRE directory by following symbolic links. + # Linux/GNU systems often have links from /usr/bin/java to + # /etc/alternatives/java to the real JDK binary. + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$BINARY" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$BINARY"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + BINARY="$tmp" + + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + # Extract the first word of "readlink", so it can be a program name with args. +set dummy readlink; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_READLINK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $READLINK in + [\\/]* | ?:[\\/]*) + ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READLINK=$ac_cv_path_READLINK +if test -n "$READLINK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 +$as_echo "$READLINK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | grep GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + BINARY=`$READLINK -f $BINARY` + else + STARTDIR=$PWD + COUNTER=0 + DIR=`dirname $BINARY` + FIL=`basename $BINARY` + while test $COUNTER -lt 20; do + ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $DIR + cd `dirname $ISLINK` + DIR=`pwd` + FIL=`basename $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + BINARY=$DIR/$FIL + fi + fi + + BOOT_JDK=`dirname $BINARY` + BOOT_JDK=`cd $BOOT_JDK/..; pwd` + if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then + JAVAC=$BOOT_JDK/bin/javac + JAVA=$BOOT_JDK/bin/java + BOOT_JDK_FOUND=yes + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + # Try the MacOSX way. + if test -x /usr/libexec/java_home; then + BOOT_JDK=`/usr/libexec/java_home` + if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then + JAVAC=$BOOT_JDK/bin/javac + JAVA=$BOOT_JDK/bin/java + BOOT_JDK_FOUND=yes + fi + fi +fi + +if test "x$BOOT_JDK_FOUND" = xno; then + # Extract the first word of "java", so it can be a program name with args. +set dummy java; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_JAVA_CHECK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $JAVA_CHECK in + [\\/]* | ?:[\\/]*) + ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +JAVA_CHECK=$ac_cv_path_JAVA_CHECK +if test -n "$JAVA_CHECK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5 +$as_echo "$JAVA_CHECK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$JAVA_CHECK" != x; then + # There is a java in the path. But apparently we have not found a javac + # in the path, since that would have been tested earlier. + if test "x$OPENJDK_TARGET_OS" = xwindows; then + # Now if this is a windows platform. The default installation of a JDK + # actually puts the JRE in the path and keeps the JDK out of the path! + # Go look in the default installation location. + BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1` + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=yes + fi + fi + if test "x$BOOT_JDK_FOUND" = xno; then + + # Print a helpful message on how to acquire the necessary build dependency. + # openjdk is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=openjdk + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG" >&5 +$as_echo "$as_me: Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi + else + + # Print a helpful message on how to acquire the necessary build dependency. + # openjdk is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=openjdk + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a JDK. $HELP_MSG" >&5 +$as_echo "$as_me: Could not find a JDK. $HELP_MSG" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi +fi + + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + # Extract the first word of "cygpath", so it can be a program name with args. +set dummy cygpath; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CYGPATH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CYGPATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CYGPATH=$ac_cv_path_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + tmp="$BOOT_JDK" + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + BOOT_JDK="$tmp" + fi + + +# Now see if we can find the rt.jar, or its nearest equivalent. +BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar" + + # Fail with message the path to the Boot JDK rt.jar (or nearest equivalent) if var BOOT_RTJAR contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$BOOT_RTJAR" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + BOOT_RTJAR=`$CYGPATH -s -m -a "$BOOT_RTJAR"` + BOOT_RTJAR=`$CYGPATH -u "$BOOT_RTJAR"` + else + as_fn_error $? "You cannot have spaces in the path to the Boot JDK rt.jar (or nearest equivalent)! \"$BOOT_RTJAR\"" "$LINENO" 5 + fi + fi + + +BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar" + + # Fail with message the path to the Boot JDK tools.jar (or nearest equivalent) if var BOOT_TOOLSJAR contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$BOOT_TOOLSJAR" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + BOOT_TOOLSJAR=`$CYGPATH -s -m -a "$BOOT_TOOLSJAR"` + BOOT_TOOLSJAR=`$CYGPATH -u "$BOOT_TOOLSJAR"` + else + as_fn_error $? "You cannot have spaces in the path to the Boot JDK tools.jar (or nearest equivalent)! \"$BOOT_TOOLSJAR\"" "$LINENO" 5 + fi + fi + + +if test ! -f $BOOT_RTJAR; then + # On MacOSX it is called classes.jar + BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar + if test ! -f $BOOT_RTJAR; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Cannot find the rt.jar or its equivalent!" >&5 +$as_echo "$as_me: Cannot find the rt.jar or its equivalent!" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: This typically means that configure failed to automatically find a suitable Boot JDK" >&5 +$as_echo "$as_me: This typically means that configure failed to automatically find a suitable Boot JDK" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + + fi + # Remove the .. + BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}" + # The tools.jar is part of classes.jar + BOOT_TOOLSJAR="$BOOT_RTJAR" +fi + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot rt.jar" >&5 +$as_echo_n "checking for Boot rt.jar... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_RTJAR" >&5 +$as_echo "$BOOT_RTJAR" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot tools.jar" >&5 +$as_echo_n "checking for Boot tools.jar... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_TOOLSJAR" >&5 +$as_echo "$BOOT_TOOLSJAR" >&6; } + +# Use the java tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5 +$as_echo_n "checking for java in Boot JDK... " >&6; } +JAVA=$BOOT_JDK/bin/java +if test ! -x $JAVA; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working java" >&5 +$as_echo "$as_me: Could not find a working java" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi +BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes $BOOT_JDK_VERSION" >&5 +$as_echo "yes $BOOT_JDK_VERSION" >&6; } + + +# Extra M4 quote needed to protect [] in grep expression. +FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` +if test "x$FOUND_VERSION_78" = x; then + + # Print a helpful message on how to acquire the necessary build dependency. + # openjdk is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=openjdk + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: Your boot-jdk must be version 7 or 8. $HELP_MSG" >&5 +$as_echo "$as_me: Your boot-jdk must be version 7 or 8. $HELP_MSG" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi + +# When compiling code to be executed by the Boot JDK, force jdk7 compatibility. +BOOT_JDK_SOURCETARGET="-source 7 -target 7" + + +# Use the javac tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5 +$as_echo_n "checking for javac in Boot JDK... " >&6; } +JAVAC=$BOOT_JDK/bin/javac +if test ! -x $JAVAC; then + as_fn_error $? "Could not find a working javac" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + + +# Use the javah tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5 +$as_echo_n "checking for javah in Boot JDK... " >&6; } +JAVAH=$BOOT_JDK/bin/javah +if test ! -x $JAVAH; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working javah" >&5 +$as_echo "$as_me: Could not find a working javah" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +# Use the jar tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5 +$as_echo_n "checking for jar in Boot JDK... " >&6; } +JAR=$BOOT_JDK/bin/jar +if test ! -x $JAR; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working jar" >&5 +$as_echo "$as_me: Could not find a working jar" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +# Use the rmic tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rmic in Boot JDK" >&5 +$as_echo_n "checking for rmic in Boot JDK... " >&6; } +RMIC=$BOOT_JDK/bin/rmic +if test ! -x $RMIC; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working rmic" >&5 +$as_echo "$as_me: Could not find a working rmic" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +# Use the native2ascii tool from the Boot JDK. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native2ascii in Boot JDK" >&5 +$as_echo_n "checking for native2ascii in Boot JDK... " >&6; } +NATIVE2ASCII=$BOOT_JDK/bin/native2ascii +if test ! -x $NATIVE2ASCII; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find a working native2ascii" >&5 +$as_echo "$as_me: Could not find a working native2ascii" >&6;} + + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be fixed by explicitely setting --with-boot-jdk" >&5 +$as_echo "$as_me: This might be fixed by explicitely setting --with-boot-jdk" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + + +############################################################################## +# +# Specify options for anything that is run with the Boot JDK. +# + +# Check whether --with-boot-jdk-jvmargs was given. +if test "${with_boot_jdk_jvmargs+set}" = set; then : + withval=$with_boot_jdk_jvmargs; +fi + + +if test "x$with_boot_jdk_jvmargs" = x; then + # Not all JVM:s accept the same arguments on the command line. + # OpenJDK specific increase in thread stack for JDK build, + # well more specifically, when running javac. + if test "x$BUILD_NUM_BITS" = x32; then + STACK_SIZE=768 + else + # Running Javac on a JVM on a 64-bit machine, the stack takes more space + # since 64-bit pointers are pushed on the stach. Apparently, we need + # to increase the stack space when javacing the JDK.... + STACK_SIZE=1536 + fi + + # Minimum amount of heap memory. + + # Test if -Xms64M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -Xms64M to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -Xms64M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -Xms64M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -Xms64M" + fi + + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + # Why does macosx need more heap? Its the huge JDK batch. + + # Test if -Xmx1600M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -Xmx1600M to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -Xmx1600M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -Xmx1600M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1600M" + fi + + else + + # Test if -Xmx1100M is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -Xmx1100M to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -Xmx1100M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -Xmx1100M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1100M" + fi + + fi + # When is adding -client something that speeds up the JVM? + # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA]) + + # Test if -XX:PermSize=32m is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:PermSize=32m to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -XX:PermSize=32m -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:PermSize=32m -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:PermSize=32m" + fi + + + # Test if -XX:MaxPermSize=160m is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:MaxPermSize=160m to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:MaxPermSize=160m" + fi + + + # Test if -XX:ThreadStackSize=$STACK_SIZE is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:ThreadStackSize=$STACK_SIZE to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:ThreadStackSize=$STACK_SIZE" + fi + + # Disable special log output when a debug build is used as Boot JDK... + + # Test if -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput to boot_jdk_jvmargs + FOUND_WARN=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput" + fi + +fi + +BOOT_JDK_JVMARGS=$boot_jdk_jvmargs + + + +############################################################################### +# +# Configure the sources to use. We can add or override individual directories. +# +############################################################################### + + + +# Where are the sources. Any of these can be overridden +# using --with-override-corba and the likes. +LANGTOOLS_TOPDIR="$SRC_ROOT/langtools" +CORBA_TOPDIR="$SRC_ROOT/corba" +JAXP_TOPDIR="$SRC_ROOT/jaxp" +JAXWS_TOPDIR="$SRC_ROOT/jaxws" +HOTSPOT_TOPDIR="$SRC_ROOT/hotspot" +JDK_TOPDIR="$SRC_ROOT/jdk" + + + + + + + + + +############################################################################### +# +# Pickup additional source for a component from outside of the source root +# or override source for a component. +# + +# Check whether --with-add-source-root was given. +if test "${with_add_source_root+set}" = set; then : + withval=$with_add_source_root; +fi + + + +# Check whether --with-override-source-root was given. +if test "${with_override_source_root+set}" = set; then : + withval=$with_override_source_root; +fi + + + +# Check whether --with-adds-and-overrides was given. +if test "${with_adds_and_overrides+set}" = set; then : + withval=$with_adds_and_overrides; +fi + + +if test "x$with_adds_and_overrides" != x; then + with_add_source_root="$with_adds_and_overrides/adds" + with_override_source_root="$with_adds_and_overrides/overrides" +fi + +if test "x$with_add_source_root" != x; then + if ! test -d $with_add_source_root; then + as_fn_error $? "Trying to use a non-existant add-source-root $with_add_source_root" "$LINENO" 5 + fi + CURDIR="$PWD" + cd "$with_add_source_root" + ADD_SRC_ROOT="`pwd`" + cd "$CURDIR" + # Verify that the addon source root does not have any root makefiles. + # If it does, then it is usually an error, prevent this. + if test -f $with_add_source_root/langtools/makefiles/Makefile || \ + test -f $with_add_source_root/langtools/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/corba/makefiles/Makefile || \ + test -f $with_add_source_root/corba/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full corba repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ + test -f $with_add_source_root/jaxp/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ + test -f $with_add_source_root/jaxws/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ + test -f $with_add_source_root/hotspot/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources." "$LINENO" 5 + fi + if test -f $with_add_source_root/jdk/makefiles/Makefile || \ + test -f $with_add_source_root/jdk/make/Makefile; then + as_fn_error $? "Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources." "$LINENO" 5 + fi +fi + + +if test "x$with_override_source_root" != x; then + if ! test -d $with_override_source_root; then + as_fn_error $? "Trying to use a non-existant override-source-root $with_override_source_root" "$LINENO" 5 + fi + CURDIR="$PWD" + cd "$with_override_source_root" + OVERRIDE_SRC_ROOT="`pwd`" + cd "$CURDIR" + if test -f $with_override_source_root/langtools/makefiles/Makefile || \ + test -f $with_override_source_root/langtools/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/corba/makefiles/Makefile || \ + test -f $with_override_source_root/corba/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full corba repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ + test -f $with_override_source_root/jaxp/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ + test -f $with_override_source_root/jaxws/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ + test -f $with_override_source_root/hotspot/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override." "$LINENO" 5 + fi + if test -f $with_override_source_root/jdk/makefiles/Makefile || \ + test -f $with_override_source_root/jdk/make/Makefile; then + as_fn_error $? "Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override." "$LINENO" 5 + fi +fi + + +############################################################################### +# +# Override a repo completely, this is used for example when you have 3 small +# development sandboxes of the langtools sources and want to avoid having 3 full +# OpenJDK sources checked out on disk. +# +# Assuming that the 3 langtools sandboxes are located here: +# /home/fredrik/sandbox1/langtools +# /home/fredrik/sandbox2/langtools +# /home/fredrik/sandbox3/langtools +# +# From the source root you create build subdirs manually: +# mkdir -p build1 build2 build3 +# in each build directory run: +# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make) +# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make) +# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make) +# + + +# Check whether --with-override-langtools was given. +if test "${with_override_langtools+set}" = set; then : + withval=$with_override_langtools; +fi + + + +# Check whether --with-override-corba was given. +if test "${with_override_corba+set}" = set; then : + withval=$with_override_corba; +fi + + + +# Check whether --with-override-jaxp was given. +if test "${with_override_jaxp+set}" = set; then : + withval=$with_override_jaxp; +fi + + + +# Check whether --with-override-jaxws was given. +if test "${with_override_jaxws+set}" = set; then : + withval=$with_override_jaxws; +fi + + + +# Check whether --with-override-hotspot was given. +if test "${with_override_hotspot+set}" = set; then : + withval=$with_override_hotspot; +fi + + + +# Check whether --with-override-jdk was given. +if test "${with_override_jdk+set}" = set; then : + withval=$with_override_jdk; +fi + + +if test "x$with_override_langtools" != x; then + CURDIR="$PWD" + cd "$with_override_langtools" + LANGTOOLS_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override langtools with a full langtools repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if langtools should be overridden" >&5 +$as_echo_n "checking if langtools should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $LANGTOOLS_TOPDIR" >&5 +$as_echo "yes with $LANGTOOLS_TOPDIR" >&6; } +fi +if test "x$with_override_corba" != x; then + CURDIR="$PWD" + cd "$with_override_corba" + CORBA_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override corba with a full corba repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if corba should be overridden" >&5 +$as_echo_n "checking if corba should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $CORBA_TOPDIR" >&5 +$as_echo "yes with $CORBA_TOPDIR" >&6; } +fi +if test "x$with_override_jaxp" != x; then + CURDIR="$PWD" + cd "$with_override_jaxp" + JAXP_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override jaxp with a full jaxp repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxp should be overridden" >&5 +$as_echo_n "checking if jaxp should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXP_TOPDIR" >&5 +$as_echo "yes with $JAXP_TOPDIR" >&6; } +fi +if test "x$with_override_jaxws" != x; then + CURDIR="$PWD" + cd "$with_override_jaxws" + JAXWS_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override jaxws with a full jaxws repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxws should be overridden" >&5 +$as_echo_n "checking if jaxws should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXWS_TOPDIR" >&5 +$as_echo "yes with $JAXWS_TOPDIR" >&6; } +fi +if test "x$with_override_hotspot" != x; then + CURDIR="$PWD" + cd "$with_override_hotspot" + HOTSPOT_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ + ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override hotspot with a full hotspot repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if hotspot should be overridden" >&5 +$as_echo_n "checking if hotspot should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $HOTSPOT_TOPDIR" >&5 +$as_echo "yes with $HOTSPOT_TOPDIR" >&6; } +fi +if test "x$with_override_jdk" != x; then + CURDIR="$PWD" + cd "$with_override_jdk" + JDK_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JDK_TOPDIR/makefiles/Makefile; then + as_fn_error $? "You have to override JDK with a full JDK repo!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if JDK should be overridden" >&5 +$as_echo_n "checking if JDK should be overridden... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JDK_TOPDIR" >&5 +$as_echo "yes with $JDK_TOPDIR" >&6; } +fi + + + +LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools" +CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba" +JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp" +JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws" +HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot" +JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk" +IMAGES_OUTPUTDIR="$OUTPUT_ROOT/images" + + + + + + + + + +LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist" +CORBA_DIST="$OUTPUT_ROOT/corba/dist" +JAXP_DIST="$OUTPUT_ROOT/jaxp/dist" +JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist" +HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist" + + + + + + + + +############################################################################### +# +# Setup the toolchain (compilers etc), i.e. the tools that need to be +# cross-compilation aware. +# +############################################################################### + + +############################################################################### +# +# Configure the development tool paths and potential sysroot. +# +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +DEVKIT= +SYS_ROOT=/ + + +# The option used to specify the target .o,.a or .so file. +# When compiling, how to specify the to be created object file. +CC_OUT_OPTION='-o$(SPACE)' +# When linking, how to specify the to be created executable. +EXE_OUT_OPTION='-o$(SPACE)' +# When linking, how to specify the to be created dynamically linkable library. +LD_OUT_OPTION='-o$(SPACE)' +# When archiving, how to specify the to be create static archive for object files. +AR_OUT_OPTION='rcs$(SPACE)' + + + + + + + +# Check if the VS env variables were setup prior to running configure. +# If not, then find vcvarsall.bat and run it automatically, and integrate +# the set env variables into the spec file. +SETUPDEVENV="# No special vars" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + # If vcvarsall.bat has been run, then VCINSTALLDIR is set. + if test "x$VCINSTALLDIR" != x; then + # No further setup is needed. The build will happen from this kind + # of shell. + SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." + # Make sure to remind you, if you forget to run make from a cygwin bash shell + # that is spawned "bash -l" from a VS command prompt. + CHECK_FOR_VCINSTALLDIR=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you are running from within a VS command prompt" >&5 +$as_echo_n "checking if you are running from within a VS command prompt... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. + if test "x$VS100COMNTOOLS" != x; then + VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` + SEARCH_ROOT="$VS100COMNTOOLS" + else + VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` + SEARCH_ROOT="$PROGRAMFILES" + fi + VCPATH=`dirname "$VARSBAT"` + VCPATH=`cygpath -w "$VCPATH"` + if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 +$as_echo_n "checking if we can find the VS installation... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 + fi + case "$LEGACY_OPENJDK_TARGET_CPU1" in + i?86) + VARSBAT_ARCH=x86 + ;; + *) + VARSBAT_ARCH=$LEGACY_OPENJDK_TARGET_CPU1 + ;; + esac + # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat + cd $OUTPUT_ROOT + bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" + cd $CURDIR + if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can extract the needed env variables" >&5 +$as_echo_n "checking if we can extract the needed env variables... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Could not succesfully extract the env variables needed for the VS setup. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 + fi + # Now set all paths and other env variables. This will allow the rest of + # the configure script to find and run the compiler in the proper way. + . $OUTPUT_ROOT/localdevenv.sh + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 +$as_echo_n "checking if we can find the VS installation... " >&6; } + if test "x$VCINSTALLDIR" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VCINSTALLDIR" >&5 +$as_echo "$VCINSTALLDIR" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Could not find VS installation. Please install. If you are sure you have installed VS, then please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 + fi + CHECK_FOR_VCINSTALLDIR=no + SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for msvcr100.dll" >&5 +$as_echo_n "checking for msvcr100.dll... " >&6; } + +# Check whether --with-msvcr100dll was given. +if test "${with_msvcr100dll+set}" = set; then : + withval=$with_msvcr100dll; +fi + + if test "x$with_msvcr100dll" != x; then + MSVCR100DLL="$with_msvcr100dll" + else + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` + else + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` + if test "x$MSVCR100DLL" = x; then + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` + fi + fi + fi + if test "x$MSVCR100DLL" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Could not find msvcr100.dll !" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSVCR100DLL" >&5 +$as_echo "$MSVCR100DLL" >&6; } + + # Fail with message the path to msvcr100.dll if var MSVCR100DLL contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$MSVCR100DLL" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + MSVCR100DLL=`$CYGPATH -s -m -a "$MSVCR100DLL"` + MSVCR100DLL=`$CYGPATH -u "$MSVCR100DLL"` + else + as_fn_error $? "You cannot have spaces in the path to msvcr100.dll! \"$MSVCR100DLL\"" "$LINENO" 5 + fi + fi + + fi +fi + + + + +# Locate the actual tools + +# If --build AND --host is set, then the configure script will find any +# cross compilation tools in the PATH. Cross compilation tools +# follows the cross compilation standard where they are prefixed with ${host}. +# For example the binary i686-sun-solaris2.10-gcc +# will cross compile for i686-sun-solaris2.10 +# If neither of build and host is not set, then build=host and the +# default compiler found in the path will be used. +# Setting only --host, does not seem to be really supported. +# Please set both --build and --host if you want to cross compile. + +DEFINE_CROSS_COMPILE_ARCH="" +HOSTCC="" +HOSTCXX="" +HOSTLD="" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if this is a cross compile" >&5 +$as_echo_n "checking if this is a cross compile... " >&6; } +if test "x$OPENJDK_BUILD_SYSTEM" != "x$OPENJDK_TARGET_SYSTEM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, from $OPENJDK_BUILD_SYSTEM to $OPENJDK_TARGET_SYSTEM" >&5 +$as_echo "yes, from $OPENJDK_BUILD_SYSTEM to $OPENJDK_TARGET_SYSTEM" >&6; } + # We have detected a cross compile! + DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_OPENJDK_TARGET_CPU1" + # Now we to find a C/C++ compiler that can build executables for the build + # platform. We can't use the AC_PROG_CC macro, since it can only be used + # once. + for ac_prog in cl cc gcc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HOSTCC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HOSTCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_HOSTCC="$HOSTCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HOSTCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HOSTCC=$ac_cv_path_HOSTCC +if test -n "$HOSTCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCC" >&5 +$as_echo "$HOSTCC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$HOSTCC" && break +done + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$HOSTCC" + car="${tmp%% *}" + tmp="$HOSTCC EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + HOSTCC="$car ${cdr% *}" + else + HOSTCC="$car" + fi + + for ac_prog in cl CC g++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HOSTCXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HOSTCXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_HOSTCXX="$HOSTCXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HOSTCXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HOSTCXX=$ac_cv_path_HOSTCXX +if test -n "$HOSTCXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCXX" >&5 +$as_echo "$HOSTCXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$HOSTCXX" && break +done + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$HOSTCXX" + car="${tmp%% *}" + tmp="$HOSTCXX EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + HOSTCXX="$car ${cdr% *}" + else + HOSTCXX="$car" + fi + + # Extract the first word of "ld", so it can be a program name with args. +set dummy ld; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HOSTLD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HOSTLD in + [\\/]* | ?:[\\/]*) + ac_cv_path_HOSTLD="$HOSTLD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HOSTLD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HOSTLD=$ac_cv_path_HOSTLD +if test -n "$HOSTLD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTLD" >&5 +$as_echo "$HOSTLD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$HOSTLD" + car="${tmp%% *}" + tmp="$HOSTLD EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + HOSTLD="$car ${cdr% *}" + else + HOSTLD="$car" + fi + + # Building for the build platform should be easy. Therefore + # we do not need any linkers or assemblers etc. +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +# You can force the sys-root if the sys-root encoded into the cross compiler tools +# is not correct. + +# Check whether --with-sys-root was given. +if test "${with_sys_root+set}" = set; then : + withval=$with_sys_root; +fi + + +if test "x$with_sys_root" != x; then + SYS_ROOT=$with_sys_root +fi + +# If a devkit is found on the builddeps server, then prepend its path to the +# PATH variable. If there are cross compilers available in the devkit, these +# will be found by AC_PROG_CC et al. + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_devkit_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The devkit comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_devkit} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for devkit" >&5 +$as_echo "$as_me: Using builddeps $resource for devkit" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# devkit is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/devkit.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_devkit_ROOT} + thecflags=${builddep_devkit_CFLAGS} + thelibs=${builddep_devkit_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency devkit" "$LINENO" 5 + fi + DEVKIT=$depdir + if test "x$theroot" != x; then + DEVKIT="$theroot" + fi + if test "x$thecflags" != x; then + DEVKIT_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + DEVKIT_LIBS="$thelibs" + fi + # Found devkit + PATH="$DEVKIT/bin:$PATH" + SYS_ROOT="$DEVKIT/${rewritten_target}/sys-root" + if test "x$x_includes" = "xNONE"; then + x_includes="$SYS_ROOT/usr/include/X11" + fi + if test "x$x_libraries" = "xNONE"; then + x_libraries="$SYS_ROOT/usr/lib" + fi + + + fi + + fi + + +if test "x$SYS_ROOT" != "x/" ; then + CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" + CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" + OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" + OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" + CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" + LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" +fi + +# Store the CFLAGS etal passed to the configure script. +ORG_CFLAGS="$CFLAGS" +ORG_CXXFLAGS="$CXXFLAGS" +ORG_OBJCFLAGS="$OBJCFLAGS" + + +# Check whether --with-tools-dir was given. +if test "${with_tools_dir+set}" = set; then : + withval=$with_tools_dir; TOOLS_DIR=$with_tools_dir +fi + + + +# Check whether --with-devkit was given. +if test "${with_devkit+set}" = set; then : + withval=$with_devkit; + if test "x$with_sys_root" != x; then + as_fn_error $? "Cannot specify both --with-devkit and --with-sys-root at the same time" "$LINENO" 5 + fi + if test "x$with_tools_dir" != x; then + as_fn_error $? "Cannot specify both --with-devkit and --with-tools-dir at the same time" "$LINENO" 5 + fi + TOOLS_DIR=$with_devkit/bin + SYS_ROOT=$with_devkit/$host_alias/libc + +fi + + +# autoconf magic only relies on PATH, so update it if tools dir is specified +OLD_PATH="$PATH" +if test "x$TOOLS_DIR" != x; then + PATH=$TOOLS_DIR:$PATH +fi + +# gcc is almost always present, but on Windows we +# prefer cl.exe and on Solaris we prefer CC. +# Thus test for them in this order. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in cl cc gcc + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl cc gcc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5 ; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5 ; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5 ; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +if test "x$CC" = x; then + + # Print a helpful message on how to acquire the necessary build dependency. + # devkit is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=devkit + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find a compiler. $HELP_MSG" "$LINENO" 5 +fi +if test "x$CC" = xcc && test "x$OPENJDK_BUILD_OS" = xmacosx; then + # Do not use cc on MacOSX use gcc instead. + CC="gcc" +fi + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$CC" + car="${tmp%% *}" + tmp="$CC EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + CC="$car ${cdr% *}" + else + CC="$car" + fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in cl CC g++ + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in cl CC g++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then + # The found CC, even though it seems to be a g++ derivate, cannot compile + # c++ code. Override. + CXX="g++" +fi + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$CXX" + car="${tmp%% *}" + tmp="$CXX EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + CXX="$car ${cdr% *}" + else + CXX="$car" + fi + + +if test "x$CXX" = x || test "x$CC" = x; then + + # Print a helpful message on how to acquire the necessary build dependency. + # devkit is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=devkit + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find the needed compilers! $HELP_MSG " "$LINENO" 5 +fi + +if test "x$OPENJDK_BUILD_OS" != xwindows; then + ac_ext=m +ac_cpp='$OBJCPP $CPPFLAGS' +ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_objc_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in gcc objcc objc cc CC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJC"; then + ac_cv_prog_OBJC="$OBJC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJC=$ac_cv_prog_OBJC +if test -n "$OBJC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJC" >&5 +$as_echo "$OBJC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$OBJC" && break + done +fi +if test -z "$OBJC"; then + ac_ct_OBJC=$OBJC + for ac_prog in gcc objcc objc cc CC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJC"; then + ac_cv_prog_ac_ct_OBJC="$ac_ct_OBJC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJC=$ac_cv_prog_ac_ct_OBJC +if test -n "$ac_ct_OBJC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJC" >&5 +$as_echo "$ac_ct_OBJC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_OBJC" && break +done + + if test "x$ac_ct_OBJC" = x; then + OBJC="gcc" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJC=$ac_ct_OBJC + fi +fi + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for Objective C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Objective C compiler" >&5 +$as_echo_n "checking whether we are using the GNU Objective C compiler... " >&6; } +if test "${ac_cv_objc_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_objc_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objc_compiler_gnu" >&5 +$as_echo "$ac_cv_objc_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GOBJC=yes +else + GOBJC= +fi +ac_test_OBJCFLAGS=${OBJCFLAGS+set} +ac_save_OBJCFLAGS=$OBJCFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $OBJC accepts -g" >&5 +$as_echo_n "checking whether $OBJC accepts -g... " >&6; } +if test "${ac_cv_prog_objc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_objc_werror_flag=$ac_objc_werror_flag + ac_objc_werror_flag=yes + ac_cv_prog_objc_g=no + OBJCFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + ac_cv_prog_objc_g=yes +else + OBJCFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + +else + ac_objc_werror_flag=$ac_save_objc_werror_flag + OBJCFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_objc_try_compile "$LINENO"; then : + ac_cv_prog_objc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_objc_werror_flag=$ac_save_objc_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_objc_g" >&5 +$as_echo "$ac_cv_prog_objc_g" >&6; } +if test "$ac_test_OBJCFLAGS" = set; then + OBJCFLAGS=$ac_save_OBJCFLAGS +elif test $ac_cv_prog_objc_g = yes; then + if test "$GOBJC" = yes; then + OBJCFLAGS="-g -O2" + else + OBJCFLAGS="-g" + fi +else + if test "$GOBJC" = yes; then + OBJCFLAGS="-O2" + else + OBJCFLAGS= + fi +fi +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$OBJC" + car="${tmp%% *}" + tmp="$OBJC EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + OBJC="$car ${cdr% *}" + else + OBJC="$car" + fi + +else + OBJC= +fi + +# Restore the flags to the user specified values. +# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" +CFLAGS="$ORG_CFLAGS" +CXXFLAGS="$ORG_CXXFLAGS" +OBJCFLAGS="$ORG_OBJCFLAGS" + +# If we are not cross compiling, use the same compilers for +# building the build platform executables. +if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then + HOSTCC="$CC" + HOSTCXX="$CXX" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args. +set dummy ${ac_tool_prefix}ld; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LD"; then + ac_cv_prog_LD="$LD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LD="${ac_tool_prefix}ld" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LD=$ac_cv_prog_LD +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LD"; then + ac_ct_LD=$LD + # Extract the first word of "ld", so it can be a program name with args. +set dummy ld; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LD"; then + ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LD="ld" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LD=$ac_cv_prog_ac_ct_LD +if test -n "$ac_ct_LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 +$as_echo "$ac_ct_LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LD" = x; then + LD="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LD=$ac_ct_LD + fi +else + LD="$ac_cv_prog_LD" +fi + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$LD" + car="${tmp%% *}" + tmp="$LD EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + LD="$car ${cdr% *}" + else + LD="$car" + fi + +LD="$CC" +LDEXE="$CC" +LDCXX="$CXX" +LDEXECXX="$CXX" +# LDEXE is the linker to use, when creating executables. + +# Linking C++ libraries. + +# Linking C++ executables. + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$AR" + car="${tmp%% *}" + tmp="$AR EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + AR="$car ${cdr% *}" + else + AR="$car" + fi + +if test "x$OPENJDK_BUILD_OS" = xmacosx; then + ARFLAGS="-r" +else + ARFLAGS="" +fi + + +COMPILER_NAME=gcc +COMPILER_TYPE=CC +if test "x$OPENJDK_BUILD_OS" = xwindows; then : + + # For now, assume that we are always compiling using cl.exe. + CC_OUT_OPTION=-Fo + EXE_OUT_OPTION=-out: + LD_OUT_OPTION=-out: + AR_OUT_OPTION=-out: + # On Windows, reject /usr/bin/link, which is a cygwin + # program for something completely different. + # Extract the first word of "link", so it can be a program name with args. +set dummy link; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINLD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$WINLD"; then + ac_cv_prog_WINLD="$WINLD" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/link"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_WINLD="link" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_WINLD + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set WINLD to just the basename; use the full file name. + shift + ac_cv_prog_WINLD="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +WINLD=$ac_cv_prog_WINLD +if test -n "$WINLD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINLD" >&5 +$as_echo "$WINLD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Since we must ignore the first found link, WINLD will contain + # the full path to the link.exe program. + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$WINLD" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$WINLD"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + WINLD="$tmp" + + LD="$WINLD" + LDEXE="$WINLD" + LDCXX="$WINLD" + LDEXECXX="$WINLD" + # Set HOSTLD to same as LD until we fully support cross compilation + # on windows. + HOSTLD="$WINLD" + + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_MT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MT"; then + ac_cv_prog_MT="$MT" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/mt"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_MT="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_MT + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set MT to just the basename; use the full file name. + shift + ac_cv_prog_MT="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +MT=$ac_cv_prog_MT +if test -n "$MT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MT" >&5 +$as_echo "$MT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$MT" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$MT"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + MT="$tmp" + + # The resource compiler + # Extract the first word of "rc", so it can be a program name with args. +set dummy rc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RC"; then + ac_cv_prog_RC="$RC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/rc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_RC="rc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_RC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set RC to just the basename; use the full file name. + shift + ac_cv_prog_RC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +RC=$ac_cv_prog_RC +if test -n "$RC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 +$as_echo "$RC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$RC" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$RC"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + RC="$tmp" + + + RC_FLAGS="-nologo /l 0x409 /r" + if test "x$VARIANT" = xOPT; then : + + RC_FLAGS="$RC_FLAGS -d NDEBUG" + +fi + JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION + if test "x$JDK_UPDATE_VERSION" = x; then : + + JDK_UPDATE_VERSION_NOTNULL=0 + +fi + RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" + + # lib.exe is used to create static libraries. + # Extract the first word of "lib", so it can be a program name with args. +set dummy lib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINAR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$WINAR"; then + ac_cv_prog_WINAR="$WINAR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_WINAR="lib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +WINAR=$ac_cv_prog_WINAR +if test -n "$WINAR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINAR" >&5 +$as_echo "$WINAR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$WINAR" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$WINAR"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + WINAR="$tmp" + + AR="$WINAR" + ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" + + # Extract the first word of "dumpbin", so it can be a program name with args. +set dummy dumpbin; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="dumpbin" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$DUMPBIN" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$DUMPBIN"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + DUMPBIN="$tmp" + + + COMPILER_TYPE=CL + CCXXFLAGS="$CCXXFLAGS -nologo" + +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5 ; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$CPP" + car="${tmp%% *}" + tmp="$CPP EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + CPP="$car ${cdr% *}" + else + CPP="$car" + fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5 ; } +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$CXXCPP" + car="${tmp%% *}" + tmp="$CXXCPP EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + CXXCPP="$car ${cdr% *}" + else + CXXCPP="$car" + fi + + +# for solaris we really need solaris tools, and not gnu equivalent +# these seems to normally reside in /usr/ccs/bin so add that to path before +# starting to probe +# +# NOTE: I add this /usr/ccs/bin after TOOLS but before OLD_PATH +# so that it can be overriden --with-tools-dir +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + PATH="${TOOLS_DIR}:/usr/ccs/bin:${OLD_PATH}" +fi + +# Find the right assembler. +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_AS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $AS in + [\\/]* | ?:[\\/]*) + ac_cv_path_AS="$AS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_AS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AS=$ac_cv_path_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$AS" + car="${tmp%% *}" + tmp="$AS EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + AS="$car ${cdr% *}" + else + AS="$car" + fi + + ASFLAGS=" " +else + AS="$CC -c" + ASFLAGS=" " +fi + + + +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + # Extract the first word of "nm", so it can be a program name with args. +set dummy nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $NM in + [\\/]* | ?:[\\/]*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +NM=$ac_cv_path_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$NM" + car="${tmp%% *}" + tmp="$NM EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + NM="$car ${cdr% *}" + else + NM="$car" + fi + + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $STRIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STRIP=$ac_cv_path_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$STRIP" + car="${tmp%% *}" + tmp="$STRIP EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + STRIP="$car ${cdr% *}" + else + STRIP="$car" + fi + + # Extract the first word of "mcs", so it can be a program name with args. +set dummy mcs; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MCS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MCS in + [\\/]* | ?:[\\/]*) + ac_cv_path_MCS="$MCS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MCS=$ac_cv_path_MCS +if test -n "$MCS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5 +$as_echo "$MCS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$MCS" + car="${tmp%% *}" + tmp="$MCS EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + MCS="$car ${cdr% *}" + else + MCS="$car" + fi + +else + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. +set dummy ${ac_tool_prefix}nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + ac_cv_prog_NM="$NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NM="${ac_tool_prefix}nm" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NM=$ac_cv_prog_NM +if test -n "$NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NM"; then + ac_ct_NM=$NM + # Extract the first word of "nm", so it can be a program name with args. +set dummy nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NM"; then + ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NM="nm" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NM=$ac_cv_prog_ac_ct_NM +if test -n "$ac_ct_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5 +$as_echo "$ac_ct_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NM" = x; then + NM="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NM=$ac_ct_NM + fi +else + NM="$ac_cv_prog_NM" +fi + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$NM" + car="${tmp%% *}" + tmp="$NM EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + NM="$car ${cdr% *}" + else + NM="$car" + fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + + + # Translate "gcc -E" into "`which gcc` -E" ie + # extract the full path to the binary and at the + # same time maintain any arguments passed to it. + # The command MUST exist in the path, or else! + tmp="$STRIP" + car="${tmp%% *}" + tmp="$STRIP EOL" + cdr="${tmp#* }" + # On windows we want paths without spaces. + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + + # Translate long cygdrive or C:\sdfsf path + # into a short mixed mode path that has no + # spaces in it. + tmp="$car" + + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + tmp=`$CYGPATH -u "$car"` + tmp=`which "$tmp"` + # If file exists with .exe appended, that's the real filename + # and cygpath needs that to convert to short style path. + if test -f "${tmp}.exe"; then + tmp="${tmp}.exe" + elif test -f "${tmp}.cmd"; then + tmp="${tmp}.cmd" + fi + # Convert to C:/ mixed style path without spaces. + tmp=`$CYGPATH -s -m "$tmp"` + fi + car="$tmp" + + else + # "which" is not portable, but is used here + # because we know that the command exists! + car=`which $car` + fi + if test "x$cdr" != xEOL; then + STRIP="$car ${cdr% *}" + else + STRIP="$car" + fi + +fi + +### +# +# Check for objcopy +# +# but search for gobjcopy first... +# since I on solaris found a broken objcopy...buhh +# +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gobjcopy", so it can be a program name with args. +set dummy ${ac_tool_prefix}gobjcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OBJCOPY=$ac_cv_path_OBJCOPY +if test -n "$OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OBJCOPY"; then + ac_pt_OBJCOPY=$OBJCOPY + # Extract the first word of "gobjcopy", so it can be a program name with args. +set dummy gobjcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OBJCOPY="$ac_pt_OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_OBJCOPY=$ac_cv_path_ac_pt_OBJCOPY +if test -n "$ac_pt_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OBJCOPY" >&5 +$as_echo "$ac_pt_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_OBJCOPY" = x; then + OBJCOPY="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJCOPY=$ac_pt_OBJCOPY + fi +else + OBJCOPY="$ac_cv_path_OBJCOPY" +fi + +if test "x$OBJCOPY" = x; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args. +set dummy ${ac_tool_prefix}objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OBJCOPY=$ac_cv_path_OBJCOPY +if test -n "$OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_OBJCOPY"; then + ac_pt_OBJCOPY=$OBJCOPY + # Extract the first word of "objcopy", so it can be a program name with args. +set dummy objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_OBJCOPY in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_OBJCOPY="$ac_pt_OBJCOPY" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_OBJCOPY=$ac_cv_path_ac_pt_OBJCOPY +if test -n "$ac_pt_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OBJCOPY" >&5 +$as_echo "$ac_pt_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_OBJCOPY" = x; then + OBJCOPY="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJCOPY=$ac_pt_OBJCOPY + fi +else + OBJCOPY="$ac_cv_path_OBJCOPY" +fi + +fi + +# Restore old path without tools dir +PATH="$OLD_PATH" + + +# FIXME: Currently we must test this after paths but before flags. Fix! + +# And we can test some aspects on the target using configure macros. + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +############################################################################### +# +# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. +# (The JVM can use 32 or 64 bit Java pointers but that decision +# is made at runtime.) +# +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +OLD_CXXFLAGS="$CXXFLAGS" +if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + CXXFLAGS="-m${with_target_bits} $CXXFLAGS" +fi +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int *" >&5 +$as_echo_n "checking size of int *... " >&6; } +if test "${ac_cv_sizeof_int_p+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int *))" "ac_cv_sizeof_int_p" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_int_p" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int *) +See \`config.log' for more details" "$LINENO" 5 ; } + else + ac_cv_sizeof_int_p=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int_p" >&5 +$as_echo "$ac_cv_sizeof_int_p" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT_P $ac_cv_sizeof_int_p +_ACEOF + + +CXXFLAGS="$OLD_CXXFLAGS" +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +# keep track of c/cxx flags that we added outselves... +# to prevent emitting warning... +ADDED_CFLAGS= +ADDED_CXXFLAGS= +ADDED_LDFLAGS= + +if test "x$ac_cv_sizeof_int_p" = x0; then + # The test failed, lets pick the assumed value. + ARCH_DATA_MODEL=$OPENJDK_TARGET_CPU_BITS +else + ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` + + if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + ADDED_CFLAGS=" -m${with_target_bits}" + ADDED_CXXFLAGS=" -m${with_target_bits}" + ADDED_LDFLAGS=" -m${with_target_bits}" + + CFLAGS="${CFLAGS}${ADDED_CFLAGS}" + CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" + LDFLAGS="${LDFLAGS}${ADDED_LDFLAGS}" + + CFLAGS_JDK="${CFLAGS_JDK}${ADDED_CFLAGS}" + CXXFLAGS_JDK="${CXXFLAGS_JDK}${ADDED_CXXFLAGS}" + LDFLAGS_JDK="${LDFLAGS_JDK}${ADDED_LDFLAGS}" + fi +fi + +if test "x$ARCH_DATA_MODEL" = x64; then + A_LP64="LP64:=" + ADD_LP64="-D_LP64=1" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for target address size" >&5 +$as_echo_n "checking for target address size... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ARCH_DATA_MODEL bits" >&5 +$as_echo "$ARCH_DATA_MODEL bits" >&6; } +LP64=$A_LP64 + + + +if test "x$ARCH_DATA_MODEL" != "x$OPENJDK_TARGET_CPU_BITS"; then + as_fn_error $? "The tested number of bits in the target ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)" "$LINENO" 5 +fi + +# +# NOTE: check for -mstackrealign needs to be below potential addition of -m32 +# +if test "x$OPENJDK_TARGET_CPU_BITS" = x32 && test "x$OPENJDK_TARGET_OS" = xmacosx; then + # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. + # While waiting for a better solution, the current workaround is to use -mstackrealign. + CFLAGS="$CFLAGS -mstackrealign" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 32-bit compiler supports -mstackrealign" >&5 +$as_echo_n "checking if 32-bit compiler supports -mstackrealign... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int main() { return 0; } +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path." "$LINENO" 5 + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + + +############################################################################### +# +# Is the target little of big endian? +# + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + ENDIAN="big";; #( + no) + ENDIAN="little" ;; #( + universal) + ENDIAN="universal_endianness" + ;; #( + *) + ENDIAN="unknown" ;; + esac + + +if test "x$ENDIAN" = xuniversal_endianness; then + as_fn_error $? "Building with both big and little endianness is not supported" "$LINENO" 5 +fi +if test "x$ENDIAN" = xunknown; then + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" +fi +if test "x$ENDIAN" != "x$OPENJDK_TARGET_CPU_ENDIAN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)" >&5 +$as_echo "$as_me: WARNING: The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)" >&2;} + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" +fi + + + +# Configure flags for the tools + + +############################################################################### +# +# How to compile shared libraries. +# + +if test "x$GCC" = xyes; then + COMPILER_NAME=gcc + PICFLAG="-fPIC" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib$1.so' + STATIC_LIBRARY='lib$1.a' + SHARED_LIBRARY_FLAGS="-shared" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1' + SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$1' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1' + LD="$CC" + LDEXE="$CC" + LDCXX="$CXX" + LDEXECXX="$CXX" + POST_STRIP_CMD="$STRIP -g" + if test "x$JDK_VARIANT" = xembedded; then + POST_STRIP_CMD="$STRIP --strip-unneeded" + fi + + # Linking is different on MacOSX + if test "x$OPENJDK_BUILD_OS" = xmacosx; then + # Might change in the future to clang. + COMPILER_NAME=gcc + SHARED_LIBRARY='lib$1.dylib' + SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" + SHARED_LIBRARY_SUFFIX='.dylib' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1' + SET_SHARED_LIBRARY_MAPFILE='' + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' + POST_STRIP_CMD="$STRIP -S" + fi +else + if test "x$OPENJDK_BUILD_OS" = xsolaris; then + # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler + COMPILER_NAME=ossc + PICFLAG="-KPIC" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib$1.so' + STATIC_LIBRARY='lib$1.a' + SHARED_LIBRARY_FLAGS="-z defs -xildoff -ztext -G" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='-M$1' + C_FLAG_REORDER='-xF' + CXX_FLAG_REORDER='-xF' + SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1' + CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__" + CFLAGS_JDKLIB_EXTRA='-xstrconst' + POST_STRIP_CMD="$STRIP -x" + POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" + fi + if test "x$OPENJDK_BUILD_OS" = xwindows; then + # If it is not gcc, then assume it is the MS Visual Studio compiler + COMPILER_NAME=cl + PICFLAG="" + LIBRARY_PREFIX= + SHARED_LIBRARY='$1.dll' + STATIC_LIBRARY='$1.lib' + SHARED_LIBRARY_FLAGS="-LD" + SHARED_LIBRARY_SUFFIX='.dll' + STATIC_LIBRARY_SUFFIX='.lib' + OBJ_SUFFIX='.obj' + EXE_SUFFIX='.exe' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='' + SET_SHARED_LIBRARY_ORIGIN='' + fi +fi + + + + + + + + + + + + + + + + + +# The (cross) compiler is now configured, we can now test capabilities +# of the target platform. + + + +############################################################################### +# +# Setup the opt flags for different compilers +# and different operating systems. +# +C_FLAG_DEPS="-MMD -MF" +CXX_FLAG_DEPS="-MMD -MF" + +case $COMPILER_TYPE in + CC ) + D_FLAG="-g" + case $COMPILER_NAME in + gcc ) + case $OPENJDK_TARGET_OS in + macosx ) + # On MacOSX we optimize for size, something + # we should do for all platforms? + C_O_FLAG_HI="-Os" + C_O_FLAG_NORM="-Os" + C_O_FLAG_NONE="" + ;; + *) + C_O_FLAG_HI="-O3" + C_O_FLAG_NORM="-O2" + C_O_FLAG_NONE="-O0" + CFLAGS_DEBUG_SYMBOLS="-g" + CXXFLAGS_DEBUG_SYMBOLS="-g" + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then + CFLAGS_DEBUG_SYMBOLS="-g1" + CXXFLAGS_DEBUG_SYMBOLSG="-g1" + fi + ;; + esac + CXX_O_FLAG_HI="$C_O_FLAG_HI" + CXX_O_FLAG_NORM="$C_O_FLAG_NORM" + CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + ;; + ossc ) + # + # Forte has different names for this with their C++ compiler... + # + C_FLAG_DEPS="-xMMD -xMF" + CXX_FLAG_DEPS="-xMMD -xMF" + +# Extra options used with HIGHEST +# +# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be +# done with care, there are some assumptions below that need to +# be understood about the use of pointers, and IEEE behavior. +# +# Use non-standard floating point mode (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fns" +# Do some simplification of floating point arithmetic (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fsimple" +# Use single precision floating point with 'float' +CC_HIGHEST="$CC_HIGHEST -fsingle" +# Assume memory references via basic pointer types do not alias +# (Source with excessing pointer casting and data access with mixed +# pointer types are not recommended) +CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" +# Use intrinsic or inline versions for math/std functions +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" +# Loop data dependency optimizations (need -xO3 or higher) +CC_HIGHEST="$CC_HIGHEST -xdepend" +# Pointer parameters to functions do not overlap +# (Similar to -xalias_level=basic usage, but less obvious sometimes. +# If you pass in multiple pointers to the same data, do not use this) +CC_HIGHEST="$CC_HIGHEST -xrestrict" +# Inline some library routines +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xlibmil" +# Use optimized math routines +# (If you expect perfect errno behavior, do not use this) +# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now +#CC_HIGHEST="$CC_HIGHEST -xlibmopt" + + case $LEGACY_OPENJDK_TARGET_CPU1 in + i586) + C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" + C_O_FLAG_HI="-xO4 -Wu,-O4~yz" + C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" + CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" + CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" + CXX_O_FLAG_NONE="" + ;; + sparc) + CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" + CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" + CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" + C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" + C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" + C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" + CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" + CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" + CXX_O_FLAG_NONE="" + ;; + esac + + CFLAGS_DEBUG_SYMBOLS="-g -xs" + CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" + esac + ;; + CL ) + D_FLAG= + C_O_FLAG_HI="-O2" + C_O_FLAG_NORM="-O1" + C_O_FLAG_NONE="-Od" + CXX_O_FLAG_HI="$C_O_FLAG_HI" + CXX_O_FLAG_NORM="$C_O_FLAG_NORM" + CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + ;; +esac + +if test -z "$C_O_FLAG_HIGHEST"; then + C_O_FLAG_HIGHEST="$C_O_FLAG_HI" +fi + +if test -z "$CXX_O_FLAG_HIGHEST"; then + CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" +fi + + + + + + + + + + + + + + +if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags\"" >&5 +$as_echo "$as_me: WARNING: Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags\"" >&2;} +fi + +if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags\"" >&5 +$as_echo "$as_me: WARNING: Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags\"" >&2;} +fi + +if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags\"" >&5 +$as_echo "$as_me: WARNING: Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags\"" >&2;} +fi + + +# Check whether --with-extra-cflags was given. +if test "${with_extra_cflags+set}" = set; then : + withval=$with_extra_cflags; +fi + + + +# Check whether --with-extra-cxxflags was given. +if test "${with_extra_cxxflags+set}" = set; then : + withval=$with_extra_cxxflags; +fi + + + +# Check whether --with-extra-ldflags was given. +if test "${with_extra_ldflags+set}" = set; then : + withval=$with_extra_ldflags; +fi + + +CFLAGS_JDK="${CFLAGS_JDK} $with_extra_cflags" +CXXFLAGS_JDK="${CXXFLAGS_JDK} $with_extra_cxxflags" +LDFLAGS_JDK="${LDFLAGS_JDK} $with_extra_ldflags" + +############################################################################### +# +# Now setup the CFLAGS and LDFLAGS for the JDK build. +# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. +# +case $COMPILER_NAME in + gcc ) + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ + -pipe \ + -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" + case $OPENJDK_TARGET_CPU_ARCH in + arm ) + # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + ppc ) + # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing + ;; + * ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer" + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + esac + ;; + ossc ) + CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" + CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" + ;; + cl ) + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ + -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ + -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ + -DWIN32 -DIAL" + case $LEGACY_OPENJDK_TARGET_CPU1 in + i?86 ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" + ;; + amd64 ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" + ;; + esac + ;; +esac + +############################################################################### +# +# Cross-compile arch specific flags + +# +if test "x$JDK_VARIANT" = "xembedded"; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DJAVASE_EMBEDDED" +fi + +case $OPENJDK_TARGET_CPU_ARCH in +arm ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" + ;; +ppc ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" + ;; +esac + +############################################################################### + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" + +# The package path is used only on macosx? +PACKAGE_PATH=/opt/local + + +# Sometimes we use a cpu dir (.../lib/amd64/server) +# Sometimes not (.../lib/server) +LIBARCHDIR="$LEGACY_OPENJDK_TARGET_CPU2/" +if test "x$ENDIAN" = xlittle; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" +else + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" +fi +if test "x$OPENJDK_TARGET_OS" = xlinux; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" +fi +if test "x$OPENJDK_TARGET_OS" = xwindows; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" +fi +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" +fi +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" + LIBARCHDIR="" +fi +if test "x$OPENJDK_TARGET_OS" = xbsd; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" +fi +if test "x$DEBUG_LEVEL" = xrelease; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" +else + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" +fi + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_OPENJDK_TARGET_CPU1\"' -D$LEGACY_OPENJDK_TARGET_CPU1" +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ + -I${JDK_OUTPUTDIR}/include \ + -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ + -I${JDK_TOPDIR}/src/share/javavm/export \ + -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/javavm/export \ + -I${JDK_TOPDIR}/src/share/native/common \ + -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/native/common" + +# The shared libraries are compiled using the picflag. +CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" +CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " + +# Executable flags +CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" +CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" + +# Now this is odd. The JDK native libraries have to link against libjvm.so +# On 32-bit machines there is normally two distinct libjvm.so:s, client and server. +# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library +# is identical for client and server? Yes. Which is picked at runtime (client or server)? +# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following +# libraries will link to whatever is in memory. Yuck. +# +# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. +if test "x$COMPILER_TYPE" = xCL; then + LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" + if test "x$LEGACY_OPENJDK_TARGET_CPU1" = xi586; then + LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" + fi + # TODO: make -debug optional "--disable-full-debug-symbols" + LDFLAGS_JDK="$LDFLAGS_JDK -debug" + LDFLAGS_JDKLIB="${LDFLAGS_JDK} -dll -libpath:${JDK_OUTPUTDIR}/lib" + LDFLAGS_JDKLIB_SUFFIX="" + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then + LDFLAGS_STACK_SIZE=1048576 + else + LDFLAGS_STACK_SIZE=327680 + fi + LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" +else + # If this is a --hash-style=gnu system, use --hash-style=both, why? + HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` + if test -n "$HAS_GNU_HASH"; then + # And since we now know that the linker is gnu, then add -z defs, to forbid + # undefined symbols in object files. + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" + if test "x$DEBUG_LEVEL" == "xrelease"; then + # When building release libraries, tell the linker optimize them. + # Should this be supplied to the OSS linker as well? + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + fi + fi + + LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" + LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" + if test "x$COMPILER_NAME" = xossc; then + LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" + fi + + # Only the jli library is explicitly linked when the launchers are built. + # The libjvm is then dynamically loaded/linked by the launcher. + LDFLAGS_JDKEXE="${LDFLAGS_JDK}" + if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then + LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" + LDFLAGS_JDKEXE_SUFFIX="-ljli" + fi +fi + +# Adjust flags according to debug level. +case $DEBUG_LEVEL in + fastdebug ) + CFLAGS="$CFLAGS $D_FLAG" + JAVAC_FLAGS="$JAVAC_FLAGS -g" + ;; + slowdebug ) + CFLAGS="$CFLAGS $D_FLAG" + C_O_FLAG_HI="$C_O_FLAG_NONE" + C_O_FLAG_NORM="$C_O_FLAG_NONE" + CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" + CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" + JAVAC_FLAGS="$JAVAC_FLAGS -g" + ;; +esac + + + + + + + + + + + + + + +# After we have toolchain, we can compile the uncygdrive helper + +# When using cygwin, we need a wrapper binary that renames +# /cygdrive/c/ arguments into c:/ arguments and peeks into +# @files and rewrites these too! This wrapper binary is +# called uncygdrive.exe. +UNCYGDRIVE= +if test "x$OPENJDK_BUILD_OS" = xwindows; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive can be created" >&5 +$as_echo_n "checking if uncygdrive can be created... " >&6; } + UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` + rm -f $OUTPUT_ROOT/uncygdrive* + UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` + cd $OUTPUT_ROOT + $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 + cd $CURDIR + + if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + cat $OUTPUT_ROOT/uncygdrive1.log + as_fn_error $? "Could not create $OUTPUT_ROOT/uncygdrive.exe" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNCYGDRIVE" >&5 +$as_echo "$UNCYGDRIVE" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive.exe works" >&5 +$as_echo_n "checking if uncygdrive.exe works... " >&6; } + cd $OUTPUT_ROOT + $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 + cd $CURDIR + if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + cat $OUTPUT_ROOT/uncygdrive2.log + as_fn_error $? "Uncygdrive did not work!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj +fi + + + + + +# Setup debug symbols (need objcopy from the toolchain for that) + +# +# ENABLE_DEBUG_SYMBOLS +# This must be done after the toolchain is setup, since we're looking at objcopy. +# +ENABLE_DEBUG_SYMBOLS=default + +# default on macosx is no... +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + ENABLE_DEBUG_SYMBOLS=no +fi + +# default for embedded is no... +if test "x$JDK_VARIANT" = "xembedded"; then + ENABLE_DEBUG_SYMBOLS=no +fi + +# Check whether --enable-debug-symbols was given. +if test "${enable_debug_symbols+set}" = set; then : + enableval=$enable_debug_symbols; ENABLE_DEBUG_SYMBOLS=${enable_debug_symbols} +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should generate debug symbols" >&5 +$as_echo_n "checking if we should generate debug symbols... " >&6; } + +if test "x$ENABLE_DEBUG_SYMBOLS" = "xyes" && test "x$OBJCOPY" = x; then + # explicit enabling of enable-debug-symbols and can't find objcopy + # this is an error + as_fn_error $? "Unable to find objcopy, cannot enable debug-symbols" "$LINENO" 5 +fi + +if test "x$ENABLE_DEBUG_SYMBOLS" = "xdefault"; then + # Default is on if objcopy is found, otherwise off + if test "x$OBJCOPY" != x; then + ENABLE_DEBUG_SYMBOLS=yes + else + ENABLE_DEBUG_SYMBOLS=no + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_DEBUG_SYMBOLS" >&5 +$as_echo "$ENABLE_DEBUG_SYMBOLS" >&6; } + +# +# ZIP_DEBUGINFO_FILES +# +ZIP_DEBUGINFO_FILES=yes + +# Check whether --enable-zip-debug-info was given. +if test "${enable_zip_debug_info+set}" = set; then : + enableval=$enable_zip_debug_info; ZIP_DEBUGINFO_FILES=${enable_zip_debug_info} +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should zip debug-info files" >&5 +$as_echo_n "checking if we should zip debug-info files... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP_DEBUGINFO_FILES" >&5 +$as_echo "$ZIP_DEBUGINFO_FILES" >&6; } + +# Hotspot wants ZIP_DEBUGINFO_FILES to be 1 for yes +# use that... +if test "x$ZIP_DEBUGINFO_FILES" = "xyes"; then + ZIP_DEBUGINFO_FILES=1 +else + ZIP_DEBUGINFO_FILES=0 +fi + + + + + + + +############################################################################### +# +# Check dependencies for external and internal libraries. +# +############################################################################### + + + +############################################################################### +# +# OS specific settings that we never will need to probe. +# +if test "x$OPENJDK_TARGET_OS" = xlinux; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Linux?" >&5 +$as_echo_n "checking what is not needed on Linux?... " >&6; } + PULSE_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pulse" >&5 +$as_echo "pulse" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Solaris?" >&5 +$as_echo_n "checking what is not needed on Solaris?... " >&6; } + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 +$as_echo "alsa pulse" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xwindows; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Windows?" >&5 +$as_echo_n "checking what is not needed on Windows?... " >&6; } + CUPS_NOT_NEEDED=yes + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + X11_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa cups pulse x11" >&5 +$as_echo "alsa cups pulse x11" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on MacOSX?" >&5 +$as_echo_n "checking what is not needed on MacOSX?... " >&6; } + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + X11_NOT_NEEDED=yes + FREETYPE2_NOT_NEEDED=yes + # If the java runtime framework is disabled, then we need X11. + # This will be adjusted below. + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse x11" >&5 +$as_echo "alsa pulse x11" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xbsd; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on bsd?" >&5 +$as_echo_n "checking what is not needed on bsd?... " >&6; } + ALSA_NOT_NEEDED=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa" >&5 +$as_echo "alsa" >&6; } +fi + +if test "x$OPENJDK" = "xfalse"; then + FREETYPE2_NOT_NEEDED=yes +fi + +############################################################################### +# +# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM +# that uses this API. +# +# Check whether --enable-macosx-runtime-support was given. +if test "${enable_macosx_runtime_support+set}" = set; then : + enableval=$enable_macosx_runtime_support; MACOSX_RUNTIME_SUPPORT="${enableval}" +else + MACOSX_RUNTIME_SUPPORT="no" +fi + + +USE_MACOSX_RUNTIME_SUPPORT=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for explicit Java runtime support in the OS" >&5 +$as_echo_n "checking for explicit Java runtime support in the OS... " >&6; } +if test -f /System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers/JavaRuntimeSupport.h; then + if test "x$MACOSX_RUNTIME_SUPPORT" != xno; then + MACOSX_RUNTIME_SUPPORT=yes + USE_MACOSX_RUNTIME_SUPPORT=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, does not need alsa freetype2 pulse and X11" >&5 +$as_echo "yes, does not need alsa freetype2 pulse and X11" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, but explicitly disabled." >&5 +$as_echo "yes, but explicitly disabled." >&6; } + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on an X11 build on MacOSX?" >&5 +$as_echo_n "checking what is not needed on an X11 build on MacOSX?... " >&6; } + X11_NOT_NEEDED= + FREETYPE2_NOT_NEEDED= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5 +$as_echo "alsa pulse" >&6; } +fi + + + + + +############################################################################### +# +# Check for X Windows +# + +# Check if the user has specified sysroot, but not --x-includes or --x-libraries. +# Make a simple check for the libraries at the sysroot, and setup --x-includes and +# --x-libraries for the sysroot, if that seems to be correct. +if test "x$SYS_ROOT" != "x/"; then + if test "x$x_includes" = xNONE; then + if test -f "$SYS_ROOT/usr/X11R6/include/X11/Xlib.h"; then + x_includes="$SYS_ROOT/usr/X11R6/include" + fi + fi + if test "x$x_libraries" = xNONE; then + if test -f "$SYS_ROOT/usr/X11R6/lib/libX11.so"; then + x_libraries="$SYS_ROOT/usr/X11R6/lib" + fi + fi +fi + +# Now let autoconf do it's magic +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } + + +# Check whether --with-x was given. +if test "${with_x+set}" = set; then : + withval=$with_x; +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + case $x_includes,$x_libraries in #( + *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5 ;; #( + *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib la dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Xlib.h. + # First, try using that file with no special directory specified. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # We can compile using X headers with no special include directory. +ac_x_includes= +else + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Xlib.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.i conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lX11 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + LIBS=$ac_save_LIBS +for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib la dll; do + if test -r "$ac_dir/libX11.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +case $ac_x_includes,$ac_x_libraries in #( + no,* | *,no | *\'*) + # Didn't find X, or a directory has "'" in its name. + ac_cv_have_x="have_x=no";; #( + *) + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$ac_x_includes'\ + ac_x_libraries='$ac_x_libraries'" +esac +fi +;; #( + *) have_x=yes;; + esac + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +$as_echo "$have_x" >&6; } + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$x_includes'\ + ac_x_libraries='$x_libraries'" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +$as_echo "libraries $x_libraries, headers $x_includes" >&6; } +fi + +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + +$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + X_LIBS="$X_LIBS -L$x_libraries" + # For Solaris; some versions of Sun CC require a space after -R and + # others require no space. Words are not sufficient . . . . + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 +$as_echo_n "checking whether -R must be followed by a space... " >&6; } + ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" + ac_xsave_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + X_LIBS="$X_LIBS -R$x_libraries" +else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + X_LIBS="$X_LIBS -R $x_libraries" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 +$as_echo "neither works" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_cxx_werror_flag=$ac_xsave_cxx_werror_flag + LIBS=$ac_xsave_LIBS + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn Johnson says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And Karl Berry says + # the Alpha needs dnet_stub (dnet does not exist). + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XOpenDisplay (); +int +main () +{ +return XOpenDisplay (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } +if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_dnet_dnet_ntoa=yes +else + ac_cv_lib_dnet_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } +if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldnet_stub $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dnet_ntoa (); +int +main () +{ +return dnet_ntoa (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_dnet_stub_dnet_ntoa=yes +else + ac_cv_lib_dnet_stub_dnet_ntoa=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +fi + + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_xsave_LIBS" + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to T.E. Dickey. + # The functions gethostbyname, getservbyname, and inet_addr are + # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. + ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = x""yes; then : + +fi + + if test $ac_cv_func_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_nsl_gethostbyname=yes +else + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +fi + + if test $ac_cv_lib_nsl_gethostbyname = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_bsd_gethostbyname=yes +else + ac_cv_lib_bsd_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" +fi + + fi + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says Simon Leinen: it contains gethostby* + # variants that don't use the name server (or something). -lsocket + # must be given before -lnsl if both are needed. We assume that + # if connect needs -lnsl, so does gethostbyname. + ac_fn_cxx_check_func "$LINENO" "connect" "ac_cv_func_connect" +if test "x$ac_cv_func_connect" = x""yes; then : + +fi + + if test $ac_cv_func_connect = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if test "${ac_cv_lib_socket_connect+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char connect (); +int +main () +{ +return connect (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_socket_connect=yes +else + ac_cv_lib_socket_connect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = x""yes; then : + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +fi + + fi + + # Guillermo Gomez says -lposix is necessary on A/UX. + ac_fn_cxx_check_func "$LINENO" "remove" "ac_cv_func_remove" +if test "x$ac_cv_func_remove" = x""yes; then : + +fi + + if test $ac_cv_func_remove = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 +$as_echo_n "checking for remove in -lposix... " >&6; } +if test "${ac_cv_lib_posix_remove+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char remove (); +int +main () +{ +return remove (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_posix_remove=yes +else + ac_cv_lib_posix_remove=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 +$as_echo "$ac_cv_lib_posix_remove" >&6; } +if test "x$ac_cv_lib_posix_remove" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + ac_fn_cxx_check_func "$LINENO" "shmat" "ac_cv_func_shmat" +if test "x$ac_cv_func_shmat" = x""yes; then : + +fi + + if test $ac_cv_func_shmat = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 +$as_echo_n "checking for shmat in -lipc... " >&6; } +if test "${ac_cv_lib_ipc_shmat+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lipc $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shmat (); +int +main () +{ +return shmat (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_ipc_shmat=yes +else + ac_cv_lib_ipc_shmat=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 +$as_echo "$ac_cv_lib_ipc_shmat" >&6; } +if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS=$LDFLAGS + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # John Interrante, Karl Berry + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 +$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } +if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IceConnectionNumber (); +int +main () +{ +return IceConnectionNumber (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_ICE_IceConnectionNumber=yes +else + ac_cv_lib_ICE_IceConnectionNumber=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +fi + + LDFLAGS=$ac_save_LDFLAGS + +fi + + +if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then + + # Print a helpful message on how to acquire the necessary build dependency. + # x11 is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=x11 + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find X11 libraries. $HELP_MSG" "$LINENO" 5 +fi + +# Some of the old makefiles require a setting of OPENWIN_HOME +# Since the X11R6 directory has disappeared on later Linuxes, +# we need to probe for it. +if test "x$OPENJDK_TARGET_OS" = xlinux; then + if test -d "$SYS_ROOT/usr/X11R6"; then + OPENWIN_HOME="$SYS_ROOT/usr/X11R6" + fi + if test -d "$SYS_ROOT/usr/include/X11"; then + OPENWIN_HOME="$SYS_ROOT/usr" + fi +fi +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + OPENWIN_HOME="/usr/openwin" +fi + + + +# +# Weird Sol10 something check...TODO change to try compile +# +if test "x${OPENJDK_TARGET_OS}" = xsolaris; then + if test "`uname -r`" = "5.10"; then + if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then + X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS" + fi + fi +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $X_CFLAGS" +for ac_header in X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + X11_A_OK=yes +else + X11_A_OK=no +fi + +done + +CFLAGS="$OLD_CFLAGS" +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + +if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then + + # Print a helpful message on how to acquire the necessary build dependency. + # x11 is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=x11 + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG" "$LINENO" 5 +fi + + + + + + +############################################################################### +# +# The common unix printing system cups is used to print from java. +# + +# Check whether --with-cups was given. +if test "${with_cups+set}" = set; then : + withval=$with_cups; +fi + + +# Check whether --with-cups-include was given. +if test "${with_cups_include+set}" = set; then : + withval=$with_cups_include; +fi + + +# Check whether --with-cups-lib was given. +if test "${with_cups_lib+set}" = set; then : + withval=$with_cups_lib; +fi + + +if test "x$CUPS_NOT_NEEDED" = xyes; then + if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cups not used, so --with-cups is ignored" >&5 +$as_echo "$as_me: WARNING: cups not used, so --with-cups is ignored" >&2;} + fi + CUPS_CFLAGS= + CUPS_LIBS= +else + CUPS_FOUND=no + + if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then + as_fn_error $? "It is not possible to disable the use of cups. Remove the --without-cups option." "$LINENO" 5 + fi + + if test "x${with_cups}" != x; then + CUPS_LIBS="-L${with_cups}/lib -lcups" + CUPS_CFLAGS="-I${with_cups}/include" + CUPS_FOUND=yes + fi + if test "x${with_cups_include}" != x; then + CUPS_CFLAGS="-I${with_cups_include}" + CUPS_FOUND=yes + fi + if test "x${with_cups_lib}" != x; then + CUPS_LIBS="-L${with_cups_lib} -lcups" + CUPS_FOUND=yes + fi + if test "x$CUPS_FOUND" = xno; then + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_cups_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_cups_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_cups_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The cups comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_cups} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for cups" >&5 +$as_echo "$as_me: Using builddeps $resource for cups" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# cups is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/cups.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_cups_ROOT} + thecflags=${builddep_cups_CFLAGS} + thelibs=${builddep_cups_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency cups" "$LINENO" 5 + fi + CUPS=$depdir + if test "x$theroot" != x; then + CUPS="$theroot" + fi + if test "x$thecflags" != x; then + CUPS_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + CUPS_LIBS="$thelibs" + fi + CUPS_FOUND=yes + + fi + + fi + + fi + if test "x$CUPS_FOUND" = xno; then + # Are the cups headers installed in the default /usr/include location? + for ac_header in cups/cups.h cups/ppd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + CUPS_FOUND=yes + CUPS_CFLAGS= + CUPS_LIBS="-lcups" + DEFAULT_CUPS=yes +fi + +done + + fi + if test "x$CUPS_FOUND" = xno; then + # Getting nervous now? Lets poke around for standard Solaris third-party + # package installation locations. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers and libs" >&5 +$as_echo_n "checking for cups headers and libs... " >&6; } + if test -s /opt/sfw/cups/include/cups/cups.h; then + # An SFW package seems to be installed! + CUPS_FOUND=yes + CUPS_CFLAGS="-I/opt/sfw/cups/include" + CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" + elif test -s /opt/csw/include/cups/cups.h; then + # A CSW package seems to be installed! + CUPS_FOUND=yes + CUPS_CFLAGS="-I/opt/csw/include" + CUPS_LIBS="-L/opt/csw/lib -lcups" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_FOUND" >&5 +$as_echo "$CUPS_FOUND" >&6; } + fi + if test "x$CUPS_FOUND" = xno; then + + # Print a helpful message on how to acquire the necessary build dependency. + # cups is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=cups + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find cups! $HELP_MSG " "$LINENO" 5 + fi +fi + + + + + + + +############################################################################### +# +# The ubiquitous freetype2 library is used to render fonts. +# + +# Check whether --with-freetype was given. +if test "${with_freetype+set}" = set; then : + withval=$with_freetype; +fi + + +# If we are using the OS installed system lib for freetype, then we do not need to copy it to the build tree +USING_SYSTEM_FT_LIB=false + +if test "x$FREETYPE2_NOT_NEEDED" = xyes; then + if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: freetype not used, so --with-freetype is ignored" >&5 +$as_echo "$as_me: WARNING: freetype not used, so --with-freetype is ignored" >&2;} + fi + FREETYPE2_CFLAGS= + FREETYPE2_LIBS= + FREETYPE2_LIB_PATH= +else + FREETYPE2_FOUND=no + + if test "x$with_freetype" != x; then + + # Fail with message the path to freetype if var with_freetype contains a path with no spaces in it. + # Unless on Windows, where we can rewrite the path. + HAS_SPACE=`echo "$with_freetype" | grep " "` + if test "x$HAS_SPACE" != x; then + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + with_freetype=`$CYGPATH -s -m -a "$with_freetype"` + with_freetype=`$CYGPATH -u "$with_freetype"` + else + as_fn_error $? "You cannot have spaces in the path to freetype! \"$with_freetype\"" "$LINENO" 5 + fi + fi + + FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" + if test "x$OPENJDK_TARGET_OS" = xwindows; then + FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" + fi + FREETYPE2_LIB_PATH="$with_freetype/lib" + FREETYPE2_CFLAGS="-I$with_freetype/include" + if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then + FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include" + fi + FREETYPE2_FOUND=yes + if test "x$FREETYPE2_FOUND" = xyes; then + # Verify that the directories exist + if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then + as_fn_error $? "Could not find the expected directories $with_freetype/lib and $with_freetype/include" "$LINENO" 5 + fi + # List the contents of the lib. + FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` + if test "x$FREETYPELIB" = x; then + as_fn_error $? "Could not find libfreetype.se nor freetype.dll in $with_freetype/lib" "$LINENO" 5 + fi + # Check one h-file + if ! test -s "$with_freetype/include/ft2build.h"; then + as_fn_error $? "Could not find $with_freetype/include/ft2build.h" "$LINENO" 5 + fi + fi + fi + if test "x$FREETYPE2_FOUND" = xno; then + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_freetype2_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The freetype2 comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_freetype2} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for freetype2" >&5 +$as_echo "$as_me: Using builddeps $resource for freetype2" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# freetype2 is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/freetype2.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_freetype2_ROOT} + thecflags=${builddep_freetype2_CFLAGS} + thelibs=${builddep_freetype2_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency freetype2" "$LINENO" 5 + fi + FREETYPE2=$depdir + if test "x$theroot" != x; then + FREETYPE2="$theroot" + fi + if test "x$thecflags" != x; then + FREETYPE2_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + FREETYPE2_LIBS="$thelibs" + fi + FREETYPE2_FOUND=yes + else FREETYPE2_FOUND=no + + fi + else FREETYPE2_FOUND=no + + fi + + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE2" >&5 +$as_echo_n "checking for FREETYPE2... " >&6; } + +if test -n "$FREETYPE2_CFLAGS"; then + pkg_cv_FREETYPE2_CFLAGS="$FREETYPE2_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$FREETYPE2_LIBS"; then + pkg_cv_FREETYPE2_LIBS="$FREETYPE2_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_FREETYPE2_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "freetype2" 2>&1` + else + FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --print-errors "freetype2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$FREETYPE2_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + FREETYPE2_FOUND=no +elif test $pkg_failed = untried; then + FREETYPE2_FOUND=no +else + FREETYPE2_CFLAGS=$pkg_cv_FREETYPE2_CFLAGS + FREETYPE2_LIBS=$pkg_cv_FREETYPE2_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + FREETYPE2_FOUND=yes +fi + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype in some standard locations" >&5 +$as_echo_n "checking for freetype in some standard locations... " >&6; } + + if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then + DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include" + DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype" + fi + if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then + DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2" + DEFAULT_FREETYPE_LIBS="-lfreetype" + fi + + PREV_CXXCFLAGS="$CXXFLAGS" + PREV_LDFLAGS="$LDFLAGS" + CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS" + LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include FT_FREETYPE_H + int main() { return 0; } + +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + # Yes, the default cflags and libs did the trick. + FREETYPE2_FOUND=yes + FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS" + FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS" + +else + + FREETYPE2_FOUND=no + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CXXCFLAGS="$PREV_CXXFLAGS" + LDFLAGS="$PREV_LDFLAGS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE2_FOUND" >&5 +$as_echo "$FREETYPE2_FOUND" >&6; } + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + + # Print a helpful message on how to acquire the necessary build dependency. + # freetype2 is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=freetype2 + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5 + fi +fi + + + + + + + + + +############################################################################### +# +# Check for alsa headers and libraries. Used on Linux/GNU systems. +# + +# Check whether --with-alsa was given. +if test "${with_alsa+set}" = set; then : + withval=$with_alsa; +fi + + +# Check whether --with-alsa-include was given. +if test "${with_alsa_include+set}" = set; then : + withval=$with_alsa_include; +fi + + +# Check whether --with-alsa-lib was given. +if test "${with_alsa_lib+set}" = set; then : + withval=$with_alsa_lib; +fi + + +if test "x$ALSA_NOT_NEEDED" = xyes; then + if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: alsa not used, so --with-alsa is ignored" >&5 +$as_echo "$as_me: WARNING: alsa not used, so --with-alsa is ignored" >&2;} + fi + ALSA_CFLAGS= + ALSA_LIBS= +else + ALSA_FOUND=no + + if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then + as_fn_error $? "It is not possible to disable the use of alsa. Remove the --without-alsa option." "$LINENO" 5 + fi + + if test "x${with_alsa}" != x; then + ALSA_LIBS="-L${with_alsa}/lib -lalsa" + ALSA_CFLAGS="-I${with_alsa}/include" + ALSA_FOUND=yes + fi + if test "x${with_alsa_include}" != x; then + ALSA_CFLAGS="-I${with_alsa_include}" + ALSA_FOUND=yes + fi + if test "x${with_alsa_lib}" != x; then + ALSA_LIBS="-L${with_alsa_lib} -lalsa" + ALSA_FOUND=yes + fi + if test "x$ALSA_FOUND" = xno; then + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + # Source the builddeps file again, to make sure it uses the latest variables! + . $builddepsfile + # Look for a target and build machine specific resource! + eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}} + if test "x$resource" = x; then + # Ok, lets instead look for a target specific resource + eval resource=\${builddep_alsa_TARGET_${rewritten_target_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a build specific resource + eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}} + fi + if test "x$resource" = x; then + # Ok, lets instead look for a generic resource + # (The alsa comes from M4 and not the shell, thus no need for eval here.) + resource=${builddep_alsa} + fi + if test "x$resource" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for alsa" >&5 +$as_echo "$as_me: Using builddeps $resource for alsa" >&6;} + # If the resource in the builddeps.conf file is an existing directory, + # for example /java/linux/cups + if test -d ${resource}; then + depdir=${resource} + else + +# alsa is for example mymodule +# $resource is for example libs/general/libmymod_1_2_3.zip +# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps +# $with_builddeps_dir is for example /localhome/builddeps +# depdir is the name of the variable into which we store the depdir, eg MYMOD +# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and +# unzip into the directory: /localhome/builddeps/libmymod_1_2_3 + filename=`basename $resource` + filebase=`echo $filename | sed 's/\.[^\.]*$//'` + filebase=${filename%%.*} + extension=${filename#*.} + installdir=$with_builddeps_dir/$filebase + if test ! -f $installdir/$filename.unpacked; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&5 +$as_echo "$as_me: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&6;} + if test ! -d $installdir; then + mkdir -p $installdir + fi + if test ! -d $installdir; then + as_fn_error $? "Could not create directory $installdir" "$LINENO" 5 + fi + tmpfile=`mktemp $installdir/alsa.XXXXXXXXX` + touch $tmpfile + if test ! -f $tmpfile; then + as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5 + fi + + # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip + # $tmpfile is the local file name for the downloaded file. + VALID_TOOL=no + if test "x$BDEPS_FTP" = xwget; then + VALID_TOOL=yes + wget -O $tmpfile $with_builddeps_server/$resource + fi + if test "x$BDEPS_FTP" = xlftp; then + VALID_TOOL=yes + lftp -c "get $with_builddeps_server/$resource -o $tmpfile" + fi + if test "x$BDEPS_FTP" = xftp; then + VALID_TOOL=yes + FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'` + FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'` + FTPUSERPWD=${FTPSERVER%%@*} + if test "x$FTPSERVER" != "x$FTPUSERPWD"; then + FTPUSER=${userpwd%%:*} + FTPPWD=${userpwd#*@} + FTPSERVER=${FTPSERVER#*@} + else + FTPUSER=ftp + FTPPWD=ftp + fi + # the "pass" command does not work on some + # ftp clients (read ftp.exe) but if it works, + # passive mode is better! + (\ + echo "user $FTPUSER $FTPPWD" ;\ + echo "pass" ;\ + echo "bin" ;\ + echo "get $FTPPATH $tmpfile" ;\ + ) | ftp -in $FTPSERVER + fi + if test "x$VALID_TOOL" != xyes; then + as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5 + fi + + mv $tmpfile $installdir/$filename + if test ! -s $installdir/$filename; then + as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5 + fi + case "$extension" in + zip) echo "Unzipping $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked) + ;; + tar.gz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + tgz) echo "Untaring $installdir/$filename..." + (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked) + ;; + *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5 + ;; + esac + fi + if test -f $installdir/$filename.unpacked; then + depdir=$installdir + fi + + fi + # Source the builddeps file again, because in the previous command, the depdir + # was updated to point at the current build dependency install directory. + . $builddepsfile + # Now extract variables from the builddeps.conf files. + theroot=${builddep_alsa_ROOT} + thecflags=${builddep_alsa_CFLAGS} + thelibs=${builddep_alsa_LIBS} + if test "x$depdir" = x; then + as_fn_error $? "Could not download build dependency alsa" "$LINENO" 5 + fi + ALSA=$depdir + if test "x$theroot" != x; then + ALSA="$theroot" + fi + if test "x$thecflags" != x; then + ALSA_CFLAGS="$thecflags" + fi + if test "x$thelibs" != x; then + ALSA_LIBS="$thelibs" + fi + ALSA_FOUND=yes + else ALSA_FOUND=no + + fi + else ALSA_FOUND=no + + fi + + fi + if test "x$ALSA_FOUND" = xno; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA" >&5 +$as_echo_n "checking for ALSA... " >&6; } + +if test -n "$ALSA_CFLAGS"; then + pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 + ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$ALSA_LIBS"; then + pkg_cv_ALSA_LIBS="$ALSA_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5 + ($PKG_CONFIG --exists --print-errors "alsa") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs "alsa" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "alsa" 2>&1` + else + ALSA_PKG_ERRORS=`$PKG_CONFIG --print-errors "alsa" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$ALSA_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ALSA_FOUND=no +elif test $pkg_failed = untried; then + ALSA_FOUND=no +else + ALSA_CFLAGS=$pkg_cv_ALSA_CFLAGS + ALSA_LIBS=$pkg_cv_ALSA_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + ALSA_FOUND=yes +fi + fi + if test "x$ALSA_FOUND" = xno; then + for ac_header in alsa/asoundlib.h +do : + ac_fn_cxx_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default" +if test "x$ac_cv_header_alsa_asoundlib_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ALSA_ASOUNDLIB_H 1 +_ACEOF + ALSA_FOUND=yes + ALSA_CFLAGS=-Iignoreme + ALSA_LIBS=-lasound + DEFAULT_ALSA=yes +else + ALSA_FOUND=no +fi + +done + + fi + if test "x$ALSA_FOUND" = xno; then + + # Print a helpful message on how to acquire the necessary build dependency. + # alsa is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=alsa + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find alsa! $HELP_MSG " "$LINENO" 5 + fi +fi + + + + + + + +############################################################################### +# +# Check for the jpeg library +# + +USE_EXTERNAL_LIBJPEG=true +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ljpeg" >&5 +$as_echo_n "checking for main in -ljpeg... " >&6; } +if test "${ac_cv_lib_jpeg_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ljpeg $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_jpeg_main=yes +else + ac_cv_lib_jpeg_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5 +$as_echo "$ac_cv_lib_jpeg_main" >&6; } +if test "x$ac_cv_lib_jpeg_main" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBJPEG 1 +_ACEOF + + LIBS="-ljpeg $LIBS" + +else + USE_EXTERNAL_LIBJPEG=false + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use jpeg decoder bundled with the OpenJDK source" >&5 +$as_echo "$as_me: Will use jpeg decoder bundled with the OpenJDK source" >&6;} + +fi + + + +############################################################################### +# +# Check for the gif library +# + +USE_EXTERNAL_LIBJPEG=true +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgif" >&5 +$as_echo_n "checking for main in -lgif... " >&6; } +if test "${ac_cv_lib_gif_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgif $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_gif_main=yes +else + ac_cv_lib_gif_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5 +$as_echo "$ac_cv_lib_gif_main" >&6; } +if test "x$ac_cv_lib_gif_main" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBGIF 1 +_ACEOF + + LIBS="-lgif $LIBS" + +else + USE_EXTERNAL_LIBGIF=false + { $as_echo "$as_me:${as_lineno-$LINENO}: Will use gif decoder bundled with the OpenJDK source" >&5 +$as_echo "$as_me: Will use gif decoder bundled with the OpenJDK source" >&6;} + +fi + + + +############################################################################### +# +# Check for the zlib library +# + + +# Check whether --with-zlib was given. +if test "${with_zlib+set}" = set; then : + withval=$with_zlib; +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compress in -lz" >&5 +$as_echo_n "checking for compress in -lz... " >&6; } +if test "${ac_cv_lib_z_compress+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char compress (); +int +main () +{ +return compress (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_z_compress=yes +else + ac_cv_lib_z_compress=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5 +$as_echo "$ac_cv_lib_z_compress" >&6; } +if test "x$ac_cv_lib_z_compress" = x""yes; then : + ZLIB_FOUND=yes +else + ZLIB_FOUND=no +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for which zlib to use" >&5 +$as_echo_n "checking for which zlib to use... " >&6; } + +DEFAULT_ZLIB=bundled +if test "x$OPENJDK_TARGET_OS" = xmacosx; then +# +# On macosx default is system...on others default is +# + DEFAULT_ZLIB=system +fi + +if test "x${ZLIB_FOUND}" != "xyes"; then +# +# If we don't find any system...set default to bundled +# + DEFAULT_ZLIB=bundled +fi + +# +# If user didn't specify, use DEFAULT_ZLIB +# +if test "x${with_zlib}" = "x"; then + with_zlib=${DEFAULT_ZLIB} +fi + +if test "x${with_zlib}" = "xbundled"; then + USE_EXTERNAL_LIBZ=false + { $as_echo "$as_me:${as_lineno-$LINENO}: result: bundled" >&5 +$as_echo "bundled" >&6; } +elif test "x${with_zlib}" = "xsystem"; then + if test "x${ZLIB_FOUND}" = "xyes"; then + USE_EXTERNAL_LIBZ=true + { $as_echo "$as_me:${as_lineno-$LINENO}: result: system" >&5 +$as_echo "system" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: system not found" >&5 +$as_echo "system not found" >&6; } + as_fn_error $? "--with-zlib=system specified, but no zlib found!" "$LINENO" 5 + fi +else + as_fn_error $? "Invalid value for --with-zlib: ${with_zlib}, use 'system' or 'bundled'" "$LINENO" 5 +fi + + + +############################################################################### +LIBZIP_CAN_USE_MMAP=true +if test "x$JDK_VARIANT" = "xembedded"; then + LIBZIP_CAN_USE_MMAP=false +fi + + +############################################################################### +# +# Check if altzone exists in time.h +# + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +return (int)altzone; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + has_altzone=yes +else + has_altzone=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test "x$has_altzone" = xyes; then + +$as_echo "#define HAVE_ALTZONE 1" >>confdefs.h + +fi + +############################################################################### +# +# Check the maths library +# + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 +$as_echo_n "checking for cos in -lm... " >&6; } +if test "${ac_cv_lib_m_cos+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cos (); +int +main () +{ +return cos (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_m_cos=yes +else + ac_cv_lib_m_cos=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 +$as_echo "$ac_cv_lib_m_cos" >&6; } +if test "x$ac_cv_lib_m_cos" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBM 1 +_ACEOF + + LIBS="-lm $LIBS" + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: Maths library was not found" >&5 +$as_echo "$as_me: Maths library was not found" >&6;} + +fi + + + +############################################################################### +# +# Check for libdl.so + +save_LIBS="$LIBS" +LIBS="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +fi + +LIBDL="$LIBS" + +LIBS="$save_LIBS" + + + +############################################################################### +# +# statically link libstdc++ before C++ ABI is stablized on Linux unless +# dynamic build is configured on command line. +# +# Check whether --enable-static-link-stdc++ was given. +if test "${enable_static_link_stdc__+set}" = set; then : + enableval=$enable_static_link_stdc__; +else + + enable_static_link_stdc__=yes + +fi + + +if test "x$OPENJDK_TARGET_OS" = xlinux; then + # Test if -lstdc++ works. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if dynamic link of stdc++ is possible" >&5 +$as_echo_n "checking if dynamic link of stdc++ is possible... " >&6; } + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + OLD_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -lstdc++" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + has_dynamic_libstdcxx=yes +else + has_dynamic_libstdcxx=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CXXFLAGS="$OLD_CXXFLAGS" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_dynamic_libstdcxx" >&5 +$as_echo "$has_dynamic_libstdcxx" >&6; } + + # Test if stdc++ can be linked statically. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if static link of stdc++ is possible" >&5 +$as_echo_n "checking if static link of stdc++ is possible... " >&6; } + STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + OLD_LIBS="$LIBS" + OLD_CXX="$CXX" + LIBS="$STATIC_STDCXX_FLAGS" + CXX="$CC" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + has_static_libstdcxx=yes +else + has_static_libstdcxx=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$OLD_LIBS" + CXX="$OLD_CXX" + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_static_libstdcxx" >&5 +$as_echo "$has_static_libstdcxx" >&6; } + + if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then + as_fn_error $? "I cannot link to stdc++! Neither dynamically nor statically." "$LINENO" 5 + fi + + if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Static linking of libstdc++ was not possible reverting to dynamic linking." >&5 +$as_echo "$as_me: Static linking of libstdc++ was not possible reverting to dynamic linking." >&6;} + enable_static_link_stdc__=no + fi + + if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Dynamic linking of libstdc++ was not possible reverting to static linking." >&5 +$as_echo "$as_me: Dynamic linking of libstdc++ was not possible reverting to static linking." >&6;} + enable_static_link_stdc__=yes + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libstdc++" >&5 +$as_echo_n "checking how to link with libstdc++... " >&6; } + if test "x$enable_static_link_stdc__" = xyes; then + LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" + LDCXX="$CC" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 +$as_echo "static" >&6; } + else + LIBCXX="$LIBCXX -lstdc++" + LDCXX="$CXX" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamic" >&5 +$as_echo "dynamic" >&6; } + fi +fi + +# libCrun is the c++ runtime-library with SunStudio (roughly the equivalent of gcc's libstdc++.so) +if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$LIBCXX" = x; then + LIBCXX="/usr/lib${LEGACY_OPENJDK_TARGET_CPU3}/libCrun.so.1" +fi + +# TODO better (platform agnostic) test +if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then + LIBCXX="-lstdc++" +fi + + + + + +############################################################################### +# +# We need to do some final tweaking, when everything else is done. +# +############################################################################### + + +HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET" + + +# The name of the Service Agent jar. +SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}" +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}" +fi + + + + +############################################################################### +# +# Configure parts of the build that only affect the build performance, +# not the result. +# +############################################################################### + + +# How many cores do we have on this build system? + +# Check whether --with-num-cores was given. +if test "${with_num_cores+set}" = set; then : + withval=$with_num_cores; +fi + +if test "x$with_num_cores" = x; then + # The number of cores were not specified, try to probe them. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for number of cores" >&5 +$as_echo_n "checking for number of cores... " >&6; } + NUM_CORES=1 + FOUND_CORES=no + + if test -f /proc/cpuinfo; then + # Looks like a Linux system + NUM_CORES=`cat /proc/cpuinfo | grep -c processor` + FOUND_CORES=yes + fi + + if test -x /usr/sbin/psrinfo; then + # Looks like a Solaris system + NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line` + FOUND_CORES=yes + fi + + if test -x /usr/sbin/system_profiler; then + # Looks like a MacOSX system + NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print $5}'` + FOUND_CORES=yes + fi + + if test "x$build_os" = xwindows; then + NUM_CORES=4 + fi + + # For c/c++ code we run twice as many concurrent build + # jobs than we have cores, otherwise we will stall on io. + CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` + + if test "x$FOUND_CORES" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NUM_CORES" >&5 +$as_echo "$NUM_CORES" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect number of cores, defaulting to 1!" >&5 +$as_echo "could not detect number of cores, defaulting to 1!" >&6; } + fi + + +else + NUM_CORES=$with_num_cores + CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2` +fi + + + + +# How much memory do we have on this build system? + +# Check whether --with-memory-size was given. +if test "${with_memory_size+set}" = set; then : + withval=$with_memory_size; +fi + +if test "x$with_memory_size" = x; then + # The memory size was not specified, try to probe it. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memory size" >&5 +$as_echo_n "checking for memory size... " >&6; } + # Default to 1024MB + MEMORY_SIZE=1024 + FOUND_MEM=no + + if test -f /proc/cpuinfo; then + # Looks like a Linux system + MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'` + MEMORY_SIZE=`expr $MEMORY_SIZE / 1024` + FOUND_MEM=yes + fi + + if test -x /usr/sbin/prtconf; then + # Looks like a Solaris system + MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print $3 }'` + FOUND_MEM=yes + fi + + if test -x /usr/sbin/system_profiler; then + # Looks like a MacOSX system + MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print $2}'` + MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` + FOUND_MEM=yes + fi + + if test "x$build_os" = xwindows; then + MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print $4 }' | sed 's/,//'` + FOUND_MEM=yes + fi + + if test "x$FOUND_MEM" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MEMORY_SIZE MB" >&5 +$as_echo "$MEMORY_SIZE MB" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect memory size defaulting to 1024MB!" >&5 +$as_echo "could not detect memory size defaulting to 1024MB!" >&6; } + fi + +else + MEMORY_SIZE=$with_memory_size +fi + + + +# Setup smart javac (after cores and memory have been setup) + + +# Check whether --with-server-java was given. +if test "${with_server_java+set}" = set; then : + withval=$with_server_java; +fi + + +if test "x$with_server_java" != x; then + SERVER_JAVA="$with_server_java" + FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" = x; then + as_fn_error $? "Could not execute server java: $SERVER_JAVA" "$LINENO" 5 + fi +else + SERVER_JAVA="" + # Hotspot specific options. + + # Test if -XX:+UseParallelOldGC is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -XX:+UseParallelOldGC to SERVER_JAVA + FOUND_WARN=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -XX:+UseParallelOldGC" + fi + + + # Test if -verbosegc is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -verbosegc to SERVER_JAVA + FOUND_WARN=`$JAVA -verbosegc -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -verbosegc -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -verbosegc" + fi + + # JRockit specific options. + + # Test if -Xverbose:gc is a valid argument to $JAVA (often is $JAVA passed as $JAVA) + # If so, then append -Xverbose:gc to SERVER_JAVA + FOUND_WARN=`$JAVA -Xverbose:gc -version 2>&1 | grep -i warn` + FOUND_VERSION=`$JAVA -Xverbose:gc -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xverbose:gc" + fi + + SERVER_JAVA="$JAVA $SERVER_JAVA" +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use shared server for javac" >&5 +$as_echo_n "checking whether to use shared server for javac... " >&6; } +# Check whether --enable-javac-server was given. +if test "${enable_javac_server+set}" = set; then : + enableval=$enable_javac_server; ENABLE_JAVAC_SERVER="${enableval}" +else + ENABLE_JAVAC_SERVER='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_SERVER" >&5 +$as_echo "$ENABLE_JAVAC_SERVER" >&6; } +if test "x$ENABLE_JAVAC_SERVER" = xyes; then + JAVAC_USE_REMOTE=true + JAVAC_SERVERS="$OUTPUT_ROOT/javacservers" +else + JAVAC_USE_REMOTE=false + JAVAC_SERVERS= +fi + + + + +# Check whether --with-javac-server-cores was given. +if test "${with_javac_server_cores+set}" = set; then : + withval=$with_javac_server_cores; +fi + +if test "x$with_javac_server_cores" != x; then + JAVAC_SERVER_CORES="$with_javac_server_cores" +else + if test "$NUM_CORES" -gt 16; then + # We set this arbitrary limit because we want to limit the heap + # size of the javac server. + # In the future we will make the javac compilers in the server + # share more and more state, thus enabling us to use more and + # more concurrent threads in the server. + JAVAC_SERVER_CORES="16" + else + JAVAC_SERVER_CORES="$NUM_CORES" + fi + + if test "$MEMORY_SIZE" -gt "17000"; then + MAX_HEAP_MEM=10000 + + # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -d64 to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -d64" + fi + + + # Test if -Xms10G -Xmx10G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms10G -Xmx10G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms10G -Xmx10G" + fi + + + # Test if -Xmn2G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn2G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn2G" + fi + + elif test "$MEMORY_SIZE" -gt "10000"; then + MAX_HEAP_MEM=6000 + + # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -d64 to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -d64" + fi + + + # Test if -Xms6G -Xmx6G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms6G -Xmx6G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms6G -Xmx6G" + fi + + + # Test if -Xmn1G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn1G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn1G" + fi + + elif test "$MEMORY_SIZE" -gt "5000"; then + MAX_HEAP_MEM=3000 + + # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -d64 to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -d64" + fi + + + # Test if -Xms1G -Xmx3G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms1G -Xmx3G to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx3G" + fi + + + # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn256M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn256M" + fi + + elif test "$MEMORY_SIZE" -gt "3800"; then + MAX_HEAP_MEM=2500 + + # Test if -Xms1G -Xmx2500M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms1G -Xmx2500M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx2500M" + fi + + + # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn256M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn256M" + fi + + elif test "$MEMORY_SIZE" -gt "1900"; then + MAX_HEAP_MEM=1200 + + # Test if -Xms700M -Xmx1200M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms700M -Xmx1200M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms700M -Xmx1200M" + fi + + + # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn256M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn256M" + fi + + elif test "$MEMORY_SIZE" -gt "1000"; then + MAX_HEAP_MEM=900 + + # Test if -Xms400M -Xmx900M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms400M -Xmx900M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms400M -Xmx900M" + fi + + + # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn128M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn128M" + fi + + else + MAX_HEAP_MEM=512 + + # Test if -Xms256M -Xmx512M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xms256M -Xmx512M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xms256M -Xmx512M" + fi + + + # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA) + # If so, then append -Xmn128M to SERVER_JAVA + FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn` + FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""` + if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then + SERVER_JAVA="$SERVER_JAVA -Xmn128M" + fi + + fi + + MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501` + if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if number of server cores must be reduced" >&5 +$as_echo_n "checking if number of server cores must be reduced... " >&6; } + JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&5 +$as_echo "yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&6; } + fi +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to track dependencies between Java packages" >&5 +$as_echo_n "checking whether to track dependencies between Java packages... " >&6; } +# Check whether --enable-javac-deps was given. +if test "${enable_javac_deps+set}" = set; then : + enableval=$enable_javac_deps; ENABLE_JAVAC_DEPS="${enableval}" +else + ENABLE_JAVAC_DEPS='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_DEPS" >&5 +$as_echo "$ENABLE_JAVAC_DEPS" >&6; } +if test "x$ENABLE_JAVAC_DEPS" = xyes; then + JAVAC_USE_DEPS=true +else + JAVAC_USE_DEPS=false +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use multiple cores for javac compilation" >&5 +$as_echo_n "checking whether to use multiple cores for javac compilation... " >&6; } +# Check whether --enable-javac-multi-core was given. +if test "${enable_javac_multi_core+set}" = set; then : + enableval=$enable_javac_multi_core; ENABLE_JAVAC_MULTICORE="${enableval}" +else + ENABLE_JAVAC_MULTICORE='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_MULTICORE" >&5 +$as_echo "$ENABLE_JAVAC_MULTICORE" >&6; } +if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then + JAVAC_USE_MODE=MULTI_CORE_CONCURRENT +else + JAVAC_USE_MODE=SINGLE_THREADED_BATCH + if test "x$ENABLE_JAVAC_DEPS" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&5 +$as_echo "$as_me: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling dependency tracking for you now." >&5 +$as_echo "$as_me: WARNING: Disabling dependency tracking for you now." >&2;} + JAVAC_USE_DEPS=false + fi + if test "x$ENABLE_JAVAC_SERVER" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&5 +$as_echo "$as_me: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling javac server for you now." >&5 +$as_echo "$as_me: WARNING: Disabling javac server for you now." >&2;} + JAVAC_USE_REMOTE=false + fi +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use sjavac" >&5 +$as_echo_n "checking whether to use sjavac... " >&6; } +# Check whether --enable-sjavac was given. +if test "${enable_sjavac+set}" = set; then : + enableval=$enable_sjavac; ENABLE_SJAVAC="${enableval}" +else + ENABLE_SJAVAC='no' +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_SJAVAC" >&5 +$as_echo "$ENABLE_SJAVAC" >&6; } + + + + +# Can the C/C++ compiler use precompiled headers? + + +############################################################################### +# +# Can the C/C++ compiler use precompiled headers? +# +# Check whether --enable-precompiled-headers was given. +if test "${enable_precompiled_headers+set}" = set; then : + enableval=$enable_precompiled_headers; ENABLE_PRECOMPH=${enable_precompiled-headers} +else + ENABLE_PRECOMPH=yes +fi + + +USE_PRECOMPILED_HEADER=1 +if test "x$ENABLE_PRECOMPH" = xno; then + USE_PRECOMPILED_HEADER=0 +fi + +if test "x$ENABLE_PRECOMPH" = xyes; then + # Check that the compiler actually supports precomp headers. + if test "x$GCC" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking that precompiled headers work" >&5 +$as_echo_n "checking that precompiled headers work... " >&6; } + echo "int alfa();" > conftest.h + $CXX -x c++-header conftest.h -o conftest.hpp.gch + if test ! -f conftest.hpp.gch; then + echo Precompiled header is not working! + USE_PRECOMPILED_HEADER=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + rm -f conftest.h + fi +fi + + + + +# Setup use of ccache, if available + + # Check whether --enable-ccache was given. +if test "${enable_ccache+set}" = set; then : + enableval=$enable_ccache; ENABLE_CCACHE=${enable_ccache} +else + ENABLE_CCACHE=yes +fi + + if test "x$ENABLE_CCACHE" = xyes; then + # Extract the first word of "ccache", so it can be a program name with args. +set dummy ccache; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CCACHE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CCACHE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CCACHE="$CCACHE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CCACHE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CCACHE=$ac_cv_path_CCACHE +if test -n "$CCACHE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCACHE" >&5 +$as_echo "$CCACHE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ccache" >&5 +$as_echo_n "checking for ccache... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: explicitly disabled" >&5 +$as_echo "explicitly disabled" >&6; } + CCACHE= + fi + + + +# Check whether --with-ccache-dir was given. +if test "${with_ccache_dir+set}" = set; then : + withval=$with_ccache_dir; +fi + + + if test "x$with_ccache_dir" != x; then + # When using a non home ccache directory, assume the use is to share ccache files + # with other users. Thus change the umask. + SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" + fi + CCACHE_FOUND="" + if test "x$CCACHE" != x; then + + if test "x$CCACHE" != x; then + CCACHE_FOUND="true" + # Only use ccache if it is 3.1.4 or later, which supports + # precompiled headers. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ccache supports precompiled headers" >&5 +$as_echo_n "checking if ccache supports precompiled headers... " >&6; } + HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.[456789]) 2> /dev/null` + if test "x$HAS_GOOD_CCACHE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccache" >&5 +$as_echo "no, disabling ccache" >&6; } + CCACHE= + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C-compiler supports ccache precompiled headers" >&5 +$as_echo_n "checking if C-compiler supports ccache precompiled headers... " >&6; } + PUSHED_FLAGS="$CXXFLAGS" + CXXFLAGS="-fpch-preprocess $CXXFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + CC_KNOWS_CCACHE_TRICK=yes +else + CC_KNOWS_CCACHE_TRICK=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXXFLAGS="$PUSHED_FLAGS" + if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccaching of precompiled headers" >&5 +$as_echo "no, disabling ccaching of precompiled headers" >&6; } + CCACHE= + fi + fi + fi + + if test "x$CCACHE" != x; then + CCACHE_SLOPPINESS=time_macros + CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" + CCACHE_FLAGS=-fpch-preprocess + + if test "x$SET_CCACHE_DIR" != x; then + mkdir -p $CCACHE_DIR > /dev/null 2>&1 + chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 + fi + fi + + fi + + +############################################################################### +# +# And now the finish... +# +############################################################################### + +# Check for some common pitfalls + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if build directory is on local disk" >&5 +$as_echo_n "checking if build directory is on local disk... " >&6; } + + # df -l lists only local disks; if the given directory is not found then + # a non-zero exit code is given + if $DF -l $OUTPUT_ROOT > /dev/null 2>&1; then + OUTPUT_DIR_IS_LOCAL="yes" + else + OUTPUT_DIR_IS_LOCAL="no" + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OUTPUT_DIR_IS_LOCAL" >&5 +$as_echo "$OUTPUT_DIR_IS_LOCAL" >&6; } + +# Check if the user has any old-style ALT_ variables set. +FOUND_ALT_VARIABLES=`env | grep ^ALT_` + +# Before generating output files, test if they exist. If they do, this is a reconfigure. +# Since we can't properly handle the dependencies for this, warn the user about the situation +if test -e $OUTPUT_ROOT/spec.gmk; then + IS_RECONFIGURE=yes +else + IS_RECONFIGURE=no +fi + +if test -e $SRC_ROOT/build/.hide-configure-performance-hints; then + HIDE_PERFORMANCE_HINTS=yes +else + HIDE_PERFORMANCE_HINTS=no + # Hide it the next time around... + $TOUCH $SRC_ROOT/build/.hide-configure-performance-hints > /dev/null 2>&1 +fi + + + +# At the end, call the closed hook. (Dummy macro if no closed sources available) + + +# We're messing a bit with internal autoconf variables to put the config.status +# in the output directory instead of the current directory. +CONFIG_STATUS="$OUTPUT_ROOT/config.status" +# Create the actual output files. Now the main work of configure is done. +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by openjdk $as_me jdk8, which was +generated by GNU Autoconf 2.67. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +openjdk config.status jdk8 +configured by $0, generated by GNU Autoconf 2.67, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "$OUTPUT_ROOT/config.h") CONFIG_HEADERS="$CONFIG_HEADERS $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" ;; + "$OUTPUT_ROOT/spec.gmk") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" ;; + "$OUTPUT_ROOT/spec.sh") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in" ;; + "$OUTPUT_ROOT/Makefile") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi + ;; + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +# Finally output some useful information to the user + +# Finally output some useful information to the user + +if test "x$CCACHE_FOUND" != x; then + if test "x$HAS_GOOD_CCACHE" = x; then + CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" + CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." + else + CCACHE_STATUS="installed and in use" + fi +else + if test "x$GCC" = xyes; then + CCACHE_STATUS="not installed (consider installing)" + CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." + else + CCACHE_STATUS="not available for your system" + fi +fi + +printf "\n" +printf "====================================================\n" +printf "A new configuration has been successfully created in\n" +printf "$OUTPUT_ROOT\n" +if test "x$CONFIGURE_COMMAND_LINE" != x; then + printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n" +else + printf "using default settings.\n" +fi + +printf "\n" +printf "Configuration summary:\n" +printf "* Debug level: $DEBUG_LEVEL\n" +printf "* JDK variant: $JDK_VARIANT\n" +printf "* JVM variants: $with_jvm_variants\n" +printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n" +printf "* Boot JDK: $BOOT_JDK\n" + +printf "\n" +printf "Build performance summary:\n" +printf "* Cores to use: $NUM_CORES\n" +printf "* Memory limit: $MEMORY_SIZE MB\n" +printf "* ccache status: $CCACHE_STATUS\n" +printf "\n" + +if test "x$CCACHE_HELP_MSG" != x && test "x$HIDE_PERFORMANCE_HINTS" = "xno"; then + printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" + printf "$CCACHE_HELP_MSG\n" + + # Print a helpful message on how to acquire the necessary build dependency. + # ccache is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=ccache + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + printf "$HELP_MSG\n" + printf "\n" +fi + +if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xyes"; then + printf "NOTE: You have requested to build more than one version of the JVM, which\n" + printf "will result in longer build times.\n" + printf "\n" +fi + +if test "x$FOUND_ALT_VARIABLES" != "x"; then + printf "WARNING: You have old-style ALT_ environment variables set.\n" + printf "These are not respected, and will be ignored. It is recommended\n" + printf "that you clean your environment. The following variables are set:\n" + printf "$FOUND_ALT_VARIABLES\n" + printf "\n" +fi + +if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then + printf "WARNING: Your build output directory is not on a local disk.\n" + printf "This will severely degrade build performance!\n" + printf "It is recommended that you create an output directory on a local disk,\n" + printf "and run the configure script again from that directory.\n" + printf "\n" +fi + +if test "x$IS_RECONFIGURE" = "xyes"; then + printf "WARNING: The result of this configuration has overridden an older\n" + printf "configuration. You *should* run 'make clean' to make sure you get a\n" + printf "proper build. Failure to do so might result in strange build problems.\n" + printf "\n" +fi + diff --git a/common/autoconf/help.m4 b/common/autoconf/help.m4 index 6f74b5e65e9..01b48172dae 100644 --- a/common/autoconf/help.m4 +++ b/common/autoconf/help.m4 @@ -23,11 +23,13 @@ # questions. # -function prepare_help_system { +AC_DEFUN_ONCE([HELP_SETUP_DEPENDENCY_HELP], +[ AC_CHECK_PROGS(PKGHANDLER, apt-get yum port pkgutil pkgadd) -} - -function help_on_build_dependency { +]) + +AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY], +[ # Print a helpful message on how to acquire the necessary build dependency. # $1 is the help tag: freetyp2, cups, pulse, alsa etc MISSING_DEPENDENCY=$1 @@ -51,9 +53,9 @@ function help_on_build_dependency { if test "x$PKGHANDLER_COMMAND" != x; then HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." fi -} +]) -function apt_help { +apt_help() { case $1 in devkit) PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;; @@ -76,7 +78,7 @@ function apt_help { esac } -function yum_help { +yum_help() { case $1 in devkit) PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;; @@ -99,14 +101,97 @@ function yum_help { esac } -function port_help { +port_help() { PKGHANDLER_COMMAND="" } -function pkgutil_help { +pkgutil_help() { PKGHANDLER_COMMAND="" } -function pkgadd_help { +pkgadd_help() { PKGHANDLER_COMMAND="" } + +AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS], +[ +# Finally output some useful information to the user + +if test "x$CCACHE_FOUND" != x; then + if test "x$HAS_GOOD_CCACHE" = x; then + CCACHE_STATUS="installed, but disabled (version older than 3.1.4)" + CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading." + else + CCACHE_STATUS="installed and in use" + fi +else + if test "x$GCC" = xyes; then + CCACHE_STATUS="not installed (consider installing)" + CCACHE_HELP_MSG="You do not have ccache installed. Try installing it." + else + CCACHE_STATUS="not available for your system" + fi +fi + +printf "\n" +printf "====================================================\n" +printf "A new configuration has been successfully created in\n" +printf "$OUTPUT_ROOT\n" +if test "x$CONFIGURE_COMMAND_LINE" != x; then + printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n" +else + printf "using default settings.\n" +fi + +printf "\n" +printf "Configuration summary:\n" +printf "* Debug level: $DEBUG_LEVEL\n" +printf "* JDK variant: $JDK_VARIANT\n" +printf "* JVM variants: $with_jvm_variants\n" +printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n" +printf "* Boot JDK: $BOOT_JDK\n" + +printf "\n" +printf "Build performance summary:\n" +printf "* Cores to use: $NUM_CORES\n" +printf "* Memory limit: $MEMORY_SIZE MB\n" +printf "* ccache status: $CCACHE_STATUS\n" +printf "\n" + +if test "x$CCACHE_HELP_MSG" != x && test "x$HIDE_PERFORMANCE_HINTS" = "xno"; then + printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n" + printf "$CCACHE_HELP_MSG\n" + HELP_MSG_MISSING_DEPENDENCY([ccache]) + printf "$HELP_MSG\n" + printf "\n" +fi + +if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xyes"; then + printf "NOTE: You have requested to build more than one version of the JVM, which\n" + printf "will result in longer build times.\n" + printf "\n" +fi + +if test "x$FOUND_ALT_VARIABLES" != "x"; then + printf "WARNING: You have old-style ALT_ environment variables set.\n" + printf "These are not respected, and will be ignored. It is recommended\n" + printf "that you clean your environment. The following variables are set:\n" + printf "$FOUND_ALT_VARIABLES\n" + printf "\n" +fi + +if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then + printf "WARNING: Your build output directory is not on a local disk.\n" + printf "This will severely degrade build performance!\n" + printf "It is recommended that you create an output directory on a local disk,\n" + printf "and run the configure script again from that directory.\n" + printf "\n" +fi + +if test "x$IS_RECONFIGURE" = "xyes"; then + printf "WARNING: The result of this configuration has overridden an older\n" + printf "configuration. You *should* run 'make clean' to make sure you get a\n" + printf "proper build. Failure to do so might result in strange build problems.\n" + printf "\n" +fi +]) diff --git a/common/autoconf/jdk-options.m4 b/common/autoconf/jdk-options.m4 new file mode 100644 index 00000000000..28266251f99 --- /dev/null +++ b/common/autoconf/jdk-options.m4 @@ -0,0 +1,551 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VARIANT], +[ +############################################################################### +# +# Check which variant of the JDK that we want to build. +# Currently we have: +# normal: standard edition +# embedded: cut down to a smaller footprint +# +# Effectively the JDK variant gives a name to a specific set of +# modules to compile into the JDK. In the future, these modules +# might even be Jigsaw modules. +# +AC_MSG_CHECKING([which variant of the JDK to build]) +AC_ARG_WITH([jdk-variant], [AS_HELP_STRING([--with-jdk-variant], + [JDK variant to build (normal, embedded) @<:@normal@:>@])]) + +if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then + JAVASE_EMBEDDED="" + MINIMIZE_RAM_USAGE="" + JDK_VARIANT="normal" +elif test "x$with_jdk_variant" = xembedded; then + JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true" + MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true" + JDK_VARIANT="embedded" +else + AC_MSG_ERROR([The available JDK variants are: normal, embedded]) +fi + +AC_SUBST(JAVASE_EMBEDDED) +AC_SUBST(MINIMIZE_RAM_USAGE) +AC_SUBST(JDK_VARIANT) + +AC_MSG_RESULT([$JDK_VARIANT]) +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS], +[ + +############################################################################### +# +# Check which variants of the JVM that we want to build. +# Currently we have: +# server: normal interpreter and a tiered C1/C2 compiler +# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms) +# kernel: kernel footprint JVM that passes the TCK without major performance problems, +# ie normal interpreter and C1, only the serial GC, kernel jvmti etc +# zero: no machine code interpreter, no compiler +# zeroshark: zero interpreter and shark/llvm compiler backend +AC_MSG_CHECKING([which variants of the JVM that should be built]) +AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants], + [JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) @<:@server@:>@])]) + +if test "x$with_jvm_variants" = x; then + if test "x$JDK_VARIANT" = xembedded; then + with_jvm_variants="client" + else + with_jvm_variants="server" + fi +fi + +JVM_VARIANTS=",$with_jvm_variants," +TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'` + +if test "x$TEST_VARIANTS" != "x,"; then + AC_MSG_ERROR([The available JVM variants are: server, client, kernel, zero, zeroshark]) +fi +AC_MSG_RESULT([$with_jvm_variants]) + +JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'` +JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'` +JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'` +JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'` +JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'` + +if test "x$JVM_VARIANT_CLIENT" = xtrue; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + AC_MSG_ERROR([You cannot build a client JVM for a 64-bit machine.]) + fi +fi +if test "x$JVM_VARIANT_KERNEL" = xtrue; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + AC_MSG_ERROR([You cannot build a kernel JVM for a 64-bit machine.]) + fi +fi + +# Replace the commas with AND for use in the build directory name. +ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'` +COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'` +if test "x$COUNT_VARIANTS" != "x,1"; then + BUILDING_MULTIPLE_JVM_VARIANTS=yes +else + BUILDING_MULTIPLE_JVM_VARIANTS=no +fi + +AC_SUBST(JVM_VARIANTS) +AC_SUBST(JVM_VARIANT_SERVER) +AC_SUBST(JVM_VARIANT_CLIENT) +AC_SUBST(JVM_VARIANT_KERNEL) +AC_SUBST(JVM_VARIANT_ZERO) +AC_SUBST(JVM_VARIANT_ZEROSHARK) + + +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_LEVEL], +[ +############################################################################### +# +# Set the debug level +# release: no debug information, all optimizations, no asserts. +# fastdebug: debug information (-g), all optimizations, all asserts +# slowdebug: debug information (-g), no optimizations, all asserts +# +DEBUG_LEVEL="release" +AC_MSG_CHECKING([which debug level to use]) +AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug], + [set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) @<:@disabled@:>@])], + [ + ENABLE_DEBUG="${enableval}" + DEBUG_LEVEL="fastdebug" + ], [ENABLE_DEBUG="no"]) + +AC_ARG_WITH([debug-level], [AS_HELP_STRING([--with-debug-level], + [set the debug level (release, fastdebug, slowdebug) @<:@release@:>@])], + [ + DEBUG_LEVEL="${withval}" + if test "x$ENABLE_DEBUG" = xyes; then + AC_MSG_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.]) + fi + ]) +AC_MSG_RESULT([$DEBUG_LEVEL]) + +if test "x$DEBUG_LEVEL" != xrelease && \ + test "x$DEBUG_LEVEL" != xfastdebug && \ + test "x$DEBUG_LEVEL" != xslowdebug; then + AC_MSG_ERROR([Allowed debug levels are: release, fastdebug and slowdebug]) +fi + + +############################################################################### +# +# Setup legacy vars/targets and new vars to deal with different debug levels. +# + +case $DEBUG_LEVEL in + release ) + VARIANT="OPT" + FASTDEBUG="false" + DEBUG_CLASSFILES="false" + BUILD_VARIANT_RELEASE="" + HOTSPOT_DEBUG_LEVEL="product" + HOTSPOT_EXPORT="product" + ;; + fastdebug ) + VARIANT="DBG" + FASTDEBUG="true" + DEBUG_CLASSFILES="true" + BUILD_VARIANT_RELEASE="-fastdebug" + HOTSPOT_DEBUG_LEVEL="fastdebug" + HOTSPOT_EXPORT="fastdebug" + ;; + slowdebug ) + VARIANT="DBG" + FASTDEBUG="false" + DEBUG_CLASSFILES="true" + BUILD_VARIANT_RELEASE="-debug" + HOTSPOT_DEBUG_LEVEL="jvmg" + HOTSPOT_EXPORT="debug" + ;; +esac + +##### +# Generate the legacy makefile targets for hotspot. +# The hotspot api for selecting the build artifacts, really, needs to be improved. +# +HOTSPOT_TARGET="" + +if test "x$JVM_VARIANT_SERVER" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} " +fi + +if test "x$JVM_VARIANT_CLIENT" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 " +fi + +if test "x$JVM_VARIANT_KERNEL" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel " +fi + +if test "x$JVM_VARIANT_ZERO" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero " +fi + +if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then + HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark " +fi + +HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT" + +##### + +AC_SUBST(DEBUG_LEVEL) +AC_SUBST(VARIANT) +AC_SUBST(FASTDEBUG) +AC_SUBST(DEBUG_CLASSFILES) +AC_SUBST(BUILD_VARIANT_RELEASE) +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS], +[ + +############################################################################### +# +# Should we build only OpenJDK even if closed sources are present? +# +AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only], + [build OpenJDK regardless of the presence of closed repositories @<:@disabled@:>@])],,) + +if test "x$enable_openjdk_only" = "xyes"; then + OPENJDK=true +elif test "x$enable_openjdk_only" = "xno"; then + OPENJDK=false +elif test -d "$SRC_ROOT/jdk/src/closed"; then + OPENJDK=false +else + OPENJDK=true +fi + +if test "x$OPENJDK" = "xtrue"; then + SET_OPENJDK=OPENJDK=true +fi + +AC_SUBST(SET_OPENJDK) + +############################################################################### +# +# JIGSAW or not. The JIGSAW variable is used during the intermediate +# stage when we are building both the old style JDK and the new style modularized JDK. +# When the modularized JDK is finalized, this option will go away. +# +AC_ARG_ENABLE([jigsaw], [AS_HELP_STRING([--enable-jigsaw], + [build Jigsaw images (not yet available) @<:@disabled@:>@])],,) + +if test "x$enable_jigsaw" = "xyes"; then + JIGSAW=true +else + JIGSAW=false +fi +AC_SUBST(JIGSAW) + +############################################################################### +# +# Should we build a JDK/JVM with headful support (ie a graphical ui)? +# We always build headless support. +# +AC_MSG_CHECKING([headful support]) +AC_ARG_ENABLE([headful], [AS_HELP_STRING([--disable-headful], + [build headful support (graphical UI support) @<:@enabled@:>@])], + [SUPPORT_HEADFUL=${enable_headful}], [SUPPORT_HEADFUL=yes]) + +SUPPORT_HEADLESS=yes +BUILD_HEADLESS="BUILD_HEADLESS:=true" + +if test "x$SUPPORT_HEADFUL" = xyes; then + # We are building both headful and headless. + BUILD_HEADLESS_ONLY="" + headful_msg="inlude support for both headful and headless" +fi + +if test "x$SUPPORT_HEADFUL" = xno; then + # Thus we are building headless only. + BUILD_HEADLESS="BUILD_HEADLESS:=true" + BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true" + headful_msg="headless only" +fi + +AC_MSG_RESULT([$headful_msg]) + +AC_SUBST(SUPPORT_HEADLESS) +AC_SUBST(SUPPORT_HEADFUL) +AC_SUBST(BUILD_HEADLESS) +AC_SUBST(BUILD_HEADLESS_ONLY) + +############################################################################### +# +# Should we run the painfully slow javadoc tool? +# +AC_MSG_CHECKING([whether to build documentation]) +AC_ARG_ENABLE([docs], [AS_HELP_STRING([--enable-docs], + [enable generation of Javadoc documentation @<:@disabled@:>@])], + [ENABLE_DOCS="${enableval}"], [ENABLE_DOCS='no']) +AC_MSG_RESULT([$ENABLE_DOCS]) +AC_SUBST(ENABLE_DOCS) +GENERATE_DOCS=false +if test "x$ENABLE_DOCS" = xyes; then + GENERATE_DOCS=true +fi +AC_SUBST(GENERATE_DOCS) + +############################################################################### +# +# Should we compile nimbus swing L&F? We can probably remove this option +# since nimbus is officially part of javax now. +# +AC_MSG_CHECKING([whether to build nimbus L&F]) +AC_ARG_ENABLE([nimbus], [AS_HELP_STRING([--disable-nimbus], + [disable Nimbus L&F @<:@enabled@:>@])], + [ENABLE_NIMBUS="${enableval}"], [ENABLE_NIMBUS='yes']) +AC_MSG_RESULT([$ENABLE_NIMBUS]) +DISABLE_NIMBUS= +if test "x$ENABLE_NIMBUS" = xno; then + DISABLE_NIMBUS=true +fi +AC_SUBST(DISABLE_NIMBUS) + +# Control wether Hotspot runs Queens test after build. +AC_ARG_ENABLE([hotspot-test-in-build], [AS_HELP_STRING([--enable-hotspot-test-in-build], + [enable running of Queens test after Hotspot build (not yet available) @<:@disabled@:>@])],, + [enable_hotspot_test_in_build=no]) +if test "x$enable_hotspot_test_in_build" = "xyes"; then + TEST_IN_BUILD=true +else + TEST_IN_BUILD=false +fi +AC_SUBST(TEST_IN_BUILD) + +############################################################################### +# +# Choose cacerts source file +# +AC_ARG_WITH(cacerts-file, [AS_HELP_STRING([--with-cacerts-file], + [specify alternative cacerts file])]) +if test "x$with_cacerts_file" != x; then + CACERTS_FILE=$with_cacerts_file +else + if test "x$OPENJDK" = "xtrue"; then + CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts + else + CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal + fi +fi +AC_SUBST(CACERTS_FILE) + +############################################################################### +# +# Compress jars +# +COMPRESS_JARS=false + +# default for embedded is yes... +if test "x$JDK_VARIANT" = "xembedded"; then + COMPRESS_JARS=true +fi +AC_SUBST(COMPRESS_JARS) + +############################################################################### +# +# Should we compile JFR +# default no, except for on closed-jdk and !embedded +# +ENABLE_JFR=no + +# Is the JFR source present + +# +# For closed && !embedded default is yes if the source is present +# +if test "x${OPENJDK}" != "xtrue" && test "x$JDK_VARIANT" != "xembedded" && test -d "$SRC_ROOT/jdk/src/closed/share/native/oracle/jfr"; then + ENABLE_JFR=yes +fi + +AC_MSG_CHECKING([whether to build jfr]) +AC_ARG_ENABLE([jfr], [AS_HELP_STRING([--enable-jfr], + [enable jfr (default is no)])] + [ENABLE_JFR="${enableval}"]) +AC_MSG_RESULT([${ENABLE_JFR}]) + +if test "x$ENABLE_JFR" = "xyes"; then + ENABLE_JFR=true +elif test "x$ENABLE_JFR" = "xno"; then + ENABLE_JFR=false +else + AC_MSG_ERROR([Invalid argument to --enable-jfr]) +fi + +AC_SUBST(ENABLE_JFR) +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VERSION_NUMBERS], +[ +# Source the version numbers +. $AUTOCONF_DIR/version.numbers +if test "x$OPENJDK" = "xfalse"; then + . $AUTOCONF_DIR/closed.version.numbers +fi +# Now set the JDK version, milestone, build number etc. +AC_SUBST(JDK_MAJOR_VERSION) +AC_SUBST(JDK_MINOR_VERSION) +AC_SUBST(JDK_MICRO_VERSION) +AC_SUBST(JDK_UPDATE_VERSION) +AC_SUBST(JDK_BUILD_NUMBER) +AC_SUBST(MILESTONE) +AC_SUBST(LAUNCHER_NAME) +AC_SUBST(PRODUCT_NAME) +AC_SUBST(PRODUCT_SUFFIX) +AC_SUBST(JDK_RC_PLATFORM_NAME) +AC_SUBST(COMPANY_NAME) + +COPYRIGHT_YEAR=`date +'%Y'` +AC_SUBST(COPYRIGHT_YEAR) + +RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX" +AC_SUBST(RUNTIME_NAME) + +if test "x$JDK_UPDATE_VERSION" != x; then + JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}" +else + JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}" +fi +AC_SUBST(JDK_VERSION) + +if test "x$MILESTONE" != x; then + RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}" +else + RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}" +fi +AC_SUBST(RELEASE) + +if test "x$JDK_BUILD_NUMBER" != x; then + FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}" +else + JDK_BUILD_NUMBER=b00 + BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` + # Avoid [:alnum:] since it depends on the locale. + CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` + USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` + FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" +fi +AC_SUBST(FULL_VERSION) +COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'` +AC_SUBST(COOKED_BUILD_NUMBER) +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_BUILD_TWEAKS], +[ +HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET" +AC_SUBST(HOTSPOT_MAKE_ARGS) + +# The name of the Service Agent jar. +SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}" +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}" +fi +AC_SUBST(SALIB_NAME) + +]) + +AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS], +[ +# +# ENABLE_DEBUG_SYMBOLS +# This must be done after the toolchain is setup, since we're looking at objcopy. +# +ENABLE_DEBUG_SYMBOLS=default + +# default on macosx is no... +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + ENABLE_DEBUG_SYMBOLS=no +fi + +# default for embedded is no... +if test "x$JDK_VARIANT" = "xembedded"; then + ENABLE_DEBUG_SYMBOLS=no +fi + +AC_ARG_ENABLE([debug-symbols], + [AS_HELP_STRING([--disable-debug-symbols],[disable generation of debug symbols (@<:@enabled@:>@)])], + [ENABLE_DEBUG_SYMBOLS=${enable_debug_symbols}], +) + +AC_MSG_CHECKING([if we should generate debug symbols]) + +if test "x$ENABLE_DEBUG_SYMBOLS" = "xyes" && test "x$OBJCOPY" = x; then + # explicit enabling of enable-debug-symbols and can't find objcopy + # this is an error + AC_MSG_ERROR([Unable to find objcopy, cannot enable debug-symbols]) +fi + +if test "x$ENABLE_DEBUG_SYMBOLS" = "xdefault"; then + # Default is on if objcopy is found, otherwise off + if test "x$OBJCOPY" != x; then + ENABLE_DEBUG_SYMBOLS=yes + else + ENABLE_DEBUG_SYMBOLS=no + fi +fi + +AC_MSG_RESULT([$ENABLE_DEBUG_SYMBOLS]) + +# +# ZIP_DEBUGINFO_FILES +# +ZIP_DEBUGINFO_FILES=yes + +AC_ARG_ENABLE([zip-debug-info], + [AS_HELP_STRING([--disable-zip-debug-info],[don't zip debug-info files (@<:@enabled@:@)])], + [ZIP_DEBUGINFO_FILES=${enable_zip_debug_info}], +) + +AC_MSG_CHECKING([if we should zip debug-info files]) +AC_MSG_RESULT([$ZIP_DEBUGINFO_FILES]) + +# Hotspot wants ZIP_DEBUGINFO_FILES to be 1 for yes +# use that... +if test "x$ZIP_DEBUGINFO_FILES" = "xyes"; then + ZIP_DEBUGINFO_FILES=1 +else + ZIP_DEBUGINFO_FILES=0 +fi + +AC_SUBST(ENABLE_DEBUG_SYMBOLS) +AC_SUBST(ZIP_DEBUGINFO_FILES) +AC_SUBST(CFLAGS_DEBUG_SYMBOLS) +AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS) +]) diff --git a/common/autoconf/libraries.m4 b/common/autoconf/libraries.m4 new file mode 100644 index 00000000000..e6364a6dc9d --- /dev/null +++ b/common/autoconf/libraries.m4 @@ -0,0 +1,642 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN_ONCE([LIB_SETUP_INIT], +[ + +############################################################################### +# +# OS specific settings that we never will need to probe. +# +if test "x$OPENJDK_TARGET_OS" = xlinux; then + AC_MSG_CHECKING([what is not needed on Linux?]) + PULSE_NOT_NEEDED=yes + AC_MSG_RESULT([pulse]) +fi + +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + AC_MSG_CHECKING([what is not needed on Solaris?]) + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + AC_MSG_RESULT([alsa pulse]) +fi + +if test "x$OPENJDK_TARGET_OS" = xwindows; then + AC_MSG_CHECKING([what is not needed on Windows?]) + CUPS_NOT_NEEDED=yes + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + X11_NOT_NEEDED=yes + AC_MSG_RESULT([alsa cups pulse x11]) +fi + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + AC_MSG_CHECKING([what is not needed on MacOSX?]) + ALSA_NOT_NEEDED=yes + PULSE_NOT_NEEDED=yes + X11_NOT_NEEDED=yes + FREETYPE2_NOT_NEEDED=yes + # If the java runtime framework is disabled, then we need X11. + # This will be adjusted below. + AC_MSG_RESULT([alsa pulse x11]) +fi + +if test "x$OPENJDK_TARGET_OS" = xbsd; then + AC_MSG_CHECKING([what is not needed on bsd?]) + ALSA_NOT_NEEDED=yes + AC_MSG_RESULT([alsa]) +fi + +if test "x$OPENJDK" = "xfalse"; then + FREETYPE2_NOT_NEEDED=yes +fi + +############################################################################### +# +# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM +# that uses this API. +# +AC_ARG_ENABLE([macosx-runtime-support], [AS_HELP_STRING([--disable-macosx-runtime-support], + [disable the use of MacOSX Java runtime support framework @<:@enabled@:>@])], + [MACOSX_RUNTIME_SUPPORT="${enableval}"],[MACOSX_RUNTIME_SUPPORT="no"]) + +USE_MACOSX_RUNTIME_SUPPORT=no +AC_MSG_CHECKING([for explicit Java runtime support in the OS]) +if test -f /System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers/JavaRuntimeSupport.h; then + if test "x$MACOSX_RUNTIME_SUPPORT" != xno; then + MACOSX_RUNTIME_SUPPORT=yes + USE_MACOSX_RUNTIME_SUPPORT=yes + AC_MSG_RESULT([yes, does not need alsa freetype2 pulse and X11]) + else + AC_MSG_RESULT([yes, but explicitly disabled.]) + fi +else + AC_MSG_RESULT([no]) +fi + +if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then + AC_MSG_CHECKING([what is not needed on an X11 build on MacOSX?]) + X11_NOT_NEEDED= + FREETYPE2_NOT_NEEDED= + AC_MSG_RESULT([alsa pulse]) +fi +]) + +AC_DEFUN_ONCE([LIB_SETUP_X11], +[ + +############################################################################### +# +# Check for X Windows +# + +# Check if the user has specified sysroot, but not --x-includes or --x-libraries. +# Make a simple check for the libraries at the sysroot, and setup --x-includes and +# --x-libraries for the sysroot, if that seems to be correct. +if test "x$SYS_ROOT" != "x/"; then + if test "x$x_includes" = xNONE; then + if test -f "$SYS_ROOT/usr/X11R6/include/X11/Xlib.h"; then + x_includes="$SYS_ROOT/usr/X11R6/include" + fi + fi + if test "x$x_libraries" = xNONE; then + if test -f "$SYS_ROOT/usr/X11R6/lib/libX11.so"; then + x_libraries="$SYS_ROOT/usr/X11R6/lib" + fi + fi +fi + +# Now let autoconf do it's magic +AC_PATH_X +AC_PATH_XTRA + +if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then + HELP_MSG_MISSING_DEPENDENCY([x11]) + AC_MSG_ERROR([Could not find X11 libraries. $HELP_MSG]) +fi + +# Some of the old makefiles require a setting of OPENWIN_HOME +# Since the X11R6 directory has disappeared on later Linuxes, +# we need to probe for it. +if test "x$OPENJDK_TARGET_OS" = xlinux; then + if test -d "$SYS_ROOT/usr/X11R6"; then + OPENWIN_HOME="$SYS_ROOT/usr/X11R6" + fi + if test -d "$SYS_ROOT/usr/include/X11"; then + OPENWIN_HOME="$SYS_ROOT/usr" + fi +fi +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + OPENWIN_HOME="/usr/openwin" +fi +AC_SUBST(OPENWIN_HOME) + + +# +# Weird Sol10 something check...TODO change to try compile +# +if test "x${OPENJDK_TARGET_OS}" = xsolaris; then + if test "`uname -r`" = "5.10"; then + if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then + X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS" + fi + fi +fi + +AC_LANG_PUSH(C) +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS $X_CFLAGS" +AC_CHECK_HEADERS([X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h], + [X11_A_OK=yes], + [X11_A_OK=no]) +CFLAGS="$OLD_CFLAGS" +AC_LANG_POP(C) + +if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then + HELP_MSG_MISSING_DEPENDENCY([x11]) + AC_MSG_ERROR([Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG]) +fi + +AC_SUBST(X_CFLAGS) +AC_SUBST(X_LIBS) +]) + +AC_DEFUN_ONCE([LIB_SETUP_CUPS], +[ + +############################################################################### +# +# The common unix printing system cups is used to print from java. +# +AC_ARG_WITH(cups, [AS_HELP_STRING([--with-cups], + [specify prefix directory for the cups package + (expecting the libraries under PATH/lib and the headers under PATH/include)])]) +AC_ARG_WITH(cups-include, [AS_HELP_STRING([--with-cups-include], + [specify directory for the cups include files])]) +AC_ARG_WITH(cups-lib, [AS_HELP_STRING([--with-cups-lib], + [specify directory for the cups library])]) + +if test "x$CUPS_NOT_NEEDED" = xyes; then + if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then + AC_MSG_WARN([cups not used, so --with-cups is ignored]) + fi + CUPS_CFLAGS= + CUPS_LIBS= +else + CUPS_FOUND=no + + if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then + AC_MSG_ERROR([It is not possible to disable the use of cups. Remove the --without-cups option.]) + fi + + if test "x${with_cups}" != x; then + CUPS_LIBS="-L${with_cups}/lib -lcups" + CUPS_CFLAGS="-I${with_cups}/include" + CUPS_FOUND=yes + fi + if test "x${with_cups_include}" != x; then + CUPS_CFLAGS="-I${with_cups_include}" + CUPS_FOUND=yes + fi + if test "x${with_cups_lib}" != x; then + CUPS_LIBS="-L${with_cups_lib} -lcups" + CUPS_FOUND=yes + fi + if test "x$CUPS_FOUND" = xno; then + BDEPS_CHECK_MODULE(CUPS, cups, xxx, [CUPS_FOUND=yes]) + fi + if test "x$CUPS_FOUND" = xno; then + # Are the cups headers installed in the default /usr/include location? + AC_CHECK_HEADERS([cups/cups.h cups/ppd.h], + [CUPS_FOUND=yes + CUPS_CFLAGS= + CUPS_LIBS="-lcups" + DEFAULT_CUPS=yes]) + fi + if test "x$CUPS_FOUND" = xno; then + # Getting nervous now? Lets poke around for standard Solaris third-party + # package installation locations. + AC_MSG_CHECKING([for cups headers and libs]) + if test -s /opt/sfw/cups/include/cups/cups.h; then + # An SFW package seems to be installed! + CUPS_FOUND=yes + CUPS_CFLAGS="-I/opt/sfw/cups/include" + CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" + elif test -s /opt/csw/include/cups/cups.h; then + # A CSW package seems to be installed! + CUPS_FOUND=yes + CUPS_CFLAGS="-I/opt/csw/include" + CUPS_LIBS="-L/opt/csw/lib -lcups" + fi + AC_MSG_RESULT([$CUPS_FOUND]) + fi + if test "x$CUPS_FOUND" = xno; then + HELP_MSG_MISSING_DEPENDENCY([cups]) + AC_MSG_ERROR([Could not find cups! $HELP_MSG ]) + fi +fi + +AC_SUBST(CUPS_CFLAGS) +AC_SUBST(CUPS_LIBS) + +]) + +AC_DEFUN_ONCE([LIB_SETUP_FREETYPE], +[ + +############################################################################### +# +# The ubiquitous freetype2 library is used to render fonts. +# +AC_ARG_WITH(freetype, [AS_HELP_STRING([--with-freetype], + [specify prefix directory for the freetype2 package + (expecting the libraries under PATH/lib and the headers under PATH/include)])]) + +# If we are using the OS installed system lib for freetype, then we do not need to copy it to the build tree +USING_SYSTEM_FT_LIB=false + +if test "x$FREETYPE2_NOT_NEEDED" = xyes; then + if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then + AC_MSG_WARN([freetype not used, so --with-freetype is ignored]) + fi + FREETYPE2_CFLAGS= + FREETYPE2_LIBS= + FREETYPE2_LIB_PATH= +else + FREETYPE2_FOUND=no + + if test "x$with_freetype" != x; then + SPACESAFE(with_freetype,[the path to freetype]) + FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" + if test "x$OPENJDK_TARGET_OS" = xwindows; then + FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" + fi + FREETYPE2_LIB_PATH="$with_freetype/lib" + FREETYPE2_CFLAGS="-I$with_freetype/include" + if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then + FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include" + fi + FREETYPE2_FOUND=yes + if test "x$FREETYPE2_FOUND" = xyes; then + # Verify that the directories exist + if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then + AC_MSG_ERROR([Could not find the expected directories $with_freetype/lib and $with_freetype/include]) + fi + # List the contents of the lib. + FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` + if test "x$FREETYPELIB" = x; then + AC_MSG_ERROR([Could not find libfreetype.se nor freetype.dll in $with_freetype/lib]) + fi + # Check one h-file + if ! test -s "$with_freetype/include/ft2build.h"; then + AC_MSG_ERROR([Could not find $with_freetype/include/ft2build.h]) + fi + fi + fi + if test "x$FREETYPE2_FOUND" = xno; then + BDEPS_CHECK_MODULE(FREETYPE2, freetype2, xxx, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + PKG_CHECK_MODULES(FREETYPE2, freetype2, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + AC_MSG_CHECKING([for freetype in some standard locations]) + + if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then + DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include" + DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype" + fi + if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then + DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2" + DEFAULT_FREETYPE_LIBS="-lfreetype" + fi + + PREV_CXXCFLAGS="$CXXFLAGS" + PREV_LDFLAGS="$LDFLAGS" + CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS" + LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS" + AC_LINK_IFELSE([AC_LANG_SOURCE([[#include + #include FT_FREETYPE_H + int main() { return 0; } + ]])], + [ + # Yes, the default cflags and libs did the trick. + FREETYPE2_FOUND=yes + FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS" + FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS" + ], + [ + FREETYPE2_FOUND=no + ]) + CXXCFLAGS="$PREV_CXXFLAGS" + LDFLAGS="$PREV_LDFLAGS" + AC_MSG_RESULT([$FREETYPE2_FOUND]) + USING_SYSTEM_FT_LIB=true + fi + if test "x$FREETYPE2_FOUND" = xno; then + HELP_MSG_MISSING_DEPENDENCY([freetype2]) + AC_MSG_ERROR([Could not find freetype2! $HELP_MSG ]) + fi +fi + +AC_SUBST(USING_SYSTEM_FT_LIB) +AC_SUBST(FREETYPE2_LIB_PATH) +AC_SUBST(FREETYPE2_CFLAGS) +AC_SUBST(FREETYPE2_LIBS) + +]) + +AC_DEFUN_ONCE([LIB_SETUP_ALSA], +[ + +############################################################################### +# +# Check for alsa headers and libraries. Used on Linux/GNU systems. +# +AC_ARG_WITH(alsa, [AS_HELP_STRING([--with-alsa], + [specify prefix directory for the alsa package + (expecting the libraries under PATH/lib and the headers under PATH/include)])]) +AC_ARG_WITH(alsa-include, [AS_HELP_STRING([--with-alsa-include], + [specify directory for the alsa include files])]) +AC_ARG_WITH(alsa-lib, [AS_HELP_STRING([--with-alsa-lib], + [specify directory for the alsa library])]) + +if test "x$ALSA_NOT_NEEDED" = xyes; then + if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then + AC_MSG_WARN([alsa not used, so --with-alsa is ignored]) + fi + ALSA_CFLAGS= + ALSA_LIBS= +else + ALSA_FOUND=no + + if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then + AC_MSG_ERROR([It is not possible to disable the use of alsa. Remove the --without-alsa option.]) + fi + + if test "x${with_alsa}" != x; then + ALSA_LIBS="-L${with_alsa}/lib -lalsa" + ALSA_CFLAGS="-I${with_alsa}/include" + ALSA_FOUND=yes + fi + if test "x${with_alsa_include}" != x; then + ALSA_CFLAGS="-I${with_alsa_include}" + ALSA_FOUND=yes + fi + if test "x${with_alsa_lib}" != x; then + ALSA_LIBS="-L${with_alsa_lib} -lalsa" + ALSA_FOUND=yes + fi + if test "x$ALSA_FOUND" = xno; then + BDEPS_CHECK_MODULE(ALSA, alsa, xxx, [ALSA_FOUND=yes], [ALSA_FOUND=no]) + fi + if test "x$ALSA_FOUND" = xno; then + PKG_CHECK_MODULES(ALSA, alsa, [ALSA_FOUND=yes], [ALSA_FOUND=no]) + fi + if test "x$ALSA_FOUND" = xno; then + AC_CHECK_HEADERS([alsa/asoundlib.h], + [ALSA_FOUND=yes + ALSA_CFLAGS=-Iignoreme + ALSA_LIBS=-lasound + DEFAULT_ALSA=yes], + [ALSA_FOUND=no]) + fi + if test "x$ALSA_FOUND" = xno; then + HELP_MSG_MISSING_DEPENDENCY([alsa]) + AC_MSG_ERROR([Could not find alsa! $HELP_MSG ]) + fi +fi + +AC_SUBST(ALSA_CFLAGS) +AC_SUBST(ALSA_LIBS) + +]) + +AC_DEFUN_ONCE([LIB_SETUP_MISC_LIBS], +[ + +############################################################################### +# +# Check for the jpeg library +# + +USE_EXTERNAL_LIBJPEG=true +AC_CHECK_LIB(jpeg, main, [], + [ USE_EXTERNAL_LIBJPEG=false + AC_MSG_NOTICE([Will use jpeg decoder bundled with the OpenJDK source]) + ]) +AC_SUBST(USE_EXTERNAL_LIBJPEG) + +############################################################################### +# +# Check for the gif library +# + +USE_EXTERNAL_LIBJPEG=true +AC_CHECK_LIB(gif, main, [], + [ USE_EXTERNAL_LIBGIF=false + AC_MSG_NOTICE([Will use gif decoder bundled with the OpenJDK source]) + ]) +AC_SUBST(USE_EXTERNAL_LIBGIF) + +############################################################################### +# +# Check for the zlib library +# + +AC_ARG_WITH(zlib, [AS_HELP_STRING([--with-zlib], + [use zlib from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])]) + +AC_CHECK_LIB(z, compress, + [ ZLIB_FOUND=yes ], + [ ZLIB_FOUND=no ]) + +AC_MSG_CHECKING([for which zlib to use]) + +DEFAULT_ZLIB=bundled +if test "x$OPENJDK_TARGET_OS" = xmacosx; then +# +# On macosx default is system...on others default is +# + DEFAULT_ZLIB=system +fi + +if test "x${ZLIB_FOUND}" != "xyes"; then +# +# If we don't find any system...set default to bundled +# + DEFAULT_ZLIB=bundled +fi + +# +# If user didn't specify, use DEFAULT_ZLIB +# +if test "x${with_zlib}" = "x"; then + with_zlib=${DEFAULT_ZLIB} +fi + +if test "x${with_zlib}" = "xbundled"; then + USE_EXTERNAL_LIBZ=false + AC_MSG_RESULT([bundled]) +elif test "x${with_zlib}" = "xsystem"; then + if test "x${ZLIB_FOUND}" = "xyes"; then + USE_EXTERNAL_LIBZ=true + AC_MSG_RESULT([system]) + else + AC_MSG_RESULT([system not found]) + AC_MSG_ERROR([--with-zlib=system specified, but no zlib found!]) + fi +else + AC_MSG_ERROR([Invalid value for --with-zlib: ${with_zlib}, use 'system' or 'bundled']) +fi + +AC_SUBST(USE_EXTERNAL_LIBZ) + +############################################################################### +LIBZIP_CAN_USE_MMAP=true +if test "x$JDK_VARIANT" = "xembedded"; then + LIBZIP_CAN_USE_MMAP=false +fi +AC_SUBST(LIBZIP_CAN_USE_MMAP) + +############################################################################### +# +# Check if altzone exists in time.h +# + +AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [return (int)altzone;])], + [has_altzone=yes], + [has_altzone=no]) +if test "x$has_altzone" = xyes; then + AC_DEFINE([HAVE_ALTZONE], 1, [Define if you have the external 'altzone' variable in time.h]) +fi + +############################################################################### +# +# Check the maths library +# + +AC_CHECK_LIB(m, cos, [], + [ + AC_MSG_NOTICE([Maths library was not found]) + ]) +AC_SUBST(LIBM) + +############################################################################### +# +# Check for libdl.so + +save_LIBS="$LIBS" +LIBS="" +AC_CHECK_LIB(dl,dlopen) +LIBDL="$LIBS" +AC_SUBST(LIBDL) +LIBS="$save_LIBS" + +]) + +AC_DEFUN_ONCE([LIB_SETUP_STATIC_LINK_LIBSTDCPP], +[ +############################################################################### +# +# statically link libstdc++ before C++ ABI is stablized on Linux unless +# dynamic build is configured on command line. +# +AC_ARG_ENABLE([static-link-stdc++], [AS_HELP_STRING([--disable-static-link-stdc++], + [disable static linking of the C++ runtime on Linux @<:@enabled@:>@])],, + [ + enable_static_link_stdc__=yes + ]) + +if test "x$OPENJDK_TARGET_OS" = xlinux; then + # Test if -lstdc++ works. + AC_MSG_CHECKING([if dynamic link of stdc++ is possible]) + AC_LANG_PUSH(C++) + OLD_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -lstdc++" + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], + [has_dynamic_libstdcxx=yes], + [has_dynamic_libstdcxx=no]) + CXXFLAGS="$OLD_CXXFLAGS" + AC_LANG_POP(C++) + AC_MSG_RESULT([$has_dynamic_libstdcxx]) + + # Test if stdc++ can be linked statically. + AC_MSG_CHECKING([if static link of stdc++ is possible]) + STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic" + AC_LANG_PUSH(C++) + OLD_LIBS="$LIBS" + OLD_CXX="$CXX" + LIBS="$STATIC_STDCXX_FLAGS" + CXX="$CC" + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])], + [has_static_libstdcxx=yes], + [has_static_libstdcxx=no]) + LIBS="$OLD_LIBS" + CXX="$OLD_CXX" + AC_LANG_POP(C++) + AC_MSG_RESULT([$has_static_libstdcxx]) + + if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then + AC_MSG_ERROR([I cannot link to stdc++! Neither dynamically nor statically.]) + fi + + if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then + AC_MSG_NOTICE([Static linking of libstdc++ was not possible reverting to dynamic linking.]) + enable_static_link_stdc__=no + fi + + if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then + AC_MSG_NOTICE([Dynamic linking of libstdc++ was not possible reverting to static linking.]) + enable_static_link_stdc__=yes + fi + + AC_MSG_CHECKING([how to link with libstdc++]) + if test "x$enable_static_link_stdc__" = xyes; then + LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" + LDCXX="$CC" + AC_MSG_RESULT([static]) + else + LIBCXX="$LIBCXX -lstdc++" + LDCXX="$CXX" + AC_MSG_RESULT([dynamic]) + fi +fi + +# libCrun is the c++ runtime-library with SunStudio (roughly the equivalent of gcc's libstdc++.so) +if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$LIBCXX" = x; then + LIBCXX="/usr/lib${LEGACY_OPENJDK_TARGET_CPU3}/libCrun.so.1" +fi + +# TODO better (platform agnostic) test +if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then + LIBCXX="-lstdc++" +fi + +AC_SUBST(LIBCXX) + +]) diff --git a/common/autoconf/platform.m4 b/common/autoconf/platform.m4 index adfae47e3b8..5135c7c6a61 100644 --- a/common/autoconf/platform.m4 +++ b/common/autoconf/platform.m4 @@ -23,272 +23,59 @@ # questions. # -AC_DEFUN([CHECK_FIND_DELETE], -[ - # Test if find supports -delete - AC_MSG_CHECKING([if find supports -delete]) - FIND_DELETE="-delete" - - DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) - - echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete - - TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` - if test -f $DELETEDIR/TestIfFindSupportsDelete; then - # No, it does not. - rm $DELETEDIR/TestIfFindSupportsDelete - FIND_DELETE="-exec rm \{\} \+" - AC_MSG_RESULT([no]) - else - AC_MSG_RESULT([yes]) - fi - rmdir $DELETEDIR -]) - -AC_DEFUN([CHECK_NONEMPTY], -[ - # Test that variable $1 is not empty. - if test "" = "[$]$1"; then AC_MSG_ERROR(Could not find translit($1,A-Z,a-z) !); fi -]) - -AC_DEFUN([ADD_JVM_ARG_IF_OK], -[ - # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3) - # If so, then append $1 to $2 - FOUND_WARN=`$3 $1 -version 2>&1 | grep -i warn` - FOUND_VERSION=`$3 $1 -version 2>&1 | grep " version \""` - if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then - $2="[$]$2 $1" - fi -]) - -AC_DEFUN([WHICHCMD], -[ - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="[$]$1" - car="${tmp%% *}" - tmp="[$]$1 EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$BUILD_OS" = "xwindows"; then - WHICHCMD_SPACESAFE(car) - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - $1="$car ${cdr% *}" - else - $1="$car" - fi -]) - -AC_DEFUN([SPACESAFE], -[ - # Fail with message $2 if var $1 contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "[$]$1" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$BUILD_OS" = "xwindows"; then - $1=`$CYGPATH -s -m -a "[$]$1"` - $1=`$CYGPATH -u "[$]$1"` - else - AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"]) - fi - fi -]) - -AC_DEFUN([WHICHCMD_SPACESAFE], -[ - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="[$]$1" - if test "x$BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "[$]$1"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - $1="$tmp" -]) - -AC_DEFUN([REMOVE_SYMBOLIC_LINKS], -[ - if test "x$BUILD_OS" != xwindows; then - # Follow a chain of symbolic links. Use readlink - # where it exists, else fall back to horribly - # complicated shell code. - AC_PATH_PROG(READLINK, readlink) - if test "x$READLINK_TESTED" != yes; then - # On MacOSX there is a readlink tool with a different - # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` - if test "x$ISGNU" = x; then - # A readlink that we do not know how to use. - # Are there other non-GNU readlinks out there? - READLINK_TESTED=yes - READLINK= - fi - fi - - if test "x$READLINK" != x; then - $1=`$READLINK -f [$]$1` - else - STARTDIR=$PWD - COUNTER=0 - DIR=`dirname [$]$1` - FIL=`basename [$]$1` - while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` - if test "x$ISLINK" == x; then - # This is not a symbolic link! We are done! - break - fi - # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` - let COUNTER=COUNTER+1 - done - cd $STARTDIR - $1=$DIR/$FIL - fi - fi -]) - -AC_DEFUN([TESTFOR_PROG_CCACHE], -[ - AC_ARG_ENABLE([ccache], - [AS_HELP_STRING([--disable-ccache], - [use ccache to speed up recompilations @<:@enabled@:>@])], - [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes]) - if test "x$ENABLE_CCACHE" = xyes; then - AC_PATH_PROG(CCACHE, ccache) - else - AC_MSG_CHECKING([for ccache]) - AC_MSG_RESULT([explicitly disabled]) - CCACHE= - fi - AC_SUBST(CCACHE) - - AC_ARG_WITH([ccache-dir], - [AS_HELP_STRING([--with-ccache-dir], - [where to store ccache files @<:@~/.ccache@:>@])]) - - if test "x$with_ccache_dir" != x; then - # When using a non home ccache directory, assume the use is to share ccache files - # with other users. Thus change the umask. - SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002" - fi - CCACHE_FOUND="" - if test "x$CCACHE" != x; then - SETUP_CCACHE_USAGE - fi -]) - -AC_DEFUN([SETUP_CCACHE_USAGE], -[ - if test "x$CCACHE" != x; then - CCACHE_FOUND="true" - # Only use ccache if it is 3.1.4 or later, which supports - # precompiled headers. - AC_MSG_CHECKING([if ccache supports precompiled headers]) - HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null` - if test "x$HAS_GOOD_CCACHE" = x; then - AC_MSG_RESULT([no, disabling ccache]) - CCACHE= - else - AC_MSG_RESULT([yes]) - AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers]) - PUSHED_FLAGS="$CXXFLAGS" - CXXFLAGS="-fpch-preprocess $CXXFLAGS" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no]) - CXXFLAGS="$PUSHED_FLAGS" - if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no, disabling ccaching of precompiled headers]) - CCACHE= - fi - fi - fi - - if test "x$CCACHE" != x; then - CCACHE_SLOPPINESS=time_macros - CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE" - CCACHE_FLAGS=-fpch-preprocess - - if test "x$SET_CCACHE_DIR" != x; then - mkdir -p $CCACHE_DIR > /dev/null 2>&1 - chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1 - fi - fi -]) - -AC_DEFUN([EXTRACT_HOST_AND_BUILD_AND_LEGACY_VARS], +AC_DEFUN([PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS], [ # Expects $host_os $host_cpu $build_os and $build_cpu - # and $with_data_model to have been setup! + # and $with_target_bits to have been setup! # # Translate the standard triplet(quadruplet) definition - # of the host/build system into - # HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows - # HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince - # HOST_OS_API=posix,winapi + # of the target/build system into + # OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows + # OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince + # OPENJDK_TARGET_OS_API=posix,winapi # - # HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 - # HOST_CPU_ARCH=x86,sparc,pcc,arm - # HOST_CPU_BITS=32,64 - # HOST_CPU_ENDIAN=big,little + # OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 + # OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm + # OPENJDK_TARGET_CPU_BITS=32,64 + # OPENJDK_TARGET_CPU_ENDIAN=big,little # # The same values are setup for BUILD_... # # And the legacy variables, for controlling the old makefiles. - # LEGACY_HOST_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... - # LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... - # LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris) - # LEGACY_HOST_OS_API=solaris,windows + # LEGACY_OPENJDK_TARGET_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64... + # LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,sparc,sparcv9,arm,arm64... + # LEGACY_OPENJDK_TARGET_CPU3=sparcv9,amd64 (but only on solaris) + # LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # # We also copy the autoconf trip/quadruplet - # verbatim to HOST and BUILD - AC_SUBST(HOST, ${host}) - AC_SUBST(BUILD, ${build}) + # verbatim to OPENJDK_TARGET_SYSTEM (from the autoconf "host") and OPENJDK_BUILD_SYSTEM + OPENJDK_TARGET_SYSTEM="$host" + OPENJDK_BUILD_SYSTEM="$build" + AC_SUBST(OPENJDK_TARGET_SYSTEM) + AC_SUBST(OPENJDK_BUILD_SYSTEM) - EXTRACT_VARS_FROM_OS_TO(HOST,$host_os) - EXTRACT_VARS_FROM_CPU_TO(HOST,$host_cpu) + PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_TARGET,$host_os) + PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_TARGET,$host_cpu) - EXTRACT_VARS_FROM_OS_TO(BUILD,$build_os) - EXTRACT_VARS_FROM_CPU_TO(BUILD,$build_cpu) + PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_BUILD,$build_os) + PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_BUILD,$build_cpu) - if test "x$HOST_OS" != xsolaris; then - LEGACY_HOST_CPU3="" - LEGACY_BUILD_CPU3="" + if test "x$OPENJDK_TARGET_OS" != xsolaris; then + LEGACY_OPENJDK_TARGET_CPU3="" + LEGACY_OPENJDK_BUILD_CPU3="" fi - # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_HOST_CPU1) ... - if test "x$HOST_OS" = xmacosx && test "x$HOST_CPU" = xx64; then - LEGACY_HOST_CPU1="x86_64" + # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_OPENJDK_TARGET_CPU1) ... + if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$OPENJDK_TARGET_CPU" = xx64; then + LEGACY_OPENJDK_TARGET_CPU1="x86_64" fi - SET_RELEASE_FILE_OS_VALUES() + PLATFORM_SET_RELEASE_FILE_OS_VALUES ]) -AC_DEFUN([EXTRACT_VARS_FROM_OS_TO], +AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS_TO], [ - EXTRACT_VARS_FROM_OS($2) + PLATFORM_EXTRACT_VARS_FROM_OS($2) $1_OS="$VAR_OS" $1_OS_FAMILY="$VAR_OS_FAMILY" $1_OS_API="$VAR_OS_API" @@ -306,9 +93,9 @@ AC_DEFUN([EXTRACT_VARS_FROM_OS_TO], AC_SUBST(LEGACY_$1_OS_API) ]) -AC_DEFUN([EXTRACT_VARS_FROM_CPU_TO], +AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU_TO], [ - EXTRACT_VARS_FROM_CPU($2) + PLATFORM_EXTRACT_VARS_FROM_CPU($2) $1_CPU="$VAR_CPU" $1_CPU_ARCH="$VAR_CPU_ARCH" $1_CPU_BITS="$VAR_CPU_BITS" @@ -339,12 +126,12 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU_TO], LEGACY_$1_CPU3=amd64 fi if test "x$$1_CPU" = xsparcv9; then - LEGACY_$1_CPU3=sparvc9 + LEGACY_$1_CPU3=sparcv9 fi AC_SUBST(LEGACY_$1_CPU3) ]) -AC_DEFUN([EXTRACT_VARS_FROM_CPU], +AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU], [ # First argument is the cpu name from the trip/quad case "$1" in @@ -372,8 +159,8 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], arm*) VAR_CPU=arm VAR_CPU_ARCH=arm - VAR_CPU_BITS=3264 - VAR_CPU_ENDIAN=big + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little VAR_LEGACY_CPU=arm ;; mips) @@ -401,7 +188,7 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], VAR_CPU=ppc64 VAR_CPU_ARCH=ppc VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=32 + VAR_CPU_ENDIAN=big VAR_LEGACY_CPU=ppc64 ;; sparc) @@ -416,7 +203,7 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], VAR_CPU_ARCH=sparc VAR_CPU_BITS=64 VAR_CPU_ENDIAN=big - VAR_LEGACY_CPU=sparc_sparcv9 + VAR_LEGACY_CPU=sparcv9 ;; s390) VAR_CPU=s390 @@ -452,21 +239,37 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU], fi fi + # on solaris x86...default seems to be 32-bit + if test "x$VAR_OS" = "xsolaris" && \ + test "x$with_target_bits" = "x" && \ + test "x$VAR_CPU_ARCH" = "xx86" + then + with_target_bits=32 + fi + if test "x$VAR_CPU_ARCH" = "xx86"; then - if test "x$with_data_model" = "x64"; then + if test "x$with_target_bits" = "x64"; then VAR_CPU=x64 VAR_CPU_BITS=64 VAR_LEGACY_CPU=amd64 fi - if test "x$with_data_model" = "x32"; then + if test "x$with_target_bits" = "x32"; then VAR_CPU=ia32 VAR_CPU_BITS=32 VAR_LEGACY_CPU=i586 fi fi + + if test "x$VAR_CPU_ARCH" = "xsparc"; then + if test "x$with_target_bits" = "x64"; then + VAR_CPU=sparcv9 + VAR_CPU_BITS=64 + VAR_LEGACY_CPU=sparcv9 + fi + fi ]) -AC_DEFUN([EXTRACT_VARS_FROM_OS], +AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS], [ case "$1" in *linux*) @@ -495,49 +298,26 @@ AC_DEFUN([EXTRACT_VARS_FROM_OS], VAR_OS_FAMILY=windows ;; *) - AC_MSG_ERROR([unsupported host operating system $1]) + AC_MSG_ERROR([unsupported operating system $1]) ;; esac ]) -AC_DEFUN([CHECK_COMPILER_VERSION], +AC_DEFUN([PLATFORM_SET_RELEASE_FILE_OS_VALUES], [ - # Test the compilers that their versions are new enough. -# AC_MSG_CHECKING([version of GCC]) - gcc_ver=`${CC} -dumpversion` - gcc_major_ver=`echo ${gcc_ver}|cut -d'.' -f1` - gcc_minor_ver=`echo ${gcc_ver}|cut -d'.' -f2` -# AM_CONDITIONAL(GCC_OLD, test ! ${gcc_major_ver} -ge 4 -a ${gcc_minor_ver} -ge 3) -# AC_MSG_RESULT([${gcc_ver} (major version ${gcc_major_ver}, minor version ${gcc_minor_ver})]) -]) - -# Fixes paths on windows hosts to be mixed mode short. -AC_DEFUN([WIN_FIX_PATH], -[ - if test "x$BUILD_OS" = "xwindows"; then - AC_PATH_PROG(CYGPATH, cygpath) - tmp="[$]$1" - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - $1="$tmp" - fi -]) - -AC_DEFUN([SET_RELEASE_FILE_OS_VALUES], -[ - if test "x$HOST_OS" = "xsolaris"; then + if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then REQUIRED_OS_NAME=SunOS REQUIRED_OS_VERSION=5.10 fi - if test "x$HOST_OS" = "xlinux"; then + if test "x$OPENJDK_TARGET_OS" = "xlinux"; then REQUIRED_OS_NAME=Linux REQUIRED_OS_VERSION=2.6 fi - if test "x$HOST_OS" = "xwindows"; then + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then REQUIRED_OS_NAME=Windows REQUIRED_OS_VERSION=5.1 fi - if test "x$HOST_OS" = "xmacosx"; then + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then REQUIRED_OS_NAME=Darwin REQUIRED_OS_VERSION=11.2 fi @@ -545,3 +325,174 @@ AC_DEFUN([SET_RELEASE_FILE_OS_VALUES], AC_SUBST(REQUIRED_OS_NAME) AC_SUBST(REQUIRED_OS_VERSION) ]) + +#%%% Build and target systems %%% +AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET], +[ +# Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target" +# is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the +# product you're building. The target of this build is called "host". Since this is confusing to most people, we +# have not adopted that system, but use "target" as the platform we are building for. In some places though we need +# to use the configure naming style. +AC_CANONICAL_BUILD +AC_CANONICAL_HOST +AC_CANONICAL_TARGET + +AC_ARG_WITH(target-bits, [AS_HELP_STRING([--with-target-bits], + [build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-target-bits=32 @<:@guessed@:>@])]) + +if test "x$with_target_bits" != x && \ + test "x$with_target_bits" != x32 && \ + test "x$with_target_bits" != x64 ; then + AC_MSG_ERROR([--with-target-bits can only be 32 or 64, you specified $with_target_bits!]) +fi +# Translate the standard cpu-vendor-kernel-os quadruplets into +# the new TARGET_.... and BUILD_... and the legacy names used by +# the openjdk build. +# It uses $host_os $host_cpu $build_os $build_cpu and $with_target_bits +PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS + +# The LEGACY_OPENJDK_TARGET_CPU3 is the setting for ISA_DIR. +if test "x$LEGACY_OPENJDK_TARGET_CPU3" != x; then + LEGACY_OPENJDK_TARGET_CPU3="/${LEGACY_OPENJDK_TARGET_CPU3}" +fi + +# Now the following vars are defined. +# OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows +# OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince +# OPENJDK_TARGET_OS_API=posix,winapi +# +# OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64 +# OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm +# OPENJDK_TARGET_CPU_BITS=32,64 +# OPENJDK_TARGET_CPU_ENDIAN=big,little +# +# There is also a: +# LEGACY_OPENJDK_TARGET_CPU1=i586,amd64,.... # used to set the old var ARCH +# LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,.... # used to set the old var LIBARCH +# LEGACY_OPENJDK_TARGET_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris +# There was also a BUILDARCH that had i486,amd64,... but we do not use that +# in the new build. +# LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # used to select source roots +]) + +AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION], +[ +############################################################################### + +# Note that this is the build platform OS version! + +OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" +OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" +OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" +OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" +AC_SUBST(OS_VERSION_MAJOR) +AC_SUBST(OS_VERSION_MINOR) +AC_SUBST(OS_VERSION_MICRO) +]) + +AC_DEFUN_ONCE([PLATFORM_TEST_OPENJDK_TARGET_BITS], +[ +############################################################################### +# +# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code. +# (The JVM can use 32 or 64 bit Java pointers but that decision +# is made at runtime.) +# +AC_LANG_PUSH(C++) +OLD_CXXFLAGS="$CXXFLAGS" +if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + CXXFLAGS="-m${with_target_bits} $CXXFLAGS" +fi +AC_CHECK_SIZEOF([int *], [1111]) +CXXFLAGS="$OLD_CXXFLAGS" +AC_LANG_POP(C++) + +# keep track of c/cxx flags that we added outselves... +# to prevent emitting warning... +ADDED_CFLAGS= +ADDED_CXXFLAGS= +ADDED_LDFLAGS= + +if test "x$ac_cv_sizeof_int_p" = x0; then + # The test failed, lets pick the assumed value. + ARCH_DATA_MODEL=$OPENJDK_TARGET_CPU_BITS +else + ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p` + + if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then + ADDED_CFLAGS=" -m${with_target_bits}" + ADDED_CXXFLAGS=" -m${with_target_bits}" + ADDED_LDFLAGS=" -m${with_target_bits}" + + CFLAGS="${CFLAGS}${ADDED_CFLAGS}" + CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}" + LDFLAGS="${LDFLAGS}${ADDED_LDFLAGS}" + + CFLAGS_JDK="${CFLAGS_JDK}${ADDED_CFLAGS}" + CXXFLAGS_JDK="${CXXFLAGS_JDK}${ADDED_CXXFLAGS}" + LDFLAGS_JDK="${LDFLAGS_JDK}${ADDED_LDFLAGS}" + fi +fi + +if test "x$ARCH_DATA_MODEL" = x64; then + A_LP64="LP64:=" + ADD_LP64="-D_LP64=1" +fi +AC_MSG_CHECKING([for target address size]) +AC_MSG_RESULT([$ARCH_DATA_MODEL bits]) +AC_SUBST(LP64,$A_LP64) +AC_SUBST(ARCH_DATA_MODEL) + +if test "x$ARCH_DATA_MODEL" != "x$OPENJDK_TARGET_CPU_BITS"; then + AC_MSG_ERROR([The tested number of bits in the target ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)]) +fi + +# +# NOTE: check for -mstackrealign needs to be below potential addition of -m32 +# +if test "x$OPENJDK_TARGET_CPU_BITS" = x32 && test "x$OPENJDK_TARGET_OS" = xmacosx; then + # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. + # While waiting for a better solution, the current workaround is to use -mstackrealign. + CFLAGS="$CFLAGS -mstackrealign" + AC_MSG_CHECKING([if 32-bit compiler supports -mstackrealign]) + AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], + [ + AC_MSG_RESULT([yes]) + ], + [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.]) + ]) +fi +]) + +AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS], +[ +############################################################################### +# +# Is the target little of big endian? +# +AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="universal_endianness"]) + +if test "x$ENDIAN" = xuniversal_endianness; then + AC_MSG_ERROR([Building with both big and little endianness is not supported]) +fi +if test "x$ENDIAN" = xunknown; then + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" +fi +if test "x$ENDIAN" != "x$OPENJDK_TARGET_CPU_ENDIAN"; then + AC_MSG_WARN([The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)]) + ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN" +fi +AC_SUBST(ENDIAN) +]) + +AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ISADIR], +[ +############################################################################### +# +# Could someone enlighten this configure script with a comment about libCrun? +# +# +]) diff --git a/common/autoconf/source-dirs.m4 b/common/autoconf/source-dirs.m4 new file mode 100644 index 00000000000..2eeb3831176 --- /dev/null +++ b/common/autoconf/source-dirs.m4 @@ -0,0 +1,280 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN_ONCE([SRCDIRS_SETUP_TOPDIRS], +[ + +# Where are the sources. Any of these can be overridden +# using --with-override-corba and the likes. +LANGTOOLS_TOPDIR="$SRC_ROOT/langtools" +CORBA_TOPDIR="$SRC_ROOT/corba" +JAXP_TOPDIR="$SRC_ROOT/jaxp" +JAXWS_TOPDIR="$SRC_ROOT/jaxws" +HOTSPOT_TOPDIR="$SRC_ROOT/hotspot" +JDK_TOPDIR="$SRC_ROOT/jdk" +AC_SUBST(LANGTOOLS_TOPDIR) +AC_SUBST(CORBA_TOPDIR) +AC_SUBST(JAXP_TOPDIR) +AC_SUBST(JAXWS_TOPDIR) +AC_SUBST(HOTSPOT_TOPDIR) +AC_SUBST(JDK_TOPDIR) +]) + + +AC_DEFUN_ONCE([SRCDIRS_SETUP_ALTERNATIVE_TOPDIRS], +[ + +############################################################################### +# +# Pickup additional source for a component from outside of the source root +# or override source for a component. +# +AC_ARG_WITH(add-source-root, [AS_HELP_STRING([--with-add-source-root], + [for each and every source directory, look in this additional source root for + the same directory; if it exists and have files in it, include it in the build])]) + +AC_ARG_WITH(override-source-root, [AS_HELP_STRING([--with-override-source-root], + [for each and every source directory, look in this override source root for + the same directory; if it exists, use that directory instead and + ignore the directory in the original source root])]) + +AC_ARG_WITH(adds-and-overrides, [AS_HELP_STRING([--with-adds-and-overrides], + [use the subdirs 'adds' and 'overrides' in the specified directory as + add-source-root and override-source-root])]) + +if test "x$with_adds_and_overrides" != x; then + with_add_source_root="$with_adds_and_overrides/adds" + with_override_source_root="$with_adds_and_overrides/overrides" +fi + +if test "x$with_add_source_root" != x; then + if ! test -d $with_add_source_root; then + AC_MSG_ERROR([Trying to use a non-existant add-source-root $with_add_source_root]) + fi + CURDIR="$PWD" + cd "$with_add_source_root" + ADD_SRC_ROOT="`pwd`" + cd "$CURDIR" + # Verify that the addon source root does not have any root makefiles. + # If it does, then it is usually an error, prevent this. + if test -f $with_add_source_root/langtools/makefiles/Makefile || \ + test -f $with_add_source_root/langtools/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/corba/makefiles/Makefile || \ + test -f $with_add_source_root/corba/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full corba repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/jaxp/makefiles/Makefile || \ + test -f $with_add_source_root/jaxp/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/jaxws/makefiles/Makefile || \ + test -f $with_add_source_root/jaxws/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/hotspot/makefiles/Makefile || \ + test -f $with_add_source_root/hotspot/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources.]) + fi + if test -f $with_add_source_root/jdk/makefiles/Makefile || \ + test -f $with_add_source_root/jdk/make/Makefile; then + AC_MSG_ERROR([Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources.]) + fi +fi +AC_SUBST(ADD_SRC_ROOT) + +if test "x$with_override_source_root" != x; then + if ! test -d $with_override_source_root; then + AC_MSG_ERROR([Trying to use a non-existant override-source-root $with_override_source_root]) + fi + CURDIR="$PWD" + cd "$with_override_source_root" + OVERRIDE_SRC_ROOT="`pwd`" + cd "$CURDIR" + if test -f $with_override_source_root/langtools/makefiles/Makefile || \ + test -f $with_override_source_root/langtools/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/corba/makefiles/Makefile || \ + test -f $with_override_source_root/corba/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full corba repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/jaxp/makefiles/Makefile || \ + test -f $with_override_source_root/jaxp/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/jaxws/makefiles/Makefile || \ + test -f $with_override_source_root/jaxws/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/hotspot/makefiles/Makefile || \ + test -f $with_override_source_root/hotspot/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override.]) + fi + if test -f $with_override_source_root/jdk/makefiles/Makefile || \ + test -f $with_override_source_root/jdk/make/Makefile; then + AC_MSG_ERROR([Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override.]) + fi +fi +AC_SUBST(OVERRIDE_SRC_ROOT) + +############################################################################### +# +# Override a repo completely, this is used for example when you have 3 small +# development sandboxes of the langtools sources and want to avoid having 3 full +# OpenJDK sources checked out on disk. +# +# Assuming that the 3 langtools sandboxes are located here: +# /home/fredrik/sandbox1/langtools +# /home/fredrik/sandbox2/langtools +# /home/fredrik/sandbox3/langtools +# +# From the source root you create build subdirs manually: +# mkdir -p build1 build2 build3 +# in each build directory run: +# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make) +# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make) +# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make) +# + +AC_ARG_WITH(override-langtools, [AS_HELP_STRING([--with-override-langtools], + [use this langtools dir for the build])]) + +AC_ARG_WITH(override-corba, [AS_HELP_STRING([--with-override-corba], + [use this corba dir for the build])]) + +AC_ARG_WITH(override-jaxp, [AS_HELP_STRING([--with-override-jaxp], + [use this jaxp dir for the build])]) + +AC_ARG_WITH(override-jaxws, [AS_HELP_STRING([--with-override-jaxws], + [use this jaxws dir for the build])]) + +AC_ARG_WITH(override-hotspot, [AS_HELP_STRING([--with-override-hotspot], + [use this hotspot dir for the build])]) + +AC_ARG_WITH(override-jdk, [AS_HELP_STRING([--with-override-jdk], + [use this jdk dir for the build])]) + +if test "x$with_override_langtools" != x; then + CURDIR="$PWD" + cd "$with_override_langtools" + LANGTOOLS_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override langtools with a full langtools repo!]) + fi + AC_MSG_CHECKING([if langtools should be overridden]) + AC_MSG_RESULT([yes with $LANGTOOLS_TOPDIR]) +fi +if test "x$with_override_corba" != x; then + CURDIR="$PWD" + cd "$with_override_corba" + CORBA_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override corba with a full corba repo!]) + fi + AC_MSG_CHECKING([if corba should be overridden]) + AC_MSG_RESULT([yes with $CORBA_TOPDIR]) +fi +if test "x$with_override_jaxp" != x; then + CURDIR="$PWD" + cd "$with_override_jaxp" + JAXP_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override jaxp with a full jaxp repo!]) + fi + AC_MSG_CHECKING([if jaxp should be overridden]) + AC_MSG_RESULT([yes with $JAXP_TOPDIR]) +fi +if test "x$with_override_jaxws" != x; then + CURDIR="$PWD" + cd "$with_override_jaxws" + JAXWS_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override jaxws with a full jaxws repo!]) + fi + AC_MSG_CHECKING([if jaxws should be overridden]) + AC_MSG_RESULT([yes with $JAXWS_TOPDIR]) +fi +if test "x$with_override_hotspot" != x; then + CURDIR="$PWD" + cd "$with_override_hotspot" + HOTSPOT_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \ + ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override hotspot with a full hotspot repo!]) + fi + AC_MSG_CHECKING([if hotspot should be overridden]) + AC_MSG_RESULT([yes with $HOTSPOT_TOPDIR]) +fi +if test "x$with_override_jdk" != x; then + CURDIR="$PWD" + cd "$with_override_jdk" + JDK_TOPDIR="`pwd`" + cd "$CURDIR" + if ! test -f $JDK_TOPDIR/makefiles/Makefile; then + AC_MSG_ERROR([You have to override JDK with a full JDK repo!]) + fi + AC_MSG_CHECKING([if JDK should be overridden]) + AC_MSG_RESULT([yes with $JDK_TOPDIR]) +fi + +]) + +AC_DEFUN_ONCE([SRCDIRS_SETUP_OUTPUT_DIRS], +[ +LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools" +CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba" +JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp" +JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws" +HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot" +JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk" +IMAGES_OUTPUTDIR="$OUTPUT_ROOT/images" + +AC_SUBST(LANGTOOLS_OUTPUTDIR) +AC_SUBST(CORBA_OUTPUTDIR) +AC_SUBST(JAXP_OUTPUTDIR) +AC_SUBST(JAXWS_OUTPUTDIR) +AC_SUBST(HOTSPOT_OUTPUTDIR) +AC_SUBST(JDK_OUTPUTDIR) +AC_SUBST(IMAGES_OUTPUTDIR) + +LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist" +CORBA_DIST="$OUTPUT_ROOT/corba/dist" +JAXP_DIST="$OUTPUT_ROOT/jaxp/dist" +JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist" +HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist" + +AC_SUBST(LANGTOOLS_DIST) +AC_SUBST(CORBA_DIST) +AC_SUBST(JAXP_DIST) +AC_SUBST(JAXWS_DIST) +AC_SUBST(HOTSPOT_DIST) +]) diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index 28e248b019c..5c2e43c2fed 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -23,8 +23,8 @@ # questions. # -# Configured @DATE_WHEN_CONFIGURED@ to build for a @HOST@ system, -# using ./configure @CONFIGURE_COMMAND_LINE@ +# Configured @DATE_WHEN_CONFIGURED@ to build for a @OPENJDK_TARGET_SYSTEM@ system, +# using 'configure @CONFIGURE_COMMAND_LINE@' # When calling macros, the spaces between arguments are # often semantically important! Sometimes we need to subst @@ -67,48 +67,50 @@ SPEC:=@SPEC@ # The "human readable" name of this configuration CONF_NAME:=@CONF_NAME@ -# The built jdk will run in this host system. -HOST:=@HOST@ -HOST_OS:=@HOST_OS@ -HOST_OS_FAMILY:=@HOST_OS_FAMILY@ -HOST_OS_API:=@HOST_OS_API@ +# The built jdk will run in this target system. +OPENJDK_TARGET_SYSTEM:=@OPENJDK_TARGET_SYSTEM@ -HOST_CPU:=@HOST_CPU@ -HOST_CPU_ARCH:=@HOST_CPU_ARCH@ -HOST_CPU_BITS:=@HOST_CPU_BITS@ -HOST_CPU_ENDIAN:=@HOST_CPU_ENDIAN@ +OPENJDK_TARGET_OS:=@OPENJDK_TARGET_OS@ +OPENJDK_TARGET_OS_FAMILY:=@OPENJDK_TARGET_OS_FAMILY@ +OPENJDK_TARGET_OS_API:=@OPENJDK_TARGET_OS_API@ + +OPENJDK_TARGET_CPU:=@OPENJDK_TARGET_CPU@ +OPENJDK_TARGET_CPU_ARCH:=@OPENJDK_TARGET_CPU_ARCH@ +OPENJDK_TARGET_CPU_BITS:=@OPENJDK_TARGET_CPU_BITS@ +OPENJDK_TARGET_CPU_ENDIAN:=@OPENJDK_TARGET_CPU_ENDIAN@ # We are building on this build system. -# When not cross-compiling, it is the same as the host. -BUILD:=@BUILD@ -BUILD_OS:=@BUILD_OS@ -BUILD_OS_FAMILY:=@BUILD_OS_FAMILY@ -BUILD_OS_API:=@BUILD_OS_API@ +# When not cross-compiling, it is the same as the target. +OPENJDK_BUILD_SYSTEM:=@OPENJDK_BUILD_SYSTEM@ -BUILD_CPU:=@BUILD_CPU@ -BUILD_CPU_ARCH:=@BUILD_CPU_ARCH@ -BUILD_CPU_BITS:=@BUILD_CPU_BITS@ -BUILD_CPU_ENDIAN:=@BUILD_CPU_ENDIAN@ +OPENJDK_BUILD_OS:=@OPENJDK_BUILD_OS@ +OPENJDK_BUILD_OS_FAMILY:=@OPENJDK_BUILD_OS_FAMILY@ +OPENJDK_BUILD_OS_API:=@OPENJDK_BUILD_OS_API@ + +OPENJDK_BUILD_CPU:=@OPENJDK_BUILD_CPU@ +OPENJDK_BUILD_CPU_ARCH:=@OPENJDK_BUILD_CPU_ARCH@ +OPENJDK_BUILD_CPU_BITS:=@OPENJDK_BUILD_CPU_BITS@ +OPENJDK_BUILD_CPU_ENDIAN:=@OPENJDK_BUILD_CPU_ENDIAN@ # Legacy OS values for use in release file. REQUIRED_OS_NAME:=@REQUIRED_OS_NAME@ REQUIRED_OS_VERSION:=@REQUIRED_OS_VERSION@ -# Old name for HOST_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc) -PLATFORM:=@HOST_OS@ -# Old name for HOST_CPU, uses i586 and amd64, instead of ia32 and x64. -ARCH:=@LEGACY_HOST_CPU1@ +# Old name for OPENJDK_TARGET_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc) +PLATFORM:=@OPENJDK_TARGET_OS@ +# Old name for OPENJDK_TARGET_CPU, uses i586 and amd64, instead of ia32 and x64. +ARCH:=@LEGACY_OPENJDK_TARGET_CPU1@ # Yet another name for arch used for an extra subdir below the jvm lib. # Uses i386 and amd64, instead of ia32 and x64. -LIBARCH:=@LEGACY_HOST_CPU2@ +LIBARCH:=@LEGACY_OPENJDK_TARGET_CPU2@ # Use to switch between solaris and windows subdirs in the jdk. -LEGACY_HOST_OS_API:=@LEGACY_HOST_OS_API@ +LEGACY_OPENJDK_TARGET_OS_API:=@LEGACY_OPENJDK_TARGET_OS_API@ # 32 or 64 bit -ARCH_DATA_MODEL:=@HOST_CPU_BITS@ +ARCH_DATA_MODEL:=@OPENJDK_TARGET_CPU_BITS@ # Legacy setting for building for a 64 bit machine. # If yes then this expands to _LP64:=1 @LP64@ -ENDIAN:=@HOST_CPU_ENDIAN@ +ENDIAN:=@OPENJDK_TARGET_CPU_ENDIAN@ @SET_OPENJDK@ JIGSAW:=@JIGSAW@ LIBM:=-lm @@ -185,7 +187,6 @@ SUPPORT_HEADLESS:=@SUPPORT_HEADLESS@ # The java launcher uses the default. # The other can be selected by specifying -client -server -kernel -zero or -zeroshark # on the java launcher command line. -DEFAULT_JVM_VARIANT:=@DEFAULT_JVM_VARIANT@ JVM_VARIANTS:=@JVM_VARIANTS@ JVM_VARIANT_SERVER:=@JVM_VARIANT_SERVER@ JVM_VARIANT_CLIENT:=@JVM_VARIANT_CLIENT@ @@ -202,53 +203,42 @@ DEBUG_CLASSFILES:=@DEBUG_CLASSFILES@ # Legacy setting: -debug or -fastdebug BUILD_VARIANT_RELEASE:=@BUILD_VARIANT_RELEASE@ -LANGTOOLS_OUTPUTDIR:=@OUTPUT_ROOT@/langtools -LANGTOOLS_DIST:=@OUTPUT_ROOT@/langtools/dist -LANGTOOLS_MAKE_ARGS:=@LANGTOOLS_MAKE_ARGS@ - -CORBA_OUTPUTDIR:=@OUTPUT_ROOT@/corba -CORBA_DIST:=@OUTPUT_ROOT@/corba/dist -CORBA_MAKE_ARGS:=@CORBA_MAKE_ARGS@ - -JAXP_OUTPUTDIR:=@OUTPUT_ROOT@/jaxp -JAXP_DIST:=@OUTPUT_ROOT@/jaxp/dist -JAXP_MAKE_ARGS:=@JAXP_MAKE_ARGS@ - -JAXWS_OUTPUTDIR:=@OUTPUT_ROOT@/jaxws -JAXWS_DIST:=@OUTPUT_ROOT@/jaxws/dist -JAXWS_MAKE_ARGS:=@JAXWS_MAKE_ARGS@ - -HOTSPOT_OUTPUTDIR:=@OUTPUT_ROOT@/hotspot -HOTSPOT_DIST:=@OUTPUT_ROOT@/hotspot/dist -HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ +LANGTOOLS_OUTPUTDIR:=@LANGTOOLS_OUTPUTDIR@ +CORBA_OUTPUTDIR:=@CORBA_OUTPUTDIR@ +JAXP_OUTPUTDIR:=@JAXP_OUTPUTDIR@ +JAXWS_OUTPUTDIR:=@JAXWS_OUTPUTDIR@ +HOTSPOT_OUTPUTDIR:=@HOTSPOT_OUTPUTDIR@ # This where a working jvm is built. # You can run $(JDK_OUTPUTDIR)/bin/java # Though the layout of the contents of $(JDK_OUTPUTDIR) is not # yet the same as a default installation. -HOTSPOT_IMPORT_PATH:=@OUTPUT_ROOT@/hotspot/dist JDK_OUTPUTDIR:=@OUTPUT_ROOT@/jdk -JDK_MAKE_ARGS:=@JDK_MAKE_ARGS@ # When you run "make install" it will create the standardized # layout for the jdk and the jre inside the images subdir. # Then it will copy the contents of the jdk into the installation # directory. IMAGES_OUTPUTDIR:=@OUTPUT_ROOT@/images -IMAGES_MAKE_ARGS:=@IMAGES_MAKE_ARGS@ + +LANGTOOLS_DIST:=@LANGTOOLS_DIST@ +CORBA_DIST:=@CORBA_DIST@ +JAXP_DIST:=@JAXP_DIST@ +JAXWS_DIST:=@JAXWS_DIST@ +HOTSPOT_DIST:=@HOTSPOT_DIST@ + # Legacy variables used by Release.gmk JDK_IMAGE_DIR:=$(IMAGES_OUTPUTDIR)/j2sdk-image JRE_IMAGE_DIR:=$(IMAGES_OUTPUTDIR)/j2re-image # Can be /sparcv9 or /amd64 on Solaris -ISA_DIR:=@LEGACY_HOST_CPU3@ +ISA_DIR:=@LEGACY_OPENJDK_TARGET_CPU3@ BINDIR:=$(JDK_OUTPUTDIR)/bin$(ISA_DIR) # The boot jdk to use ALT_BOOTDIR:=@BOOT_JDK@ BOOT_JDK:=@BOOT_JDK@ BOOT_JDK_JVMARGS:=@BOOT_JDK_JVMARGS@ -BOOT_JAVAC_ARGS:=@BOOT_JAVAC_ARGS@ BOOT_RTJAR:=@BOOT_RTJAR@ BOOT_TOOLSJAR:=@BOOT_TOOLSJAR@ @@ -258,8 +248,6 @@ BOOT_JDK_SOURCETARGET:=@BOOT_JDK_SOURCETARGET@ # Information about the build system NUM_CORES:=@NUM_CORES@ -# This is used from the libjvm build for C/C++ code. -HOTSPOT_BUILD_JOBS:=@CONCURRENT_BUILD_JOBS@ # This is used from the jdk build for C/C++ code. PARALLEL_COMPILE_JOBS:=@CONCURRENT_BUILD_JOBS@ # Store javac server synchronization files here, and @@ -282,6 +270,8 @@ JAVAC_SERVER_CORES:=@JAVAC_SERVER_CORES@ JAVAC_USE_DEPS:=@JAVAC_USE_DEPS@ # We can invoke javac: SINGLE_THREADED_BATCH or MULTI_CORE_CONCURRENT JAVAC_USE_MODE:=@JAVAC_USE_MODE@ +# Enable not yet complete sjavac support. +ENABLE_SJAVAC:=@ENABLE_SJAVAC@ # The OpenJDK makefiles should be changed to using the standard # configure output ..._CFLAGS and ..._LIBS. In the meantime we @@ -375,22 +365,24 @@ LDEXECXX:=@UNCYGDRIVE@ @LDEXECXX@ @DEFINE_CROSS_COMPILE_ARCH@ # The HOSTCC should really be named BUILDCC, ie build executable for # the build platform. Same as CC when not cross compiling. -HOSTCC:=@HOSTCC@ -HOSTCXX:=@HOSTCXX@ +HOSTCC:=@UNCYGDRIVE@ @HOSTCC@ +HOSTCXX:=@UNCYGDRIVE@ @HOSTCXX@ # And of course, the jdk spells HOSTCC as NIO_CC/HOST_CC -HOST_CC:=@HOSTCC@ -NIO_CC:=@HOSTCC@ +HOST_CC:=@UNCYGDRIVE@ @HOSTCC@ +NIO_CC:=@UNCYGDRIVE@ @HOSTCC@ -AS:=@AS@ +HOST_LD:=@UNCYGDRIVE@ @HOSTLD@ + +AS:=@UNCYGDRIVE@ @AS@ ASFLAGS:=@ASFLAGS@ # AR is used to create a static library (is ar in posix, lib.exe in winapi) AR:=@UNCYGDRIVE@ @AR@ ARFLAGS:=@ARFLAGS@ -NM:=@NM@ -STRIP:=@STRIP@ -MCS:=@MCS@ +NM:=@UNCYGDRIVE@ @NM@ +STRIP:=@UNCYGDRIVE@ @STRIP@ +MCS:=@UNCYGDRIVE@ @MCS@ # Command to create a shared library SHARED_LIBRARY_FLAGS:=@SHARED_LIBRARY_FLAGS@ @@ -404,6 +396,17 @@ SET_SHARED_LIBRARY_MAPFILE=@SET_SHARED_LIBRARY_MAPFILE@ C_FLAG_REORDER:=@C_FLAG_REORDER@ CXX_FLAG_REORDER:=@CXX_FLAG_REORDER@ +# +# Options for generating debug symbols +ENABLE_DEBUG_SYMBOLS:=@ENABLE_DEBUG_SYMBOLS@ +CFLAGS_DEBUG_SYMBOLS:=@CFLAGS_DEBUG_SYMBOLS@ +CXXFLAGS_DEBUG_SYMBOLS:=@CXXFLAGS_DEBUG_SYMBOLS@ +ZIP_DEBUGINFO_FILES:=@ZIP_DEBUGINFO_FILES@ + +# +# Compress (or not) jars +COMPRESS_JARS=@COMPRESS_JARS@ + # Options to linker to specify the library name. # (Note absence of := assignment, because we do not want to evaluate the macro body here) SET_SHARED_LIBRARY_NAME=@SET_SHARED_LIBRARY_NAME@ @@ -507,23 +510,28 @@ READELF:=@READELF@ EXPR:=@EXPR@ FILE:=@FILE@ HG:=@HG@ +OBJCOPY:=@OBJCOPY@ UNCYGDRIVE:=@UNCYGDRIVE@ # Where the build output is stored for your convenience. BUILD_LOG:=@BUILD_LOG@ +BUILD_LOG_PREVIOUS:=@BUILD_LOG_PREVIOUS@ BUILD_LOG_WRAPPER:=@BUILD_LOG_WRAPPER@ # Build setup ENABLE_DOCS:=@ENABLE_DOCS@ GENERATE_DOCS:=@ENABLE_DOCS@ DISABLE_NIMBUS:=@DISABLE_NIMBUS@ +ENABLE_JFR=@ENABLE_JFR@ USE_EXTERNAL_LIBJPEG:=@USE_EXTERNAL_LIBJPEG@ USE_EXTERNAL_LIBGIF:=@USE_EXTERNAL_LIBGIF@ USE_EXTERNAL_LIBZ:=@USE_EXTERNAL_LIBZ@ +LIBZIP_CAN_USE_MMAP:=@LIBZIP_CAN_USE_MMAP@ CHECK_FOR_VCINSTALLDIR=@CHECK_FOR_VCINSTALLDIR@ MSVCRNN_DLL:=@MSVCR100DLL@ + # ADD_SRCS takes a single argument with source roots # and appends any corresponding source roots found # below --with-add-source-root and below @@ -551,6 +559,17 @@ else OVR_SRCS:= endif +#################################################### +# +# Legacy Hotspot support + +HOTSPOT_DIST:=@HOTSPOT_DIST@ +HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ +# This is used from the libjvm build for C/C++ code. +HOTSPOT_BUILD_JOBS:=@CONCURRENT_BUILD_JOBS@ +# Control wether Hotspot runs Queens test after building +TEST_IN_BUILD=@TEST_IN_BUILD@ + #################################################### # # INSTALLATION @@ -611,10 +630,9 @@ INSTALL_SYSCONFDIR=@sysconfdir@ # Name of Service Agent library SALIB_NAME=@SALIB_NAME@ -# Control wether Hotspot runs Queens test after building -TEST_IN_BUILD=@TEST_IN_BUILD@ - OS_VERSION_MAJOR:=@OS_VERSION_MAJOR@ OS_VERSION_MINOR:=@OS_VERSION_MINOR@ OS_VERSION_MICRO:=@OS_VERSION_MICRO@ +# Include the closed-spec.gmk file if it exists +-include $(dir @SPEC@)/closed-spec.gmk diff --git a/common/autoconf/spec.sh.in b/common/autoconf/spec.sh.in new file mode 100644 index 00000000000..a1d1c07ef1b --- /dev/null +++ b/common/autoconf/spec.sh.in @@ -0,0 +1,527 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# Configured"@DATE_WHEN_CONFIGURED@ to build for a @OPENJDK_TARGET_SYSTEM@ system, +# using 'configure @CONFIGURE_COMMAND_LINE@' + +# The "human readable" name of this configuration +CONF_NAME="@CONF_NAME@" + +# The built jdk will run in this target system. +OPENJDK_TARGET_SYSTEM="@OPENJDK_TARGET_SYSTEM@" + +OPENJDK_TARGET_OS="@OPENJDK_TARGET_OS@" +OPENJDK_TARGET_OS_FAMILY="@OPENJDK_TARGET_OS_FAMILY@" +OPENJDK_TARGET_OS_API="@OPENJDK_TARGET_OS_API@" + +OPENJDK_TARGET_CPU="@OPENJDK_TARGET_CPU@" +OPENJDK_TARGET_CPU_ARCH="@OPENJDK_TARGET_CPU_ARCH@" +OPENJDK_TARGET_CPU_BITS="@OPENJDK_TARGET_CPU_BITS@" +OPENJDK_TARGET_CPU_ENDIAN="@OPENJDK_TARGET_CPU_ENDIAN@" + +# We are building on this build system. +# When not cross-compiling, it is the same as the target. +OPENJDK_BUILD_SYSTEM="@OPENJDK_BUILD_SYSTEM@" + +OPENJDK_BUILD_OS="@OPENJDK_BUILD_OS@" +OPENJDK_BUILD_OS_FAMILY="@OPENJDK_BUILD_OS_FAMILY@" +OPENJDK_BUILD_OS_API="@OPENJDK_BUILD_OS_API@" + +OPENJDK_BUILD_CPU="@OPENJDK_BUILD_CPU@" +OPENJDK_BUILD_CPU_ARCH="@OPENJDK_BUILD_CPU_ARCH@" +OPENJDK_BUILD_CPU_BITS="@OPENJDK_BUILD_CPU_BITS@" +OPENJDK_BUILD_CPU_ENDIAN="@OPENJDK_BUILD_CPU_ENDIAN@" + +# Legacy OS values for use in release file. +REQUIRED_OS_NAME="@REQUIRED_OS_NAME@" +REQUIRED_OS_VERSION="@REQUIRED_OS_VERSION@" + +# Old name for OPENJDK_TARGET_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc) +PLATFORM="@OPENJDK_TARGET_OS@" +# Old name for OPENJDK_TARGET_CPU, uses i586 and amd64, instead of ia32 and x64. +ARCH="@LEGACY_OPENJDK_TARGET_CPU1@" +# Yet another name for arch used for an extra subdir below the jvm lib. +# Uses i386 and amd64, instead of ia32 and x64. +LIBARCH="@LEGACY_OPENJDK_TARGET_CPU2@" +# Use to switch between solaris and windows subdirs in the jdk. +LEGACY_OPENJDK_TARGET_OS_API="@LEGACY_OPENJDK_TARGET_OS_API@" +# 32 or 64 bit +ARCH_DATA_MODEL="@OPENJDK_TARGET_CPU_BITS@" +# Legacy setting for building for a 64 bit machine. +# If yes then this expands to _LP64=1 +ENDIAN="@OPENJDK_TARGET_CPU_ENDIAN@" +JIGSAW="@JIGSAW@" +LIBM=-lm +LIBDL="@LIBDL@" + +# colon or semicolon +PATH_SEP="@PATH_SEP@" + +# The sys root where standard headers and libraries are found. +# Usually not needed since the configure script should have +# taken it into account already when setting CFLAGS et al. +SYS_ROOT="@SYS_ROOT@" + +# Paths to the source code +SRC_ROOT="@SRC_ROOT@" +ADD_SRC_ROOT="@ADD_SRC_ROOT@" +OVERRIDE_SRC_ROOT="@OVERRIDE_SRC_ROOT@" +TOPDIR="@SRC_ROOT@" +OUTPUT_ROOT="@OUTPUT_ROOT@" +JDK_MAKE_SHARED_DIR="@JDK_TOPDIR@"/makefiles/common/shared +JDK_TOPDIR="@JDK_TOPDIR@" +LANGTOOLS_TOPDIR="@LANGTOOLS_TOPDIR@" +CORBA_TOPDIR="@CORBA_TOPDIR@" +JAXP_TOPDIR="@JAXP_TOPDIR@" +JAXWS_TOPDIR="@JAXWS_TOPDIR@" +HOTSPOT_TOPDIR="@HOTSPOT_TOPDIR@" +COPYRIGHT_YEAR="@COPYRIGHT_YEAR@" + +# Information gathered from the version.numbers file. +JDK_MAJOR_VERSION="@JDK_MAJOR_VERSION@" +JDK_MINOR_VERSION="@JDK_MINOR_VERSION@" +JDK_MICRO_VERSION="@JDK_MICRO_VERSION@" +JDK_UPDATE_VERSION="@JDK_UPDATE_VERSION@" +JDK_BUILD_NUMBER="@JDK_BUILD_NUMBER@" +MILESTONE="@MILESTONE@" +LAUNCHER_NAME="@LAUNCHER_NAME@" +PRODUCT_NAME="@PRODUCT_NAME@" +PRODUCT_SUFFIX="@PRODUCT_SUFFIX@" +JDK_RC_PLATFORM_NAME="@JDK_RC_PLATFORM_NAME@" +COMPANY_NAME="@COMPANY_NAME@" + +# Different version strings generated from the above information. +JDK_VERSION="@JDK_VERSION@" +RUNTIME_NAME="@RUNTIME_NAME@" +FULL_VERSION="@FULL_VERSION@" +JRE_RELEASE_VERSION="@FULL_VERSION@" +RELEASE="@RELEASE@" +COOKED_BUILD_NUMBER="@COOKED_BUILD_NUMBER@" + +# How to compile the code: release, fastdebug or slowdebug +DEBUG_LEVEL="@DEBUG_LEVEL@" + +# This is the JDK variant to build. +# The JDK variant is a name for a specific set of modules to be compiled for the JDK. +JDK_VARIANT="@JDK_VARIANT@" + +# Should we compile support for running with a graphical UI? (ie headful) +# Should we compile support for running without? (ie headless) +SUPPORT_HEADFUL="@SUPPORT_HEADFUL@" +SUPPORT_HEADLESS="@SUPPORT_HEADLESS@" + +# These are the libjvms that we want to build. +# The java launcher uses the default. +# The other can be selected by specifying -client -server -kernel -zero or -zeroshark +# on the java launcher command line. +JVM_VARIANTS="@JVM_VARIANTS@" +JVM_VARIANT_SERVER="@JVM_VARIANT_SERVER@" +JVM_VARIANT_CLIENT="@JVM_VARIANT_CLIENT@" +JVM_VARIANT_KERNEL="@JVM_VARIANT_KERNEL@" +JVM_VARIANT_ZERO="@JVM_VARIANT_ZERO@" +JVM_VARIANT_ZEROSHARK="@JVM_VARIANT_ZEROSHARK@" + +# Legacy setting: OPT or DBG +VARIANT="@VARIANT@" +# Legacy setting: true or false +FASTDEBUG="@FASTDEBUG@" +# Legacy setting: debugging the class files? +DEBUG_CLASSFILES="@DEBUG_CLASSFILES@" +# Legacy setting: -debug or -fastdebug +BUILD_VARIANT_RELEASE="@BUILD_VARIANT_RELEASE@" + +LANGTOOLS_OUTPUTDIR="@LANGTOOLS_OUTPUTDIR@" +CORBA_OUTPUTDIR="@CORBA_OUTPUTDIR@" +JAXP_OUTPUTDIR="@JAXP_OUTPUTDIR@" +JAXWS_OUTPUTDIR="@JAXWS_OUTPUTDIR@" +HOTSPOT_OUTPUTDIR="@HOTSPOT_OUTPUTDIR@" + +# This where a working jvm is built. +# You can run ${JDK_OUTPUTDIR}/bin/java +# Though the layout of the contents of ${JDK_OUTPUTDIR} is not +# yet the same as a default installation. +JDK_OUTPUTDIR="@OUTPUT_ROOT@"/jdk + +# When you run "make install" it will create the standardized +# layout for the jdk and the jre inside the images subdir. +# Then it will copy the contents of the jdk into the installation +# directory. +IMAGES_OUTPUTDIR="@OUTPUT_ROOT@"/images + +LANGTOOLS_DIST="@LANGTOOLS_DIST@" +CORBA_DIST="@CORBA_DIST@" +JAXP_DIST="@JAXP_DIST@" +JAXWS_DIST="@JAXWS_DIST@" +HOTSPOT_DIST="@HOTSPOT_DIST@" + +# Legacy variables used by Release.gmk +JDK_IMAGE_DIR=${IMAGES_OUTPUTDIR}/j2sdk-image +JRE_IMAGE_DIR=${IMAGES_OUTPUTDIR}/j2re-image + +# Can be /sparcv9 or /amd64 on Solaris +ISA_DIR="@LEGACY_OPENJDK_TARGET_CPU3@" +BINDIR="${JDK_OUTPUTDIR}/bin${ISA_DIR}" + +# The boot jdk to use +ALT_BOOTDIR="@BOOT_JDK@" +BOOT_JDK="@BOOT_JDK@" +BOOT_JDK_JVMARGS="@BOOT_JDK_JVMARGS@" +BOOT_RTJAR="@BOOT_RTJAR@" +BOOT_TOOLSJAR="@BOOT_TOOLSJAR@" + +# When compiling Java source to be run by the boot jdk +# use these extra flags, eg -source 6 -target 6 +BOOT_JDK_SOURCETARGET="@BOOT_JDK_SOURCETARGET@" + +# Information about the build system +NUM_CORES="@NUM_CORES@" +# This is used from the jdk build for C/C++ code. +PARALLEL_COMPILE_JOBS="@CONCURRENT_BUILD_JOBS@" +# Store javac server synchronization files here, and +# the javac server log files. +JAVAC_SERVERS="@JAVAC_SERVERS@" +# Should we use a javac server or not? The javac server gives +# an enormous performance improvement since it reduces the +# startup costs of javac and reuses as much as possible of intermediate +# compilation work. But if we want to compile with a non-Java +# javac compiler, like gcj. Then we cannot use javac server and +# this variable is set to false. +JAVAC_USE_REMOTE="@JAVAC_USE_REMOTE@" +# We can block the Javac server to never use more cores than this. +# This is not for performance reasons, but for memory usage, since each +# core requires its own JavaCompiler. We might have 64 cores and 4GB +# of memory, 64 JavaCompilers will currently not fit in a 3GB heap. +# Since there is no sharing of data between the JavaCompilers. +JAVAC_SERVER_CORES="@JAVAC_SERVER_CORES@" +# Should we use dependency tracking between Java packages? true or false. +JAVAC_USE_DEPS="@JAVAC_USE_DEPS@" +# We can invoke javac: SINGLE_THREADED_BATCH or MULTI_CORE_CONCURRENT +JAVAC_USE_MODE="@JAVAC_USE_MODE@" +# Enable not yet complete sjavac support. +ENABLE_SJAVAC="@ENABLE_SJAVAC@" + +# The OpenJDK makefiles should be changed to using the standard +# configure output ..._CFLAGS and ..._LIBS. In the meantime we +# extract the information here. +FREETYPE2_LIB_PATH="@FREETYPE2_LIB_PATH@" +FREETYPE2_LIBS="@FREETYPE2_LIBS@" +FREETYPE2_CFLAGS="@FREETYPE2_CFLAGS@" +USING_SYSTEM_FT_LIB="@USING_SYSTEM_FT_LIB@" +CUPS_CFLAGS="@CUPS_CFLAGS@" + +PACKAGE_PATH="@PACKAGE_PATH@" + +# Source file for cacerts +CACERTS_FILE="@CACERTS_FILE@" + +#MOZILLA_HEADERS_PATH= + +# Necessary additional compiler flags to compile X11 +X_CFLAGS="@X_CFLAGS@" +X_LIBS="@X_LIBS@" +OPENWIN_HOME="@OPENWIN_HOME@" + +# There are two types: CC or CL +# CC is gcc and others behaving reasonably similar. +# CL is cl.exe only. +COMPILER_TYPE="@COMPILER_TYPE@" + +# Flags used for overriding the default opt setting for a C/C++ source file. +C_O_FLAG_HIGHEST="@C_O_FLAG_HIGHEST@" +C_O_FLAG_HI="@C_O_FLAG_HI@" +C_O_FLAG_NORM="@C_O_FLAG_NORM@" +C_O_FLAG_NONE="@C_O_FLAG_NONE@" +CXX_O_FLAG_HIGHEST="@CXX_O_FLAG_HIGHEST@" +CXX_O_FLAG_HI="@CXX_O_FLAG_HI@" +CXX_O_FLAG_NORM="@CXX_O_FLAG_NORM@" +CXX_O_FLAG_NONE="@CXX_O_FLAG_NONE@" + +C_FLAG_DEPS="@C_FLAG_DEPS@" +CXX_FLAG_DEPS="@CXX_FLAG_DEPS@" + +# Tools that potentially need to be cross compilation aware. +CC="@UNCYGDRIVE@ @CCACHE@ @CC@" + +# CFLAGS used to compile the jdk native libraries (C-code) +CFLAGS_JDKLIB="@CFLAGS_JDKLIB@" +CXXFLAGS_JDKLIB="@CXXFLAGS_JDKLIB@" + +# CFLAGS used to compile the jdk native launchers (C-code) +CFLAGS_JDKEXE="@CFLAGS_JDKEXE@" +CXXFLAGS_JDKEXE="@CXXFLAGS_JDKEXE@" + +CXX="@UNCYGDRIVE@ @CCACHE@ @CXX@" +#CXXFLAGS="@CXXFLAGS@" + +OBJC="@CCACHE@ @OBJC@" +#OBJCFLAGS="@OBJCFLAGS@" + +CPP="@UNCYGDRIVE@ @CPP@" +#CPPFLAGS="@CPPFLAGS@" + +# The linker can be gcc or ld on posix systems, or link.exe on winapi systems. +LD="@UNCYGDRIVE@ @LD@" + +# LDFLAGS used to link the jdk native libraries (C-code) +LDFLAGS_JDKLIB="@LDFLAGS_JDKLIB@" +LDFLAGS_JDKLIB_SUFFIX="@LDFLAGS_JDKLIB_SUFFIX@" + +# On some platforms the linker cannot be used to create executables, thus +# the need for a separate LDEXE command. +LDEXE="@UNCYGDRIVE@ @LDEXE@" + +# LDFLAGS used to link the jdk native launchers (C-code) +LDFLAGS_JDKEXE="@LDFLAGS_JDKEXE@" +LDFLAGS_JDKEXE_SUFFIX="@LDFLAGS_JDKEXE_SUFFIX@" + +# Sometimes a different linker is needed for c++ libs +LDCXX="@UNCYGDRIVE@ @LDCXX@" +# The flags for linking libstdc++ linker. +LIBCXX="@LIBCXX@" + +# Sometimes a different linker is needed for c++ executables +LDEXECXX="@UNCYGDRIVE@ @LDEXECXX@" + +# If cross compiling, then define CROSS_COMPILE_ARCH=cpu_name here. +# The HOSTCC should really be named BUILDCC, ie build executable for +# the build platform. Same as CC when not cross compiling. +HOSTCC="@HOSTCC@" +HOSTCXX="@HOSTCXX@" +# And of course, the jdk spells HOSTCC as NIO_CC/HOST_CC +HOST_CC="@HOSTCC@" +NIO_CC="@HOSTCC@" + +AS="@AS@" +ASFLAGS="@ASFLAGS@" + +# AR is used to create a static library (is ar in posix, lib.exe in winapi) +AR="@UNCYGDRIVE@ @AR@" +ARFLAGS="@ARFLAGS@" + +NM="@NM@" +STRIP="@STRIP@" +MCS="@MCS@" + +# Command to create a shared library +SHARED_LIBRARY_FLAGS="@SHARED_LIBRARY_FLAGS@" + +# Options to linker to specify a mapfile. +# (Note absence of = assignment, because we do not want to evaluate the macro body here) +SET_SHARED_LIBRARY_MAPFILE="@SET_SHARED_LIBRARY_MAPFILE@" + +# Options for C/CXX compiler to be used if linking is performed +# using reorder file +C_FLAG_REORDER="@C_FLAG_REORDER@" +CXX_FLAG_REORDER="@CXX_FLAG_REORDER@" + +# +# Options for generating debug symbols +ENABLE_DEBUG_SYMBOLS="@ENABLE_DEBUG_SYMBOLS@" +CFLAGS_DEBUG_SYMBOLS="@CFLAGS_DEBUG_SYMBOLS@" +CXXFLAGS_DEBUG_SYMBOLS="@CXXFLAGS_DEBUG_SYMBOLS@" +ZIP_DEBUGINFO_FILES="@ZIP_DEBUGINFO_FILES@" + +# Options to linker to specify the library name. +# (Note absence of = assignment, because we do not want to evaluate the macro body here) +SET_SHARED_LIBRARY_NAME="@SET_SHARED_LIBRARY_NAME@" + +# Set origin using the linker, ie use the relative path to the dependent library to find the dependees. +# (Note absence of = assignment, because we do not want to evaluate the macro body here) +SET_SHARED_LIBRARY_ORIGIN="@SET_SHARED_LIBRARY_ORIGIN@" + +# Different OS:es have different ways of naming shared libraries. +# The SHARED_LIBRARY macro takes "verify" as and argument and returns: +# "libverify.so" or "libverify.dylib" or "verify.dll" depending on platform. +# (Note absence of = assignment, because we do not want to evaluate the macro body here) +SHARED_LIBRARY="@SHARED_LIBRARY@" +STATIC_LIBRARY="@STATIC_LIBRARY@" +LIBRARY_PREFIX="@LIBRARY_PREFIX@" +SHARED_LIBRARY_SUFFIX="@SHARED_LIBRARY_SUFFIX@" +STATIC_LIBRARY_SUFFIX="@STATIC_LIBRARY_SUFFIX@" +EXE_SUFFIX="@EXE_SUFFIX@" +OBJ_SUFFIX="@OBJ_SUFFIX@" + +POST_STRIP_CMD="@POST_STRIP_CMD@" +POST_MCS_CMD='@POST_MCS_CMD@' + +JAVA_FLAGS="@BOOT_JDK_JVMARGS@" + +JAVA="@UNCYGDRIVE@ @JAVA@ ${JAVA_FLAGS}" + +JAVAC="@UNCYGDRIVE@ @JAVAC@" +JAVAC_FLAGS="@JAVAC_FLAGS@" + +JAVAH="@UNCYGDRIVE@ @JAVAH@" + +JAR="@UNCYGDRIVE@ @JAR@" + +RMIC="@UNCYGDRIVE@ @RMIC@" + +NATIVE2ASCII="@UNCYGDRIVE@ @NATIVE2ASCII@" + +BOOT_JAR_CMD="@UNCYGDRIVE@ @JAR@" +BOOT_JAR_JFLAGS= + +# Tools adhering to a minimal and common standard of posix compliance. +AWK="@AWK@" +CAT="@CAT@" +CCACHE="@CCACHE@" +# CD is going away, but remains to cater for legacy makefiles. +CD=cd +CHMOD="@CHMOD@" +CP="@CP@" +CPIO="@CPIO@" +CUT="@CUT@" +DATE="@DATE@" +DF="@DF@" +DIFF="@DIFF@" +FIND="@FIND@" +FIND_DELETE="@FIND_DELETE@" +ECHO="@ECHO@" +EGREP="@EGREP@" +FGREP="@FGREP@" +GREP="@GREP@" +HEAD="@HEAD@" +LS="@LS@" +LN="@LN@" +MKDIR="@MKDIR@" +MV="@MV@" +NAWK="@NAWK@" +PRINTF="@PRINTF@" +PWD="@THEPWDCMD@" +RM="@RM@" +SED="@SED@" +SH="@SH@" +SORT="@SORT@" +TAR="@TAR@" +TAIL="@TAIL@" +TEE="@TEE@" +TR="@TR@" +TOUCH="@TOUCH@" +WC="@WC@" +XARGS="@XARGS@" +ZIPEXE="@ZIP@" +ZIP="@ZIP@" +UNZIP="@UNZIP@" +MT="@UNCYGDRIVE@ @MT@" +RC="@UNCYGDRIVE@ @RC@" +DUMPBIN="@UNCYGDRIVE@ @DUMPBIN@" +CYGPATH="@CYGPATH@" +LDD="@LDD@" +OTOOL="@OTOOL@" +READELF="@READELF@" +EXPR="@EXPR@" +FILE="@FILE@" +HG="@HG@" +OBJCOPY="@OBJCOPY@" + +UNCYGDRIVE="@UNCYGDRIVE@" + +# Build setup +ENABLE_DOCS="@ENABLE_DOCS@" +GENERATE_DOCS="@ENABLE_DOCS@" +DISABLE_NIMBUS="@DISABLE_NIMBUS@" +USE_EXTERNAL_LIBJPEG="@USE_EXTERNAL_LIBJPEG@" +USE_EXTERNAL_LIBGIF="@USE_EXTERNAL_LIBGIF@" +USE_EXTERNAL_LIBZ="@USE_EXTERNAL_LIBZ@" +LIBZIP_CAN_USE_MMAP="@LIBZIP_CAN_USE_MMAP@" +CHECK_FOR_VCINSTALLDIR="@CHECK_FOR_VCINSTALLDIR@" +MSVCRNN_DLL="@MSVCR100DLL@" + + +#################################################### +# +# Legacy Hotspot support + +HOTSPOT_DIST="@HOTSPOT_DIST@" +HOTSPOT_MAKE_ARGS="@HOTSPOT_MAKE_ARGS@" +# This is used from the libjvm build for C/C++ code. +HOTSPOT_BUILD_JOBS="@CONCURRENT_BUILD_JOBS@" +# Control wether Hotspot runs Queens test after building +TEST_IN_BUILD="@TEST_IN_BUILD@" + +#################################################### +# +# INSTALLATION +# + +# Common prefix for all installed files. Defaults to /usr/local, +# but /opt/myjdk is another common version. +INSTALL_PREFIX="@prefix@" + +# Directories containing architecture-dependent files should be relative to exec_prefix +INSTALL_EXECPREFIX="@exec_prefix@" + +# java,javac,javah,javap etc are installed here. +INSTALL_BINDIR="@bindir@" + +# Read only architecture-independent data +INSTALL_DATADIR="@datadir@" + +# Root of above. +INSTALL_DATAROOTDIR="@datarootdir@" + +# Doc files, other than info and man. +INSTALL_DOCDIR="@docdir@" + +# Html documentation +INSTALL_HTMLDIR="@htmldir@" + +# Installing C header files, JNI headers for example. +INSTALL_INCLUDEDIR="@includedir@" + +# Installing library files.... +INSTALL_INCLUDEDIR="@libdir@" + +# Executables that other programs run. +INSTALL_LIBEXECDIR="@libexecdir@" + +# Locale-dependent but architecture-independent data, such as message catalogs. +INSTALL_LOCALEDIR="@localedir@" + +# Modifiable single-machine data +INSTALL_LOCALSTATEDIR="@localstatedir@" + +# Man pages +INSTALL_MANDIR="@mandir@" + +# Modifiable architecture-independent data. +INSTALL_SHAREDSTATEDIR="@sharedstatedir@" + +# Read-only single-machine data +INSTALL_SYSCONFDIR="@sysconfdir@" + + +#################################################### +# +# Misc +# + +# Name of Service Agent library +SALIB_NAME="@SALIB_NAME@" + +OS_VERSION_MAJOR="@OS_VERSION_MAJOR@" +OS_VERSION_MINOR="@OS_VERSION_MINOR@" +OS_VERSION_MICRO="@OS_VERSION_MICRO@" diff --git a/common/autoconf/toolchain.m4 b/common/autoconf/toolchain.m4 new file mode 100644 index 00000000000..252e06af4d0 --- /dev/null +++ b/common/autoconf/toolchain.m4 @@ -0,0 +1,908 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV], +[ + +# Check if the VS env variables were setup prior to running configure. +# If not, then find vcvarsall.bat and run it automatically, and integrate +# the set env variables into the spec file. +SETUPDEVENV="# No special vars" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + # If vcvarsall.bat has been run, then VCINSTALLDIR is set. + if test "x$VCINSTALLDIR" != x; then + # No further setup is needed. The build will happen from this kind + # of shell. + SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." + # Make sure to remind you, if you forget to run make from a cygwin bash shell + # that is spawned "bash -l" from a VS command prompt. + CHECK_FOR_VCINSTALLDIR=yes + AC_MSG_CHECKING([if you are running from within a VS command prompt]) + AC_MSG_RESULT([yes]) + else + # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. + if test "x$VS100COMNTOOLS" != x; then + VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` + SEARCH_ROOT="$VS100COMNTOOLS" + else + VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` + SEARCH_ROOT="$PROGRAMFILES" + fi + VCPATH=`dirname "$VARSBAT"` + VCPATH=`cygpath -w "$VCPATH"` + if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then + AC_MSG_CHECKING([if we can find the VS installation]) + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) + fi + case "$LEGACY_OPENJDK_TARGET_CPU1" in + i?86) + VARSBAT_ARCH=x86 + ;; + *) + VARSBAT_ARCH=$LEGACY_OPENJDK_TARGET_CPU1 + ;; + esac + # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat + cd $OUTPUT_ROOT + bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" + cd $CURDIR + if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then + AC_MSG_CHECKING([if we can extract the needed env variables]) + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not succesfully extract the env variables needed for the VS setup. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) + fi + # Now set all paths and other env variables. This will allow the rest of + # the configure script to find and run the compiler in the proper way. + . $OUTPUT_ROOT/localdevenv.sh + AC_MSG_CHECKING([if we can find the VS installation]) + if test "x$VCINSTALLDIR" != x; then + AC_MSG_RESULT([$VCINSTALLDIR]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find VS installation. Please install. If you are sure you have installed VS, then please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) + fi + CHECK_FOR_VCINSTALLDIR=no + SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" + + AC_MSG_CHECKING([for msvcr100.dll]) + AC_ARG_WITH(msvcr100dll, [AS_HELP_STRING([--with-msvcr100dll], + [copy this msvcr100.dll into the built JDK])]) + if test "x$with_msvcr100dll" != x; then + MSVCR100DLL="$with_msvcr100dll" + else + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` + else + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` + if test "x$MSVCR100DLL" = x; then + MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` + fi + fi + fi + if test "x$MSVCR100DLL" = x; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find msvcr100.dll !]) + fi + AC_MSG_RESULT([$MSVCR100DLL]) + SPACESAFE(MSVCR100DLL,[the path to msvcr100.dll]) + fi +fi +AC_SUBST(SETUPDEVENV) +AC_SUBST(CHECK_FOR_VCINSTALLDIR) +AC_SUBST(MSVCR100DLL) +]) + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS], +[ +############################################################################### +# +# Configure the development tool paths and potential sysroot. +# +AC_LANG(C++) +DEVKIT= +SYS_ROOT=/ +AC_SUBST(SYS_ROOT) + +# The option used to specify the target .o,.a or .so file. +# When compiling, how to specify the to be created object file. +CC_OUT_OPTION='-o$(SPACE)' +# When linking, how to specify the to be created executable. +EXE_OUT_OPTION='-o$(SPACE)' +# When linking, how to specify the to be created dynamically linkable library. +LD_OUT_OPTION='-o$(SPACE)' +# When archiving, how to specify the to be create static archive for object files. +AR_OUT_OPTION='rcs$(SPACE)' +AC_SUBST(CC_OUT_OPTION) +AC_SUBST(EXE_OUT_OPTION) +AC_SUBST(LD_OUT_OPTION) +AC_SUBST(AR_OUT_OPTION) +]) + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_PATHS], +[ +# If --build AND --host is set, then the configure script will find any +# cross compilation tools in the PATH. Cross compilation tools +# follows the cross compilation standard where they are prefixed with ${host}. +# For example the binary i686-sun-solaris2.10-gcc +# will cross compile for i686-sun-solaris2.10 +# If neither of build and host is not set, then build=host and the +# default compiler found in the path will be used. +# Setting only --host, does not seem to be really supported. +# Please set both --build and --host if you want to cross compile. + +DEFINE_CROSS_COMPILE_ARCH="" +HOSTCC="" +HOSTCXX="" +HOSTLD="" +AC_SUBST(DEFINE_CROSS_COMPILE_ARCH) +AC_MSG_CHECKING([if this is a cross compile]) +if test "x$OPENJDK_BUILD_SYSTEM" != "x$OPENJDK_TARGET_SYSTEM"; then + AC_MSG_RESULT([yes, from $OPENJDK_BUILD_SYSTEM to $OPENJDK_TARGET_SYSTEM]) + # We have detected a cross compile! + DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_OPENJDK_TARGET_CPU1" + # Now we to find a C/C++ compiler that can build executables for the build + # platform. We can't use the AC_PROG_CC macro, since it can only be used + # once. + AC_PATH_PROGS(HOSTCC, [cl cc gcc]) + WHICHCMD(HOSTCC) + AC_PATH_PROGS(HOSTCXX, [cl CC g++]) + WHICHCMD(HOSTCXX) + AC_PATH_PROG(HOSTLD, ld) + WHICHCMD(HOSTLD) + # Building for the build platform should be easy. Therefore + # we do not need any linkers or assemblers etc. +else + AC_MSG_RESULT([no]) +fi + +# You can force the sys-root if the sys-root encoded into the cross compiler tools +# is not correct. +AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root], + [pass this sys-root to the compilers and linker (useful if the sys-root encoded in + the cross compiler tools is incorrect)])]) + +if test "x$with_sys_root" != x; then + SYS_ROOT=$with_sys_root +fi + +# If a devkit is found on the builddeps server, then prepend its path to the +# PATH variable. If there are cross compilers available in the devkit, these +# will be found by AC_PROG_CC et al. +BDEPS_CHECK_MODULE(DEVKIT, devkit, xxx, + [# Found devkit + PATH="$DEVKIT/bin:$PATH" + SYS_ROOT="$DEVKIT/${rewritten_target}/sys-root" + if test "x$x_includes" = "xNONE"; then + x_includes="$SYS_ROOT/usr/include/X11" + fi + if test "x$x_libraries" = "xNONE"; then + x_libraries="$SYS_ROOT/usr/lib" + fi + ], + []) + +if test "x$SYS_ROOT" != "x/" ; then + CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" + CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" + OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" + OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" + CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" + LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" +fi + +# Store the CFLAGS etal passed to the configure script. +ORG_CFLAGS="$CFLAGS" +ORG_CXXFLAGS="$CXXFLAGS" +ORG_OBJCFLAGS="$OBJCFLAGS" + +AC_ARG_WITH([tools-dir], [AS_HELP_STRING([--with-tools-dir], + [search this directory for compilers and tools])], [TOOLS_DIR=$with_tools_dir]) + +AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit], + [use this directory as base for tools-dir and sys-root])], [ + if test "x$with_sys_root" != x; then + AC_MSG_ERROR([Cannot specify both --with-devkit and --with-sys-root at the same time]) + fi + if test "x$with_tools_dir" != x; then + AC_MSG_ERROR([Cannot specify both --with-devkit and --with-tools-dir at the same time]) + fi + TOOLS_DIR=$with_devkit/bin + SYS_ROOT=$with_devkit/$host_alias/libc + ]) + +# autoconf magic only relies on PATH, so update it if tools dir is specified +OLD_PATH="$PATH" +if test "x$TOOLS_DIR" != x; then + PATH=$TOOLS_DIR:$PATH +fi + +# gcc is almost always present, but on Windows we +# prefer cl.exe and on Solaris we prefer CC. +# Thus test for them in this order. +AC_PROG_CC([cl cc gcc]) +if test "x$CC" = x; then + HELP_MSG_MISSING_DEPENDENCY([devkit]) + AC_MSG_ERROR([Could not find a compiler. $HELP_MSG]) +fi +if test "x$CC" = xcc && test "x$OPENJDK_BUILD_OS" = xmacosx; then + # Do not use cc on MacOSX use gcc instead. + CC="gcc" +fi +WHICHCMD(CC) + +AC_PROG_CXX([cl CC g++]) +if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then + # The found CC, even though it seems to be a g++ derivate, cannot compile + # c++ code. Override. + CXX="g++" +fi +WHICHCMD(CXX) + +if test "x$CXX" = x || test "x$CC" = x; then + HELP_MSG_MISSING_DEPENDENCY([devkit]) + AC_MSG_ERROR([Could not find the needed compilers! $HELP_MSG ]) +fi + +if test "x$OPENJDK_BUILD_OS" != xwindows; then + AC_PROG_OBJC + WHICHCMD(OBJC) +else + OBJC= +fi + +# Restore the flags to the user specified values. +# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" +CFLAGS="$ORG_CFLAGS" +CXXFLAGS="$ORG_CXXFLAGS" +OBJCFLAGS="$ORG_OBJCFLAGS" + +# If we are not cross compiling, use the same compilers for +# building the build platform executables. +if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then + HOSTCC="$CC" + HOSTCXX="$CXX" +fi + +AC_CHECK_TOOL(LD, ld) +WHICHCMD(LD) +LD="$CC" +LDEXE="$CC" +LDCXX="$CXX" +LDEXECXX="$CXX" +# LDEXE is the linker to use, when creating executables. +AC_SUBST(LDEXE) +# Linking C++ libraries. +AC_SUBST(LDCXX) +# Linking C++ executables. +AC_SUBST(LDEXECXX) + +AC_CHECK_TOOL(AR, ar) +WHICHCMD(AR) +if test "x$OPENJDK_BUILD_OS" = xmacosx; then + ARFLAGS="-r" +else + ARFLAGS="" +fi +AC_SUBST(ARFLAGS) + +COMPILER_NAME=gcc +COMPILER_TYPE=CC +AS_IF([test "x$OPENJDK_BUILD_OS" = xwindows], [ + # For now, assume that we are always compiling using cl.exe. + CC_OUT_OPTION=-Fo + EXE_OUT_OPTION=-out: + LD_OUT_OPTION=-out: + AR_OUT_OPTION=-out: + # On Windows, reject /usr/bin/link, which is a cygwin + # program for something completely different. + AC_CHECK_PROG([WINLD], [link],[link],,, [/usr/bin/link]) + # Since we must ignore the first found link, WINLD will contain + # the full path to the link.exe program. + WHICHCMD_SPACESAFE([WINLD]) + LD="$WINLD" + LDEXE="$WINLD" + LDCXX="$WINLD" + LDEXECXX="$WINLD" + # Set HOSTLD to same as LD until we fully support cross compilation + # on windows. + HOSTLD="$WINLD" + + AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt]) + WHICHCMD_SPACESAFE([MT]) + # The resource compiler + AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc]) + WHICHCMD_SPACESAFE([RC]) + + RC_FLAGS="-nologo /l 0x409 /r" + AS_IF([test "x$VARIANT" = xOPT], [ + RC_FLAGS="$RC_FLAGS -d NDEBUG" + ]) + JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION + AS_IF([test "x$JDK_UPDATE_VERSION" = x], [ + JDK_UPDATE_VERSION_NOTNULL=0 + ]) + RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" + RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" + + # lib.exe is used to create static libraries. + AC_CHECK_PROG([WINAR], [lib],[lib],,,) + WHICHCMD_SPACESAFE([WINAR]) + AR="$WINAR" + ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" + + AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,) + WHICHCMD_SPACESAFE([DUMPBIN]) + + COMPILER_TYPE=CL + CCXXFLAGS="$CCXXFLAGS -nologo" +]) +AC_SUBST(RC_FLAGS) +AC_SUBST(COMPILER_TYPE) + +AC_PROG_CPP +WHICHCMD(CPP) + +AC_PROG_CXXCPP +WHICHCMD(CXXCPP) + +# for solaris we really need solaris tools, and not gnu equivalent +# these seems to normally reside in /usr/ccs/bin so add that to path before +# starting to probe +# +# NOTE: I add this /usr/ccs/bin after TOOLS but before OLD_PATH +# so that it can be overriden --with-tools-dir +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + PATH="${TOOLS_DIR}:/usr/ccs/bin:${OLD_PATH}" +fi + +# Find the right assembler. +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + AC_PATH_PROG(AS, as) + WHICHCMD(AS) + ASFLAGS=" " +else + AS="$CC -c" + ASFLAGS=" " +fi +AC_SUBST(AS) +AC_SUBST(ASFLAGS) + +if test "x$OPENJDK_BUILD_OS" = xsolaris; then + AC_PATH_PROG(NM, nm) + WHICHCMD(NM) + AC_PATH_PROG(STRIP, strip) + WHICHCMD(STRIP) + AC_PATH_PROG(MCS, mcs) + WHICHCMD(MCS) +else + AC_CHECK_TOOL(NM, nm) + WHICHCMD(NM) + AC_CHECK_TOOL(STRIP, strip) + WHICHCMD(STRIP) +fi + +### +# +# Check for objcopy +# +# but search for gobjcopy first... +# since I on solaris found a broken objcopy...buhh +# +AC_PATH_TOOL(OBJCOPY, gobjcopy) +if test "x$OBJCOPY" = x; then + AC_PATH_TOOL(OBJCOPY, objcopy) +fi + +# Restore old path without tools dir +PATH="$OLD_PATH" +]) + + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_LIBS], +[ + +############################################################################### +# +# How to compile shared libraries. +# + +if test "x$GCC" = xyes; then + COMPILER_NAME=gcc + PICFLAG="-fPIC" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib[$]1.so' + STATIC_LIBRARY='lib[$]1.a' + SHARED_LIBRARY_FLAGS="-shared" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='-Xlinker -soname=[$]1' + SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=[$]1' + C_FLAG_REORDER='' + CXX_FLAG_REORDER='' + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/[$]1' + LD="$CC" + LDEXE="$CC" + LDCXX="$CXX" + LDEXECXX="$CXX" + POST_STRIP_CMD="$STRIP -g" + if test "x$JDK_VARIANT" = xembedded; then + POST_STRIP_CMD="$STRIP --strip-unneeded" + fi + + # Linking is different on MacOSX + if test "x$OPENJDK_BUILD_OS" = xmacosx; then + # Might change in the future to clang. + COMPILER_NAME=gcc + SHARED_LIBRARY='lib[$]1.dylib' + SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" + SHARED_LIBRARY_SUFFIX='.dylib' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1' + SET_SHARED_LIBRARY_MAPFILE='' + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' + POST_STRIP_CMD="$STRIP -S" + fi +else + if test "x$OPENJDK_BUILD_OS" = xsolaris; then + # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler + COMPILER_NAME=ossc + PICFLAG="-KPIC" + LIBRARY_PREFIX=lib + SHARED_LIBRARY='lib[$]1.so' + STATIC_LIBRARY='lib[$]1.a' + SHARED_LIBRARY_FLAGS="-z defs -xildoff -ztext -G" + SHARED_LIBRARY_SUFFIX='.so' + STATIC_LIBRARY_SUFFIX='.a' + OBJ_SUFFIX='.o' + EXE_SUFFIX='' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='-M[$]1' + C_FLAG_REORDER='-xF' + CXX_FLAG_REORDER='-xF' + SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/[$]1' + CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__" + CFLAGS_JDKLIB_EXTRA='-xstrconst' + POST_STRIP_CMD="$STRIP -x" + POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" + fi + if test "x$OPENJDK_BUILD_OS" = xwindows; then + # If it is not gcc, then assume it is the MS Visual Studio compiler + COMPILER_NAME=cl + PICFLAG="" + LIBRARY_PREFIX= + SHARED_LIBRARY='[$]1.dll' + STATIC_LIBRARY='[$]1.lib' + SHARED_LIBRARY_FLAGS="-LD" + SHARED_LIBRARY_SUFFIX='.dll' + STATIC_LIBRARY_SUFFIX='.lib' + OBJ_SUFFIX='.obj' + EXE_SUFFIX='.exe' + SET_SHARED_LIBRARY_NAME='' + SET_SHARED_LIBRARY_MAPFILE='' + SET_SHARED_LIBRARY_ORIGIN='' + fi +fi + +AC_SUBST(OBJ_SUFFIX) +AC_SUBST(SHARED_LIBRARY) +AC_SUBST(STATIC_LIBRARY) +AC_SUBST(LIBRARY_PREFIX) +AC_SUBST(SHARED_LIBRARY_SUFFIX) +AC_SUBST(STATIC_LIBRARY_SUFFIX) +AC_SUBST(EXE_SUFFIX) +AC_SUBST(SHARED_LIBRARY_FLAGS) +AC_SUBST(SET_SHARED_LIBRARY_NAME) +AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) +AC_SUBST(C_FLAG_REORDER) +AC_SUBST(CXX_FLAG_REORDER) +AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) +AC_SUBST(POST_STRIP_CMD) +AC_SUBST(POST_MCS_CMD) + +# The (cross) compiler is now configured, we can now test capabilities +# of the target platform. +]) + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], +[ + +############################################################################### +# +# Setup the opt flags for different compilers +# and different operating systems. +# +C_FLAG_DEPS="-MMD -MF" +CXX_FLAG_DEPS="-MMD -MF" + +case $COMPILER_TYPE in + CC ) + D_FLAG="-g" + case $COMPILER_NAME in + gcc ) + case $OPENJDK_TARGET_OS in + macosx ) + # On MacOSX we optimize for size, something + # we should do for all platforms? + C_O_FLAG_HI="-Os" + C_O_FLAG_NORM="-Os" + C_O_FLAG_NONE="" + ;; + *) + C_O_FLAG_HI="-O3" + C_O_FLAG_NORM="-O2" + C_O_FLAG_NONE="-O0" + CFLAGS_DEBUG_SYMBOLS="-g" + CXXFLAGS_DEBUG_SYMBOLS="-g" + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then + CFLAGS_DEBUG_SYMBOLS="-g1" + CXXFLAGS_DEBUG_SYMBOLSG="-g1" + fi + ;; + esac + CXX_O_FLAG_HI="$C_O_FLAG_HI" + CXX_O_FLAG_NORM="$C_O_FLAG_NORM" + CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + ;; + ossc ) + # + # Forte has different names for this with their C++ compiler... + # + C_FLAG_DEPS="-xMMD -xMF" + CXX_FLAG_DEPS="-xMMD -xMF" + +# Extra options used with HIGHEST +# +# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be +# done with care, there are some assumptions below that need to +# be understood about the use of pointers, and IEEE behavior. +# +# Use non-standard floating point mode (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fns" +# Do some simplification of floating point arithmetic (not IEEE 754) +CC_HIGHEST="$CC_HIGHEST -fsimple" +# Use single precision floating point with 'float' +CC_HIGHEST="$CC_HIGHEST -fsingle" +# Assume memory references via basic pointer types do not alias +# (Source with excessing pointer casting and data access with mixed +# pointer types are not recommended) +CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" +# Use intrinsic or inline versions for math/std functions +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" +# Loop data dependency optimizations (need -xO3 or higher) +CC_HIGHEST="$CC_HIGHEST -xdepend" +# Pointer parameters to functions do not overlap +# (Similar to -xalias_level=basic usage, but less obvious sometimes. +# If you pass in multiple pointers to the same data, do not use this) +CC_HIGHEST="$CC_HIGHEST -xrestrict" +# Inline some library routines +# (If you expect perfect errno behavior, do not use this) +CC_HIGHEST="$CC_HIGHEST -xlibmil" +# Use optimized math routines +# (If you expect perfect errno behavior, do not use this) +# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now +#CC_HIGHEST="$CC_HIGHEST -xlibmopt" + + case $LEGACY_OPENJDK_TARGET_CPU1 in + i586) + C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" + C_O_FLAG_HI="-xO4 -Wu,-O4~yz" + C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" + CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" + CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" + CXX_O_FLAG_NONE="" + ;; + sparc) + CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" + CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" + CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" + C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" + C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" + C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" + C_O_FLAG_NONE="" + CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" + CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" + CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" + CXX_O_FLAG_NONE="" + ;; + esac + + CFLAGS_DEBUG_SYMBOLS="-g -xs" + CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" + esac + ;; + CL ) + D_FLAG= + C_O_FLAG_HI="-O2" + C_O_FLAG_NORM="-O1" + C_O_FLAG_NONE="-Od" + CXX_O_FLAG_HI="$C_O_FLAG_HI" + CXX_O_FLAG_NORM="$C_O_FLAG_NORM" + CXX_O_FLAG_NONE="$C_O_FLAG_NONE" + ;; +esac + +if test -z "$C_O_FLAG_HIGHEST"; then + C_O_FLAG_HIGHEST="$C_O_FLAG_HI" +fi + +if test -z "$CXX_O_FLAG_HIGHEST"; then + CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" +fi + +AC_SUBST(C_O_FLAG_HIGHEST) +AC_SUBST(C_O_FLAG_HI) +AC_SUBST(C_O_FLAG_NORM) +AC_SUBST(C_O_FLAG_NONE) +AC_SUBST(CXX_O_FLAG_HIGHEST) +AC_SUBST(CXX_O_FLAG_HI) +AC_SUBST(CXX_O_FLAG_NORM) +AC_SUBST(CXX_O_FLAG_NONE) +AC_SUBST(C_FLAG_DEPS) +AC_SUBST(CXX_FLAG_DEPS) +]) + +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK], +[ + +if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then + AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags"]) +fi + +if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then + AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags"]) +fi + +if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then + AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags"]) +fi + +AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags], + [extra flags to be used when compiling jdk c-files])]) + +AC_ARG_WITH(extra-cxxflags, [AS_HELP_STRING([--with-extra-cxxflags], + [extra flags to be used when compiling jdk c++-files])]) + +AC_ARG_WITH(extra-ldflags, [AS_HELP_STRING([--with-extra-ldflags], + [extra flags to be used when linking jdk])]) + +CFLAGS_JDK="${CFLAGS_JDK} $with_extra_cflags" +CXXFLAGS_JDK="${CXXFLAGS_JDK} $with_extra_cxxflags" +LDFLAGS_JDK="${LDFLAGS_JDK} $with_extra_ldflags" + +############################################################################### +# +# Now setup the CFLAGS and LDFLAGS for the JDK build. +# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. +# +case $COMPILER_NAME in + gcc ) + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ + -pipe \ + -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" + case $OPENJDK_TARGET_CPU_ARCH in + arm ) + # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + ppc ) + # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing + ;; + * ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer" + CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" + ;; + esac + ;; + ossc ) + CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" + CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" + ;; + cl ) + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ + -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ + -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ + -DWIN32 -DIAL" + case $LEGACY_OPENJDK_TARGET_CPU1 in + i?86 ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" + ;; + amd64 ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" + ;; + esac + ;; +esac + +############################################################################### +# +# Cross-compile arch specific flags + +# +if test "x$JDK_VARIANT" = "xembedded"; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DJAVASE_EMBEDDED" +fi + +case $OPENJDK_TARGET_CPU_ARCH in +arm ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" + ;; +ppc ) + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" + ;; +esac + +############################################################################### + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" + +# The package path is used only on macosx? +PACKAGE_PATH=/opt/local +AC_SUBST(PACKAGE_PATH) + +# Sometimes we use a cpu dir (.../lib/amd64/server) +# Sometimes not (.../lib/server) +LIBARCHDIR="$LEGACY_OPENJDK_TARGET_CPU2/" +if test "x$ENDIAN" = xlittle; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" +else + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" +fi +if test "x$OPENJDK_TARGET_OS" = xlinux; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" +fi +if test "x$OPENJDK_TARGET_OS" = xwindows; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" +fi +if test "x$OPENJDK_TARGET_OS" = xsolaris; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" +fi +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" + LIBARCHDIR="" +fi +if test "x$OPENJDK_TARGET_OS" = xbsd; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" +fi +if test "x$DEBUG_LEVEL" = xrelease; then + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" +else + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" +fi + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_OPENJDK_TARGET_CPU1\"' -D$LEGACY_OPENJDK_TARGET_CPU1" +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" + +CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ + -I${JDK_OUTPUTDIR}/include \ + -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ + -I${JDK_TOPDIR}/src/share/javavm/export \ + -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/javavm/export \ + -I${JDK_TOPDIR}/src/share/native/common \ + -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/native/common" + +# The shared libraries are compiled using the picflag. +CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" +CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " + +# Executable flags +CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" +CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" + +# Now this is odd. The JDK native libraries have to link against libjvm.so +# On 32-bit machines there is normally two distinct libjvm.so:s, client and server. +# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library +# is identical for client and server? Yes. Which is picked at runtime (client or server)? +# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following +# libraries will link to whatever is in memory. Yuck. +# +# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. +if test "x$COMPILER_TYPE" = xCL; then + LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" + if test "x$LEGACY_OPENJDK_TARGET_CPU1" = xi586; then + LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" + fi + # TODO: make -debug optional "--disable-full-debug-symbols" + LDFLAGS_JDK="$LDFLAGS_JDK -debug" + LDFLAGS_JDKLIB="${LDFLAGS_JDK} -dll -libpath:${JDK_OUTPUTDIR}/lib" + LDFLAGS_JDKLIB_SUFFIX="" + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then + LDFLAGS_STACK_SIZE=1048576 + else + LDFLAGS_STACK_SIZE=327680 + fi + LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" +else + # If this is a --hash-style=gnu system, use --hash-style=both, why? + HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` + if test -n "$HAS_GNU_HASH"; then + # And since we now know that the linker is gnu, then add -z defs, to forbid + # undefined symbols in object files. + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" + if test "x$DEBUG_LEVEL" == "xrelease"; then + # When building release libraries, tell the linker optimize them. + # Should this be supplied to the OSS linker as well? + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + fi + fi + + LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ + -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" + LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" + if test "x$COMPILER_NAME" = xossc; then + LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" + fi + + # Only the jli library is explicitly linked when the launchers are built. + # The libjvm is then dynamically loaded/linked by the launcher. + LDFLAGS_JDKEXE="${LDFLAGS_JDK}" + if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then + LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" + LDFLAGS_JDKEXE_SUFFIX="-ljli" + fi +fi + +# Adjust flags according to debug level. +case $DEBUG_LEVEL in + fastdebug ) + CFLAGS="$CFLAGS $D_FLAG" + JAVAC_FLAGS="$JAVAC_FLAGS -g" + ;; + slowdebug ) + CFLAGS="$CFLAGS $D_FLAG" + C_O_FLAG_HI="$C_O_FLAG_NONE" + C_O_FLAG_NORM="$C_O_FLAG_NONE" + CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" + CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" + JAVAC_FLAGS="$JAVAC_FLAGS -g" + ;; +esac + + +AC_SUBST(CFLAGS_JDKLIB) +AC_SUBST(CFLAGS_JDKEXE) + +AC_SUBST(CXXFLAGS_JDKLIB) +AC_SUBST(CXXFLAGS_JDKEXE) + +AC_SUBST(LDFLAGS_JDKLIB) +AC_SUBST(LDFLAGS_JDKEXE) +AC_SUBST(LDFLAGS_JDKLIB_SUFFIX) +AC_SUBST(LDFLAGS_JDKEXE_SUFFIX) +]) diff --git a/common/bin/compare-objects.sh b/common/bin/compare-objects.sh new file mode 100644 index 00000000000..ba01d5e4e93 --- /dev/null +++ b/common/bin/compare-objects.sh @@ -0,0 +1,235 @@ +#!/bin/bash +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# MANUAL +# +# ./common/bin/compare-objects.sh old_jdk_build_dir new_jdk_build_dir +# +# Compares object files +# + +if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then + echo "bash ./common/bin/compare-build.sh old_jdk_build_dir new_jdk_build_dir" + echo "" + echo "Compare object files" + echo "" + exit 10 +fi + +####### +# +# List of files (grep patterns) that are ignored +# +# 1) hotspot object files +IGNORE="-e hotspot" + +# 2) various build artifacts: sizer.32.o sizer.64.o dummyodbc.o +# these are produced during build and then e.g run to produce other data +# i.e not directly put into build => safe to ignore +IGNORE="${IGNORE} -e sizer.32.o -e sizer.64.o" +IGNORE="${IGNORE} -e dummyodbc.o" +IGNORE="${IGNORE} -e genSolarisConstants.o" +IGNORE="${IGNORE} -e genUnixConstants.o" + +OLD="$1" +NEW="$2" +shift; shift +PATTERN="$*" + +if [ -f $NEW/spec.sh ]; then + . $NEW/spec.sh +elif [ -f $NEW/../../spec.sh ]; then + . $NEW/../../spec.sh +elif [ -f $OLD/spec.sh ]; then + . $OLD/spec.sh +elif [ -f $OLD/../../spec.sh ]; then + . $OLD/../../spec.sh +else + echo "Unable to find spec.sh" + echo "Giving up" + exit 1 +fi + +export COMPARE_ROOT=/tmp/cimages.$USER/objects +mkdir -p $COMPARE_ROOT + +(${CD} $OLD && ${FIND} . -name '*.o') > $COMPARE_ROOT/list.old +(${CD} $NEW && ${FIND} . -name '*.o') > $COMPARE_ROOT/list.new + +# On macosx JobjC is build in both i386 and x86_64 variant (universial binary) +# but new build only builds the x86_64 +# Remove the 386 variants from comparison...to avoid "false" positives +${GREP} -v 'JObjC.dst/Objects-normal/i386' $COMPARE_ROOT/list.old > $COMPARE_ROOT/list.old.new +${CP} $COMPARE_ROOT/list.old $COMPARE_ROOT/list.old.full +${CP} $COMPARE_ROOT/list.old.new $COMPARE_ROOT/list.old + +findnew() { + arg_1=$1 + arg_2=$2 + + # special case 1 unpack-cmd => unpackexe + arg_1=`${ECHO} $arg_1 | ${SED} 's!unpack-cmd!unpackexe!g'` + arg_2=`${ECHO} $arg_2 | ${SED} 's!unpack-cmd!unpackexe!g'` + + # special case 2 /JObjC.dst/ => /libjobjc/ + arg_1=`${ECHO} $arg_1 | ${SED} 's!/JObjC.dst/!/libjobjc/!g'` + arg_2=`${ECHO} $arg_2 | ${SED} 's!/JObjC.dst/!/libjobjc/!g'` + + full=`${ECHO} $arg_1 | ${SED} 's!\.!\\\.!g'` + medium=`${ECHO} $arg_1 | ${SED} 's!.*/\([^/]*/[^/]*\)!\1!'` + short=`${ECHO} $arg_2 | ${SED} 's!\.!\\\.!g'` + if [ "`${GREP} -c "/$full" $COMPARE_ROOT/list.new`" -eq 1 ] + then + ${ECHO} $NEW/$arg_1 + return + fi + + if [ "`${GREP} -c "$medium" $COMPARE_ROOT/list.new`" -eq 1 ] + then + ${GREP} "$medium" $COMPARE_ROOT/list.new + return + fi + + if [ "`${GREP} -c "/$short" $COMPARE_ROOT/list.new`" -eq 1 ] + then + ${GREP} "/$short" $COMPARE_ROOT/list.new + return + fi + + # old style has "dir" before obj{64} + dir=`${ECHO} $arg_1 | ${SED} 's!.*/\([^/]*\)/obj[64]*.*!\1!g'` + if [ -n "$dir" -a "$dir" != "$arg_1" ] + then + if [ "`${GREP} $dir $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} $dir $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + + # Try with lib$dir/ + if [ "`${GREP} "lib$dir/" $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} "lib$dir/" $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + + # Try with $dir_objs + if [ "`${GREP} "${dir}_objs" $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} "${dir}_objs" $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + fi + + # check for some specifics... + for i in demo hotspot jobjc + do + if [ "`${ECHO} $full | ${GREP} -c $i`" -gt 0 ] + then + if [ "`${GREP} $i $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} $i $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + fi + done + + # check for specific demo + demo=`${ECHO} $arg_1 | ${SED} 's!.*/demo/jvmti/\([^/]*\)/.*!\1!g'` + if [ -n "$demo" -a "$dir" != "$demo" ] + then + if [ "`${GREP} $demo $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] + then + ${GREP} $demo $COMPARE_ROOT/list.new | ${GREP} "/$short" + return + fi + fi + + return +} + +compare() { + old=$1 + new=$2 + ${DIFF} $old $new > /dev/null + res=$? + if [ $res -eq 0 ] + then + ${ECHO} 0 + return + fi + + # check if stripped objects gives equality + ${CP} $old $COMPARE_ROOT/`basename $old`.old + ${CP} $new $COMPARE_ROOT/`basename $old`.new + ${POST_STRIP_CMD} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new > /dev/null 2>&1 + ${DIFF} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new > /dev/null + res=$? + ${RM} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new + if [ $res -eq 0 ] + then + ${ECHO} S + return + fi + + name=`basename $1 | ${SED} 's!\.o!!'` + cntold=`strings $old | ${GREP} -c $name` + cntnew=`strings $new | ${GREP} -c $name` + + if [ $cntold -gt 0 -a $cntnew -gt 0 ] + then + ${ECHO} F + return + fi + + ${ECHO} 1 +} + +for F in `${CAT} $COMPARE_ROOT/list.old` +do + if [ "${IGNORE}" ] && [ "`${ECHO} $F | ${GREP} ${IGNORE}`" ] + then + # + # skip ignored files + # + continue; + fi + + if [ "$PATTERN" ] && [ `${ECHO} $F | ${GREP} -c $PATTERN` -eq 0 ] + then + continue; + fi + + f=`basename $F` + o=$OLD/$F + n=`findnew $F $f` + + if [ "$n" ] + then + n="$NEW/$n" + ${ECHO} `compare $o $n` : $f : $o : $n + else + ${ECHO} "- : $f : $o " + fi +done diff --git a/common/bin/compareimage.sh b/common/bin/compareimage.sh index 2e9e8051384..0e5d1f031dd 100644 --- a/common/bin/compareimage.sh +++ b/common/bin/compareimage.sh @@ -177,40 +177,44 @@ else fi fi -if [ "`uname`" == "SunOS" ]; then - PERM="gstat -c%a" -elif [ $OSTYPE == "cygwin" ]; then - PERM= -elif [ "`uname`" == "Darwin" ]; then - PERM="stat -f%p" -elif [ "`uname`" == "Linux" ]; then - PERM="stat -c%A" -else - PERM="stat -c%a" -fi +echo -n Permissions... +found="" +for f in `cd $OLD && find . -type f` +do + if [ ! -f ${OLD}/$f ]; then continue; fi + if [ ! -f ${NEW}/$f ]; then continue; fi + OP=`ls -l ${OLD}/$f | awk '{printf("%.10s\n", $1);}'` + NP=`ls -l ${NEW}/$f | awk '{printf("%.10s\n", $1);}'` + if [ "$OP" != "$NP" ] + then + if [ -z "$found" ]; then echo ; found="yes"; fi + printf "\told: ${OP} new: ${NP}\t$f\n" + fi -if [ "${PERM}" ] -then - echo -n Permissions... - found="" - for f in `cd $OLD && find . -type f` - do - if [ ! -f ${OLD}/$f ]; then continue; fi - if [ ! -f ${NEW}/$f ]; then continue; fi - OP=`${PERM} ${OLD}/$f` - NP=`${PERM} ${NEW}/$f` - if [ "$OP" != "$NP" ] + OF=`cd ${OLD} && file $f` + NF=`cd ${NEW} && file $f` + if [ "$f" = "./src.zip" ] + then + if [ "`echo $OF | grep -ic zip`" -gt 0 -a "`echo $NF | grep -ic zip`" -gt 0 ] then - if [ -z "$found" ]; then echo ; found="yes"; fi - printf "\told: ${OP} new: ${NP}\t$f\n" + # the way we produces zip-files make it so that directories are stored in old file + # but not in new (only files with full-path) + # this makes file-5.09 report them as different + continue; fi - done - if [ -z "$found" ]; then echo ; found="yes"; fi -fi + fi + + if [ "$OF" != "$NF" ] + then + if [ -z "$found" ]; then echo ; found="yes"; fi + printf "\tFILE: old: ${OF} new: ${NF}\t$f\n" + fi +done +if [ -z "$found" ]; then echo ; found="yes"; fi GENERAL_FILES=$(cd $OLD && find . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \ ! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \ - ! -name "ct.sym" \ + ! -name "ct.sym" ! -name "*.diz" \ | grep -v "./bin/" | sort | $FILTER) echo General files... for f in $GENERAL_FILES diff --git a/common/bin/diffexec.sh b/common/bin/diffexec.sh index 8621e9147f1..85f7b67c69f 100644 --- a/common/bin/diffexec.sh +++ b/common/bin/diffexec.sh @@ -49,21 +49,24 @@ then fi if [ "`uname`" == "SunOS" ]; then - NM=gnm - STAT="gstat -c%s" + if [ -f "`which nm`" ]; then + NM=nm + elif [ -f "`which gnm`" ]; then + NM=gnm + else + echo "No nm command found" + exit 10 + fi LDD=ldd elif [ $OSTYPE == "cygwin" ]; then NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" NM_ARGS=/exports - STAT="stat -c%s" LDD= elif [ "`uname`" == "Darwin" ]; then NM=nm - STAT="stat -f%z" LDD="otool -L" else NM=nm - STAT="stat -c%s" LDD=ldd fi @@ -79,8 +82,8 @@ fi OLD=$(cd $(dirname $1) && pwd)/$(basename $1) NEW=$(cd $(dirname $2) && pwd)/$(basename $2) -OLD_SIZE=$($STAT "$OLD") -NEW_SIZE=$($STAT "$NEW") +OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }') +NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }') if [ $# -gt 3 ] then diff --git a/common/bin/diffjarzip.sh b/common/bin/diffjarzip.sh index 3bd96b7e112..6ad0a42c2f6 100644 --- a/common/bin/diffjarzip.sh +++ b/common/bin/diffjarzip.sh @@ -72,7 +72,11 @@ else fi if [ "`uname`" == "SunOS" ]; then - DIFF=gdiff + if [ -f "`which gdiff`" ]; then + DIFF=gdiff + else + DIFF=diff + fi else DIFF=diff fi diff --git a/common/bin/difflib.sh b/common/bin/difflib.sh index e6f8a20ee9a..dc5eed14877 100644 --- a/common/bin/difflib.sh +++ b/common/bin/difflib.sh @@ -53,21 +53,27 @@ then fi if [ "`uname`" == "SunOS" ]; then - NM=gnm - STAT="gstat -c%s" + if [ -f "`which gnm`" ]; then + NM=gnm +# Jonas 2012-05-29: solaris native nm produces radically different output than gnm +# so if using that...we need different filter than "cut -f 2-" +# + elif [ -f "`which nm`" ]; then + NM=nm + else + echo "No nm command found" + exit 10 + fi LDD=ldd elif [ $OSTYPE == "cygwin" ]; then NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" NM_ARGS=/exports - STAT="stat -c%s" LDD= elif [ "`uname`" == "Darwin" ]; then NM=nm - STAT="stat -f%z" LDD="otool -L" else NM=nm - STAT="stat -c%s" LDD=ldd fi @@ -83,8 +89,8 @@ fi OLD=$(cd $(dirname $1) && pwd)/$(basename $1) NEW=$(cd $(dirname $2) && pwd)/$(basename $2) -OLD_SIZE=$($STAT "$OLD") -NEW_SIZE=$($STAT "$NEW") +OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }') +NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }') if [ $# -gt 3 ] then @@ -122,8 +128,8 @@ then exit 0 fi -OLD_SYMBOLS=$COMPARE_ROOT/$OLD_NAME.old -NEW_SYMBOLS=$COMPARE_ROOT/$NEW_NAME.new +OLD_SYMBOLS=$COMPARE_ROOT/nm.$OLD_NAME.old +NEW_SYMBOLS=$COMPARE_ROOT/nm.$NEW_NAME.new mkdir -p $(dirname $OLD_SYMBOLS) mkdir -p $(dirname $NEW_SYMBOLS) diff --git a/common/makefiles/IdlCompilation.gmk b/common/makefiles/IdlCompilation.gmk index ae85d378d6f..799c7d6fbf9 100644 --- a/common/makefiles/IdlCompilation.gmk +++ b/common/makefiles/IdlCompilation.gmk @@ -56,10 +56,10 @@ define add_idl_package $4_OLDIMPLBASE_MSG:=with -oldImplBase endif $5 : $4 - mkdir -p $3/$$($4_TMPDIR) - rm -rf $3/$$($4_TMPDIR) - mkdir -p $(dir $5) - echo Compiling IDL $(patsubst $2/%,%,$4) + $(MKDIR) -p $3/$$($4_TMPDIR) + $(RM) -rf $3/$$($4_TMPDIR) + $(MKDIR) -p $(dir $5) + $(ECHO) Compiling IDL $(patsubst $2/%,%,$4) $8 -td $3/$$($4_TMPDIR) \ -i $2/org/omg/CORBA \ -i $2/org/omg/PortableInterceptor \ @@ -69,10 +69,10 @@ define add_idl_package $$($4_OLDIMPLBASE) \ $(PREFIXES) \ $4 - rm -f $$(addprefix $3/$$($4_TMPDIR)/,$6) - cp -rp $3/$$($4_TMPDIR)/* $3 - (cd $3/$$($4_TMPDIR); find . -type f | sed 's!\./!$3/!g' | awk '{ print $$$$1 ": $4" }' > $5) - rm -rf $3/$$($4_TMPDIR) + $(RM) -f $$(addprefix $3/$$($4_TMPDIR)/,$6) + $(CP) -rp $3/$$($4_TMPDIR)/* $3 + ($(CD) $3/$$($4_TMPDIR); find . -type f | sed 's!\./!$3/!g' | awk '{ print $$$$1 ": $4" }' > $5) + $(RM) -rf $3/$$($4_TMPDIR) endef define SetupIdlCompilation @@ -87,11 +87,13 @@ $(if $6,$1_$(strip $6)) $(if $7,$1_$(strip $7)) $(if $8,$1_$(strip $8)) $(if $9,$1_$(strip $9)) +$(if $(10),$(error Internal makefile error: Too many arguments to SetupIdlCompilation, please update IdlCompilation.gmk)) + # Remove any relative addressing in the paths. $1_SRC := $$(abspath $$($1_SRC)) $1_BIN := $$(abspath $$($1_BIN)) # Find all existing java files and existing class files. -$$(shell mkdir -p $$($1_SRC) $$($1_BIN)) +$$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN)) $1_SRCS := $$(shell find $$($1_SRC) -name "*.idl") $1_BINS := $$(shell find $$($1_BIN) -name "*.java") # Prepend the source/bin path to the filter expressions. @@ -111,4 +113,3 @@ $$(foreach p,$$($1),$$(eval $$(call add_idl_package,$1,$$($1_SRC),$$($1_BIN),$$( endef .SUFFIXES: .java .class .package - diff --git a/common/makefiles/JavaCompilation.gmk b/common/makefiles/JavaCompilation.gmk index a9ddb11a644..38d20969d5c 100644 --- a/common/makefiles/JavaCompilation.gmk +++ b/common/makefiles/JavaCompilation.gmk @@ -94,6 +94,7 @@ define SetupJavaCompiler $(if $7,$1_$(strip $7)) $(if $8,$1_$(strip $8)) $(if $9,$1_$(strip $9)) + $(if $(10),$(error Internal makefile error: Too many arguments to SetupJavaCompiler, please update JavaCompilation.gmk)) ifeq ($$($1_MODE),MULTI_CORE_CONCURRENT) ifneq (,$$($1_SERVER_DIR)) @@ -130,6 +131,7 @@ define SetupArchive # SKIP_METAINF:=Set to prevent contents of an META-INF directory to be automatically # added to the archive. # EXTRA_MANIFEST_ATTR:=Extra attribute to add to manifest. + # CHECK_COMPRESS_JAR Check the COMPRESS_JAR variable $(if $3,$1_$(strip $3)) $(if $4,$1_$(strip $4)) $(if $5,$1_$(strip $5)) @@ -143,6 +145,7 @@ define SetupArchive $(if $(13),$1_$(strip $(13))) $(if $(14),$1_$(strip $(14))) $(if $(15),$1_$(strip $(15))) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupArchive, please update JavaCompilation.gmk)) $1_JARMAIN:=$(strip $$($1_JARMAIN)) $1_JARNAME:=$$(notdir $$($1_JAR)) @@ -243,6 +246,16 @@ define SetupArchive ($(FIND) $$(src) -name _the.package -exec $(TOUCH) -r $$($1_JAR) \{\} \; ; true) &&) # Use a slightly shorter name for logging, but with enough path to identify this jar. $1_NAME:=$$(subst $$(OUTPUT_ROOT)/,,$$($1_JAR)) + + ifneq (,$$($1_CHECK_COMPRESS_JAR)) + $1_JAR_CREATE_OPTIONS := c0fm + ifeq ($(COMPRESS_JARS), true) + $1_JAR_CREATE_OPTIONS := cfm + endif + else + $1_JAR_CREATE_OPTIONS := cfm + endif + # Here is the rule that creates/updates the jar file. $$($1_JAR) : $2 $$($1_ALL_SRC) $(MKDIR) -p $$($1_BIN) @@ -283,7 +296,7 @@ define SetupArchive $$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.api.notify $(FIND_DELETE); true) &&) true ; \ fi ; \ else \ - $(ECHO) Creating $$($1_NAME) && $(JAR) cfm $$@ $$($1_MANIFEST_FILE) && \ + $(ECHO) Creating $$($1_NAME) && $(JAR) $$($1_JAR_CREATE_OPTIONS) $$@ $$($1_MANIFEST_FILE) && \ $$($1_SCAPTURE_CONTENTS) \ $$($1_SCAPTURE_METAINF) \ $$($1_SUPDATE_CONTENTS) \ @@ -311,6 +324,7 @@ define SetupZipArchive $(if $7,$1_$(strip $7)) $(if $8,$1_$(strip $8)) $(if $9,$1_$(strip $9)) + $(if $(10),$(error Internal makefile error: Too many arguments to SetupZipArchive, please update JavaCompilation.gmk)) # Find all files in the source tree. $1_SUFFIX_FILTER := $$(patsubst %,-o -name $(DQUOTE)*%$(DQUOTE),$$($1_SUFFIXES)) @@ -648,6 +662,7 @@ define SetupJavaCompilation $(if $(12),$1_$(strip $(12))) $(if $(13),$1_$(strip $(13))) $(if $(14),$1_$(strip $(14))) + $(if $(15),$(error Internal makefile error: Too many arguments to SetupJavaCompilation, please update JavaCompilation.gmk)) # Extract the info from the java compiler setup. $1_MODE := $$($$($1_SETUP)_MODE) @@ -688,6 +703,12 @@ $1_BINS := $$(shell $(FIND) $$($1_BIN) -name "*.class") # Now we have a list of all java files to compile: $$($1_SRCS) # and we have a list of all existing class files: $$($1_BINS) +# Create the corresponding smart javac wrapper command line. +$1_SJAVAC_ARGS:=$$(addprefix -x ,$$(addsuffix .*,$$(subst /,.,$$($1_EXCLUDES)))) \ +$$(addprefix -i ,$$(addsuffix .*,$$(subst /,.,$$($1_INCLUDES)))) \ +$$(addprefix -xf *,$$(strip $$($1_EXCLUDE_FILES))) \ +$$(addprefix -if *,$$(strip $$($1_INCLUDE_FILES))) -src $$(subst $$(SPACE),$$(PATH_SEP),$$(strip $$($1_SRC))) + # Prepend the source/bin path to the filter expressions. ifneq ($$($1_INCLUDES),) $1_SRC_INCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_INCLUDES)))) @@ -799,6 +820,12 @@ ifeq ($$($1_MODE),SINGLE_THREADED_BATCH) $(RM) $$($1_BIN)/_the.batch $$($1_BIN)/_the.batch.tmp $$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.batch.tmp) $(ECHO) Compiling `$(WC) $$($1_BIN)/_the.batch.tmp | $(TR) -s ' ' | $(CUT) -f 2 -d ' '` files in batch $1 +ifeq ($$($1_NOSJAVAC),) +ifeq ($$(ENABLE_SJAVAC),yes) + mkdir -p $$($1_BIN)_sjavac + $$($1_JVM) $$(word 1,$$($1_JAVAC)) com.sun.tools.javac.smart.Main $$($1_SJAVAC_ARGS) -mfl $$($1_BIN)/_the.batch.tmp -d $$($1_BIN)_sjavac +endif +endif ($$($1_JVM) $$($1_JAVAC) $$($1_FLAGS) -implicit:none -sourcepath "$$($1_SRCROOTSC)" -d $$($1_BIN) $$($1_HEADERS_ARG) @$$($1_BIN)/_the.batch.tmp && \ $(MV) $$($1_BIN)/_the.batch.tmp $$($1_BIN)/_the.batch) else @@ -890,5 +917,3 @@ ifneq (,$$($1_SRCZIP)) endif endef - - diff --git a/common/makefiles/MakeBase.gmk b/common/makefiles/MakeBase.gmk index 3018a414f3b..be0a6726a28 100644 --- a/common/makefiles/MakeBase.gmk +++ b/common/makefiles/MakeBase.gmk @@ -138,6 +138,7 @@ endef # Hook to be called as the very first thing when running a normal build define AtRootMakeStart + $(if $(findstring -j,$(MAKEFLAGS)), $(error make -j is not supported, use make JOBS=n)) $(call PrintStartMessage) $(call StartTimer) endef diff --git a/common/makefiles/MakeHelpers.gmk b/common/makefiles/MakeHelpers.gmk new file mode 100644 index 00000000000..9747eb87ae6 --- /dev/null +++ b/common/makefiles/MakeHelpers.gmk @@ -0,0 +1,185 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +################################################################ +# +# This file contains helper functions for the top-level Makefile that does +# not depend on the spec.gmk file having been read. (The purpose of this +# file is ju to avoid cluttering the top-level Makefile.) +# +################################################################ + +ifndef _MAKEHELPERS_GMK +_MAKEHELPERS_GMK := 1 + +############################## +# Stuff to run at include time +############################## + +# Find out which variables were passed explicitely on the make command line. These +# will be passed on to sub-makes, overriding spec.gmk settings. +MAKE_ARGS=$(foreach var,$(subst =command,,$(filter %=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var)))))),$(var)=$($(var))) + +list_alt_overrides_with_origins=$(filter ALT_%=environment ALT_%=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var))))) +list_alt_overrides=$(subst =command,,$(subst =environment,,$(list_alt_overrides_with_origins))) + +############################## +# Functions +############################## + +define fatal-error + # If the user specificed a "global" target (e.g. 'help'), do not exit but continue running + $$(if $$(findstring help,$$(MAKECMDGOALS)),,$$(error Cannot continue)) +endef + +define ParseLogLevel + ifeq ($$(origin VERBOSE),undefined) + # Setup logging according to LOG (but only if VERBOSE is not given) + ifeq ($$(LOG),) + # Set LOG to "warn" as default if not set (and no VERBOSE given) + LOG=warn + endif + ifeq ($$(LOG),warn) + VERBOSE=-s + else ifeq ($$(LOG),info) + VERBOSE= + else ifeq ($$(LOG),debug) + VERBOSE= + else ifeq ($$(LOG),trace) + VERBOSE=-d -p + else + $$(info Error: LOG must be one of: warn, info, debug or trace.) + $$(eval $$(call fatal-error)) + endif + else + ifneq ($$(LOG),) + # We have both a VERBOSE and a LOG argument. This is OK only if this is a repeated call by ourselves, + # but complain if this is the top-level make call. + ifeq ($$(MAKELEVEL),0) + $$(info Cannot use LOG=$$(LOG) and VERBOSE=$$(VERBOSE) at the same time. Choose one.) + $$(eval $$(call fatal-error)) + endif + endif + endif +endef + +# TODO: Fix duplication in MakeBase.gmk +define SetupLogging + ifneq ($(findstring $(LOG),debug trace),) + # Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make + OLD_SHELL:=$$(SHELL) + SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x + endif +endef + +define ParseConfAndSpec + ifneq ($$(origin SPEC),undefined) + # We have been given a SPEC, check that it works out properly + ifeq ($$(wildcard $$(SPEC)),) + $$(info Cannot locate spec.gmk, given by SPEC=$$(SPEC)) + $$(eval $$(call fatal-error)) + endif + ifneq ($$(origin CONF),undefined) + # We also have a CONF argument. This is OK only if this is a repeated call by ourselves, + # but complain if this is the top-level make call. + ifeq ($$(MAKELEVEL),0) + $$(info Cannot use CONF=$$(CONF) and SPEC=$$(SPEC) at the same time. Choose one.) + $$(eval $$(call fatal-error)) + endif + endif + # ... OK, we're satisfied, we'll use this SPEC later on + else + # Find all spec.gmk files in the build output directory + output_dir=$$(root_dir)/build + all_spec_files=$$(wildcard $$(output_dir)/*/spec.gmk) + ifeq ($$(all_spec_files),) + $$(info No configurations found for $$(root_dir)! Please run configure to create a configuration.) + $$(eval $$(call fatal-error)) + endif + # Extract the configuration names from the path + all_confs=$$(patsubst %/spec.gmk,%,$$(patsubst $$(output_dir)/%,%,$$(all_spec_files))) + + ifneq ($$(origin CONF),undefined) + # User have given a CONF= argument. + ifeq ($$(CONF),) + # If given CONF=, match all configurations + matching_confs=$$(strip $$(all_confs)) + else + # Otherwise select those that contain the given CONF string + matching_confs=$$(strip $$(foreach var,$$(all_confs),$$(if $$(findstring $$(CONF),$$(var)),$$(var)))) + endif + ifeq ($$(matching_confs),) + $$(info No configurations found matching CONF=$$(CONF)) + $$(info Available configurations:) + $$(foreach var,$$(all_confs),$$(info * $$(var))) + $$(eval $$(call fatal-error)) + else + ifeq ($$(words $$(matching_confs)),1) + $$(info Building '$$(matching_confs)' (matching CONF=$$(CONF))) + else + $$(info Building the following configurations (matching CONF=$$(CONF)):) + $$(foreach var,$$(matching_confs),$$(info * $$(var))) + endif + endif + + # Create a SPEC definition. This will contain the path to one or more spec.gmk files. + SPEC=$$(addsuffix /spec.gmk,$$(addprefix $$(output_dir)/,$$(matching_confs))) + else + # No CONF or SPEC given, check the available configurations + ifneq ($$(words $$(all_spec_files)),1) + $$(info No CONF or SPEC given, but more than one spec.gmk found in $$(output_dir).) + $$(info Available configurations:) + $$(foreach var,$$(all_confs),$$(info * $$(var))) + $$(info Please retry building with CONF= or SPEC=) + $$(eval $$(call fatal-error)) + endif + + # We found exactly one configuration, use it + SPEC=$$(strip $$(all_spec_files)) + endif + endif +endef + +define CheckEnvironment + # Find all environment or command line variables that begin with ALT. + $(if $(list_alt_overrides), + @$(PRINTF) "\nWARNING: You have the following ALT_ variables set:\n" + @$(PRINTF) "$(foreach var,$(list_alt_overrides),$(var)=$$$(var))\n" + @$(PRINTF) "ALT_ variables are deprecated and will be ignored. Please clean your environment.\n\n" + ) +endef + +define PrintStartMessage + $(if $(VERBOSE),,@$(ECHO) Running make as $(MAKE) $(MFLAGS) $(MAKE_ARGS)) + $(call CheckEnvironment) + @$(ECHO) "Building OpenJDK for target $(if $(MAKECMDGOALS),'$(MAKECMDGOALS)','all') in configuration '$(CONF_NAME)'" +endef + +define PrintEndMessage + @$(ECHO) "Finished building OpenJDK for target '$@'" + $(call CheckEnvironment) +endef + +endif # _MAKEHELPERS_GMK diff --git a/common/makefiles/Makefile b/common/makefiles/Makefile index 77420a84296..de5da99f78b 100644 --- a/common/makefiles/Makefile +++ b/common/makefiles/Makefile @@ -26,241 +26,128 @@ # This must be the first rule default: all -# Find out which variables were passed explicitely on the make command line. These -# will be passed on to sub-makes, overriding spec.gmk settings. -MAKE_ARGS=$(foreach var,$(subst =command,,$(filter %=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var)))))),$(var)=$($(var))) - -define fatal-error - # If the user specificed a "global" target (e.g. 'help'), do not exit but continue running - $$(if $$(findstring help,$$(MAKECMDGOALS)),,$$(error Cannot continue)) -endef - -ifeq ($(origin VERBOSE),undefined) - # Setup logging according to LOG (but only if VERBOSE is not given) - ifeq ($(LOG),) - # Set LOG to "warn" as default if not set (and no VERBOSE given) - LOG=warn - endif - ifeq ($(LOG),warn) - VERBOSE=-s - else ifeq ($(LOG),info) - VERBOSE= - else ifeq ($(LOG),debug) - VERBOSE= - else ifeq ($(LOG),trace) - VERBOSE=-d -p - else - $(info Error: LOG must be one of: warn, info, debug or trace.) - $(eval $(call fatal-error)) - endif -else - ifneq ($(LOG),) - # We have both a VERBOSE and a LOG argument. This is OK only if this is a repeated call by ourselves, - # but complain if this is the top-level make call. - ifeq ($(MAKELEVEL),0) - $(info Cannot use LOG=$(LOG) and VERBOSE=$(VERBOSE) at the same time. Choose one.) - $(eval $(call fatal-error)) - endif - endif -endif - -# TODO: Fix duplication in MakeBase.gmk -define SetupLogging - ifneq ($(findstring $(LOG),debug trace),) - # Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make - OLD_SHELL:=$$(SHELL) - SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x - endif -endef - -$(eval $(call SetupLogging)) - -# Find all environment or command line variables that begin with ALT. -list_alt_overrides_with_origins = $(filter ALT_%=environment ALT_%=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var))))) -list_alt_overrides=$(subst =command,,$(subst =environment,,$(list_alt_overrides_with_origins))) - +# Locate this Makefile ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),) - makefile_path=$(CURDIR)/$(lastword $(MAKEFILE_LIST)) + makefile_path:=$(CURDIR)/$(lastword $(MAKEFILE_LIST)) else - makefile_path=$(lastword $(MAKEFILE_LIST)) + makefile_path:=$(lastword $(MAKEFILE_LIST)) endif -root_dir=$(patsubst %/common/makefiles/Makefile,%,$(makefile_path)) -output_dir=$(root_dir)/build +root_dir:=$(patsubst %/common/makefiles/Makefile,%,$(makefile_path)) -ifneq ($(origin SPEC),undefined) - # We have been given a SPEC, check that it works out properly - ifeq ($(wildcard $(SPEC)),) - $(info Cannot locate spec.gmk, given by SPEC=$(SPEC)) - $(eval $(call fatal-error)) - endif - ifneq ($(origin CONF),undefined) - # We also have a CONF argument. This is OK only if this is a repeated call by ourselves, - # but complain if this is the top-level make call. - ifeq ($(MAKELEVEL),0) - $(info Cannot use CONF=$(CONF) and SPEC=$(SPEC) at the same time. Choose one.) - $(eval $(call fatal-error)) - endif - endif - # ... OK, we're satisfied, we'll use this SPEC later on -else - # Find all spec.gmk files in the build output directory - all_spec_files=$(wildcard $(output_dir)/*/spec.gmk) - ifeq ($(all_spec_files),) - $(info No configurations found for $(root_dir)! Please run configure to create a configuration.) - $(eval $(call fatal-error)) - endif - # Extract the configuration names from the path - all_confs=$(patsubst %/spec.gmk,%,$(patsubst $(output_dir)/%,%,$(all_spec_files))) +# ... and then we can include our helper functions +include $(dir $(makefile_path))/MakeHelpers.gmk - ifneq ($(origin CONF),undefined) - # User have given a CONF= argument. - ifeq ($(CONF),) - # If given CONF=, match all configurations - matching_confs=$(strip $(all_confs)) - else - # Otherwise select those that contain the given CONF string - matching_confs=$(strip $(foreach var,$(all_confs),$(if $(findstring $(CONF),$(var)),$(var)))) - endif - ifeq ($(matching_confs),) - $(info No configurations found matching CONF=$(CONF)) - $(info Available configurations:) - $(foreach var,$(all_confs),$(info * $(var))) - $(eval $(call fatal-error)) - else - ifeq ($(words $(matching_confs)),1) - $(info Building '$(matching_confs)' (matching CONF=$(CONF))) - else - $(info Building the following configurations (matching CONF=$(CONF)):) - $(foreach var,$(matching_confs),$(info * $(var))) - endif - endif +$(eval $(call ParseLogLevel)) +$(eval $(call SetupLogging)) +$(eval $(call ParseConfAndSpec)) - # Create a SPEC definition. This will contain the path to one or more spec.gmk files. - SPEC=$(addsuffix /spec.gmk,$(addprefix $(output_dir)/,$(matching_confs))) - else - # No CONF or SPEC given, check the available configurations - ifneq ($(words $(all_spec_files)),1) - $(info No CONF or SPEC given, but more than one spec.gmk found in $(output_dir).) - $(info Available configurations:) - $(foreach var,$(all_confs),$(info * $(var))) - $(info Please retry building with CONF= or SPEC=) - $(eval $(call fatal-error)) - endif - - # We found exactly one configuration, use it - SPEC=$(strip $(all_spec_files)) - endif +# Setup number of jobs to use. -jN is unfortunately not available for us to parse from the command line, +# hence this workaround. +ifeq ($(JOBS),) + JOBS=$(NUM_CORES) endif ifneq ($(words $(SPEC)),1) -# We have multiple configurations to build, call make repeatedly -all jdk hotspot jaxws jaxp corba langtools install images packages clean dist-clean: +### We have multiple configurations to build, call make repeatedly +all jdk hotspot jaxws jaxp corba langtools install images clean dist-clean: @$(foreach spec,$(SPEC),($(MAKE) -f $(makefile_path) SPEC=$(spec) $(VERBOSE) VERBOSE=$(VERBOSE) $@ $(MAKE_ARGS)) &&) true -.PHONY: all jdk hotspot jaxws jaxp corba langtools install images packages clean dist-clean +.PHONY: all jdk hotspot jaxws jaxp corba langtools install images clean dist-clean else -# This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file. +### This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file. # Now load the spec --include $(SPEC) +include $(SPEC) # Load the vital tools for all the makefiles. --include $(SRC_ROOT)/common/makefiles/MakeBase.gmk +include $(SRC_ROOT)/common/makefiles/MakeBase.gmk -# Remove any build.log from a previous run +### Clean up from previous run + +# Remove any build.log from a previous run, if they exist ifneq (,$(BUILD_LOG)) - $(shell $(RM) $(BUILD_LOG)) + ifneq (,$(BUILD_LOG_PREVIOUS)) + # Rotate old log + $(shell $(RM) $(BUILD_LOG_PREVIOUS) 2> /dev/null) + $(shell $(MV) $(BUILD_LOG) $(BUILD_LOG_PREVIOUS) 2> /dev/null) + else + $(shell $(RM) $(BUILD_LOG) 2> /dev/null) + endif endif - # Remove any javac server logs and port files. This # prevents a new make run to reuse the previous servers. ifneq (,$(JAVAC_SERVERS)) $(shell mkdir -p $(JAVAC_SERVERS) && rm -rf $(JAVAC_SERVERS)/*) endif -# Reset the build timers. -$(eval $(call ResetTimers)) # Clean out any notifications from the previous build. $(shell find $(OUTPUT_ROOT) -name "_the.*.notify" $(FIND_DELETE)) -# If make was called explicitely with -j, don't add a -j ourself to sub-makes, since -# this will be inherited automatically by make. Otherwise use our default for sub-makes. -# The -j in MAKEFLAGS is only visible when executing a recipe, hence this macro. -define GetMakeJobFlag - $(if $(findstring -j,$(MAKEFLAGS)),,-j$(NUM_CORES)) -endef +# Reset the build timers. +$(eval $(call ResetTimers)) -define CheckEnvironment - $(if $(list_alt_overrides), - @$(PRINTF) "\nWARNING: You have the following ALT_ variables set:\n" - @$(PRINTF) "$(foreach var,$(list_alt_overrides),$(var)=$$$(var))\n" - @$(PRINTF) "ALT_ variables are deprecated and will be ignored. Please clean your environment.\n" - ) -endef - -define PrintStartMessage - $(if $(VERBOSE),,@$(ECHO) Running make as $(MAKE) $(MFLAGS) $(MAKE_ARGS)) - $(call CheckEnvironment) - @$(ECHO) "Building OpenJDK for target $(if $(MAKECMDGOALS),'$(MAKECMDGOALS)','all') in configuration '$(CONF_NAME)'" -endef - -define PrintEndMessage - @$(ECHO) "Finished building OpenJDK for target '$@'" - $(call CheckEnvironment) -endef +### Main targets all: jdk @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) @$(call AtRootMakeEnd) -langtools: start-make +langtools: start-make langtools-only +langtools-only: @$(call MakeStart,langtools,all) - @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(LANGTOOLS_MAKE_ARGS) $(MAKE_ARGS)) + @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,langtools,all) -corba: langtools +corba: langtools corba-only +corba-only: @$(call MakeStart,corba,all) - @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(CORBA_MAKE_ARGS) $(MAKE_ARGS)) + @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,corba,all) -jaxp: langtools +jaxp: langtools jaxp-only +jaxp-only: @$(call MakeStart,jaxp,all) - @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(CORBA_MAKE_ARGS) $(MAKE_ARGS)) + @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,jaxp,all) -jaxws: langtools jaxp +jaxws: langtools jaxp jaxws-only +jaxws-only: @$(call MakeStart,jaxws,all) - @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(CORBA_MAKE_ARGS) $(MAKE_ARGS)) + @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,jaxws,all) -hotspot: langtools +hotspot: langtools hotspot-only +hotspot-only: @$(call MakeStart,hotspot,all) @($(CD) $(HOTSPOT_TOPDIR)/make && $(BUILD_LOG_WRAPPER) $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS) $(MAKE_ARGS)) @$(call MakeFinish,hotspot,all) -jdk: langtools corba jaxp jaxws hotspot +jdk: langtools corba jaxp jaxws hotspot jdk-only +jdk-only: @$(call MakeStart,jdk,all) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(JDK_MAKE_ARGS) $(MAKE_ARGS)) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS)) @$(call MakeFinish,jdk,all) -images install packages: source-tips start-make jdk langtools corba jaxp jaxws hotspot +images: source-tips start-make jdk langtools corba jaxp jaxws hotspot images-only +images-only: @$(call MakeStart,jdk-images,$@) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(JDK_MAKE_ARGS) $(MAKE_ARGS) $@) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(JDK_MAKE_ARGS) $(MAKE_ARGS) images) @$(call MakeFinish,jdk-images,$@) @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) @$(call AtRootMakeEnd) -old-images: source-tips start-make jdk langtools corba jaxp jaxws hotspot - @$(call MakeStart,jdk-old-images,$@) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(JDK_MAKE_ARGS) $(MAKE_ARGS) $@) - @$(call MakeFinish,old-jdk-images,$@) +install: source-tips start-make jdk langtools corba jaxp jaxws hotspot install-only +install-only: + @$(call MakeStart,jdk-images,$@) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(JDK_MAKE_ARGS) $(MAKE_ARGS) install) + @$(call MakeFinish,jdk-images,$@) @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port) @$(call AtRootMakeEnd) start-make: @$(call AtRootMakeStart) -.PHONY: jdk hotspot jaxws jaxp corba langtools install images packages start-make +.PHONY: jdk hotspot jaxws jaxp corba langtools install images start-make test: start-make @$(call MakeStart,test,$(if $(TEST),$(TEST),all)) @@ -281,7 +168,7 @@ $(OUTPUT_ROOT)/source_tips: FRC # Remove everything, except the output from configure. clean: - @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | grep -v "localdevenv.*" | grep -v uncygdrive.exe`) + @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v spec.sh | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | grep -v "localdevenv.*" | grep -v uncygdrive.exe`) @$(ECHO) Cleaned everything except the build configuration. .PHONY: clean @@ -292,7 +179,7 @@ dist-clean: .PHONY: dist-clean clean-jdk: - @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | \ + @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v spec.sh | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | \ grep -v langtools | grep -v corba | grep -v jaxp | grep -v jaxws | grep -v hotspot`) @$(ECHO) "Cleaned jdk build artifacts (but not langtools,corba,jaxp,jaxws,hotspot nor the build configuration)" .PHONY: clean diff --git a/common/makefiles/NativeCompilation.gmk b/common/makefiles/NativeCompilation.gmk index ee18f186c8e..6818a501226 100644 --- a/common/makefiles/NativeCompilation.gmk +++ b/common/makefiles/NativeCompilation.gmk @@ -51,47 +51,55 @@ define add_native_source # param 5 = the c compiler # param 6 = the c++ flags to the compiler # param 7 = the c++ compiler + # param 8 = the flags to the assembler ifneq (,$$(filter %.c,$2)) # Compile as a C file - $1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) + $1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) -c $1_$2_COMP=$5 $1_$2_DEP_FLAG:=$(C_FLAG_DEPS) else ifneq (,$$(filter %.m,$2)) # Compile as a objective-c file - $1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS) + $1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS) -c $1_$2_COMP=$5 $1_$2_DEP_FLAG:=$(C_FLAG_DEPS) + else ifneq (,$$(filter %.s,$2)) + # Compile as assembler file + $1_$2_FLAGS=$8 + $1_$2_COMP=$(AS) + $1_$2_DEP_FLAG:= else # Compile as a C++ file - $1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) + $1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) -c $1_$2_COMP=$7 $1_$2_DEP_FLAG:=$(CXX_FLAG_DEPS) endif # Generate the .o (.obj) file name and place it in the bin dir. - $1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(notdir $2)))) + $1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(patsubst %.s,%$(OBJ_SUFFIX),$$(notdir $2))))) # Only continue if this object file hasn't been processed already. This lets the first found # source file override any other with the same name. ifeq (,$$(findstring $$($1_$2_OBJ),$$($1_OBJS_SO_FAR))) $1_OBJS_SO_FAR+=$$($1_$2_OBJ) - # And this is the dependency file for this obj file. - $1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ)) - # Include previously generated dependency information. (if it exists) - -include $$($1_$2_DEP) + ifeq (,$$(filter %.s,$2)) + # And this is the dependency file for this obj file. + $1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ)) + # Include previously generated dependency information. (if it exists) + -include $$($1_$2_DEP) - ifeq ($(COMPILER_TYPE),CL) - $1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \ - -Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ)) + ifeq ($(COMPILER_TYPE),CL) + $1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \ + -Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ)) + endif endif $$($1_$2_OBJ) : $2 ifeq ($(COMPILER_TYPE),CC) $$(call COMPILING_MSG,$$(notdir $2)) - $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 + $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 endif ifeq ($(COMPILER_TYPE),CL) $$(call COMPILING_MSG,$$(notdir $2)) - $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEBUG_OUT_FLAGS) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 + $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEBUG_OUT_FLAGS) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 endif endif endef @@ -107,9 +115,9 @@ define SetupNativeCompilation # LDFLAGS_SUFFIX the linker flags to be added last on the commandline # typically the libraries linked to. # ARFLAGS the archiver flags to be used - # BIN the directory where we store the object files - # LIB the resulting library file - # EXE the resulting exec file + # OBJECT_DIR the directory where we store the object files + # LIBRARY the resulting library file + # PROGRAM the resulting exec file # INCLUDES only pick source from these directories # EXCLUDES do not pick source from these directories # INCLUDE_FILES only compile exactly these files! @@ -118,6 +126,9 @@ define SetupNativeCompilation # RC_FLAGS flags for RC. # MAPFILE mapfile # REORDER reorder file + # DEBUG_SYMBOLS add debug symbols (if configured on) + # CC the compiler to use, default is $(CC) + # LDEXE the linker to use for linking executables, default is $(LDEXE) $(if $2,$1_$(strip $2)) $(if $3,$1_$(strip $3)) $(if $4,$1_$(strip $4)) @@ -137,13 +148,94 @@ define SetupNativeCompilation $(if $(18),$1_$(strip $(18))) $(if $(19),$1_$(strip $(19))) $(if $(20),$1_$(strip $(20))) + $(if $(21),$1_$(strip $(21))) + $(if $(22),$(error Internal makefile error: Too many arguments to SetupNativeCompilation, please update NativeCompilation.gmk)) + + ifneq (,$$($1_BIN)) + $$(error BIN has been replaced with OBJECT_DIR) + endif + + ifneq (,$$($1_LIB)) + $$(error LIB has been replaced with LIBRARY) + endif + + ifneq (,$$($1_EXE)) + $$(error EXE has been replaced with PROGRAM) + endif + + ifneq (,$$($1_LIBRARY)) + ifeq (,$$($1_OUTPUT_DIR)) + $$(error LIBRARY requires OUTPUT_DIR) + endif + + ifneq ($$($1_LIBRARY),$(basename $$($1_LIBRARY))) + $$(error directory of LIBRARY should be specified using OUTPUT_DIR) + endif + + ifneq (,$(findstring $(SHARED_LIBRARY_SUFFIX),$$($1_LIBRARY))) + $$(error LIBRARY should be specified without SHARED_LIBRARY_SUFFIX: $(SHARED_LIBRARY_SUFFIX)) + endif + + ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_LIBRARY))) + $$(error LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX)) + endif + + $1_BASENAME:=$(LIBRARY_PREFIX)$$($1_LIBRARY)$(SHARED_LIBRARY_SUFFIX) + $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) + + endif + + ifneq (,$$($1_STATIC_LIBRARY)) + ifeq (,$$($1_OUTPUT_DIR)) + $$(error STATIC_LIBRARY requires OUTPUT_DIR) + endif + + ifneq ($$($1_STATIC_LIBRARY),$(basename $$($1_STATIC_LIBRARY))) + $$(error directory of STATIC_LIBRARY should be specified using OUTPUT_DIR) + endif + + ifneq (,$(findstring $(STATIC_LIBRARY_SUFFIX),$$($1_STATIC_LIBRARY))) + $$(error STATIC_LIBRARY should be specified without STATIC_LIBRARY_SUFFIX: $(STATIC_LIBRARY_SUFFIX)) + endif + + ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_STATIC_LIBRARY))) + $$(error STATIC_LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX)) + endif + + $1_BASENAME:=$(LIBRARY_PREFIX)$$($1_STATIC_LIBRARY)$(STATIC_LIBRARY_SUFFIX) + $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) + endif + + ifneq (,$$($1_PROGRAM)) + ifeq (,$$($1_OUTPUT_DIR)) + $$(error PROGRAM requires OUTPUT_DIR) + endif + + ifneq ($$($1_PROGRAM),$(basename $$($1_PROGRAM))) + $$(error directory of PROGRAM should be specified using OUTPUT_DIR) + endif + + ifneq (,$(findstring $(EXE_SUFFIX),$$($1_PROGRAM))) + $$(error PROGRAM should be specified without EXE_SUFFIX: $(EXE_SUFFIX)) + endif + + $1_BASENAME:=$$($1_PROGRAM)$(EXE_SUFFIX) + $1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME) + + endif + + ifeq (,$$($1_TARGET)) + $$(error Neither PROGRAM, LIBRARY nor STATIC_LIBRARY has been specified for SetupNativeCompilation) + endif ifeq (,$$($1_LANG)) $$(error You have to specify LANG for native compilation $1) endif ifeq (C,$$($1_LANG)) + ifeq ($$($1_LDEXE),) + $1_LDEXE:=$(LDEXE) + endif $1_LD:=$(LD) - $1_LDEXE:=$(LDEXE) else ifeq (C++,$$($1_LANG)) $1_LD:=$(LDCXX) @@ -153,8 +245,12 @@ define SetupNativeCompilation endif endif + ifeq ($$($1_CC),) + $1_CC:=$(CC) + endif + # Make sure the dirs exist. - $$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN) $$(dir $$($1_LIB)) $$(dir $$($1_EXE))) + $$(shell $(MKDIR) -p $$($1_SRC) $$($1_OBJECT_DIR) $$($1_OUTPUT_DIR)) # Find all files in the source trees. Sort to remove duplicates. $1_ALL_SRCS := $$(sort $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f))) # Extract the C/C++ files. @@ -163,7 +259,7 @@ define SetupNativeCompilation ifneq ($$($1_EXCLUDE_FILES),) $1_EXCLUDE_FILES:=$$(addprefix %,$$($1_EXCLUDE_FILES)) endif - $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.c %.cpp %.m,$$($1_ALL_SRCS))) + $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.s %.c %.cpp %.m,$$($1_ALL_SRCS))) ifneq (,$$(strip $$($1_INCLUDE_FILES))) $1_SRCS := $$(filter $$($1_INCLUDE_FILES),$$($1_SRCS)) endif @@ -171,7 +267,7 @@ define SetupNativeCompilation $$(error No sources found for $1 when looking inside the dirs $$($1_SRC)) endif # There can be only a single bin dir root, no need to foreach over the roots. - $1_BINS := $$(wildcard $$($1_BIN)/*$(OBJ_SUFFIX)) + $1_BINS := $$(wildcard $$($1_OBJECT_DIR)/*$(OBJ_SUFFIX)) # Now we have a list of all c/c++ files to compile: $$($1_SRCS) # and we have a list of all existing object files: $$($1_BINS) @@ -187,37 +283,36 @@ define SetupNativeCompilation # Calculate the expected output from compiling the sources (sort to remove duplicates. Also provides # a reproducable order on the input files to the linker). - $1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_BIN)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS))))))) - $1 := $$($1_EXPECTED_OBJS) + $1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_OBJECT_DIR)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(patsubst %.s,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS)))))))) # Are there too many object files on disk? Perhaps because some source file was removed? $1_SUPERFLOUS_OBJS:=$$(sort $$(filter-out $$($1_EXPECTED_OBJS),$$($1_BINS))) # Clean out the superfluous object files. $$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS)) - # Pickup extra HOST_OS_API and/or PLATFORM dependent variables for CFLAGS. - $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(HOST_OS_API)) $$($1_CFLAGS_$(PLATFORM)) + # Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables for CFLAGS. + $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS)) ifneq ($(DEBUG_LEVEL),release) # Pickup extra debug dependent variables for CFLAGS $1_EXTRA_CFLAGS+=$$($1_CFLAGS_debug) - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(HOST_OS_API)_debug) - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(PLATFORM)_debug) + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)_debug) + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_debug) else $1_EXTRA_CFLAGS+=$$($1_CFLAGS_release) - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(HOST_OS_API)_release) - $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(PLATFORM)_release) + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)_release) + $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_release) endif - # Pickup extra HOST_OS_API and/or PLATFORM dependent variables for CXXFLAGS. - $1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(HOST_OS_API)) $$($1_CXXFLAGS_$(PLATFORM)) + # Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables for CXXFLAGS. + $1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)) ifneq ($(DEBUG_LEVEL),release) # Pickup extra debug dependent variables for CXXFLAGS $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_debug) - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(HOST_OS_API)_debug) - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(PLATFORM)_debug) + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)_debug) + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_debug) else $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_release) - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(HOST_OS_API)_release) - $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(PLATFORM)_release) + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)_release) + $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_release) endif ifeq ($$($1_CXXFLAGS),) @@ -232,33 +327,62 @@ define SetupNativeCompilation $1_EXTRA_CXXFLAGS += $$(CXX_FLAG_REORDER) endif + ifneq (no, $(ENABLE_DEBUG_SYMBOLS)) + ifneq ($(OPENJDK_TARGET_OS), solaris) +# +# There is very weird code in Defs-solaris.gmk that first sets variables as decribed below +# and then a couple of hundreds of line below resets them... +# this feels like a sure bug...but before this is confirmed, mimic this behaviour +# (note: skip indenting this as it will surely be removed anyway) +# + + ifneq (,$$($1_DEBUG_SYMBOLS)) + $1_OPTIMIZATION := LOW + $1_EXTRA_CFLAGS += $(CFLAGS_DEBUG_SYMBOLS) + $1_EXTRA_CXXFLAGS += $(CXXFLAGS_DEBUG_SYMBOLS) + endif + +# + endif +# + endif + + ifeq (NONE, $$($1_OPTIMIZATION)) + $1_EXTRA_CFLAGS += $$(C_O_FLAG_NONE) + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_NONE) + else ifeq (LOW, $$($1_OPTIMIZATION)) + $1_EXTRA_CFLAGS += $$(C_O_FLAG_NORM) + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_NORM) + else ifeq (HIGH, $$($1_OPTIMIZATION)) + $1_EXTRA_CFLAGS += $$(C_O_FLAG_HI) + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_HI) + else ifeq (HIGHEST, $$($1_OPTIMIZATION)) + $1_EXTRA_CFLAGS += $$(C_O_FLAG_HIGHEST) + $1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_HIGHEST) + else ifneq (, $$($1_OPTIMIZATION)) + $$(error Unknown value for OPTIMIZATION: $$($1_OPTIMIZATION)) + endif + # Now create a list of the packages that are about to compile. Used when sending source # in a batch to the compiler. - $$(shell $(RM) $$($1_BIN)/_the.list_of_sources) - $$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_BIN)/_the.list_of_sources)) + $$(shell $(RM) $$($1_OBJECT_DIR)/_the.list_of_sources) + $$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_OBJECT_DIR)/_the.list_of_sources)) # Now call add_native_source for each source file we are going to compile. $$(foreach p,$$($1_SRCS),\ - $$(eval $$(call add_native_source,$1,$$p,$$($1_BIN),\ - $$($1_CFLAGS) $$($1_EXTRA_CFLAGS),$(CC),\ - $$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS),$(CXX)))) + $$(eval $$(call add_native_source,$1,$$p,$$($1_OBJECT_DIR),\ + $$($1_CFLAGS) $$($1_EXTRA_CFLAGS),$$($1_CC),\ + $$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS),$(CXX),$$($1_ASFLAGS)))) # On windows we need to create a resource file - ifeq ($(HOST_OS_API), winapi) + ifeq ($(OPENJDK_TARGET_OS_API), winapi) ifneq (,$$($1_VERSIONINFO_RESOURCE)) - ifneq (,$$($1_LIB)) - $1_BASENAME:=$$(basename $$(notdir $$($1_LIB))) - endif - ifneq (,$$($1_EXE)) - $1_BASENAME:=$$(basename $$(notdir $$($1_EXE))) - endif - $1_RES:=$$($1_BIN)/$$($1_BASENAME).res + $1_RES:=$$($1_OBJECT_DIR)/$$($1_BASENAME).res $$($1_RES): $$($1_VERSIONINFO_RESOURCE) $(RC) $$($1_RC_FLAGS) $(CC_OUT_OPTION)$$@ $$($1_VERSIONINFO_RESOURCE) endif ifneq (,$$($1_MANIFEST)) - $1_PROGRAM:=$$(basename $$(notdir $$($1_EXE))) - $1_GEN_MANIFEST:=$$($1_BIN)/$$($1_PROGRAM).manifest + $1_GEN_MANIFEST:=$$($1_OBJECT_DIR)/$$($1_PROGRAM).manifest IMVERSIONVALUE:=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VERSION).$(COOKED_BUILD_NUMBER) $$($1_GEN_MANIFEST): $$($1_MANIFEST) $(SED) 's%IMVERSION%$$(IMVERSIONVALUE)%g;s%PROGRAM%$$($1_PROGRAM)%g' $$< > $$@ @@ -266,54 +390,184 @@ define SetupNativeCompilation endif # mapfile doesnt seem to be implemented on macosx (yet??) - ifneq ($(HOST_OS),macosx) - ifneq ($(HOST_OS),windows) - $1_REAL_MAPFILE := $$($1_MAPFILE) + ifneq ($(OPENJDK_TARGET_CPU),ppc) + ifneq ($(OPENJDK_TARGET_CPU),arm) + ifneq ($(OPENJDK_TARGET_OS),macosx) + ifneq ($(OPENJDK_TARGET_OS),windows) + $1_REAL_MAPFILE:=$$($1_MAPFILE) ifneq (,$$($1_REORDER)) - $1_REAL_MAPFILE := $$($1_BIN)/mapfile + $1_REAL_MAPFILE:=$$($1_OBJECT_DIR)/mapfile $$($1_REAL_MAPFILE) : $$($1_MAPFILE) $$($1_REORDER) $$(MKDIR) -p $$(@D) $$(CP) $$($1_MAPFILE) $$@.tmp - $$(SED) -e 's=OUTPUTDIR=$$($1_BIN)=' $$($1_REORDER) >> $$@.tmp + $$(SED) -e 's=OUTPUTDIR=$$($1_OBJECT_DIR)=' $$($1_REORDER) >> $$@.tmp $$(MV) $$@.tmp $$@ endif endif endif + endif + endif - # Pickup extra HOST_OS_API dependent variables (posix or winapi) and + # Pickup extra OPENJDK_TARGET_OS_API dependent variables (posix or winapi) and # (linux,solaris,windows,bsd) for LDFLAGS and LDFLAGS_SUFFIX - $1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(HOST_OS_API)) $$($1_LDFLAGS_$(PLATFORM)) - $1_EXTRA_LDFLAGS_SUFFIX:=$$($1_LDFLAGS_SUFFIX_$(HOST_OS_API)) $$($1_LDFLAGS_SUFFIX_$(PLATFORM)) + $1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_LDFLAGS_$(OPENJDK_TARGET_OS)) + $1_EXTRA_LDFLAGS_SUFFIX:=$$($1_LDFLAGS_SUFFIX_$(OPENJDK_TARGET_OS_API)) $$($1_LDFLAGS_SUFFIX_$(OPENJDK_TARGET_OS)) ifneq (,$$($1_REAL_MAPFILE)) - $1_EXTRA_LDFLAGS += $(call SET_SHARED_LIBRARY_MAPFILE,$$($1_REAL_MAPFILE)) + $1_EXTRA_LDFLAGS += $(call SET_SHARED_LIBRARY_MAPFILE,$$($1_REAL_MAPFILE)) endif - ifneq (,$$($1_LIB)) - ifeq (dynamic,$$(patsubst %$(SHARED_LIBRARY_SUFFIX),dynamic,$$($1_LIB))) - # Generating a dynamic library. - $1_EXTRA_LDFLAGS+=$$(call SET_SHARED_LIBRARY_NAME,$$(notdir $$($1_LIB))) - $$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_REAL_MAPFILE) - $$(call LINKING_MSG,$$(notdir $$($1_LIB))) - $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(LD_OUT_OPTION)$$($1_LIB) \ - $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) - else - # Generating a static library, ie object file archive. - $$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES) - $$(call ARCHIVING_MSG,$$(notdir $$($1_LIB))) - $(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_LIB) $$($1_EXPECTED_OBJS) \ - $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) - endif + $1 := $$($1_TARGET) + ifneq (,$$($1_LIBRARY)) + # Generating a dynamic library. + $1_EXTRA_LDFLAGS+=$$(call SET_SHARED_LIBRARY_NAME,$$($1_BASENAME)) + ifeq ($(OPENJDK_TARGET_OS), windows) + $1_EXTRA_LDFLAGS+="-implib:$$($1_OBJECT_DIR)/$$($1_LIBRARY).lib" + endif + + ifneq (,$$($1_DEBUG_SYMBOLS)) + ifeq ($(ENABLE_DEBUG_SYMBOLS), yes) + ifeq ($(OPENJDK_TARGET_OS), windows) + $1_EXTRA_LDFLAGS+="-pdb:$$($1_OBJECT_DIR)/$$($1_LIBRARY).pdb" \ + "-map:$$($1_OBJECT_DIR)/$$($1_LIBRARY).map" + endif + + $$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/% + $(CP) $$< $$@ + + + ifeq ($(OPENJDK_TARGET_OS), solaris) + # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. + # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from + # empty section headers until a fixed $(OBJCOPY) is available. + # An empty section header has sh_addr == 0 and sh_size == 0. + # This problem has only been seen on Solaris X64, but we call this tool + # on all Solaris builds just in case. + # + # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. + # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) \ + $(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK) + $(RM) $$@ + $(FIX_EMPTY_SEC_HDR_FLAGS) $$< + $(OBJCOPY) --only-keep-debug $$< $$@ + $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $$(@F) $$< + else # not solaris + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) + $(RM) $$@ + $(OBJCOPY) --only-keep-debug $$< $$@ + $(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$< + endif # Touch to not retrigger rule on rebuild + $(TOUCH) $$@ + + ifeq ($(ZIP_DEBUGINFO_FILES), 1) + $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz + + ifeq ($(OPENJDK_TARGET_OS), windows) + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz : $$($1_TARGET) + $(CD) $$($1_OBJECT_DIR) \ + && $(ZIP) -q $$@ $$($1_LIBRARY).map $$($1_LIBRARY).pdb + else + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz : $$($1_TARGET) \ + $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo + $(CD) $$($1_OBJECT_DIR) \ + && $(ZIP) -q $$@ $$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo + endif + else + ifeq ($(OPENJDK_TARGET_OS), windows) + $1 += $$($1_OUTPUT_DIR)/$$($1_LIBRARY).map \ + $$($1_OUTPUT_DIR)/$$($1_LIBRARY).pdb + else + $1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo + endif + endif + endif + endif + + $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_REAL_MAPFILE) + $$(call LINKING_MSG,$$($1_BASENAME)) + $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(LD_OUT_OPTION)$$@ \ + $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \ + $$($1_EXTRA_LDFLAGS_SUFFIX) + endif - ifneq (,$$($1_EXE)) + + ifneq (,$$($1_STATIC_LIBRARY)) + # Generating a static library, ie object file archive. + $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) + $$(call ARCHIVING_MSG,$$($1_LIBRARY)) + $(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_EXPECTED_OBJS) \ + $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) + endif + + ifneq (,$$($1_PROGRAM)) # A executable binary has been specified, setup the target for it. - $$($1_EXE) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_GEN_MANIFEST) - $$(call LINKING_EXE_MSG,$$(notdir $$($1_EXE))) - $$($1_LDEXE) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(EXE_OUT_OPTION)$$($1_EXE) \ + ifneq (,$$($1_DEBUG_SYMBOLS)) + ifeq ($(ENABLE_DEBUG_SYMBOLS), yes) + ifeq ($(OPENJDK_TARGET_OS), windows) + $1_EXTRA_LDFLAGS+="-pdb:$$($1_OBJECT_DIR)/$$($1_PROGRAM).pdb" \ + "-map:$$($1_OBJECT_DIR)/$$($1_PROGRAM).map" + endif + + $$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/% + $(CP) $$< $$@ + + ifeq ($(OPENJDK_TARGET_OS), solaris) + # gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set. + # Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from + # empty section headers until a fixed $(OBJCOPY) is available. + # An empty section header has sh_addr == 0 and sh_size == 0. + # This problem has only been seen on Solaris X64, but we call this tool + # on all Solaris builds just in case. + # + # $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections. + # Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available. + $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) \ + $(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK) + $(RM) $$@ + $(FIX_EMPTY_SEC_HDR_FLAGS) $$< + $(OBJCOPY) --only-keep-debug $$< $$@ + $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $$(@F) $$< + else # not solaris + $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) + $(RM) $$@ + $(OBJCOPY) --only-keep-debug $$< $$@ + $(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$< + endif + $(TOUCH) $$@ + + ifeq ($(ZIP_DEBUGINFO_FILES), 1) + $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).diz + + ifeq ($(OPENJDK_TARGET_OS), windows) + $$($1_OBJECT_DIR)/$$($1_PROGRAM).diz : $$($1_TARGET) + $(CD) $$($1_OBJECT_DIR) \ + && $(ZIP) -q $$@ $$($1_PROGRAM).map $$($1_PROGRAM).pdb + else + $$($1_OBJECT_DIR)/$$(PROGRAM_PREFIX)$$($1_PROGRAM).diz : $$($1_TARGET) \ + $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo + $(CD) $$($1_OBJECT_DIR) \ + && $(ZIP) -q $$@ $$($1_PROGRAM).debuginfo + endif + else + ifeq ($(OPENJDK_TARGET_OS), windows) + $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).map \ + $$($1_OUTPUT_DIR)/$$($1_PROGRAM).pdb + else + $1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).debuginfo + endif + endif + endif + endif + + $$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_GEN_MANIFEST) + $$(call LINKING_EXE_MSG,$$($1_BASENAME)) + $$($1_LDEXE) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(EXE_OUT_OPTION)$$($1_TARGET) \ $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \ $$($1_EXTRA_LDFLAGS_SUFFIX) ifneq (,$$($1_GEN_MANIFEST)) $(MT) -nologo /manifest $$($1_GEN_MANIFEST) /outputresource:$$@;#1 endif + endif endef diff --git a/common/makefiles/RMICompile.gmk b/common/makefiles/RMICompilation.gmk similarity index 97% rename from common/makefiles/RMICompile.gmk rename to common/makefiles/RMICompilation.gmk index b6168dae7be..65ba9e621f9 100644 --- a/common/makefiles/RMICompile.gmk +++ b/common/makefiles/RMICompilation.gmk @@ -42,6 +42,7 @@ define SetupRMICompilation $(if $7,$1_$(strip $7)) $(if $8,$1_$(strip $8)) $(if $9,$1_$(strip $9)) + $(if $(10),$(error Internal makefile error: Too many arguments to SetupRMICompilation, please update RMICompilation.gmk)) $1_DEP_FILE := $$($1_STUB_CLASSES_DIR)/$1_rmic diff --git a/corba/.hgtags b/corba/.hgtags index fa937dfa1e9..b050c3a8b3c 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -166,3 +166,8 @@ b8cbfb31139f820e5e094ba71449e58159fbe22e jdk8-b38 79cc42c9c71bbd6630ede681642e98f5e4a841fa jdk8-b42 cd879aff5d3cc1f58829aab3116880aa19525b78 jdk8-b43 439d9bf8e4ff204cc89c9974c1515a508b2cc6ff jdk8-b44 +747dad9e9d37d244a5c765a1afe9194f7ddae118 jdk8-b45 +30141e598d72a6146126cb86b034ed6d0bd191b3 jdk8-b46 +21e46ea21c6a26246fb7a1926ac7fe8d580d0518 jdk8-b47 +7e2b179a5b4dbd3f097e28daa00abfcc72ba3e0b jdk8-b48 +fe44e58a6bdbeae350ce96aafb49770a5dca5d8a jdk8-b49 diff --git a/corba/src/share/classes/com/sun/corba/se/impl/encoding/CachedCodeBase.java b/corba/src/share/classes/com/sun/corba/se/impl/encoding/CachedCodeBase.java index 4b08a1ce249..3e698764e8d 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/encoding/CachedCodeBase.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/encoding/CachedCodeBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,6 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ - package com.sun.corba.se.impl.encoding; import java.util.Hashtable; @@ -32,7 +31,8 @@ import com.sun.org.omg.SendingContext.CodeBaseHelper; import com.sun.org.omg.SendingContext._CodeBaseImplBase; import com.sun.org.omg.SendingContext._CodeBaseStub; import com.sun.corba.se.spi.transport.CorbaConnection; - +import com.sun.corba.se.spi.ior.IOR; +import com.sun.corba.se.spi.orb.ORB; /** * Provides the reading side with a per connection cache of * info obtained via calls to the remote CodeBase. @@ -51,14 +51,24 @@ import com.sun.corba.se.spi.transport.CorbaConnection; * * Needs cache management. */ -// REVISIT: revert to package protected after framework merge. public class CachedCodeBase extends _CodeBaseImplBase { private Hashtable implementations, fvds, bases; - private CodeBase delegate; + private volatile CodeBase delegate; private CorbaConnection conn; - private static Hashtable iorToCodeBaseObjMap = new Hashtable(); + private static Object iorMapLock = new Object(); + private static Hashtable iorMap = new Hashtable<>(); + + public static synchronized void cleanCache( ORB orb ) { + synchronized (iorMapLock) { + for (IOR ior : iorMap.keySet()) { + if (ior.getORB() == orb) { + iorMap.remove(ior); + } + } + } + } public CachedCodeBase(CorbaConnection connection) { conn = connection; @@ -68,7 +78,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return null; } - public String implementation (String repId) { + public synchronized String implementation (String repId) { String urlResult = null; if (implementations == null) @@ -86,7 +96,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return urlResult; } - public String[] implementations (String[] repIds) { + public synchronized String[] implementations (String[] repIds) { String[] urlResults = new String[repIds.length]; for (int i = 0; i < urlResults.length; i++) @@ -95,7 +105,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return urlResults; } - public FullValueDescription meta (String repId) { + public synchronized FullValueDescription meta (String repId) { FullValueDescription result = null; if (fvds == null) @@ -113,7 +123,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return result; } - public FullValueDescription[] metas (String[] repIds) { + public synchronized FullValueDescription[] metas (String[] repIds) { FullValueDescription[] results = new FullValueDescription[repIds.length]; @@ -123,7 +133,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return results; } - public String[] bases (String repId) { + public synchronized String[] bases (String repId) { String[] results = null; @@ -145,7 +155,7 @@ public class CachedCodeBase extends _CodeBaseImplBase // Ensures that we've used the connection's IOR to create // a valid CodeBase delegate. If this returns false, then // it is not valid to access the delegate. - private boolean connectedCodeBase() { + private synchronized boolean connectedCodeBase() { if (delegate != null) return true; @@ -165,7 +175,7 @@ public class CachedCodeBase extends _CodeBaseImplBase return false; } - synchronized(this) { + synchronized(iorMapLock) { // Recheck the condition to make sure another // thread didn't already do this while we waited @@ -173,7 +183,8 @@ public class CachedCodeBase extends _CodeBaseImplBase return true; // Do we have a reference initialized by another connection? - delegate = (CodeBase)CachedCodeBase.iorToCodeBaseObjMap.get(conn.getCodeBaseIOR()); + delegate = CachedCodeBase.iorMap.get(conn.getCodeBaseIOR()); + if (delegate != null) return true; @@ -181,8 +192,7 @@ public class CachedCodeBase extends _CodeBaseImplBase delegate = CodeBaseHelper.narrow(getObjectFromIOR()); // Save it for the benefit of other connections - CachedCodeBase.iorToCodeBaseObjMap.put(conn.getCodeBaseIOR(), - delegate); + CachedCodeBase.iorMap.put(conn.getCodeBaseIOR(), delegate); } // It's now safe to use the delegate diff --git a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PIHandlerImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PIHandlerImpl.java index e8c6d1560fc..e7d7ae27e76 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PIHandlerImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PIHandlerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,7 +58,7 @@ import org.omg.PortableInterceptor.SYSTEM_EXCEPTION; import org.omg.PortableInterceptor.TRANSPORT_RETRY; import org.omg.PortableInterceptor.USER_EXCEPTION; import org.omg.PortableInterceptor.PolicyFactory; -import org.omg.PortableInterceptor.ObjectReferenceTemplate ; +import org.omg.PortableInterceptor.ObjectReferenceTemplate; import com.sun.corba.se.pept.encoding.OutputObject; @@ -112,10 +112,10 @@ public class PIHandlerImpl implements PIHandler } } - private ORB orb ; - InterceptorsSystemException wrapper ; - ORBUtilSystemException orbutilWrapper ; - OMGSystemException omgWrapper ; + private ORB orb; + InterceptorsSystemException wrapper; + ORBUtilSystemException orbutilWrapper; + OMGSystemException omgWrapper; // A unique id used in ServerRequestInfo. // This does not correspond to the GIOP request id. @@ -178,6 +178,21 @@ public class PIHandlerImpl implements PIHandler } }; + public void close() { + orb = null; + wrapper = null; + orbutilWrapper = null; + omgWrapper = null; + codecFactory = null; + arguments = null; + interceptorList = null; + interceptorInvoker = null; + current = null; + policyFactoryTable = null; + threadLocalClientRequestInfoStack = null; + threadLocalServerRequestInfoStack = null; + } + // Class to contain all ThreadLocal data for ClientRequestInfo // maintenance. // diff --git a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java index e6d9e53609f..93c047b76cd 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,6 +69,9 @@ public class PINoOpHandlerImpl implements PIHandler public PINoOpHandlerImpl( ) { } + public void close() { + } + public void initialize() { } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java index eb365213270..a88d2f2f697 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,14 +34,18 @@ public class MonitoringManagerFactoryImpl implements MonitoringManagerFactory { private HashMap monitoringManagerTable = new HashMap(); public synchronized MonitoringManager createMonitoringManager( - String nameOfTheRoot, String description ) + String nameOfTheRoot, String description) { MonitoringManagerImpl m = null; m = (MonitoringManagerImpl)monitoringManagerTable.get(nameOfTheRoot); if (m == null) { - m = new MonitoringManagerImpl( nameOfTheRoot, description ); + m = new MonitoringManagerImpl(nameOfTheRoot, description); monitoringManagerTable.put(nameOfTheRoot, m); } return m; } + + public synchronized void remove(String nameOfTheRoot) { + monitoringManagerTable.remove(nameOfTheRoot); + } } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java index 4e97a73815c..b7e676eafed 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,7 @@ package com.sun.corba.se.impl.monitoring; import com.sun.corba.se.spi.monitoring.MonitoringManager; +import com.sun.corba.se.spi.monitoring.MonitoringManagerFactory; import com.sun.corba.se.spi.monitoring.MonitoredObject; import com.sun.corba.se.spi.monitoring.MonitoredObjectFactory; import com.sun.corba.se.spi.monitoring.MonitoringFactories; @@ -33,18 +34,24 @@ import com.sun.corba.se.spi.monitoring.MonitoringFactories; public class MonitoringManagerImpl implements MonitoringManager { private final MonitoredObject rootMonitoredObject; - MonitoringManagerImpl( String nameOfTheRoot, String description ) { + MonitoringManagerImpl(String nameOfTheRoot, String description) { MonitoredObjectFactory f = MonitoringFactories.getMonitoredObjectFactory(); rootMonitoredObject = - f.createMonitoredObject( nameOfTheRoot, description ); + f.createMonitoredObject(nameOfTheRoot, description); } - public void clearState( ) { - rootMonitoredObject.clearState( ); + public void clearState() { + rootMonitoredObject.clearState(); } - public MonitoredObject getRootMonitoredObject( ) { + public MonitoredObject getRootMonitoredObject() { return rootMonitoredObject; } + + public void close() { + MonitoringManagerFactory f = + MonitoringFactories.getMonitoringManagerFactory(); + f.remove(rootMonitoredObject.getName()); + } } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java index 65d8246f7ad..9c03173238b 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orb/ORBImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,35 +23,37 @@ * questions. */ -package com.sun.corba.se.impl.orb ; +package com.sun.corba.se.impl.orb; import java.applet.Applet; -import java.io.IOException ; +import java.io.IOException; import java.lang.reflect.Constructor; -import java.lang.reflect.Field ; -import java.lang.reflect.Modifier ; -import java.lang.reflect.InvocationTargetException ; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList ; -import java.util.Iterator ; -import java.util.Properties ; -import java.util.Vector ; -import java.util.Hashtable ; -import java.util.Map ; -import java.util.HashMap ; -import java.util.LinkedList ; -import java.util.Collection ; -import java.util.Collections ; -import java.util.StringTokenizer ; -import java.util.Enumeration ; -import java.util.WeakHashMap ; +import java.util.Set; +import java.util.HashSet; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Properties; +import java.util.Vector; +import java.util.Hashtable; +import java.util.Map; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Collection; +import java.util.Collections; +import java.util.StringTokenizer; +import java.util.Enumeration; +import java.util.WeakHashMap; -import java.net.InetAddress ; +import java.net.InetAddress; import java.security.PrivilegedAction; -import java.security.AccessController ; +import java.security.AccessController; import javax.rmi.CORBA.Util; import javax.rmi.CORBA.ValueHandler; @@ -82,18 +84,18 @@ import org.omg.CORBA.ORBPackage.InvalidName; import com.sun.org.omg.SendingContext.CodeBase; import com.sun.corba.se.pept.broker.Broker; -import com.sun.corba.se.pept.protocol.ClientInvocationInfo ; +import com.sun.corba.se.pept.protocol.ClientInvocationInfo; import com.sun.corba.se.pept.transport.ContactInfo; import com.sun.corba.se.pept.transport.ConnectionCache; import com.sun.corba.se.pept.transport.TransportManager; import com.sun.corba.se.spi.ior.IOR; -import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder ; +import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder; import com.sun.corba.se.spi.ior.TaggedComponentFactoryFinder; -import com.sun.corba.se.spi.ior.IORFactories ; -import com.sun.corba.se.spi.ior.ObjectKey ; -import com.sun.corba.se.spi.ior.ObjectKeyFactory ; -import com.sun.corba.se.spi.ior.iiop.IIOPFactories ; +import com.sun.corba.se.spi.ior.IORFactories; +import com.sun.corba.se.spi.ior.ObjectKey; +import com.sun.corba.se.spi.ior.ObjectKeyFactory; +import com.sun.corba.se.spi.ior.iiop.IIOPFactories; import com.sun.corba.se.spi.ior.iiop.GIOPVersion; import com.sun.corba.se.spi.oa.OAInvocationInfo; import com.sun.corba.se.spi.oa.ObjectAdapterFactory; @@ -122,10 +124,10 @@ import com.sun.corba.se.spi.orb.StringPair; import com.sun.corba.se.spi.transport.CorbaContactInfoListFactory; import com.sun.corba.se.spi.transport.CorbaTransportManager; import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketManager; -import com.sun.corba.se.spi.copyobject.CopierManager ; -import com.sun.corba.se.spi.presentation.rmi.PresentationDefaults ; -import com.sun.corba.se.spi.presentation.rmi.PresentationManager ; -import com.sun.corba.se.spi.presentation.rmi.StubAdapter ; +import com.sun.corba.se.spi.copyobject.CopierManager; +import com.sun.corba.se.spi.presentation.rmi.PresentationDefaults; +import com.sun.corba.se.spi.presentation.rmi.PresentationManager; +import com.sun.corba.se.spi.presentation.rmi.StubAdapter; import com.sun.corba.se.spi.servicecontext.ServiceContextRegistry; import com.sun.corba.se.impl.corba.TypeCodeFactory; @@ -140,6 +142,7 @@ import com.sun.corba.se.impl.corba.AnyImpl; import com.sun.corba.se.impl.corba.RequestImpl; import com.sun.corba.se.impl.dynamicany.DynAnyFactoryImpl; import com.sun.corba.se.impl.encoding.EncapsOutputStream; +import com.sun.corba.se.impl.encoding.CachedCodeBase; import com.sun.corba.se.impl.interceptors.PIHandlerImpl; import com.sun.corba.se.impl.interceptors.PINoOpHandlerImpl; import com.sun.corba.se.impl.ior.TaggedComponentFactoryFinderImpl; @@ -185,6 +188,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB private java.lang.Object runObj = new java.lang.Object(); private java.lang.Object shutdownObj = new java.lang.Object(); + private java.lang.Object waitForCompletionObj = new java.lang.Object(); private static final byte STATUS_OPERATING = 1; private static final byte STATUS_SHUTTING_DOWN = 2; private static final byte STATUS_SHUTDOWN = 3; @@ -193,6 +197,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB // XXX Should we move invocation tracking to the first level server dispatcher? private java.lang.Object invocationObj = new java.lang.Object(); + private int numInvocations = 0; // thread local variable to store a boolean to detect deadlock in // ORB.shutdown(true). @@ -220,8 +225,6 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB private int transientServerId ; - private ThreadGroup threadGroup ; - private ServiceContextRegistry serviceContextRegistry ; // Needed here to implement connect/disconnect @@ -265,6 +268,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB private final Object urlOperationLock = new java.lang.Object() ; private CorbaServerRequestDispatcher insNamingDelegate ; + // resolverLock must be used for all access to either resolver or // localResolver, since it is possible for the resolver to indirectly // refer to the localResolver. Also used to protect access to @@ -279,6 +283,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB private ObjectKeyFactory objectKeyFactory ; + private boolean orbOwnsThreadPoolManager = false ; + private ThreadPoolManager threadpoolMgr; private void dprint( String msg ) @@ -322,11 +328,17 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ORBVersion getORBVersion() { + synchronized (this) { + checkShutdownState(); + } return (ORBVersion)(orbVersionThreadLocal.get()) ; } public void setORBVersion(ORBVersion verObj) { + synchronized (this) { + checkShutdownState(); + } orbVersionThreadLocal.set(verObj); } @@ -347,46 +359,6 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB // end of this method. pihandler = new PINoOpHandlerImpl( ); - // See bugs 4916766 and 4936203 - // We intend to create new threads in a reliable thread group. - // This avoids problems if the application/applet - // creates a thread group, makes JavaIDL calls which create a new - // connection and ReaderThread, and then destroys the thread - // group. If our ReaderThreads were to be part of such destroyed thread - // group then it might get killed and cause other invoking threads - // sharing the same connection to get a non-restartable - // CommunicationFailure. We'd like to avoid that. - // - // Our solution is to create all of our threads in the highest thread - // group that we have access to, given our own security clearance. - // - try { - // try to get a thread group that's as high in the threadgroup - // parent-child hierarchy, as we can get to. - // this will prevent an ORB thread created during applet-init from - // being killed when an applet dies. - threadGroup = (ThreadGroup) AccessController.doPrivileged( - new PrivilegedAction() { - public Object run() { - ThreadGroup tg = Thread.currentThread().getThreadGroup() ; - ThreadGroup ptg = tg ; - try { - while (ptg != null) { - tg = ptg; - ptg = tg.getParent(); - } - } catch (SecurityException se) { - // Discontinue going higher on a security exception. - } - return new ThreadGroup(tg, "ORB ThreadGroup"); - } - } - ); - } catch (SecurityException e) { - // something wrong, we go back to the original code - threadGroup = Thread.currentThread().getThreadGroup(); - } - // This is the unique id of this server (JVM). Multiple incarnations // of this server will get different ids. // Compute transientServerId = milliseconds since Jan 1, 1970 @@ -547,6 +519,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void set_parameters( Properties props ) { + synchronized (this) { + checkShutdownState(); + } preInit( null, props ) ; DataCollector dataCollector = DataCollectorFactory.create( props, getLocalHostName() ) ; @@ -788,6 +763,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public void notifyORB() { + synchronized (this) { + checkShutdownState(); + } synchronized (this.svResponseReceived) { this.svResponseReceived.set(); this.svResponseReceived.notify(); @@ -854,6 +832,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB // Note that we connect this if we have not already done so. public synchronized IOR getFVDCodeBaseIOR() { + checkShutdownState(); + if (codeBaseIOR != null) // i.e. We are already connected to it return codeBaseIOR; @@ -1118,6 +1098,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public synchronized void setTypeCodeForClass(Class c, TypeCodeImpl tci) { + checkShutdownState(); + if (typeCodeForClassMap == null) typeCodeForClassMap = Collections.synchronizedMap( new WeakHashMap(64)); @@ -1128,6 +1110,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public synchronized TypeCodeImpl getTypeCodeForClass(Class c) { + checkShutdownState(); + if (typeCodeForClassMap == null) return null; return (TypeCodeImpl)typeCodeForClassMap.get(c); @@ -1210,6 +1194,10 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB { CorbaServerRequestDispatcher insnd ; + synchronized (this) { + checkShutdownState(); + } + if ((id == null) || (id.length() == 0)) throw new InvalidName() ; @@ -1253,66 +1241,88 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB } } - public void shutdown(boolean wait_for_completion) - { - // to wait for completion, we would deadlock, so throw a standard - // OMG exception. - if (wait_for_completion && ((Boolean)isProcessingInvocation.get()).booleanValue()) { - throw omgWrapper.shutdownWaitForCompletionDeadlock() ; - } - - boolean doShutdown = false ; + public void shutdown(boolean wait_for_completion) { + boolean wait = false; synchronized (this) { - checkShutdownState() ; + checkShutdownState(); + + // This is to avoid deadlock: don't allow a thread that is + // processing a request to call shutdown( true ), because + // the shutdown would block waiting for the request to complete, + // while the request would block waiting for shutdown to complete. + if (wait_for_completion && + isProcessingInvocation.get() == Boolean.TRUE) { + throw omgWrapper.shutdownWaitForCompletionDeadlock(); + } if (status == STATUS_SHUTTING_DOWN) { - if (!wait_for_completion) - // If we are already shutting down and don't want - // to wait, nothing to do: return. - return ; - } else { - // The ORB status was STATUS_OPERATING, so start the shutdown. - status = STATUS_SHUTTING_DOWN ; - doShutdown = true ; + if (wait_for_completion) { + wait = true; + } else { + return; + } } + + status = STATUS_SHUTTING_DOWN; } - // At this point, status is SHUTTING_DOWN. - // All shutdown calls with wait_for_completion == true must synchronize - // here. Only the first call will be made with doShutdown == true. + // Avoid more than one thread performing shutdown at a time. synchronized (shutdownObj) { - if (doShutdown) { - // shutdownServants will set all POAManagers into the - // INACTIVE state, causing request to be rejected. - // If wait_for_completion is true, this will not return until - // all invocations have completed. + // At this point, the ORB status is certainly STATUS_SHUTTING_DOWN. + // If wait is true, another thread already called shutdown( true ), + // and so we wait for completion + if (wait) { + while (true) { + synchronized (this) { + if (status == STATUS_SHUTDOWN) + break; + } + + try { + shutdownObj.wait(); + } catch (InterruptedException exc) { + // NOP: just loop and wait until state is changed + } + } + } else { + // perform the actual shutdown shutdownServants(wait_for_completion); + if (wait_for_completion) { + synchronized ( waitForCompletionObj ) { + while (numInvocations > 0) { + try { + waitForCompletionObj.wait(); + } catch (InterruptedException ex) {} + } + } + } + synchronized (runObj) { runObj.notifyAll(); } - synchronized (this) { - status = STATUS_SHUTDOWN; - } + status = STATUS_SHUTDOWN; + + shutdownObj.notifyAll(); } } } - /** This method shuts down the ORB and causes orb.run() to return. - * It will cause all POAManagers to be deactivated, which in turn - * will cause all POAs to be deactivated. - */ + // Cause all ObjectAdapaterFactories to clean up all of their internal state, which + // may include activated objects that have associated state and callbacks that must + // complete in order to shutdown. This will cause new request to be rejected. protected void shutdownServants(boolean wait_for_completion) { - Iterator iter = requestDispatcherRegistry.getObjectAdapterFactories().iterator() ; - while (iter.hasNext()) { - ObjectAdapterFactory oaf = (ObjectAdapterFactory)iter.next() ; - oaf.shutdown( wait_for_completion ) ; + Set oaset; + synchronized (this) { + oaset = new HashSet<>(requestDispatcherRegistry.getObjectAdapterFactories()); } + + for (ObjectAdapterFactory oaf : oaset) + oaf.shutdown(wait_for_completion); } - // REVISIT: was protected - made public for framework // Note that the caller must hold the ORBImpl lock. public void checkShutdownState() { @@ -1327,21 +1337,40 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public boolean isDuringDispatch() { + synchronized (this) { + checkShutdownState(); + } Boolean value = (Boolean)(isProcessingInvocation.get()) ; return value.booleanValue() ; } public void startingDispatch() { + synchronized (this) { + checkShutdownState(); + } synchronized (invocationObj) { isProcessingInvocation.set(Boolean.TRUE); + numInvocations++; } } public void finishedDispatch() { + synchronized (this) { + checkShutdownState(); + } synchronized (invocationObj) { - isProcessingInvocation.set(Boolean.FALSE); + numInvocations--; + isProcessingInvocation.set(false); + if (numInvocations == 0) { + synchronized (waitForCompletionObj) { + waitForCompletionObj.notifyAll(); + } + } else if (numInvocations < 0) { + throw wrapper.numInvocationsAlreadyZero( + CompletionStatus.COMPLETED_YES); + } } } @@ -1350,12 +1379,12 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB * not been shut down, it will start the shutdown process and block until * the ORB has shut down before it destroys the ORB." */ - public synchronized void destroy() + public void destroy() { - boolean shutdownFirst = false ; + boolean shutdownFirst = false; synchronized (this) { - shutdownFirst = (status == STATUS_OPERATING) ; + shutdownFirst = (status == STATUS_OPERATING); } if (shutdownFirst) { @@ -1365,11 +1394,76 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB synchronized (this) { if (status < STATUS_DESTROYED) { getCorbaTransportManager().close(); - getPIHandler().destroyInterceptors() ; + getPIHandler().destroyInterceptors(); status = STATUS_DESTROYED; } } + synchronized (threadPoolManagerAccessLock) { + if (orbOwnsThreadPoolManager) { + try { + threadpoolMgr.close(); + threadpoolMgr = null; + } catch (IOException exc) { + wrapper.ioExceptionOnClose(exc); + } + } + } + try { + monitoringManager.close(); + monitoringManager = null; + } catch (IOException exc) { + wrapper.ioExceptionOnClose(exc); + } + + CachedCodeBase.cleanCache(this); + try { + pihandler.close(); + } catch (IOException exc) { + wrapper.ioExceptionOnClose(exc); + } + + super.destroy(); + + badServerIdHandlerAccessLock = null; + clientDelegateFactoryAccessorLock = null; + corbaContactInfoListFactoryAccessLock = null; + + objectKeyFactoryAccessLock = null; + legacyServerSocketManagerAccessLock = null; + threadPoolManagerAccessLock = null; + transportManager = null; + legacyServerSocketManager = null; + OAInvocationInfoStack = null; + clientInvocationInfoStack = null; + codeBaseIOR = null; + dynamicRequests = null; + svResponseReceived = null; + runObj = null; + shutdownObj = null; + waitForCompletionObj = null; + invocationObj = null; + isProcessingInvocation = null; + typeCodeForClassMap = null; + valueFactoryCache = null; + orbVersionThreadLocal = null; + requestDispatcherRegistry = null; + copierManager = null; + toaFactory = null; + poaFactory = null; + pihandler = null; + configData = null; + badServerIdHandler = null; + clientDelegateFactory = null; + corbaContactInfoListFactory = null; + resolver = null; + localResolver = null; + insNamingDelegate = null; + urlOperation = null; + taggedComponentFactoryFinder = null; + taggedProfileFactoryFinder = null; + taggedProfileTemplateFactoryFinder = null; + objectKeyFactory = null; } /** @@ -1434,18 +1528,27 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public OAInvocationInfo peekInvocationInfo() { + synchronized (this) { + checkShutdownState(); + } StackImpl stack = (StackImpl)(OAInvocationInfoStack.get()) ; return (OAInvocationInfo)(stack.peek()) ; } public void pushInvocationInfo( OAInvocationInfo info ) { + synchronized (this) { + checkShutdownState(); + } StackImpl stack = (StackImpl)(OAInvocationInfoStack.get()) ; stack.push( info ) ; } public OAInvocationInfo popInvocationInfo() { + synchronized (this) { + checkShutdownState(); + } StackImpl stack = (StackImpl)(OAInvocationInfoStack.get()) ; return (OAInvocationInfo)(stack.pop()) ; } @@ -1459,6 +1562,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void initBadServerIdHandler() { + synchronized (this) { + checkShutdownState(); + } synchronized (badServerIdHandlerAccessLock) { Class cls = configData.getBadServerIdHandler() ; if (cls != null) { @@ -1477,6 +1583,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setBadServerIdHandler( BadServerIdHandler handler ) { + synchronized (this) { + checkShutdownState(); + } synchronized (badServerIdHandlerAccessLock) { badServerIdHandler = handler; } @@ -1484,6 +1593,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void handleBadServerId( ObjectKey okey ) { + synchronized (this) { + checkShutdownState(); + } synchronized (badServerIdHandlerAccessLock) { if (badServerIdHandler == null) throw wrapper.badServerId() ; @@ -1532,6 +1644,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public int getTransientServerId() { + synchronized (this) { + checkShutdownState(); + } if( configData.getORBServerIdPropertySpecified( ) ) { // ORBServerId is specified then use that value return configData.getPersistentServerId( ); @@ -1541,11 +1656,17 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public RequestDispatcherRegistry getRequestDispatcherRegistry() { + synchronized (this) { + checkShutdownState(); + } return requestDispatcherRegistry; } public ServiceContextRegistry getServiceContextRegistry() { + synchronized (this) { + checkShutdownState(); + } return serviceContextRegistry ; } @@ -1563,12 +1684,18 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB // XXX What about multi-homed host? public boolean isLocalHost( String hostName ) { + synchronized (this) { + checkShutdownState(); + } return hostName.equals( configData.getORBServerHost() ) || hostName.equals( getLocalHostName() ) ; } public boolean isLocalServerId( int subcontractId, int serverId ) { + synchronized (this) { + checkShutdownState(); + } if ((subcontractId < ORBConstants.FIRST_POA_SCID) || (subcontractId > ORBConstants.MAX_POA_SCID)) return serverId == getTransientServerId( ) ; @@ -1659,6 +1786,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ClientInvocationInfo createOrIncrementInvocationInfo() { + synchronized (this) { + checkShutdownState(); + } StackImpl invocationInfoStack = (StackImpl) clientInvocationInfoStack.get(); ClientInvocationInfo clientInvocationInfo = null; @@ -1682,10 +1812,13 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void releaseOrDecrementInvocationInfo() { - StackImpl invocationInfoStack = - (StackImpl)clientInvocationInfoStack.get(); + synchronized (this) { + checkShutdownState(); + } int entryCount = -1; ClientInvocationInfo clientInvocationInfo = null; + StackImpl invocationInfoStack = + (StackImpl)clientInvocationInfoStack.get(); if (!invocationInfoStack.empty()) { clientInvocationInfo = (ClientInvocationInfo)invocationInfoStack.peek(); @@ -1705,6 +1838,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ClientInvocationInfo getInvocationInfo() { + synchronized (this) { + checkShutdownState(); + } StackImpl invocationInfoStack = (StackImpl) clientInvocationInfoStack.get(); return (ClientInvocationInfo) invocationInfoStack.peek(); @@ -1719,6 +1855,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setClientDelegateFactory( ClientDelegateFactory factory ) { + synchronized (this) { + checkShutdownState(); + } synchronized (clientDelegateFactoryAccessorLock) { clientDelegateFactory = factory ; } @@ -1726,6 +1865,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ClientDelegateFactory getClientDelegateFactory() { + synchronized (this) { + checkShutdownState(); + } synchronized (clientDelegateFactoryAccessorLock) { return clientDelegateFactory ; } @@ -1735,6 +1877,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setCorbaContactInfoListFactory( CorbaContactInfoListFactory factory ) { + synchronized (this) { + checkShutdownState(); + } synchronized (corbaContactInfoListFactoryAccessLock) { corbaContactInfoListFactory = factory ; } @@ -1742,6 +1887,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public synchronized CorbaContactInfoListFactory getCorbaContactInfoListFactory() { + checkShutdownState(); return corbaContactInfoListFactory ; } @@ -1750,6 +1896,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public void setResolver( Resolver resolver ) { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { this.resolver = resolver ; } @@ -1760,6 +1909,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public Resolver getResolver() { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { return resolver ; } @@ -1770,6 +1922,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public void setLocalResolver( LocalResolver resolver ) { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { this.localResolver = resolver ; } @@ -1780,6 +1935,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public LocalResolver getLocalResolver() { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { return localResolver ; } @@ -1790,6 +1948,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public void setURLOperation( Operation stringToObject ) { + synchronized (this) { + checkShutdownState(); + } synchronized (urlOperationLock) { urlOperation = stringToObject ; } @@ -1800,6 +1961,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB */ public Operation getURLOperation() { + synchronized (this) { + checkShutdownState(); + } synchronized (urlOperationLock) { return urlOperation ; } @@ -1807,6 +1971,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setINSDelegate( CorbaServerRequestDispatcher sdel ) { + synchronized (this) { + checkShutdownState(); + } synchronized (resolverLock) { insNamingDelegate = sdel ; } @@ -1814,16 +1981,25 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public TaggedComponentFactoryFinder getTaggedComponentFactoryFinder() { + synchronized (this) { + checkShutdownState(); + } return taggedComponentFactoryFinder ; } public IdentifiableFactoryFinder getTaggedProfileFactoryFinder() { + synchronized (this) { + checkShutdownState(); + } return taggedProfileFactoryFinder ; } public IdentifiableFactoryFinder getTaggedProfileTemplateFactoryFinder() { + synchronized (this) { + checkShutdownState(); + } return taggedProfileTemplateFactoryFinder ; } @@ -1831,6 +2007,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ObjectKeyFactory getObjectKeyFactory() { + synchronized (this) { + checkShutdownState(); + } synchronized (objectKeyFactoryAccessLock) { return objectKeyFactory ; } @@ -1838,6 +2017,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setObjectKeyFactory( ObjectKeyFactory factory ) { + synchronized (this) { + checkShutdownState(); + } synchronized (objectKeyFactoryAccessLock) { objectKeyFactory = factory ; } @@ -1864,6 +2046,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public LegacyServerSocketManager getLegacyServerSocketManager() { + synchronized (this) { + checkShutdownState(); + } synchronized (legacyServerSocketManagerAccessLock) { if (legacyServerSocketManager == null) { legacyServerSocketManager = new LegacyServerSocketManagerImpl(this); @@ -1876,6 +2061,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public void setThreadPoolManager(ThreadPoolManager mgr) { + synchronized (this) { + checkShutdownState(); + } synchronized (threadPoolManagerAccessLock) { threadpoolMgr = mgr; } @@ -1883,9 +2071,13 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public ThreadPoolManager getThreadPoolManager() { + synchronized (this) { + checkShutdownState(); + } synchronized (threadPoolManagerAccessLock) { if (threadpoolMgr == null) { - threadpoolMgr = new ThreadPoolManagerImpl( threadGroup ); + threadpoolMgr = new ThreadPoolManagerImpl(); + orbOwnsThreadPoolManager = true; } return threadpoolMgr; } @@ -1893,6 +2085,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB public CopierManager getCopierManager() { + synchronized (this) { + checkShutdownState(); + } return copierManager ; } } // Class ORBImpl diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java index f8341f84b0c..f98880bf68d 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,18 @@ package com.sun.corba.se.impl.orbutil.threadpool; +import java.io.IOException; +import java.io.Closeable; + +import java.security.AccessController; +import java.security.PrivilegedAction; + +import java.util.List; +import java.util.ArrayList; + +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; + import com.sun.corba.se.spi.orbutil.threadpool.NoSuchWorkQueueException; import com.sun.corba.se.spi.orbutil.threadpool.ThreadPool; import com.sun.corba.se.spi.orbutil.threadpool.Work; @@ -36,12 +48,27 @@ import com.sun.corba.se.impl.orbutil.threadpool.WorkQueueImpl; import com.sun.corba.se.spi.monitoring.MonitoringConstants; import com.sun.corba.se.spi.monitoring.MonitoredObject; import com.sun.corba.se.spi.monitoring.MonitoringFactories; +import com.sun.corba.se.spi.orb.ORB; import com.sun.corba.se.spi.monitoring.LongMonitoredAttributeBase; +import com.sun.corba.se.impl.logging.ORBUtilSystemException; +import com.sun.corba.se.impl.orbutil.ORBConstants; +import com.sun.corba.se.spi.logging.CORBALogDomains; + public class ThreadPoolImpl implements ThreadPool { - private static int threadCounter = 0; // serial counter useful for debugging + // serial counter useful for debugging + private static AtomicInteger threadCounter = new AtomicInteger(0); + private static final ORBUtilSystemException wrapper = + ORBUtilSystemException.get(CORBALogDomains.RPC_TRANSPORT); + + // Any time currentThreadCount and/or availableWorkerThreads is updated + // or accessed this ThreadPool's WorkQueue must be locked. And, it is + // expected that this ThreadPool's WorkQueue is the only object that + // updates and accesses these values directly and indirectly though a + // call to a method in this ThreadPool. If any call to update or access + // those values must synchronized on this ThreadPool's WorkQueue. private WorkQueue workQueue; // Stores the number of available worker threads @@ -65,14 +92,11 @@ public class ThreadPoolImpl implements ThreadPool // Running count of the work items processed // Set the value to 1 so that divide by zero is avoided in // averageWorkCompletionTime() - private long processedCount = 1; + private AtomicLong processedCount = new AtomicLong(1); // Running aggregate of the time taken in millis to execute work items // processed by the threads in the threadpool - private long totalTimeTaken = 0; - - // Lock for protecting state when required - private Object lock = new Object(); + private AtomicLong totalTimeTaken = new AtomicLong(0); // Name of the ThreadPool private String name; @@ -81,7 +105,10 @@ public class ThreadPoolImpl implements ThreadPool private MonitoredObject threadpoolMonitoredObject; // ThreadGroup in which threads should be created - private ThreadGroup threadGroup ; + private ThreadGroup threadGroup; + + Object workersLock = new Object(); + List workers = new ArrayList<>(); /** * This constructor is used to create an unbounded threadpool @@ -90,7 +117,7 @@ public class ThreadPoolImpl implements ThreadPool inactivityTimeout = ORBConstants.DEFAULT_INACTIVITY_TIMEOUT; maxWorkerThreads = Integer.MAX_VALUE; workQueue = new WorkQueueImpl(this); - threadGroup = tg ; + threadGroup = tg; name = threadpoolName; initializeMonitoring(); } @@ -121,6 +148,30 @@ public class ThreadPoolImpl implements ThreadPool initializeMonitoring(); } + // Note that this method should not return until AFTER all threads have died. + public void close() throws IOException { + + // Copy to avoid concurrent modification problems. + List copy = null; + synchronized (workersLock) { + copy = new ArrayList<>(workers); + } + + for (WorkerThread wt : copy) { + wt.close(); + while (wt.getState() != Thread.State.TERMINATED) { + try { + wt.join(); + } catch (InterruptedException exc) { + wrapper.interruptedJoinCallWhileClosingThreadPool(exc, wt, this); + } + } + } + + threadGroup = null; + } + + // Setup monitoring for this threadpool private void initializeMonitoring() { // Get root monitored object @@ -217,8 +268,8 @@ public class ThreadPoolImpl implements ThreadPool * or notify waiting threads on the queue for available work */ void notifyForAvailableWork(WorkQueue aWorkQueue) { - synchronized (lock) { - if (availableWorkerThreads == 0) { + synchronized (aWorkQueue) { + if (availableWorkerThreads < aWorkQueue.workItemsInQueue()) { createWorkerThread(); } else { aWorkQueue.notify(); @@ -227,120 +278,145 @@ public class ThreadPoolImpl implements ThreadPool } - /** - * To be called from the workqueue to create worker threads when none - * available. - */ - void createWorkerThread() { - WorkerThread thread; - - synchronized (lock) { - if (boundedThreadPool) { - if (currentThreadCount < maxWorkerThreads) { - thread = new WorkerThread(threadGroup, getName()); - currentThreadCount++; - } else { - // REVIST - Need to create a thread to monitor the - // the state for deadlock i.e. all threads waiting for - // something which can be got from the item in the - // workqueue, but there is no thread available to - // process that work item - DEADLOCK !! - return; - } - } else { - thread = new WorkerThread(threadGroup, getName()); - currentThreadCount++; - } + private Thread createWorkerThreadHelper( String name ) { + // Thread creation needs to be in a doPrivileged block + // if there is a non-null security manager for two reasons: + // 1. The creation of a thread in a specific ThreadGroup + // is a privileged operation. Lack of a doPrivileged + // block here causes an AccessControlException + // (see bug 6268145). + // 2. We want to make sure that the permissions associated + // with this thread do NOT include the permissions of + // the current thread that is calling this method. + // This leads to problems in the app server where + // some threads in the ThreadPool randomly get + // bad permissions, leading to unpredictable + // permission errors (see bug 6021011). + // + // A Java thread contains a stack of call frames, + // one for each method called that has not yet returned. + // Each method comes from a particular class. The class + // was loaded by a ClassLoader which has an associated + // CodeSource, and this determines the Permissions + // for all methods in that class. The current + // Permissions for the thread are the intersection of + // all Permissions for the methods on the stack. + // This is part of the Security Context of the thread. + // + // When a thread creates a new thread, the new thread + // inherits the security context of the old thread. + // This is bad in a ThreadPool, because different + // creators of threads may have different security contexts. + // This leads to occasional unpredictable errors when + // a thread is re-used in a different security context. + // + // Avoiding this problem is simple: just do the thread + // creation in a doPrivileged block. This sets the + // inherited security context to that of the code source + // for the ORB code itself, which contains all permissions + // in either Java SE or Java EE. + WorkerThread thread = new WorkerThread(threadGroup, name); + synchronized (workersLock) { + workers.add(thread); } // The thread must be set to a daemon thread so the // VM can exit if the only threads left are PooledThreads // or other daemons. We don't want to rely on the // calling thread always being a daemon. + // Note that no exception is possible here since we + // are inside the doPrivileged block. + thread.setDaemon(true); - // Catch exceptions since setDaemon can cause a - // security exception to be thrown under netscape - // in the Applet mode - try { - thread.setDaemon(true); - } catch (Exception e) { - // REVISIT - need to do some logging here - } + wrapper.workerThreadCreated(thread, thread.getContextClassLoader()); thread.start(); + return null; } + /** - * This method will return the minimum number of threads maintained - * by the threadpool. - */ + * To be called from the workqueue to create worker threads when none + * available. + */ + void createWorkerThread() { + final String name = getName(); + synchronized (workQueue) { + try { + if (System.getSecurityManager() == null) { + createWorkerThreadHelper(name); + } else { + // If we get here, we need to create a thread. + AccessController.doPrivileged( + new PrivilegedAction() { + public Object run() { + return createWorkerThreadHelper(name); + } + } + ); + } + } catch (Throwable t) { + // Decrementing the count of current worker threads. + // But, it will be increased in the finally block. + decrementCurrentNumberOfThreads(); + wrapper.workerThreadCreationFailure(t); + } finally { + incrementCurrentNumberOfThreads(); + } + } + } + public int minimumNumberOfThreads() { return minWorkerThreads; } - /** - * This method will return the maximum number of threads in the - * threadpool at any point in time, for the life of the threadpool - */ public int maximumNumberOfThreads() { return maxWorkerThreads; } - /** - * This method will return the time in milliseconds when idle - * threads in the threadpool are removed. - */ public long idleTimeoutForThreads() { return inactivityTimeout; } - /** - * This method will return the total number of threads currently in the - * threadpool. This method returns a value which is not synchronized. - */ public int currentNumberOfThreads() { - synchronized (lock) { + synchronized (workQueue) { return currentThreadCount; } } - /** - * This method will return the number of available threads in the - * threadpool which are waiting for work. This method returns a - * value which is not synchronized. - */ + void decrementCurrentNumberOfThreads() { + synchronized (workQueue) { + currentThreadCount--; + } + } + + void incrementCurrentNumberOfThreads() { + synchronized (workQueue) { + currentThreadCount++; + } + } + public int numberOfAvailableThreads() { - synchronized (lock) { + synchronized (workQueue) { return availableWorkerThreads; } } - /** - * This method will return the number of busy threads in the threadpool - * This method returns a value which is not synchronized. - */ public int numberOfBusyThreads() { - synchronized (lock) { + synchronized (workQueue) { return (currentThreadCount - availableWorkerThreads); } } - /** - * This method returns the average elapsed time taken to complete a Work - * item in milliseconds. - */ public long averageWorkCompletionTime() { - synchronized (lock) { - return (totalTimeTaken / processedCount); + synchronized (workQueue) { + return (totalTimeTaken.get() / processedCount.get()); } } - /** - * This method returns the number of Work items processed by the threadpool - */ public long currentProcessedCount() { - synchronized (lock) { - return processedCount; + synchronized (workQueue) { + return processedCount.get(); } } @@ -357,15 +433,37 @@ public class ThreadPoolImpl implements ThreadPool private static synchronized int getUniqueThreadId() { - return ThreadPoolImpl.threadCounter++; + return ThreadPoolImpl.threadCounter.incrementAndGet(); + } + + /** + * This method will decrement the number of available threads + * in the threadpool which are waiting for work. Called from + * WorkQueueImpl.requestWork() + */ + void decrementNumberOfAvailableThreads() { + synchronized (workQueue) { + availableWorkerThreads--; + } + } + + /** + * This method will increment the number of available threads + * in the threadpool which are waiting for work. Called from + * WorkQueueImpl.requestWork() + */ + void incrementNumberOfAvailableThreads() { + synchronized (workQueue) { + availableWorkerThreads++; + } } - private class WorkerThread extends Thread + private class WorkerThread extends Thread implements Closeable { private Work currentWork; private int threadId = 0; // unique id for the thread - // thread pool this WorkerThread belongs too + private volatile boolean closeCalled = false; private String threadPoolName; // name seen by Thread.getName() private StringBuffer workerThreadName = new StringBuffer(); @@ -377,100 +475,61 @@ public class ThreadPoolImpl implements ThreadPool setName(composeWorkerThreadName(threadPoolName, "Idle")); } + public synchronized void close() { + closeCalled = true; + interrupt(); + } + + private void resetClassLoader() { + + } + + private void performWork() { + long start = System.currentTimeMillis(); + try { + currentWork.doWork(); + } catch (Throwable t) { + wrapper.workerThreadDoWorkThrowable(this, t); + } + long elapsedTime = System.currentTimeMillis() - start; + totalTimeTaken.addAndGet(elapsedTime); + processedCount.incrementAndGet(); + } + public void run() { - while (true) { - try { - - synchronized (lock) { - availableWorkerThreads++; - } - - // Get some work to do - currentWork = ((WorkQueueImpl)workQueue).requestWork(inactivityTimeout); - - synchronized (lock) { - availableWorkerThreads--; - // It is possible in notifyForAvailableWork that the - // check for availableWorkerThreads = 0 may return - // false, because the availableWorkerThreads has not been - // decremented to zero before the producer thread added - // work to the queue. This may create a deadlock, if the - // executing thread needs information which is in the work - // item queued in the workqueue, but has no thread to work - // on it since none was created because availableWorkerThreads = 0 - // returned false. - // The following code will ensure that a thread is always available - // in those situations - if ((availableWorkerThreads == 0) && - (workQueue.workItemsInQueue() > 0)) { - createWorkerThread(); - } - } - - // Set the thread name for debugging. - setName(composeWorkerThreadName(threadPoolName, - Integer.toString(this.threadId))); - - long start = System.currentTimeMillis(); - + try { + while (!closeCalled) { try { - // Do the work - currentWork.doWork(); + currentWork = ((WorkQueueImpl)workQueue).requestWork( + inactivityTimeout); + if (currentWork == null) + continue; + } catch (InterruptedException exc) { + wrapper.workQueueThreadInterrupted( exc, getName(), + Boolean.valueOf(closeCalled)); + + continue ; } catch (Throwable t) { - // Ignore all errors. - ; + wrapper.workerThreadThrowableFromRequestWork(this, t, + workQueue.getName()); + + continue; } - long end = System.currentTimeMillis(); - - - synchronized (lock) { - totalTimeTaken += (end - start); - processedCount++; - } + performWork(); // set currentWork to null so that the work item can be - // garbage collected + // garbage collected without waiting for the next work item. currentWork = null; - setName(composeWorkerThreadName(threadPoolName, "Idle")); - - } catch (TimeoutException e) { - // This thread timed out waiting for something to do. - - synchronized (lock) { - availableWorkerThreads--; - - // This should for both bounded and unbounded case - if (currentThreadCount > minWorkerThreads) { - currentThreadCount--; - // This thread can exit. - return; - } else { - // Go back to waiting on workQueue - continue; - } - } - } catch (InterruptedException ie) { - // InterruptedExceptions are - // caught here. Thus, threads can be forced out of - // requestWork and so they have to reacquire the lock. - // Other options include ignoring or - // letting this thread die. - // Ignoring for now. REVISIT - synchronized (lock) { - availableWorkerThreads--; - } - - } catch (Throwable e) { - - // Ignore any exceptions that currentWork.process - // accidently lets through, but let Errors pass. - // Add debugging output? REVISIT - synchronized (lock) { - availableWorkerThreads--; - } - + resetClassLoader(); + } + } catch (Throwable e) { + // This should not be possible + wrapper.workerThreadCaughtUnexpectedThrowable(this,e); + } finally { + synchronized (workersLock) { + workers.remove(this); } } } diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java index 43573fda6ee..40214e816d6 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,15 @@ package com.sun.corba.se.impl.orbutil.threadpool; +import java.io.IOException; + +import java.security.PrivilegedAction; +import java.security.AccessController; + +import java.util.concurrent.atomic.AtomicInteger; + +import com.sun.corba.se.spi.orb.ORB; + import com.sun.corba.se.spi.orbutil.threadpool.NoSuchThreadPoolException; import com.sun.corba.se.spi.orbutil.threadpool.ThreadPool; import com.sun.corba.se.spi.orbutil.threadpool.ThreadPoolManager; @@ -33,21 +42,102 @@ import com.sun.corba.se.spi.orbutil.threadpool.ThreadPoolChooser; import com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl; import com.sun.corba.se.impl.orbutil.ORBConstants; +import com.sun.corba.se.impl.logging.ORBUtilSystemException; +import com.sun.corba.se.impl.orbutil.ORBConstants; +import com.sun.corba.se.spi.logging.CORBALogDomains; + + public class ThreadPoolManagerImpl implements ThreadPoolManager { - private ThreadPool threadPool ; + private ThreadPool threadPool; + private ThreadGroup threadGroup; - public ThreadPoolManagerImpl( ThreadGroup tg ) - { - // Use unbounded threadpool in J2SE ORB - // ThreadPoolManager from s1as appserver code base can be set in the - // ORB. ThreadPools in the appserver are bounded. In that situation - // the ThreadPool in this ThreadPoolManager will have its threads - // die after the idle timeout. - // XXX Should there be cleanup when ORB.shutdown is called if the - // ORB owns the ThreadPool? - threadPool = new ThreadPoolImpl( tg, - ORBConstants.THREADPOOL_DEFAULT_NAME ) ; + private static final ORBUtilSystemException wrapper = + ORBUtilSystemException.get(CORBALogDomains.RPC_TRANSPORT); + + public ThreadPoolManagerImpl() { + threadGroup = getThreadGroup(); + threadPool = new ThreadPoolImpl(threadGroup, + ORBConstants.THREADPOOL_DEFAULT_NAME); + } + + private static AtomicInteger tgCount = new AtomicInteger(); + + + private ThreadGroup getThreadGroup() { + ThreadGroup tg; + + // See bugs 4916766 and 4936203 + // We intend to create new threads in a reliable thread group. + // This avoids problems if the application/applet + // creates a thread group, makes JavaIDL calls which create a new + // connection and ReaderThread, and then destroys the thread + // group. If our ReaderThreads were to be part of such destroyed thread + // group then it might get killed and cause other invoking threads + // sharing the same connection to get a non-restartable + // CommunicationFailure. We'd like to avoid that. + // + // Our solution is to create all of our threads in the highest thread + // group that we have access to, given our own security clearance. + // + try { + // try to get a thread group that's as high in the threadgroup + // parent-child hierarchy, as we can get to. + // this will prevent an ORB thread created during applet-init from + // being killed when an applet dies. + tg = AccessController.doPrivileged( + new PrivilegedAction() { + public ThreadGroup run() { + ThreadGroup tg = Thread.currentThread().getThreadGroup(); + ThreadGroup ptg = tg; + try { + while (ptg != null) { + tg = ptg; + ptg = tg.getParent(); + } + } catch (SecurityException se) { + // Discontinue going higher on a security exception. + } + return new ThreadGroup(tg, "ORB ThreadGroup " + tgCount.getAndIncrement()); + } + } + ); + } catch (SecurityException e) { + // something wrong, we go back to the original code + tg = Thread.currentThread().getThreadGroup(); + } + + return tg; + } + + public void close() { + try { + threadPool.close(); + } catch (IOException exc) { + wrapper.threadPoolCloseError(); + } + + try { + boolean isDestroyed = threadGroup.isDestroyed(); + int numThreads = threadGroup.activeCount(); + int numGroups = threadGroup.activeGroupCount(); + + if (isDestroyed) { + wrapper.threadGroupIsDestroyed(threadGroup); + } else { + if (numThreads > 0) + wrapper.threadGroupHasActiveThreadsInClose(threadGroup, numThreads); + + if (numGroups > 0) + wrapper.threadGroupHasSubGroupsInClose(threadGroup, numGroups); + + threadGroup.destroy(); + } + } catch (IllegalThreadStateException exc) { + wrapper.threadGroupDestroyFailed(exc, threadGroup); + } + + threadGroup = null; } /** diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java index 022f2e0c93b..6e2320eeade 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -111,24 +111,23 @@ public class WorkQueueImpl implements WorkQueue return workqueueMonitoredObject; } - public void addWork(Work work) { - synchronized (this) { + public synchronized void addWork(Work work) { workItemsAdded++; work.setEnqueueTime(System.currentTimeMillis()); theWorkQueue.addLast(work); ((ThreadPoolImpl)workerThreadPool).notifyForAvailableWork(this); - } } - Work requestWork(long waitTime) - throws TimeoutException, InterruptedException + synchronized Work requestWork(long waitTime) throws TimeoutException, InterruptedException { Work workItem; - synchronized (this) { + ((ThreadPoolImpl)workerThreadPool).incrementNumberOfAvailableThreads(); + if (theWorkQueue.size() != 0) { workItem = (Work)theWorkQueue.removeFirst(); totalTimeInQueue += System.currentTimeMillis() - workItem.getEnqueueTime(); workItemsDequeued++; + ((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads(); return workItem; } @@ -145,6 +144,7 @@ public class WorkQueueImpl implements WorkQueue workItem = (Work)theWorkQueue.removeFirst(); totalTimeInQueue += System.currentTimeMillis() - workItem.getEnqueueTime(); workItemsDequeued++; + ((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads(); return workItem; } @@ -152,12 +152,13 @@ public class WorkQueueImpl implements WorkQueue } while (remainingWaitTime > 0); + ((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads(); throw new TimeoutException(); } catch (InterruptedException ie) { + ((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads(); throw ie; } - } } public void setThreadPool(ThreadPool workerThreadPool) { diff --git a/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java index 038acdb132b..a5ee15ba763 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1666,7 +1666,9 @@ public class CorbaMessageMediatorImpl ((CDRInputObject)messageMediator.getInputObject()).unmarshalHeader(); ORB orb = (ORB)messageMediator.getBroker(); - orb.checkShutdownState(); + synchronized (orb) { + orb.checkShutdownState(); + } ObjectKey okey = messageMediator.getObjectKey(); if (orb.subcontractDebugFlag) { diff --git a/corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java b/corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java index 1c60088a7a3..7bd98805ab7 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,8 +69,8 @@ public class SelectorImpl private HashMap listenerThreads; private Map readerThreads; private boolean selectorStarted; - private boolean closed; - private ORBUtilSystemException wrapper ; + private volatile boolean closed; + private ORBUtilSystemException wrapper; public SelectorImpl(ORB orb) diff --git a/corba/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc b/corba/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc index e82f724642d..da1ab4de948 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc +++ b/corba/src/share/classes/com/sun/corba/se/spi/logging/data/ORBUtil.mc @@ -1,6 +1,6 @@ ; -; Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. +; Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. ; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ; ; This code is free software; you can redistribute it and/or modify it @@ -62,6 +62,7 @@ (IS_LOCAL_REQUIRES_STUB 43 WARNING "Call to StubAdapter.isLocal did not pass a stub") (REQUEST_REQUIRES_STUB 44 WARNING "Call to StubAdapter.request did not pass a stub") (BAD_ACTIVATE_TIE_CALL 45 WARNING "Call to StubAdapter.activateTie did not pass a valid Tie") + (IO_EXCEPTION_ON_CLOSE 46 FINE "Useless exception on call to Closeable.close()") ) (BAD_PARAM (NULL_PARAM 1 WARNING "Null parameter") @@ -291,7 +292,31 @@ (JAVA_STREAM_INIT_FAILED 95 WARNING "Java stream initialization failed") (DUPLICATE_ORB_VERSION_SERVICE_CONTEXT 96 WARNING "An ORBVersionServiceContext was already in the service context list") (DUPLICATE_SENDING_CONTEXT_SERVICE_CONTEXT 97 WARNING "A SendingContextServiceContext was already in the service context list") + (WORK_QUEUE_THREAD_INTERRUPTED 98 FINE "Worker Thread from thread pool {0} was interrupted: closeCalled is {1}.") + (WORKER_THREAD_CREATED + 104 FINE "Worker thread {0} has been created with ClassLoader {1}") + (WORKER_THREAD_THROWABLE_FROM_REQUEST_WORK + 109 FINE "Worker thread {0} caught throwable {1} when requesting work from work queue {2}.") + (WORKER_THREAD_NOT_NEEDED + 110 FINE "Worker thread {0} will exit; current thread count, {1}, greater than minunum worker threads needed, {2}.") + (WORKER_THREAD_DO_WORK_THROWABLE + 111 FINE "Worker thread {0} caught throwable {1} while executing work.") + (WORKER_THREAD_CAUGHT_UNEXPECTED_THROWABLE + 112 WARNING "Worker thread {0} caught unexpected throwable {1}.") + (WORKER_THREAD_CREATION_FAILURE + 113 SEVERE "Worker thread creation failure; cause {0}.") + (WORKER_THREAD_SET_NAME_FAILURE + 114 WARNING "Unable to set worker thread {0} name to {1}; cause {2}.") + (WORK_QUEUE_REQUEST_WORK_NO_WORK_FOUND + 116 WARNING "Ignoring unexpected {0} when retrieving of work from work queue, {1}.") + (THREAD_POOL_CLOSE_ERROR 126 WARNING "Error in closing ThreadPool") + (THREAD_GROUP_IS_DESTROYED 127 WARNING "ThreadGroup {0} is already destroyed: can't destroy it") + (THREAD_GROUP_HAS_ACTIVE_THREADS_IN_CLOSE 128 WARNING "ThreadGroup {0} has {1} active threads: destroy may cause exception") + (THREAD_GROUP_HAS_SUB_GROUPS_IN_CLOSE 129 WARNING "ThreadGroup {0} has {1} sub-thread groups: destroy may cause exception") + (THREAD_GROUP_DESTROY_FAILED 130 WARNING "ThreadGroup {0} could not be destroyed") + (INTERRUPTED_JOIN_CALL_WHILE_CLOSING_THREAD_POOL 131 WARNING "Join was interrupted on thread {0} while closing ThreadPool {1}") ) + (MARSHAL (CHUNK_OVERFLOW 1 WARNING "Data read past end of chunk without closing the chunk") (UNEXPECTED_EOF 2 WARNING "Grow buffer strategy called underflow handler") diff --git a/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManager.java b/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManager.java index 2f5ce1e5343..1a7e6b61f80 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManager.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,6 +24,7 @@ */ package com.sun.corba.se.spi.monitoring; +import java.io.Closeable; import com.sun.corba.se.spi.orb.ORB; import com.sun.corba.se.spi.monitoring.MonitoredObject; import java.util.*; @@ -39,7 +40,7 @@ import java.util.*; * @author Hemanth Puttaswamy *

*/ -public interface MonitoringManager { +public interface MonitoringManager extends Closeable { /////////////////////////////////////// // operations diff --git a/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java b/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java index a23dfc3d0d6..88b6238ff53 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,4 +40,6 @@ public interface MonitoringManagerFactory { */ MonitoringManager createMonitoringManager( String nameOfTheRoot, String description ); + + void remove(String nameOfTheRoot); } diff --git a/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java b/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java index 0fad97f78ba..22b89e73f22 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -171,7 +171,7 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB private static Map staticWrapperMap = new ConcurrentHashMap(); - private MonitoringManager monitoringManager; + protected MonitoringManager monitoringManager; // There is only one instance of the PresentationManager // that is shared between all ORBs. This is necessary @@ -226,6 +226,14 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB globalPM.setStubFactoryFactory( true, dynamicStubFactoryFactory ) ; } + public void destroy() { + wrapper = null; + omgWrapper = null; + typeCodeMap = null; + primitiveTypeCodeConstants = null; + byteBufferPool = null; + } + /** Get the single instance of the PresentationManager */ public static PresentationManager getPresentationManager() @@ -302,6 +310,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB // Typecode support: needed in both ORBImpl and ORBSingleton public TypeCodeImpl get_primitive_tc(int kind) { + synchronized (this) { + checkShutdownState(); + } try { return primitiveTypeCodeConstants[kind] ; } catch (Throwable t) { @@ -311,15 +322,20 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB public synchronized void setTypeCode(String id, TypeCodeImpl code) { + checkShutdownState(); typeCodeMap.put(id, code); } public synchronized TypeCodeImpl getTypeCode(String id) { + checkShutdownState(); return (TypeCodeImpl)typeCodeMap.get(id); } public MonitoringManager getMonitoringManager( ) { + synchronized (this) { + checkShutdownState(); + } return monitoringManager; } @@ -434,6 +450,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB */ public Logger getLogger( String domain ) { + synchronized (this) { + checkShutdownState(); + } ORBData odata = getORBData() ; // Determine the correct ORBId. There are 3 cases: @@ -510,6 +529,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB // This method must also be inherited by both ORB and ORBSingleton. public ByteBufferPool getByteBufferPool() { + synchronized (this) { + checkShutdownState(); + } if (byteBufferPool == null) byteBufferPool = new ByteBufferPoolImpl(this); diff --git a/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java b/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java index a4cc2b6a559..dd61ff22032 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,9 +25,15 @@ package com.sun.corba.se.spi.orbutil.threadpool; +import java.io.Closeable; -public interface ThreadPool +/** This interface defines a thread pool execution service. The ORB uses this + * interface, which preceeds the JDK 5 ExecutorService. Note that the close + * method must be called in order to reclaim thread resources. + */ +public interface ThreadPool extends Closeable { + /** * This method will return any instance of the WorkQueue. If the ThreadPool * instance only services one WorkQueue then that WorkQueue instance will diff --git a/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java b/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java index 9225a90a598..14875f6d20a 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,9 @@ package com.sun.corba.se.spi.orbutil.threadpool; -public interface ThreadPoolManager +import java.io.Closeable; + +public interface ThreadPoolManager extends Closeable { /** * This method will return an instance of the threadpool given a threadpoolId, diff --git a/corba/src/share/classes/com/sun/corba/se/spi/protocol/PIHandler.java b/corba/src/share/classes/com/sun/corba/se/spi/protocol/PIHandler.java index b59062a43be..ac25b79510a 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/protocol/PIHandler.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/protocol/PIHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,8 @@ package com.sun.corba.se.spi.protocol; +import java.io.Closeable; + import org.omg.PortableInterceptor.ObjectReferenceTemplate ; import org.omg.PortableInterceptor.Interceptor ; import org.omg.PortableInterceptor.Current ; @@ -51,7 +53,7 @@ import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage ; /** This interface defines the PI interface that is used to interface the rest of the * ORB to the PI implementation. */ -public interface PIHandler { +public interface PIHandler extends Closeable { /** Complete the initialization of the PIHandler. This will execute the methods * on the ORBInitializers, if any are defined. This must be done here so that * the ORB can obtain the PIHandler BEFORE the ORBInitializers run, since they diff --git a/corba/src/share/classes/com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java b/corba/src/share/classes/com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java index e4fc9ae4265..f5aae43731d 100644 --- a/corba/src/share/classes/com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java +++ b/corba/src/share/classes/com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,33 +37,59 @@ import com.sun.corba.se.spi.oa.ObjectAdapterFactory ; * This is a registry of all subcontract ID dependent objects. This includes: * LocalClientRequestDispatcherFactory, ClientRequestDispatcher, ServerRequestDispatcher, and * ObjectAdapterFactory. - * XXX Should the registerXXX methods take an scid or not? I think we - * want to do this so that the same instance can be shared across multiple - * scids (and this is already true for ObjectAdapterFactory and LocalClientRequestDispatcherFactory), - * but this will require some changes for ClientRequestDispatcher and ServerRequestDispatcher. */ public interface RequestDispatcherRegistry { - // XXX needs javadocs! + /** Register a ClientRequestDispatcher for a particular subcontract ID. + * The subcontract ID appears in the ObjectKey of an object reference, and is used + * to control how a remote method invocation is processed by the ORB for a + * particular kind of object reference. + */ void registerClientRequestDispatcher( ClientRequestDispatcher csc, int scid) ; + /** Get the ClientRequestDispatcher for subcontract ID scid. + */ ClientRequestDispatcher getClientRequestDispatcher( int scid ) ; + /** Register a LocalClientRequestDispatcher for a particular subcontract ID. + * The subcontract ID appears in the ObjectKey of an object reference, and is used + * to control how a particular kind of colocated request is processed. + */ void registerLocalClientRequestDispatcherFactory( LocalClientRequestDispatcherFactory csc, int scid) ; + /** Get the LocalClientRequestDispatcher for subcontract ID scid. + */ LocalClientRequestDispatcherFactory getLocalClientRequestDispatcherFactory( int scid ) ; + /** Register a CorbaServerRequestDispatcher for a particular subcontract ID. + * The subcontract ID appears in the ObjectKey of an object reference, and is used + * to control how a particular kind of request is processed when received by the ORB. + */ void registerServerRequestDispatcher( CorbaServerRequestDispatcher ssc, int scid) ; + /** Get the CorbaServerRequestDispatcher for subcontract ID scid. + */ CorbaServerRequestDispatcher getServerRequestDispatcher(int scid) ; + /** Register a CorbaServerRequestDispatcher for handling an explicit object key name. + * This is used for non-standard invocations such as INS and the bootstrap name service. + */ void registerServerRequestDispatcher( CorbaServerRequestDispatcher ssc, String name ) ; + /** Get the CorbaServerRequestDispatcher for a particular object key. + */ CorbaServerRequestDispatcher getServerRequestDispatcher( String name ) ; + /** Register an ObjectAdapterFactory for a particular subcontract ID. + * This controls how Object references are created and managed. + */ void registerObjectAdapterFactory( ObjectAdapterFactory oaf, int scid) ; + /** Get the ObjectAdapterFactory for a particular subcontract ID scid. + */ ObjectAdapterFactory getObjectAdapterFactory( int scid ) ; - Set getObjectAdapterFactories() ; + /** Return the set of all ObjectAdapterFactory instances that are registered. + */ + Set getObjectAdapterFactories(); } diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 4a7f07f305b..024b439f670 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -256,3 +256,12 @@ bd568544be7fcd12a9327e6c448592198d57b043 hs24-b13 e77b8e0ed1f84e3e268239e276c7ab64fa573baa jdk8-b43 5ba29a1db46ecb80a321ca873adb56a3fe6ad320 hs24-b14 831e5c76a20af18f3c08c5a95ed31be0e128a010 jdk8-b44 +9d5f20961bc5846fa8d098d534effafbbdae0a58 jdk8-b45 +40e5a3f2907ed02b335c7caa8ecf068cc801380d hs24-b15 +cf37a594c38db2ea926954154636f9f81da2e032 jdk8-b46 +0c7bb1f4f9c8062b5c5bfa56b3bdca44839b4109 jdk8-b47 +66b0450071c1534e014b131892cc86b63f1d009c hs24-b16 +1e26f61bbb521642639f56fae11326f1932f5a7d jdk8-b48 +bd54fe36b5e50f9ef1e30a5047b27fee5297e268 hs24-b17 +e3619706a7253540a2d94e9e841acaab8ace7038 jdk8-b49 +72e0362c3f0cfacbbac8af8a5b9d2e182f21c17b hs24-b18 diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java index 668fba78372..2ff5308b158 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpot.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -657,7 +657,7 @@ public class BugSpot extends JPanel { while (fr != null) { trace.add(new StackTraceEntry(fr, getCDebugger())); try { - fr = fr.sender(); + fr = fr.sender(t); } catch (AddressException e) { e.printStackTrace(); showMessageDialog("Error while walking stack; stack trace will be truncated\n(see console for details)", diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java index b27a5399009..01d9b06dcd1 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/amd64/BsdAMD64CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.debugger.bsd.amd64; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.debugger.bsd.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; @@ -51,8 +52,11 @@ final public class BsdAMD64CFrame extends BasicCFrame { return rbp; } - public CFrame sender() { - if (rbp == null) { + public CFrame sender(ThreadProxy thread) { + AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext(); + Address rsp = context.getRegisterAsAddress(AMD64ThreadContext.RSP); + + if ( (rbp == null) || rbp.lessThan(rsp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java index 40292b921e6..237223ed308 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/bsd/x86/BsdX86CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,6 +28,7 @@ import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.bsd.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; +import sun.jvm.hotspot.debugger.x86.*; final public class BsdX86CFrame extends BasicCFrame { // package/class internals only @@ -52,8 +53,11 @@ final public class BsdX86CFrame extends BasicCFrame { return ebp; } - public CFrame sender() { - if (ebp == null) { + public CFrame sender(ThreadProxy thread) { + X86ThreadContext context = (X86ThreadContext) thread.getContext(); + Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP); + + if ( (ebp == null) || ebp.lessThan(esp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java index 30ddc298fd9..7640ddaa35e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ import sun.jvm.hotspot.debugger.*; public interface CFrame { /** Returns null when no more frames on stack */ - public CFrame sender(); + public CFrame sender(ThreadProxy th); /** Get the program counter of this frame */ public Address pc(); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java index 03b5dc572ca..d6ec6b45003 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/amd64/AMD64CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.debugger.cdbg.basic.amd64; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; @@ -43,8 +44,11 @@ public class AMD64CFrame extends BasicCFrame { this.pc = pc; } - public CFrame sender() { - if (rbp == null) { + public CFrame sender(ThreadProxy thread) { + AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext(); + Address rsp = context.getRegisterAsAddress(AMD64ThreadContext.RSP); + + if ( (rbp == null) || rbp.lessThan(rsp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java index 0764a5da5e9..76b101bef97 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/cdbg/basic/x86/X86CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.debugger.cdbg.basic.x86; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.debugger.x86.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; @@ -43,8 +44,11 @@ public class X86CFrame extends BasicCFrame { this.pc = pc; } - public CFrame sender() { - if (ebp == null) { + public CFrame sender(ThreadProxy thread) { + X86ThreadContext context = (X86ThreadContext) thread.getContext(); + Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP); + + if ( (ebp == null) || ebp.lessThan(esp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java index 3fab9a9e1d0..36977f1aeaa 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.debugger.linux.amd64; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.debugger.amd64.*; import sun.jvm.hotspot.debugger.linux.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; @@ -51,8 +52,11 @@ final public class LinuxAMD64CFrame extends BasicCFrame { return rbp; } - public CFrame sender() { - if (rbp == null) { + public CFrame sender(ThreadProxy thread) { + AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext(); + Address rsp = context.getRegisterAsAddress(AMD64ThreadContext.RSP); + + if ( (rbp == null) || rbp.lessThan(rsp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java index eb490b284b5..d52f6b35ee0 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/sparc/LinuxSPARCCFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,7 +57,7 @@ final public class LinuxSPARCCFrame extends BasicCFrame { return sp; } - public CFrame sender() { + public CFrame sender(ThreadProxy thread) { if (sp == null) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java index 67074c6533c..8d066720ea2 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,6 +28,7 @@ import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.debugger.linux.*; import sun.jvm.hotspot.debugger.cdbg.*; import sun.jvm.hotspot.debugger.cdbg.basic.*; +import sun.jvm.hotspot.debugger.x86.*; final public class LinuxX86CFrame extends BasicCFrame { // package/class internals only @@ -52,8 +53,11 @@ final public class LinuxX86CFrame extends BasicCFrame { return ebp; } - public CFrame sender() { - if (ebp == null) { + public CFrame sender(ThreadProxy thread) { + X86ThreadContext context = (X86ThreadContext) thread.getContext(); + Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP); + + if ( (ebp == null) || ebp.lessThan(esp) ) { return null; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcCFrame.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcCFrame.java index 6b508e1e4e8..83d5f677a6e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcCFrame.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcCFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ final class ProcCFrame extends BasicCFrame { return fp; } - public CFrame sender() { + public CFrame sender(ThreadProxy t) { return sender; } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java index d28bca18d2e..662f18e089e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -688,8 +688,7 @@ implements ReferenceType { if (sde == null) { String extension = null; if (saKlass instanceof InstanceKlass) { - Symbol sdeSym = ((InstanceKlass)saKlass).getSourceDebugExtension(); - extension = (sdeSym != null)? sdeSym.asString() : null; + extension = ((InstanceKlass)saKlass).getSourceDebugExtension(); } if (extension == null) { sde = NO_SDE_INFO_MARK; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java index d19dc93cfae..241cba1f9bb 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java @@ -47,14 +47,11 @@ public class ConstMethod extends Oop { private static int HAS_LINENUMBER_TABLE; private static int HAS_CHECKED_EXCEPTIONS; private static int HAS_LOCALVARIABLE_TABLE; + private static int HAS_EXCEPTION_TABLE; private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("constMethodOopDesc"); constants = new OopField(type.getOopField("_constants"), 0); - // The exception handler table. 4-tuples of ints [start_pc, end_pc, - // handler_pc, catch_type index] For methods with no exceptions the - // table is pointing to Universe::the_empty_int_array - exceptionTable = new OopField(type.getOopField("_exception_table"), 0); constMethodSize = new CIntField(type.getCIntegerField("_constMethod_size"), 0); flags = new ByteField(type.getJByteField("_flags"), 0); @@ -62,6 +59,7 @@ public class ConstMethod extends Oop { HAS_LINENUMBER_TABLE = db.lookupIntConstant("constMethodOopDesc::_has_linenumber_table").intValue(); HAS_CHECKED_EXCEPTIONS = db.lookupIntConstant("constMethodOopDesc::_has_checked_exceptions").intValue(); HAS_LOCALVARIABLE_TABLE = db.lookupIntConstant("constMethodOopDesc::_has_localvariable_table").intValue(); + HAS_EXCEPTION_TABLE = db.lookupIntConstant("constMethodOopDesc::_has_exception_table").intValue(); // Size of Java bytecodes allocated immediately after constMethodOop. codeSize = new CIntField(type.getCIntegerField("_code_size"), 0); @@ -78,6 +76,9 @@ public class ConstMethod extends Oop { type = db.lookupType("LocalVariableTableElement"); localVariableTableElementSize = type.getSize(); + + type = db.lookupType("ExceptionTableElement"); + exceptionTableElementSize = type.getSize(); } ConstMethod(OopHandle handle, ObjectHeap heap) { @@ -86,7 +87,6 @@ public class ConstMethod extends Oop { // Fields private static OopField constants; - private static OopField exceptionTable; private static CIntField constMethodSize; private static ByteField flags; private static CIntField codeSize; @@ -100,6 +100,7 @@ public class ConstMethod extends Oop { private static long checkedExceptionElementSize; private static long localVariableTableElementSize; + private static long exceptionTableElementSize; public Method getMethod() { InstanceKlass ik = (InstanceKlass)getConstants().getPoolHolder(); @@ -112,10 +113,6 @@ public class ConstMethod extends Oop { return (ConstantPool) constants.getValue(this); } - public TypeArray getExceptionTable() { - return (TypeArray) exceptionTable.getValue(this); - } - public long getConstMethodSize() { return constMethodSize.getValue(this); } @@ -235,7 +232,6 @@ public class ConstMethod extends Oop { super.iterateFields(visitor, doVMFields); if (doVMFields) { visitor.doOop(constants, true); - visitor.doOop(exceptionTable, true); visitor.doCInt(constMethodSize, true); visitor.doByte(flags, true); visitor.doCInt(codeSize, true); @@ -326,6 +322,23 @@ public class ConstMethod extends Oop { return ret; } + public boolean hasExceptionTable() { + return (getFlags() & HAS_EXCEPTION_TABLE) != 0; + } + + public ExceptionTableElement[] getExceptionTable() { + if (Assert.ASSERTS_ENABLED) { + Assert.that(hasExceptionTable(), "should only be called if table is present"); + } + ExceptionTableElement[] ret = new ExceptionTableElement[getExceptionTableLength()]; + long offset = offsetOfExceptionTable(); + for (int i = 0; i < ret.length; i++) { + ret[i] = new ExceptionTableElement(getHandle(), offset); + offset += exceptionTableElementSize; + } + return ret; + } + public boolean hasCheckedExceptions() { return (getFlags() & HAS_CHECKED_EXCEPTIONS) != 0; } @@ -415,7 +428,10 @@ public class ConstMethod extends Oop { if (Assert.ASSERTS_ENABLED) { Assert.that(hasLocalVariableTable(), "should only be called if table is present"); } - if (hasCheckedExceptions()) { + + if (hasExceptionTable()) { + return offsetOfExceptionTable() - 2; + } else if (hasCheckedExceptions()) { return offsetOfCheckedExceptions() - 2; } else { return offsetOfLastU2Element(); @@ -432,4 +448,33 @@ public class ConstMethod extends Oop { return offset; } + private int getExceptionTableLength() { + if (hasExceptionTable()) { + return (int) getHandle().getCIntegerAt(offsetOfExceptionTableLength(), 2, true); + } else { + return 0; + } + } + + private long offsetOfExceptionTableLength() { + if (Assert.ASSERTS_ENABLED) { + Assert.that(hasExceptionTable(), "should only be called if table is present"); + } + if (hasCheckedExceptions()) { + return offsetOfCheckedExceptions() - 2; + } else { + return offsetOfLastU2Element(); + } + } + + private long offsetOfExceptionTable() { + long offset = offsetOfExceptionTableLength(); + long length = getExceptionTableLength(); + if (Assert.ASSERTS_ENABLED) { + Assert.that(length > 0, "should only be called if table is present"); + } + offset -= length * exceptionTableElementSize; + return offset; + } + } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ExceptionTableElement.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ExceptionTableElement.java new file mode 100644 index 00000000000..93153708696 --- /dev/null +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ExceptionTableElement.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.oops; + +import java.io.*; +import java.util.*; +import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.interpreter.*; +import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.types.*; +import sun.jvm.hotspot.utilities.*; + +public class ExceptionTableElement { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + Type type = db.lookupType("ExceptionTableElement"); + offsetOfStartPC = type.getCIntegerField("start_pc").getOffset(); + offsetOfEndPC = type.getCIntegerField("end_pc").getOffset(); + offsetOfHandlerPC = type.getCIntegerField("handler_pc").getOffset(); + offsetOfCatchTypeIndex = type.getCIntegerField("catch_type_index").getOffset(); + } + + private static long offsetOfStartPC; + private static long offsetOfEndPC; + private static long offsetOfHandlerPC; + private static long offsetOfCatchTypeIndex; + + private OopHandle handle; + private long offset; + + public ExceptionTableElement(OopHandle handle, long offset) { + this.handle = handle; + this.offset = offset; + } + + public int getStartPC() { + return (int) handle.getCIntegerAt(offset + offsetOfStartPC, 2, true); + } + + public int getEndPC() { + return (int) handle.getCIntegerAt(offset + offsetOfEndPC, 2, true); + } + + public int getHandlerPC() { + return (int) handle.getCIntegerAt(offset + offsetOfHandlerPC, 2, true); + } + + public int getCatchTypeIndex() { + return (int) handle.getCIntegerAt(offset + offsetOfCatchTypeIndex, 2, true); + } +} + diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java index f25493d6831..581eee80d85 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -651,10 +651,11 @@ public class GenerateOopMap { boolean fellThrough = false; // False to get first BB marked. // First mark all exception handlers as start of a basic-block - TypeArray excps = method().getExceptionTable(); - for(int i = 0; i < excps.getLength(); i += 4) { - int handler_pc_idx = i+2; - markBB(excps.getIntAt(handler_pc_idx), null); + if (method().hasExceptionTable()) { + ExceptionTableElement[] excps = method().getExceptionTable(); + for(int i = 0; i < excps.length; i++) { + markBB(excps[i].getHandlerPC(), null); + } } // Then iterate through the code @@ -891,14 +892,15 @@ public class GenerateOopMap { // Mark entry basic block as alive and all exception handlers _basic_blocks[0].markAsAlive(); - TypeArray excps = method().getExceptionTable(); - for(int i = 0; i < excps.getLength(); i += 4) { - int handler_pc_idx = i+2; - BasicBlock bb = getBasicBlockAt(excps.getIntAt(handler_pc_idx)); - // If block is not already alive (due to multiple exception handlers to same bb), then - // make it alive - if (bb.isDead()) - bb.markAsAlive(); + if (method().hasExceptionTable()) { + ExceptionTableElement[] excps = method().getExceptionTable(); + for(int i = 0; i < excps.length; i ++) { + BasicBlock bb = getBasicBlockAt(excps[i].getHandlerPC()); + // If block is not already alive (due to multiple exception handlers to same bb), then + // make it alive + if (bb.isDead()) + bb.markAsAlive(); + } } BytecodeStream bcs = new BytecodeStream(_method); @@ -1468,12 +1470,12 @@ public class GenerateOopMap { if (_has_exceptions) { int bci = itr.bci(); - TypeArray exct = method().getExceptionTable(); - for(int i = 0; i< exct.getLength(); i+=4) { - int start_pc = exct.getIntAt(i); - int end_pc = exct.getIntAt(i+1); - int handler_pc = exct.getIntAt(i+2); - int catch_type = exct.getIntAt(i+3); + ExceptionTableElement[] exct = method().getExceptionTable(); + for(int i = 0; i< exct.length; i++) { + int start_pc = exct[i].getStartPC(); + int end_pc = exct[i].getEndPC(); + int handler_pc = exct[i].getHandlerPC(); + int catch_type = exct[i].getCatchTypeIndex(); if (start_pc <= bci && bci < end_pc) { BasicBlock excBB = getBasicBlockAt(handler_pc); @@ -2151,7 +2153,7 @@ public class GenerateOopMap { _conflict = false; _max_locals = (int) method().getMaxLocals(); _max_stack = (int) method().getMaxStack(); - _has_exceptions = (method().getExceptionTable().getLength() > 0); + _has_exceptions = (method().hasExceptionTable()); _nof_refval_conflicts = 0; _init_vars = new ArrayList(5); // There are seldom more than 5 init_vars _report_result = false; diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java index 9536da39838..acd975206f5 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java @@ -342,7 +342,7 @@ public class InstanceKlass extends Klass { public Oop getProtectionDomain() { return protectionDomain.getValue(this); } public ObjArray getSigners() { return (ObjArray) signers.getValue(this); } public Symbol getSourceFileName() { return getSymbol(sourceFileName); } - public Symbol getSourceDebugExtension(){ return getSymbol(sourceDebugExtension); } + public String getSourceDebugExtension(){ return CStringUtilities.getString(sourceDebugExtension.getValue(getHandle())); } public TypeArray getInnerClasses() { return (TypeArray) innerClasses.getValue(this); } public long getNonstaticFieldSize() { return nonstaticFieldSize.getValue(this); } public long getStaticOopFieldCount() { return staticOopFieldCount.getValue(this); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java index b691f1537c3..d8b3fade1af 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java @@ -127,7 +127,6 @@ public class Method extends Oop { return getConstMethod().getConstants(); } public MethodData getMethodData() { return (MethodData) methodData.getValue(this); } - public TypeArray getExceptionTable() { return getConstMethod().getExceptionTable(); } /** WARNING: this is in words, not useful in this system; use getObjectSize() instead */ public long getMethodSize() { return methodSize.getValue(this); } public long getMaxStack() { return maxStack.getValue(this); } @@ -328,6 +327,14 @@ public class Method extends Oop { return null; } + public boolean hasExceptionTable() { + return getConstMethod().hasExceptionTable(); + } + + public ExceptionTableElement[] getExceptionTable() { + return getConstMethod().getExceptionTable(); + } + public boolean hasCheckedExceptions() { return getConstMethod().hasCheckedExceptions(); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java index edd8a806442..a42d8be68b5 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -141,18 +141,19 @@ public class OopUtilities implements /* imports */ JVMTIThreadState { public static String stringOopToString(Oop stringOop) { if (offsetField == null) { InstanceKlass k = (InstanceKlass) stringOop.getKlass(); - offsetField = (IntField) k.findField("offset", "I"); - countField = (IntField) k.findField("count", "I"); + offsetField = (IntField) k.findField("offset", "I"); // optional + countField = (IntField) k.findField("count", "I"); // optional valueField = (OopField) k.findField("value", "[C"); if (Assert.ASSERTS_ENABLED) { - Assert.that(offsetField != null && - countField != null && - valueField != null, "must find all java.lang.String fields"); + Assert.that(valueField != null, "Field \'value\' of java.lang.String not found"); } } - return charArrayToString((TypeArray) valueField.getValue(stringOop), - offsetField.getValue(stringOop), - countField.getValue(stringOop)); + if (offsetField != null && countField != null) { + return charArrayToString((TypeArray) valueField.getValue(stringOop), + offsetField.getValue(stringOop), + countField.getValue(stringOop)); + } + return charArrayToString((TypeArray) valueField.getValue(stringOop)); } public static String stringOopToEscapedString(Oop stringOop) { diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java index 671bfc81125..a087d4aa04e 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -158,7 +158,7 @@ public class PStack extends Tool { printUnknown(out); } } - f = f.sender(); + f = f.sender(th); } } catch (Exception exp) { exp.printStackTrace(); diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java index f4e3d7c937e..a71592d930b 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -504,11 +504,14 @@ public class ClassWriter implements /* imports */ ClassConstants 2 /* exp. table len. */ + 2 /* code attr. count */; - TypeArray exceptionTable = m.getExceptionTable(); - final int exceptionTableLen = (int) exceptionTable.getLength(); - if (exceptionTableLen != 0) { + boolean hasExceptionTable = m.hasExceptionTable(); + ExceptionTableElement[] exceptionTable = null; + int exceptionTableLen = 0; + if (hasExceptionTable) { + exceptionTable = m.getExceptionTable(); + exceptionTableLen = exceptionTable.length; if (DEBUG) debugMessage("\tmethod has exception table"); - codeSize += (exceptionTableLen / 4) /* exception table is 4-tuple array */ + codeSize += exceptionTableLen /* exception table is 4-tuple array */ * (2 /* start_pc */ + 2 /* end_pc */ + 2 /* handler_pc */ + @@ -586,15 +589,15 @@ public class ClassWriter implements /* imports */ ClassConstants dos.write(code); // write exception table size - dos.writeShort((short) (exceptionTableLen / 4)); - if (DEBUG) debugMessage("\texception table length = " + (exceptionTableLen / 4)); + dos.writeShort((short) exceptionTableLen); + if (DEBUG) debugMessage("\texception table length = " + exceptionTableLen); if (exceptionTableLen != 0) { - for (int e = 0; e < exceptionTableLen; e += 4) { - dos.writeShort((short) exceptionTable.getIntAt(e)); - dos.writeShort((short) exceptionTable.getIntAt(e + 1)); - dos.writeShort((short) exceptionTable.getIntAt(e + 2)); - dos.writeShort((short) exceptionTable.getIntAt(e + 3)); + for (int e = 0; e < exceptionTableLen; e++) { + dos.writeShort((short) exceptionTable[e].getStartPC()); + dos.writeShort((short) exceptionTable[e].getEndPC()); + dos.writeShort((short) exceptionTable[e].getHandlerPC()); + dos.writeShort((short) exceptionTable[e].getCatchTypeIndex()); } } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java index b8d5c8bab7b..2ab2bf6e2a3 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -783,37 +783,39 @@ public class HTMLGenerator implements /* imports */ ClassConstants { }); // display exception table for this method - TypeArray exceptionTable = method.getExceptionTable(); - // exception table is 4 tuple array of shorts - int numEntries = (int)exceptionTable.getLength() / 4; - if (numEntries != 0) { - buf.h4("Exception Table"); - buf.beginTable(1); - buf.beginTag("tr"); - buf.headerCell("start bci"); - buf.headerCell("end bci"); - buf.headerCell("handler bci"); - buf.headerCell("catch type"); - buf.endTag("tr"); - - for (int e = 0; e < numEntries; e += 4) { + boolean hasException = method.hasExceptionTable(); + if (hasException) { + ExceptionTableElement[] exceptionTable = method.getExceptionTable(); + int numEntries = exceptionTable.length; + if (numEntries != 0) { + buf.h4("Exception Table"); + buf.beginTable(1); buf.beginTag("tr"); - buf.cell(Integer.toString(exceptionTable.getIntAt(e))); - buf.cell(Integer.toString(exceptionTable.getIntAt(e + 1))); - buf.cell(Integer.toString(exceptionTable.getIntAt(e + 2))); - short cpIndex = (short) exceptionTable.getIntAt(e + 3); - ConstantPool.CPSlot obj = cpIndex == 0? null : cpool.getSlotAt(cpIndex); - if (obj == null) { - buf.cell("Any"); - } else if (obj.isMetaData()) { - buf.cell(obj.getSymbol().asString().replace('/', '.')); - } else { - buf.cell(genKlassLink((InstanceKlass)obj.getOop())); - } + buf.headerCell("start bci"); + buf.headerCell("end bci"); + buf.headerCell("handler bci"); + buf.headerCell("catch type"); buf.endTag("tr"); - } - buf.endTable(); + for (int e = 0; e < numEntries; e ++) { + buf.beginTag("tr"); + buf.cell(Integer.toString(exceptionTable[e].getStartPC())); + buf.cell(Integer.toString(exceptionTable[e].getEndPC())); + buf.cell(Integer.toString(exceptionTable[e].getHandlerPC())); + short cpIndex = (short) exceptionTable[e].getCatchTypeIndex(); + ConstantPool.CPSlot obj = cpIndex == 0? null : cpool.getSlotAt(cpIndex); + if (obj == null) { + buf.cell("Any"); + } else if (obj.isMetaData()) { + buf.cell(obj.getSymbol().asString().replace('/', '.')); + } else { + buf.cell(genKlassLink((InstanceKlass)obj.getOop())); + } + buf.endTag("tr"); + } + + buf.endTable(); + } } // display constant pool hyperlink diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtable.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtable.java index bb296a509d2..0f4da3a9218 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtable.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtable.java @@ -41,10 +41,10 @@ public class BasicHashtable extends VMObject { } private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("BasicHashtable"); + Type type = db.lookupType("BasicHashtable"); tableSizeField = type.getCIntegerField("_table_size"); bucketsField = type.getAddressField("_buckets"); - bucketSize = db.lookupType("HashtableBucket").getSize(); + bucketSize = db.lookupType("HashtableBucket").getSize(); } // Fields diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtableEntry.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtableEntry.java index 192c1dd9fa0..0296dcbd651 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtableEntry.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/BasicHashtableEntry.java @@ -41,7 +41,7 @@ public class BasicHashtableEntry extends VMObject { } private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("BasicHashtableEntry"); + Type type = db.lookupType("BasicHashtableEntry"); hashField = type.getCIntegerField("_hash"); nextField = type.getAddressField("_next"); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java index 3c2e0f965c2..70709f02b84 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/Hashtable.java @@ -40,7 +40,7 @@ public class Hashtable extends BasicHashtable { private static synchronized void initialize(TypeDataBase db) { // just to confirm that type exists - Type type = db.lookupType("Hashtable"); + Type type = db.lookupType("IntptrHashtable"); } // derived class may return Class diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableBucket.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableBucket.java index 2e86b9a8318..44f78e49dd8 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableBucket.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableBucket.java @@ -39,7 +39,7 @@ public class HashtableBucket extends VMObject { } private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("HashtableBucket"); + Type type = db.lookupType("HashtableBucket"); entryField = type.getAddressField("_entry"); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableEntry.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableEntry.java index 73932a43033..38c5968720d 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableEntry.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/HashtableEntry.java @@ -41,7 +41,7 @@ public class HashtableEntry extends BasicHashtableEntry { } private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("HashtableEntry"); + Type type = db.lookupType("IntptrHashtableEntry"); literalField = type.getAddressField("_literal"); } diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java index 55cb2995621..1f17a7fdb63 100644 --- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java +++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -85,6 +85,21 @@ public class ObjectReader { this(new ProcImageClassLoader()); } + static void debugPrintln(String msg) { + if (DEBUG) { + System.err.println("DEBUG>" + msg); + } + } + + static void debugPrintStackTrace(Exception exp) { + if (DEBUG) { + StackTraceElement[] els = exp.getStackTrace(); + for (int i = 0; i < els.length; i++) { + System.err.println("DEBUG>" + els[i].toString()); + } + } + } + public Object readObject(Oop oop) throws ClassNotFoundException { if (oop instanceof Instance) { return readInstance((Instance) oop); @@ -120,13 +135,96 @@ public class ObjectReader { } protected Symbol javaLangString; + protected Symbol javaUtilHashtableEntry; + protected Symbol javaUtilHashtable; + protected Symbol javaUtilProperties; + + protected Symbol getVMSymbol(String name) { + return VM.getVM().getSymbolTable().probe(name); + } + protected Symbol javaLangString() { if (javaLangString == null) { - javaLangString = VM.getVM().getSymbolTable().probe("java/lang/String"); + javaLangString = getVMSymbol("java/lang/String"); } return javaLangString; } + protected Symbol javaUtilHashtableEntry() { + if (javaUtilHashtableEntry == null) { + javaUtilHashtableEntry = getVMSymbol("java/util/Hashtable$Entry"); + } + return javaUtilHashtableEntry; + } + + protected Symbol javaUtilHashtable() { + if (javaUtilHashtable == null) { + javaUtilHashtable = getVMSymbol("java/util/Hashtable"); + } + return javaUtilHashtable; + } + + protected Symbol javaUtilProperties() { + if (javaUtilProperties == null) { + javaUtilProperties = getVMSymbol("java/util/Properties"); + } + return javaUtilProperties; + } + + private void setHashtableEntry(java.util.Hashtable p, Oop oop) { + InstanceKlass ik = (InstanceKlass)oop.getKlass(); + OopField keyField = (OopField)ik.findField("key", "Ljava/lang/Object;"); + OopField valueField = (OopField)ik.findField("value", "Ljava/lang/Object;"); + OopField nextField = (OopField)ik.findField("next", "Ljava/util/Hashtable$Entry;"); + if (DEBUG) { + if (Assert.ASSERTS_ENABLED) { + Assert.that(ik.getName().equals(javaUtilHashtableEntry()), "Not a Hashtable$Entry?"); + Assert.that(keyField != null && valueField != null && nextField != null, "Invalid fields!"); + } + } + + Object key = null; + Object value = null; + Oop next = null; + try { + key = readObject(keyField.getValue(oop)); + value = readObject(valueField.getValue(oop)); + next = (Oop)nextField.getValue(oop); + // For Properties, should use setProperty(k, v). Since it only runs in SA + // using put(k, v) should be OK. + p.put(key, value); + if (next != null) { + setHashtableEntry(p, next); + } + } catch (ClassNotFoundException ce) { + if( DEBUG) { + debugPrintln("Class not found " + ce); + debugPrintStackTrace(ce); + } + } + } + + protected Object getHashtable(Instance oop, boolean isProperties) { + InstanceKlass k = (InstanceKlass)oop.getKlass(); + OopField tableField = (OopField)k.findField("table", "[Ljava/util/Hashtable$Entry;"); + if (tableField == null) { + debugPrintln("Could not find field of [Ljava/util/Hashtable$Entry;"); + return null; + } + java.util.Hashtable table = (isProperties) ? new java.util.Properties() + : new java.util.Hashtable(); + ObjArray kvs = (ObjArray)tableField.getValue(oop); + long size = kvs.getLength(); + debugPrintln("Hashtable$Entry Size = " + size); + for (long i=0; i= 509), 1) # dtrace cannot handle tail call optimization (6672627, 6693876) OPT_CFLAGS/jni.o = $(OPT_CFLAGS/DEFAULT) $(OPT_CCFLAGS/NO_TAIL_CALL_OPT) diff --git a/hotspot/make/solaris/makefiles/product.make b/hotspot/make/solaris/makefiles/product.make index 8746d51e57e..2aeae30df8e 100644 --- a/hotspot/make/solaris/makefiles/product.make +++ b/hotspot/make/solaris/makefiles/product.make @@ -40,6 +40,11 @@ endif # (OPT_CFLAGS/SLOWER is also available, to alter compilation of buggy files) ifeq ("${Platform_compiler}", "sparcWorks") +ifeq ($(COMPILER_REV_NUMERIC), 510) +# CC 5.10 has bug XXXXX with -xO4 +OPT_CFLAGS/jvmtiClassFileReconstituter.o = $(OPT_CFLAGS/O2) +endif # COMPILER_REV_NUMERIC == 510 + ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1) # dtrace cannot handle tail call optimization (6672627, 6693876) OPT_CFLAGS/jni.o = $(OPT_CFLAGS/DEFAULT) $(OPT_CCFLAGS/NO_TAIL_CALL_OPT) diff --git a/hotspot/make/windows/makefiles/debug.make b/hotspot/make/windows/makefiles/debug.make index 9f434729d76..36a12dc9de2 100644 --- a/hotspot/make/windows/makefiles/debug.make +++ b/hotspot/make/windows/makefiles/debug.make @@ -38,7 +38,8 @@ default:: $(BUILD_PCH_FILE) $(AOUT) launcher checkAndBuildSA wb !include ../local.make !include compile.make -CXX_FLAGS=$(CXX_FLAGS) $(DEBUG_OPT_OPTION) +# _NMT_NOINLINE_ informs NMT that no inlining by Compiler +CXX_FLAGS=$(CXX_FLAGS) $(DEBUG_OPT_OPTION) /D "_NMT_NOINLINE_" !include $(WorkSpace)/make/windows/makefiles/vm.make !include local.make diff --git a/hotspot/src/cpu/sparc/vm/sparc.ad b/hotspot/src/cpu/sparc/vm/sparc.ad index 43c9976bbde..400df553694 100644 --- a/hotspot/src/cpu/sparc/vm/sparc.ad +++ b/hotspot/src/cpu/sparc/vm/sparc.ad @@ -1,5 +1,5 @@ // -// Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. // // This code is free software; you can redistribute it and/or modify it @@ -678,18 +678,26 @@ intptr_t get_offset_from_base_2(const MachNode* n, const TypePtr* atype, int dis static inline jdouble replicate_immI(int con, int count, int width) { // Load a constant replicated "count" times with width "width" + assert(count*width == 8 && width <= 4, "sanity"); int bit_width = width * 8; - jlong elt_val = con; - elt_val &= (((jlong) 1) << bit_width) - 1; // mask off sign bits - jlong val = elt_val; + jlong val = con; + val &= (((jlong) 1) << bit_width) - 1; // mask off sign bits for (int i = 0; i < count - 1; i++) { - val <<= bit_width; - val |= elt_val; + val |= (val << bit_width); } jdouble dval = *((jdouble*) &val); // coerce to double type return dval; } +static inline jdouble replicate_immF(float con) { + // Replicate float con 2 times and pack into vector. + int val = *((int*)&con); + jlong lval = val; + lval = (lval << 32) | (lval & 0xFFFFFFFFl); + jdouble dval = *((jdouble*) &lval); // coerce to double type + return dval; +} + // Standard Sparc opcode form2 field breakdown static inline void emit2_19(CodeBuffer &cbuf, int f30, int f29, int f25, int f22, int f20, int f19, int f0 ) { f0 &= (1<<19)-1; // Mask displacement to 19 bits @@ -791,6 +799,7 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te case Assembler::stdf_op3: st_op = Op_StoreD; break; case Assembler::ldsb_op3: ld_op = Op_LoadB; break; + case Assembler::ldub_op3: ld_op = Op_LoadUB; break; case Assembler::lduh_op3: ld_op = Op_LoadUS; break; case Assembler::ldsh_op3: ld_op = Op_LoadS; break; case Assembler::ldx_op3: // may become LoadP or stay LoadI @@ -799,7 +808,6 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te case Assembler::ldd_op3: ld_op = Op_LoadL; break; case Assembler::ldf_op3: ld_op = Op_LoadF; break; case Assembler::lddf_op3: ld_op = Op_LoadD; break; - case Assembler::ldub_op3: ld_op = Op_LoadB; break; case Assembler::prefetch_op3: ld_op = Op_LoadI; break; default: ShouldNotReachHere(); @@ -840,10 +848,7 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te !(n->ideal_Opcode()==Op_PrefetchRead && ld_op==Op_LoadI) && !(n->ideal_Opcode()==Op_PrefetchWrite && ld_op==Op_LoadI) && !(n->ideal_Opcode()==Op_PrefetchAllocation && ld_op==Op_LoadI) && - !(n->ideal_Opcode()==Op_Load2I && ld_op==Op_LoadD) && - !(n->ideal_Opcode()==Op_Load4C && ld_op==Op_LoadD) && - !(n->ideal_Opcode()==Op_Load4S && ld_op==Op_LoadD) && - !(n->ideal_Opcode()==Op_Load8B && ld_op==Op_LoadD) && + !(n->ideal_Opcode()==Op_LoadVector && ld_op==Op_LoadD) && !(n->rule() == loadUB_rule)) { verify_oops_warning(n, n->ideal_Opcode(), ld_op); } @@ -855,9 +860,7 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te !(n->ideal_Opcode()==Op_StoreI && st_op==Op_StoreF) && !(n->ideal_Opcode()==Op_StoreF && st_op==Op_StoreI) && !(n->ideal_Opcode()==Op_StoreL && st_op==Op_StoreI) && - !(n->ideal_Opcode()==Op_Store2I && st_op==Op_StoreD) && - !(n->ideal_Opcode()==Op_Store4C && st_op==Op_StoreD) && - !(n->ideal_Opcode()==Op_Store8B && st_op==Op_StoreD) && + !(n->ideal_Opcode()==Op_StoreVector && st_op==Op_StoreD) && !(n->ideal_Opcode()==Op_StoreD && st_op==Op_StoreI && n->rule() == storeD0_rule)) { verify_oops_warning(n, n->ideal_Opcode(), st_op); } @@ -1849,16 +1852,45 @@ int Matcher::regnum_to_fpu_offset(int regnum) { address last_rethrow = NULL; // debugging aid for Rethrow encoding #endif +// Map Types to machine register types +const int Matcher::base2reg[Type::lastype] = { + Node::NotAMachineReg,0,0, Op_RegI, Op_RegL, 0, Op_RegN, + Node::NotAMachineReg, Node::NotAMachineReg, /* tuple, array */ + 0, Op_RegD, 0, 0, /* Vectors */ + Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, /* the pointers */ + 0, 0/*abio*/, + Op_RegP /* Return address */, 0, /* the memories */ + Op_RegF, Op_RegF, Op_RegF, Op_RegD, Op_RegD, Op_RegD, + 0 /*bottom*/ +}; + // Vector width in bytes -const uint Matcher::vector_width_in_bytes(void) { +const int Matcher::vector_width_in_bytes(BasicType bt) { + assert(MaxVectorSize == 8, ""); return 8; } // Vector ideal reg -const uint Matcher::vector_ideal_reg(void) { +const int Matcher::vector_ideal_reg(int size) { + assert(MaxVectorSize == 8, ""); return Op_RegD; } +// Limits on vector size (number of elements) loaded into vector. +const int Matcher::max_vector_size(const BasicType bt) { + assert(is_java_primitive(bt), "only primitive type vectors"); + return vector_width_in_bytes(bt)/type2aelembytes(bt); +} + +const int Matcher::min_vector_size(const BasicType bt) { + return max_vector_size(bt); // Same as max. +} + +// SPARC doesn't support misaligned vectors store/load. +const bool Matcher::misaligned_vectors_ok() { + return false; +} + // USII supports fxtof through the whole range of number, USIII doesn't const bool Matcher::convL2FSupported(void) { return VM_Version::has_fast_fxtof(); @@ -3125,50 +3157,6 @@ enc_class enc_Array_Equals(o0RegP ary1, o1RegP ary2, g3RegP tmp1, notemp_iRegI r __ membar( Assembler::Membar_mask_bits(Assembler::StoreLoad) ); %} - enc_class enc_repl8b( iRegI src, iRegL dst ) %{ - MacroAssembler _masm(&cbuf); - Register src_reg = reg_to_register_object($src$$reg); - Register dst_reg = reg_to_register_object($dst$$reg); - __ sllx(src_reg, 56, dst_reg); - __ srlx(dst_reg, 8, O7); - __ or3 (dst_reg, O7, dst_reg); - __ srlx(dst_reg, 16, O7); - __ or3 (dst_reg, O7, dst_reg); - __ srlx(dst_reg, 32, O7); - __ or3 (dst_reg, O7, dst_reg); - %} - - enc_class enc_repl4b( iRegI src, iRegL dst ) %{ - MacroAssembler _masm(&cbuf); - Register src_reg = reg_to_register_object($src$$reg); - Register dst_reg = reg_to_register_object($dst$$reg); - __ sll(src_reg, 24, dst_reg); - __ srl(dst_reg, 8, O7); - __ or3(dst_reg, O7, dst_reg); - __ srl(dst_reg, 16, O7); - __ or3(dst_reg, O7, dst_reg); - %} - - enc_class enc_repl4s( iRegI src, iRegL dst ) %{ - MacroAssembler _masm(&cbuf); - Register src_reg = reg_to_register_object($src$$reg); - Register dst_reg = reg_to_register_object($dst$$reg); - __ sllx(src_reg, 48, dst_reg); - __ srlx(dst_reg, 16, O7); - __ or3 (dst_reg, O7, dst_reg); - __ srlx(dst_reg, 32, O7); - __ or3 (dst_reg, O7, dst_reg); - %} - - enc_class enc_repl2i( iRegI src, iRegL dst ) %{ - MacroAssembler _masm(&cbuf); - Register src_reg = reg_to_register_object($src$$reg); - Register dst_reg = reg_to_register_object($dst$$reg); - __ sllx(src_reg, 32, dst_reg); - __ srlx(dst_reg, 32, O7); - __ or3 (dst_reg, O7, dst_reg); - %} - %} //----------FRAME-------------------------------------------------------------- @@ -5932,50 +5920,6 @@ instruct loadL_unaligned(iRegL dst, memory mem, o7RegI tmp) %{ ins_pipe(iload_mem); %} -// Load Aligned Packed Byte into a Double Register -instruct loadA8B(regD dst, memory mem) %{ - match(Set dst (Load8B mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDDF $mem,$dst\t! packed8B" %} - opcode(Assembler::lddf_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(floadD_mem); -%} - -// Load Aligned Packed Char into a Double Register -instruct loadA4C(regD dst, memory mem) %{ - match(Set dst (Load4C mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDDF $mem,$dst\t! packed4C" %} - opcode(Assembler::lddf_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(floadD_mem); -%} - -// Load Aligned Packed Short into a Double Register -instruct loadA4S(regD dst, memory mem) %{ - match(Set dst (Load4S mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDDF $mem,$dst\t! packed4S" %} - opcode(Assembler::lddf_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(floadD_mem); -%} - -// Load Aligned Packed Int into a Double Register -instruct loadA2I(regD dst, memory mem) %{ - match(Set dst (Load2I mem)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "LDDF $mem,$dst\t! packed2I" %} - opcode(Assembler::lddf_op3); - ins_encode(simple_form3_mem_reg( mem, dst ) ); - ins_pipe(floadD_mem); -%} - // Load Range instruct loadRange(iRegI dst, memory mem) %{ match(Set dst (LoadRange mem)); @@ -6599,17 +6543,6 @@ instruct storeF0( memory mem, immF0 src) %{ ins_pipe(fstoreF_mem_zero); %} -// Store Aligned Packed Bytes in Double register to memory -instruct storeA8B(memory mem, regD src) %{ - match(Set mem (Store8B mem src)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STDF $src,$mem\t! packed8B" %} - opcode(Assembler::stdf_op3); - ins_encode(simple_form3_mem_reg( mem, src ) ); - ins_pipe(fstoreD_mem_reg); -%} - // Convert oop pointer into compressed form instruct encodeHeapOop(iRegN dst, iRegP src) %{ predicate(n->bottom_type()->make_ptr()->ptr() != TypePtr::NotNull); @@ -6654,62 +6587,6 @@ instruct decodeHeapOop_not_null(iRegP dst, iRegN src) %{ %} -// Store Zero into Aligned Packed Bytes -instruct storeA8B0(memory mem, immI0 zero) %{ - match(Set mem (Store8B mem zero)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STX $zero,$mem\t! packed8B" %} - opcode(Assembler::stx_op3); - ins_encode(simple_form3_mem_reg( mem, R_G0 ) ); - ins_pipe(fstoreD_mem_zero); -%} - -// Store Aligned Packed Chars/Shorts in Double register to memory -instruct storeA4C(memory mem, regD src) %{ - match(Set mem (Store4C mem src)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STDF $src,$mem\t! packed4C" %} - opcode(Assembler::stdf_op3); - ins_encode(simple_form3_mem_reg( mem, src ) ); - ins_pipe(fstoreD_mem_reg); -%} - -// Store Zero into Aligned Packed Chars/Shorts -instruct storeA4C0(memory mem, immI0 zero) %{ - match(Set mem (Store4C mem (Replicate4C zero))); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STX $zero,$mem\t! packed4C" %} - opcode(Assembler::stx_op3); - ins_encode(simple_form3_mem_reg( mem, R_G0 ) ); - ins_pipe(fstoreD_mem_zero); -%} - -// Store Aligned Packed Ints in Double register to memory -instruct storeA2I(memory mem, regD src) %{ - match(Set mem (Store2I mem src)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STDF $src,$mem\t! packed2I" %} - opcode(Assembler::stdf_op3); - ins_encode(simple_form3_mem_reg( mem, src ) ); - ins_pipe(fstoreD_mem_reg); -%} - -// Store Zero into Aligned Packed Ints -instruct storeA2I0(memory mem, immI0 zero) %{ - match(Set mem (Store2I mem zero)); - ins_cost(MEMORY_REF_COST); - size(4); - format %{ "STX $zero,$mem\t! packed2I" %} - opcode(Assembler::stx_op3); - ins_encode(simple_form3_mem_reg( mem, R_G0 ) ); - ins_pipe(fstoreD_mem_zero); -%} - - //----------MemBar Instructions----------------------------------------------- // Memory barrier flavors @@ -8880,150 +8757,6 @@ instruct shrL_reg_imm6_L2I(iRegI dst, iRegL src, immI_32_63 cnt) %{ ins_pipe(ialu_reg_imm); %} -// Replicate scalar to packed byte values in Double register -instruct Repl8B_reg_helper(iRegL dst, iRegI src) %{ - effect(DEF dst, USE src); - format %{ "SLLX $src,56,$dst\n\t" - "SRLX $dst, 8,O7\n\t" - "OR $dst,O7,$dst\n\t" - "SRLX $dst,16,O7\n\t" - "OR $dst,O7,$dst\n\t" - "SRLX $dst,32,O7\n\t" - "OR $dst,O7,$dst\t! replicate8B" %} - ins_encode( enc_repl8b(src, dst)); - ins_pipe(ialu_reg); -%} - -// Replicate scalar to packed byte values in Double register -instruct Repl8B_reg(stackSlotD dst, iRegI src) %{ - match(Set dst (Replicate8B src)); - expand %{ - iRegL tmp; - Repl8B_reg_helper(tmp, src); - regL_to_stkD(dst, tmp); - %} -%} - -// Replicate scalar constant to packed byte values in Double register -instruct Repl8B_immI(regD dst, immI13 con, o7RegI tmp) %{ - match(Set dst (Replicate8B con)); - effect(KILL tmp); - format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl8B($con)" %} - ins_encode %{ - // XXX This is a quick fix for 6833573. - //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 8, 1)), $dst$$FloatRegister); - RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 8, 1)), $tmp$$Register); - __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); - %} - ins_pipe(loadConFD); -%} - -// Replicate scalar to packed char values into stack slot -instruct Repl4C_reg_helper(iRegL dst, iRegI src) %{ - effect(DEF dst, USE src); - format %{ "SLLX $src,48,$dst\n\t" - "SRLX $dst,16,O7\n\t" - "OR $dst,O7,$dst\n\t" - "SRLX $dst,32,O7\n\t" - "OR $dst,O7,$dst\t! replicate4C" %} - ins_encode( enc_repl4s(src, dst) ); - ins_pipe(ialu_reg); -%} - -// Replicate scalar to packed char values into stack slot -instruct Repl4C_reg(stackSlotD dst, iRegI src) %{ - match(Set dst (Replicate4C src)); - expand %{ - iRegL tmp; - Repl4C_reg_helper(tmp, src); - regL_to_stkD(dst, tmp); - %} -%} - -// Replicate scalar constant to packed char values in Double register -instruct Repl4C_immI(regD dst, immI con, o7RegI tmp) %{ - match(Set dst (Replicate4C con)); - effect(KILL tmp); - format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4C($con)" %} - ins_encode %{ - // XXX This is a quick fix for 6833573. - //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister); - RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register); - __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); - %} - ins_pipe(loadConFD); -%} - -// Replicate scalar to packed short values into stack slot -instruct Repl4S_reg_helper(iRegL dst, iRegI src) %{ - effect(DEF dst, USE src); - format %{ "SLLX $src,48,$dst\n\t" - "SRLX $dst,16,O7\n\t" - "OR $dst,O7,$dst\n\t" - "SRLX $dst,32,O7\n\t" - "OR $dst,O7,$dst\t! replicate4S" %} - ins_encode( enc_repl4s(src, dst) ); - ins_pipe(ialu_reg); -%} - -// Replicate scalar to packed short values into stack slot -instruct Repl4S_reg(stackSlotD dst, iRegI src) %{ - match(Set dst (Replicate4S src)); - expand %{ - iRegL tmp; - Repl4S_reg_helper(tmp, src); - regL_to_stkD(dst, tmp); - %} -%} - -// Replicate scalar constant to packed short values in Double register -instruct Repl4S_immI(regD dst, immI con, o7RegI tmp) %{ - match(Set dst (Replicate4S con)); - effect(KILL tmp); - format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4S($con)" %} - ins_encode %{ - // XXX This is a quick fix for 6833573. - //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister); - RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register); - __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); - %} - ins_pipe(loadConFD); -%} - -// Replicate scalar to packed int values in Double register -instruct Repl2I_reg_helper(iRegL dst, iRegI src) %{ - effect(DEF dst, USE src); - format %{ "SLLX $src,32,$dst\n\t" - "SRLX $dst,32,O7\n\t" - "OR $dst,O7,$dst\t! replicate2I" %} - ins_encode( enc_repl2i(src, dst)); - ins_pipe(ialu_reg); -%} - -// Replicate scalar to packed int values in Double register -instruct Repl2I_reg(stackSlotD dst, iRegI src) %{ - match(Set dst (Replicate2I src)); - expand %{ - iRegL tmp; - Repl2I_reg_helper(tmp, src); - regL_to_stkD(dst, tmp); - %} -%} - -// Replicate scalar zero constant to packed int values in Double register -instruct Repl2I_immI(regD dst, immI con, o7RegI tmp) %{ - match(Set dst (Replicate2I con)); - effect(KILL tmp); - format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2I($con)" %} - ins_encode %{ - // XXX This is a quick fix for 6833573. - //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 2, 4)), $dst$$FloatRegister); - RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 2, 4)), $tmp$$Register); - __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); - %} - ins_pipe(loadConFD); -%} - //----------Control Flow Instructions------------------------------------------ // Compare Instructions // Compare Integers @@ -10742,6 +10475,308 @@ instruct storeS_reversed(indIndexMemory dst, iRegI src) %{ ins_pipe(istore_mem_reg); %} +// ====================VECTOR INSTRUCTIONS===================================== + +// Load Aligned Packed values into a Double Register +instruct loadV8(regD dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 8); + match(Set dst (LoadVector mem)); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "LDDF $mem,$dst\t! load vector (8 bytes)" %} + ins_encode %{ + __ ldf(FloatRegisterImpl::D, $mem$$Address, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(floadD_mem); +%} + +// Store Vector in Double register to memory +instruct storeV8(memory mem, regD src) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem src)); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STDF $src,$mem\t! store vector (8 bytes)" %} + ins_encode %{ + __ stf(FloatRegisterImpl::D, as_DoubleFloatRegister($src$$reg), $mem$$Address); + %} + ins_pipe(fstoreD_mem_reg); +%} + +// Store Zero into vector in memory +instruct storeV8B_zero(memory mem, immI0 zero) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem (ReplicateB zero))); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STX $zero,$mem\t! store zero vector (8 bytes)" %} + ins_encode %{ + __ stx(G0, $mem$$Address); + %} + ins_pipe(fstoreD_mem_zero); +%} + +instruct storeV4S_zero(memory mem, immI0 zero) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem (ReplicateS zero))); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STX $zero,$mem\t! store zero vector (4 shorts)" %} + ins_encode %{ + __ stx(G0, $mem$$Address); + %} + ins_pipe(fstoreD_mem_zero); +%} + +instruct storeV2I_zero(memory mem, immI0 zero) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem (ReplicateI zero))); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STX $zero,$mem\t! store zero vector (2 ints)" %} + ins_encode %{ + __ stx(G0, $mem$$Address); + %} + ins_pipe(fstoreD_mem_zero); +%} + +instruct storeV2F_zero(memory mem, immF0 zero) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem (ReplicateF zero))); + ins_cost(MEMORY_REF_COST); + size(4); + format %{ "STX $zero,$mem\t! store zero vector (2 floats)" %} + ins_encode %{ + __ stx(G0, $mem$$Address); + %} + ins_pipe(fstoreD_mem_zero); +%} + +// Replicate scalar to packed byte values into Double register +instruct Repl8B_reg(regD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 8 && UseVIS >= 3); + match(Set dst (ReplicateB src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,56,$tmp\n\t" + "SRLX $tmp, 8,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,16,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate8B\n\t" + "MOVXTOD $tmp,$dst\t! MoveL2D" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 56, Rtmp); + __ srlx(Rtmp, 8, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 16, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ movxtod(Rtmp, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar to packed byte values into Double stack +instruct Repl8B_stk(stackSlotD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 8 && UseVIS < 3); + match(Set dst (ReplicateB src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,56,$tmp\n\t" + "SRLX $tmp, 8,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,16,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate8B\n\t" + "STX $tmp,$dst\t! regL to stkD" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 56, Rtmp); + __ srlx(Rtmp, 8, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 16, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ set ($dst$$disp + STACK_BIAS, Rtmp2); + __ stx (Rtmp, Rtmp2, $dst$$base$$Register); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar constant to packed byte values in Double register +instruct Repl8B_immI(regD dst, immI13 con, o7RegI tmp) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateB con)); + effect(KILL tmp); + format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl8B($con)" %} + ins_encode %{ + // XXX This is a quick fix for 6833573. + //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 8, 1)), $dst$$FloatRegister); + RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 8, 1)), $tmp$$Register); + __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(loadConFD); +%} + +// Replicate scalar to packed char/short values into Double register +instruct Repl4S_reg(regD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 4 && UseVIS >= 3); + match(Set dst (ReplicateS src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,48,$tmp\n\t" + "SRLX $tmp,16,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate4S\n\t" + "MOVXTOD $tmp,$dst\t! MoveL2D" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 48, Rtmp); + __ srlx(Rtmp, 16, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ movxtod(Rtmp, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar to packed char/short values into Double stack +instruct Repl4S_stk(stackSlotD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 4 && UseVIS < 3); + match(Set dst (ReplicateS src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,48,$tmp\n\t" + "SRLX $tmp,16,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate4S\n\t" + "STX $tmp,$dst\t! regL to stkD" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 48, Rtmp); + __ srlx(Rtmp, 16, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ set ($dst$$disp + STACK_BIAS, Rtmp2); + __ stx (Rtmp, Rtmp2, $dst$$base$$Register); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar constant to packed char/short values in Double register +instruct Repl4S_immI(regD dst, immI con, o7RegI tmp) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateS con)); + effect(KILL tmp); + format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4S($con)" %} + ins_encode %{ + // XXX This is a quick fix for 6833573. + //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister); + RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register); + __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(loadConFD); +%} + +// Replicate scalar to packed int values into Double register +instruct Repl2I_reg(regD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 2 && UseVIS >= 3); + match(Set dst (ReplicateI src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,32,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate2I\n\t" + "MOVXTOD $tmp,$dst\t! MoveL2D" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 32, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ movxtod(Rtmp, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar to packed int values into Double stack +instruct Repl2I_stk(stackSlotD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{ + predicate(n->as_Vector()->length() == 2 && UseVIS < 3); + match(Set dst (ReplicateI src)); + effect(DEF dst, USE src, TEMP tmp, KILL tmp2); + format %{ "SLLX $src,32,$tmp\n\t" + "SRLX $tmp,32,$tmp2\n\t" + "OR $tmp,$tmp2,$tmp\t! replicate2I\n\t" + "STX $tmp,$dst\t! regL to stkD" %} + ins_encode %{ + Register Rsrc = $src$$Register; + Register Rtmp = $tmp$$Register; + Register Rtmp2 = $tmp2$$Register; + __ sllx(Rsrc, 32, Rtmp); + __ srlx(Rtmp, 32, Rtmp2); + __ or3 (Rtmp, Rtmp2, Rtmp); + __ set ($dst$$disp + STACK_BIAS, Rtmp2); + __ stx (Rtmp, Rtmp2, $dst$$base$$Register); + %} + ins_pipe(ialu_reg); +%} + +// Replicate scalar zero constant to packed int values in Double register +instruct Repl2I_immI(regD dst, immI con, o7RegI tmp) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI con)); + effect(KILL tmp); + format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2I($con)" %} + ins_encode %{ + // XXX This is a quick fix for 6833573. + //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 2, 4)), $dst$$FloatRegister); + RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 2, 4)), $tmp$$Register); + __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(loadConFD); +%} + +// Replicate scalar to packed float values into Double stack +instruct Repl2F_stk(stackSlotD dst, regF src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateF src)); + ins_cost(MEMORY_REF_COST*2); + format %{ "STF $src,$dst.hi\t! packed2F\n\t" + "STF $src,$dst.lo" %} + opcode(Assembler::stf_op3); + ins_encode(simple_form3_mem_reg(dst, src), form3_mem_plus_4_reg(dst, src)); + ins_pipe(fstoreF_stk_reg); +%} + +// Replicate scalar zero constant to packed float values in Double register +instruct Repl2F_immF(regD dst, immF con, o7RegI tmp) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateF con)); + effect(KILL tmp); + format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2F($con)" %} + ins_encode %{ + // XXX This is a quick fix for 6833573. + //__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immF($con$$constant)), $dst$$FloatRegister); + RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immF($con$$constant)), $tmp$$Register); + __ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg)); + %} + ins_pipe(loadConFD); +%} + //----------PEEPHOLE RULES----------------------------------------------------- // These must follow all instruction definitions as they use the names // defined in the instructions definitions. diff --git a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp index 1d4966217a0..ce1b0286067 100644 --- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -217,6 +217,8 @@ void VM_Version::initialize() { // Currently not supported anywhere. FLAG_SET_DEFAULT(UseFPUForSpilling, false); + MaxVectorSize = 8; + assert((InteriorEntryAlignment % relocInfo::addr_unit()) == 0, "alignment is not a multiple of NOP size"); #endif diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.cpp b/hotspot/src/cpu/x86/vm/assembler_x86.cpp index 8409fd73e18..9e58e2d06fc 100644 --- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp @@ -1637,6 +1637,13 @@ void Assembler::movaps(XMMRegister dst, XMMRegister src) { emit_byte(0xC0 | encode); } +void Assembler::movlhps(XMMRegister dst, XMMRegister src) { + NOT_LP64(assert(VM_Version::supports_sse(), "")); + int encode = simd_prefix_and_encode(dst, src, src, VEX_SIMD_NONE); + emit_byte(0x16); + emit_byte(0xC0 | encode); +} + void Assembler::movb(Register dst, Address src) { NOT_LP64(assert(dst->has_byte_register(), "must have byte register")); InstructionMark im(this); @@ -1686,6 +1693,14 @@ void Assembler::movdl(XMMRegister dst, Address src) { emit_operand(dst, src); } +void Assembler::movdl(Address dst, XMMRegister src) { + NOT_LP64(assert(VM_Version::supports_sse2(), "")); + InstructionMark im(this); + simd_prefix(dst, src, VEX_SIMD_66); + emit_byte(0x7E); + emit_operand(src, dst); +} + void Assembler::movdqa(XMMRegister dst, XMMRegister src) { NOT_LP64(assert(VM_Version::supports_sse2(), "")); int encode = simd_prefix_and_encode(dst, src, VEX_SIMD_66); @@ -1716,6 +1731,35 @@ void Assembler::movdqu(Address dst, XMMRegister src) { emit_operand(src, dst); } +// Move Unaligned 256bit Vector +void Assembler::vmovdqu(XMMRegister dst, XMMRegister src) { + assert(UseAVX, ""); + bool vector256 = true; + int encode = vex_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_F3, vector256); + emit_byte(0x6F); + emit_byte(0xC0 | encode); +} + +void Assembler::vmovdqu(XMMRegister dst, Address src) { + assert(UseAVX, ""); + InstructionMark im(this); + bool vector256 = true; + vex_prefix(dst, xnoreg, src, VEX_SIMD_F3, vector256); + emit_byte(0x6F); + emit_operand(dst, src); +} + +void Assembler::vmovdqu(Address dst, XMMRegister src) { + assert(UseAVX, ""); + InstructionMark im(this); + bool vector256 = true; + // swap src<->dst for encoding + assert(src != xnoreg, "sanity"); + vex_prefix(src, xnoreg, dst, VEX_SIMD_F3, vector256); + emit_byte(0x7F); + emit_operand(src, dst); +} + // Uses zero extension on 64bit void Assembler::movl(Register dst, int32_t imm32) { @@ -2529,6 +2573,13 @@ void Assembler::punpckldq(XMMRegister dst, XMMRegister src) { emit_byte(0xC0 | encode); } +void Assembler::punpcklqdq(XMMRegister dst, XMMRegister src) { + NOT_LP64(assert(VM_Version::supports_sse2(), "")); + int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66); + emit_byte(0x6C); + emit_byte(0xC0 | encode); +} + void Assembler::push(int32_t imm32) { // in 64bits we push 64bits onto the stack but only // take a 32bit immediate @@ -3112,6 +3163,13 @@ void Assembler::vxorpd(XMMRegister dst, XMMRegister nds, Address src) { emit_operand(dst, src); } +void Assembler::vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { + assert(VM_Version::supports_avx(), ""); + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256); + emit_byte(0x57); + emit_byte(0xC0 | encode); +} + void Assembler::vxorps(XMMRegister dst, XMMRegister nds, Address src) { assert(VM_Version::supports_avx(), ""); InstructionMark im(this); @@ -3120,6 +3178,48 @@ void Assembler::vxorps(XMMRegister dst, XMMRegister nds, Address src) { emit_operand(dst, src); } +void Assembler::vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { + assert(VM_Version::supports_avx(), ""); + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_NONE, vector256); + emit_byte(0x57); + emit_byte(0xC0 | encode); +} + +void Assembler::vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { + assert(VM_Version::supports_avx2() || (!vector256) && VM_Version::supports_avx(), ""); + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256); + emit_byte(0xEF); + emit_byte(0xC0 | encode); +} + +void Assembler::vinsertf128h(XMMRegister dst, XMMRegister nds, XMMRegister src) { + assert(VM_Version::supports_avx(), ""); + bool vector256 = true; + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_3A); + emit_byte(0x18); + emit_byte(0xC0 | encode); + // 0x00 - insert into lower 128 bits + // 0x01 - insert into upper 128 bits + emit_byte(0x01); +} + +void Assembler::vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src) { + assert(VM_Version::supports_avx2(), ""); + bool vector256 = true; + int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_3A); + emit_byte(0x38); + emit_byte(0xC0 | encode); + // 0x00 - insert into lower 128 bits + // 0x01 - insert into upper 128 bits + emit_byte(0x01); +} + +void Assembler::vzeroupper() { + assert(VM_Version::supports_avx(), ""); + (void)vex_prefix_and_encode(xmm0, xmm0, xmm0, VEX_SIMD_NONE); + emit_byte(0x77); +} + #ifndef _LP64 // 32bit only pieces of the assembler @@ -7405,6 +7505,24 @@ void MacroAssembler::movbyte(ArrayAddress dst, int src) { movb(as_Address(dst), src); } +void MacroAssembler::movdl(XMMRegister dst, AddressLiteral src) { + if (reachable(src)) { + movdl(dst, as_Address(src)); + } else { + lea(rscratch1, src); + movdl(dst, Address(rscratch1, 0)); + } +} + +void MacroAssembler::movq(XMMRegister dst, AddressLiteral src) { + if (reachable(src)) { + movq(dst, as_Address(src)); + } else { + lea(rscratch1, src); + movq(dst, Address(rscratch1, 0)); + } +} + void MacroAssembler::movdbl(XMMRegister dst, AddressLiteral src) { if (reachable(src)) { if (UseXmmLoadAndClearUpper) { diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.hpp b/hotspot/src/cpu/x86/vm/assembler_x86.hpp index 2e2fca03354..4ba26e5f1af 100644 --- a/hotspot/src/cpu/x86/vm/assembler_x86.hpp +++ b/hotspot/src/cpu/x86/vm/assembler_x86.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -591,8 +591,9 @@ private: void vex_prefix(XMMRegister dst, XMMRegister nds, Address src, VexSimdPrefix pre, bool vector256 = false) { - vex_prefix(src, nds->encoding(), dst->encoding(), - pre, VEX_OPCODE_0F, false, vector256); + int dst_enc = dst->encoding(); + int nds_enc = nds->is_valid() ? nds->encoding() : 0; + vex_prefix(src, nds_enc, dst_enc, pre, VEX_OPCODE_0F, false, vector256); } int vex_prefix_and_encode(int dst_enc, int nds_enc, int src_enc, @@ -600,9 +601,12 @@ private: bool vex_w, bool vector256); int vex_prefix_and_encode(XMMRegister dst, XMMRegister nds, XMMRegister src, - VexSimdPrefix pre, bool vector256 = false) { - return vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), - pre, VEX_OPCODE_0F, false, vector256); + VexSimdPrefix pre, bool vector256 = false, + VexOpcode opc = VEX_OPCODE_0F) { + int src_enc = src->encoding(); + int dst_enc = dst->encoding(); + int nds_enc = nds->is_valid() ? nds->encoding() : 0; + return vex_prefix_and_encode(dst_enc, nds_enc, src_enc, pre, opc, false, vector256); } void simd_prefix(XMMRegister xreg, XMMRegister nds, Address adr, @@ -1261,6 +1265,7 @@ private: void movdl(XMMRegister dst, Register src); void movdl(Register dst, XMMRegister src); void movdl(XMMRegister dst, Address src); + void movdl(Address dst, XMMRegister src); // Move Double Quadword void movdq(XMMRegister dst, Register src); @@ -1274,6 +1279,14 @@ private: void movdqu(XMMRegister dst, Address src); void movdqu(XMMRegister dst, XMMRegister src); + // Move Unaligned 256bit Vector + void vmovdqu(Address dst, XMMRegister src); + void vmovdqu(XMMRegister dst, Address src); + void vmovdqu(XMMRegister dst, XMMRegister src); + + // Move lower 64bit to high 64bit in 128bit register + void movlhps(XMMRegister dst, XMMRegister src); + void movl(Register dst, int32_t imm32); void movl(Address dst, int32_t imm32); void movl(Register dst, Register src); @@ -1453,6 +1466,9 @@ private: void punpckldq(XMMRegister dst, XMMRegister src); void punpckldq(XMMRegister dst, Address src); + // Interleave Low Quadwords + void punpcklqdq(XMMRegister dst, XMMRegister src); + #ifndef _LP64 // no 32bit push/pop on amd64 void pushl(Address src); #endif @@ -1593,13 +1609,11 @@ private: void set_byte_if_not_zero(Register dst); // sets reg to 1 if not zero, otherwise 0 - // AVX 3-operands instructions (encoded with VEX prefix) + // AVX 3-operands scalar instructions (encoded with VEX prefix) void vaddsd(XMMRegister dst, XMMRegister nds, Address src); void vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src); void vaddss(XMMRegister dst, XMMRegister nds, Address src); void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src); - void vandpd(XMMRegister dst, XMMRegister nds, Address src); - void vandps(XMMRegister dst, XMMRegister nds, Address src); void vdivsd(XMMRegister dst, XMMRegister nds, Address src); void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src); void vdivss(XMMRegister dst, XMMRegister nds, Address src); @@ -1612,9 +1626,24 @@ private: void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src); void vsubss(XMMRegister dst, XMMRegister nds, Address src); void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src); + + // AVX Vector instrucitons. + void vandpd(XMMRegister dst, XMMRegister nds, Address src); + void vandps(XMMRegister dst, XMMRegister nds, Address src); void vxorpd(XMMRegister dst, XMMRegister nds, Address src); void vxorps(XMMRegister dst, XMMRegister nds, Address src); + void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256); + void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256); + void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256); + void vinsertf128h(XMMRegister dst, XMMRegister nds, XMMRegister src); + void vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src); + // AVX instruction which is used to clear upper 128 bits of YMM registers and + // to avoid transaction penalty between AVX and SSE states. There is no + // penalty if legacy SSE instructions are encoded using VEX prefix because + // they always clear upper 128 bits. It should be used before calling + // runtime code and native libraries. + void vzeroupper(); protected: // Next instructions require address alignment 16 bytes SSE mode. @@ -2529,12 +2558,30 @@ public: void vsubss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubss(dst, nds, src); } void vsubss(XMMRegister dst, XMMRegister nds, AddressLiteral src); + // AVX Vector instructions + + void vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vxorpd(dst, nds, src, vector256); } void vxorpd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vxorpd(dst, nds, src); } void vxorpd(XMMRegister dst, XMMRegister nds, AddressLiteral src); + void vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { Assembler::vxorps(dst, nds, src, vector256); } void vxorps(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vxorps(dst, nds, src); } void vxorps(XMMRegister dst, XMMRegister nds, AddressLiteral src); + void vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) { + if (UseAVX > 1 || !vector256) // vpxor 256 bit is available only in AVX2 + Assembler::vpxor(dst, nds, src, vector256); + else + Assembler::vxorpd(dst, nds, src, vector256); + } + + // Move packed integer values from low 128 bit to hign 128 bit in 256 bit vector. + void vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src) { + if (UseAVX > 1) // vinserti128h is available only in AVX2 + Assembler::vinserti128h(dst, nds, src); + else + Assembler::vinsertf128h(dst, nds, src); + } // Data @@ -2587,6 +2634,13 @@ public: // to avoid hiding movb void movbyte(ArrayAddress dst, int src); + // Import other mov() methods from the parent class or else + // they will be hidden by the following overriding declaration. + using Assembler::movdl; + using Assembler::movq; + void movdl(XMMRegister dst, AddressLiteral src); + void movq(XMMRegister dst, AddressLiteral src); + // Can push value or effective address void pushptr(AddressLiteral src); diff --git a/hotspot/src/cpu/x86/vm/register_x86.cpp b/hotspot/src/cpu/x86/vm/register_x86.cpp index a6301eafe4d..a3763a3498f 100644 --- a/hotspot/src/cpu/x86/vm/register_x86.cpp +++ b/hotspot/src/cpu/x86/vm/register_x86.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ const int ConcreteRegisterImpl::max_gpr = RegisterImpl::number_of_registers << 1 const int ConcreteRegisterImpl::max_fpr = ConcreteRegisterImpl::max_gpr + 2 * FloatRegisterImpl::number_of_registers; const int ConcreteRegisterImpl::max_xmm = ConcreteRegisterImpl::max_fpr + - 2 * XMMRegisterImpl::number_of_registers; + 8 * XMMRegisterImpl::number_of_registers; const char* RegisterImpl::name() const { const char* names[number_of_registers] = { #ifndef AMD64 diff --git a/hotspot/src/cpu/x86/vm/register_x86.hpp b/hotspot/src/cpu/x86/vm/register_x86.hpp index 2f4cd0dcac6..680dd900a48 100644 --- a/hotspot/src/cpu/x86/vm/register_x86.hpp +++ b/hotspot/src/cpu/x86/vm/register_x86.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -158,7 +158,7 @@ class XMMRegisterImpl: public AbstractRegisterImpl { XMMRegister successor() const { return as_XMMRegister(encoding() + 1); } // accessors - int encoding() const { assert(is_valid(), "invalid register"); return (intptr_t)this; } + int encoding() const { assert(is_valid(), err_msg("invalid register (%d)", (int)(intptr_t)this )); return (intptr_t)this; } bool is_valid() const { return 0 <= (intptr_t)this && (intptr_t)this < number_of_registers; } const char* name() const; }; @@ -216,7 +216,7 @@ class ConcreteRegisterImpl : public AbstractRegisterImpl { RegisterImpl::number_of_registers + // "H" half of a 64bit register #endif // AMD64 2 * FloatRegisterImpl::number_of_registers + - 2 * XMMRegisterImpl::number_of_registers + + 8 * XMMRegisterImpl::number_of_registers + 1 // eflags }; diff --git a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp index 121be7a2ba7..12f3f258415 100644 --- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp +++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp @@ -467,6 +467,32 @@ void VM_Version::get_processor_features() { if (!supports_avx ()) // Drop to 0 if no AVX support UseAVX = 0; +#ifdef COMPILER2 + if (UseFPUForSpilling) { + if (UseSSE < 2) { + // Only supported with SSE2+ + FLAG_SET_DEFAULT(UseFPUForSpilling, false); + } + } + if (MaxVectorSize > 0) { + if (!is_power_of_2(MaxVectorSize)) { + warning("MaxVectorSize must be a power of 2"); + FLAG_SET_DEFAULT(MaxVectorSize, 32); + } + if (MaxVectorSize > 32) { + FLAG_SET_DEFAULT(MaxVectorSize, 32); + } + if (MaxVectorSize > 16 && UseAVX == 0) { + // Only supported with AVX+ + FLAG_SET_DEFAULT(MaxVectorSize, 16); + } + if (UseSSE < 2) { + // Only supported with SSE2+ + FLAG_SET_DEFAULT(MaxVectorSize, 0); + } + } +#endif + // On new cpus instructions which update whole XMM register should be used // to prevent partial register stall due to dependencies on high half. // @@ -536,7 +562,7 @@ void VM_Version::get_processor_features() { AllocatePrefetchInstr = 3; } // On family 15h processors use XMM and UnalignedLoadStores for Array Copy - if( FLAG_IS_DEFAULT(UseXMMForArrayCopy) ) { + if( supports_sse2() && FLAG_IS_DEFAULT(UseXMMForArrayCopy) ) { UseXMMForArrayCopy = true; } if( FLAG_IS_DEFAULT(UseUnalignedLoadStores) && UseXMMForArrayCopy ) { @@ -544,6 +570,12 @@ void VM_Version::get_processor_features() { } } +#ifdef COMPILER2 + if (MaxVectorSize > 16) { + // Limit vectors size to 16 bytes on current AMD cpus. + FLAG_SET_DEFAULT(MaxVectorSize, 16); + } +#endif // COMPILER2 } if( is_intel() ) { // Intel cpus specific settings @@ -606,15 +638,6 @@ void VM_Version::get_processor_features() { FLAG_SET_DEFAULT(UsePopCountInstruction, false); } -#ifdef COMPILER2 - if (UseFPUForSpilling) { - if (UseSSE < 2) { - // Only supported with SSE2+ - FLAG_SET_DEFAULT(UseFPUForSpilling, false); - } - } -#endif - assert(0 <= ReadPrefetchInstr && ReadPrefetchInstr <= 3, "invalid value"); assert(0 <= AllocatePrefetchInstr && AllocatePrefetchInstr <= 3, "invalid value"); diff --git a/hotspot/src/cpu/x86/vm/vmreg_x86.cpp b/hotspot/src/cpu/x86/vm/vmreg_x86.cpp index a0bfe6e69c1..89959771ea2 100644 --- a/hotspot/src/cpu/x86/vm/vmreg_x86.cpp +++ b/hotspot/src/cpu/x86/vm/vmreg_x86.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,8 +48,9 @@ void VMRegImpl::set_regName() { XMMRegister xreg = ::as_XMMRegister(0); for ( ; i < ConcreteRegisterImpl::max_xmm ; ) { - regName[i++] = xreg->name(); - regName[i++] = xreg->name(); + for (int j = 0 ; j < 8 ; j++) { + regName[i++] = xreg->name(); + } xreg = xreg->successor(); } for ( ; i < ConcreteRegisterImpl::number_of_registers ; i ++ ) { diff --git a/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp b/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp index 88201bd3d83..0608d3edbff 100644 --- a/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp +++ b/hotspot/src/cpu/x86/vm/vmreg_x86.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,7 +39,7 @@ inline VMReg FloatRegisterImpl::as_VMReg() { } inline VMReg XMMRegisterImpl::as_VMReg() { - return VMRegImpl::as_VMReg((encoding() << 1) + ConcreteRegisterImpl::max_fpr); + return VMRegImpl::as_VMReg((encoding() << 3) + ConcreteRegisterImpl::max_fpr); } @@ -75,7 +75,7 @@ inline FloatRegister VMRegImpl::as_FloatRegister() { inline XMMRegister VMRegImpl::as_XMMRegister() { assert( is_XMMRegister() && is_even(value()), "must be" ); // Yuk - return ::as_XMMRegister((value() - ConcreteRegisterImpl::max_fpr) >> 1); + return ::as_XMMRegister((value() - ConcreteRegisterImpl::max_fpr) >> 3); } inline bool VMRegImpl::is_concrete() { diff --git a/hotspot/src/cpu/x86/vm/x86.ad b/hotspot/src/cpu/x86/vm/x86.ad index 6bd91287fc0..de512c37be7 100644 --- a/hotspot/src/cpu/x86/vm/x86.ad +++ b/hotspot/src/cpu/x86/vm/x86.ad @@ -24,6 +24,456 @@ // X86 Common Architecture Description File +//----------REGISTER DEFINITION BLOCK------------------------------------------ +// This information is used by the matcher and the register allocator to +// describe individual registers and classes of registers within the target +// archtecture. + +register %{ +//----------Architecture Description Register Definitions---------------------- +// General Registers +// "reg_def" name ( register save type, C convention save type, +// ideal register type, encoding ); +// Register Save Types: +// +// NS = No-Save: The register allocator assumes that these registers +// can be used without saving upon entry to the method, & +// that they do not need to be saved at call sites. +// +// SOC = Save-On-Call: The register allocator assumes that these registers +// can be used without saving upon entry to the method, +// but that they must be saved at call sites. +// +// SOE = Save-On-Entry: The register allocator assumes that these registers +// must be saved before using them upon entry to the +// method, but they do not need to be saved at call +// sites. +// +// AS = Always-Save: The register allocator assumes that these registers +// must be saved before using them upon entry to the +// method, & that they must be saved at call sites. +// +// Ideal Register Type is used to determine how to save & restore a +// register. Op_RegI will get spilled with LoadI/StoreI, Op_RegP will get +// spilled with LoadP/StoreP. If the register supports both, use Op_RegI. +// +// The encoding number is the actual bit-pattern placed into the opcodes. + +// XMM registers. 256-bit registers or 8 words each, labeled (a)-h. +// Word a in each register holds a Float, words ab hold a Double. +// The whole registers are used in SSE4.2 version intrinsics, +// array copy stubs and superword operations (see UseSSE42Intrinsics, +// UseXMMForArrayCopy and UseSuperword flags). +// XMM8-XMM15 must be encoded with REX (VEX for UseAVX). +// Linux ABI: No register preserved across function calls +// XMM0-XMM7 might hold parameters +// Windows ABI: XMM6-XMM15 preserved across function calls +// XMM0-XMM3 might hold parameters + +reg_def XMM0 ( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()); +reg_def XMM0b( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(1)); +reg_def XMM0c( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(2)); +reg_def XMM0d( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(3)); +reg_def XMM0e( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(4)); +reg_def XMM0f( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(5)); +reg_def XMM0g( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(6)); +reg_def XMM0h( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next(7)); + +reg_def XMM1 ( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()); +reg_def XMM1b( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(1)); +reg_def XMM1c( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(2)); +reg_def XMM1d( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(3)); +reg_def XMM1e( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(4)); +reg_def XMM1f( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(5)); +reg_def XMM1g( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(6)); +reg_def XMM1h( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next(7)); + +reg_def XMM2 ( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()); +reg_def XMM2b( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(1)); +reg_def XMM2c( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(2)); +reg_def XMM2d( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(3)); +reg_def XMM2e( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(4)); +reg_def XMM2f( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(5)); +reg_def XMM2g( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(6)); +reg_def XMM2h( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next(7)); + +reg_def XMM3 ( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()); +reg_def XMM3b( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(1)); +reg_def XMM3c( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(2)); +reg_def XMM3d( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(3)); +reg_def XMM3e( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(4)); +reg_def XMM3f( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(5)); +reg_def XMM3g( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(6)); +reg_def XMM3h( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next(7)); + +reg_def XMM4 ( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()); +reg_def XMM4b( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(1)); +reg_def XMM4c( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(2)); +reg_def XMM4d( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(3)); +reg_def XMM4e( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(4)); +reg_def XMM4f( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(5)); +reg_def XMM4g( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(6)); +reg_def XMM4h( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next(7)); + +reg_def XMM5 ( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()); +reg_def XMM5b( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(1)); +reg_def XMM5c( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(2)); +reg_def XMM5d( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(3)); +reg_def XMM5e( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(4)); +reg_def XMM5f( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(5)); +reg_def XMM5g( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(6)); +reg_def XMM5h( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next(7)); + +#ifdef _WIN64 + +reg_def XMM6 ( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()); +reg_def XMM6b( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(1)); +reg_def XMM6c( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(2)); +reg_def XMM6d( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(3)); +reg_def XMM6e( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(4)); +reg_def XMM6f( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(5)); +reg_def XMM6g( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(6)); +reg_def XMM6h( SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next(7)); + +reg_def XMM7 ( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()); +reg_def XMM7b( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(1)); +reg_def XMM7c( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(2)); +reg_def XMM7d( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(3)); +reg_def XMM7e( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(4)); +reg_def XMM7f( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(5)); +reg_def XMM7g( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(6)); +reg_def XMM7h( SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next(7)); + +reg_def XMM8 ( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()); +reg_def XMM8b( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(1)); +reg_def XMM8c( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(2)); +reg_def XMM8d( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(3)); +reg_def XMM8e( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(4)); +reg_def XMM8f( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(5)); +reg_def XMM8g( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(6)); +reg_def XMM8h( SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next(7)); + +reg_def XMM9 ( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()); +reg_def XMM9b( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(1)); +reg_def XMM9c( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(2)); +reg_def XMM9d( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(3)); +reg_def XMM9e( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(4)); +reg_def XMM9f( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(5)); +reg_def XMM9g( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(6)); +reg_def XMM9h( SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next(7)); + +reg_def XMM10 ( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()); +reg_def XMM10b( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(1)); +reg_def XMM10c( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(2)); +reg_def XMM10d( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(3)); +reg_def XMM10e( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(4)); +reg_def XMM10f( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(5)); +reg_def XMM10g( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(6)); +reg_def XMM10h( SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next(7)); + +reg_def XMM11 ( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()); +reg_def XMM11b( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(1)); +reg_def XMM11c( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(2)); +reg_def XMM11d( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(3)); +reg_def XMM11e( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(4)); +reg_def XMM11f( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(5)); +reg_def XMM11g( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(6)); +reg_def XMM11h( SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next(7)); + +reg_def XMM12 ( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()); +reg_def XMM12b( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(1)); +reg_def XMM12c( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(2)); +reg_def XMM12d( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(3)); +reg_def XMM12e( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(4)); +reg_def XMM12f( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(5)); +reg_def XMM12g( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(6)); +reg_def XMM12h( SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next(7)); + +reg_def XMM13 ( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()); +reg_def XMM13b( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(1)); +reg_def XMM13c( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(2)); +reg_def XMM13d( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(3)); +reg_def XMM13e( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(4)); +reg_def XMM13f( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(5)); +reg_def XMM13g( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(6)); +reg_def XMM13h( SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next(7)); + +reg_def XMM14 ( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()); +reg_def XMM14b( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(1)); +reg_def XMM14c( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(2)); +reg_def XMM14d( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(3)); +reg_def XMM14e( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(4)); +reg_def XMM14f( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(5)); +reg_def XMM14g( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(6)); +reg_def XMM14h( SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next(7)); + +reg_def XMM15 ( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()); +reg_def XMM15b( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(1)); +reg_def XMM15c( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(2)); +reg_def XMM15d( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(3)); +reg_def XMM15e( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(4)); +reg_def XMM15f( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(5)); +reg_def XMM15g( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(6)); +reg_def XMM15h( SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next(7)); + +#else // _WIN64 + +reg_def XMM6 ( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()); +reg_def XMM6b( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(1)); +reg_def XMM6c( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(2)); +reg_def XMM6d( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(3)); +reg_def XMM6e( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(4)); +reg_def XMM6f( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(5)); +reg_def XMM6g( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(6)); +reg_def XMM6h( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next(7)); + +reg_def XMM7 ( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()); +reg_def XMM7b( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(1)); +reg_def XMM7c( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(2)); +reg_def XMM7d( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(3)); +reg_def XMM7e( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(4)); +reg_def XMM7f( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(5)); +reg_def XMM7g( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(6)); +reg_def XMM7h( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next(7)); + +#ifdef _LP64 + +reg_def XMM8 ( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()); +reg_def XMM8b( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(1)); +reg_def XMM8c( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(2)); +reg_def XMM8d( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(3)); +reg_def XMM8e( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(4)); +reg_def XMM8f( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(5)); +reg_def XMM8g( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(6)); +reg_def XMM8h( SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next(7)); + +reg_def XMM9 ( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()); +reg_def XMM9b( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(1)); +reg_def XMM9c( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(2)); +reg_def XMM9d( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(3)); +reg_def XMM9e( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(4)); +reg_def XMM9f( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(5)); +reg_def XMM9g( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(6)); +reg_def XMM9h( SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next(7)); + +reg_def XMM10 ( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()); +reg_def XMM10b( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(1)); +reg_def XMM10c( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(2)); +reg_def XMM10d( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(3)); +reg_def XMM10e( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(4)); +reg_def XMM10f( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(5)); +reg_def XMM10g( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(6)); +reg_def XMM10h( SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next(7)); + +reg_def XMM11 ( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()); +reg_def XMM11b( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(1)); +reg_def XMM11c( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(2)); +reg_def XMM11d( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(3)); +reg_def XMM11e( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(4)); +reg_def XMM11f( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(5)); +reg_def XMM11g( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(6)); +reg_def XMM11h( SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next(7)); + +reg_def XMM12 ( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()); +reg_def XMM12b( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(1)); +reg_def XMM12c( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(2)); +reg_def XMM12d( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(3)); +reg_def XMM12e( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(4)); +reg_def XMM12f( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(5)); +reg_def XMM12g( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(6)); +reg_def XMM12h( SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next(7)); + +reg_def XMM13 ( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()); +reg_def XMM13b( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(1)); +reg_def XMM13c( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(2)); +reg_def XMM13d( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(3)); +reg_def XMM13e( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(4)); +reg_def XMM13f( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(5)); +reg_def XMM13g( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(6)); +reg_def XMM13h( SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next(7)); + +reg_def XMM14 ( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()); +reg_def XMM14b( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(1)); +reg_def XMM14c( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(2)); +reg_def XMM14d( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(3)); +reg_def XMM14e( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(4)); +reg_def XMM14f( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(5)); +reg_def XMM14g( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(6)); +reg_def XMM14h( SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next(7)); + +reg_def XMM15 ( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()); +reg_def XMM15b( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(1)); +reg_def XMM15c( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(2)); +reg_def XMM15d( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(3)); +reg_def XMM15e( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(4)); +reg_def XMM15f( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(5)); +reg_def XMM15g( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(6)); +reg_def XMM15h( SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next(7)); + +#endif // _LP64 + +#endif // _WIN64 + +#ifdef _LP64 +reg_def RFLAGS(SOC, SOC, 0, 16, VMRegImpl::Bad()); +#else +reg_def RFLAGS(SOC, SOC, 0, 8, VMRegImpl::Bad()); +#endif // _LP64 + +alloc_class chunk1(XMM0, XMM0b, XMM0c, XMM0d, XMM0e, XMM0f, XMM0g, XMM0h, + XMM1, XMM1b, XMM1c, XMM1d, XMM1e, XMM1f, XMM1g, XMM1h, + XMM2, XMM2b, XMM2c, XMM2d, XMM2e, XMM2f, XMM2g, XMM2h, + XMM3, XMM3b, XMM3c, XMM3d, XMM3e, XMM3f, XMM3g, XMM3h, + XMM4, XMM4b, XMM4c, XMM4d, XMM4e, XMM4f, XMM4g, XMM4h, + XMM5, XMM5b, XMM5c, XMM5d, XMM5e, XMM5f, XMM5g, XMM5h, + XMM6, XMM6b, XMM6c, XMM6d, XMM6e, XMM6f, XMM6g, XMM6h, + XMM7, XMM7b, XMM7c, XMM7d, XMM7e, XMM7f, XMM7g, XMM7h +#ifdef _LP64 + ,XMM8, XMM8b, XMM8c, XMM8d, XMM8e, XMM8f, XMM8g, XMM8h, + XMM9, XMM9b, XMM9c, XMM9d, XMM9e, XMM9f, XMM9g, XMM9h, + XMM10, XMM10b, XMM10c, XMM10d, XMM10e, XMM10f, XMM10g, XMM10h, + XMM11, XMM11b, XMM11c, XMM11d, XMM11e, XMM11f, XMM11g, XMM11h, + XMM12, XMM12b, XMM12c, XMM12d, XMM12e, XMM12f, XMM12g, XMM12h, + XMM13, XMM13b, XMM13c, XMM13d, XMM13e, XMM13f, XMM13g, XMM13h, + XMM14, XMM14b, XMM14c, XMM14d, XMM14e, XMM14f, XMM14g, XMM14h, + XMM15, XMM15b, XMM15c, XMM15d, XMM15e, XMM15f, XMM15g, XMM15h +#endif + ); + +// flags allocation class should be last. +alloc_class chunk2(RFLAGS); + +// Singleton class for condition codes +reg_class int_flags(RFLAGS); + +// Class for all float registers +reg_class float_reg(XMM0, + XMM1, + XMM2, + XMM3, + XMM4, + XMM5, + XMM6, + XMM7 +#ifdef _LP64 + ,XMM8, + XMM9, + XMM10, + XMM11, + XMM12, + XMM13, + XMM14, + XMM15 +#endif + ); + +// Class for all double registers +reg_class double_reg(XMM0, XMM0b, + XMM1, XMM1b, + XMM2, XMM2b, + XMM3, XMM3b, + XMM4, XMM4b, + XMM5, XMM5b, + XMM6, XMM6b, + XMM7, XMM7b +#ifdef _LP64 + ,XMM8, XMM8b, + XMM9, XMM9b, + XMM10, XMM10b, + XMM11, XMM11b, + XMM12, XMM12b, + XMM13, XMM13b, + XMM14, XMM14b, + XMM15, XMM15b +#endif + ); + +// Class for all 32bit vector registers +reg_class vectors_reg(XMM0, + XMM1, + XMM2, + XMM3, + XMM4, + XMM5, + XMM6, + XMM7 +#ifdef _LP64 + ,XMM8, + XMM9, + XMM10, + XMM11, + XMM12, + XMM13, + XMM14, + XMM15 +#endif + ); + +// Class for all 64bit vector registers +reg_class vectord_reg(XMM0, XMM0b, + XMM1, XMM1b, + XMM2, XMM2b, + XMM3, XMM3b, + XMM4, XMM4b, + XMM5, XMM5b, + XMM6, XMM6b, + XMM7, XMM7b +#ifdef _LP64 + ,XMM8, XMM8b, + XMM9, XMM9b, + XMM10, XMM10b, + XMM11, XMM11b, + XMM12, XMM12b, + XMM13, XMM13b, + XMM14, XMM14b, + XMM15, XMM15b +#endif + ); + +// Class for all 128bit vector registers +reg_class vectorx_reg(XMM0, XMM0b, XMM0c, XMM0d, + XMM1, XMM1b, XMM1c, XMM1d, + XMM2, XMM2b, XMM2c, XMM2d, + XMM3, XMM3b, XMM3c, XMM3d, + XMM4, XMM4b, XMM4c, XMM4d, + XMM5, XMM5b, XMM5c, XMM5d, + XMM6, XMM6b, XMM6c, XMM6d, + XMM7, XMM7b, XMM7c, XMM7d +#ifdef _LP64 + ,XMM8, XMM8b, XMM8c, XMM8d, + XMM9, XMM9b, XMM9c, XMM9d, + XMM10, XMM10b, XMM10c, XMM10d, + XMM11, XMM11b, XMM11c, XMM11d, + XMM12, XMM12b, XMM12c, XMM12d, + XMM13, XMM13b, XMM13c, XMM13d, + XMM14, XMM14b, XMM14c, XMM14d, + XMM15, XMM15b, XMM15c, XMM15d +#endif + ); + +// Class for all 256bit vector registers +reg_class vectory_reg(XMM0, XMM0b, XMM0c, XMM0d, XMM0e, XMM0f, XMM0g, XMM0h, + XMM1, XMM1b, XMM1c, XMM1d, XMM1e, XMM1f, XMM1g, XMM1h, + XMM2, XMM2b, XMM2c, XMM2d, XMM2e, XMM2f, XMM2g, XMM2h, + XMM3, XMM3b, XMM3c, XMM3d, XMM3e, XMM3f, XMM3g, XMM3h, + XMM4, XMM4b, XMM4c, XMM4d, XMM4e, XMM4f, XMM4g, XMM4h, + XMM5, XMM5b, XMM5c, XMM5d, XMM5e, XMM5f, XMM5g, XMM5h, + XMM6, XMM6b, XMM6c, XMM6d, XMM6e, XMM6f, XMM6g, XMM6h, + XMM7, XMM7b, XMM7c, XMM7d, XMM7e, XMM7f, XMM7g, XMM7h +#ifdef _LP64 + ,XMM8, XMM8b, XMM8c, XMM8d, XMM8e, XMM8f, XMM8g, XMM8h, + XMM9, XMM9b, XMM9c, XMM9d, XMM9e, XMM9f, XMM9g, XMM9h, + XMM10, XMM10b, XMM10c, XMM10d, XMM10e, XMM10f, XMM10g, XMM10h, + XMM11, XMM11b, XMM11c, XMM11d, XMM11e, XMM11f, XMM11g, XMM11h, + XMM12, XMM12b, XMM12c, XMM12d, XMM12e, XMM12f, XMM12g, XMM12h, + XMM13, XMM13b, XMM13c, XMM13d, XMM13e, XMM13f, XMM13g, XMM13h, + XMM14, XMM14b, XMM14c, XMM14d, XMM14e, XMM14f, XMM14g, XMM14h, + XMM15, XMM15b, XMM15c, XMM15d, XMM15e, XMM15f, XMM15g, XMM15h +#endif + ); + +%} + source %{ // Float masks come from different places depending on platform. #ifdef _LP64 @@ -38,6 +488,252 @@ source %{ static address double_signflip() { return (address)double_signflip_pool; } #endif +// Map Types to machine register types +const int Matcher::base2reg[Type::lastype] = { + Node::NotAMachineReg,0,0, Op_RegI, Op_RegL, 0, Op_RegN, + Node::NotAMachineReg, Node::NotAMachineReg, /* tuple, array */ + Op_VecS, Op_VecD, Op_VecX, Op_VecY, /* Vectors */ + Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, /* the pointers */ + 0, 0/*abio*/, + Op_RegP /* Return address */, 0, /* the memories */ + Op_RegF, Op_RegF, Op_RegF, Op_RegD, Op_RegD, Op_RegD, + 0 /*bottom*/ +}; + +// Max vector size in bytes. 0 if not supported. +const int Matcher::vector_width_in_bytes(BasicType bt) { + assert(is_java_primitive(bt), "only primitive type vectors"); + if (UseSSE < 2) return 0; + // SSE2 supports 128bit vectors for all types. + // AVX2 supports 256bit vectors for all types. + int size = (UseAVX > 1) ? 32 : 16; + // AVX1 supports 256bit vectors only for FLOAT and DOUBLE. + if (UseAVX > 0 && (bt == T_FLOAT || bt == T_DOUBLE)) + size = 32; + // Use flag to limit vector size. + size = MIN2(size,(int)MaxVectorSize); + // Minimum 2 values in vector (or 4 for bytes). + switch (bt) { + case T_DOUBLE: + case T_LONG: + if (size < 16) return 0; + case T_FLOAT: + case T_INT: + if (size < 8) return 0; + case T_BOOLEAN: + case T_BYTE: + case T_CHAR: + case T_SHORT: + if (size < 4) return 0; + break; + default: + ShouldNotReachHere(); + } + return size; +} + +// Limits on vector size (number of elements) loaded into vector. +const int Matcher::max_vector_size(const BasicType bt) { + return vector_width_in_bytes(bt)/type2aelembytes(bt); +} +const int Matcher::min_vector_size(const BasicType bt) { + int max_size = max_vector_size(bt); + // Min size which can be loaded into vector is 4 bytes. + int size = (type2aelembytes(bt) == 1) ? 4 : 2; + return MIN2(size,max_size); +} + +// Vector ideal reg corresponding to specidied size in bytes +const int Matcher::vector_ideal_reg(int size) { + assert(MaxVectorSize >= size, ""); + switch(size) { + case 4: return Op_VecS; + case 8: return Op_VecD; + case 16: return Op_VecX; + case 32: return Op_VecY; + } + ShouldNotReachHere(); + return 0; +} + +// x86 supports misaligned vectors store/load. +const bool Matcher::misaligned_vectors_ok() { + return !AlignVector; // can be changed by flag +} + +// Helper methods for MachSpillCopyNode::implementation(). +static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo, + int src_hi, int dst_hi, uint ireg, outputStream* st) { + // In 64-bit VM size calculation is very complex. Emitting instructions + // into scratch buffer is used to get size in 64-bit VM. + LP64_ONLY( assert(!do_size, "this method calculates size only for 32-bit VM"); ) + assert(ireg == Op_VecS || // 32bit vector + (src_lo & 1) == 0 && (src_lo + 1) == src_hi && + (dst_lo & 1) == 0 && (dst_lo + 1) == dst_hi, + "no non-adjacent vector moves" ); + if (cbuf) { + MacroAssembler _masm(cbuf); + int offset = __ offset(); + switch (ireg) { + case Op_VecS: // copy whole register + case Op_VecD: + case Op_VecX: + __ movdqu(as_XMMRegister(Matcher::_regEncode[dst_lo]), as_XMMRegister(Matcher::_regEncode[src_lo])); + break; + case Op_VecY: + __ vmovdqu(as_XMMRegister(Matcher::_regEncode[dst_lo]), as_XMMRegister(Matcher::_regEncode[src_lo])); + break; + default: + ShouldNotReachHere(); + } + int size = __ offset() - offset; +#ifdef ASSERT + // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes as SIMD prefix. + assert(!do_size || size == 4, "incorrect size calculattion"); +#endif + return size; +#ifndef PRODUCT + } else if (!do_size) { + switch (ireg) { + case Op_VecS: + case Op_VecD: + case Op_VecX: + st->print("movdqu %s,%s\t# spill",Matcher::regName[dst_lo],Matcher::regName[src_lo]); + break; + case Op_VecY: + st->print("vmovdqu %s,%s\t# spill",Matcher::regName[dst_lo],Matcher::regName[src_lo]); + break; + default: + ShouldNotReachHere(); + } +#endif + } + // VEX_2bytes prefix is used if UseAVX > 0, and it takes the same 2 bytes as SIMD prefix. + return 4; +} + +static int vec_spill_helper(CodeBuffer *cbuf, bool do_size, bool is_load, + int stack_offset, int reg, uint ireg, outputStream* st) { + // In 64-bit VM size calculation is very complex. Emitting instructions + // into scratch buffer is used to get size in 64-bit VM. + LP64_ONLY( assert(!do_size, "this method calculates size only for 32-bit VM"); ) + if (cbuf) { + MacroAssembler _masm(cbuf); + int offset = __ offset(); + if (is_load) { + switch (ireg) { + case Op_VecS: + __ movdl(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset)); + break; + case Op_VecD: + __ movq(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset)); + break; + case Op_VecX: + __ movdqu(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset)); + break; + case Op_VecY: + __ vmovdqu(as_XMMRegister(Matcher::_regEncode[reg]), Address(rsp, stack_offset)); + break; + default: + ShouldNotReachHere(); + } + } else { // store + switch (ireg) { + case Op_VecS: + __ movdl(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg])); + break; + case Op_VecD: + __ movq(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg])); + break; + case Op_VecX: + __ movdqu(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg])); + break; + case Op_VecY: + __ vmovdqu(Address(rsp, stack_offset), as_XMMRegister(Matcher::_regEncode[reg])); + break; + default: + ShouldNotReachHere(); + } + } + int size = __ offset() - offset; +#ifdef ASSERT + int offset_size = (stack_offset == 0) ? 0 : ((stack_offset < 0x80) ? 1 : 4); + // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes as SIMD prefix. + assert(!do_size || size == (5+offset_size), "incorrect size calculattion"); +#endif + return size; +#ifndef PRODUCT + } else if (!do_size) { + if (is_load) { + switch (ireg) { + case Op_VecS: + st->print("movd %s,[rsp + %d]\t# spill", Matcher::regName[reg], stack_offset); + break; + case Op_VecD: + st->print("movq %s,[rsp + %d]\t# spill", Matcher::regName[reg], stack_offset); + break; + case Op_VecX: + st->print("movdqu %s,[rsp + %d]\t# spill", Matcher::regName[reg], stack_offset); + break; + case Op_VecY: + st->print("vmovdqu %s,[rsp + %d]\t# spill", Matcher::regName[reg], stack_offset); + break; + default: + ShouldNotReachHere(); + } + } else { // store + switch (ireg) { + case Op_VecS: + st->print("movd [rsp + %d],%s\t# spill", stack_offset, Matcher::regName[reg]); + break; + case Op_VecD: + st->print("movq [rsp + %d],%s\t# spill", stack_offset, Matcher::regName[reg]); + break; + case Op_VecX: + st->print("movdqu [rsp + %d],%s\t# spill", stack_offset, Matcher::regName[reg]); + break; + case Op_VecY: + st->print("vmovdqu [rsp + %d],%s\t# spill", stack_offset, Matcher::regName[reg]); + break; + default: + ShouldNotReachHere(); + } + } +#endif + } + int offset_size = (stack_offset == 0) ? 0 : ((stack_offset < 0x80) ? 1 : 4); + // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes as SIMD prefix. + return 5+offset_size; +} + +static inline jfloat replicate4_imm(int con, int width) { + // Load a constant of "width" (in bytes) and replicate it to fill 32bit. + assert(width == 1 || width == 2, "only byte or short types here"); + int bit_width = width * 8; + jint val = con; + val &= (1 << bit_width) - 1; // mask off sign bits + while(bit_width < 32) { + val |= (val << bit_width); + bit_width <<= 1; + } + jfloat fval = *((jfloat*) &val); // coerce to float type + return fval; +} + +static inline jdouble replicate8_imm(int con, int width) { + // Load a constant of "width" (in bytes) and replicate it to fill 64bit. + assert(width == 1 || width == 2 || width == 4, "only byte, short or int types here"); + int bit_width = width * 8; + jlong val = con; + val &= (((jlong) 1) << bit_width) - 1; // mask off sign bits + while(bit_width < 64) { + val |= (val << bit_width); + bit_width <<= 1; + } + jdouble dval = *((jdouble*) &val); // coerce to double type + return dval; +} + #ifndef PRODUCT void MachNopNode::format(PhaseRegAlloc*, outputStream* st) const { st->print("nop \t# %d bytes pad for loops and calls", _count); @@ -103,6 +799,46 @@ encode %{ %} + +//----------OPERANDS----------------------------------------------------------- +// Operand definitions must precede instruction definitions for correct parsing +// in the ADLC because operands constitute user defined types which are used in +// instruction definitions. + +// Vectors +operand vecS() %{ + constraint(ALLOC_IN_RC(vectors_reg)); + match(VecS); + + format %{ %} + interface(REG_INTER); +%} + +operand vecD() %{ + constraint(ALLOC_IN_RC(vectord_reg)); + match(VecD); + + format %{ %} + interface(REG_INTER); +%} + +operand vecX() %{ + constraint(ALLOC_IN_RC(vectorx_reg)); + match(VecX); + + format %{ %} + interface(REG_INTER); +%} + +operand vecY() %{ + constraint(ALLOC_IN_RC(vectory_reg)); + match(VecY); + + format %{ %} + interface(REG_INTER); +%} + + // INSTRUCTIONS -- Platform independent definitions (same for 32- and 64-bit) // ============================================================================ @@ -153,7 +889,7 @@ instruct addF_imm(regF dst, immF con) %{ ins_pipe(pipe_slow); %} -instruct vaddF_reg(regF dst, regF src1, regF src2) %{ +instruct addF_reg_reg(regF dst, regF src1, regF src2) %{ predicate(UseAVX > 0); match(Set dst (AddF src1 src2)); @@ -165,7 +901,7 @@ instruct vaddF_reg(regF dst, regF src1, regF src2) %{ ins_pipe(pipe_slow); %} -instruct vaddF_mem(regF dst, regF src1, memory src2) %{ +instruct addF_reg_mem(regF dst, regF src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (AddF src1 (LoadF src2))); @@ -177,7 +913,7 @@ instruct vaddF_mem(regF dst, regF src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vaddF_imm(regF dst, regF src, immF con) %{ +instruct addF_reg_imm(regF dst, regF src, immF con) %{ predicate(UseAVX > 0); match(Set dst (AddF src con)); @@ -224,7 +960,7 @@ instruct addD_imm(regD dst, immD con) %{ ins_pipe(pipe_slow); %} -instruct vaddD_reg(regD dst, regD src1, regD src2) %{ +instruct addD_reg_reg(regD dst, regD src1, regD src2) %{ predicate(UseAVX > 0); match(Set dst (AddD src1 src2)); @@ -236,7 +972,7 @@ instruct vaddD_reg(regD dst, regD src1, regD src2) %{ ins_pipe(pipe_slow); %} -instruct vaddD_mem(regD dst, regD src1, memory src2) %{ +instruct addD_reg_mem(regD dst, regD src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (AddD src1 (LoadD src2))); @@ -248,7 +984,7 @@ instruct vaddD_mem(regD dst, regD src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vaddD_imm(regD dst, regD src, immD con) %{ +instruct addD_reg_imm(regD dst, regD src, immD con) %{ predicate(UseAVX > 0); match(Set dst (AddD src con)); @@ -295,7 +1031,7 @@ instruct subF_imm(regF dst, immF con) %{ ins_pipe(pipe_slow); %} -instruct vsubF_reg(regF dst, regF src1, regF src2) %{ +instruct subF_reg_reg(regF dst, regF src1, regF src2) %{ predicate(UseAVX > 0); match(Set dst (SubF src1 src2)); @@ -307,7 +1043,7 @@ instruct vsubF_reg(regF dst, regF src1, regF src2) %{ ins_pipe(pipe_slow); %} -instruct vsubF_mem(regF dst, regF src1, memory src2) %{ +instruct subF_reg_mem(regF dst, regF src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (SubF src1 (LoadF src2))); @@ -319,7 +1055,7 @@ instruct vsubF_mem(regF dst, regF src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vsubF_imm(regF dst, regF src, immF con) %{ +instruct subF_reg_imm(regF dst, regF src, immF con) %{ predicate(UseAVX > 0); match(Set dst (SubF src con)); @@ -366,7 +1102,7 @@ instruct subD_imm(regD dst, immD con) %{ ins_pipe(pipe_slow); %} -instruct vsubD_reg(regD dst, regD src1, regD src2) %{ +instruct subD_reg_reg(regD dst, regD src1, regD src2) %{ predicate(UseAVX > 0); match(Set dst (SubD src1 src2)); @@ -378,7 +1114,7 @@ instruct vsubD_reg(regD dst, regD src1, regD src2) %{ ins_pipe(pipe_slow); %} -instruct vsubD_mem(regD dst, regD src1, memory src2) %{ +instruct subD_reg_mem(regD dst, regD src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (SubD src1 (LoadD src2))); @@ -390,7 +1126,7 @@ instruct vsubD_mem(regD dst, regD src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vsubD_imm(regD dst, regD src, immD con) %{ +instruct subD_reg_imm(regD dst, regD src, immD con) %{ predicate(UseAVX > 0); match(Set dst (SubD src con)); @@ -437,7 +1173,7 @@ instruct mulF_imm(regF dst, immF con) %{ ins_pipe(pipe_slow); %} -instruct vmulF_reg(regF dst, regF src1, regF src2) %{ +instruct mulF_reg_reg(regF dst, regF src1, regF src2) %{ predicate(UseAVX > 0); match(Set dst (MulF src1 src2)); @@ -449,7 +1185,7 @@ instruct vmulF_reg(regF dst, regF src1, regF src2) %{ ins_pipe(pipe_slow); %} -instruct vmulF_mem(regF dst, regF src1, memory src2) %{ +instruct mulF_reg_mem(regF dst, regF src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (MulF src1 (LoadF src2))); @@ -461,7 +1197,7 @@ instruct vmulF_mem(regF dst, regF src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vmulF_imm(regF dst, regF src, immF con) %{ +instruct mulF_reg_imm(regF dst, regF src, immF con) %{ predicate(UseAVX > 0); match(Set dst (MulF src con)); @@ -508,7 +1244,7 @@ instruct mulD_imm(regD dst, immD con) %{ ins_pipe(pipe_slow); %} -instruct vmulD_reg(regD dst, regD src1, regD src2) %{ +instruct mulD_reg_reg(regD dst, regD src1, regD src2) %{ predicate(UseAVX > 0); match(Set dst (MulD src1 src2)); @@ -520,7 +1256,7 @@ instruct vmulD_reg(regD dst, regD src1, regD src2) %{ ins_pipe(pipe_slow); %} -instruct vmulD_mem(regD dst, regD src1, memory src2) %{ +instruct mulD_reg_mem(regD dst, regD src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (MulD src1 (LoadD src2))); @@ -532,7 +1268,7 @@ instruct vmulD_mem(regD dst, regD src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vmulD_imm(regD dst, regD src, immD con) %{ +instruct mulD_reg_imm(regD dst, regD src, immD con) %{ predicate(UseAVX > 0); match(Set dst (MulD src con)); @@ -579,7 +1315,7 @@ instruct divF_imm(regF dst, immF con) %{ ins_pipe(pipe_slow); %} -instruct vdivF_reg(regF dst, regF src1, regF src2) %{ +instruct divF_reg_reg(regF dst, regF src1, regF src2) %{ predicate(UseAVX > 0); match(Set dst (DivF src1 src2)); @@ -591,7 +1327,7 @@ instruct vdivF_reg(regF dst, regF src1, regF src2) %{ ins_pipe(pipe_slow); %} -instruct vdivF_mem(regF dst, regF src1, memory src2) %{ +instruct divF_reg_mem(regF dst, regF src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (DivF src1 (LoadF src2))); @@ -603,7 +1339,7 @@ instruct vdivF_mem(regF dst, regF src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vdivF_imm(regF dst, regF src, immF con) %{ +instruct divF_reg_imm(regF dst, regF src, immF con) %{ predicate(UseAVX > 0); match(Set dst (DivF src con)); @@ -650,7 +1386,7 @@ instruct divD_imm(regD dst, immD con) %{ ins_pipe(pipe_slow); %} -instruct vdivD_reg(regD dst, regD src1, regD src2) %{ +instruct divD_reg_reg(regD dst, regD src1, regD src2) %{ predicate(UseAVX > 0); match(Set dst (DivD src1 src2)); @@ -662,7 +1398,7 @@ instruct vdivD_reg(regD dst, regD src1, regD src2) %{ ins_pipe(pipe_slow); %} -instruct vdivD_mem(regD dst, regD src1, memory src2) %{ +instruct divD_reg_mem(regD dst, regD src1, memory src2) %{ predicate(UseAVX > 0); match(Set dst (DivD src1 (LoadD src2))); @@ -674,7 +1410,7 @@ instruct vdivD_mem(regD dst, regD src1, memory src2) %{ ins_pipe(pipe_slow); %} -instruct vdivD_imm(regD dst, regD src, immD con) %{ +instruct divD_reg_imm(regD dst, regD src, immD con) %{ predicate(UseAVX > 0); match(Set dst (DivD src con)); @@ -697,7 +1433,7 @@ instruct absF_reg(regF dst) %{ ins_pipe(pipe_slow); %} -instruct vabsF_reg(regF dst, regF src) %{ +instruct absF_reg_reg(regF dst, regF src) %{ predicate(UseAVX > 0); match(Set dst (AbsF src)); ins_cost(150); @@ -721,7 +1457,7 @@ instruct absD_reg(regD dst) %{ ins_pipe(pipe_slow); %} -instruct vabsD_reg(regD dst, regD src) %{ +instruct absD_reg_reg(regD dst, regD src) %{ predicate(UseAVX > 0); match(Set dst (AbsD src)); ins_cost(150); @@ -745,7 +1481,7 @@ instruct negF_reg(regF dst) %{ ins_pipe(pipe_slow); %} -instruct vnegF_reg(regF dst, regF src) %{ +instruct negF_reg_reg(regF dst, regF src) %{ predicate(UseAVX > 0); match(Set dst (NegF src)); ins_cost(150); @@ -769,7 +1505,7 @@ instruct negD_reg(regD dst) %{ ins_pipe(pipe_slow); %} -instruct vnegD_reg(regD dst, regD src) %{ +instruct negD_reg_reg(regD dst, regD src) %{ predicate(UseAVX > 0); match(Set dst (NegD src)); ins_cost(150); @@ -852,3 +1588,797 @@ instruct sqrtD_imm(regD dst, immD con) %{ ins_pipe(pipe_slow); %} + +// ====================VECTOR INSTRUCTIONS===================================== + +// Load vectors (4 bytes long) +instruct loadV4(vecS dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 4); + match(Set dst (LoadVector mem)); + ins_cost(125); + format %{ "movd $dst,$mem\t! load vector (4 bytes)" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $mem$$Address); + %} + ins_pipe( pipe_slow ); +%} + +// Load vectors (8 bytes long) +instruct loadV8(vecD dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 8); + match(Set dst (LoadVector mem)); + ins_cost(125); + format %{ "movq $dst,$mem\t! load vector (8 bytes)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $mem$$Address); + %} + ins_pipe( pipe_slow ); +%} + +// Load vectors (16 bytes long) +instruct loadV16(vecX dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 16); + match(Set dst (LoadVector mem)); + ins_cost(125); + format %{ "movdqu $dst,$mem\t! load vector (16 bytes)" %} + ins_encode %{ + __ movdqu($dst$$XMMRegister, $mem$$Address); + %} + ins_pipe( pipe_slow ); +%} + +// Load vectors (32 bytes long) +instruct loadV32(vecY dst, memory mem) %{ + predicate(n->as_LoadVector()->memory_size() == 32); + match(Set dst (LoadVector mem)); + ins_cost(125); + format %{ "vmovdqu $dst,$mem\t! load vector (32 bytes)" %} + ins_encode %{ + __ vmovdqu($dst$$XMMRegister, $mem$$Address); + %} + ins_pipe( pipe_slow ); +%} + +// Store vectors +instruct storeV4(memory mem, vecS src) %{ + predicate(n->as_StoreVector()->memory_size() == 4); + match(Set mem (StoreVector mem src)); + ins_cost(145); + format %{ "movd $mem,$src\t! store vector (4 bytes)" %} + ins_encode %{ + __ movdl($mem$$Address, $src$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct storeV8(memory mem, vecD src) %{ + predicate(n->as_StoreVector()->memory_size() == 8); + match(Set mem (StoreVector mem src)); + ins_cost(145); + format %{ "movq $mem,$src\t! store vector (8 bytes)" %} + ins_encode %{ + __ movq($mem$$Address, $src$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct storeV16(memory mem, vecX src) %{ + predicate(n->as_StoreVector()->memory_size() == 16); + match(Set mem (StoreVector mem src)); + ins_cost(145); + format %{ "movdqu $mem,$src\t! store vector (16 bytes)" %} + ins_encode %{ + __ movdqu($mem$$Address, $src$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct storeV32(memory mem, vecY src) %{ + predicate(n->as_StoreVector()->memory_size() == 32); + match(Set mem (StoreVector mem src)); + ins_cost(145); + format %{ "vmovdqu $mem,$src\t! store vector (32 bytes)" %} + ins_encode %{ + __ vmovdqu($mem$$Address, $src$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate byte scalar to be vector +instruct Repl4B(vecS dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateB src)); + format %{ "movd $dst,$src\n\t" + "punpcklbw $dst,$dst\n\t" + "pshuflw $dst,$dst,0x00\t! replicate4B" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8B(vecD dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateB src)); + format %{ "movd $dst,$src\n\t" + "punpcklbw $dst,$dst\n\t" + "pshuflw $dst,$dst,0x00\t! replicate8B" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl16B(vecX dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateB src)); + format %{ "movd $dst,$src\n\t" + "punpcklbw $dst,$dst\n\t" + "pshuflw $dst,$dst,0x00\n\t" + "punpcklqdq $dst,$dst\t! replicate16B" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl32B(vecY dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 32); + match(Set dst (ReplicateB src)); + format %{ "movd $dst,$src\n\t" + "punpcklbw $dst,$dst\n\t" + "pshuflw $dst,$dst,0x00\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate32B" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate byte scalar immediate to be vector by loading from const table. +instruct Repl4B_imm(vecS dst, immI con) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateB con)); + format %{ "movdl $dst,[$constantaddress]\t! replicate4B($con)" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $constantaddress(replicate4_imm($con$$constant, 1))); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8B_imm(vecD dst, immI con) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateB con)); + format %{ "movq $dst,[$constantaddress]\t! replicate8B($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 1))); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl16B_imm(vecX dst, immI con) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateB con)); + format %{ "movq $dst,[$constantaddress]\n\t" + "punpcklqdq $dst,$dst\t! replicate16B($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 1))); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl32B_imm(vecY dst, immI con) %{ + predicate(n->as_Vector()->length() == 32); + match(Set dst (ReplicateB con)); + format %{ "movq $dst,[$constantaddress]\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! lreplicate32B($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 1))); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate byte scalar zero to be vector +instruct Repl4B_zero(vecS dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateB zero)); + format %{ "pxor $dst,$dst\t! replicate4B zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8B_zero(vecD dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateB zero)); + format %{ "pxor $dst,$dst\t! replicate8B zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl16B_zero(vecX dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateB zero)); + format %{ "pxor $dst,$dst\t! replicate16B zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl32B_zero(vecY dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 32); + match(Set dst (ReplicateB zero)); + format %{ "vpxor $dst,$dst,$dst\t! replicate32B zero" %} + ins_encode %{ + // Use vxorpd since AVX does not have vpxor for 256-bit (AVX2 will have it). + bool vector256 = true; + __ vpxor($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate char/short (2 byte) scalar to be vector +instruct Repl2S(vecS dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateS src)); + format %{ "movd $dst,$src\n\t" + "pshuflw $dst,$dst,0x00\t! replicate2S" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4S(vecD dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateS src)); + format %{ "movd $dst,$src\n\t" + "pshuflw $dst,$dst,0x00\t! replicate4S" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8S(vecX dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateS src)); + format %{ "movd $dst,$src\n\t" + "pshuflw $dst,$dst,0x00\n\t" + "punpcklqdq $dst,$dst\t! replicate8S" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl16S(vecY dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateS src)); + format %{ "movd $dst,$src\n\t" + "pshuflw $dst,$dst,0x00\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate16S" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate char/short (2 byte) scalar immediate to be vector by loading from const table. +instruct Repl2S_imm(vecS dst, immI con) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateS con)); + format %{ "movdl $dst,[$constantaddress]\t! replicate2S($con)" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $constantaddress(replicate4_imm($con$$constant, 2))); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4S_imm(vecD dst, immI con) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateS con)); + format %{ "movq $dst,[$constantaddress]\t! replicate4S($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 2))); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8S_imm(vecX dst, immI con) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateS con)); + format %{ "movq $dst,[$constantaddress]\n\t" + "punpcklqdq $dst,$dst\t! replicate8S($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 2))); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl16S_imm(vecY dst, immI con) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateS con)); + format %{ "movq $dst,[$constantaddress]\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate16S($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 2))); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate char/short (2 byte) scalar zero to be vector +instruct Repl2S_zero(vecS dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateS zero)); + format %{ "pxor $dst,$dst\t! replicate2S zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4S_zero(vecD dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateS zero)); + format %{ "pxor $dst,$dst\t! replicate4S zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8S_zero(vecX dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateS zero)); + format %{ "pxor $dst,$dst\t! replicate8S zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl16S_zero(vecY dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 16); + match(Set dst (ReplicateS zero)); + format %{ "vpxor $dst,$dst,$dst\t! replicate16S zero" %} + ins_encode %{ + // Use vxorpd since AVX does not have vpxor for 256-bit (AVX2 will have it). + bool vector256 = true; + __ vpxor($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate integer (4 byte) scalar to be vector +instruct Repl2I(vecD dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI src)); + format %{ "movd $dst,$src\n\t" + "pshufd $dst,$dst,0x00\t! replicate2I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4I(vecX dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateI src)); + format %{ "movd $dst,$src\n\t" + "pshufd $dst,$dst,0x00\t! replicate4I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8I(vecY dst, rRegI src) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateI src)); + format %{ "movd $dst,$src\n\t" + "pshufd $dst,$dst,0x00\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate8I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate integer (4 byte) scalar immediate to be vector by loading from const table. +instruct Repl2I_imm(vecD dst, immI con) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI con)); + format %{ "movq $dst,[$constantaddress]\t! replicate2I($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 4))); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4I_imm(vecX dst, immI con) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateI con)); + format %{ "movq $dst,[$constantaddress]\t! replicate4I($con)\n\t" + "punpcklqdq $dst,$dst" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 4))); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8I_imm(vecY dst, immI con) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateI con)); + format %{ "movq $dst,[$constantaddress]\t! replicate8I($con)\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress(replicate8_imm($con$$constant, 4))); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Integer could be loaded into xmm register directly from memory. +instruct Repl2I_mem(vecD dst, memory mem) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI (LoadI mem))); + format %{ "movd $dst,$mem\n\t" + "pshufd $dst,$dst,0x00\t! replicate2I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $mem$$Address); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4I_mem(vecX dst, memory mem) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateI (LoadI mem))); + format %{ "movd $dst,$mem\n\t" + "pshufd $dst,$dst,0x00\t! replicate4I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $mem$$Address); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8I_mem(vecY dst, memory mem) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateI (LoadI mem))); + format %{ "movd $dst,$mem\n\t" + "pshufd $dst,$dst,0x00\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate8I" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $mem$$Address); + __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate integer (4 byte) scalar zero to be vector +instruct Repl2I_zero(vecD dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateI zero)); + format %{ "pxor $dst,$dst\t! replicate2I" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4I_zero(vecX dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateI zero)); + format %{ "pxor $dst,$dst\t! replicate4I zero)" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8I_zero(vecY dst, immI0 zero) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateI zero)); + format %{ "vpxor $dst,$dst,$dst\t! replicate8I zero" %} + ins_encode %{ + // Use vxorpd since AVX does not have vpxor for 256-bit (AVX2 will have it). + bool vector256 = true; + __ vpxor($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate long (8 byte) scalar to be vector +#ifdef _LP64 +instruct Repl2L(vecX dst, rRegL src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL src)); + format %{ "movdq $dst,$src\n\t" + "punpcklqdq $dst,$dst\t! replicate2L" %} + ins_encode %{ + __ movdq($dst$$XMMRegister, $src$$Register); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4L(vecY dst, rRegL src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL src)); + format %{ "movdq $dst,$src\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate4L" %} + ins_encode %{ + __ movdq($dst$$XMMRegister, $src$$Register); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} +#else // _LP64 +instruct Repl2L(vecX dst, eRegL src, regD tmp) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL src)); + effect(TEMP dst, USE src, TEMP tmp); + format %{ "movdl $dst,$src.lo\n\t" + "movdl $tmp,$src.hi\n\t" + "punpckldq $dst,$tmp\n\t" + "punpcklqdq $dst,$dst\t! replicate2L"%} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ movdl($tmp$$XMMRegister, HIGH_FROM_LOW($src$$Register)); + __ punpckldq($dst$$XMMRegister, $tmp$$XMMRegister); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4L(vecY dst, eRegL src, regD tmp) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL src)); + effect(TEMP dst, USE src, TEMP tmp); + format %{ "movdl $dst,$src.lo\n\t" + "movdl $tmp,$src.hi\n\t" + "punpckldq $dst,$tmp\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate4L" %} + ins_encode %{ + __ movdl($dst$$XMMRegister, $src$$Register); + __ movdl($tmp$$XMMRegister, HIGH_FROM_LOW($src$$Register)); + __ punpckldq($dst$$XMMRegister, $tmp$$XMMRegister); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} +#endif // _LP64 + +// Replicate long (8 byte) scalar immediate to be vector by loading from const table. +instruct Repl2L_imm(vecX dst, immL con) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL con)); + format %{ "movq $dst,[$constantaddress]\n\t" + "punpcklqdq $dst,$dst\t! replicate2L($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress($con)); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4L_imm(vecY dst, immL con) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL con)); + format %{ "movq $dst,[$constantaddress]\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate4L($con)" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $constantaddress($con)); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Long could be loaded into xmm register directly from memory. +instruct Repl2L_mem(vecX dst, memory mem) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL (LoadL mem))); + format %{ "movq $dst,$mem\n\t" + "punpcklqdq $dst,$dst\t! replicate2L" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $mem$$Address); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4L_mem(vecY dst, memory mem) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL (LoadL mem))); + format %{ "movq $dst,$mem\n\t" + "punpcklqdq $dst,$dst\n\t" + "vinserti128h $dst,$dst,$dst\t! replicate4L" %} + ins_encode %{ + __ movq($dst$$XMMRegister, $mem$$Address); + __ punpcklqdq($dst$$XMMRegister, $dst$$XMMRegister); + __ vinserti128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate long (8 byte) scalar zero to be vector +instruct Repl2L_zero(vecX dst, immL0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateL zero)); + format %{ "pxor $dst,$dst\t! replicate2L zero" %} + ins_encode %{ + __ pxor($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4L_zero(vecY dst, immL0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateL zero)); + format %{ "vpxor $dst,$dst,$dst\t! replicate4L zero" %} + ins_encode %{ + // Use vxorpd since AVX does not have vpxor for 256-bit (AVX2 will have it). + bool vector256 = true; + __ vpxor($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate float (4 byte) scalar to be vector +instruct Repl2F(vecD dst, regF src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateF src)); + format %{ "pshufd $dst,$dst,0x00\t! replicate2F" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4F(vecX dst, regF src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateF src)); + format %{ "pshufd $dst,$dst,0x00\t! replicate4F" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl8F(vecY dst, regF src) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateF src)); + format %{ "pshufd $dst,$src,0x00\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate8F" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate float (4 byte) scalar zero to be vector +instruct Repl2F_zero(vecD dst, immF0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateF zero)); + format %{ "xorps $dst,$dst\t! replicate2F zero" %} + ins_encode %{ + __ xorps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4F_zero(vecX dst, immF0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateF zero)); + format %{ "xorps $dst,$dst\t! replicate4F zero" %} + ins_encode %{ + __ xorps($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl8F_zero(vecY dst, immF0 zero) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (ReplicateF zero)); + format %{ "vxorps $dst,$dst,$dst\t! replicate8F zero" %} + ins_encode %{ + bool vector256 = true; + __ vxorps($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + +// Replicate double (8 bytes) scalar to be vector +instruct Repl2D(vecX dst, regD src) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateD src)); + format %{ "pshufd $dst,$src,0x44\t! replicate2D" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x44); + %} + ins_pipe( pipe_slow ); +%} + +instruct Repl4D(vecY dst, regD src) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateD src)); + format %{ "pshufd $dst,$src,0x44\n\t" + "vinsertf128h $dst,$dst,$dst\t! replicate4D" %} + ins_encode %{ + __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x44); + __ vinsertf128h($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +// Replicate double (8 byte) scalar zero to be vector +instruct Repl2D_zero(vecX dst, immD0 zero) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (ReplicateD zero)); + format %{ "xorpd $dst,$dst\t! replicate2D zero" %} + ins_encode %{ + __ xorpd($dst$$XMMRegister, $dst$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); +%} + +instruct Repl4D_zero(vecY dst, immD0 zero) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (ReplicateD zero)); + format %{ "vxorpd $dst,$dst,$dst,vect256\t! replicate4D zero" %} + ins_encode %{ + bool vector256 = true; + __ vxorpd($dst$$XMMRegister, $dst$$XMMRegister, $dst$$XMMRegister, vector256); + %} + ins_pipe( fpu_reg_reg ); +%} + diff --git a/hotspot/src/cpu/x86/vm/x86_32.ad b/hotspot/src/cpu/x86/vm/x86_32.ad index 300903954d2..b46d3d68843 100644 --- a/hotspot/src/cpu/x86/vm/x86_32.ad +++ b/hotspot/src/cpu/x86/vm/x86_32.ad @@ -74,9 +74,6 @@ reg_def EDX(SOC, SOC, Op_RegI, 2, rdx->as_VMReg()); reg_def EAX(SOC, SOC, Op_RegI, 0, rax->as_VMReg()); reg_def ESP( NS, NS, Op_RegI, 4, rsp->as_VMReg()); -// Special Registers -reg_def EFLAGS(SOC, SOC, 0, 8, VMRegImpl::Bad()); - // Float registers. We treat TOS/FPR0 special. It is invisible to the // allocator, and only shows up in the encodings. reg_def FPR0L( SOC, SOC, Op_RegF, 0, VMRegImpl::Bad()); @@ -105,27 +102,6 @@ reg_def FPR6H( SOC, SOC, Op_RegF, 6, as_FloatRegister(5)->as_VMReg()->next()); reg_def FPR7L( SOC, SOC, Op_RegF, 7, as_FloatRegister(6)->as_VMReg()); reg_def FPR7H( SOC, SOC, Op_RegF, 7, as_FloatRegister(6)->as_VMReg()->next()); -// XMM registers. 128-bit registers or 4 words each, labeled a-d. -// Word a in each register holds a Float, words ab hold a Double. -// We currently do not use the SIMD capabilities, so registers cd -// are unused at the moment. -reg_def XMM0a( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()); -reg_def XMM0b( SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()); -reg_def XMM1a( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()); -reg_def XMM1b( SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()); -reg_def XMM2a( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()); -reg_def XMM2b( SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()); -reg_def XMM3a( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()); -reg_def XMM3b( SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()); -reg_def XMM4a( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()); -reg_def XMM4b( SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()); -reg_def XMM5a( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()); -reg_def XMM5b( SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()); -reg_def XMM6a( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()); -reg_def XMM6b( SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()); -reg_def XMM7a( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()); -reg_def XMM7b( SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()); - // Specify priority of register selection within phases of register // allocation. Highest priority is first. A useful heuristic is to // give registers a low priority when they are required by machine @@ -138,15 +114,6 @@ alloc_class chunk0( ECX, EBX, EBP, EDI, EAX, EDX, ESI, ESP, FPR3L, FPR3H, FPR4L, FPR4H, FPR5L, FPR5H, FPR6L, FPR6H, FPR7L, FPR7H ); -alloc_class chunk1( XMM0a, XMM0b, - XMM1a, XMM1b, - XMM2a, XMM2b, - XMM3a, XMM3b, - XMM4a, XMM4b, - XMM5a, XMM5b, - XMM6a, XMM6b, - XMM7a, XMM7b, EFLAGS); - //----------Architecture Description Register Classes-------------------------- // Several register classes are automatically defined based upon information in @@ -159,12 +126,12 @@ alloc_class chunk1( XMM0a, XMM0b, // Class for all registers reg_class any_reg(EAX, EDX, EBP, EDI, ESI, ECX, EBX, ESP); // Class for general registers -reg_class e_reg(EAX, EDX, EBP, EDI, ESI, ECX, EBX); +reg_class int_reg(EAX, EDX, EBP, EDI, ESI, ECX, EBX); // Class for general registers which may be used for implicit null checks on win95 // Also safe for use by tailjump. We don't want to allocate in rbp, -reg_class e_reg_no_rbp(EAX, EDX, EDI, ESI, ECX, EBX); +reg_class int_reg_no_rbp(EAX, EDX, EDI, ESI, ECX, EBX); // Class of "X" registers -reg_class x_reg(EBX, ECX, EDX, EAX); +reg_class int_x_reg(EBX, ECX, EDX, EAX); // Class of registers that can appear in an address with no offset. // EBP and ESP require an extra instruction byte for zero offset. // Used in fast-unlock @@ -193,8 +160,6 @@ reg_class ebp_reg(EBP); reg_class sp_reg(ESP); // Singleton class for instruction pointer // reg_class ip_reg(EIP); -// Singleton class for condition codes -reg_class int_flags(EFLAGS); // Class of integer register pairs reg_class long_reg( EAX,EDX, ECX,EBX, EBP,EDI ); // Class of integer register pairs that aligns with calling convention @@ -206,29 +171,18 @@ reg_class nadx_reg( EBX,ECX,ESI,EDI,EBP ); // Floating point registers. Notice FPR0 is not a choice. // FPR0 is not ever allocated; we use clever encodings to fake // a 2-address instructions out of Intels FP stack. -reg_class flt_reg( FPR1L,FPR2L,FPR3L,FPR4L,FPR5L,FPR6L,FPR7L ); +reg_class fp_flt_reg( FPR1L,FPR2L,FPR3L,FPR4L,FPR5L,FPR6L,FPR7L ); -// make a register class for SSE registers -reg_class xmm_reg(XMM0a, XMM1a, XMM2a, XMM3a, XMM4a, XMM5a, XMM6a, XMM7a); +reg_class fp_dbl_reg( FPR1L,FPR1H, FPR2L,FPR2H, FPR3L,FPR3H, + FPR4L,FPR4H, FPR5L,FPR5H, FPR6L,FPR6H, + FPR7L,FPR7H ); -// make a double register class for SSE2 registers -reg_class xdb_reg(XMM0a,XMM0b, XMM1a,XMM1b, XMM2a,XMM2b, XMM3a,XMM3b, - XMM4a,XMM4b, XMM5a,XMM5b, XMM6a,XMM6b, XMM7a,XMM7b ); +reg_class fp_flt_reg0( FPR1L ); +reg_class fp_dbl_reg0( FPR1L,FPR1H ); +reg_class fp_dbl_reg1( FPR2L,FPR2H ); +reg_class fp_dbl_notreg0( FPR2L,FPR2H, FPR3L,FPR3H, FPR4L,FPR4H, + FPR5L,FPR5H, FPR6L,FPR6H, FPR7L,FPR7H ); -reg_class dbl_reg( FPR1L,FPR1H, FPR2L,FPR2H, FPR3L,FPR3H, - FPR4L,FPR4H, FPR5L,FPR5H, FPR6L,FPR6H, - FPR7L,FPR7H ); - -reg_class flt_reg0( FPR1L ); -reg_class dbl_reg0( FPR1L,FPR1H ); -reg_class dbl_reg1( FPR2L,FPR2H ); -reg_class dbl_notreg0( FPR2L,FPR2H, FPR3L,FPR3H, FPR4L,FPR4H, - FPR5L,FPR5H, FPR6L,FPR6H, FPR7L,FPR7H ); - -// XMM6 and XMM7 could be used as temporary registers for long, float and -// double values for SSE2. -reg_class xdb_reg6( XMM6a,XMM6b ); -reg_class xdb_reg7( XMM7a,XMM7b ); %} @@ -412,7 +366,7 @@ void store_to_stackslot(CodeBuffer &cbuf, int opcode, int rm_field, int disp) { } } - // eRegI ereg, memory mem) %{ // emit_reg_mem + // rRegI ereg, memory mem) %{ // emit_reg_mem void encode_RegMem( CodeBuffer &cbuf, int reg_encoding, int base, int index, int scale, int displace, bool displace_is_oop ) { // There is no index & no scale, use form without SIB byte if ((index == 0x4) && @@ -787,7 +741,7 @@ static int impl_x_helper( CodeBuffer *cbuf, bool do_size, bool is_load, #endif } int offset_size = (offset == 0) ? 0 : ((offset <= 127) ? 1 : 4); - // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes. + // VEX_2bytes prefix is used if UseAVX > 0, so it takes the same 2 bytes as SIMD prefix. return size+5+offset_size; } @@ -821,7 +775,7 @@ static int impl_movx_helper( CodeBuffer *cbuf, bool do_size, int src_lo, int dst } #endif } - // VEX_2bytes prefix is used if UseAVX > 0, and it takes the same 2 bytes. + // VEX_2bytes prefix is used if UseAVX > 0, and it takes the same 2 bytes as SIMD prefix. // Only MOVAPS SSE prefix uses 1 byte. int sz = 4; if (!(src_lo+1 == src_hi && dst_lo+1 == dst_hi) && @@ -903,6 +857,108 @@ static int impl_fp_store_helper( CodeBuffer *cbuf, bool do_size, int src_lo, int return impl_helper(cbuf,do_size,false,offset,st_op,op,op_str,size, st); } +// Next two methods are shared by 32- and 64-bit VM. They are defined in x86.ad. +static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo, + int src_hi, int dst_hi, uint ireg, outputStream* st); + +static int vec_spill_helper(CodeBuffer *cbuf, bool do_size, bool is_load, + int stack_offset, int reg, uint ireg, outputStream* st); + +static int vec_stack_to_stack_helper(CodeBuffer *cbuf, bool do_size, int src_offset, + int dst_offset, uint ireg, outputStream* st) { + int calc_size = 0; + int src_offset_size = (src_offset == 0) ? 0 : ((src_offset < 0x80) ? 1 : 4); + int dst_offset_size = (dst_offset == 0) ? 0 : ((dst_offset < 0x80) ? 1 : 4); + switch (ireg) { + case Op_VecS: + calc_size = 3+src_offset_size + 3+dst_offset_size; + break; + case Op_VecD: + calc_size = 3+src_offset_size + 3+dst_offset_size; + src_offset += 4; + dst_offset += 4; + src_offset_size = (src_offset == 0) ? 0 : ((src_offset < 0x80) ? 1 : 4); + dst_offset_size = (dst_offset == 0) ? 0 : ((dst_offset < 0x80) ? 1 : 4); + calc_size += 3+src_offset_size + 3+dst_offset_size; + break; + case Op_VecX: + calc_size = 6 + 6 + 5+src_offset_size + 5+dst_offset_size; + break; + case Op_VecY: + calc_size = 6 + 6 + 5+src_offset_size + 5+dst_offset_size; + break; + default: + ShouldNotReachHere(); + } + if (cbuf) { + MacroAssembler _masm(cbuf); + int offset = __ offset(); + switch (ireg) { + case Op_VecS: + __ pushl(Address(rsp, src_offset)); + __ popl (Address(rsp, dst_offset)); + break; + case Op_VecD: + __ pushl(Address(rsp, src_offset)); + __ popl (Address(rsp, dst_offset)); + __ pushl(Address(rsp, src_offset+4)); + __ popl (Address(rsp, dst_offset+4)); + break; + case Op_VecX: + __ movdqu(Address(rsp, -16), xmm0); + __ movdqu(xmm0, Address(rsp, src_offset)); + __ movdqu(Address(rsp, dst_offset), xmm0); + __ movdqu(xmm0, Address(rsp, -16)); + break; + case Op_VecY: + __ vmovdqu(Address(rsp, -32), xmm0); + __ vmovdqu(xmm0, Address(rsp, src_offset)); + __ vmovdqu(Address(rsp, dst_offset), xmm0); + __ vmovdqu(xmm0, Address(rsp, -32)); + break; + default: + ShouldNotReachHere(); + } + int size = __ offset() - offset; + assert(size == calc_size, "incorrect size calculattion"); + return size; +#ifndef PRODUCT + } else if (!do_size) { + switch (ireg) { + case Op_VecS: + st->print("pushl [rsp + #%d]\t# 32-bit mem-mem spill\n\t" + "popl [rsp + #%d]", + src_offset, dst_offset); + break; + case Op_VecD: + st->print("pushl [rsp + #%d]\t# 64-bit mem-mem spill\n\t" + "popq [rsp + #%d]\n\t" + "pushl [rsp + #%d]\n\t" + "popq [rsp + #%d]", + src_offset, dst_offset, src_offset+4, dst_offset+4); + break; + case Op_VecX: + st->print("movdqu [rsp - #16], xmm0\t# 128-bit mem-mem spill\n\t" + "movdqu xmm0, [rsp + #%d]\n\t" + "movdqu [rsp + #%d], xmm0\n\t" + "movdqu xmm0, [rsp - #16]", + src_offset, dst_offset); + break; + case Op_VecY: + st->print("vmovdqu [rsp - #32], xmm0\t# 256-bit mem-mem spill\n\t" + "vmovdqu xmm0, [rsp + #%d]\n\t" + "vmovdqu [rsp + #%d], xmm0\n\t" + "vmovdqu xmm0, [rsp - #32]", + src_offset, dst_offset); + break; + default: + ShouldNotReachHere(); + } +#endif + } + return calc_size; +} + uint MachSpillCopyNode::implementation( CodeBuffer *cbuf, PhaseRegAlloc *ra_, bool do_size, outputStream* st ) const { // Get registers to move OptoReg::Name src_second = ra_->get_reg_second(in(1)); @@ -923,6 +979,29 @@ uint MachSpillCopyNode::implementation( CodeBuffer *cbuf, PhaseRegAlloc *ra_, bo if( src_first == dst_first && src_second == dst_second ) return size; // Self copy, no move + if (bottom_type()->isa_vect() != NULL) { + uint ireg = ideal_reg(); + assert((src_first_rc != rc_int && dst_first_rc != rc_int), "sanity"); + assert((src_first_rc != rc_float && dst_first_rc != rc_float), "sanity"); + assert((ireg == Op_VecS || ireg == Op_VecD || ireg == Op_VecX || ireg == Op_VecY), "sanity"); + if( src_first_rc == rc_stack && dst_first_rc == rc_stack ) { + // mem -> mem + int src_offset = ra_->reg2offset(src_first); + int dst_offset = ra_->reg2offset(dst_first); + return vec_stack_to_stack_helper(cbuf, do_size, src_offset, dst_offset, ireg, st); + } else if (src_first_rc == rc_xmm && dst_first_rc == rc_xmm ) { + return vec_mov_helper(cbuf, do_size, src_first, dst_first, src_second, dst_second, ireg, st); + } else if (src_first_rc == rc_xmm && dst_first_rc == rc_stack ) { + int stack_offset = ra_->reg2offset(dst_first); + return vec_spill_helper(cbuf, do_size, false, stack_offset, src_first, ireg, st); + } else if (src_first_rc == rc_stack && dst_first_rc == rc_xmm ) { + int stack_offset = ra_->reg2offset(src_first); + return vec_spill_helper(cbuf, do_size, true, stack_offset, dst_first, ireg, st); + } else { + ShouldNotReachHere(); + } + } + // -------------------------------------- // Check for mem-mem move. push/pop to move. if( src_first_rc == rc_stack && dst_first_rc == rc_stack ) { @@ -1313,16 +1392,6 @@ const bool Matcher::convL2FSupported(void) { return true; } -// Vector width in bytes -const uint Matcher::vector_width_in_bytes(void) { - return UseSSE >= 2 ? 8 : 0; -} - -// Vector ideal reg -const uint Matcher::vector_ideal_reg(void) { - return Op_RegD; -} - // Is this branch offset short enough that a short branch can be used? // // NOTE: If the platform does not provide any short branch variants, then @@ -1452,7 +1521,7 @@ const bool Matcher::int_in_long = false; // arguments in those registers not be available to the callee. bool Matcher::can_be_java_arg( int reg ) { if( reg == ECX_num || reg == EDX_num ) return true; - if( (reg == XMM0a_num || reg == XMM1a_num) && UseSSE>=1 ) return true; + if( (reg == XMM0_num || reg == XMM1_num ) && UseSSE>=1 ) return true; if( (reg == XMM0b_num || reg == XMM1b_num) && UseSSE>=2 ) return true; return false; } @@ -1565,16 +1634,16 @@ encode %{ emit_opcode(cbuf,0x66); %} - enc_class RegReg (eRegI dst, eRegI src) %{ // RegReg(Many) + enc_class RegReg (rRegI dst, rRegI src) %{ // RegReg(Many) emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); %} - enc_class OpcRegReg (immI opcode, eRegI dst, eRegI src) %{ // OpcRegReg(Many) + enc_class OpcRegReg (immI opcode, rRegI dst, rRegI src) %{ // OpcRegReg(Many) emit_opcode(cbuf,$opcode$$constant); emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); %} - enc_class mov_r32_imm0( eRegI dst ) %{ + enc_class mov_r32_imm0( rRegI dst ) %{ emit_opcode( cbuf, 0xB8 + $dst$$reg ); // 0xB8+ rd -- MOV r32 ,imm32 emit_d32 ( cbuf, 0x0 ); // imm32==0x0 %} @@ -1621,7 +1690,7 @@ encode %{ %} // Dense encoding for older common ops - enc_class Opc_plus(immI opcode, eRegI reg) %{ + enc_class Opc_plus(immI opcode, rRegI reg) %{ emit_opcode(cbuf, $opcode$$constant + $reg$$reg); %} @@ -1637,7 +1706,7 @@ encode %{ } %} - enc_class OpcSErm (eRegI dst, immI imm) %{ // OpcSEr/m + enc_class OpcSErm (rRegI dst, immI imm) %{ // OpcSEr/m // Emit primary opcode and set sign-extend bit // Check for 8-bit immediate, and set sign extend bit in opcode if (($imm$$constant >= -128) && ($imm$$constant <= 127)) { @@ -1682,7 +1751,7 @@ encode %{ else emit_d32(cbuf,con); %} - enc_class OpcSReg (eRegI dst) %{ // BSWAP + enc_class OpcSReg (rRegI dst) %{ // BSWAP emit_cc(cbuf, $secondary, $dst$$reg ); %} @@ -1700,7 +1769,7 @@ encode %{ emit_rm(cbuf, 0x3, destlo, desthi); %} - enc_class RegOpc (eRegI div) %{ // IDIV, IMOD, JMP indirect, ... + enc_class RegOpc (rRegI div) %{ // IDIV, IMOD, JMP indirect, ... emit_rm(cbuf, 0x3, $secondary, $div$$reg ); %} @@ -1891,20 +1960,20 @@ encode %{ // runtime_call_Relocation::spec(), RELOC_IMM32 ); // %} - enc_class RegOpcImm (eRegI dst, immI8 shift) %{ // SHL, SAR, SHR + enc_class RegOpcImm (rRegI dst, immI8 shift) %{ // SHL, SAR, SHR $$$emit8$primary; emit_rm(cbuf, 0x3, $secondary, $dst$$reg); $$$emit8$shift$$constant; %} - enc_class LdImmI (eRegI dst, immI src) %{ // Load Immediate + enc_class LdImmI (rRegI dst, immI src) %{ // Load Immediate // Load immediate does not have a zero or sign extended version // for 8-bit immediates emit_opcode(cbuf, 0xB8 + $dst$$reg); $$$emit32$src$$constant; %} - enc_class LdImmP (eRegI dst, immI src) %{ // Load Immediate + enc_class LdImmP (rRegI dst, immI src) %{ // Load Immediate // Load immediate does not have a zero or sign extended version // for 8-bit immediates emit_opcode(cbuf, $primary + $dst$$reg); @@ -1943,15 +2012,15 @@ encode %{ // Encode a reg-reg copy. If it is useless, then empty encoding. - enc_class enc_Copy( eRegI dst, eRegI src ) %{ + enc_class enc_Copy( rRegI dst, rRegI src ) %{ encode_Copy( cbuf, $dst$$reg, $src$$reg ); %} - enc_class enc_CopyL_Lo( eRegI dst, eRegL src ) %{ + enc_class enc_CopyL_Lo( rRegI dst, eRegL src ) %{ encode_Copy( cbuf, $dst$$reg, $src$$reg ); %} - enc_class RegReg (eRegI dst, eRegI src) %{ // RegReg(Many) + enc_class RegReg (rRegI dst, rRegI src) %{ // RegReg(Many) emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); %} @@ -1973,7 +2042,7 @@ encode %{ emit_rm(cbuf, 0x3, HIGH_FROM_LOW($dst$$reg), HIGH_FROM_LOW($src$$reg)); %} - enc_class RegReg_HiLo( eRegL src, eRegI dst ) %{ + enc_class RegReg_HiLo( eRegL src, rRegI dst ) %{ emit_rm(cbuf, 0x3, $dst$$reg, HIGH_FROM_LOW($src$$reg)); %} @@ -2068,7 +2137,7 @@ encode %{ cbuf.set_insts_mark(); // Mark start of opcode for reloc info in mem operand %} - enc_class RegMem (eRegI ereg, memory mem) %{ // emit_reg_mem + enc_class RegMem (rRegI ereg, memory mem) %{ // emit_reg_mem int reg_encoding = $ereg$$reg; int base = $mem$$base; int index = $mem$$index; @@ -2132,7 +2201,7 @@ encode %{ // Clone of RegMem but accepts an extra parameter to access each // half of a double in memory; it never needs relocation info. - enc_class Mov_MemD_half_to_Reg (immI opcode, memory mem, immI disp_for_half, eRegI rm_reg) %{ + enc_class Mov_MemD_half_to_Reg (immI opcode, memory mem, immI disp_for_half, rRegI rm_reg) %{ emit_opcode(cbuf,$opcode$$constant); int reg_encoding = $rm_reg$$reg; int base = $mem$$base; @@ -2168,7 +2237,7 @@ encode %{ encode_RegMem(cbuf, rm_byte_opcode, base, index, scale, displace, disp_is_oop); %} - enc_class RegLea (eRegI dst, eRegI src0, immI src1 ) %{ // emit_reg_lea + enc_class RegLea (rRegI dst, rRegI src0, immI src1 ) %{ // emit_reg_lea int reg_encoding = $dst$$reg; int base = $src0$$reg; // 0xFFFFFFFF indicates no base int index = 0x04; // 0x04 indicates no index @@ -2178,7 +2247,7 @@ encode %{ encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_is_oop); %} - enc_class min_enc (eRegI dst, eRegI src) %{ // MIN + enc_class min_enc (rRegI dst, rRegI src) %{ // MIN // Compare dst,src emit_opcode(cbuf,0x3B); emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); @@ -2190,7 +2259,7 @@ encode %{ emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); %} - enc_class max_enc (eRegI dst, eRegI src) %{ // MAX + enc_class max_enc (rRegI dst, rRegI src) %{ // MAX // Compare dst,src emit_opcode(cbuf,0x3B); emit_rm(cbuf, 0x3, $dst$$reg, $src$$reg); @@ -2221,7 +2290,7 @@ encode %{ encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_is_oop); %} - enc_class neg_reg(eRegI dst) %{ + enc_class neg_reg(rRegI dst) %{ // NEG $dst emit_opcode(cbuf,0xF7); emit_rm(cbuf, 0x3, 0x03, $dst$$reg ); @@ -2251,7 +2320,7 @@ encode %{ emit_rm(cbuf, 0x3, $p$$reg, tmpReg); %} - enc_class enc_cmpLTP_mem(eRegI p, eRegI q, memory mem, eCXRegI tmp) %{ // cadd_cmpLT + enc_class enc_cmpLTP_mem(rRegI p, rRegI q, memory mem, eCXRegI tmp) %{ // cadd_cmpLT int tmpReg = $tmp$$reg; // SUB $p,$q @@ -2390,12 +2459,12 @@ encode %{ %} // Special case for moving an integer register to a stack slot. - enc_class OpcPRegSS( stackSlotI dst, eRegI src ) %{ // RegSS + enc_class OpcPRegSS( stackSlotI dst, rRegI src ) %{ // RegSS store_to_stackslot( cbuf, $primary, $src$$reg, $dst$$disp ); %} // Special case for moving a register to a stack slot. - enc_class RegSS( stackSlotI dst, eRegI src ) %{ // RegSS + enc_class RegSS( stackSlotI dst, rRegI src ) %{ // RegSS // Opcode already emitted emit_rm( cbuf, 0x02, $src$$reg, ESP_enc ); // R/M byte emit_rm( cbuf, 0x00, ESP_enc, ESP_enc); // SIB byte @@ -2640,7 +2709,7 @@ encode %{ // equal_result = 0; // nan_result = -1; - enc_class CmpF_Result(eRegI dst) %{ + enc_class CmpF_Result(rRegI dst) %{ // fnstsw_ax(); emit_opcode( cbuf, 0xDF); emit_opcode( cbuf, 0xE0); @@ -2685,7 +2754,7 @@ encode %{ // done: %} - enc_class convert_int_long( regL dst, eRegI src ) %{ + enc_class convert_int_long( regL dst, rRegI src ) %{ // mov $dst.lo,$src int dst_encoding = $dst$$reg; int src_encoding = $src$$reg; @@ -2754,7 +2823,7 @@ encode %{ emit_rm( cbuf, 0x3, 0x4, $src$$reg); %} - enc_class long_multiply( eADXRegL dst, eRegL src, eRegI tmp ) %{ + enc_class long_multiply( eADXRegL dst, eRegL src, rRegI tmp ) %{ // Basic idea: lo(result) = lo(x_lo * y_lo) // hi(result) = hi(x_lo * y_lo) + lo(x_hi * y_lo) + lo(x_lo * y_hi) // MOV $tmp,$src.lo @@ -2780,7 +2849,7 @@ encode %{ emit_rm( cbuf, 0x3, HIGH_FROM_LOW($dst$$reg), $tmp$$reg ); %} - enc_class long_multiply_con( eADXRegL dst, immL_127 src, eRegI tmp ) %{ + enc_class long_multiply_con( eADXRegL dst, immL_127 src, rRegI tmp ) %{ // Basic idea: lo(result) = lo(src * y_lo) // hi(result) = hi(src * y_lo) + lo(src * y_hi) // IMUL $tmp,EDX,$src @@ -2836,7 +2905,7 @@ encode %{ emit_d8(cbuf, 4*4); %} - enc_class long_cmp_flags0( eRegL src, eRegI tmp ) %{ + enc_class long_cmp_flags0( eRegL src, rRegI tmp ) %{ // MOV $tmp,$src.lo emit_opcode(cbuf, 0x8B); emit_rm(cbuf, 0x3, $tmp$$reg, $src$$reg); @@ -2857,7 +2926,7 @@ encode %{ emit_rm(cbuf, 0x3, HIGH_FROM_LOW($src1$$reg), HIGH_FROM_LOW($src2$$reg) ); %} - enc_class long_cmp_flags2( eRegL src1, eRegL src2, eRegI tmp ) %{ + enc_class long_cmp_flags2( eRegL src1, eRegL src2, rRegI tmp ) %{ // CMP $src1.lo,$src2.lo\t! Long compare; set flags for low bits emit_opcode( cbuf, 0x3B ); emit_rm(cbuf, 0x3, $src1$$reg, $src2$$reg ); @@ -2869,7 +2938,7 @@ encode %{ emit_rm(cbuf, 0x3, $tmp$$reg, HIGH_FROM_LOW($src2$$reg) ); %} - enc_class long_cmp_flags3( eRegL src, eRegI tmp ) %{ + enc_class long_cmp_flags3( eRegL src, rRegI tmp ) %{ // XOR $tmp,$tmp emit_opcode(cbuf,0x33); // XOR emit_rm(cbuf,0x3, $tmp$$reg, $tmp$$reg); @@ -3762,9 +3831,9 @@ frame %{ // in SSE2+ mode we want to keep the FPU stack clean so pretend // that C functions return float and double results in XMM0. if( ideal_reg == Op_RegD && UseSSE>=2 ) - return OptoRegPair(XMM0b_num,XMM0a_num); + return OptoRegPair(XMM0b_num,XMM0_num); if( ideal_reg == Op_RegF && UseSSE>=2 ) - return OptoRegPair(OptoReg::Bad,XMM0a_num); + return OptoRegPair(OptoReg::Bad,XMM0_num); return OptoRegPair(hi[ideal_reg],lo[ideal_reg]); %} @@ -3775,9 +3844,9 @@ frame %{ static int lo[Op_RegL+1] = { 0, 0, OptoReg::Bad, EAX_num, EAX_num, FPR1L_num, FPR1L_num, EAX_num }; static int hi[Op_RegL+1] = { 0, 0, OptoReg::Bad, OptoReg::Bad, OptoReg::Bad, OptoReg::Bad, FPR1H_num, EDX_num }; if( ideal_reg == Op_RegD && UseSSE>=2 ) - return OptoRegPair(XMM0b_num,XMM0a_num); + return OptoRegPair(XMM0b_num,XMM0_num); if( ideal_reg == Op_RegF && UseSSE>=1 ) - return OptoRegPair(OptoReg::Bad,XMM0a_num); + return OptoRegPair(OptoReg::Bad,XMM0_num); return OptoRegPair(hi[ideal_reg],lo[ideal_reg]); %} @@ -4147,8 +4216,8 @@ operand immI_65535() %{ // Register Operands // Integer Register -operand eRegI() %{ - constraint(ALLOC_IN_RC(e_reg)); +operand rRegI() %{ + constraint(ALLOC_IN_RC(int_reg)); match(RegI); match(xRegI); match(eAXRegI); @@ -4163,8 +4232,8 @@ operand eRegI() %{ %} // Subset of Integer Register -operand xRegI(eRegI reg) %{ - constraint(ALLOC_IN_RC(x_reg)); +operand xRegI(rRegI reg) %{ + constraint(ALLOC_IN_RC(int_x_reg)); match(reg); match(eAXRegI); match(eBXRegI); @@ -4179,7 +4248,7 @@ operand xRegI(eRegI reg) %{ operand eAXRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(eax_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "EAX" %} interface(REG_INTER); @@ -4189,7 +4258,7 @@ operand eAXRegI(xRegI reg) %{ operand eBXRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(ebx_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "EBX" %} interface(REG_INTER); @@ -4198,7 +4267,7 @@ operand eBXRegI(xRegI reg) %{ operand eCXRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(ecx_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "ECX" %} interface(REG_INTER); @@ -4207,7 +4276,7 @@ operand eCXRegI(xRegI reg) %{ operand eDXRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(edx_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "EDX" %} interface(REG_INTER); @@ -4216,7 +4285,7 @@ operand eDXRegI(xRegI reg) %{ operand eDIRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(edi_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "EDI" %} interface(REG_INTER); @@ -4263,7 +4332,7 @@ operand ncxRegI() %{ operand eSIRegI(xRegI reg) %{ constraint(ALLOC_IN_RC(esi_reg)); match(reg); - match(eRegI); + match(rRegI); format %{ "ESI" %} interface(REG_INTER); @@ -4284,7 +4353,7 @@ operand anyRegP() %{ %} operand eRegP() %{ - constraint(ALLOC_IN_RC(e_reg)); + constraint(ALLOC_IN_RC(int_reg)); match(RegP); match(eAXRegP); match(eBXRegP); @@ -4297,7 +4366,7 @@ operand eRegP() %{ // On windows95, EBP is not safe to use for implicit null tests. operand eRegP_no_EBP() %{ - constraint(ALLOC_IN_RC(e_reg_no_rbp)); + constraint(ALLOC_IN_RC(int_reg_no_rbp)); match(RegP); match(eAXRegP); match(eBXRegP); @@ -4477,7 +4546,7 @@ operand flagsReg_long_LEGT() %{ // Float register operands operand regDPR() %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(dbl_reg)); + constraint(ALLOC_IN_RC(fp_dbl_reg)); match(RegD); match(regDPR1); match(regDPR2); @@ -4487,7 +4556,7 @@ operand regDPR() %{ operand regDPR1(regDPR reg) %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(dbl_reg0)); + constraint(ALLOC_IN_RC(fp_dbl_reg0)); match(reg); format %{ "FPR1" %} interface(REG_INTER); @@ -4495,7 +4564,7 @@ operand regDPR1(regDPR reg) %{ operand regDPR2(regDPR reg) %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(dbl_reg1)); + constraint(ALLOC_IN_RC(fp_dbl_reg1)); match(reg); format %{ "FPR2" %} interface(REG_INTER); @@ -4503,45 +4572,16 @@ operand regDPR2(regDPR reg) %{ operand regnotDPR1(regDPR reg) %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(dbl_notreg0)); + constraint(ALLOC_IN_RC(fp_dbl_notreg0)); match(reg); format %{ %} interface(REG_INTER); %} -// XMM Double register operands -operand regD() %{ - predicate( UseSSE>=2 ); - constraint(ALLOC_IN_RC(xdb_reg)); - match(RegD); - match(regD6); - match(regD7); - format %{ %} - interface(REG_INTER); -%} - -// XMM6 double register operands -operand regD6(regD reg) %{ - predicate( UseSSE>=2 ); - constraint(ALLOC_IN_RC(xdb_reg6)); - match(reg); - format %{ "XMM6" %} - interface(REG_INTER); -%} - -// XMM7 double register operands -operand regD7(regD reg) %{ - predicate( UseSSE>=2 ); - constraint(ALLOC_IN_RC(xdb_reg7)); - match(reg); - format %{ "XMM7" %} - interface(REG_INTER); -%} - // Float register operands operand regFPR() %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(flt_reg)); + constraint(ALLOC_IN_RC(fp_flt_reg)); match(RegF); match(regFPR1); format %{ %} @@ -4551,21 +4591,30 @@ operand regFPR() %{ // Float register operands operand regFPR1(regFPR reg) %{ predicate( UseSSE < 2 ); - constraint(ALLOC_IN_RC(flt_reg0)); + constraint(ALLOC_IN_RC(fp_flt_reg0)); match(reg); format %{ "FPR1" %} interface(REG_INTER); %} -// XMM register operands +// XMM Float register operands operand regF() %{ predicate( UseSSE>=1 ); - constraint(ALLOC_IN_RC(xmm_reg)); + constraint(ALLOC_IN_RC(float_reg)); match(RegF); format %{ %} interface(REG_INTER); %} +// XMM Double register operands +operand regD() %{ + predicate( UseSSE>=2 ); + constraint(ALLOC_IN_RC(double_reg)); + match(RegD); + format %{ %} + interface(REG_INTER); +%} + //----------Memory Operands---------------------------------------------------- // Direct Memory Operand @@ -4583,7 +4632,7 @@ operand direct(immP addr) %{ // Indirect Memory Operand operand indirect(eRegP reg) %{ - constraint(ALLOC_IN_RC(e_reg)); + constraint(ALLOC_IN_RC(int_reg)); match(reg); format %{ "[$reg]" %} @@ -4622,7 +4671,7 @@ operand indOffset32(eRegP reg, immI off) %{ %} // Indirect Memory Plus Long Offset Operand -operand indOffset32X(eRegI reg, immP off) %{ +operand indOffset32X(rRegI reg, immP off) %{ match(AddP off reg); format %{ "[$reg + $off]" %} @@ -4635,7 +4684,7 @@ operand indOffset32X(eRegI reg, immP off) %{ %} // Indirect Memory Plus Index Register Plus Offset Operand -operand indIndexOffset(eRegP reg, eRegI ireg, immI off) %{ +operand indIndexOffset(eRegP reg, rRegI ireg, immI off) %{ match(AddP (AddP reg ireg) off); op_cost(10); @@ -4649,7 +4698,7 @@ operand indIndexOffset(eRegP reg, eRegI ireg, immI off) %{ %} // Indirect Memory Plus Index Register Plus Offset Operand -operand indIndex(eRegP reg, eRegI ireg) %{ +operand indIndex(eRegP reg, rRegI ireg) %{ match(AddP reg ireg); op_cost(10); @@ -4667,7 +4716,7 @@ operand indIndex(eRegP reg, eRegI ireg) %{ // // ------------------------------------------------------------------------- // // Scaled Memory Operands // // Indirect Memory Times Scale Plus Offset Operand -// operand indScaleOffset(immP off, eRegI ireg, immI2 scale) %{ +// operand indScaleOffset(immP off, rRegI ireg, immI2 scale) %{ // match(AddP off (LShiftI ireg scale)); // // op_cost(10); @@ -4681,7 +4730,7 @@ operand indIndex(eRegP reg, eRegI ireg) %{ // %} // Indirect Memory Times Scale Plus Index Register -operand indIndexScale(eRegP reg, eRegI ireg, immI2 scale) %{ +operand indIndexScale(eRegP reg, rRegI ireg, immI2 scale) %{ match(AddP reg (LShiftI ireg scale)); op_cost(10); @@ -4695,7 +4744,7 @@ operand indIndexScale(eRegP reg, eRegI ireg, immI2 scale) %{ %} // Indirect Memory Times Scale Plus Index Register Plus Offset Operand -operand indIndexScaleOffset(eRegP reg, immI off, eRegI ireg, immI2 scale) %{ +operand indIndexScaleOffset(eRegP reg, immI off, rRegI ireg, immI2 scale) %{ match(AddP (AddP reg (LShiftI ireg scale)) off); op_cost(10); @@ -4823,7 +4872,7 @@ operand stackSlotL(sRegL reg) %{ // Indirect Memory Operand operand indirect_win95_safe(eRegP_no_EBP reg) %{ - constraint(ALLOC_IN_RC(e_reg)); + constraint(ALLOC_IN_RC(int_reg)); match(reg); op_cost(100); @@ -4867,7 +4916,7 @@ operand indOffset32_win95_safe(eRegP_no_EBP reg, immI off) %} // Indirect Memory Plus Index Register Plus Offset Operand -operand indIndexOffset_win95_safe(eRegP_no_EBP reg, eRegI ireg, immI off) +operand indIndexOffset_win95_safe(eRegP_no_EBP reg, rRegI ireg, immI off) %{ match(AddP (AddP reg ireg) off); @@ -4882,7 +4931,7 @@ operand indIndexOffset_win95_safe(eRegP_no_EBP reg, eRegI ireg, immI off) %} // Indirect Memory Times Scale Plus Index Register -operand indIndexScale_win95_safe(eRegP_no_EBP reg, eRegI ireg, immI2 scale) +operand indIndexScale_win95_safe(eRegP_no_EBP reg, rRegI ireg, immI2 scale) %{ match(AddP reg (LShiftI ireg scale)); @@ -4897,7 +4946,7 @@ operand indIndexScale_win95_safe(eRegP_no_EBP reg, eRegI ireg, immI2 scale) %} // Indirect Memory Times Scale Plus Index Register Plus Offset Operand -operand indIndexScaleOffset_win95_safe(eRegP_no_EBP reg, immI off, eRegI ireg, immI2 scale) +operand indIndexScaleOffset_win95_safe(eRegP_no_EBP reg, immI off, rRegI ireg, immI2 scale) %{ match(AddP (AddP reg (LShiftI ireg scale)) off); @@ -5086,7 +5135,7 @@ pipe_desc(S0, S1, S2, S3, S4, S5); // Or: _mem if it requires the big decoder and a memory unit. // Integer ALU reg operation -pipe_class ialu_reg(eRegI dst) %{ +pipe_class ialu_reg(rRegI dst) %{ single_instruction; dst : S4(write); dst : S3(read); @@ -5104,7 +5153,7 @@ pipe_class ialu_reg_long(eRegL dst) %{ %} // Integer ALU reg operation using big decoder -pipe_class ialu_reg_fat(eRegI dst) %{ +pipe_class ialu_reg_fat(rRegI dst) %{ single_instruction; dst : S4(write); dst : S3(read); @@ -5122,7 +5171,7 @@ pipe_class ialu_reg_long_fat(eRegL dst) %{ %} // Integer ALU reg-reg operation -pipe_class ialu_reg_reg(eRegI dst, eRegI src) %{ +pipe_class ialu_reg_reg(rRegI dst, rRegI src) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5140,7 +5189,7 @@ pipe_class ialu_reg_reg_long(eRegL dst, eRegL src) %{ %} // Integer ALU reg-reg operation -pipe_class ialu_reg_reg_fat(eRegI dst, memory src) %{ +pipe_class ialu_reg_reg_fat(rRegI dst, memory src) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5158,7 +5207,7 @@ pipe_class ialu_reg_reg_long_fat(eRegL dst, eRegL src) %{ %} // Integer ALU reg-mem operation -pipe_class ialu_reg_mem(eRegI dst, memory mem) %{ +pipe_class ialu_reg_mem(rRegI dst, memory mem) %{ single_instruction; dst : S5(write); mem : S3(read); @@ -5187,7 +5236,7 @@ pipe_class ialu_mem(memory mem) %} // Integer Store to Memory -pipe_class ialu_mem_reg(memory mem, eRegI src) %{ +pipe_class ialu_mem_reg(memory mem, rRegI src) %{ single_instruction; mem : S3(read); src : S5(read); @@ -5216,7 +5265,7 @@ pipe_class ialu_mem_imm(memory mem) %{ %} // Integer ALU0 reg-reg operation -pipe_class ialu_reg_reg_alu0(eRegI dst, eRegI src) %{ +pipe_class ialu_reg_reg_alu0(rRegI dst, rRegI src) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5225,7 +5274,7 @@ pipe_class ialu_reg_reg_alu0(eRegI dst, eRegI src) %{ %} // Integer ALU0 reg-mem operation -pipe_class ialu_reg_mem_alu0(eRegI dst, memory mem) %{ +pipe_class ialu_reg_mem_alu0(rRegI dst, memory mem) %{ single_instruction; dst : S5(write); mem : S3(read); @@ -5235,7 +5284,7 @@ pipe_class ialu_reg_mem_alu0(eRegI dst, memory mem) %{ %} // Integer ALU reg-reg operation -pipe_class ialu_cr_reg_reg(eFlagsReg cr, eRegI src1, eRegI src2) %{ +pipe_class ialu_cr_reg_reg(eFlagsReg cr, rRegI src1, rRegI src2) %{ single_instruction; cr : S4(write); src1 : S3(read); @@ -5245,7 +5294,7 @@ pipe_class ialu_cr_reg_reg(eFlagsReg cr, eRegI src1, eRegI src2) %{ %} // Integer ALU reg-imm operation -pipe_class ialu_cr_reg_imm(eFlagsReg cr, eRegI src1) %{ +pipe_class ialu_cr_reg_imm(eFlagsReg cr, rRegI src1) %{ single_instruction; cr : S4(write); src1 : S3(read); @@ -5254,7 +5303,7 @@ pipe_class ialu_cr_reg_imm(eFlagsReg cr, eRegI src1) %{ %} // Integer ALU reg-mem operation -pipe_class ialu_cr_reg_mem(eFlagsReg cr, eRegI src1, memory src2) %{ +pipe_class ialu_cr_reg_mem(eFlagsReg cr, rRegI src1, memory src2) %{ single_instruction; cr : S4(write); src1 : S3(read); @@ -5265,7 +5314,7 @@ pipe_class ialu_cr_reg_mem(eFlagsReg cr, eRegI src1, memory src2) %{ %} // Conditional move reg-reg -pipe_class pipe_cmplt( eRegI p, eRegI q, eRegI y ) %{ +pipe_class pipe_cmplt( rRegI p, rRegI q, rRegI y ) %{ instruction_count(4); y : S4(read); q : S3(read); @@ -5274,7 +5323,7 @@ pipe_class pipe_cmplt( eRegI p, eRegI q, eRegI y ) %{ %} // Conditional move reg-reg -pipe_class pipe_cmov_reg( eRegI dst, eRegI src, eFlagsReg cr ) %{ +pipe_class pipe_cmov_reg( rRegI dst, rRegI src, eFlagsReg cr ) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5283,7 +5332,7 @@ pipe_class pipe_cmov_reg( eRegI dst, eRegI src, eFlagsReg cr ) %{ %} // Conditional move reg-mem -pipe_class pipe_cmov_mem( eFlagsReg cr, eRegI dst, memory src) %{ +pipe_class pipe_cmov_mem( eFlagsReg cr, rRegI dst, memory src) %{ single_instruction; dst : S4(write); src : S3(read); @@ -5534,7 +5583,7 @@ define %{ // in the encode section of the architecture description. //----------BSWAP-Instruction-------------------------------------------------- -instruct bytes_reverse_int(eRegI dst) %{ +instruct bytes_reverse_int(rRegI dst) %{ match(Set dst (ReverseBytesI dst)); format %{ "BSWAP $dst" %} @@ -5555,7 +5604,7 @@ instruct bytes_reverse_long(eRegL dst) %{ ins_pipe( ialu_reg_reg); %} -instruct bytes_reverse_unsigned_short(eRegI dst, eFlagsReg cr) %{ +instruct bytes_reverse_unsigned_short(rRegI dst, eFlagsReg cr) %{ match(Set dst (ReverseBytesUS dst)); effect(KILL cr); @@ -5568,7 +5617,7 @@ instruct bytes_reverse_unsigned_short(eRegI dst, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct bytes_reverse_short(eRegI dst, eFlagsReg cr) %{ +instruct bytes_reverse_short(rRegI dst, eFlagsReg cr) %{ match(Set dst (ReverseBytesS dst)); effect(KILL cr); @@ -5584,7 +5633,7 @@ instruct bytes_reverse_short(eRegI dst, eFlagsReg cr) %{ //---------- Zeros Count Instructions ------------------------------------------ -instruct countLeadingZerosI(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct countLeadingZerosI(rRegI dst, rRegI src, eFlagsReg cr) %{ predicate(UseCountLeadingZerosInstruction); match(Set dst (CountLeadingZerosI src)); effect(KILL cr); @@ -5596,7 +5645,7 @@ instruct countLeadingZerosI(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countLeadingZerosI_bsr(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct countLeadingZerosI_bsr(rRegI dst, rRegI src, eFlagsReg cr) %{ predicate(!UseCountLeadingZerosInstruction); match(Set dst (CountLeadingZerosI src)); effect(KILL cr); @@ -5621,7 +5670,7 @@ instruct countLeadingZerosI_bsr(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countLeadingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ +instruct countLeadingZerosL(rRegI dst, eRegL src, eFlagsReg cr) %{ predicate(UseCountLeadingZerosInstruction); match(Set dst (CountLeadingZerosL src)); effect(TEMP dst, KILL cr); @@ -5644,7 +5693,7 @@ instruct countLeadingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countLeadingZerosL_bsr(eRegI dst, eRegL src, eFlagsReg cr) %{ +instruct countLeadingZerosL_bsr(rRegI dst, eRegL src, eFlagsReg cr) %{ predicate(!UseCountLeadingZerosInstruction); match(Set dst (CountLeadingZerosL src)); effect(TEMP dst, KILL cr); @@ -5680,7 +5729,7 @@ instruct countLeadingZerosL_bsr(eRegI dst, eRegL src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countTrailingZerosI(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct countTrailingZerosI(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (CountTrailingZerosI src)); effect(KILL cr); @@ -5699,7 +5748,7 @@ instruct countTrailingZerosI(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct countTrailingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ +instruct countTrailingZerosL(rRegI dst, eRegL src, eFlagsReg cr) %{ match(Set dst (CountTrailingZerosL src)); effect(TEMP dst, KILL cr); @@ -5731,7 +5780,7 @@ instruct countTrailingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ //---------- Population Count Instructions ------------------------------------- -instruct popCountI(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct popCountI(rRegI dst, rRegI src, eFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountI src)); effect(KILL cr); @@ -5743,7 +5792,7 @@ instruct popCountI(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe(ialu_reg); %} -instruct popCountI_mem(eRegI dst, memory mem, eFlagsReg cr) %{ +instruct popCountI_mem(rRegI dst, memory mem, eFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountI (LoadI mem))); effect(KILL cr); @@ -5756,7 +5805,7 @@ instruct popCountI_mem(eRegI dst, memory mem, eFlagsReg cr) %{ %} // Note: Long.bitCount(long) returns an int. -instruct popCountL(eRegI dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ +instruct popCountL(rRegI dst, eRegL src, rRegI tmp, eFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountL src)); effect(KILL cr, TEMP tmp, TEMP dst); @@ -5773,7 +5822,7 @@ instruct popCountL(eRegI dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ %} // Note: Long.bitCount(long) returns an int. -instruct popCountL_mem(eRegI dst, memory mem, eRegI tmp, eFlagsReg cr) %{ +instruct popCountL_mem(rRegI dst, memory mem, rRegI tmp, eFlagsReg cr) %{ predicate(UsePopCountInstruction); match(Set dst (PopCountL (LoadL mem))); effect(KILL cr, TEMP tmp, TEMP dst); @@ -5877,7 +5926,7 @@ instruct loadUB2L_immI8(eRegL dst, memory mem, immI8 mask, eFlagsReg cr) %{ %} // Load Short (16bit signed) -instruct loadS(eRegI dst, memory mem) %{ +instruct loadS(rRegI dst, memory mem) %{ match(Set dst (LoadS mem)); ins_cost(125); @@ -5891,7 +5940,7 @@ instruct loadS(eRegI dst, memory mem) %{ %} // Load Short (16 bit signed) to Byte (8 bit signed) -instruct loadS2B(eRegI dst, memory mem, immI_24 twentyfour) %{ +instruct loadS2B(rRegI dst, memory mem, immI_24 twentyfour) %{ match(Set dst (RShiftI (LShiftI (LoadS mem) twentyfour) twentyfour)); ins_cost(125); @@ -5922,7 +5971,7 @@ instruct loadS2L(eRegL dst, memory mem, eFlagsReg cr) %{ %} // Load Unsigned Short/Char (16bit unsigned) -instruct loadUS(eRegI dst, memory mem) %{ +instruct loadUS(rRegI dst, memory mem) %{ match(Set dst (LoadUS mem)); ins_cost(125); @@ -5936,7 +5985,7 @@ instruct loadUS(eRegI dst, memory mem) %{ %} // Load Unsigned Short/Char (16 bit UNsigned) to Byte (8 bit signed) -instruct loadUS2B(eRegI dst, memory mem, immI_24 twentyfour) %{ +instruct loadUS2B(rRegI dst, memory mem, immI_24 twentyfour) %{ match(Set dst (RShiftI (LShiftI (LoadUS mem) twentyfour) twentyfour)); ins_cost(125); @@ -5997,7 +6046,7 @@ instruct loadUS2L_immI16(eRegL dst, memory mem, immI16 mask, eFlagsReg cr) %{ %} // Load Integer -instruct loadI(eRegI dst, memory mem) %{ +instruct loadI(rRegI dst, memory mem) %{ match(Set dst (LoadI mem)); ins_cost(125); @@ -6011,7 +6060,7 @@ instruct loadI(eRegI dst, memory mem) %{ %} // Load Integer (32 bit signed) to Byte (8 bit signed) -instruct loadI2B(eRegI dst, memory mem, immI_24 twentyfour) %{ +instruct loadI2B(rRegI dst, memory mem, immI_24 twentyfour) %{ match(Set dst (RShiftI (LShiftI (LoadI mem) twentyfour) twentyfour)); ins_cost(125); @@ -6023,7 +6072,7 @@ instruct loadI2B(eRegI dst, memory mem, immI_24 twentyfour) %{ %} // Load Integer (32 bit signed) to Unsigned Byte (8 bit UNsigned) -instruct loadI2UB(eRegI dst, memory mem, immI_255 mask) %{ +instruct loadI2UB(rRegI dst, memory mem, immI_255 mask) %{ match(Set dst (AndI (LoadI mem) mask)); ins_cost(125); @@ -6035,7 +6084,7 @@ instruct loadI2UB(eRegI dst, memory mem, immI_255 mask) %{ %} // Load Integer (32 bit signed) to Short (16 bit signed) -instruct loadI2S(eRegI dst, memory mem, immI_16 sixteen) %{ +instruct loadI2S(rRegI dst, memory mem, immI_16 sixteen) %{ match(Set dst (RShiftI (LShiftI (LoadI mem) sixteen) sixteen)); ins_cost(125); @@ -6047,7 +6096,7 @@ instruct loadI2S(eRegI dst, memory mem, immI_16 sixteen) %{ %} // Load Integer (32 bit signed) to Unsigned Short/Char (16 bit UNsigned) -instruct loadI2US(eRegI dst, memory mem, immI_65535 mask) %{ +instruct loadI2US(rRegI dst, memory mem, immI_65535 mask) %{ match(Set dst (AndI (LoadI mem) mask)); ins_cost(125); @@ -6208,7 +6257,7 @@ instruct loadLX_reg_volatile(eRegL dst, memory mem, regD tmp) %{ %} // Load Range -instruct loadRange(eRegI dst, memory mem) %{ +instruct loadRange(rRegI dst, memory mem) %{ match(Set dst (LoadRange mem)); ins_cost(125); @@ -6305,66 +6354,6 @@ instruct loadFPR(regFPR dst, memory mem) %{ ins_pipe( fpu_reg_mem ); %} -// Load Aligned Packed Byte to XMM register -instruct loadA8B(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load8B mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed8B" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Short to XMM register -instruct loadA4S(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load4S mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed4S" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Char to XMM register -instruct loadA4C(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load4C mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed4C" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Integer to XMM register -instruct load2IU(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load2I mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed2I" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Single to XMM -instruct loadA2F(regD dst, memory mem) %{ - predicate(UseSSE>=1); - match(Set dst (Load2F mem)); - ins_cost(145); - format %{ "MOVQ $dst,$mem\t! packed2F" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - // Load Effective Address instruct leaP8(eRegP dst, indOffset8 mem) %{ match(Set dst mem); @@ -6417,7 +6406,7 @@ instruct leaPIdxScaleOff(eRegP dst, indIndexScaleOffset mem) %{ %} // Load Constant -instruct loadConI(eRegI dst, immI src) %{ +instruct loadConI(rRegI dst, immI src) %{ match(Set dst src); format %{ "MOV $dst,$src" %} @@ -6426,7 +6415,7 @@ instruct loadConI(eRegI dst, immI src) %{ %} // Load Constant zero -instruct loadConI0(eRegI dst, immI0 src, eFlagsReg cr) %{ +instruct loadConI0(rRegI dst, immI0 src, eFlagsReg cr) %{ match(Set dst src); effect(KILL cr); @@ -6594,7 +6583,7 @@ instruct loadConD0(regD dst, immD0 src) %{ %} // Load Stack Slot -instruct loadSSI(eRegI dst, stackSlotI src) %{ +instruct loadSSI(rRegI dst, stackSlotI src) %{ match(Set dst src); ins_cost(125); @@ -6821,7 +6810,7 @@ instruct storeB(memory mem, xRegI src) %{ %} // Store Char/Short -instruct storeC(memory mem, eRegI src) %{ +instruct storeC(memory mem, rRegI src) %{ match(Set mem (StoreC mem src)); ins_cost(125); @@ -6832,7 +6821,7 @@ instruct storeC(memory mem, eRegI src) %{ %} // Store Integer -instruct storeI(memory mem, eRegI src) %{ +instruct storeI(memory mem, rRegI src) %{ match(Set mem (StoreI mem src)); ins_cost(125); @@ -6976,42 +6965,6 @@ instruct storeImmB(memory mem, immI8 src) %{ ins_pipe( ialu_mem_imm ); %} -// Store Aligned Packed Byte XMM register to memory -instruct storeA8B(memory mem, regD src) %{ - predicate(UseSSE>=1); - match(Set mem (Store8B mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed8B" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -// Store Aligned Packed Char/Short XMM register to memory -instruct storeA4C(memory mem, regD src) %{ - predicate(UseSSE>=1); - match(Set mem (Store4C mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed4C" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -// Store Aligned Packed Integer XMM register to memory -instruct storeA2I(memory mem, regD src) %{ - predicate(UseSSE>=1); - match(Set mem (Store2I mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed2I" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Store CMS card-mark Immediate instruct storeImmCM(memory mem, immI8 src) %{ match(Set mem (StoreCM mem src)); @@ -7073,18 +7026,6 @@ instruct storeF(memory mem, regF src) %{ ins_pipe( pipe_slow ); %} -// Store Aligned Packed Single Float XMM register to memory -instruct storeA2F(memory mem, regD src) %{ - predicate(UseSSE>=1); - match(Set mem (Store2F mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed2F" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Store Float instruct storeFPR( memory mem, regFPR1 src) %{ predicate(UseSSE==0); @@ -7146,7 +7087,7 @@ instruct storeF_imm( memory mem, immF src) %{ %} // Store Integer to stack slot -instruct storeSSI(stackSlotI dst, eRegI src) %{ +instruct storeSSI(stackSlotI dst, rRegI src) %{ match(Set dst src); ins_cost(100); @@ -7271,7 +7212,7 @@ instruct castX2P(eAXRegP dst, eAXRegI src) %{ ins_pipe(empty); %} -instruct castP2X(eRegI dst, eRegP src ) %{ +instruct castP2X(rRegI dst, eRegP src ) %{ match(Set dst (CastP2X src)); ins_cost(50); format %{ "MOV $dst, $src\t# CastP2X" %} @@ -7281,7 +7222,7 @@ instruct castP2X(eRegI dst, eRegP src ) %{ //----------Conditional Move--------------------------------------------------- // Conditional move -instruct jmovI_reg(cmpOp cop, eFlagsReg cr, eRegI dst, eRegI src) %{ +instruct jmovI_reg(cmpOp cop, eFlagsReg cr, rRegI dst, rRegI src) %{ predicate(!VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7298,7 +7239,7 @@ instruct jmovI_reg(cmpOp cop, eFlagsReg cr, eRegI dst, eRegI src) %{ ins_pipe( pipe_cmov_reg ); %} -instruct jmovI_regU(cmpOpU cop, eFlagsRegU cr, eRegI dst, eRegI src) %{ +instruct jmovI_regU(cmpOpU cop, eFlagsRegU cr, rRegI dst, rRegI src) %{ predicate(!VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7315,7 +7256,7 @@ instruct jmovI_regU(cmpOpU cop, eFlagsRegU cr, eRegI dst, eRegI src) %{ ins_pipe( pipe_cmov_reg ); %} -instruct cmovI_reg(eRegI dst, eRegI src, eFlagsReg cr, cmpOp cop ) %{ +instruct cmovI_reg(rRegI dst, rRegI src, eFlagsReg cr, cmpOp cop ) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7325,7 +7266,7 @@ instruct cmovI_reg(eRegI dst, eRegI src, eFlagsReg cr, cmpOp cop ) %{ ins_pipe( pipe_cmov_reg ); %} -instruct cmovI_regU( cmpOpU cop, eFlagsRegU cr, eRegI dst, eRegI src ) %{ +instruct cmovI_regU( cmpOpU cop, eFlagsRegU cr, rRegI dst, rRegI src ) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7335,7 +7276,7 @@ instruct cmovI_regU( cmpOpU cop, eFlagsRegU cr, eRegI dst, eRegI src ) %{ ins_pipe( pipe_cmov_reg ); %} -instruct cmovI_regUCF( cmpOpUCF cop, eFlagsRegUCF cr, eRegI dst, eRegI src ) %{ +instruct cmovI_regUCF( cmpOpUCF cop, eFlagsRegUCF cr, rRegI dst, rRegI src ) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst src))); ins_cost(200); @@ -7345,7 +7286,7 @@ instruct cmovI_regUCF( cmpOpUCF cop, eFlagsRegUCF cr, eRegI dst, eRegI src ) %{ %} // Conditional move -instruct cmovI_mem(cmpOp cop, eFlagsReg cr, eRegI dst, memory src) %{ +instruct cmovI_mem(cmpOp cop, eFlagsReg cr, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst (LoadI src)))); ins_cost(250); @@ -7356,7 +7297,7 @@ instruct cmovI_mem(cmpOp cop, eFlagsReg cr, eRegI dst, memory src) %{ %} // Conditional move -instruct cmovI_memU(cmpOpU cop, eFlagsRegU cr, eRegI dst, memory src) %{ +instruct cmovI_memU(cmpOpU cop, eFlagsRegU cr, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst (LoadI src)))); ins_cost(250); @@ -7366,7 +7307,7 @@ instruct cmovI_memU(cmpOpU cop, eFlagsRegU cr, eRegI dst, memory src) %{ ins_pipe( pipe_cmov_mem ); %} -instruct cmovI_memUCF(cmpOpUCF cop, eFlagsRegUCF cr, eRegI dst, memory src) %{ +instruct cmovI_memUCF(cmpOpUCF cop, eFlagsRegUCF cr, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() ); match(Set dst (CMoveI (Binary cop cr) (Binary dst (LoadI src)))); ins_cost(250); @@ -7620,7 +7561,7 @@ instruct cmovL_regUCF(cmpOpUCF cop, eFlagsRegUCF cr, eRegL dst, eRegL src) %{ //----------Arithmetic Instructions-------------------------------------------- //----------Addition Instructions---------------------------------------------- // Integer Addition Instructions -instruct addI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct addI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (AddI dst src)); effect(KILL cr); @@ -7631,7 +7572,7 @@ instruct addI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe( ialu_reg_reg ); %} -instruct addI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct addI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (AddI dst src)); effect(KILL cr); @@ -7641,7 +7582,7 @@ instruct addI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct incI_eReg(eRegI dst, immI1 src, eFlagsReg cr) %{ +instruct incI_eReg(rRegI dst, immI1 src, eFlagsReg cr) %{ predicate(UseIncDec); match(Set dst (AddI dst src)); effect(KILL cr); @@ -7653,7 +7594,7 @@ instruct incI_eReg(eRegI dst, immI1 src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct leaI_eReg_immI(eRegI dst, eRegI src0, immI src1) %{ +instruct leaI_eReg_immI(rRegI dst, rRegI src0, immI src1) %{ match(Set dst (AddI src0 src1)); ins_cost(110); @@ -7673,7 +7614,7 @@ instruct leaP_eReg_immI(eRegP dst, eRegP src0, immI src1) %{ ins_pipe( ialu_reg_reg ); %} -instruct decI_eReg(eRegI dst, immI_M1 src, eFlagsReg cr) %{ +instruct decI_eReg(rRegI dst, immI_M1 src, eFlagsReg cr) %{ predicate(UseIncDec); match(Set dst (AddI dst src)); effect(KILL cr); @@ -7685,7 +7626,7 @@ instruct decI_eReg(eRegI dst, immI_M1 src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct addP_eReg(eRegP dst, eRegI src, eFlagsReg cr) %{ +instruct addP_eReg(eRegP dst, rRegI src, eFlagsReg cr) %{ match(Set dst (AddP dst src)); effect(KILL cr); @@ -7707,7 +7648,7 @@ instruct addP_eReg_imm(eRegP dst, immI src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct addI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct addI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (AddI dst (LoadI src))); effect(KILL cr); @@ -7718,7 +7659,7 @@ instruct addI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ ins_pipe( ialu_reg_mem ); %} -instruct addI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct addI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (AddI (LoadI dst) src))); effect(KILL cr); @@ -7780,7 +7721,7 @@ instruct castPP( eRegP dst ) %{ ins_pipe( empty ); %} -instruct castII( eRegI dst ) %{ +instruct castII( rRegI dst ) %{ match(Set dst (CastII dst)); format %{ "#castII of $dst" %} ins_encode( /*empty encoding*/ ); @@ -7814,7 +7755,7 @@ instruct storePConditional( memory heap_top_ptr, eAXRegP oldval, eRegP newval, e // Conditional-store of an int value. // ZF flag is set on success, reset otherwise. Implemented with a CMPXCHG on Intel. -instruct storeIConditional( memory mem, eAXRegI oldval, eRegI newval, eFlagsReg cr ) %{ +instruct storeIConditional( memory mem, eAXRegI oldval, rRegI newval, eFlagsReg cr ) %{ match(Set cr (StoreIConditional mem (Binary oldval newval))); effect(KILL oldval); format %{ "CMPXCHG $mem,$newval\t# If EAX==$mem Then store $newval into $mem" %} @@ -7847,7 +7788,7 @@ instruct storeLConditional( memory mem, eADXRegL oldval, eBCXRegL newval, eFlags // No flag versions for CompareAndSwap{P,I,L} because matcher can't match them -instruct compareAndSwapL( eRegI res, eSIRegP mem_ptr, eADXRegL oldval, eBCXRegL newval, eFlagsReg cr ) %{ +instruct compareAndSwapL( rRegI res, eSIRegP mem_ptr, eADXRegL oldval, eBCXRegL newval, eFlagsReg cr ) %{ match(Set res (CompareAndSwapL mem_ptr (Binary oldval newval))); effect(KILL cr, KILL oldval); format %{ "CMPXCHG8 [$mem_ptr],$newval\t# If EDX:EAX==[$mem_ptr] Then store $newval into [$mem_ptr]\n\t" @@ -7860,7 +7801,7 @@ instruct compareAndSwapL( eRegI res, eSIRegP mem_ptr, eADXRegL oldval, eBCXRegL ins_pipe( pipe_cmpxchg ); %} -instruct compareAndSwapP( eRegI res, pRegP mem_ptr, eAXRegP oldval, eCXRegP newval, eFlagsReg cr) %{ +instruct compareAndSwapP( rRegI res, pRegP mem_ptr, eAXRegP oldval, eCXRegP newval, eFlagsReg cr) %{ match(Set res (CompareAndSwapP mem_ptr (Binary oldval newval))); effect(KILL cr, KILL oldval); format %{ "CMPXCHG [$mem_ptr],$newval\t# If EAX==[$mem_ptr] Then store $newval into [$mem_ptr]\n\t" @@ -7872,7 +7813,7 @@ instruct compareAndSwapP( eRegI res, pRegP mem_ptr, eAXRegP oldval, eCXRegP new ins_pipe( pipe_cmpxchg ); %} -instruct compareAndSwapI( eRegI res, pRegP mem_ptr, eAXRegI oldval, eCXRegI newval, eFlagsReg cr) %{ +instruct compareAndSwapI( rRegI res, pRegP mem_ptr, eAXRegI oldval, eCXRegI newval, eFlagsReg cr) %{ match(Set res (CompareAndSwapI mem_ptr (Binary oldval newval))); effect(KILL cr, KILL oldval); format %{ "CMPXCHG [$mem_ptr],$newval\t# If EAX==[$mem_ptr] Then store $newval into [$mem_ptr]\n\t" @@ -7886,7 +7827,7 @@ instruct compareAndSwapI( eRegI res, pRegP mem_ptr, eAXRegI oldval, eCXRegI newv //----------Subtraction Instructions------------------------------------------- // Integer Subtraction Instructions -instruct subI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct subI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (SubI dst src)); effect(KILL cr); @@ -7897,7 +7838,7 @@ instruct subI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe( ialu_reg_reg ); %} -instruct subI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct subI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (SubI dst src)); effect(KILL cr); @@ -7908,7 +7849,7 @@ instruct subI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct subI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct subI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (SubI dst (LoadI src))); effect(KILL cr); @@ -7919,7 +7860,7 @@ instruct subI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ ins_pipe( ialu_reg_mem ); %} -instruct subI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct subI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (SubI (LoadI dst) src))); effect(KILL cr); @@ -7931,7 +7872,7 @@ instruct subI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ %} // Subtract from a pointer -instruct subP_eReg(eRegP dst, eRegI src, immI0 zero, eFlagsReg cr) %{ +instruct subP_eReg(eRegP dst, rRegI src, immI0 zero, eFlagsReg cr) %{ match(Set dst (AddP dst (SubI zero src))); effect(KILL cr); @@ -7942,7 +7883,7 @@ instruct subP_eReg(eRegP dst, eRegI src, immI0 zero, eFlagsReg cr) %{ ins_pipe( ialu_reg_reg ); %} -instruct negI_eReg(eRegI dst, immI0 zero, eFlagsReg cr) %{ +instruct negI_eReg(rRegI dst, immI0 zero, eFlagsReg cr) %{ match(Set dst (SubI zero dst)); effect(KILL cr); @@ -7957,7 +7898,7 @@ instruct negI_eReg(eRegI dst, immI0 zero, eFlagsReg cr) %{ //----------Multiplication/Division Instructions------------------------------- // Integer Multiplication Instructions // Multiply Register -instruct mulI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct mulI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (MulI dst src)); effect(KILL cr); @@ -7970,7 +7911,7 @@ instruct mulI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ %} // Multiply 32-bit Immediate -instruct mulI_eReg_imm(eRegI dst, eRegI src, immI imm, eFlagsReg cr) %{ +instruct mulI_eReg_imm(rRegI dst, rRegI src, immI imm, eFlagsReg cr) %{ match(Set dst (MulI src imm)); effect(KILL cr); @@ -8026,7 +7967,7 @@ instruct mulI_imm_RShift_high(eDXRegI dst, nadxRegI src1, eADXRegL_low_only src2 %} // Multiply Memory 32-bit Immediate -instruct mulI_mem_imm(eRegI dst, memory src, immI imm, eFlagsReg cr) %{ +instruct mulI_mem_imm(rRegI dst, memory src, immI imm, eFlagsReg cr) %{ match(Set dst (MulI (LoadI src) imm)); effect(KILL cr); @@ -8038,7 +7979,7 @@ instruct mulI_mem_imm(eRegI dst, memory src, immI imm, eFlagsReg cr) %{ %} // Multiply Memory -instruct mulI(eRegI dst, memory src, eFlagsReg cr) %{ +instruct mulI(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (MulI dst (LoadI src))); effect(KILL cr); @@ -8075,7 +8016,7 @@ instruct mulIS_eReg(eADXRegL dst, immL_32bits mask, eFlagsReg flags, eAXRegI src %} // Multiply Register Long -instruct mulL_eReg(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ +instruct mulL_eReg(eADXRegL dst, eRegL src, rRegI tmp, eFlagsReg cr) %{ match(Set dst (MulL dst src)); effect(KILL cr, TEMP tmp); ins_cost(4*100+3*400); @@ -8093,7 +8034,7 @@ instruct mulL_eReg(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ %} // Multiply Register Long where the left operand's high 32 bits are zero -instruct mulL_eReg_lhi0(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ +instruct mulL_eReg_lhi0(eADXRegL dst, eRegL src, rRegI tmp, eFlagsReg cr) %{ predicate(is_operand_hi32_zero(n->in(1))); match(Set dst (MulL dst src)); effect(KILL cr, TEMP tmp); @@ -8114,7 +8055,7 @@ instruct mulL_eReg_lhi0(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ %} // Multiply Register Long where the right operand's high 32 bits are zero -instruct mulL_eReg_rhi0(eADXRegL dst, eRegL src, eRegI tmp, eFlagsReg cr) %{ +instruct mulL_eReg_rhi0(eADXRegL dst, eRegL src, rRegI tmp, eFlagsReg cr) %{ predicate(is_operand_hi32_zero(n->in(2))); match(Set dst (MulL dst src)); effect(KILL cr, TEMP tmp); @@ -8150,7 +8091,7 @@ instruct mulL_eReg_hi0(eADXRegL dst, eRegL src, eFlagsReg cr) %{ %} // Multiply Register Long by small constant -instruct mulL_eReg_con(eADXRegL dst, immL_127 src, eRegI tmp, eFlagsReg cr) %{ +instruct mulL_eReg_con(eADXRegL dst, immL_127 src, rRegI tmp, eFlagsReg cr) %{ match(Set dst (MulL dst src)); effect(KILL cr, TEMP tmp); ins_cost(2*100+2*400); @@ -8248,7 +8189,7 @@ instruct modL_eReg( eADXRegL dst, eRegL src1, eRegL src2, eFlagsReg cr, eCXRegI %} // Divide Register Long (no special case since divisor != -1) -instruct divL_eReg_imm32( eADXRegL dst, immL32 imm, eRegI tmp, eRegI tmp2, eFlagsReg cr ) %{ +instruct divL_eReg_imm32( eADXRegL dst, immL32 imm, rRegI tmp, rRegI tmp2, eFlagsReg cr ) %{ match(Set dst (DivL dst imm)); effect( TEMP tmp, TEMP tmp2, KILL cr ); ins_cost(1000); @@ -8319,7 +8260,7 @@ instruct divL_eReg_imm32( eADXRegL dst, immL32 imm, eRegI tmp, eRegI tmp2, eFlag %} // Remainder Register Long (remainder fit into 32 bits) -instruct modL_eReg_imm32( eADXRegL dst, immL32 imm, eRegI tmp, eRegI tmp2, eFlagsReg cr ) %{ +instruct modL_eReg_imm32( eADXRegL dst, immL32 imm, rRegI tmp, rRegI tmp2, eFlagsReg cr ) %{ match(Set dst (ModL dst imm)); effect( TEMP tmp, TEMP tmp2, KILL cr ); ins_cost(1000); @@ -8387,7 +8328,7 @@ instruct modL_eReg_imm32( eADXRegL dst, immL32 imm, eRegI tmp, eRegI tmp2, eFlag // Integer Shift Instructions // Shift Left by one -instruct shlI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct shlI_eReg_1(rRegI dst, immI1 shift, eFlagsReg cr) %{ match(Set dst (LShiftI dst shift)); effect(KILL cr); @@ -8399,7 +8340,7 @@ instruct shlI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ %} // Shift Left by 8-bit immediate -instruct salI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct salI_eReg_imm(rRegI dst, immI8 shift, eFlagsReg cr) %{ match(Set dst (LShiftI dst shift)); effect(KILL cr); @@ -8411,7 +8352,7 @@ instruct salI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ %} // Shift Left by variable -instruct salI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ +instruct salI_eReg_CL(rRegI dst, eCXRegI shift, eFlagsReg cr) %{ match(Set dst (LShiftI dst shift)); effect(KILL cr); @@ -8423,7 +8364,7 @@ instruct salI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ %} // Arithmetic shift right by one -instruct sarI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct sarI_eReg_1(rRegI dst, immI1 shift, eFlagsReg cr) %{ match(Set dst (RShiftI dst shift)); effect(KILL cr); @@ -8445,7 +8386,7 @@ instruct sarI_mem_1(memory dst, immI1 shift, eFlagsReg cr) %{ %} // Arithmetic Shift Right by 8-bit immediate -instruct sarI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct sarI_eReg_imm(rRegI dst, immI8 shift, eFlagsReg cr) %{ match(Set dst (RShiftI dst shift)); effect(KILL cr); @@ -8468,7 +8409,7 @@ instruct sarI_mem_imm(memory dst, immI8 shift, eFlagsReg cr) %{ %} // Arithmetic Shift Right by variable -instruct sarI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ +instruct sarI_eReg_CL(rRegI dst, eCXRegI shift, eFlagsReg cr) %{ match(Set dst (RShiftI dst shift)); effect(KILL cr); @@ -8480,7 +8421,7 @@ instruct sarI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ %} // Logical shift right by one -instruct shrI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct shrI_eReg_1(rRegI dst, immI1 shift, eFlagsReg cr) %{ match(Set dst (URShiftI dst shift)); effect(KILL cr); @@ -8492,7 +8433,7 @@ instruct shrI_eReg_1(eRegI dst, immI1 shift, eFlagsReg cr) %{ %} // Logical Shift Right by 8-bit immediate -instruct shrI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct shrI_eReg_imm(rRegI dst, immI8 shift, eFlagsReg cr) %{ match(Set dst (URShiftI dst shift)); effect(KILL cr); @@ -8506,7 +8447,7 @@ instruct shrI_eReg_imm(eRegI dst, immI8 shift, eFlagsReg cr) %{ // Logical Shift Right by 24, followed by Arithmetic Shift Left by 24. // This idiom is used by the compiler for the i2b bytecode. -instruct i2b(eRegI dst, xRegI src, immI_24 twentyfour) %{ +instruct i2b(rRegI dst, xRegI src, immI_24 twentyfour) %{ match(Set dst (RShiftI (LShiftI src twentyfour) twentyfour)); size(3); @@ -8519,7 +8460,7 @@ instruct i2b(eRegI dst, xRegI src, immI_24 twentyfour) %{ // Logical Shift Right by 16, followed by Arithmetic Shift Left by 16. // This idiom is used by the compiler the i2s bytecode. -instruct i2s(eRegI dst, xRegI src, immI_16 sixteen) %{ +instruct i2s(rRegI dst, xRegI src, immI_16 sixteen) %{ match(Set dst (RShiftI (LShiftI src sixteen) sixteen)); size(3); @@ -8532,7 +8473,7 @@ instruct i2s(eRegI dst, xRegI src, immI_16 sixteen) %{ // Logical Shift Right by variable -instruct shrI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ +instruct shrI_eReg_CL(rRegI dst, eCXRegI shift, eFlagsReg cr) %{ match(Set dst (URShiftI dst shift)); effect(KILL cr); @@ -8548,7 +8489,7 @@ instruct shrI_eReg_CL(eRegI dst, eCXRegI shift, eFlagsReg cr) %{ //----------Integer Logical Instructions--------------------------------------- // And Instructions // And Register with Register -instruct andI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct andI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (AndI dst src)); effect(KILL cr); @@ -8560,7 +8501,7 @@ instruct andI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ %} // And Register with Immediate -instruct andI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct andI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (AndI dst src)); effect(KILL cr); @@ -8572,7 +8513,7 @@ instruct andI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ %} // And Register with Memory -instruct andI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct andI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (AndI dst (LoadI src))); effect(KILL cr); @@ -8584,7 +8525,7 @@ instruct andI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ %} // And Memory with Register -instruct andI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct andI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (AndI (LoadI dst) src))); effect(KILL cr); @@ -8610,7 +8551,7 @@ instruct andI_mem_imm(memory dst, immI src, eFlagsReg cr) %{ // Or Instructions // Or Register with Register -instruct orI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct orI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (OrI dst src)); effect(KILL cr); @@ -8621,7 +8562,7 @@ instruct orI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ ins_pipe( ialu_reg_reg ); %} -instruct orI_eReg_castP2X(eRegI dst, eRegP src, eFlagsReg cr) %{ +instruct orI_eReg_castP2X(rRegI dst, eRegP src, eFlagsReg cr) %{ match(Set dst (OrI dst (CastP2X src))); effect(KILL cr); @@ -8634,7 +8575,7 @@ instruct orI_eReg_castP2X(eRegI dst, eRegP src, eFlagsReg cr) %{ // Or Register with Immediate -instruct orI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct orI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (OrI dst src)); effect(KILL cr); @@ -8646,7 +8587,7 @@ instruct orI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ %} // Or Register with Memory -instruct orI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct orI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (OrI dst (LoadI src))); effect(KILL cr); @@ -8658,7 +8599,7 @@ instruct orI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ %} // Or Memory with Register -instruct orI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct orI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (OrI (LoadI dst) src))); effect(KILL cr); @@ -8684,7 +8625,7 @@ instruct orI_mem_imm(memory dst, immI src, eFlagsReg cr) %{ // ROL/ROR // ROL expand -instruct rolI_eReg_imm1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct rolI_eReg_imm1(rRegI dst, immI1 shift, eFlagsReg cr) %{ effect(USE_DEF dst, USE shift, KILL cr); format %{ "ROL $dst, $shift" %} @@ -8693,7 +8634,7 @@ instruct rolI_eReg_imm1(eRegI dst, immI1 shift, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct rolI_eReg_imm8(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct rolI_eReg_imm8(rRegI dst, immI8 shift, eFlagsReg cr) %{ effect(USE_DEF dst, USE shift, KILL cr); format %{ "ROL $dst, $shift" %} @@ -8713,7 +8654,7 @@ instruct rolI_eReg_CL(ncxRegI dst, eCXRegI shift, eFlagsReg cr) %{ // end of ROL expand // ROL 32bit by one once -instruct rolI_eReg_i1(eRegI dst, immI1 lshift, immI_M1 rshift, eFlagsReg cr) %{ +instruct rolI_eReg_i1(rRegI dst, immI1 lshift, immI_M1 rshift, eFlagsReg cr) %{ match(Set dst ( OrI (LShiftI dst lshift) (URShiftI dst rshift))); expand %{ @@ -8722,7 +8663,7 @@ instruct rolI_eReg_i1(eRegI dst, immI1 lshift, immI_M1 rshift, eFlagsReg cr) %{ %} // ROL 32bit var by imm8 once -instruct rolI_eReg_i8(eRegI dst, immI8 lshift, immI8 rshift, eFlagsReg cr) %{ +instruct rolI_eReg_i8(rRegI dst, immI8 lshift, immI8 rshift, eFlagsReg cr) %{ predicate( 0 == ((n->in(1)->in(2)->get_int() + n->in(2)->in(2)->get_int()) & 0x1f)); match(Set dst ( OrI (LShiftI dst lshift) (URShiftI dst rshift))); @@ -8750,7 +8691,7 @@ instruct rolI_eReg_Var_C32(ncxRegI dst, eCXRegI shift, immI_32 c32, eFlagsReg cr %} // ROR expand -instruct rorI_eReg_imm1(eRegI dst, immI1 shift, eFlagsReg cr) %{ +instruct rorI_eReg_imm1(rRegI dst, immI1 shift, eFlagsReg cr) %{ effect(USE_DEF dst, USE shift, KILL cr); format %{ "ROR $dst, $shift" %} @@ -8759,7 +8700,7 @@ instruct rorI_eReg_imm1(eRegI dst, immI1 shift, eFlagsReg cr) %{ ins_pipe( ialu_reg ); %} -instruct rorI_eReg_imm8(eRegI dst, immI8 shift, eFlagsReg cr) %{ +instruct rorI_eReg_imm8(rRegI dst, immI8 shift, eFlagsReg cr) %{ effect (USE_DEF dst, USE shift, KILL cr); format %{ "ROR $dst, $shift" %} @@ -8779,7 +8720,7 @@ instruct rorI_eReg_CL(ncxRegI dst, eCXRegI shift, eFlagsReg cr)%{ // end of ROR expand // ROR right once -instruct rorI_eReg_i1(eRegI dst, immI1 rshift, immI_M1 lshift, eFlagsReg cr) %{ +instruct rorI_eReg_i1(rRegI dst, immI1 rshift, immI_M1 lshift, eFlagsReg cr) %{ match(Set dst ( OrI (URShiftI dst rshift) (LShiftI dst lshift))); expand %{ @@ -8788,7 +8729,7 @@ instruct rorI_eReg_i1(eRegI dst, immI1 rshift, immI_M1 lshift, eFlagsReg cr) %{ %} // ROR 32bit by immI8 once -instruct rorI_eReg_i8(eRegI dst, immI8 rshift, immI8 lshift, eFlagsReg cr) %{ +instruct rorI_eReg_i8(rRegI dst, immI8 rshift, immI8 lshift, eFlagsReg cr) %{ predicate( 0 == ((n->in(1)->in(2)->get_int() + n->in(2)->in(2)->get_int()) & 0x1f)); match(Set dst ( OrI (URShiftI dst rshift) (LShiftI dst lshift))); @@ -8817,7 +8758,7 @@ instruct rorI_eReg_Var_C32(ncxRegI dst, eCXRegI shift, immI_32 c32, eFlagsReg cr // Xor Instructions // Xor Register with Register -instruct xorI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ +instruct xorI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ match(Set dst (XorI dst src)); effect(KILL cr); @@ -8829,7 +8770,7 @@ instruct xorI_eReg(eRegI dst, eRegI src, eFlagsReg cr) %{ %} // Xor Register with Immediate -1 -instruct xorI_eReg_im1(eRegI dst, immI_M1 imm) %{ +instruct xorI_eReg_im1(rRegI dst, immI_M1 imm) %{ match(Set dst (XorI dst imm)); size(2); @@ -8841,7 +8782,7 @@ instruct xorI_eReg_im1(eRegI dst, immI_M1 imm) %{ %} // Xor Register with Immediate -instruct xorI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ +instruct xorI_eReg_imm(rRegI dst, immI src, eFlagsReg cr) %{ match(Set dst (XorI dst src)); effect(KILL cr); @@ -8853,7 +8794,7 @@ instruct xorI_eReg_imm(eRegI dst, immI src, eFlagsReg cr) %{ %} // Xor Register with Memory -instruct xorI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ +instruct xorI_eReg_mem(rRegI dst, memory src, eFlagsReg cr) %{ match(Set dst (XorI dst (LoadI src))); effect(KILL cr); @@ -8865,7 +8806,7 @@ instruct xorI_eReg_mem(eRegI dst, memory src, eFlagsReg cr) %{ %} // Xor Memory with Register -instruct xorI_mem_eReg(memory dst, eRegI src, eFlagsReg cr) %{ +instruct xorI_mem_eReg(memory dst, rRegI src, eFlagsReg cr) %{ match(Set dst (StoreI dst (XorI (LoadI dst) src))); effect(KILL cr); @@ -8890,14 +8831,14 @@ instruct xorI_mem_imm(memory dst, immI src, eFlagsReg cr) %{ //----------Convert Int to Boolean--------------------------------------------- -instruct movI_nocopy(eRegI dst, eRegI src) %{ +instruct movI_nocopy(rRegI dst, rRegI src) %{ effect( DEF dst, USE src ); format %{ "MOV $dst,$src" %} ins_encode( enc_Copy( dst, src) ); ins_pipe( ialu_reg_reg ); %} -instruct ci2b( eRegI dst, eRegI src, eFlagsReg cr ) %{ +instruct ci2b( rRegI dst, rRegI src, eFlagsReg cr ) %{ effect( USE_DEF dst, USE src, KILL cr ); size(4); @@ -8908,7 +8849,7 @@ instruct ci2b( eRegI dst, eRegI src, eFlagsReg cr ) %{ ins_pipe( ialu_reg_reg_long ); %} -instruct convI2B( eRegI dst, eRegI src, eFlagsReg cr ) %{ +instruct convI2B( rRegI dst, rRegI src, eFlagsReg cr ) %{ match(Set dst (Conv2B src)); expand %{ @@ -8917,14 +8858,14 @@ instruct convI2B( eRegI dst, eRegI src, eFlagsReg cr ) %{ %} %} -instruct movP_nocopy(eRegI dst, eRegP src) %{ +instruct movP_nocopy(rRegI dst, eRegP src) %{ effect( DEF dst, USE src ); format %{ "MOV $dst,$src" %} ins_encode( enc_Copy( dst, src) ); ins_pipe( ialu_reg_reg ); %} -instruct cp2b( eRegI dst, eRegP src, eFlagsReg cr ) %{ +instruct cp2b( rRegI dst, eRegP src, eFlagsReg cr ) %{ effect( USE_DEF dst, USE src, KILL cr ); format %{ "NEG $dst\n\t" "ADC $dst,$src" %} @@ -8933,7 +8874,7 @@ instruct cp2b( eRegI dst, eRegP src, eFlagsReg cr ) %{ ins_pipe( ialu_reg_reg_long ); %} -instruct convP2B( eRegI dst, eRegP src, eFlagsReg cr ) %{ +instruct convP2B( rRegI dst, eRegP src, eFlagsReg cr ) %{ match(Set dst (Conv2B src)); expand %{ @@ -8958,7 +8899,7 @@ instruct cmpLTMask( eCXRegI dst, ncxRegI p, ncxRegI q, eFlagsReg cr ) %{ ins_pipe( pipe_slow ); %} -instruct cmpLTMask0( eRegI dst, immI0 zero, eFlagsReg cr ) %{ +instruct cmpLTMask0( rRegI dst, immI0 zero, eFlagsReg cr ) %{ match(Set dst (CmpLTMask dst zero)); effect( DEF dst, KILL cr ); ins_cost(100); @@ -9430,7 +9371,7 @@ instruct cmpDPR_cc(eFlagsRegU cr, regDPR src1, regDPR src2, eAXRegI rax) %{ %} // Compare vs zero into -1,0,1 -instruct cmpDPR_0(eRegI dst, regDPR src1, immDPR0 zero, eAXRegI rax, eFlagsReg cr) %{ +instruct cmpDPR_0(rRegI dst, regDPR src1, immDPR0 zero, eAXRegI rax, eFlagsReg cr) %{ predicate(UseSSE<=1); match(Set dst (CmpD3 src1 zero)); effect(KILL cr, KILL rax); @@ -9444,7 +9385,7 @@ instruct cmpDPR_0(eRegI dst, regDPR src1, immDPR0 zero, eAXRegI rax, eFlagsReg c %} // Compare into -1,0,1 -instruct cmpDPR_reg(eRegI dst, regDPR src1, regDPR src2, eAXRegI rax, eFlagsReg cr) %{ +instruct cmpDPR_reg(rRegI dst, regDPR src1, regDPR src2, eAXRegI rax, eFlagsReg cr) %{ predicate(UseSSE<=1); match(Set dst (CmpD3 src1 src2)); effect(KILL cr, KILL rax); @@ -10222,7 +10163,7 @@ instruct cmpFPR_cc(eFlagsRegU cr, regFPR src1, regFPR src2, eAXRegI rax) %{ %} // Compare vs zero into -1,0,1 -instruct cmpFPR_0(eRegI dst, regFPR src1, immFPR0 zero, eAXRegI rax, eFlagsReg cr) %{ +instruct cmpFPR_0(rRegI dst, regFPR src1, immFPR0 zero, eAXRegI rax, eFlagsReg cr) %{ predicate(UseSSE == 0); match(Set dst (CmpF3 src1 zero)); effect(KILL cr, KILL rax); @@ -10236,7 +10177,7 @@ instruct cmpFPR_0(eRegI dst, regFPR src1, immFPR0 zero, eAXRegI rax, eFlagsReg c %} // Compare into -1,0,1 -instruct cmpFPR_reg(eRegI dst, regFPR src1, regFPR src2, eAXRegI rax, eFlagsReg cr) %{ +instruct cmpFPR_reg(rRegI dst, regFPR src1, regFPR src2, eAXRegI rax, eFlagsReg cr) %{ predicate(UseSSE == 0); match(Set dst (CmpF3 src1 src2)); effect(KILL cr, KILL rax); @@ -11156,7 +11097,7 @@ instruct convI2DPR_reg(regDPR dst, stackSlotI src) %{ ins_pipe( fpu_reg_mem ); %} -instruct convI2D_reg(regD dst, eRegI src) %{ +instruct convI2D_reg(regD dst, rRegI src) %{ predicate( UseSSE>=2 && !UseXmmI2D ); match(Set dst (ConvI2D src)); format %{ "CVTSI2SD $dst,$src" %} @@ -11176,7 +11117,7 @@ instruct convI2D_mem(regD dst, memory mem) %{ ins_pipe( pipe_slow ); %} -instruct convXI2D_reg(regD dst, eRegI src) +instruct convXI2D_reg(regD dst, rRegI src) %{ predicate( UseSSE>=2 && UseXmmI2D ); match(Set dst (ConvI2D src)); @@ -11264,7 +11205,7 @@ instruct convI2FPR_mem(regFPR dst, memory mem) %{ %} // Convert an int to a float in xmm; no rounding step needed. -instruct convI2F_reg(regF dst, eRegI src) %{ +instruct convI2F_reg(regF dst, rRegI src) %{ predicate( UseSSE==1 || UseSSE>=2 && !UseXmmI2F ); match(Set dst (ConvI2F src)); format %{ "CVTSI2SS $dst, $src" %} @@ -11274,7 +11215,7 @@ instruct convI2F_reg(regF dst, eRegI src) %{ ins_pipe( pipe_slow ); %} - instruct convXI2F_reg(regF dst, eRegI src) + instruct convXI2F_reg(regF dst, rRegI src) %{ predicate( UseSSE>=2 && UseXmmI2F ); match(Set dst (ConvI2F src)); @@ -11288,7 +11229,7 @@ instruct convI2F_reg(regF dst, eRegI src) %{ ins_pipe(pipe_slow); // XXX %} -instruct convI2L_reg( eRegL dst, eRegI src, eFlagsReg cr) %{ +instruct convI2L_reg( eRegL dst, rRegI src, eFlagsReg cr) %{ match(Set dst (ConvI2L src)); effect(KILL cr); ins_cost(375); @@ -11300,7 +11241,7 @@ instruct convI2L_reg( eRegL dst, eRegI src, eFlagsReg cr) %{ %} // Zero-extend convert int to long -instruct convI2L_reg_zex(eRegL dst, eRegI src, immL_32bits mask, eFlagsReg flags ) %{ +instruct convI2L_reg_zex(eRegL dst, rRegI src, immL_32bits mask, eFlagsReg flags ) %{ match(Set dst (AndL (ConvI2L src) mask) ); effect( KILL flags ); ins_cost(250); @@ -11380,7 +11321,7 @@ instruct convL2FPR_reg( stackSlotF dst, eRegL src, eFlagsReg cr) %{ ins_pipe( pipe_slow ); %} -instruct convL2I_reg( eRegI dst, eRegL src ) %{ +instruct convL2I_reg( rRegI dst, eRegL src ) %{ match(Set dst (ConvL2I src)); effect( DEF dst, USE src ); format %{ "MOV $dst,$src.lo" %} @@ -11389,7 +11330,7 @@ instruct convL2I_reg( eRegI dst, eRegL src ) %{ %} -instruct MoveF2I_stack_reg(eRegI dst, stackSlotF src) %{ +instruct MoveF2I_stack_reg(rRegI dst, stackSlotF src) %{ match(Set dst (MoveF2I src)); effect( DEF dst, USE src ); ins_cost(100); @@ -11424,7 +11365,7 @@ instruct MoveF2I_reg_stack_sse(stackSlotI dst, regF src) %{ ins_pipe( pipe_slow ); %} -instruct MoveF2I_reg_reg_sse(eRegI dst, regF src) %{ +instruct MoveF2I_reg_reg_sse(rRegI dst, regF src) %{ predicate(UseSSE>=2); match(Set dst (MoveF2I src)); effect( DEF dst, USE src ); @@ -11436,7 +11377,7 @@ instruct MoveF2I_reg_reg_sse(eRegI dst, regF src) %{ ins_pipe( pipe_slow ); %} -instruct MoveI2F_reg_stack(stackSlotF dst, eRegI src) %{ +instruct MoveI2F_reg_stack(stackSlotF dst, rRegI src) %{ match(Set dst (MoveI2F src)); effect( DEF dst, USE src ); @@ -11476,7 +11417,7 @@ instruct MoveI2F_stack_reg_sse(regF dst, stackSlotI src) %{ ins_pipe( pipe_slow ); %} -instruct MoveI2F_reg_reg_sse(regF dst, eRegI src) %{ +instruct MoveI2F_reg_reg_sse(regF dst, rRegI src) %{ predicate(UseSSE>=2); match(Set dst (MoveI2F src)); effect( DEF dst, USE src ); @@ -11610,186 +11551,6 @@ instruct MoveL2D_reg_reg_sse(regD dst, eRegL src, regD tmp) %{ ins_pipe( pipe_slow ); %} -// Replicate scalar to packed byte (1 byte) values in xmm -instruct Repl8B_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate8B src)); - format %{ "MOVDQA $dst,$src\n\t" - "PUNPCKLBW $dst,$dst\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate8B" %} - ins_encode %{ - if ($dst$$reg != $src$$reg) { - __ movdqa($dst$$XMMRegister, $src$$XMMRegister); - } - __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( pipe_slow ); -%} - -// Replicate scalar to packed byte (1 byte) values in xmm -instruct Repl8B_eRegI(regD dst, eRegI src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate8B src)); - format %{ "MOVD $dst,$src\n\t" - "PUNPCKLBW $dst,$dst\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate8B" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( pipe_slow ); -%} - -// Replicate scalar zero to packed byte (1 byte) values in xmm -instruct Repl8B_immI0(regD dst, immI0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate8B zero)); - format %{ "PXOR $dst,$dst\t! replicate8B" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed shore (2 byte) values in xmm -instruct Repl4S_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4S src)); - format %{ "PSHUFLW $dst,$src,0x00\t! replicate4S" %} - ins_encode %{ - __ pshuflw($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed shore (2 byte) values in xmm -instruct Repl4S_eRegI(regD dst, eRegI src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4S src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate4S" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed short (2 byte) values in xmm -instruct Repl4S_immI0(regD dst, immI0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4S zero)); - format %{ "PXOR $dst,$dst\t! replicate4S" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed char (2 byte) values in xmm -instruct Repl4C_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4C src)); - format %{ "PSHUFLW $dst,$src,0x00\t! replicate4C" %} - ins_encode %{ - __ pshuflw($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed char (2 byte) values in xmm -instruct Repl4C_eRegI(regD dst, eRegI src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4C src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate4C" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed char (2 byte) values in xmm -instruct Repl4C_immI0(regD dst, immI0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate4C zero)); - format %{ "PXOR $dst,$dst\t! replicate4C" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed integer (4 byte) values in xmm -instruct Repl2I_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2I src)); - format %{ "PSHUFD $dst,$src,0x00\t! replicate2I" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed integer (4 byte) values in xmm -instruct Repl2I_eRegI(regD dst, eRegI src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2I src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFD $dst,$dst,0x00\t! replicate2I" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed integer (2 byte) values in xmm -instruct Repl2I_immI0(regD dst, immI0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2I zero)); - format %{ "PXOR $dst,$dst\t! replicate2I" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_reg(regD dst, regD src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2F src)); - format %{ "PSHUFD $dst,$src,0xe0\t! replicate2F" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0xe0); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_regF(regD dst, regF src) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2F src)); - format %{ "PSHUFD $dst,$src,0xe0\t! replicate2F" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0xe0); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_immF0(regD dst, immF0 zero) %{ - predicate(UseSSE>=2); - match(Set dst (Replicate2F zero)); - format %{ "PXOR $dst,$dst\t! replicate2F" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} // ======================================================================= // fast clearing of an array @@ -11898,7 +11659,7 @@ instruct array_equals(eDIRegP ary1, eSIRegP ary2, eAXRegI result, //----------Control Flow Instructions------------------------------------------ // Signed compare Instructions -instruct compI_eReg(eFlagsReg cr, eRegI op1, eRegI op2) %{ +instruct compI_eReg(eFlagsReg cr, rRegI op1, rRegI op2) %{ match(Set cr (CmpI op1 op2)); effect( DEF cr, USE op1, USE op2 ); format %{ "CMP $op1,$op2" %} @@ -11907,7 +11668,7 @@ instruct compI_eReg(eFlagsReg cr, eRegI op1, eRegI op2) %{ ins_pipe( ialu_cr_reg_reg ); %} -instruct compI_eReg_imm(eFlagsReg cr, eRegI op1, immI op2) %{ +instruct compI_eReg_imm(eFlagsReg cr, rRegI op1, immI op2) %{ match(Set cr (CmpI op1 op2)); effect( DEF cr, USE op1 ); format %{ "CMP $op1,$op2" %} @@ -11918,7 +11679,7 @@ instruct compI_eReg_imm(eFlagsReg cr, eRegI op1, immI op2) %{ %} // Cisc-spilled version of cmpI_eReg -instruct compI_eReg_mem(eFlagsReg cr, eRegI op1, memory op2) %{ +instruct compI_eReg_mem(eFlagsReg cr, rRegI op1, memory op2) %{ match(Set cr (CmpI op1 (LoadI op2))); format %{ "CMP $op1,$op2" %} @@ -11928,7 +11689,7 @@ instruct compI_eReg_mem(eFlagsReg cr, eRegI op1, memory op2) %{ ins_pipe( ialu_cr_reg_mem ); %} -instruct testI_reg( eFlagsReg cr, eRegI src, immI0 zero ) %{ +instruct testI_reg( eFlagsReg cr, rRegI src, immI0 zero ) %{ match(Set cr (CmpI src zero)); effect( DEF cr, USE src ); @@ -11938,7 +11699,7 @@ instruct testI_reg( eFlagsReg cr, eRegI src, immI0 zero ) %{ ins_pipe( ialu_cr_reg_imm ); %} -instruct testI_reg_imm( eFlagsReg cr, eRegI src, immI con, immI0 zero ) %{ +instruct testI_reg_imm( eFlagsReg cr, rRegI src, immI con, immI0 zero ) %{ match(Set cr (CmpI (AndI src con) zero)); format %{ "TEST $src,$con" %} @@ -11947,7 +11708,7 @@ instruct testI_reg_imm( eFlagsReg cr, eRegI src, immI con, immI0 zero ) %{ ins_pipe( ialu_cr_reg_imm ); %} -instruct testI_reg_mem( eFlagsReg cr, eRegI src, memory mem, immI0 zero ) %{ +instruct testI_reg_mem( eFlagsReg cr, rRegI src, memory mem, immI0 zero ) %{ match(Set cr (CmpI (AndI src mem) zero)); format %{ "TEST $src,$mem" %} @@ -11958,7 +11719,7 @@ instruct testI_reg_mem( eFlagsReg cr, eRegI src, memory mem, immI0 zero ) %{ // Unsigned compare Instructions; really, same as signed except they // produce an eFlagsRegU instead of eFlagsReg. -instruct compU_eReg(eFlagsRegU cr, eRegI op1, eRegI op2) %{ +instruct compU_eReg(eFlagsRegU cr, rRegI op1, rRegI op2) %{ match(Set cr (CmpU op1 op2)); format %{ "CMPu $op1,$op2" %} @@ -11967,7 +11728,7 @@ instruct compU_eReg(eFlagsRegU cr, eRegI op1, eRegI op2) %{ ins_pipe( ialu_cr_reg_reg ); %} -instruct compU_eReg_imm(eFlagsRegU cr, eRegI op1, immI op2) %{ +instruct compU_eReg_imm(eFlagsRegU cr, rRegI op1, immI op2) %{ match(Set cr (CmpU op1 op2)); format %{ "CMPu $op1,$op2" %} @@ -11977,7 +11738,7 @@ instruct compU_eReg_imm(eFlagsRegU cr, eRegI op1, immI op2) %{ %} // // Cisc-spilled version of cmpU_eReg -instruct compU_eReg_mem(eFlagsRegU cr, eRegI op1, memory op2) %{ +instruct compU_eReg_mem(eFlagsRegU cr, rRegI op1, memory op2) %{ match(Set cr (CmpU op1 (LoadI op2))); format %{ "CMPu $op1,$op2" %} @@ -11988,7 +11749,7 @@ instruct compU_eReg_mem(eFlagsRegU cr, eRegI op1, memory op2) %{ %} // // Cisc-spilled version of cmpU_eReg -//instruct compU_mem_eReg(eFlagsRegU cr, memory op1, eRegI op2) %{ +//instruct compU_mem_eReg(eFlagsRegU cr, memory op1, rRegI op2) %{ // match(Set cr (CmpU (LoadI op1) op2)); // // format %{ "CMPu $op1,$op2" %} @@ -11997,7 +11758,7 @@ instruct compU_eReg_mem(eFlagsRegU cr, eRegI op1, memory op2) %{ // ins_encode( OpcP, RegMem( op1, op2) ); //%} -instruct testU_reg( eFlagsRegU cr, eRegI src, immI0 zero ) %{ +instruct testU_reg( eFlagsRegU cr, rRegI src, immI0 zero ) %{ match(Set cr (CmpU src zero)); format %{ "TESTu $src,$src" %} @@ -12093,7 +11854,7 @@ instruct testP_Reg_mem( eFlagsReg cr, memory op, immI0 zero ) %{ // *** Min and Max using the conditional move are slower than the // *** branch version on a Pentium III. // // Conditional move for min -//instruct cmovI_reg_lt( eRegI op2, eRegI op1, eFlagsReg cr ) %{ +//instruct cmovI_reg_lt( rRegI op2, rRegI op1, eFlagsReg cr ) %{ // effect( USE_DEF op2, USE op1, USE cr ); // format %{ "CMOVlt $op2,$op1\t! min" %} // opcode(0x4C,0x0F); @@ -12102,7 +11863,7 @@ instruct testP_Reg_mem( eFlagsReg cr, memory op, immI0 zero ) %{ //%} // //// Min Register with Register (P6 version) -//instruct minI_eReg_p6( eRegI op1, eRegI op2 ) %{ +//instruct minI_eReg_p6( rRegI op1, rRegI op2 ) %{ // predicate(VM_Version::supports_cmov() ); // match(Set op2 (MinI op1 op2)); // ins_cost(200); @@ -12114,7 +11875,7 @@ instruct testP_Reg_mem( eFlagsReg cr, memory op, immI0 zero ) %{ //%} // Min Register with Register (generic version) -instruct minI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ +instruct minI_eReg(rRegI dst, rRegI src, eFlagsReg flags) %{ match(Set dst (MinI dst src)); effect(KILL flags); ins_cost(300); @@ -12129,7 +11890,7 @@ instruct minI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ // *** Min and Max using the conditional move are slower than the // *** branch version on a Pentium III. // // Conditional move for max -//instruct cmovI_reg_gt( eRegI op2, eRegI op1, eFlagsReg cr ) %{ +//instruct cmovI_reg_gt( rRegI op2, rRegI op1, eFlagsReg cr ) %{ // effect( USE_DEF op2, USE op1, USE cr ); // format %{ "CMOVgt $op2,$op1\t! max" %} // opcode(0x4F,0x0F); @@ -12138,7 +11899,7 @@ instruct minI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ //%} // // // Max Register with Register (P6 version) -//instruct maxI_eReg_p6( eRegI op1, eRegI op2 ) %{ +//instruct maxI_eReg_p6( rRegI op1, rRegI op2 ) %{ // predicate(VM_Version::supports_cmov() ); // match(Set op2 (MaxI op1 op2)); // ins_cost(200); @@ -12150,7 +11911,7 @@ instruct minI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ //%} // Max Register with Register (generic version) -instruct maxI_eReg(eRegI dst, eRegI src, eFlagsReg flags) %{ +instruct maxI_eReg(rRegI dst, rRegI src, eFlagsReg flags) %{ match(Set dst (MaxI dst src)); effect(KILL flags); ins_cost(300); @@ -12211,7 +11972,7 @@ instruct loopLimit_eReg(eAXRegI limit, nadxRegI init, immI stride, eDXRegI limit // ============================================================================ // Branch Instructions // Jump Table -instruct jumpXtnd(eRegI switch_val) %{ +instruct jumpXtnd(rRegI switch_val) %{ match(Jump switch_val); ins_cost(350); format %{ "JMP [$constantaddress](,$switch_val,1)\n\t" %} @@ -12629,7 +12390,7 @@ instruct cmpL_zero_flags_LTGE( flagsReg_long_LTGE flags, eRegL src, immL0 zero ) // Manifest a CmpL result in the normal flags. Only good for LT or GE // compares. Can be used for LE or GT compares by reversing arguments. // NOT GOOD FOR EQ/NE tests. -instruct cmpL_reg_flags_LTGE( flagsReg_long_LTGE flags, eRegL src1, eRegL src2, eRegI tmp ) %{ +instruct cmpL_reg_flags_LTGE( flagsReg_long_LTGE flags, eRegL src1, eRegL src2, rRegI tmp ) %{ match( Set flags (CmpL src1 src2 )); effect( TEMP tmp ); ins_cost(300); @@ -12675,7 +12436,7 @@ instruct cmovLL_mem_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegL dst, load_lo %} // Compare 2 longs and CMOVE ints. -instruct cmovII_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegI dst, eRegI src) %{ +instruct cmovII_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, rRegI dst, rRegI src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst src))); ins_cost(200); @@ -12685,7 +12446,7 @@ instruct cmovII_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegI dst, eRegI s ins_pipe( pipe_cmov_reg ); %} -instruct cmovII_mem_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, eRegI dst, memory src) %{ +instruct cmovII_mem_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::lt || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ge )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src)))); ins_cost(250); @@ -12746,7 +12507,7 @@ instruct cmovFF_reg_LTGE(cmpOp cmp, flagsReg_long_LTGE flags, regF dst, regF src //====== // Manifest a CmpL result in the normal flags. Only good for EQ/NE compares. -instruct cmpL_zero_flags_EQNE( flagsReg_long_EQNE flags, eRegL src, immL0 zero, eRegI tmp ) %{ +instruct cmpL_zero_flags_EQNE( flagsReg_long_EQNE flags, eRegL src, immL0 zero, rRegI tmp ) %{ match( Set flags (CmpL src zero )); effect(TEMP tmp); ins_cost(200); @@ -12803,7 +12564,7 @@ instruct cmovLL_mem_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegL dst, load_lo %} // Compare 2 longs and CMOVE ints. -instruct cmovII_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegI dst, eRegI src) %{ +instruct cmovII_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, rRegI dst, rRegI src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst src))); ins_cost(200); @@ -12813,7 +12574,7 @@ instruct cmovII_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegI dst, eRegI s ins_pipe( pipe_cmov_reg ); %} -instruct cmovII_mem_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, eRegI dst, memory src) %{ +instruct cmovII_mem_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::eq || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::ne )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src)))); ins_cost(250); @@ -12875,7 +12636,7 @@ instruct cmovFF_reg_EQNE(cmpOp cmp, flagsReg_long_EQNE flags, regF dst, regF src //====== // Manifest a CmpL result in the normal flags. Only good for LE or GT compares. // Same as cmpL_reg_flags_LEGT except must negate src -instruct cmpL_zero_flags_LEGT( flagsReg_long_LEGT flags, eRegL src, immL0 zero, eRegI tmp ) %{ +instruct cmpL_zero_flags_LEGT( flagsReg_long_LEGT flags, eRegL src, immL0 zero, rRegI tmp ) %{ match( Set flags (CmpL src zero )); effect( TEMP tmp ); ins_cost(300); @@ -12889,7 +12650,7 @@ instruct cmpL_zero_flags_LEGT( flagsReg_long_LEGT flags, eRegL src, immL0 zero, // Manifest a CmpL result in the normal flags. Only good for LE or GT compares. // Same as cmpL_reg_flags_LTGE except operands swapped. Swapping operands // requires a commuted test to get the same result. -instruct cmpL_reg_flags_LEGT( flagsReg_long_LEGT flags, eRegL src1, eRegL src2, eRegI tmp ) %{ +instruct cmpL_reg_flags_LEGT( flagsReg_long_LEGT flags, eRegL src1, eRegL src2, rRegI tmp ) %{ match( Set flags (CmpL src1 src2 )); effect( TEMP tmp ); ins_cost(300); @@ -12936,7 +12697,7 @@ instruct cmovLL_mem_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegL dst, %} // Compare 2 longs and CMOVE ints. -instruct cmovII_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegI dst, eRegI src) %{ +instruct cmovII_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, rRegI dst, rRegI src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst src))); ins_cost(200); @@ -12946,7 +12707,7 @@ instruct cmovII_reg_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegI dst, ins_pipe( pipe_cmov_reg ); %} -instruct cmovII_mem_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, eRegI dst, memory src) %{ +instruct cmovII_mem_LEGT(cmpOp_commute cmp, flagsReg_long_LEGT flags, rRegI dst, memory src) %{ predicate(VM_Version::supports_cmov() && ( _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::le || _kids[0]->_kids[0]->_leaf->as_Bool()->_test._test == BoolTest::gt )); match(Set dst (CMoveI (Binary cmp flags) (Binary dst (LoadI src)))); ins_cost(250); @@ -13275,11 +13036,11 @@ instruct tlsLoadP(eRegP dst, eFlagsReg cr) %{ // ---------EXAMPLE---------------------------------------------------------- // // // pertinent parts of existing instructions in architecture description -// instruct movI(eRegI dst, eRegI src) %{ +// instruct movI(rRegI dst, rRegI src) %{ // match(Set dst (CopyI src)); // %} // -// instruct incI_eReg(eRegI dst, immI1 src, eFlagsReg cr) %{ +// instruct incI_eReg(rRegI dst, immI1 src, eFlagsReg cr) %{ // match(Set dst (AddI dst src)); // effect(KILL cr); // %} @@ -13324,11 +13085,11 @@ instruct tlsLoadP(eRegP dst, eFlagsReg cr) %{ // %} // // Change load of spilled value to only a spill -// instruct storeI(memory mem, eRegI src) %{ +// instruct storeI(memory mem, rRegI src) %{ // match(Set mem (StoreI mem src)); // %} // -// instruct loadI(eRegI dst, memory mem) %{ +// instruct loadI(rRegI dst, memory mem) %{ // match(Set dst (LoadI mem)); // %} // diff --git a/hotspot/src/cpu/x86/vm/x86_64.ad b/hotspot/src/cpu/x86/vm/x86_64.ad index 1a5e1c86c6c..68c6d354012 100644 --- a/hotspot/src/cpu/x86/vm/x86_64.ad +++ b/hotspot/src/cpu/x86/vm/x86_64.ad @@ -131,102 +131,6 @@ reg_def R15_H(SOC, SOE, Op_RegI, 15, r15->as_VMReg()->next()); // Floating Point Registers -// XMM registers. 128-bit registers or 4 words each, labeled (a)-d. -// Word a in each register holds a Float, words ab hold a Double. We -// currently do not use the SIMD capabilities, so registers cd are -// unused at the moment. -// XMM8-XMM15 must be encoded with REX. -// Linux ABI: No register preserved across function calls -// XMM0-XMM7 might hold parameters -// Windows ABI: XMM6-XMM15 preserved across function calls -// XMM0-XMM3 might hold parameters - -reg_def XMM0 (SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()); -reg_def XMM0_H (SOC, SOC, Op_RegF, 0, xmm0->as_VMReg()->next()); - -reg_def XMM1 (SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()); -reg_def XMM1_H (SOC, SOC, Op_RegF, 1, xmm1->as_VMReg()->next()); - -reg_def XMM2 (SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()); -reg_def XMM2_H (SOC, SOC, Op_RegF, 2, xmm2->as_VMReg()->next()); - -reg_def XMM3 (SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()); -reg_def XMM3_H (SOC, SOC, Op_RegF, 3, xmm3->as_VMReg()->next()); - -reg_def XMM4 (SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()); -reg_def XMM4_H (SOC, SOC, Op_RegF, 4, xmm4->as_VMReg()->next()); - -reg_def XMM5 (SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()); -reg_def XMM5_H (SOC, SOC, Op_RegF, 5, xmm5->as_VMReg()->next()); - -#ifdef _WIN64 - -reg_def XMM6 (SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()); -reg_def XMM6_H (SOC, SOE, Op_RegF, 6, xmm6->as_VMReg()->next()); - -reg_def XMM7 (SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()); -reg_def XMM7_H (SOC, SOE, Op_RegF, 7, xmm7->as_VMReg()->next()); - -reg_def XMM8 (SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()); -reg_def XMM8_H (SOC, SOE, Op_RegF, 8, xmm8->as_VMReg()->next()); - -reg_def XMM9 (SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()); -reg_def XMM9_H (SOC, SOE, Op_RegF, 9, xmm9->as_VMReg()->next()); - -reg_def XMM10 (SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()); -reg_def XMM10_H(SOC, SOE, Op_RegF, 10, xmm10->as_VMReg()->next()); - -reg_def XMM11 (SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()); -reg_def XMM11_H(SOC, SOE, Op_RegF, 11, xmm11->as_VMReg()->next()); - -reg_def XMM12 (SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()); -reg_def XMM12_H(SOC, SOE, Op_RegF, 12, xmm12->as_VMReg()->next()); - -reg_def XMM13 (SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()); -reg_def XMM13_H(SOC, SOE, Op_RegF, 13, xmm13->as_VMReg()->next()); - -reg_def XMM14 (SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()); -reg_def XMM14_H(SOC, SOE, Op_RegF, 14, xmm14->as_VMReg()->next()); - -reg_def XMM15 (SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()); -reg_def XMM15_H(SOC, SOE, Op_RegF, 15, xmm15->as_VMReg()->next()); - -#else - -reg_def XMM6 (SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()); -reg_def XMM6_H (SOC, SOC, Op_RegF, 6, xmm6->as_VMReg()->next()); - -reg_def XMM7 (SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()); -reg_def XMM7_H (SOC, SOC, Op_RegF, 7, xmm7->as_VMReg()->next()); - -reg_def XMM8 (SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()); -reg_def XMM8_H (SOC, SOC, Op_RegF, 8, xmm8->as_VMReg()->next()); - -reg_def XMM9 (SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()); -reg_def XMM9_H (SOC, SOC, Op_RegF, 9, xmm9->as_VMReg()->next()); - -reg_def XMM10 (SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()); -reg_def XMM10_H(SOC, SOC, Op_RegF, 10, xmm10->as_VMReg()->next()); - -reg_def XMM11 (SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()); -reg_def XMM11_H(SOC, SOC, Op_RegF, 11, xmm11->as_VMReg()->next()); - -reg_def XMM12 (SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()); -reg_def XMM12_H(SOC, SOC, Op_RegF, 12, xmm12->as_VMReg()->next()); - -reg_def XMM13 (SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()); -reg_def XMM13_H(SOC, SOC, Op_RegF, 13, xmm13->as_VMReg()->next()); - -reg_def XMM14 (SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()); -reg_def XMM14_H(SOC, SOC, Op_RegF, 14, xmm14->as_VMReg()->next()); - -reg_def XMM15 (SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()); -reg_def XMM15_H(SOC, SOC, Op_RegF, 15, xmm15->as_VMReg()->next()); - -#endif // _WIN64 - -reg_def RFLAGS(SOC, SOC, 0, 16, VMRegImpl::Bad()); - // Specify priority of register selection within phases of register // allocation. Highest priority is first. A useful heuristic is to // give registers a low priority when they are required by machine @@ -252,26 +156,6 @@ alloc_class chunk0(R10, R10_H, R15, R15_H, RSP, RSP_H); -// XXX probably use 8-15 first on Linux -alloc_class chunk1(XMM0, XMM0_H, - XMM1, XMM1_H, - XMM2, XMM2_H, - XMM3, XMM3_H, - XMM4, XMM4_H, - XMM5, XMM5_H, - XMM6, XMM6_H, - XMM7, XMM7_H, - XMM8, XMM8_H, - XMM9, XMM9_H, - XMM10, XMM10_H, - XMM11, XMM11_H, - XMM12, XMM12_H, - XMM13, XMM13_H, - XMM14, XMM14_H, - XMM15, XMM15_H); - -alloc_class chunk2(RFLAGS); - //----------Architecture Description Register Classes-------------------------- // Several register classes are automatically defined based upon information in @@ -501,47 +385,8 @@ reg_class int_rdi_reg(RDI); // Singleton class for instruction pointer // reg_class ip_reg(RIP); -// Singleton class for condition codes -reg_class int_flags(RFLAGS); - -// Class for all float registers -reg_class float_reg(XMM0, - XMM1, - XMM2, - XMM3, - XMM4, - XMM5, - XMM6, - XMM7, - XMM8, - XMM9, - XMM10, - XMM11, - XMM12, - XMM13, - XMM14, - XMM15); - -// Class for all double registers -reg_class double_reg(XMM0, XMM0_H, - XMM1, XMM1_H, - XMM2, XMM2_H, - XMM3, XMM3_H, - XMM4, XMM4_H, - XMM5, XMM5_H, - XMM6, XMM6_H, - XMM7, XMM7_H, - XMM8, XMM8_H, - XMM9, XMM9_H, - XMM10, XMM10_H, - XMM11, XMM11_H, - XMM12, XMM12_H, - XMM13, XMM13_H, - XMM14, XMM14_H, - XMM15, XMM15_H); %} - //----------SOURCE BLOCK------------------------------------------------------- // This is a block of C++ code which provides values, functions, and // definitions necessary in the rest of the architecture description @@ -1027,12 +872,84 @@ static enum RC rc_class(OptoReg::Name reg) return rc_float; } +// Next two methods are shared by 32- and 64-bit VM. They are defined in x86.ad. +static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo, + int src_hi, int dst_hi, uint ireg, outputStream* st); + +static int vec_spill_helper(CodeBuffer *cbuf, bool do_size, bool is_load, + int stack_offset, int reg, uint ireg, outputStream* st); + +static void vec_stack_to_stack_helper(CodeBuffer *cbuf, int src_offset, + int dst_offset, uint ireg, outputStream* st) { + if (cbuf) { + MacroAssembler _masm(cbuf); + switch (ireg) { + case Op_VecS: + __ movq(Address(rsp, -8), rax); + __ movl(rax, Address(rsp, src_offset)); + __ movl(Address(rsp, dst_offset), rax); + __ movq(rax, Address(rsp, -8)); + break; + case Op_VecD: + __ pushq(Address(rsp, src_offset)); + __ popq (Address(rsp, dst_offset)); + break; + case Op_VecX: + __ pushq(Address(rsp, src_offset)); + __ popq (Address(rsp, dst_offset)); + __ pushq(Address(rsp, src_offset+8)); + __ popq (Address(rsp, dst_offset+8)); + break; + case Op_VecY: + __ vmovdqu(Address(rsp, -32), xmm0); + __ vmovdqu(xmm0, Address(rsp, src_offset)); + __ vmovdqu(Address(rsp, dst_offset), xmm0); + __ vmovdqu(xmm0, Address(rsp, -32)); + break; + default: + ShouldNotReachHere(); + } +#ifndef PRODUCT + } else { + switch (ireg) { + case Op_VecS: + st->print("movq [rsp - #8], rax\t# 32-bit mem-mem spill\n\t" + "movl rax, [rsp + #%d]\n\t" + "movl [rsp + #%d], rax\n\t" + "movq rax, [rsp - #8]", + src_offset, dst_offset); + break; + case Op_VecD: + st->print("pushq [rsp + #%d]\t# 64-bit mem-mem spill\n\t" + "popq [rsp + #%d]", + src_offset, dst_offset); + break; + case Op_VecX: + st->print("pushq [rsp + #%d]\t# 128-bit mem-mem spill\n\t" + "popq [rsp + #%d]\n\t" + "pushq [rsp + #%d]\n\t" + "popq [rsp + #%d]", + src_offset, dst_offset, src_offset+8, dst_offset+8); + break; + case Op_VecY: + st->print("vmovdqu [rsp - #32], xmm0\t# 256-bit mem-mem spill\n\t" + "vmovdqu xmm0, [rsp + #%d]\n\t" + "vmovdqu [rsp + #%d], xmm0\n\t" + "vmovdqu xmm0, [rsp - #32]", + src_offset, dst_offset); + break; + default: + ShouldNotReachHere(); + } +#endif + } +} + uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, PhaseRegAlloc* ra_, bool do_size, - outputStream* st) const -{ - + outputStream* st) const { + assert(cbuf != NULL || st != NULL, "sanity"); // Get registers to move OptoReg::Name src_second = ra_->get_reg_second(in(1)); OptoReg::Name src_first = ra_->get_reg_first(in(1)); @@ -1050,7 +967,30 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, if (src_first == dst_first && src_second == dst_second) { // Self copy, no move return 0; - } else if (src_first_rc == rc_stack) { + } + if (bottom_type()->isa_vect() != NULL) { + uint ireg = ideal_reg(); + assert((src_first_rc != rc_int && dst_first_rc != rc_int), "sanity"); + assert((ireg == Op_VecS || ireg == Op_VecD || ireg == Op_VecX || ireg == Op_VecY), "sanity"); + if( src_first_rc == rc_stack && dst_first_rc == rc_stack ) { + // mem -> mem + int src_offset = ra_->reg2offset(src_first); + int dst_offset = ra_->reg2offset(dst_first); + vec_stack_to_stack_helper(cbuf, src_offset, dst_offset, ireg, st); + } else if (src_first_rc == rc_float && dst_first_rc == rc_float ) { + vec_mov_helper(cbuf, false, src_first, dst_first, src_second, dst_second, ireg, st); + } else if (src_first_rc == rc_float && dst_first_rc == rc_stack ) { + int stack_offset = ra_->reg2offset(dst_first); + vec_spill_helper(cbuf, false, false, stack_offset, src_first, ireg, st); + } else if (src_first_rc == rc_stack && dst_first_rc == rc_float ) { + int stack_offset = ra_->reg2offset(src_first); + vec_spill_helper(cbuf, false, true, stack_offset, dst_first, ireg, st); + } else { + ShouldNotReachHere(); + } + return 0; + } + if (src_first_rc == rc_stack) { // mem -> if (dst_first_rc == rc_stack) { // mem -> mem @@ -1061,23 +1001,16 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, int src_offset = ra_->reg2offset(src_first); int dst_offset = ra_->reg2offset(dst_first); if (cbuf) { - emit_opcode(*cbuf, 0xFF); - encode_RegMem(*cbuf, RSI_enc, RSP_enc, 0x4, 0, src_offset, false); - - emit_opcode(*cbuf, 0x8F); - encode_RegMem(*cbuf, RAX_enc, RSP_enc, 0x4, 0, dst_offset, false); - + MacroAssembler _masm(cbuf); + __ pushq(Address(rsp, src_offset)); + __ popq (Address(rsp, dst_offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("pushq [rsp + #%d]\t# 64-bit mem-mem spill\n\t" - "popq [rsp + #%d]", - src_offset, - dst_offset); + "popq [rsp + #%d]", + src_offset, dst_offset); #endif } - return - 3 + ((src_offset == 0) ? 0 : (src_offset < 0x80 ? 1 : 4)) + - 3 + ((dst_offset == 0) ? 0 : (dst_offset < 0x80 ? 1 : 4)); } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1086,46 +1019,22 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, int src_offset = ra_->reg2offset(src_first); int dst_offset = ra_->reg2offset(dst_first); if (cbuf) { - emit_opcode(*cbuf, Assembler::REX_W); - emit_opcode(*cbuf, 0x89); - emit_opcode(*cbuf, 0x44); - emit_opcode(*cbuf, 0x24); - emit_opcode(*cbuf, 0xF8); - - emit_opcode(*cbuf, 0x8B); - encode_RegMem(*cbuf, - RAX_enc, - RSP_enc, 0x4, 0, src_offset, - false); - - emit_opcode(*cbuf, 0x89); - encode_RegMem(*cbuf, - RAX_enc, - RSP_enc, 0x4, 0, dst_offset, - false); - - emit_opcode(*cbuf, Assembler::REX_W); - emit_opcode(*cbuf, 0x8B); - emit_opcode(*cbuf, 0x44); - emit_opcode(*cbuf, 0x24); - emit_opcode(*cbuf, 0xF8); - + MacroAssembler _masm(cbuf); + __ movq(Address(rsp, -8), rax); + __ movl(rax, Address(rsp, src_offset)); + __ movl(Address(rsp, dst_offset), rax); + __ movq(rax, Address(rsp, -8)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movq [rsp - #8], rax\t# 32-bit mem-mem spill\n\t" - "movl rax, [rsp + #%d]\n\t" - "movl [rsp + #%d], rax\n\t" - "movq rax, [rsp - #8]", - src_offset, - dst_offset); + "movl rax, [rsp + #%d]\n\t" + "movl [rsp + #%d], rax\n\t" + "movq rax, [rsp - #8]", + src_offset, dst_offset); #endif } - return - 5 + // movq - 3 + ((src_offset == 0) ? 0 : (src_offset < 0x80 ? 1 : 4)) + // movl - 3 + ((dst_offset == 0) ? 0 : (dst_offset < 0x80 ? 1 : 4)) + // movl - 5; // movq } + return 0; } else if (dst_first_rc == rc_int) { // mem -> gpr if ((src_first & 1) == 0 && src_first + 1 == src_second && @@ -1133,52 +1042,32 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, // 64-bit int offset = ra_->reg2offset(src_first); if (cbuf) { - if (Matcher::_regEncode[dst_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_W); - } else { - emit_opcode(*cbuf, Assembler::REX_WR); - } - emit_opcode(*cbuf, 0x8B); - encode_RegMem(*cbuf, - Matcher::_regEncode[dst_first], - RSP_enc, 0x4, 0, offset, - false); + MacroAssembler _masm(cbuf); + __ movq(as_Register(Matcher::_regEncode[dst_first]), Address(rsp, offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movq %s, [rsp + #%d]\t# spill", Matcher::regName[dst_first], offset); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + 4; // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); assert(!((dst_first & 1) == 0 && dst_first + 1 == dst_second), "no transform"); int offset = ra_->reg2offset(src_first); if (cbuf) { - if (Matcher::_regEncode[dst_first] >= 8) { - emit_opcode(*cbuf, Assembler::REX_R); - } - emit_opcode(*cbuf, 0x8B); - encode_RegMem(*cbuf, - Matcher::_regEncode[dst_first], - RSP_enc, 0x4, 0, offset, - false); + MacroAssembler _masm(cbuf); + __ movl(as_Register(Matcher::_regEncode[dst_first]), Address(rsp, offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movl %s, [rsp + #%d]\t# spill", Matcher::regName[dst_first], offset); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[dst_first] < 8) - ? 3 - : 4); // REX } + return 0; } else if (dst_first_rc == rc_float) { // mem-> xmm if ((src_first & 1) == 0 && src_first + 1 == src_second && @@ -1189,18 +1078,13 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdbl( as_XMMRegister(Matcher::_regEncode[dst_first]), Address(rsp, offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("%s %s, [rsp + #%d]\t# spill", UseXmmLoadAndClearUpper ? "movsd " : "movlpd", Matcher::regName[dst_first], offset); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[dst_first] >= 8) - ? 6 - : (5 + ((UseAVX>0)?1:0))); // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1210,18 +1094,14 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movflt( as_XMMRegister(Matcher::_regEncode[dst_first]), Address(rsp, offset)); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movss %s, [rsp + #%d]\t# spill", Matcher::regName[dst_first], offset); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[dst_first] >= 8) - ? 6 - : (5 + ((UseAVX>0)?1:0))); // REX } + return 0; } } else if (src_first_rc == rc_int) { // gpr -> @@ -1232,113 +1112,65 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, // 64-bit int offset = ra_->reg2offset(dst_first); if (cbuf) { - if (Matcher::_regEncode[src_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_W); - } else { - emit_opcode(*cbuf, Assembler::REX_WR); - } - emit_opcode(*cbuf, 0x89); - encode_RegMem(*cbuf, - Matcher::_regEncode[src_first], - RSP_enc, 0x4, 0, offset, - false); + MacroAssembler _masm(cbuf); + __ movq(Address(rsp, offset), as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movq [rsp + #%d], %s\t# spill", offset, Matcher::regName[src_first]); #endif } - return ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + 4; // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); assert(!((dst_first & 1) == 0 && dst_first + 1 == dst_second), "no transform"); int offset = ra_->reg2offset(dst_first); if (cbuf) { - if (Matcher::_regEncode[src_first] >= 8) { - emit_opcode(*cbuf, Assembler::REX_R); - } - emit_opcode(*cbuf, 0x89); - encode_RegMem(*cbuf, - Matcher::_regEncode[src_first], - RSP_enc, 0x4, 0, offset, - false); + MacroAssembler _masm(cbuf); + __ movl(Address(rsp, offset), as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movl [rsp + #%d], %s\t# spill", offset, Matcher::regName[src_first]); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[src_first] < 8) - ? 3 - : 4); // REX } + return 0; } else if (dst_first_rc == rc_int) { // gpr -> gpr if ((src_first & 1) == 0 && src_first + 1 == src_second && (dst_first & 1) == 0 && dst_first + 1 == dst_second) { // 64-bit if (cbuf) { - if (Matcher::_regEncode[dst_first] < 8) { - if (Matcher::_regEncode[src_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_W); - } else { - emit_opcode(*cbuf, Assembler::REX_WB); - } - } else { - if (Matcher::_regEncode[src_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_WR); - } else { - emit_opcode(*cbuf, Assembler::REX_WRB); - } - } - emit_opcode(*cbuf, 0x8B); - emit_rm(*cbuf, 0x3, - Matcher::_regEncode[dst_first] & 7, - Matcher::_regEncode[src_first] & 7); + MacroAssembler _masm(cbuf); + __ movq(as_Register(Matcher::_regEncode[dst_first]), + as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movq %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return 3; // REX + return 0; } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); assert(!((dst_first & 1) == 0 && dst_first + 1 == dst_second), "no transform"); if (cbuf) { - if (Matcher::_regEncode[dst_first] < 8) { - if (Matcher::_regEncode[src_first] >= 8) { - emit_opcode(*cbuf, Assembler::REX_B); - } - } else { - if (Matcher::_regEncode[src_first] < 8) { - emit_opcode(*cbuf, Assembler::REX_R); - } else { - emit_opcode(*cbuf, Assembler::REX_RB); - } - } - emit_opcode(*cbuf, 0x8B); - emit_rm(*cbuf, 0x3, - Matcher::_regEncode[dst_first] & 7, - Matcher::_regEncode[src_first] & 7); + MacroAssembler _masm(cbuf); + __ movl(as_Register(Matcher::_regEncode[dst_first]), + as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movl %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return - (Matcher::_regEncode[src_first] < 8 && Matcher::_regEncode[dst_first] < 8) - ? 2 - : 3; // REX + return 0; } } else if (dst_first_rc == rc_float) { // gpr -> xmm @@ -1349,13 +1181,12 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdq( as_XMMRegister(Matcher::_regEncode[dst_first]), as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movdq %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return 5; // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1364,17 +1195,14 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdl( as_XMMRegister(Matcher::_regEncode[dst_first]), as_Register(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movdl %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return - (Matcher::_regEncode[src_first] >= 8 || Matcher::_regEncode[dst_first] >= 8) - ? 5 - : (4 + ((UseAVX>0)?1:0)); // REX } + return 0; } } else if (src_first_rc == rc_float) { // xmm -> @@ -1388,17 +1216,12 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdbl( Address(rsp, offset), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movsd [rsp + #%d], %s\t# spill", offset, Matcher::regName[src_first]); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[src_first] >= 8) - ? 6 - : (5 + ((UseAVX>0)?1:0))); // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1408,18 +1231,14 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movflt(Address(rsp, offset), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movss [rsp + #%d], %s\t# spill", offset, Matcher::regName[src_first]); #endif } - return - ((offset == 0) ? 0 : (offset < 0x80 ? 1 : 4)) + - ((Matcher::_regEncode[src_first] >=8) - ? 6 - : (5 + ((UseAVX>0)?1:0))); // REX } + return 0; } else if (dst_first_rc == rc_int) { // xmm -> gpr if ((src_first & 1) == 0 && src_first + 1 == src_second && @@ -1429,13 +1248,12 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdq( as_Register(Matcher::_regEncode[dst_first]), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movdq %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return 5; // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1444,17 +1262,14 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdl( as_Register(Matcher::_regEncode[dst_first]), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("movdl %s, %s\t# spill", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return - (Matcher::_regEncode[src_first] >= 8 || Matcher::_regEncode[dst_first] >= 8) - ? 5 - : (4 + ((UseAVX>0)?1:0)); // REX } + return 0; } else if (dst_first_rc == rc_float) { // xmm -> xmm if ((src_first & 1) == 0 && src_first + 1 == src_second && @@ -1464,17 +1279,13 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movdbl( as_XMMRegister(Matcher::_regEncode[dst_first]), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("%s %s, %s\t# spill", UseXmmRegToRegMoveAll ? "movapd" : "movsd ", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return - (Matcher::_regEncode[src_first] >= 8 || Matcher::_regEncode[dst_first] >= 8) - ? 5 - : (4 + ((UseAVX>0)?1:0)); // REX } else { // 32-bit assert(!((src_first & 1) == 0 && src_first + 1 == src_second), "no transform"); @@ -1483,42 +1294,35 @@ uint MachSpillCopyNode::implementation(CodeBuffer* cbuf, MacroAssembler _masm(cbuf); __ movflt( as_XMMRegister(Matcher::_regEncode[dst_first]), as_XMMRegister(Matcher::_regEncode[src_first])); #ifndef PRODUCT - } else if (!do_size) { + } else { st->print("%s %s, %s\t# spill", UseXmmRegToRegMoveAll ? "movaps" : "movss ", Matcher::regName[dst_first], Matcher::regName[src_first]); #endif } - return ((UseAVX>0) ? 5: - ((Matcher::_regEncode[src_first] >= 8 || Matcher::_regEncode[dst_first] >= 8) - ? (UseXmmRegToRegMoveAll ? 4 : 5) - : (UseXmmRegToRegMoveAll ? 3 : 4))); // REX } + return 0; } } assert(0," foo "); Unimplemented(); - return 0; } #ifndef PRODUCT -void MachSpillCopyNode::format(PhaseRegAlloc *ra_, outputStream* st) const -{ +void MachSpillCopyNode::format(PhaseRegAlloc *ra_, outputStream* st) const { implementation(NULL, ra_, false, st); } #endif -void MachSpillCopyNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const -{ +void MachSpillCopyNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const { implementation(&cbuf, ra_, false, NULL); } -uint MachSpillCopyNode::size(PhaseRegAlloc *ra_) const -{ - return implementation(NULL, ra_, true, NULL); +uint MachSpillCopyNode::size(PhaseRegAlloc *ra_) const { + return MachNode::size(ra_); } //============================================================================= @@ -1735,16 +1539,6 @@ const bool Matcher::convL2FSupported(void) { return true; } -// Vector width in bytes -const uint Matcher::vector_width_in_bytes(void) { - return 8; -} - -// Vector ideal reg -const uint Matcher::vector_ideal_reg(void) { - return Op_RegD; -} - // Is this branch offset short enough that a short branch can be used? // // NOTE: If the platform does not provide any short branch variants, then @@ -1831,21 +1625,21 @@ const bool Matcher::int_in_long = true; bool Matcher::can_be_java_arg(int reg) { return - reg == RDI_num || reg == RDI_H_num || - reg == RSI_num || reg == RSI_H_num || - reg == RDX_num || reg == RDX_H_num || - reg == RCX_num || reg == RCX_H_num || - reg == R8_num || reg == R8_H_num || - reg == R9_num || reg == R9_H_num || - reg == R12_num || reg == R12_H_num || - reg == XMM0_num || reg == XMM0_H_num || - reg == XMM1_num || reg == XMM1_H_num || - reg == XMM2_num || reg == XMM2_H_num || - reg == XMM3_num || reg == XMM3_H_num || - reg == XMM4_num || reg == XMM4_H_num || - reg == XMM5_num || reg == XMM5_H_num || - reg == XMM6_num || reg == XMM6_H_num || - reg == XMM7_num || reg == XMM7_H_num; + reg == RDI_num || reg == RDI_H_num || + reg == RSI_num || reg == RSI_H_num || + reg == RDX_num || reg == RDX_H_num || + reg == RCX_num || reg == RCX_H_num || + reg == R8_num || reg == R8_H_num || + reg == R9_num || reg == R9_H_num || + reg == R12_num || reg == R12_H_num || + reg == XMM0_num || reg == XMM0b_num || + reg == XMM1_num || reg == XMM1b_num || + reg == XMM2_num || reg == XMM2b_num || + reg == XMM3_num || reg == XMM3b_num || + reg == XMM4_num || reg == XMM4b_num || + reg == XMM5_num || reg == XMM5b_num || + reg == XMM6_num || reg == XMM6b_num || + reg == XMM7_num || reg == XMM7b_num; } bool Matcher::is_spillable_arg(int reg) @@ -3220,10 +3014,11 @@ frame OptoReg::Bad, // Op_RegI RAX_H_num, // Op_RegP OptoReg::Bad, // Op_RegF - XMM0_H_num, // Op_RegD + XMM0b_num, // Op_RegD RAX_H_num // Op_RegL }; - assert(ARRAY_SIZE(hi) == _last_machine_leaf - 1, "missing type"); + // Excluded flags and vector registers. + assert(ARRAY_SIZE(hi) == _last_machine_leaf - 5, "missing type"); return OptoRegPair(hi[ideal_reg], lo[ideal_reg]); %} %} @@ -3985,7 +3780,6 @@ operand regD() interface(REG_INTER); %} - //----------Memory Operands---------------------------------------------------- // Direct Memory Operand // operand direct(immP addr) @@ -5416,61 +5210,6 @@ instruct loadD(regD dst, memory mem) ins_pipe(pipe_slow); // XXX %} -// Load Aligned Packed Byte to XMM register -instruct loadA8B(regD dst, memory mem) %{ - match(Set dst (Load8B mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed8B" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Short to XMM register -instruct loadA4S(regD dst, memory mem) %{ - match(Set dst (Load4S mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed4S" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Char to XMM register -instruct loadA4C(regD dst, memory mem) %{ - match(Set dst (Load4C mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed4C" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Integer to XMM register -instruct load2IU(regD dst, memory mem) %{ - match(Set dst (Load2I mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed2I" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - -// Load Aligned Packed Single to XMM -instruct loadA2F(regD dst, memory mem) %{ - match(Set dst (Load2F mem)); - ins_cost(125); - format %{ "MOVQ $dst,$mem\t! packed2F" %} - ins_encode %{ - __ movq($dst$$XMMRegister, $mem$$Address); - %} - ins_pipe( pipe_slow ); -%} - // Load Effective Address instruct leaP8(rRegP dst, indOffset8 mem) %{ @@ -6200,39 +5939,6 @@ instruct storeImmB(memory mem, immI8 src) ins_pipe(ialu_mem_imm); %} -// Store Aligned Packed Byte XMM register to memory -instruct storeA8B(memory mem, regD src) %{ - match(Set mem (Store8B mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed8B" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -// Store Aligned Packed Char/Short XMM register to memory -instruct storeA4C(memory mem, regD src) %{ - match(Set mem (Store4C mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed4C" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - -// Store Aligned Packed Integer XMM register to memory -instruct storeA2I(memory mem, regD src) %{ - match(Set mem (Store2I mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed2I" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Store CMS card-mark Immediate instruct storeImmCM0_reg(memory mem, immI0 zero) %{ @@ -6258,17 +5964,6 @@ instruct storeImmCM0(memory mem, immI0 src) ins_pipe(ialu_mem_imm); %} -// Store Aligned Packed Single Float XMM register to memory -instruct storeA2F(memory mem, regD src) %{ - match(Set mem (Store2F mem src)); - ins_cost(145); - format %{ "MOVQ $mem,$src\t! packed2F" %} - ins_encode %{ - __ movq($mem$$Address, $src$$XMMRegister); - %} - ins_pipe( pipe_slow ); -%} - // Store Float instruct storeF(memory mem, regF src) %{ @@ -10377,172 +10072,6 @@ instruct MoveL2D_reg_reg(regD dst, rRegL src) %{ ins_pipe( pipe_slow ); %} -// Replicate scalar to packed byte (1 byte) values in xmm -instruct Repl8B_reg(regD dst, regD src) %{ - match(Set dst (Replicate8B src)); - format %{ "MOVDQA $dst,$src\n\t" - "PUNPCKLBW $dst,$dst\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate8B" %} - ins_encode %{ - if ($dst$$reg != $src$$reg) { - __ movdqa($dst$$XMMRegister, $src$$XMMRegister); - } - __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( pipe_slow ); -%} - -// Replicate scalar to packed byte (1 byte) values in xmm -instruct Repl8B_rRegI(regD dst, rRegI src) %{ - match(Set dst (Replicate8B src)); - format %{ "MOVD $dst,$src\n\t" - "PUNPCKLBW $dst,$dst\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate8B" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ punpcklbw($dst$$XMMRegister, $dst$$XMMRegister); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( pipe_slow ); -%} - -// Replicate scalar zero to packed byte (1 byte) values in xmm -instruct Repl8B_immI0(regD dst, immI0 zero) %{ - match(Set dst (Replicate8B zero)); - format %{ "PXOR $dst,$dst\t! replicate8B" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed shore (2 byte) values in xmm -instruct Repl4S_reg(regD dst, regD src) %{ - match(Set dst (Replicate4S src)); - format %{ "PSHUFLW $dst,$src,0x00\t! replicate4S" %} - ins_encode %{ - __ pshuflw($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed shore (2 byte) values in xmm -instruct Repl4S_rRegI(regD dst, rRegI src) %{ - match(Set dst (Replicate4S src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate4S" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed short (2 byte) values in xmm -instruct Repl4S_immI0(regD dst, immI0 zero) %{ - match(Set dst (Replicate4S zero)); - format %{ "PXOR $dst,$dst\t! replicate4S" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed char (2 byte) values in xmm -instruct Repl4C_reg(regD dst, regD src) %{ - match(Set dst (Replicate4C src)); - format %{ "PSHUFLW $dst,$src,0x00\t! replicate4C" %} - ins_encode %{ - __ pshuflw($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed char (2 byte) values in xmm -instruct Repl4C_rRegI(regD dst, rRegI src) %{ - match(Set dst (Replicate4C src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFLW $dst,$dst,0x00\t! replicate4C" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshuflw($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed char (2 byte) values in xmm -instruct Repl4C_immI0(regD dst, immI0 zero) %{ - match(Set dst (Replicate4C zero)); - format %{ "PXOR $dst,$dst\t! replicate4C" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed integer (4 byte) values in xmm -instruct Repl2I_reg(regD dst, regD src) %{ - match(Set dst (Replicate2I src)); - format %{ "PSHUFD $dst,$src,0x00\t! replicate2I" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed integer (4 byte) values in xmm -instruct Repl2I_rRegI(regD dst, rRegI src) %{ - match(Set dst (Replicate2I src)); - format %{ "MOVD $dst,$src\n\t" - "PSHUFD $dst,$dst,0x00\t! replicate2I" %} - ins_encode %{ - __ movdl($dst$$XMMRegister, $src$$Register); - __ pshufd($dst$$XMMRegister, $dst$$XMMRegister, 0x00); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar zero to packed integer (2 byte) values in xmm -instruct Repl2I_immI0(regD dst, immI0 zero) %{ - match(Set dst (Replicate2I zero)); - format %{ "PXOR $dst,$dst\t! replicate2I" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_reg(regD dst, regD src) %{ - match(Set dst (Replicate2F src)); - format %{ "PSHUFD $dst,$src,0xe0\t! replicate2F" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0xe0); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_regF(regD dst, regF src) %{ - match(Set dst (Replicate2F src)); - format %{ "PSHUFD $dst,$src,0xe0\t! replicate2F" %} - ins_encode %{ - __ pshufd($dst$$XMMRegister, $src$$XMMRegister, 0xe0); - %} - ins_pipe( fpu_reg_reg ); -%} - -// Replicate scalar to packed single precision floating point values in xmm -instruct Repl2F_immF0(regD dst, immF0 zero) %{ - match(Set dst (Replicate2F zero)); - format %{ "PXOR $dst,$dst\t! replicate2F" %} - ins_encode %{ - __ pxor($dst$$XMMRegister, $dst$$XMMRegister); - %} - ins_pipe( fpu_reg_reg ); -%} - // ======================================================================= // fast clearing of an array diff --git a/hotspot/src/os/bsd/vm/os_bsd.cpp b/hotspot/src/os/bsd/vm/os_bsd.cpp index f9b21acb464..68ab3fc4c3b 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.cpp +++ b/hotspot/src/os/bsd/vm/os_bsd.cpp @@ -440,7 +440,7 @@ void os::init_system_properties_values() { // code needs to be changed accordingly. // The next few definitions allow the code to be verbatim: -#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n)) +#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n), mtInternal) #define getenv(n) ::getenv(n) /* @@ -1913,11 +1913,11 @@ void os::dll_build_name(char* buffer, size_t buflen, // release the storage for (int i = 0 ; i < n ; i++) { if (pelements[i] != NULL) { - FREE_C_HEAP_ARRAY(char, pelements[i]); + FREE_C_HEAP_ARRAY(char, pelements[i], mtInternal); } } if (pelements != NULL) { - FREE_C_HEAP_ARRAY(char*, pelements); + FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); } } else { snprintf(buffer, buflen, "%s/" JNI_LIB_PREFIX "%s" JNI_LIB_SUFFIX, pname, fname); @@ -2766,7 +2766,7 @@ void bsd_wrap_code(char* base, size_t size) { // All it does is to check if there are enough free pages // left at the time of mmap(). This could be a potential // problem. -bool os::commit_memory(char* addr, size_t size, bool exec) { +bool os::pd_commit_memory(char* addr, size_t size, bool exec) { int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; #ifdef __OpenBSD__ // XXX: Work-around mmap/MAP_FIXED bug temporarily on OpenBSD @@ -2790,7 +2790,7 @@ bool os::commit_memory(char* addr, size_t size, bool exec) { #endif #endif -bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, +bool os::pd_commit_memory(char* addr, size_t size, size_t alignment_hint, bool exec) { #ifndef _ALLBSD_SOURCE if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { @@ -2806,7 +2806,7 @@ bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, return commit_memory(addr, size, exec); } -void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { #ifndef _ALLBSD_SOURCE if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { // We don't check the return value: madvise(MADV_HUGEPAGE) may not @@ -2816,7 +2816,7 @@ void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { #endif } -void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) { ::madvise(addr, bytes, MADV_DONTNEED); } @@ -2958,7 +2958,7 @@ os::Bsd::numa_interleave_memory_func_t os::Bsd::_numa_interleave_memory; unsigned long* os::Bsd::_numa_all_nodes; #endif -bool os::uncommit_memory(char* addr, size_t size) { +bool os::pd_uncommit_memory(char* addr, size_t size) { #ifdef __OpenBSD__ // XXX: Work-around mmap/MAP_FIXED bug temporarily on OpenBSD return ::mprotect(addr, size, PROT_NONE) == 0; @@ -2969,7 +2969,7 @@ bool os::uncommit_memory(char* addr, size_t size) { #endif } -bool os::create_stack_guard_pages(char* addr, size_t size) { +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { return os::commit_memory(addr, size); } @@ -3023,12 +3023,12 @@ static int anon_munmap(char * addr, size_t size) { return ::munmap(addr, size) == 0; } -char* os::reserve_memory(size_t bytes, char* requested_addr, +char* os::pd_reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hint) { return anon_mmap(requested_addr, bytes, (requested_addr != NULL)); } -bool os::release_memory(char* addr, size_t size) { +bool os::pd_release_memory(char* addr, size_t size) { return anon_munmap(addr, size); } @@ -3331,7 +3331,7 @@ bool os::can_execute_large_page_memory() { // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). -char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { const int max_tries = 10; char* base[max_tries]; size_t size[max_tries]; @@ -4987,7 +4987,7 @@ int os::socket_available(int fd, jint *pbytes) { } // Map a block of memory. -char* os::map_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { int prot; @@ -5019,7 +5019,7 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, // Remap a block of memory. -char* os::remap_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { // same as map_memory() on this OS @@ -5029,7 +5029,7 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, // Unmap a block of memory. -bool os::unmap_memory(char* addr, size_t bytes) { +bool os::pd_unmap_memory(char* addr, size_t bytes) { return munmap(addr, bytes) == 0; } @@ -5801,3 +5801,14 @@ bool os::is_headless_jre() { return true; } + +// Get the default path to the core file +// Returns the length of the string +int os::get_core_path(char* buffer, size_t bufferSize) { + int n = jio_snprintf(buffer, bufferSize, "/cores"); + + // Truncate if theoretical string was longer than bufferSize + n = MIN2(n, (int)bufferSize); + + return n; +} diff --git a/hotspot/src/os/bsd/vm/os_bsd.hpp b/hotspot/src/os/bsd/vm/os_bsd.hpp index 271d1e291e9..bb8fe3f211e 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.hpp +++ b/hotspot/src/os/bsd/vm/os_bsd.hpp @@ -312,7 +312,7 @@ public: }; -class PlatformEvent : public CHeapObj { +class PlatformEvent : public CHeapObj { private: double CachePad [4] ; // increase odds that _mutex is sole occupant of cache line volatile int _Event ; @@ -347,7 +347,7 @@ class PlatformEvent : public CHeapObj { void SetAssociation (Thread * a) { _Assoc = a ; } } ; -class PlatformParker : public CHeapObj { +class PlatformParker : public CHeapObj { protected: pthread_mutex_t _mutex [1] ; pthread_cond_t _cond [1] ; diff --git a/hotspot/src/os/bsd/vm/os_bsd.inline.hpp b/hotspot/src/os/bsd/vm/os_bsd.inline.hpp index c582a45315a..9980d4631a2 100644 --- a/hotspot/src/os/bsd/vm/os_bsd.inline.hpp +++ b/hotspot/src/os/bsd/vm/os_bsd.inline.hpp @@ -95,7 +95,7 @@ inline bool os::allocate_stack_guard_pages() { // On Bsd, reservations are made on a page by page basis, nothing to do. -inline void os::split_reserved_memory(char *base, size_t size, +inline void os::pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { } diff --git a/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp b/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp index c93289e5909..e9db634135f 100644 --- a/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp +++ b/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp @@ -126,7 +126,7 @@ static void save_memory_to_file(char* addr, size_t size) { } } } - FREE_C_HEAP_ARRAY(char, destfile); + FREE_C_HEAP_ARRAY(char, destfile, mtInternal); } @@ -153,7 +153,7 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; - char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); + char* dirname = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); // construct the path name to user specific tmp directory snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user); @@ -246,7 +246,7 @@ static char* get_user_name(uid_t uid) { if (bufsize == -1) bufsize = 1024; - char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize); + char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize, mtInternal); // POSIX interface to getpwuid_r is used on LINUX struct passwd* p; @@ -278,14 +278,14 @@ static char* get_user_name(uid_t uid) { "pw_name zero length"); } } - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return NULL; } - char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1); + char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1, mtInternal); strcpy(user_name, p->pw_name); - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return user_name; } @@ -328,7 +328,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { // to determine the user name for the process id. // struct dirent* dentry; - char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname)); + char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal); errno = 0; while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { @@ -338,7 +338,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 2); + strlen(tmpdirname) + strlen(dentry->d_name) + 2, mtInternal); strcpy(usrdir_name, tmpdirname); strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); @@ -346,7 +346,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { DIR* subdirp = os::opendir(usrdir_name); if (subdirp == NULL) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); continue; } @@ -357,13 +357,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // symlink can be exploited. // if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); os::closedir(subdirp); continue; } struct dirent* udentry; - char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); + char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal); errno = 0; while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { @@ -372,7 +372,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { int result; char* filename = NEW_C_HEAP_ARRAY(char, - strlen(usrdir_name) + strlen(udentry->d_name) + 2); + strlen(usrdir_name) + strlen(udentry->d_name) + 2, mtInternal); strcpy(filename, usrdir_name); strcat(filename, "/"); @@ -381,13 +381,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // don't follow symbolic links for the file RESTARTABLE(::lstat(filename, &statbuf), result); if (result == OS_ERR) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } // skip over files that are not regular files. if (!S_ISREG(statbuf.st_mode)) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } @@ -397,23 +397,23 @@ static char* get_user_name_slow(int vmid, TRAPS) { if (statbuf.st_ctime > oldest_ctime) { char* user = strchr(dentry->d_name, '_') + 1; - if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user); - oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user, mtInternal); + oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(oldest_user, user); oldest_ctime = statbuf.st_ctime; } } - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); } } os::closedir(subdirp); - FREE_C_HEAP_ARRAY(char, udbuf); - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, udbuf, mtInternal); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); } os::closedir(tmpdirp); - FREE_C_HEAP_ARRAY(char, tdbuf); + FREE_C_HEAP_ARRAY(char, tdbuf, mtInternal); return(oldest_user); } @@ -434,7 +434,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { // add 2 for the file separator and a null terminator. size_t nbytes = strlen(dirname) + UINT_CHARS + 2; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); snprintf(name, nbytes, "%s/%d", dirname, vmid); return name; @@ -472,7 +472,7 @@ static void remove_file(const char* path) { static void remove_file(const char* dirname, const char* filename) { size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); + char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); strcpy(path, dirname); strcat(path, "/"); @@ -480,7 +480,7 @@ static void remove_file(const char* dirname, const char* filename) { remove_file(path); - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } @@ -517,7 +517,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { // opendir/readdir. // struct dirent* entry; - char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal); errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -556,7 +556,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { errno = 0; } os::closedir(dirp); - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); } // make the user specific temporary directory. Returns true if @@ -723,11 +723,11 @@ static char* mmap_create_shared(size_t size) { fd = create_sharedmem_resources(dirname, filename, size); - FREE_C_HEAP_ARRAY(char, user_name); - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, user_name, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); if (fd == -1) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -743,7 +743,7 @@ static char* mmap_create_shared(size_t size) { warning("mmap failed - %s\n", strerror(errno)); } remove_file(filename); - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -869,7 +869,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor // store file, we don't follow them when attaching either. // if (!is_directory_secure(dirname)) { - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Process not found"); } @@ -884,9 +884,9 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor strcpy(rfilename, filename); // free the c heap resources that are no longer needed - if (luser != user) FREE_C_HEAP_ARRAY(char, luser); - FREE_C_HEAP_ARRAY(char, dirname); - FREE_C_HEAP_ARRAY(char, filename); + if (luser != user) FREE_C_HEAP_ARRAY(char, luser, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); // open the shared memory file for the give vmid fd = open_sharedmem_file(rfilename, file_flags, CHECK); diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp index 53457ec8db9..df6eb0e71c8 100644 --- a/hotspot/src/os/linux/vm/os_linux.cpp +++ b/hotspot/src/os/linux/vm/os_linux.cpp @@ -371,7 +371,7 @@ void os::init_system_properties_values() { // code needs to be changed accordingly. // The next few definitions allow the code to be verbatim: -#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n)) +#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n), mtInternal) #define getenv(n) ::getenv(n) /* @@ -639,7 +639,7 @@ void os::Linux::libpthread_init() { size_t n = confstr(_CS_GNU_LIBC_VERSION, NULL, 0); if (n > 0) { - char *str = (char *)malloc(n); + char *str = (char *)malloc(n, mtInternal); confstr(_CS_GNU_LIBC_VERSION, str, n); os::Linux::set_glibc_version(str); } else { @@ -652,7 +652,7 @@ void os::Linux::libpthread_init() { n = confstr(_CS_GNU_LIBPTHREAD_VERSION, NULL, 0); if (n > 0) { - char *str = (char *)malloc(n); + char *str = (char *)malloc(n, mtInternal); confstr(_CS_GNU_LIBPTHREAD_VERSION, str, n); // Vanilla RH-9 (glibc 2.3.2) has a bug that confstr() always tells // us "NPTL-0.29" even we are running with LinuxThreads. Check if this @@ -1685,11 +1685,11 @@ void os::dll_build_name(char* buffer, size_t buflen, // release the storage for (int i = 0 ; i < n ; i++) { if (pelements[i] != NULL) { - FREE_C_HEAP_ARRAY(char, pelements[i]); + FREE_C_HEAP_ARRAY(char, pelements[i], mtInternal); } } if (pelements != NULL) { - FREE_C_HEAP_ARRAY(char*, pelements); + FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); } } else { snprintf(buffer, buflen, "%s/lib%s.so", pname, fname); @@ -2469,7 +2469,7 @@ void linux_wrap_code(char* base, size_t size) { // All it does is to check if there are enough free pages // left at the time of mmap(). This could be a potential // problem. -bool os::commit_memory(char* addr, size_t size, bool exec) { +bool os::pd_commit_memory(char* addr, size_t size, bool exec) { int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; uintptr_t res = (uintptr_t) ::mmap(addr, size, prot, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0); @@ -2492,7 +2492,7 @@ bool os::commit_memory(char* addr, size_t size, bool exec) { #define MADV_HUGEPAGE 14 #endif -bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, +bool os::pd_commit_memory(char* addr, size_t size, size_t alignment_hint, bool exec) { if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; @@ -2516,7 +2516,7 @@ bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, return false; } -void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) { // We don't check the return value: madvise(MADV_HUGEPAGE) may not // be supported or the memory may already be backed by huge pages. @@ -2524,7 +2524,7 @@ void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { } } -void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) { // This method works by doing an mmap over an existing mmaping and effectively discarding // the existing pages. However it won't work for SHM-based large pages that cannot be // uncommitted at all. We don't do anything in this case to avoid creating a segment with @@ -2646,7 +2646,7 @@ bool os::Linux::libnuma_init() { if (numa_available() != -1) { set_numa_all_nodes((unsigned long*)libnuma_dlsym(handle, "numa_all_nodes")); // Create a cpu -> node mapping - _cpu_to_node = new (ResourceObj::C_HEAP) GrowableArray(0, true); + _cpu_to_node = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(0, true); rebuild_cpu_to_node_map(); return true; } @@ -2676,7 +2676,7 @@ void os::Linux::rebuild_cpu_to_node_map() { cpu_to_node()->at_grow(cpu_num - 1); size_t node_num = numa_get_groups_num(); - unsigned long *cpu_map = NEW_C_HEAP_ARRAY(unsigned long, cpu_map_size); + unsigned long *cpu_map = NEW_C_HEAP_ARRAY(unsigned long, cpu_map_size, mtInternal); for (size_t i = 0; i < node_num; i++) { if (numa_node_to_cpus(i, cpu_map, cpu_map_size * sizeof(unsigned long)) != -1) { for (size_t j = 0; j < cpu_map_valid_size; j++) { @@ -2690,7 +2690,7 @@ void os::Linux::rebuild_cpu_to_node_map() { } } } - FREE_C_HEAP_ARRAY(unsigned long, cpu_map); + FREE_C_HEAP_ARRAY(unsigned long, cpu_map, mtInternal); } int os::Linux::get_node_by_cpu(int cpu_id) { @@ -2709,7 +2709,7 @@ os::Linux::numa_tonode_memory_func_t os::Linux::_numa_tonode_memory; os::Linux::numa_interleave_memory_func_t os::Linux::_numa_interleave_memory; unsigned long* os::Linux::_numa_all_nodes; -bool os::uncommit_memory(char* addr, size_t size) { +bool os::pd_uncommit_memory(char* addr, size_t size) { uintptr_t res = (uintptr_t) ::mmap(addr, size, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_NORESERVE|MAP_ANONYMOUS, -1, 0); return res != (uintptr_t) MAP_FAILED; @@ -2774,7 +2774,7 @@ bool get_stack_bounds(uintptr_t *bottom, uintptr_t *top) { // munmap() the guard pages we don't leave a hole in the stack // mapping. This only affects the main/initial thread, but guard // against future OS changes -bool os::create_stack_guard_pages(char* addr, size_t size) { +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { uintptr_t stack_extent, stack_base; bool chk_bounds = NOT_DEBUG(os::Linux::is_initial_thread()) DEBUG_ONLY(true); if (chk_bounds && get_stack_bounds(&stack_extent, &stack_base)) { @@ -2847,12 +2847,12 @@ static int anon_munmap(char * addr, size_t size) { return ::munmap(addr, size) == 0; } -char* os::reserve_memory(size_t bytes, char* requested_addr, +char* os::pd_reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hint) { return anon_mmap(requested_addr, bytes, (requested_addr != NULL)); } -bool os::release_memory(char* addr, size_t size) { +bool os::pd_release_memory(char* addr, size_t size) { return anon_munmap(addr, size); } @@ -3149,7 +3149,7 @@ bool os::can_execute_large_page_memory() { // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). -char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { const int max_tries = 10; char* base[max_tries]; size_t size[max_tries]; @@ -4671,7 +4671,7 @@ int os::socket_available(int fd, jint *pbytes) { } // Map a block of memory. -char* os::map_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { int prot; @@ -4701,7 +4701,7 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, // Remap a block of memory. -char* os::remap_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { // same as map_memory() on this OS @@ -4711,7 +4711,7 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, // Unmap a block of memory. -bool os::unmap_memory(char* addr, size_t bytes) { +bool os::pd_unmap_memory(char* addr, size_t bytes) { return munmap(addr, bytes) == 0; } @@ -5447,6 +5447,18 @@ bool os::is_headless_jre() { return true; } +// Get the default path to the core file +// Returns the length of the string +int os::get_core_path(char* buffer, size_t bufferSize) { + const char* p = get_current_directory(buffer, bufferSize); + + if (p == NULL) { + assert(p != NULL, "failed to get current directory"); + return 0; + } + + return strlen(buffer); +} #ifdef JAVASE_EMBEDDED // diff --git a/hotspot/src/os/linux/vm/os_linux.hpp b/hotspot/src/os/linux/vm/os_linux.hpp index 7c19517e21e..0f0fa214a04 100644 --- a/hotspot/src/os/linux/vm/os_linux.hpp +++ b/hotspot/src/os/linux/vm/os_linux.hpp @@ -287,7 +287,7 @@ public: }; -class PlatformEvent : public CHeapObj { +class PlatformEvent : public CHeapObj { private: double CachePad [4] ; // increase odds that _mutex is sole occupant of cache line volatile int _Event ; @@ -322,7 +322,7 @@ class PlatformEvent : public CHeapObj { void SetAssociation (Thread * a) { _Assoc = a ; } } ; -class PlatformParker : public CHeapObj { +class PlatformParker : public CHeapObj { protected: pthread_mutex_t _mutex [1] ; pthread_cond_t _cond [1] ; diff --git a/hotspot/src/os/linux/vm/os_linux.inline.hpp b/hotspot/src/os/linux/vm/os_linux.inline.hpp index 566c0ad3168..c663c9b6961 100644 --- a/hotspot/src/os/linux/vm/os_linux.inline.hpp +++ b/hotspot/src/os/linux/vm/os_linux.inline.hpp @@ -99,7 +99,7 @@ inline bool os::allocate_stack_guard_pages() { // On Linux, reservations are made on a page by page basis, nothing to do. -inline void os::split_reserved_memory(char *base, size_t size, +inline void os::pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { } diff --git a/hotspot/src/os/linux/vm/perfMemory_linux.cpp b/hotspot/src/os/linux/vm/perfMemory_linux.cpp index 1cd430cfbc7..8839aac6c10 100644 --- a/hotspot/src/os/linux/vm/perfMemory_linux.cpp +++ b/hotspot/src/os/linux/vm/perfMemory_linux.cpp @@ -126,7 +126,7 @@ static void save_memory_to_file(char* addr, size_t size) { } } } - FREE_C_HEAP_ARRAY(char, destfile); + FREE_C_HEAP_ARRAY(char, destfile, mtInternal); } @@ -153,7 +153,7 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; - char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); + char* dirname = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); // construct the path name to user specific tmp directory snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user); @@ -246,7 +246,7 @@ static char* get_user_name(uid_t uid) { if (bufsize == -1) bufsize = 1024; - char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize); + char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize, mtInternal); // POSIX interface to getpwuid_r is used on LINUX struct passwd* p; @@ -278,14 +278,14 @@ static char* get_user_name(uid_t uid) { "pw_name zero length"); } } - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return NULL; } - char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1); + char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1, mtInternal); strcpy(user_name, p->pw_name); - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return user_name; } @@ -328,7 +328,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { // to determine the user name for the process id. // struct dirent* dentry; - char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname)); + char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal); errno = 0; while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { @@ -338,7 +338,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 2); + strlen(tmpdirname) + strlen(dentry->d_name) + 2, mtInternal); strcpy(usrdir_name, tmpdirname); strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); @@ -346,7 +346,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { DIR* subdirp = os::opendir(usrdir_name); if (subdirp == NULL) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); continue; } @@ -357,13 +357,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // symlink can be exploited. // if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); os::closedir(subdirp); continue; } struct dirent* udentry; - char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); + char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal); errno = 0; while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { @@ -372,7 +372,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { int result; char* filename = NEW_C_HEAP_ARRAY(char, - strlen(usrdir_name) + strlen(udentry->d_name) + 2); + strlen(usrdir_name) + strlen(udentry->d_name) + 2, mtInternal); strcpy(filename, usrdir_name); strcat(filename, "/"); @@ -381,13 +381,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // don't follow symbolic links for the file RESTARTABLE(::lstat(filename, &statbuf), result); if (result == OS_ERR) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } // skip over files that are not regular files. if (!S_ISREG(statbuf.st_mode)) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } @@ -397,23 +397,23 @@ static char* get_user_name_slow(int vmid, TRAPS) { if (statbuf.st_ctime > oldest_ctime) { char* user = strchr(dentry->d_name, '_') + 1; - if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user); - oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user, mtInternal); + oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(oldest_user, user); oldest_ctime = statbuf.st_ctime; } } - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); } } os::closedir(subdirp); - FREE_C_HEAP_ARRAY(char, udbuf); - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, udbuf, mtInternal); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); } os::closedir(tmpdirp); - FREE_C_HEAP_ARRAY(char, tdbuf); + FREE_C_HEAP_ARRAY(char, tdbuf, mtInternal); return(oldest_user); } @@ -434,7 +434,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { // add 2 for the file separator and a null terminator. size_t nbytes = strlen(dirname) + UINT_CHARS + 2; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); snprintf(name, nbytes, "%s/%d", dirname, vmid); return name; @@ -472,7 +472,7 @@ static void remove_file(const char* path) { static void remove_file(const char* dirname, const char* filename) { size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); + char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); strcpy(path, dirname); strcat(path, "/"); @@ -480,7 +480,7 @@ static void remove_file(const char* dirname, const char* filename) { remove_file(path); - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } @@ -517,7 +517,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { // opendir/readdir. // struct dirent* entry; - char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal); errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -556,7 +556,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { errno = 0; } os::closedir(dirp); - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); } // make the user specific temporary directory. Returns true if @@ -723,11 +723,11 @@ static char* mmap_create_shared(size_t size) { fd = create_sharedmem_resources(dirname, filename, size); - FREE_C_HEAP_ARRAY(char, user_name); - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, user_name, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); if (fd == -1) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -743,7 +743,7 @@ static char* mmap_create_shared(size_t size) { warning("mmap failed - %s\n", strerror(errno)); } remove_file(filename); - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -869,7 +869,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor // store file, we don't follow them when attaching either. // if (!is_directory_secure(dirname)) { - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Process not found"); } @@ -884,9 +884,9 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor strcpy(rfilename, filename); // free the c heap resources that are no longer needed - if (luser != user) FREE_C_HEAP_ARRAY(char, luser); - FREE_C_HEAP_ARRAY(char, dirname); - FREE_C_HEAP_ARRAY(char, filename); + if (luser != user) FREE_C_HEAP_ARRAY(char, luser, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); // open the shared memory file for the give vmid fd = open_sharedmem_file(rfilename, file_flags, CHECK); diff --git a/hotspot/src/os/posix/vm/os_posix.cpp b/hotspot/src/os/posix/vm/os_posix.cpp index 9f05a74a4a0..ce355c1cc9f 100644 --- a/hotspot/src/os/posix/vm/os_posix.cpp +++ b/hotspot/src/os/posix/vm/os_posix.cpp @@ -23,6 +23,7 @@ */ #include "prims/jvm.h" +#include "runtime/frame.inline.hpp" #include "runtime/os.hpp" #include "utilities/vmError.hpp" @@ -33,19 +34,19 @@ // Check core dump limit and report possible place where core can be found void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* buffer, size_t bufferSize) { + int n; struct rlimit rlim; - static char cwd[O_BUFLEN]; bool success; - get_current_directory(cwd, sizeof(cwd)); + n = get_core_path(buffer, bufferSize); if (getrlimit(RLIMIT_CORE, &rlim) != 0) { - jio_snprintf(buffer, bufferSize, "%s/core or core.%d (may not exist)", cwd, current_process_id()); + jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d (may not exist)", current_process_id()); success = true; } else { switch(rlim.rlim_cur) { case RLIM_INFINITY: - jio_snprintf(buffer, bufferSize, "%s/core or core.%d", cwd, current_process_id()); + jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d", current_process_id()); success = true; break; case 0: @@ -53,7 +54,7 @@ void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* success = false; break; default: - jio_snprintf(buffer, bufferSize, "%s/core or core.%d (max size %lu kB). To ensure a full core dump, try \"ulimit -c unlimited\" before starting Java again", cwd, current_process_id(), (unsigned long)(rlim.rlim_cur >> 10)); + jio_snprintf(buffer + n, bufferSize - n, "/core or core.%d (max size %lu kB). To ensure a full core dump, try \"ulimit -c unlimited\" before starting Java again", current_process_id(), (unsigned long)(rlim.rlim_cur >> 10)); success = true; break; } @@ -61,6 +62,23 @@ void os::check_or_create_dump(void* exceptionRecord, void* contextRecord, char* VMError::report_coredump_status(buffer, success); } +address os::get_caller_pc(int n) { +#ifdef _NMT_NOINLINE_ + n ++; +#endif + frame fr = os::current_frame(); + while (n > 0 && fr.pc() && + !os::is_first_C_frame(&fr) && fr.sender_pc()) { + fr = os::get_sender_for_C_frame(&fr); + n --; + } + if (n == 0) { + return fr.pc(); + } else { + return NULL; + } +} + int os::get_last_error() { return errno; } diff --git a/hotspot/src/os/solaris/dtrace/hs_private.d b/hotspot/src/os/solaris/dtrace/hs_private.d index 23463a409b3..df395e5c045 100644 --- a/hotspot/src/os/solaris/dtrace/hs_private.d +++ b/hotspot/src/os/solaris/dtrace/hs_private.d @@ -23,7 +23,6 @@ */ provider hs_private { - probe hashtable__new_entry(void*, uintptr_t, void*); probe safepoint__begin(); probe safepoint__end(); probe cms__initmark__begin(); diff --git a/hotspot/src/os/solaris/dtrace/libjvm_db.c b/hotspot/src/os/solaris/dtrace/libjvm_db.c index 2f9a56e919f..62304ec114a 100644 --- a/hotspot/src/os/solaris/dtrace/libjvm_db.c +++ b/hotspot/src/os/solaris/dtrace/libjvm_db.c @@ -516,7 +516,7 @@ name_for_methodOop(jvm_agent_t* J, uint64_t methodOopPtr, char * result, size_t err = read_pointer(J, methodOopPtr + OFFSET_methodOopDesc_constMethod, &constMethod); CHECK_FAIL(err); - err = read_pointer(J->P, constMethod + OFFSET_constMethodOopDesc_constants, &constantPool); + err = read_pointer(J, constMethod + OFFSET_constMethodOopDesc_constants, &constantPool); CHECK_FAIL(err); /* To get name string */ diff --git a/hotspot/src/os/solaris/vm/os_solaris.cpp b/hotspot/src/os/solaris/vm/os_solaris.cpp index c3389a47764..5e11a9d5588 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.cpp +++ b/hotspot/src/os/solaris/vm/os_solaris.cpp @@ -546,7 +546,7 @@ static bool find_processors_in_pset(psetid_t pset, // Find the number of processors in the processor set. if (pset_info(pset, NULL, id_length, NULL) == 0) { // Make up an array to hold their ids. - *id_array = NEW_C_HEAP_ARRAY(processorid_t, *id_length); + *id_array = NEW_C_HEAP_ARRAY(processorid_t, *id_length, mtInternal); // Fill in the array with their processor ids. if (pset_info(pset, NULL, id_length, *id_array) == 0) { result = true; @@ -577,7 +577,7 @@ static bool find_processors_online(processorid_t** id_array, // Find the number of processors online. *id_length = sysconf(_SC_NPROCESSORS_ONLN); // Make up an array to hold their ids. - *id_array = NEW_C_HEAP_ARRAY(processorid_t, *id_length); + *id_array = NEW_C_HEAP_ARRAY(processorid_t, *id_length, mtInternal); // Processors need not be numbered consecutively. long found = 0; processorid_t next = 0; @@ -629,7 +629,7 @@ static bool assign_distribution(processorid_t* id_array, // The next id, to limit loops. const processorid_t limit_id = max_id + 1; // Make up markers for available processors. - bool* available_id = NEW_C_HEAP_ARRAY(bool, limit_id); + bool* available_id = NEW_C_HEAP_ARRAY(bool, limit_id, mtInternal); for (uint c = 0; c < limit_id; c += 1) { available_id[c] = false; } @@ -666,7 +666,7 @@ static bool assign_distribution(processorid_t* id_array, } } if (available_id != NULL) { - FREE_C_HEAP_ARRAY(bool, available_id); + FREE_C_HEAP_ARRAY(bool, available_id, mtInternal); } return true; } @@ -698,7 +698,7 @@ bool os::distribute_processes(uint length, uint* distribution) { } } if (id_array != NULL) { - FREE_C_HEAP_ARRAY(processorid_t, id_array); + FREE_C_HEAP_ARRAY(processorid_t, id_array, mtInternal); } return result; } @@ -771,8 +771,8 @@ void os::init_system_properties_values() { // code needs to be changed accordingly. // The next few definitions allow the code to be verbatim: -#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n)) -#define free(p) FREE_C_HEAP_ARRAY(char, p) +#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n), mtInternal) +#define free(p) FREE_C_HEAP_ARRAY(char, p, mtInternal) #define getenv(n) ::getenv(n) #define EXTENSIONS_DIR "/lib/ext" @@ -1927,11 +1927,11 @@ void os::dll_build_name(char* buffer, size_t buflen, // release the storage for (int i = 0 ; i < n ; i++) { if (pelements[i] != NULL) { - FREE_C_HEAP_ARRAY(char, pelements[i]); + FREE_C_HEAP_ARRAY(char, pelements[i], mtInternal); } } if (pelements != NULL) { - FREE_C_HEAP_ARRAY(char*, pelements); + FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); } } else { snprintf(buffer, buflen, "%s/lib%s.so", pname, fname); @@ -2662,17 +2662,17 @@ void os::Solaris::init_signal_mem() { // pending_signals has one int per signal // The additional signal is for SIGEXIT - exit signal to signal_thread - pending_signals = (jint *)os::malloc(sizeof(jint) * (Sigexit+1)); + pending_signals = (jint *)os::malloc(sizeof(jint) * (Sigexit+1), mtInternal); memset(pending_signals, 0, (sizeof(jint) * (Sigexit+1))); if (UseSignalChaining) { chainedsigactions = (struct sigaction *)malloc(sizeof(struct sigaction) - * (Maxsignum + 1)); + * (Maxsignum + 1), mtInternal); memset(chainedsigactions, 0, (sizeof(struct sigaction) * (Maxsignum + 1))); - preinstalled_sigs = (int *)os::malloc(sizeof(int) * (Maxsignum + 1)); + preinstalled_sigs = (int *)os::malloc(sizeof(int) * (Maxsignum + 1), mtInternal); memset(preinstalled_sigs, 0, (sizeof(int) * (Maxsignum + 1))); } - ourSigFlags = (int*)malloc(sizeof(int) * (Maxsignum + 1 )); + ourSigFlags = (int*)malloc(sizeof(int) * (Maxsignum + 1 ), mtInternal); memset(ourSigFlags, 0, sizeof(int) * (Maxsignum + 1)); } @@ -2760,7 +2760,7 @@ int os::vm_allocation_granularity() { return page_size; } -bool os::commit_memory(char* addr, size_t bytes, bool exec) { +bool os::pd_commit_memory(char* addr, size_t bytes, bool exec) { int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE; size_t size = bytes; char *res = Solaris::mmap_chunk(addr, size, MAP_PRIVATE|MAP_FIXED, prot); @@ -2773,7 +2773,7 @@ bool os::commit_memory(char* addr, size_t bytes, bool exec) { return false; } -bool os::commit_memory(char* addr, size_t bytes, size_t alignment_hint, +bool os::pd_commit_memory(char* addr, size_t bytes, size_t alignment_hint, bool exec) { if (commit_memory(addr, bytes, exec)) { if (UseMPSS && alignment_hint > (size_t)vm_page_size()) { @@ -2803,14 +2803,14 @@ bool os::commit_memory(char* addr, size_t bytes, size_t alignment_hint, } // Uncommit the pages in a specified region. -void os::free_memory(char* addr, size_t bytes, size_t alignment_hint) { +void os::pd_free_memory(char* addr, size_t bytes, size_t alignment_hint) { if (madvise(addr, bytes, MADV_FREE) < 0) { debug_only(warning("MADV_FREE failed.")); return; } } -bool os::create_stack_guard_pages(char* addr, size_t size) { +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { return os::commit_memory(addr, size); } @@ -2819,7 +2819,7 @@ bool os::remove_stack_guard_pages(char* addr, size_t size) { } // Change the page size in a given range. -void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { +void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { assert((intptr_t)addr % alignment_hint == 0, "Address should be aligned."); assert((intptr_t)(addr + bytes) % alignment_hint == 0, "End should be aligned."); if (UseLargePages && UseMPSS) { @@ -3006,7 +3006,7 @@ char *os::scan_pages(char *start, char* end, page_info* page_expected, page_info return end; } -bool os::uncommit_memory(char* addr, size_t bytes) { +bool os::pd_uncommit_memory(char* addr, size_t bytes) { size_t size = bytes; // Map uncommitted pages PROT_NONE so we fail early if we touch an // uncommitted page. Otherwise, the read/write might succeed if we @@ -3045,7 +3045,7 @@ char* os::Solaris::anon_mmap(char* requested_addr, size_t bytes, size_t alignmen return mmap_chunk(addr, bytes, flags, PROT_NONE); } -char* os::reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hint) { +char* os::pd_reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hint) { char* addr = Solaris::anon_mmap(requested_addr, bytes, alignment_hint, (requested_addr != NULL)); guarantee(requested_addr == NULL || requested_addr == addr, @@ -3056,7 +3056,7 @@ char* os::reserve_memory(size_t bytes, char* requested_addr, size_t alignment_hi // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). -char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { const int max_tries = 10; char* base[max_tries]; size_t size[max_tries]; @@ -3178,7 +3178,7 @@ char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { return (i < max_tries) ? requested_addr : NULL; } -bool os::release_memory(char* addr, size_t bytes) { +bool os::pd_release_memory(char* addr, size_t bytes) { size_t size = bytes; return munmap(addr, size) == 0; } @@ -4792,7 +4792,7 @@ bool isT2_libthread() { lwpSize = 16*1024; for (;;) { ::lseek64 (lwpFile, 0, SEEK_SET); - lwpArray = (prheader_t *)NEW_C_HEAP_ARRAY(char, lwpSize); + lwpArray = (prheader_t *)NEW_C_HEAP_ARRAY(char, lwpSize, mtInternal); if (::read(lwpFile, lwpArray, lwpSize) < 0) { if (ThreadPriorityVerbose) warning("Error reading /proc/self/lstatus\n"); break; @@ -4810,10 +4810,10 @@ bool isT2_libthread() { break; } lwpSize = lwpArray->pr_nent * lwpArray->pr_entsize; - FREE_C_HEAP_ARRAY(char, lwpArray); // retry. + FREE_C_HEAP_ARRAY(char, lwpArray, mtInternal); // retry. } - FREE_C_HEAP_ARRAY(char, lwpArray); + FREE_C_HEAP_ARRAY(char, lwpArray, mtInternal); ::close (lwpFile); if (ThreadPriorityVerbose) { if (isT2) tty->print_cr("We are running with a T2 libthread\n"); @@ -5137,9 +5137,9 @@ jint os::init_2(void) { UseNUMA = false; } else { size_t lgrp_limit = os::numa_get_groups_num(); - int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit); + int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit, mtInternal); size_t lgrp_num = os::numa_get_leaf_groups(lgrp_ids, lgrp_limit); - FREE_C_HEAP_ARRAY(int, lgrp_ids); + FREE_C_HEAP_ARRAY(int, lgrp_ids, mtInternal); if (lgrp_num < 2) { // There's only one locality group, disable NUMA. UseNUMA = false; @@ -5485,7 +5485,7 @@ int os::available(int fd, jlong *bytes) { } // Map a block of memory. -char* os::map_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { int prot; @@ -5517,7 +5517,7 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, // Remap a block of memory. -char* os::remap_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { // same as map_memory() on this OS @@ -5527,7 +5527,7 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, // Unmap a block of memory. -bool os::unmap_memory(char* addr, size_t bytes) { +bool os::pd_unmap_memory(char* addr, size_t bytes) { return munmap(addr, bytes) == 0; } @@ -6537,3 +6537,16 @@ int os::bind(int fd, struct sockaddr* him, socklen_t len) { INTERRUPTIBLE_RETURN_INT_NORESTART(::bind(fd, him, len),\ os::Solaris::clear_interrupted); } + +// Get the default path to the core file +// Returns the length of the string +int os::get_core_path(char* buffer, size_t bufferSize) { + const char* p = get_current_directory(buffer, bufferSize); + + if (p == NULL) { + assert(p != NULL, "failed to get current directory"); + return 0; + } + + return strlen(buffer); +} diff --git a/hotspot/src/os/solaris/vm/os_solaris.hpp b/hotspot/src/os/solaris/vm/os_solaris.hpp index 340aa4b7775..174f2529dbe 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.hpp +++ b/hotspot/src/os/solaris/vm/os_solaris.hpp @@ -346,7 +346,7 @@ class Solaris { }; -class PlatformEvent : public CHeapObj { +class PlatformEvent : public CHeapObj { private: double CachePad [4] ; // increase odds that _mutex is sole occupant of cache line volatile int _Event ; @@ -383,7 +383,7 @@ class PlatformEvent : public CHeapObj { void unpark () ; } ; -class PlatformParker : public CHeapObj { +class PlatformParker : public CHeapObj { protected: mutex_t _mutex [1] ; cond_t _cond [1] ; diff --git a/hotspot/src/os/solaris/vm/os_solaris.inline.hpp b/hotspot/src/os/solaris/vm/os_solaris.inline.hpp index 7b63badc434..2468100fc43 100644 --- a/hotspot/src/os/solaris/vm/os_solaris.inline.hpp +++ b/hotspot/src/os/solaris/vm/os_solaris.inline.hpp @@ -71,7 +71,7 @@ inline bool os::allocate_stack_guard_pages() { // On Solaris, reservations are made on a page by page basis, nothing to do. -inline void os::split_reserved_memory(char *base, size_t size, +inline void os::pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { } diff --git a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp index 1d1ff260cd8..c841ff8a1b6 100644 --- a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp +++ b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp @@ -128,7 +128,7 @@ static void save_memory_to_file(char* addr, size_t size) { } } } - FREE_C_HEAP_ARRAY(char, destfile); + FREE_C_HEAP_ARRAY(char, destfile, mtInternal); } @@ -155,7 +155,7 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; - char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); + char* dirname = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); // construct the path name to user specific tmp directory snprintf(dirname, nbytes, "%s/%s_%s", tmpdir, perfdir, user); @@ -248,7 +248,7 @@ static char* get_user_name(uid_t uid) { if (bufsize == -1) bufsize = 1024; - char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize); + char* pwbuf = NEW_C_HEAP_ARRAY(char, bufsize, mtInternal); #ifdef _GNU_SOURCE struct passwd* p = NULL; @@ -269,14 +269,14 @@ static char* get_user_name(uid_t uid) { "pw_name zero length"); } } - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return NULL; } - char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1); + char* user_name = NEW_C_HEAP_ARRAY(char, strlen(p->pw_name) + 1, mtInternal); strcpy(user_name, p->pw_name); - FREE_C_HEAP_ARRAY(char, pwbuf); + FREE_C_HEAP_ARRAY(char, pwbuf, mtInternal); return user_name; } @@ -319,7 +319,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { // to determine the user name for the process id. // struct dirent* dentry; - char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname)); + char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal); errno = 0; while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { @@ -329,7 +329,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 2); + strlen(tmpdirname) + strlen(dentry->d_name) + 2, mtInternal); strcpy(usrdir_name, tmpdirname); strcat(usrdir_name, "/"); strcat(usrdir_name, dentry->d_name); @@ -337,7 +337,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { DIR* subdirp = os::opendir(usrdir_name); if (subdirp == NULL) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); continue; } @@ -348,13 +348,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // symlink can be exploited. // if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); os::closedir(subdirp); continue; } struct dirent* udentry; - char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); + char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal); errno = 0; while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { @@ -363,7 +363,7 @@ static char* get_user_name_slow(int vmid, TRAPS) { int result; char* filename = NEW_C_HEAP_ARRAY(char, - strlen(usrdir_name) + strlen(udentry->d_name) + 2); + strlen(usrdir_name) + strlen(udentry->d_name) + 2, mtInternal); strcpy(filename, usrdir_name); strcat(filename, "/"); @@ -372,13 +372,13 @@ static char* get_user_name_slow(int vmid, TRAPS) { // don't follow symbolic links for the file RESTARTABLE(::lstat(filename, &statbuf), result); if (result == OS_ERR) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } // skip over files that are not regular files. if (!S_ISREG(statbuf.st_mode)) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } @@ -388,23 +388,23 @@ static char* get_user_name_slow(int vmid, TRAPS) { if (statbuf.st_ctime > oldest_ctime) { char* user = strchr(dentry->d_name, '_') + 1; - if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user); - oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user, mtInternal); + oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(oldest_user, user); oldest_ctime = statbuf.st_ctime; } } - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); } } os::closedir(subdirp); - FREE_C_HEAP_ARRAY(char, udbuf); - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, udbuf, mtInternal); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); } os::closedir(tmpdirp); - FREE_C_HEAP_ARRAY(char, tdbuf); + FREE_C_HEAP_ARRAY(char, tdbuf, mtInternal); return(oldest_user); } @@ -471,7 +471,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { // add 2 for the file separator and a NULL terminator. size_t nbytes = strlen(dirname) + UINT_CHARS + 2; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); snprintf(name, nbytes, "%s/%d", dirname, vmid); return name; @@ -509,7 +509,7 @@ static void remove_file(const char* path) { static void remove_file(const char* dirname, const char* filename) { size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); + char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); strcpy(path, dirname); strcat(path, "/"); @@ -517,7 +517,7 @@ static void remove_file(const char* dirname, const char* filename) { remove_file(path); - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } @@ -554,7 +554,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { // opendir/readdir. // struct dirent* entry; - char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal); errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -593,7 +593,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { errno = 0; } os::closedir(dirp); - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); } // make the user specific temporary directory. Returns true if @@ -738,11 +738,11 @@ static char* mmap_create_shared(size_t size) { fd = create_sharedmem_resources(dirname, filename, size); - FREE_C_HEAP_ARRAY(char, user_name); - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, user_name, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); if (fd == -1) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -758,7 +758,7 @@ static char* mmap_create_shared(size_t size) { warning("mmap failed - %s\n", strerror(errno)); } remove_file(filename); - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); return NULL; } @@ -884,7 +884,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor // store file, we don't follow them when attaching either. // if (!is_directory_secure(dirname)) { - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Process not found"); } @@ -899,9 +899,9 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor strcpy(rfilename, filename); // free the c heap resources that are no longer needed - if (luser != user) FREE_C_HEAP_ARRAY(char, luser); - FREE_C_HEAP_ARRAY(char, dirname); - FREE_C_HEAP_ARRAY(char, filename); + if (luser != user) FREE_C_HEAP_ARRAY(char, luser, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); // open the shared memory file for the give vmid fd = open_sharedmem_file(rfilename, file_flags, CHECK); diff --git a/hotspot/src/os/windows/vm/os_windows.cpp b/hotspot/src/os/windows/vm/os_windows.cpp index 440b8026233..5534a1ea0a1 100644 --- a/hotspot/src/os/windows/vm/os_windows.cpp +++ b/hotspot/src/os/windows/vm/os_windows.cpp @@ -96,7 +96,6 @@ #include #include // For _beginthreadex(), _endthreadex() #include // For os::dll_address_to_function_name - /* for enumerating dll libraries */ #include @@ -214,13 +213,13 @@ void os::init_system_properties_values() { } } - home_path = NEW_C_HEAP_ARRAY(char, strlen(home_dir) + 1); + home_path = NEW_C_HEAP_ARRAY(char, strlen(home_dir) + 1, mtInternal); if (home_path == NULL) return; strcpy(home_path, home_dir); Arguments::set_java_home(home_path); - dll_path = NEW_C_HEAP_ARRAY(char, strlen(home_dir) + strlen(bin) + 1); + dll_path = NEW_C_HEAP_ARRAY(char, strlen(home_dir) + strlen(bin) + 1, mtInternal); if (dll_path == NULL) return; strcpy(dll_path, home_dir); @@ -251,7 +250,7 @@ void os::init_system_properties_values() { char *path_str = ::getenv("PATH"); library_path = NEW_C_HEAP_ARRAY(char, MAX_PATH * 5 + sizeof(PACKAGE_DIR) + - sizeof(BIN_DIR) + (path_str ? strlen(path_str) : 0) + 10); + sizeof(BIN_DIR) + (path_str ? strlen(path_str) : 0) + 10, mtInternal); library_path[0] = '\0'; @@ -280,7 +279,7 @@ void os::init_system_properties_values() { strcat(library_path, ";."); Arguments::set_library_path(library_path); - FREE_C_HEAP_ARRAY(char, library_path); + FREE_C_HEAP_ARRAY(char, library_path, mtInternal); } /* Default extensions directory */ @@ -300,7 +299,7 @@ void os::init_system_properties_values() { { #define ENDORSED_DIR "\\lib\\endorsed" size_t len = strlen(Arguments::get_java_home()) + sizeof(ENDORSED_DIR); - char * buf = NEW_C_HEAP_ARRAY(char, len); + char * buf = NEW_C_HEAP_ARRAY(char, len, mtInternal); sprintf(buf, "%s%s", Arguments::get_java_home(), ENDORSED_DIR); Arguments::set_endorsed_dirs(buf); #undef ENDORSED_DIR @@ -324,6 +323,23 @@ extern "C" void breakpoint() { os::breakpoint(); } +/* + * RtlCaptureStackBackTrace Windows API may not exist prior to Windows XP. + * So far, this method is only used by Native Memory Tracking, which is + * only supported on Windows XP or later. + */ +address os::get_caller_pc(int n) { +#ifdef _NMT_NOINLINE_ + n ++; +#endif + address pc; + if (os::Kernel32Dll::RtlCaptureStackBackTrace(n + 1, 1, (PVOID*)&pc, NULL) == 1) { + return pc; + } + return NULL; +} + + // os::current_stack_base() // // Returns the base of the stack, which is the stack's @@ -1014,7 +1030,7 @@ DIR * os::opendir(const char *dirname) { assert(dirname != NULL, "just checking"); // hotspot change - DIR *dirp = (DIR *)malloc(sizeof(DIR)); + DIR *dirp = (DIR *)malloc(sizeof(DIR), mtInternal); DWORD fattr; // hotspot change char alt_dirname[4] = { 0, 0, 0, 0 }; @@ -1036,9 +1052,9 @@ os::opendir(const char *dirname) dirname = alt_dirname; } - dirp->path = (char *)malloc(strlen(dirname) + 5); + dirp->path = (char *)malloc(strlen(dirname) + 5, mtInternal); if (dirp->path == 0) { - free(dirp); + free(dirp, mtInternal); errno = ENOMEM; return 0; } @@ -1046,13 +1062,13 @@ os::opendir(const char *dirname) fattr = GetFileAttributes(dirp->path); if (fattr == 0xffffffff) { - free(dirp->path); - free(dirp); + free(dirp->path, mtInternal); + free(dirp, mtInternal); errno = ENOENT; return 0; } else if ((fattr & FILE_ATTRIBUTE_DIRECTORY) == 0) { - free(dirp->path); - free(dirp); + free(dirp->path, mtInternal); + free(dirp, mtInternal); errno = ENOTDIR; return 0; } @@ -1070,8 +1086,8 @@ os::opendir(const char *dirname) dirp->handle = FindFirstFile(dirp->path, &dirp->find_data); if (dirp->handle == INVALID_HANDLE_VALUE) { if (GetLastError() != ERROR_FILE_NOT_FOUND) { - free(dirp->path); - free(dirp); + free(dirp->path, mtInternal); + free(dirp, mtInternal); errno = EACCES; return 0; } @@ -1114,8 +1130,8 @@ os::closedir(DIR *dirp) } dirp->handle = INVALID_HANDLE_VALUE; } - free(dirp->path); - free(dirp); + free(dirp->path, mtInternal); + free(dirp, mtInternal); return 0; } @@ -1176,11 +1192,11 @@ void os::dll_build_name(char *buffer, size_t buflen, // release the storage for (int i = 0 ; i < n ; i++) { if (pelements[i] != NULL) { - FREE_C_HEAP_ARRAY(char, pelements[i]); + FREE_C_HEAP_ARRAY(char, pelements[i], mtInternal); } } if (pelements != NULL) { - FREE_C_HEAP_ARRAY(char*, pelements); + FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); } } else { jio_snprintf(buffer, buflen, "%s\\%s.dll", pname, fname); @@ -2637,7 +2653,7 @@ private: void free_node_list() { if (_numa_used_node_list != NULL) { - FREE_C_HEAP_ARRAY(int, _numa_used_node_list); + FREE_C_HEAP_ARRAY(int, _numa_used_node_list, mtInternal); } } @@ -2659,7 +2675,7 @@ public: ULONG highest_node_number; if (!os::Kernel32Dll::GetNumaHighestNodeNumber(&highest_node_number)) return false; free_node_list(); - _numa_used_node_list = NEW_C_HEAP_ARRAY(int, highest_node_number + 1); + _numa_used_node_list = NEW_C_HEAP_ARRAY(int, highest_node_number + 1, mtInternal); for (unsigned int i = 0; i <= highest_node_number; i++) { ULONGLONG proc_mask_numa_node; if (!os::Kernel32Dll::GetNumaNodeProcessorMask(i, &proc_mask_numa_node)) return false; @@ -2918,7 +2934,7 @@ void os::large_page_init() { // On win32, one cannot release just a part of reserved memory, it's an // all or nothing deal. When we split a reservation, we must break the // reservation into two reservations. -void os::split_reserved_memory(char *base, size_t size, size_t split, +void os::pd_split_reserved_memory(char *base, size_t size, size_t split, bool realloc) { if (size > 0) { release_memory(base, size); @@ -2931,7 +2947,7 @@ void os::split_reserved_memory(char *base, size_t size, size_t split, } } -char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { +char* os::pd_reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { assert((size_t)addr % os::vm_allocation_granularity() == 0, "reserve alignment"); assert(bytes % os::vm_allocation_granularity() == 0, "reserve block size"); @@ -2964,7 +2980,7 @@ char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { // Reserve memory at an arbitrary address, only if that area is // available (and not reserved for something else). -char* os::attempt_reserve_memory_at(size_t bytes, char* requested_addr) { +char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { // Windows os::reserve_memory() fails of the requested address range is // not avilable. return reserve_memory(bytes, requested_addr); @@ -3027,7 +3043,7 @@ bool os::release_memory_special(char* base, size_t bytes) { void os::print_statistics() { } -bool os::commit_memory(char* addr, size_t bytes, bool exec) { +bool os::pd_commit_memory(char* addr, size_t bytes, bool exec) { if (bytes == 0) { // Don't bother the OS with noops. return true; @@ -3075,26 +3091,26 @@ bool os::commit_memory(char* addr, size_t bytes, bool exec) { return true; } -bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, +bool os::pd_commit_memory(char* addr, size_t size, size_t alignment_hint, bool exec) { return commit_memory(addr, size, exec); } -bool os::uncommit_memory(char* addr, size_t bytes) { +bool os::pd_uncommit_memory(char* addr, size_t bytes) { if (bytes == 0) { // Don't bother the OS with noops. return true; } assert((size_t) addr % os::vm_page_size() == 0, "uncommit on page boundaries"); assert(bytes % os::vm_page_size() == 0, "uncommit in page-sized chunks"); - return VirtualFree(addr, bytes, MEM_DECOMMIT) != 0; + return (VirtualFree(addr, bytes, MEM_DECOMMIT) != 0); } -bool os::release_memory(char* addr, size_t bytes) { +bool os::pd_release_memory(char* addr, size_t bytes) { return VirtualFree(addr, 0, MEM_RELEASE) != 0; } -bool os::create_stack_guard_pages(char* addr, size_t size) { +bool os::pd_create_stack_guard_pages(char* addr, size_t size) { return os::commit_memory(addr, size); } @@ -3141,8 +3157,8 @@ bool os::unguard_memory(char* addr, size_t bytes) { return VirtualProtect(addr, bytes, PAGE_READWRITE, &old_status) != 0; } -void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { } -void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { } +void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { } +void os::pd_free_memory(char *addr, size_t bytes, size_t alignment_hint) { } void os::numa_make_global(char *addr, size_t bytes) { } void os::numa_make_local(char *addr, size_t bytes, int lgrp_hint) { } bool os::numa_topology_changed() { return false; } @@ -4276,14 +4292,14 @@ static int stdinAvailable(int fd, long *pbytes) { numEvents = MAX_INPUT_EVENTS; } - lpBuffer = (INPUT_RECORD *)os::malloc(numEvents * sizeof(INPUT_RECORD)); + lpBuffer = (INPUT_RECORD *)os::malloc(numEvents * sizeof(INPUT_RECORD), mtInternal); if (lpBuffer == NULL) { return FALSE; } error = ::PeekConsoleInput(han, lpBuffer, numEvents, &numEventsRead); if (error == 0) { - os::free(lpBuffer); + os::free(lpBuffer, mtInternal); return FALSE; } @@ -4304,7 +4320,7 @@ static int stdinAvailable(int fd, long *pbytes) { } if(lpBuffer != NULL) { - os::free(lpBuffer); + os::free(lpBuffer, mtInternal); } *pbytes = (long) actualLength; @@ -4312,7 +4328,7 @@ static int stdinAvailable(int fd, long *pbytes) { } // Map a block of memory. -char* os::map_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { HANDLE hFile; @@ -4432,7 +4448,7 @@ char* os::map_memory(int fd, const char* file_name, size_t file_offset, // Remap a block of memory. -char* os::remap_memory(int fd, const char* file_name, size_t file_offset, +char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, bool allow_exec) { // This OS does not allow existing memory maps to be remapped so we @@ -4445,15 +4461,15 @@ char* os::remap_memory(int fd, const char* file_name, size_t file_offset, // call above and the map_memory() call below where a thread in native // code may be able to access an address that is no longer mapped. - return os::map_memory(fd, file_name, file_offset, addr, bytes, read_only, - allow_exec); + return os::map_memory(fd, file_name, file_offset, addr, bytes, + read_only, allow_exec); } // Unmap a block of memory. // Returns true=success, otherwise false. -bool os::unmap_memory(char* addr, size_t bytes) { +bool os::pd_unmap_memory(char* addr, size_t bytes) { BOOL result = UnmapViewOfFile(addr); if (result == 0) { if (PrintMiscellaneous && Verbose) { @@ -4931,11 +4947,15 @@ typedef SIZE_T (WINAPI* GetLargePageMinimum_Fn)(void); typedef LPVOID (WINAPI *VirtualAllocExNuma_Fn) (HANDLE, LPVOID, SIZE_T, DWORD, DWORD, DWORD); typedef BOOL (WINAPI *GetNumaHighestNodeNumber_Fn) (PULONG); typedef BOOL (WINAPI *GetNumaNodeProcessorMask_Fn) (UCHAR, PULONGLONG); +typedef USHORT (WINAPI* RtlCaptureStackBackTrace_Fn)(ULONG, ULONG, PVOID*, PULONG); GetLargePageMinimum_Fn os::Kernel32Dll::_GetLargePageMinimum = NULL; VirtualAllocExNuma_Fn os::Kernel32Dll::_VirtualAllocExNuma = NULL; GetNumaHighestNodeNumber_Fn os::Kernel32Dll::_GetNumaHighestNodeNumber = NULL; GetNumaNodeProcessorMask_Fn os::Kernel32Dll::_GetNumaNodeProcessorMask = NULL; +RtlCaptureStackBackTrace_Fn os::Kernel32Dll::_RtlCaptureStackBackTrace = NULL; + + BOOL os::Kernel32Dll::initialized = FALSE; SIZE_T os::Kernel32Dll::GetLargePageMinimum() { assert(initialized && _GetLargePageMinimum != NULL, @@ -4978,6 +4998,19 @@ BOOL os::Kernel32Dll::GetNumaNodeProcessorMask(UCHAR node, PULONGLONG proc_mask) return _GetNumaNodeProcessorMask(node, proc_mask); } +USHORT os::Kernel32Dll::RtlCaptureStackBackTrace(ULONG FrameToSkip, + ULONG FrameToCapture, PVOID* BackTrace, PULONG BackTraceHash) { + if (!initialized) { + initialize(); + } + + if (_RtlCaptureStackBackTrace != NULL) { + return _RtlCaptureStackBackTrace(FrameToSkip, FrameToCapture, + BackTrace, BackTraceHash); + } else { + return 0; + } +} void os::Kernel32Dll::initializeCommon() { if (!initialized) { @@ -4987,6 +5020,7 @@ void os::Kernel32Dll::initializeCommon() { _VirtualAllocExNuma = (VirtualAllocExNuma_Fn)::GetProcAddress(handle, "VirtualAllocExNuma"); _GetNumaHighestNodeNumber = (GetNumaHighestNodeNumber_Fn)::GetProcAddress(handle, "GetNumaHighestNodeNumber"); _GetNumaNodeProcessorMask = (GetNumaNodeProcessorMask_Fn)::GetProcAddress(handle, "GetNumaNodeProcessorMask"); + _RtlCaptureStackBackTrace = (RtlCaptureStackBackTrace_Fn)::GetProcAddress(handle, "RtlCaptureStackBackTrace"); initialized = TRUE; } } @@ -5101,7 +5135,6 @@ Module32First_Fn os::Kernel32Dll::_Module32First = NULL; Module32Next_Fn os::Kernel32Dll::_Module32Next = NULL; GetNativeSystemInfo_Fn os::Kernel32Dll::_GetNativeSystemInfo = NULL; - void os::Kernel32Dll::initialize() { if (!initialized) { HMODULE handle = ::GetModuleHandle("Kernel32.dll"); @@ -5179,8 +5212,6 @@ void os::Kernel32Dll::GetNativeSystemInfo(LPSYSTEM_INFO lpSystemInfo) { _GetNativeSystemInfo(lpSystemInfo); } - - // PSAPI API diff --git a/hotspot/src/os/windows/vm/os_windows.hpp b/hotspot/src/os/windows/vm/os_windows.hpp index e0692e5f2f7..33ea7064ba6 100644 --- a/hotspot/src/os/windows/vm/os_windows.hpp +++ b/hotspot/src/os/windows/vm/os_windows.hpp @@ -98,7 +98,7 @@ class win32 { static LONG WINAPI serialize_fault_filter(struct _EXCEPTION_POINTERS* e); }; -class PlatformEvent : public CHeapObj { +class PlatformEvent : public CHeapObj { private: double CachePad [4] ; // increase odds that _Event is sole occupant of cache line volatile int _Event ; @@ -124,7 +124,7 @@ class PlatformEvent : public CHeapObj { -class PlatformParker : public CHeapObj { +class PlatformParker : public CHeapObj { protected: HANDLE _ParkEvent ; @@ -182,6 +182,9 @@ public: static BOOL GetNumaHighestNodeNumber(PULONG); static BOOL GetNumaNodeProcessorMask(UCHAR, PULONGLONG); + // Stack walking + static USHORT RtlCaptureStackBackTrace(ULONG, ULONG, PVOID*, PULONG); + private: // GetLargePageMinimum available on Windows Vista/Windows Server 2003 // and later @@ -191,6 +194,7 @@ private: static LPVOID (WINAPI *_VirtualAllocExNuma) (HANDLE, LPVOID, SIZE_T, DWORD, DWORD, DWORD); static BOOL (WINAPI *_GetNumaHighestNodeNumber) (PULONG); static BOOL (WINAPI *_GetNumaNodeProcessorMask) (UCHAR, PULONGLONG); + static USHORT (WINAPI *_RtlCaptureStackBackTrace)(ULONG, ULONG, PVOID*, PULONG); static BOOL initialized; static void initialize(); diff --git a/hotspot/src/os/windows/vm/perfMemory_windows.cpp b/hotspot/src/os/windows/vm/perfMemory_windows.cpp index 4f3280d5906..2358171b78a 100644 --- a/hotspot/src/os/windows/vm/perfMemory_windows.cpp +++ b/hotspot/src/os/windows/vm/perfMemory_windows.cpp @@ -120,7 +120,7 @@ static void save_memory_to_file(char* addr, size_t size) { } } - FREE_C_HEAP_ARRAY(char, destfile); + FREE_C_HEAP_ARRAY(char, destfile, mtInternal); } // Shared Memory Implementation Details @@ -157,7 +157,7 @@ static char* get_user_tmp_dir(const char* user) { const char* tmpdir = os::get_temp_directory(); const char* perfdir = PERFDATA_NAME; size_t nbytes = strlen(tmpdir) + strlen(perfdir) + strlen(user) + 3; - char* dirname = NEW_C_HEAP_ARRAY(char, nbytes); + char* dirname = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); // construct the path name to user specific tmp directory _snprintf(dirname, nbytes, "%s\\%s_%s", tmpdir, perfdir, user); @@ -281,7 +281,7 @@ static char* get_user_name() { } } - char* user_name = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + char* user_name = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(user_name, user); return user_name; @@ -315,7 +315,7 @@ static char* get_user_name_slow(int vmid) { // to determine the user name for the process id. // struct dirent* dentry; - char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname)); + char* tdbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(tmpdirname), mtInternal); errno = 0; while ((dentry = os::readdir(tmpdirp, (struct dirent *)tdbuf)) != NULL) { @@ -325,7 +325,7 @@ static char* get_user_name_slow(int vmid) { } char* usrdir_name = NEW_C_HEAP_ARRAY(char, - strlen(tmpdirname) + strlen(dentry->d_name) + 2); + strlen(tmpdirname) + strlen(dentry->d_name) + 2, mtInternal); strcpy(usrdir_name, tmpdirname); strcat(usrdir_name, "\\"); strcat(usrdir_name, dentry->d_name); @@ -333,7 +333,7 @@ static char* get_user_name_slow(int vmid) { DIR* subdirp = os::opendir(usrdir_name); if (subdirp == NULL) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); continue; } @@ -344,13 +344,13 @@ static char* get_user_name_slow(int vmid) { // symlink can be exploited. // if (!is_directory_secure(usrdir_name)) { - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); os::closedir(subdirp); continue; } struct dirent* udentry; - char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name)); + char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name), mtInternal); errno = 0; while ((udentry = os::readdir(subdirp, (struct dirent *)udbuf)) != NULL) { @@ -358,20 +358,20 @@ static char* get_user_name_slow(int vmid) { struct stat statbuf; char* filename = NEW_C_HEAP_ARRAY(char, - strlen(usrdir_name) + strlen(udentry->d_name) + 2); + strlen(usrdir_name) + strlen(udentry->d_name) + 2, mtInternal); strcpy(filename, usrdir_name); strcat(filename, "\\"); strcat(filename, udentry->d_name); if (::stat(filename, &statbuf) == OS_ERR) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } // skip over files that are not regular files. if ((statbuf.st_mode & S_IFMT) != S_IFREG) { - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); continue; } @@ -393,22 +393,22 @@ static char* get_user_name_slow(int vmid) { if (statbuf.st_ctime > latest_ctime) { char* user = strchr(dentry->d_name, '_') + 1; - if (latest_user != NULL) FREE_C_HEAP_ARRAY(char, latest_user); - latest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1); + if (latest_user != NULL) FREE_C_HEAP_ARRAY(char, latest_user, mtInternal); + latest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal); strcpy(latest_user, user); latest_ctime = statbuf.st_ctime; } - FREE_C_HEAP_ARRAY(char, filename); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); } } os::closedir(subdirp); - FREE_C_HEAP_ARRAY(char, udbuf); - FREE_C_HEAP_ARRAY(char, usrdir_name); + FREE_C_HEAP_ARRAY(char, udbuf, mtInternal); + FREE_C_HEAP_ARRAY(char, usrdir_name, mtInternal); } os::closedir(tmpdirp); - FREE_C_HEAP_ARRAY(char, tdbuf); + FREE_C_HEAP_ARRAY(char, tdbuf, mtInternal); return(latest_user); } @@ -453,7 +453,7 @@ static char *get_sharedmem_objectname(const char* user, int vmid) { // about a name containing a '-' characters. // nbytes += UINT_CHARS; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); _snprintf(name, nbytes, "%s_%s_%u", PERFDATA_NAME, user, vmid); return name; @@ -469,7 +469,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { // add 2 for the file separator and a null terminator. size_t nbytes = strlen(dirname) + UINT_CHARS + 2; - char* name = NEW_C_HEAP_ARRAY(char, nbytes); + char* name = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); _snprintf(name, nbytes, "%s\\%d", dirname, vmid); return name; @@ -485,7 +485,7 @@ static char* get_sharedmem_filename(const char* dirname, int vmid) { static void remove_file(const char* dirname, const char* filename) { size_t nbytes = strlen(dirname) + strlen(filename) + 2; - char* path = NEW_C_HEAP_ARRAY(char, nbytes); + char* path = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); strcpy(path, dirname); strcat(path, "\\"); @@ -500,7 +500,7 @@ static void remove_file(const char* dirname, const char* filename) { } } - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } // returns true if the process represented by pid is alive, otherwise @@ -638,7 +638,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { // opendir/readdir. // struct dirent* entry; - char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname)); + char* dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(dirname), mtInternal); errno = 0; while ((entry = os::readdir(dirp, (struct dirent *)dbuf)) != NULL) { @@ -681,7 +681,7 @@ static void cleanup_sharedmem_resources(const char* dirname) { errno = 0; } os::closedir(dirp); - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); } // create a file mapping object with the requested name, and size @@ -747,11 +747,11 @@ static void free_security_desc(PSECURITY_DESCRIPTOR pSD) { // be an ACL we enlisted. free the resources. // if (success && exists && pACL != NULL && !isdefault) { - FREE_C_HEAP_ARRAY(char, pACL); + FREE_C_HEAP_ARRAY(char, pACL, mtInternal); } // free the security descriptor - FREE_C_HEAP_ARRAY(char, pSD); + FREE_C_HEAP_ARRAY(char, pSD, mtInternal); } } @@ -766,7 +766,7 @@ static void free_security_attr(LPSECURITY_ATTRIBUTES lpSA) { lpSA->lpSecurityDescriptor = NULL; // free the security attributes structure - FREE_C_HEAP_ARRAY(char, lpSA); + FREE_C_HEAP_ARRAY(char, lpSA, mtInternal); } } @@ -805,7 +805,7 @@ static PSID get_user_sid(HANDLE hProcess) { } } - token_buf = (PTOKEN_USER) NEW_C_HEAP_ARRAY(char, rsize); + token_buf = (PTOKEN_USER) NEW_C_HEAP_ARRAY(char, rsize, mtInternal); // get the user token information if (!GetTokenInformation(hAccessToken, TokenUser, token_buf, rsize, &rsize)) { @@ -813,28 +813,28 @@ static PSID get_user_sid(HANDLE hProcess) { warning("GetTokenInformation failure: lasterror = %d," " rsize = %d\n", GetLastError(), rsize); } - FREE_C_HEAP_ARRAY(char, token_buf); + FREE_C_HEAP_ARRAY(char, token_buf, mtInternal); CloseHandle(hAccessToken); return NULL; } DWORD nbytes = GetLengthSid(token_buf->User.Sid); - PSID pSID = NEW_C_HEAP_ARRAY(char, nbytes); + PSID pSID = NEW_C_HEAP_ARRAY(char, nbytes, mtInternal); if (!CopySid(nbytes, pSID, token_buf->User.Sid)) { if (PrintMiscellaneous && Verbose) { warning("GetTokenInformation failure: lasterror = %d," " rsize = %d\n", GetLastError(), rsize); } - FREE_C_HEAP_ARRAY(char, token_buf); - FREE_C_HEAP_ARRAY(char, pSID); + FREE_C_HEAP_ARRAY(char, token_buf, mtInternal); + FREE_C_HEAP_ARRAY(char, pSID, mtInternal); CloseHandle(hAccessToken); return NULL; } // close the access token. CloseHandle(hAccessToken); - FREE_C_HEAP_ARRAY(char, token_buf); + FREE_C_HEAP_ARRAY(char, token_buf, mtInternal); return pSID; } @@ -912,13 +912,13 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, } // create the new ACL - newACL = (PACL) NEW_C_HEAP_ARRAY(char, newACLsize); + newACL = (PACL) NEW_C_HEAP_ARRAY(char, newACLsize, mtInternal); if (!InitializeAcl(newACL, newACLsize, ACL_REVISION)) { if (PrintMiscellaneous && Verbose) { warning("InitializeAcl failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } @@ -931,7 +931,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, if (PrintMiscellaneous && Verbose) { warning("InitializeAcl failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } if (((ACCESS_ALLOWED_ACE *)ace)->Header.AceFlags && INHERITED_ACE) { @@ -958,7 +958,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, if (PrintMiscellaneous && Verbose) { warning("AddAce failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } } @@ -974,7 +974,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, warning("AddAccessAllowedAce failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } } @@ -989,7 +989,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, if (PrintMiscellaneous && Verbose) { warning("InitializeAcl failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } if (!AddAce(newACL, ACL_REVISION, MAXDWORD, ace, @@ -997,7 +997,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, if (PrintMiscellaneous && Verbose) { warning("AddAce failure: lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } ace_index++; @@ -1010,7 +1010,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, warning("SetSecurityDescriptorDacl failure:" " lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } @@ -1030,7 +1030,7 @@ static bool add_allow_aces(PSECURITY_DESCRIPTOR pSD, warning("SetSecurityDescriptorControl failure:" " lasterror = %d \n", GetLastError()); } - FREE_C_HEAP_ARRAY(char, newACL); + FREE_C_HEAP_ARRAY(char, newACL, mtInternal); return false; } } @@ -1054,7 +1054,7 @@ static LPSECURITY_ATTRIBUTES make_security_attr(ace_data_t aces[], int count) { // allocate space for a security descriptor PSECURITY_DESCRIPTOR pSD = (PSECURITY_DESCRIPTOR) - NEW_C_HEAP_ARRAY(char, SECURITY_DESCRIPTOR_MIN_LENGTH); + NEW_C_HEAP_ARRAY(char, SECURITY_DESCRIPTOR_MIN_LENGTH, mtInternal); // initialize the security descriptor if (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION)) { @@ -1076,7 +1076,7 @@ static LPSECURITY_ATTRIBUTES make_security_attr(ace_data_t aces[], int count) { // return it to the caller. // LPSECURITY_ATTRIBUTES lpSA = (LPSECURITY_ATTRIBUTES) - NEW_C_HEAP_ARRAY(char, sizeof(SECURITY_ATTRIBUTES)); + NEW_C_HEAP_ARRAY(char, sizeof(SECURITY_ATTRIBUTES), mtInternal); lpSA->nLength = sizeof(SECURITY_ATTRIBUTES); lpSA->lpSecurityDescriptor = pSD; lpSA->bInheritHandle = FALSE; @@ -1147,7 +1147,7 @@ static LPSECURITY_ATTRIBUTES make_user_everybody_admin_security_attr( // create a security attributes structure with access control // entries as initialized above. LPSECURITY_ATTRIBUTES lpSA = make_security_attr(aces, 3); - FREE_C_HEAP_ARRAY(char, aces[0].pSid); + FREE_C_HEAP_ARRAY(char, aces[0].pSid, mtInternal); FreeSid(everybodySid); FreeSid(administratorsSid); return(lpSA); @@ -1462,15 +1462,15 @@ static char* mapping_create_shared(size_t size) { assert(((size != 0) && (size % os::vm_page_size() == 0)), "unexpected PerfMemry region size"); - FREE_C_HEAP_ARRAY(char, user); + FREE_C_HEAP_ARRAY(char, user, mtInternal); // create the shared memory resources sharedmem_fileMapHandle = create_sharedmem_resources(dirname, filename, objectname, size); - FREE_C_HEAP_ARRAY(char, filename); - FREE_C_HEAP_ARRAY(char, objectname); - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); + FREE_C_HEAP_ARRAY(char, objectname, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); if (sharedmem_fileMapHandle == NULL) { return NULL; @@ -1621,7 +1621,7 @@ static void open_file_mapping(const char* user, int vmid, // store file, we also don't following them when attaching // if (!is_directory_secure(dirname)) { - FREE_C_HEAP_ARRAY(char, dirname); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Process not found"); } @@ -1640,10 +1640,10 @@ static void open_file_mapping(const char* user, int vmid, strcpy(robjectname, objectname); // free the c heap resources that are no longer needed - if (luser != user) FREE_C_HEAP_ARRAY(char, luser); - FREE_C_HEAP_ARRAY(char, dirname); - FREE_C_HEAP_ARRAY(char, filename); - FREE_C_HEAP_ARRAY(char, objectname); + if (luser != user) FREE_C_HEAP_ARRAY(char, luser, mtInternal); + FREE_C_HEAP_ARRAY(char, dirname, mtInternal); + FREE_C_HEAP_ARRAY(char, filename, mtInternal); + FREE_C_HEAP_ARRAY(char, objectname, mtInternal); if (*sizep == 0) { size = sharedmem_filesize(rfilename, CHECK); diff --git a/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp b/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp index 2806e79ea4a..c6d31ab4f9a 100644 --- a/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp +++ b/hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp @@ -516,7 +516,12 @@ JVM_handle_bsd_signal(int sig, } } - if (thread->thread_state() == _thread_in_Java) { + // We test if stub is already set (by the stack overflow code + // above) so it is not overwritten by the code that follows. This + // check is not required on other platforms, because on other + // platforms we check for SIGSEGV only or SIGBUS only, where here + // we have to check for both SIGSEGV and SIGBUS. + if (thread->thread_state() == _thread_in_Java && stub == NULL) { // Java thread running in Java code => find exception handler if any // a fault inside compiled code, the interpreter, or a stub diff --git a/hotspot/src/share/vm/adlc/adlparse.cpp b/hotspot/src/share/vm/adlc/adlparse.cpp index ec31e36279b..ff486733efc 100644 --- a/hotspot/src/share/vm/adlc/adlparse.cpp +++ b/hotspot/src/share/vm/adlc/adlparse.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -115,6 +115,12 @@ void ADLParser::parse() { parse_err(SYNERR, "expected one of - instruct, operand, ins_attrib, op_attrib, source, register, pipeline, encode\n Found %s",ident); } } + // Add reg_class spill_regs after parsing. + RegisterForm *regBlock = _AD.get_registers(); + if (regBlock == NULL) { + parse_err(SEMERR, "Did not declare 'register' definitions"); + } + regBlock->addSpillRegClass(); // Done with parsing, check consistency. @@ -768,11 +774,12 @@ void ADLParser::source_hpp_parse(void) { //------------------------------reg_parse-------------------------------------- void ADLParser::reg_parse(void) { - - // Create the RegisterForm for the architecture description. - RegisterForm *regBlock = new RegisterForm(); // Build new Source object - regBlock->_linenum = linenum(); - _AD.addForm(regBlock); + RegisterForm *regBlock = _AD.get_registers(); // Information about registers encoding + if (regBlock == NULL) { + // Create the RegisterForm for the architecture description. + regBlock = new RegisterForm(); // Build new Source object + _AD.addForm(regBlock); + } skipws(); // Skip leading whitespace if (_curchar == '%' && *(_ptr+1) == '{') { @@ -796,15 +803,11 @@ void ADLParser::reg_parse(void) { parse_err(SYNERR, "Missing %c{ ... %c} block after register keyword.\n",'%','%'); return; } - - // Add reg_class spill_regs - regBlock->addSpillRegClass(); } //------------------------------encode_parse----------------------------------- void ADLParser::encode_parse(void) { EncodeForm *encBlock; // Information about instruction/operand encoding - char *desc = NULL; // String representation of encode rule _AD.getForm(&encBlock); if ( encBlock == NULL) { diff --git a/hotspot/src/share/vm/adlc/archDesc.cpp b/hotspot/src/share/vm/adlc/archDesc.cpp index 294e88c148e..23cbb1e007b 100644 --- a/hotspot/src/share/vm/adlc/archDesc.cpp +++ b/hotspot/src/share/vm/adlc/archDesc.cpp @@ -1,5 +1,5 @@ // -// Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. // // This code is free software; you can redistribute it and/or modify it @@ -911,12 +911,24 @@ const char *ArchDesc::getIdealType(const char *idealOp) { // Find last character in idealOp, it specifies the type char last_char = 0; const char *ptr = idealOp; - for( ; *ptr != '\0'; ++ptr) { + for (; *ptr != '\0'; ++ptr) { last_char = *ptr; } + // Match Vector types. + if (strncmp(idealOp, "Vec",3)==0) { + switch(last_char) { + case 'S': return "TypeVect::VECTS"; + case 'D': return "TypeVect::VECTD"; + case 'X': return "TypeVect::VECTX"; + case 'Y': return "TypeVect::VECTY"; + default: + internal_err("Vector type %s with unrecognized type\n",idealOp); + } + } + // !!!!! - switch( last_char ) { + switch(last_char) { case 'I': return "TypeInt::INT"; case 'P': return "TypePtr::BOTTOM"; case 'N': return "TypeNarrowOop::BOTTOM"; diff --git a/hotspot/src/share/vm/adlc/forms.cpp b/hotspot/src/share/vm/adlc/forms.cpp index 372ef5dd508..70b8bd96253 100644 --- a/hotspot/src/share/vm/adlc/forms.cpp +++ b/hotspot/src/share/vm/adlc/forms.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -265,47 +265,22 @@ Form::DataType Form::is_load_from_memory(const char *opType) const { if( strcmp(opType,"LoadN")==0 ) return Form::idealN; if( strcmp(opType,"LoadRange")==0 ) return Form::idealI; if( strcmp(opType,"LoadS")==0 ) return Form::idealS; - if( strcmp(opType,"Load16B")==0 ) return Form::idealB; - if( strcmp(opType,"Load8B")==0 ) return Form::idealB; - if( strcmp(opType,"Load4B")==0 ) return Form::idealB; - if( strcmp(opType,"Load8C")==0 ) return Form::idealC; - if( strcmp(opType,"Load4C")==0 ) return Form::idealC; - if( strcmp(opType,"Load2C")==0 ) return Form::idealC; - if( strcmp(opType,"Load8S")==0 ) return Form::idealS; - if( strcmp(opType,"Load4S")==0 ) return Form::idealS; - if( strcmp(opType,"Load2S")==0 ) return Form::idealS; - if( strcmp(opType,"Load2D")==0 ) return Form::idealD; - if( strcmp(opType,"Load4F")==0 ) return Form::idealF; - if( strcmp(opType,"Load2F")==0 ) return Form::idealF; - if( strcmp(opType,"Load4I")==0 ) return Form::idealI; - if( strcmp(opType,"Load2I")==0 ) return Form::idealI; - if( strcmp(opType,"Load2L")==0 ) return Form::idealL; + if( strcmp(opType,"LoadVector")==0 ) return Form::idealV; assert( strcmp(opType,"Load") != 0, "Must type Loads" ); return Form::none; } Form::DataType Form::is_store_to_memory(const char *opType) const { if( strcmp(opType,"StoreB")==0) return Form::idealB; - if( strcmp(opType,"StoreCM")==0) return Form::idealB; + if( strcmp(opType,"StoreCM")==0) return Form::idealB; if( strcmp(opType,"StoreC")==0) return Form::idealC; if( strcmp(opType,"StoreD")==0) return Form::idealD; if( strcmp(opType,"StoreF")==0) return Form::idealF; if( strcmp(opType,"StoreI")==0) return Form::idealI; if( strcmp(opType,"StoreL")==0) return Form::idealL; if( strcmp(opType,"StoreP")==0) return Form::idealP; - if( strcmp(opType,"StoreN")==0) return Form::idealN; - if( strcmp(opType,"Store16B")==0) return Form::idealB; - if( strcmp(opType,"Store8B")==0) return Form::idealB; - if( strcmp(opType,"Store4B")==0) return Form::idealB; - if( strcmp(opType,"Store8C")==0) return Form::idealC; - if( strcmp(opType,"Store4C")==0) return Form::idealC; - if( strcmp(opType,"Store2C")==0) return Form::idealC; - if( strcmp(opType,"Store2D")==0) return Form::idealD; - if( strcmp(opType,"Store4F")==0) return Form::idealF; - if( strcmp(opType,"Store2F")==0) return Form::idealF; - if( strcmp(opType,"Store4I")==0) return Form::idealI; - if( strcmp(opType,"Store2I")==0) return Form::idealI; - if( strcmp(opType,"Store2L")==0) return Form::idealL; + if( strcmp(opType,"StoreN")==0) return Form::idealN; + if( strcmp(opType,"StoreVector")==0 ) return Form::idealV; assert( strcmp(opType,"Store") != 0, "Must type Stores" ); return Form::none; } diff --git a/hotspot/src/share/vm/adlc/forms.hpp b/hotspot/src/share/vm/adlc/forms.hpp index 3132c6a3f92..aa13845d38f 100644 --- a/hotspot/src/share/vm/adlc/forms.hpp +++ b/hotspot/src/share/vm/adlc/forms.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -172,7 +172,8 @@ public: idealB = 6, // Byte type idealC = 7, // Char type idealS = 8, // String type - idealN = 9 // Narrow oop types + idealN = 9, // Narrow oop types + idealV = 10 // Vector type }; // Convert ideal name to a DataType, return DataType::none if not a 'ConX' Form::DataType ideal_to_const_type(const char *ideal_type_name) const; diff --git a/hotspot/src/share/vm/adlc/formsopt.cpp b/hotspot/src/share/vm/adlc/formsopt.cpp index 302cd84afe4..07d70fc6c6e 100644 --- a/hotspot/src/share/vm/adlc/formsopt.cpp +++ b/hotspot/src/share/vm/adlc/formsopt.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -66,7 +66,7 @@ AllocClass *RegisterForm::addAllocClass(char *className) { // for spill-slots/regs. void RegisterForm::addSpillRegClass() { // Stack slots start at the next available even register number. - _reg_ctr = (_reg_ctr+1) & ~1; + _reg_ctr = (_reg_ctr+7) & ~7; const char *rc_name = "stack_slots"; RegClass *reg_class = new RegClass(rc_name); reg_class->_stack_or_reg = true; @@ -150,9 +150,14 @@ bool RegisterForm::verify() { int RegisterForm::RegMask_Size() { // Need at least this many words int words_for_regs = (_reg_ctr + 31)>>5; - // Add a few for incoming & outgoing arguments to calls. + // The array of Register Mask bits should be large enough to cover + // all the machine registers and all parameters that need to be passed + // on the stack (stack registers) up to some interesting limit. Methods + // that need more parameters will NOT be compiled. On Intel, the limit + // is something like 90+ parameters. + // Add a few (3 words == 96 bits) for incoming & outgoing arguments to calls. // Round up to the next doubleword size. - return (words_for_regs + 2 + 1) & ~1; + return (words_for_regs + 3 + 1) & ~1; } void RegisterForm::dump() { // Debug printer diff --git a/hotspot/src/share/vm/adlc/formssel.cpp b/hotspot/src/share/vm/adlc/formssel.cpp index e92b8f89ec9..1b009707ac8 100644 --- a/hotspot/src/share/vm/adlc/formssel.cpp +++ b/hotspot/src/share/vm/adlc/formssel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -432,6 +432,14 @@ Form::DataType InstructForm::is_ideal_store() const { return _matrule->is_ideal_store(); } +// Return 'true' if this instruction matches an ideal vector node +bool InstructForm::is_vector() const { + if( _matrule == NULL ) return false; + + return _matrule->is_vector(); +} + + // Return the input register that must match the output register // If this is not required, return 0 uint InstructForm::two_address(FormDict &globals) { @@ -751,6 +759,9 @@ bool InstructForm::captures_bottom_type(FormDict &globals) const { if (needs_base_oop_edge(globals)) return true; + if (is_vector()) return true; + if (is_mach_constant()) return true; + return false; } @@ -3381,11 +3392,8 @@ int MatchNode::needs_ideal_memory_edge(FormDict &globals) const { "StoreI","StoreL","StoreP","StoreN","StoreD","StoreF" , "StoreB","StoreC","Store" ,"StoreFP", "LoadI", "LoadUI2L", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF" , - "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" , - "Store4I","Store2I","Store2L","Store2D","Store4F","Store2F","Store16B", - "Store8B","Store4B","Store8C","Store4C","Store2C", - "Load4I" ,"Load2I" ,"Load2L" ,"Load2D" ,"Load4F" ,"Load2F" ,"Load16B" , - "Load8B" ,"Load4B" ,"Load8C" ,"Load4C" ,"Load2C" ,"Load8S", "Load4S","Load2S", + "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" , + "StoreVector", "LoadVector", "LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned", "LoadPLocked", "StorePConditional", "StoreIConditional", "StoreLConditional", @@ -3822,6 +3830,10 @@ bool MatchRule::is_base_register(FormDict &globals) const { strcmp(opType,"RegL")==0 || strcmp(opType,"RegF")==0 || strcmp(opType,"RegD")==0 || + strcmp(opType,"VecS")==0 || + strcmp(opType,"VecD")==0 || + strcmp(opType,"VecX")==0 || + strcmp(opType,"VecY")==0 || strcmp(opType,"Reg" )==0) ) { return 1; } @@ -3938,19 +3950,12 @@ int MatchRule::is_expensive() const { strcmp(opType,"ReverseBytesL")==0 || strcmp(opType,"ReverseBytesUS")==0 || strcmp(opType,"ReverseBytesS")==0 || - strcmp(opType,"Replicate16B")==0 || - strcmp(opType,"Replicate8B")==0 || - strcmp(opType,"Replicate4B")==0 || - strcmp(opType,"Replicate8C")==0 || - strcmp(opType,"Replicate4C")==0 || - strcmp(opType,"Replicate8S")==0 || - strcmp(opType,"Replicate4S")==0 || - strcmp(opType,"Replicate4I")==0 || - strcmp(opType,"Replicate2I")==0 || - strcmp(opType,"Replicate2L")==0 || - strcmp(opType,"Replicate4F")==0 || - strcmp(opType,"Replicate2F")==0 || - strcmp(opType,"Replicate2D")==0 || + strcmp(opType,"ReplicateB")==0 || + strcmp(opType,"ReplicateS")==0 || + strcmp(opType,"ReplicateI")==0 || + strcmp(opType,"ReplicateL")==0 || + strcmp(opType,"ReplicateF")==0 || + strcmp(opType,"ReplicateD")==0 || 0 /* 0 to line up columns nicely */ ) return 1; } @@ -4034,6 +4039,23 @@ Form::DataType MatchRule::is_ideal_load() const { return ideal_load; } +bool MatchRule::is_vector() const { + if( _rChild ) { + const char *opType = _rChild->_opType; + if( strcmp(opType,"ReplicateB")==0 || + strcmp(opType,"ReplicateS")==0 || + strcmp(opType,"ReplicateI")==0 || + strcmp(opType,"ReplicateL")==0 || + strcmp(opType,"ReplicateF")==0 || + strcmp(opType,"ReplicateD")==0 || + strcmp(opType,"LoadVector")==0 || + strcmp(opType,"StoreVector")==0 || + 0 /* 0 to line up columns nicely */ ) + return true; + } + return false; +} + bool MatchRule::skip_antidep_check() const { // Some loads operate on what is effectively immutable memory so we diff --git a/hotspot/src/share/vm/adlc/formssel.hpp b/hotspot/src/share/vm/adlc/formssel.hpp index b2d3ec74d46..93b43b1f08b 100644 --- a/hotspot/src/share/vm/adlc/formssel.hpp +++ b/hotspot/src/share/vm/adlc/formssel.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -160,6 +160,7 @@ public: virtual bool is_ideal_safepoint() const; // node matches 'SafePoint' virtual bool is_ideal_nop() const; // node matches 'Nop' virtual bool is_ideal_control() const; // control node + virtual bool is_vector() const; // vector instruction virtual Form::CallType is_ideal_call() const; // matches ideal 'Call' virtual Form::DataType is_ideal_load() const; // node matches ideal 'LoadXNode' @@ -1011,6 +1012,7 @@ public: bool is_ideal_goto() const; // node matches ideal 'Goto' bool is_ideal_loopEnd() const; // node matches ideal 'LoopEnd' bool is_ideal_bool() const; // node matches ideal 'Bool' + bool is_vector() const; // vector instruction Form::DataType is_ideal_load() const;// node matches ideal 'LoadXNode' // Should antidep checks be disabled for this rule // See definition of MatchRule::skip_antidep_check diff --git a/hotspot/src/share/vm/adlc/main.cpp b/hotspot/src/share/vm/adlc/main.cpp index 47e207a4b13..a963cdaf5bc 100644 --- a/hotspot/src/share/vm/adlc/main.cpp +++ b/hotspot/src/share/vm/adlc/main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -250,6 +250,7 @@ int main(int argc, char *argv[]) AD.addInclude(AD._HPP_file, "opto/node.hpp"); AD.addInclude(AD._HPP_file, "opto/regalloc.hpp"); AD.addInclude(AD._HPP_file, "opto/subnode.hpp"); + AD.addInclude(AD._HPP_file, "opto/vectornode.hpp"); AD.addInclude(AD._CPP_CLONE_file, "precompiled.hpp"); AD.addInclude(AD._CPP_CLONE_file, "adfiles", get_basename(AD._HPP_file._name)); AD.addInclude(AD._CPP_EXPAND_file, "precompiled.hpp"); diff --git a/hotspot/src/share/vm/asm/codeBuffer.cpp b/hotspot/src/share/vm/asm/codeBuffer.cpp index f52b942df2c..8235786b40a 100644 --- a/hotspot/src/share/vm/asm/codeBuffer.cpp +++ b/hotspot/src/share/vm/asm/codeBuffer.cpp @@ -261,7 +261,7 @@ address CodeBuffer::decode_begin() { GrowableArray* CodeBuffer::create_patch_overflow() { if (_overflow_arena == NULL) { - _overflow_arena = new Arena(); + _overflow_arena = new (mtCode) Arena(); } return new (_overflow_arena) GrowableArray(_overflow_arena, 8, 0, 0); } @@ -910,7 +910,7 @@ void CodeBuffer::block_comment(intptr_t offset, const char * comment) { _comments.add_comment(offset, comment); } -class CodeComment: public CHeapObj { +class CodeComment: public CHeapObj { private: friend class CodeComments; intptr_t _offset; @@ -919,13 +919,13 @@ class CodeComment: public CHeapObj { ~CodeComment() { assert(_next == NULL, "wrong interface for freeing list"); - os::free((void*)_comment); + os::free((void*)_comment, mtCode); } public: CodeComment(intptr_t offset, const char * comment) { _offset = offset; - _comment = os::strdup(comment); + _comment = os::strdup(comment, mtCode); _next = NULL; } diff --git a/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp b/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp index 4964ebd683e..66a7e225ebd 100644 --- a/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp +++ b/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp @@ -33,7 +33,7 @@ #ifndef PRODUCT -class CFGPrinterOutput : public CHeapObj { +class CFGPrinterOutput : public CHeapObj { private: outputStream* _output; @@ -106,7 +106,7 @@ void CFGPrinter::print_intervals(IntervalList* intervals, const char* name) { CFGPrinterOutput::CFGPrinterOutput() - : _output(new(ResourceObj::C_HEAP) fileStream("output.cfg")) + : _output(new(ResourceObj::C_HEAP, mtCompiler) fileStream("output.cfg")) { } diff --git a/hotspot/src/share/vm/c1/c1_Compiler.cpp b/hotspot/src/share/vm/c1/c1_Compiler.cpp index 41b5eb572e6..7e55ce30fd6 100644 --- a/hotspot/src/share/vm/c1/c1_Compiler.cpp +++ b/hotspot/src/share/vm/c1/c1_Compiler.cpp @@ -55,7 +55,7 @@ Compiler::~Compiler() { void Compiler::initialize_all() { BufferBlob* buffer_blob = CompilerThread::current()->get_buffer_blob(); - Arena* arena = new Arena(); + Arena* arena = new (mtCompiler) Arena(); Runtime1::initialize(buffer_blob); FrameMap::initialize(); // initialize data structures diff --git a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp index d59f87c7e9e..e649453c3c0 100644 --- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp +++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp @@ -3505,8 +3505,10 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known, BlockBeg } // now perform tests that are based on flag settings - if (callee->should_inline()) { + if (callee->force_inline() || callee->should_inline()) { // ignore heuristic controls on inlining + if (callee->force_inline()) + CompileTask::print_inlining(callee, scope()->level(), bci(), "force inline by annotation"); } else { if (inline_level() > MaxInlineLevel ) INLINE_BAILOUT("too-deep inlining"); if (recursive_inline_level(callee) > MaxRecursiveInlineLevel) INLINE_BAILOUT("too-deep recursive inlining"); @@ -3531,7 +3533,7 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known, BlockBeg } #ifndef PRODUCT - // printing + // printing if (PrintInlining) { print_inline_result(callee, true); } diff --git a/hotspot/src/share/vm/c1/c1_LinearScan.cpp b/hotspot/src/share/vm/c1/c1_LinearScan.cpp index 56f94636586..bd4061ec787 100644 --- a/hotspot/src/share/vm/c1/c1_LinearScan.cpp +++ b/hotspot/src/share/vm/c1/c1_LinearScan.cpp @@ -2467,12 +2467,12 @@ void LinearScan::compute_oop_map(IntervalWalker* iw, const LIR_OpVisitState &vis // Allocate them with new so they are never destroyed (otherwise, a // forced exit could destroy these objects while they are still in // use). -ConstantOopWriteValue* LinearScan::_oop_null_scope_value = new (ResourceObj::C_HEAP) ConstantOopWriteValue(NULL); -ConstantIntValue* LinearScan::_int_m1_scope_value = new (ResourceObj::C_HEAP) ConstantIntValue(-1); -ConstantIntValue* LinearScan::_int_0_scope_value = new (ResourceObj::C_HEAP) ConstantIntValue(0); -ConstantIntValue* LinearScan::_int_1_scope_value = new (ResourceObj::C_HEAP) ConstantIntValue(1); -ConstantIntValue* LinearScan::_int_2_scope_value = new (ResourceObj::C_HEAP) ConstantIntValue(2); -LocationValue* _illegal_value = new (ResourceObj::C_HEAP) LocationValue(Location()); +ConstantOopWriteValue* LinearScan::_oop_null_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantOopWriteValue(NULL); +ConstantIntValue* LinearScan::_int_m1_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(-1); +ConstantIntValue* LinearScan::_int_0_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(0); +ConstantIntValue* LinearScan::_int_1_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(1); +ConstantIntValue* LinearScan::_int_2_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(2); +LocationValue* _illegal_value = new (ResourceObj::C_HEAP, mtCompiler) LocationValue(Location()); void LinearScan::init_compute_debug_info() { // cache for frequently used scope values diff --git a/hotspot/src/share/vm/ci/ciMethod.cpp b/hotspot/src/share/vm/ci/ciMethod.cpp index 6049d7b9330..180f22f2144 100644 --- a/hotspot/src/share/vm/ci/ciMethod.cpp +++ b/hotspot/src/share/vm/ci/ciMethod.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -79,7 +79,7 @@ ciMethod::ciMethod(methodHandle h_m) : ciObject(h_m) { _max_locals = h_m()->max_locals(); _code_size = h_m()->code_size(); _intrinsic_id = h_m()->intrinsic_id(); - _handler_count = h_m()->exception_table()->length() / 4; + _handler_count = h_m()->exception_table_length(); _uses_monitors = h_m()->access_flags().has_monitor_bytecodes(); _balanced_monitors = !_uses_monitors || h_m()->access_flags().is_monitor_matching(); _is_c1_compilable = !h_m()->is_not_c1_compilable(); @@ -198,7 +198,7 @@ void ciMethod::load_code() { } // And load the exception table. - typeArrayOop exc_table = me->exception_table(); + ExceptionTable exc_table(me); // Allocate one extra spot in our list of exceptions. This // last entry will be used to represent the possibility that @@ -209,13 +209,12 @@ void ciMethod::load_code() { * (_handler_count + 1)); if (_handler_count > 0) { for (int i=0; i<_handler_count; i++) { - int base = i*4; _exception_handlers[i] = new (arena) ciExceptionHandler( holder(), - /* start */ exc_table->int_at(base), - /* limit */ exc_table->int_at(base+1), - /* goto pc */ exc_table->int_at(base+2), - /* cp index */ exc_table->int_at(base+3)); + /* start */ exc_table.start_pc(i), + /* limit */ exc_table.end_pc(i), + /* goto pc */ exc_table.handler_pc(i), + /* cp index */ exc_table.catch_type_index(i)); } } diff --git a/hotspot/src/share/vm/ci/ciMethod.hpp b/hotspot/src/share/vm/ci/ciMethod.hpp index 98571ae2873..de28a858669 100644 --- a/hotspot/src/share/vm/ci/ciMethod.hpp +++ b/hotspot/src/share/vm/ci/ciMethod.hpp @@ -160,6 +160,8 @@ class ciMethod : public ciObject { // Code size for inlining decisions. int code_size_for_inlining(); + bool force_inline() { return get_methodOop()->force_inline(); } + int comp_level(); int highest_osr_comp_level(); diff --git a/hotspot/src/share/vm/ci/ciObjectFactory.cpp b/hotspot/src/share/vm/ci/ciObjectFactory.cpp index 9aa6b261118..a68fb1259ce 100644 --- a/hotspot/src/share/vm/ci/ciObjectFactory.cpp +++ b/hotspot/src/share/vm/ci/ciObjectFactory.cpp @@ -111,7 +111,7 @@ void ciObjectFactory::initialize() { // This Arena is long lived and exists in the resource mark of the // compiler thread that initializes the initial ciObjectFactory which // creates the shared ciObjects that all later ciObjectFactories use. - Arena* arena = new Arena(); + Arena* arena = new (mtCompiler) Arena(); ciEnv initial(arena); ciEnv* env = ciEnv::current(); env->_factory->init_shared_objects(); diff --git a/hotspot/src/share/vm/classfile/altHashing.cpp b/hotspot/src/share/vm/classfile/altHashing.cpp new file mode 100644 index 00000000000..096d17e9303 --- /dev/null +++ b/hotspot/src/share/vm/classfile/altHashing.cpp @@ -0,0 +1,304 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "classfile/altHashing.hpp" +#include "classfile/symbolTable.hpp" +#include "classfile/systemDictionary.hpp" +#include "oops/markOop.hpp" +#include "runtime/thread.hpp" + +// Get the hash code of the classes mirror if it exists, otherwise just +// return a random number, which is one of the possible hash code used for +// objects. We don't want to call the synchronizer hash code to install +// this value because it may safepoint. +intptr_t object_hash(klassOop k) { + intptr_t hc = k->java_mirror()->mark()->hash(); + return hc != markOopDesc::no_hash ? hc : os::random(); +} + +// Seed value used for each alternative hash calculated. +jint AltHashing::compute_seed() { + jlong nanos = os::javaTimeNanos(); + jlong now = os::javaTimeMillis(); + jint SEED_MATERIAL[8] = { + (jint) object_hash(SystemDictionary::String_klass()), + (jint) object_hash(SystemDictionary::System_klass()), + (jint) os::random(), // current thread isn't a java thread + (jint) (((julong)nanos) >> 32), + (jint) nanos, + (jint) (((julong)now) >> 32), + (jint) now, + (jint) (os::javaTimeNanos() >> 2) + }; + + return murmur3_32(SEED_MATERIAL, 8); +} + + +// Murmur3 hashing for Symbol +jint AltHashing::murmur3_32(jint seed, const jbyte* data, int len) { + jint h1 = seed; + int count = len; + int offset = 0; + + // body + while (count >= 4) { + jint k1 = (data[offset] & 0x0FF) + | (data[offset + 1] & 0x0FF) << 8 + | (data[offset + 2] & 0x0FF) << 16 + | data[offset + 3] << 24; + + count -= 4; + offset += 4; + + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + + h1 ^= k1; + h1 = Integer_rotateLeft(h1, 13); + h1 = h1 * 5 + 0xe6546b64; + } + + // tail + + if (count > 0) { + jint k1 = 0; + + switch (count) { + case 3: + k1 ^= (data[offset + 2] & 0xff) << 16; + // fall through + case 2: + k1 ^= (data[offset + 1] & 0xff) << 8; + // fall through + case 1: + k1 ^= (data[offset] & 0xff); + // fall through + default: + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + h1 ^= k1; + } + } + + // finalization + h1 ^= len; + + // finalization mix force all bits of a hash block to avalanche + h1 ^= ((unsigned int)h1) >> 16; + h1 *= 0x85ebca6b; + h1 ^= ((unsigned int)h1) >> 13; + h1 *= 0xc2b2ae35; + h1 ^= ((unsigned int)h1) >> 16; + + return h1; +} + +// Murmur3 hashing for Strings +jint AltHashing::murmur3_32(jint seed, const jchar* data, int len) { + jint h1 = seed; + + int off = 0; + int count = len; + + // body + while (count >= 2) { + jchar d1 = data[off++] & 0xFFFF; + jchar d2 = data[off++]; + jint k1 = (d1 | d2 << 16); + + count -= 2; + + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + + h1 ^= k1; + h1 = Integer_rotateLeft(h1, 13); + h1 = h1 * 5 + 0xe6546b64; + } + + // tail + + if (count > 0) { + int k1 = data[off]; + + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + h1 ^= k1; + } + + // finalization + h1 ^= len * 2; // (Character.SIZE / Byte.SIZE); + + // finalization mix force all bits of a hash block to avalanche + h1 ^= ((unsigned int)h1) >> 16; + h1 *= 0x85ebca6b; + h1 ^= ((unsigned int)h1) >> 13; + h1 *= 0xc2b2ae35; + h1 ^= ((unsigned int)h1) >> 16; + + return h1; +} + +// Hash used for the seed. +jint AltHashing::murmur3_32(jint seed, const int* data, int len) { + jint h1 = seed; + + int off = 0; + int end = len; + + // body + while (off < end) { + jint k1 = data[off++]; + + k1 *= 0xcc9e2d51; + k1 = Integer_rotateLeft(k1, 15); + k1 *= 0x1b873593; + + h1 ^= k1; + h1 = Integer_rotateLeft(h1, 13); + h1 = h1 * 5 + 0xe6546b64; + } + + // tail (always empty, as body is always 32-bit chunks) + + // finalization + + h1 ^= len * 4; // (Integer.SIZE / Byte.SIZE); + + // finalization mix force all bits of a hash block to avalanche + h1 ^= ((juint)h1) >> 16; + h1 *= 0x85ebca6b; + h1 ^= ((juint)h1) >> 13; + h1 *= 0xc2b2ae35; + h1 ^= ((juint)h1) >> 16; + + return h1; +} + +jint AltHashing::murmur3_32(const int* data, int len) { + return murmur3_32(0, data, len); +} + +#ifndef PRODUCT +// Overloaded versions for internal test. +jint AltHashing::murmur3_32(const jbyte* data, int len) { + return murmur3_32(0, data, len); +} + +jint AltHashing::murmur3_32(const jchar* data, int len) { + return murmur3_32(0, data, len); +} + +// Internal test for alternate hashing. Translated from JDK version +// test/sun/misc/Hashing.java +static const jbyte ONE_BYTE[] = { (jbyte) 0x80}; +static const jbyte TWO_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81}; +static const jchar ONE_CHAR[] = { (jchar) 0x8180}; +static const jbyte THREE_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82}; +static const jbyte FOUR_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82, (jbyte) 0x83}; +static const jchar TWO_CHAR[] = { (jchar) 0x8180, (jchar) 0x8382}; +static const jint ONE_INT[] = { 0x83828180}; +static const jbyte SIX_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82, (jbyte) 0x83, (jbyte) 0x84, (jbyte) 0x85}; +static const jchar THREE_CHAR[] = { (jchar) 0x8180, (jchar) 0x8382, (jchar) 0x8584}; +static const jbyte EIGHT_BYTE[] = { + (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82, + (jbyte) 0x83, (jbyte) 0x84, (jbyte) 0x85, + (jbyte) 0x86, (jbyte) 0x87}; +static const jchar FOUR_CHAR[] = { + (jchar) 0x8180, (jchar) 0x8382, + (jchar) 0x8584, (jchar) 0x8786}; + +static const jint TWO_INT[] = { 0x83828180, 0x87868584}; + +static const juint MURMUR3_32_X86_CHECK_VALUE = 0xB0F57EE3; + +void AltHashing::testMurmur3_32_ByteArray() { + // printf("testMurmur3_32_ByteArray\n"); + + jbyte* vector = new jbyte[256]; + jbyte* hashes = new jbyte[4 * 256]; + + for (int i = 0; i < 256; i++) { + vector[i] = (jbyte) i; + } + + // Hash subranges {}, {0}, {0,1}, {0,1,2}, ..., {0,...,255} + for (int i = 0; i < 256; i++) { + jint hash = murmur3_32(256 - i, vector, i); + hashes[i * 4] = (jbyte) hash; + hashes[i * 4 + 1] = (jbyte) (((juint)hash) >> 8); + hashes[i * 4 + 2] = (jbyte) (((juint)hash) >> 16); + hashes[i * 4 + 3] = (jbyte) (((juint)hash) >> 24); + } + + // hash to get const result. + juint final_hash = murmur3_32(hashes, 4*256); + + assert (MURMUR3_32_X86_CHECK_VALUE == final_hash, + err_msg( + "Calculated hash result not as expected. Expected %08X got %08X\n", + MURMUR3_32_X86_CHECK_VALUE, + final_hash)); +} + +void AltHashing::testEquivalentHashes() { + jint jbytes, jchars, ints; + + // printf("testEquivalentHashes\n"); + + jbytes = murmur3_32(TWO_BYTE, 2); + jchars = murmur3_32(ONE_CHAR, 1); + assert (jbytes == jchars, + err_msg("Hashes did not match. b:%08x != c:%08x\n", jbytes, jchars)); + + jbytes = murmur3_32(FOUR_BYTE, 4); + jchars = murmur3_32(TWO_CHAR, 2); + ints = murmur3_32(ONE_INT, 1); + assert ((jbytes == jchars) && (jbytes == ints), + err_msg("Hashes did not match. b:%08x != c:%08x != i:%08x\n", jbytes, jchars, ints)); + + jbytes = murmur3_32(SIX_BYTE, 6); + jchars = murmur3_32(THREE_CHAR, 3); + assert (jbytes == jchars, + err_msg("Hashes did not match. b:%08x != c:%08x\n", jbytes, jchars)); + + jbytes = murmur3_32(EIGHT_BYTE, 8); + jchars = murmur3_32(FOUR_CHAR, 4); + ints = murmur3_32(TWO_INT, 2); + assert ((jbytes == jchars) && (jbytes == ints), + err_msg("Hashes did not match. b:%08x != c:%08x != i:%08x\n", jbytes, jchars, ints)); +} + +// Returns true if the alternate hashcode is correct +void AltHashing::test_alt_hash() { + testMurmur3_32_ByteArray(); + testEquivalentHashes(); +} +#endif // PRODUCT diff --git a/hotspot/src/share/vm/classfile/altHashing.hpp b/hotspot/src/share/vm/classfile/altHashing.hpp new file mode 100644 index 00000000000..941b9a0dc37 --- /dev/null +++ b/hotspot/src/share/vm/classfile/altHashing.hpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_CLASSFILE_ALTHASHING_HPP +#define SHARE_VM_CLASSFILE_ALTHASHING_HPP + +#include "prims/jni.h" +#include "classfile/symbolTable.hpp" + +/** + * Hashing utilities. + * + * Implementation of Murmur3 hashing. + * This code was translated from src/share/classes/sun/misc/Hashing.java + * code in the JDK. + */ + +class AltHashing : AllStatic { + + // utility function copied from java/lang/Integer + static jint Integer_rotateLeft(jint i, int distance) { + return (i << distance) | (((juint)i) >> (32-distance)); + } + static jint murmur3_32(const int* data, int len); + static jint murmur3_32(jint seed, const int* data, int len); + +#ifndef PRODUCT + // Hashing functions used for internal testing + static jint murmur3_32(const jbyte* data, int len); + static jint murmur3_32(const jchar* data, int len); + static void testMurmur3_32_ByteArray(); + static void testEquivalentHashes(); +#endif // PRODUCT + + public: + static jint compute_seed(); + static jint murmur3_32(jint seed, const jbyte* data, int len); + static jint murmur3_32(jint seed, const jchar* data, int len); + NOT_PRODUCT(static void test_alt_hash();) +}; +#endif // SHARE_VM_CLASSFILE_ALTHASHING_HPP diff --git a/hotspot/src/share/vm/classfile/classFileParser.cpp b/hotspot/src/share/vm/classfile/classFileParser.cpp index b2330e61e37..57f175e1b2f 100644 --- a/hotspot/src/share/vm/classfile/classFileParser.cpp +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp @@ -318,6 +318,13 @@ class ConstantPoolCleaner : public StackObj { bool inline valid_cp_range(int index, int length) { return (index > 0 && index < length); } +inline Symbol* check_symbol_at(constantPoolHandle cp, int index) { + if (valid_cp_range(index, cp->length()) && cp->tag_at(index).is_utf8()) + return cp->symbol_at(index); + else + return NULL; +} + constantPoolHandle ClassFileParser::parse_constant_pool(Handle class_loader, TRAPS) { ClassFileStream* cfs = stream(); constantPoolHandle nullHandle; @@ -902,6 +909,7 @@ void ClassFileParser::parse_field_attributes(constantPoolHandle cp, bool* is_synthetic_addr, u2* generic_signature_index_addr, typeArrayHandle* field_annotations, + ClassFileParser::FieldAnnotationCollector* parsed_annotations, TRAPS) { ClassFileStream* cfs = stream(); assert(attributes_count > 0, "length should be greater than 0"); @@ -1142,12 +1150,14 @@ typeArrayHandle ClassFileParser::parse_fields(Symbol* class_name, bool is_synthetic = false; u2 generic_signature_index = 0; bool is_static = access_flags.is_static(); + FieldAnnotationCollector parsed_annotations; u2 attributes_count = cfs->get_u2_fast(); if (attributes_count > 0) { parse_field_attributes(cp, attributes_count, is_static, signature_index, &constantvalue_index, &is_synthetic, &generic_signature_index, &field_annotations, + &parsed_annotations, CHECK_(nullHandle)); if (field_annotations.not_null()) { if (fields_annotations->is_null()) { @@ -1173,6 +1183,8 @@ typeArrayHandle ClassFileParser::parse_fields(Symbol* class_name, signature_index, constantvalue_index, 0); + if (parsed_annotations.has_any_annotations()) + parsed_annotations.apply_to(field); BasicType type = cp->basic_type_for_signature_at(signature_index); @@ -1284,42 +1296,38 @@ static void copy_u2_with_conversion(u2* dest, u2* src, int length) { } -typeArrayHandle ClassFileParser::parse_exception_table(u4 code_length, - u4 exception_table_length, - constantPoolHandle cp, - TRAPS) { +u2* ClassFileParser::parse_exception_table(u4 code_length, + u4 exception_table_length, + constantPoolHandle cp, + TRAPS) { ClassFileStream* cfs = stream(); - typeArrayHandle nullHandle; - // 4-tuples of ints [start_pc, end_pc, handler_pc, catch_type index] - typeArrayOop eh = oopFactory::new_permanent_intArray(exception_table_length*4, CHECK_(nullHandle)); - typeArrayHandle exception_handlers = typeArrayHandle(THREAD, eh); - - int index = 0; - cfs->guarantee_more(8 * exception_table_length, CHECK_(nullHandle)); // start_pc, end_pc, handler_pc, catch_type_index - for (unsigned int i = 0; i < exception_table_length; i++) { - u2 start_pc = cfs->get_u2_fast(); - u2 end_pc = cfs->get_u2_fast(); - u2 handler_pc = cfs->get_u2_fast(); - u2 catch_type_index = cfs->get_u2_fast(); - // Will check legal target after parsing code array in verifier. - if (_need_verify) { + u2* exception_table_start = cfs->get_u2_buffer(); + assert(exception_table_start != NULL, "null exception table"); + cfs->guarantee_more(8 * exception_table_length, CHECK_NULL); // start_pc, end_pc, handler_pc, catch_type_index + // Will check legal target after parsing code array in verifier. + if (_need_verify) { + for (unsigned int i = 0; i < exception_table_length; i++) { + u2 start_pc = cfs->get_u2_fast(); + u2 end_pc = cfs->get_u2_fast(); + u2 handler_pc = cfs->get_u2_fast(); + u2 catch_type_index = cfs->get_u2_fast(); guarantee_property((start_pc < end_pc) && (end_pc <= code_length), - "Illegal exception table range in class file %s", CHECK_(nullHandle)); + "Illegal exception table range in class file %s", + CHECK_NULL); guarantee_property(handler_pc < code_length, - "Illegal exception table handler in class file %s", CHECK_(nullHandle)); + "Illegal exception table handler in class file %s", + CHECK_NULL); if (catch_type_index != 0) { guarantee_property(valid_cp_range(catch_type_index, cp->length()) && is_klass_reference(cp, catch_type_index), - "Catch type in exception table has bad constant type in class file %s", CHECK_(nullHandle)); + "Catch type in exception table has bad constant type in class file %s", CHECK_NULL); } } - exception_handlers->int_at_put(index++, start_pc); - exception_handlers->int_at_put(index++, end_pc); - exception_handlers->int_at_put(index++, handler_pc); - exception_handlers->int_at_put(index++, catch_type_index); + } else { + cfs->skip_u2_fast(exception_table_length * 4); } - return exception_handlers; + return exception_table_start; } void ClassFileParser::parse_linenumber_table( @@ -1368,7 +1376,7 @@ class Classfile_LVT_Element VALUE_OBJ_CLASS_SPEC { }; -class LVT_Hash: public CHeapObj { +class LVT_Hash: public CHeapObj { public: LocalVariableTableElement *_elem; // element LVT_Hash* _next; // Next entry in hash table @@ -1638,12 +1646,158 @@ void ClassFileParser::throwIllegalSignature( name->as_C_string(), _class_name->as_C_string(), sig->as_C_string()); } +// Skip an annotation. Return >=limit if there is any problem. +int ClassFileParser::skip_annotation(u1* buffer, int limit, int index) { + // annotation := atype:u2 do(nmem:u2) {member:u2 value} + // value := switch (tag:u1) { ... } + index += 2; // skip atype + if ((index += 2) >= limit) return limit; // read nmem + int nmem = Bytes::get_Java_u2(buffer+index-2); + while (--nmem >= 0 && index < limit) { + index += 2; // skip member + index = skip_annotation_value(buffer, limit, index); + } + return index; +} + +// Skip an annotation value. Return >=limit if there is any problem. +int ClassFileParser::skip_annotation_value(u1* buffer, int limit, int index) { + // value := switch (tag:u1) { + // case B, C, I, S, Z, D, F, J, c: con:u2; + // case e: e_class:u2 e_name:u2; + // case s: s_con:u2; + // case [: do(nval:u2) {value}; + // case @: annotation; + // case s: s_con:u2; + // } + if ((index += 1) >= limit) return limit; // read tag + u1 tag = buffer[index-1]; + switch (tag) { + case 'B': case 'C': case 'I': case 'S': case 'Z': + case 'D': case 'F': case 'J': case 'c': case 's': + index += 2; // skip con or s_con + break; + case 'e': + index += 4; // skip e_class, e_name + break; + case '[': + { + if ((index += 2) >= limit) return limit; // read nval + int nval = Bytes::get_Java_u2(buffer+index-2); + while (--nval >= 0 && index < limit) { + index = skip_annotation_value(buffer, limit, index); + } + } + break; + case '@': + index = skip_annotation(buffer, limit, index); + break; + default: + assert(false, "annotation tag"); + return limit; // bad tag byte + } + return index; +} + +// Sift through annotations, looking for those significant to the VM: +void ClassFileParser::parse_annotations(u1* buffer, int limit, + constantPoolHandle cp, + ClassFileParser::AnnotationCollector* coll, + TRAPS) { + // annotations := do(nann:u2) {annotation} + int index = 0; + if ((index += 2) >= limit) return; // read nann + int nann = Bytes::get_Java_u2(buffer+index-2); + enum { // initial annotation layout + atype_off = 0, // utf8 such as 'Ljava/lang/annotation/Retention;' + count_off = 2, // u2 such as 1 (one value) + member_off = 4, // utf8 such as 'value' + tag_off = 6, // u1 such as 'c' (type) or 'e' (enum) + e_tag_val = 'e', + e_type_off = 7, // utf8 such as 'Ljava/lang/annotation/RetentionPolicy;' + e_con_off = 9, // utf8 payload, such as 'SOURCE', 'CLASS', 'RUNTIME' + e_size = 11, // end of 'e' annotation + c_tag_val = 'c', + c_con_off = 7, // utf8 payload, such as 'I' or 'Ljava/lang/String;' + c_size = 9, // end of 'c' annotation + min_size = 6 // smallest possible size (zero members) + }; + while ((--nann) >= 0 && (index-2 + min_size <= limit)) { + int index0 = index; + index = skip_annotation(buffer, limit, index); + u1* abase = buffer + index0; + int atype = Bytes::get_Java_u2(abase + atype_off); + int count = Bytes::get_Java_u2(abase + count_off); + Symbol* aname = check_symbol_at(cp, atype); + if (aname == NULL) break; // invalid annotation name + Symbol* member = NULL; + if (count >= 1) { + int member_index = Bytes::get_Java_u2(abase + member_off); + member = check_symbol_at(cp, member_index); + if (member == NULL) break; // invalid member name + } + + // Here is where parsing particular annotations will take place. + AnnotationCollector::ID id = coll->annotation_index(aname); + if (id == AnnotationCollector::_unknown) continue; + coll->set_annotation(id); + // If there are no values, just set the bit and move on: + if (count == 0) continue; + + // For the record, here is how annotation payloads can be collected. + // Suppose we want to capture @Retention.value. Here is how: + //if (id == AnnotationCollector::_class_Retention) { + // Symbol* payload = NULL; + // if (count == 1 + // && e_size == (index0 - index) // match size + // && e_tag_val == *(abase + tag_off) + // && (check_symbol_at(cp, Bytes::get_Java_u2(abase + e_type_off)) + // == vmSymbols::RetentionPolicy_signature()) + // && member == vmSymbols::value_name()) { + // payload = check_symbol_at(cp, Bytes::get_Java_u2(abase + e_con_off)); + // } + // check_property(payload != NULL, + // "Invalid @Retention annotation at offset %u in class file %s", + // index0, CHECK); + // if (payload != NULL) { + // payload->increment_refcount(); + // coll->_class_RetentionPolicy = payload; + // } + //} + } +} + +ClassFileParser::AnnotationCollector::ID ClassFileParser::AnnotationCollector::annotation_index(Symbol* name) { + vmSymbols::SID sid = vmSymbols::find_sid(name); + switch (sid) { + case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_ForceInline_signature): + if (_location != _in_method) break; // only allow for methods + return _method_ForceInline; + default: break; + } + return AnnotationCollector::_unknown; +} + +void ClassFileParser::FieldAnnotationCollector::apply_to(FieldInfo* f) { + fatal("no field annotations yet"); +} + +void ClassFileParser::MethodAnnotationCollector::apply_to(methodHandle m) { + if (has_annotation(_method_ForceInline)) + m->set_force_inline(true); +} + +void ClassFileParser::ClassAnnotationCollector::apply_to(instanceKlassHandle k) { + fatal("no class annotations yet"); +} + + #define MAX_ARGS_SIZE 255 #define MAX_CODE_SIZE 65535 #define INITIAL_MAX_LVT_NUMBER 256 // Note: the parse_method below is big and clunky because all parsing of the code and exceptions -// attribute is inlined. This is curbersome to avoid since we inline most of the parts in the +// attribute is inlined. This is cumbersome to avoid since we inline most of the parts in the // methodOop to save footprint, so we only know the size of the resulting methodOop when the // entire method attribute is parsed. // @@ -1712,6 +1866,7 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf u4 code_length = 0; u1* code_start = 0; u2 exception_table_length = 0; + u2* exception_table_start = NULL; typeArrayHandle exception_handlers(THREAD, Universe::the_empty_int_array()); u2 checked_exceptions_length = 0; u2* checked_exceptions_start = NULL; @@ -1733,6 +1888,7 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf // stackmap attribute - JDK1.5 typeArrayHandle stackmap_data; u2 generic_signature_index = 0; + MethodAnnotationCollector parsed_annotations; u1* runtime_visible_annotations = NULL; int runtime_visible_annotations_length = 0; u1* runtime_invisible_annotations = NULL; @@ -1798,7 +1954,7 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf cfs->guarantee_more(2, CHECK_(nullHandle)); // exception_table_length exception_table_length = cfs->get_u2_fast(); if (exception_table_length > 0) { - exception_handlers = + exception_table_start = parse_exception_table(code_length, exception_table_length, cp, CHECK_(nullHandle)); } @@ -1959,6 +2115,7 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf runtime_visible_annotations_length = method_attribute_length; runtime_visible_annotations = cfs->get_u1_buffer(); assert(runtime_visible_annotations != NULL, "null visible annotations"); + parse_annotations(runtime_visible_annotations, runtime_visible_annotations_length, cp, &parsed_annotations, CHECK_(nullHandle)); cfs->skip_u1(runtime_visible_annotations_length, CHECK_(nullHandle)); } else if (PreserveAllAnnotations && method_attribute_name == vmSymbols::tag_runtime_invisible_annotations()) { runtime_invisible_annotations_length = method_attribute_length; @@ -2002,9 +2159,13 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf } // All sizing information for a methodOop is finally available, now create it - methodOop m_oop = oopFactory::new_method(code_length, access_flags, linenumber_table_length, - total_lvt_length, checked_exceptions_length, - oopDesc::IsSafeConc, CHECK_(nullHandle)); + methodOop m_oop = oopFactory::new_method(code_length, access_flags, + linenumber_table_length, + total_lvt_length, + exception_table_length, + checked_exceptions_length, + oopDesc::IsSafeConc, + CHECK_(nullHandle)); methodHandle m (THREAD, m_oop); ClassLoadingService::add_class_method_size(m_oop->size()*HeapWordSize); @@ -2035,16 +2196,15 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf // Fill in code attribute information m->set_max_stack(max_stack); m->set_max_locals(max_locals); - m->constMethod()->set_stackmap_data(stackmap_data()); /** - * The exception_table field is the flag used to indicate + * The stackmap_data field is the flag used to indicate * that the methodOop and it's associated constMethodOop are partially * initialized and thus are exempt from pre/post GC verification. Once * the field is set, the oops are considered fully initialized so make * sure that the oops can pass verification when this field is set. */ - m->set_exception_table(exception_handlers()); + m->constMethod()->set_stackmap_data(stackmap_data()); // Copy byte codes m->set_code(code_start); @@ -2055,6 +2215,14 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf linenumber_table->buffer(), linenumber_table_length); } + // Copy exception table + if (exception_table_length > 0) { + int size = + exception_table_length * sizeof(ExceptionTableElement) / sizeof(u2); + copy_u2_with_conversion((u2*) m->exception_table_start(), + exception_table_start, size); + } + // Copy checked exceptions if (checked_exceptions_length > 0) { int size = checked_exceptions_length * sizeof(CheckedExceptionElement) / sizeof(u2); @@ -2136,6 +2304,8 @@ methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interf clear_hashtable(lvt_Hash); } + if (parsed_annotations.has_any_annotations()) + parsed_annotations.apply_to(m); *method_annotations = assemble_annotations(runtime_visible_annotations, runtime_visible_annotations_length, runtime_invisible_annotations, @@ -2314,7 +2484,7 @@ typeArrayHandle ClassFileParser::sort_methods(objArrayHandle methods, } -void ClassFileParser::parse_classfile_sourcefile_attribute(constantPoolHandle cp, instanceKlassHandle k, TRAPS) { +void ClassFileParser::parse_classfile_sourcefile_attribute(constantPoolHandle cp, TRAPS) { ClassFileStream* cfs = stream(); cfs->guarantee_more(2, CHECK); // sourcefile_index u2 sourcefile_index = cfs->get_u2_fast(); @@ -2323,13 +2493,12 @@ void ClassFileParser::parse_classfile_sourcefile_attribute(constantPoolHandle cp cp->tag_at(sourcefile_index).is_utf8(), "Invalid SourceFile attribute at constant pool index %u in class file %s", sourcefile_index, CHECK); - k->set_source_file_name(cp->symbol_at(sourcefile_index)); + set_class_sourcefile(cp->symbol_at(sourcefile_index)); } void ClassFileParser::parse_classfile_source_debug_extension_attribute(constantPoolHandle cp, - instanceKlassHandle k, int length, TRAPS) { ClassFileStream* cfs = stream(); u1* sde_buffer = cfs->get_u1_buffer(); @@ -2337,12 +2506,13 @@ void ClassFileParser::parse_classfile_source_debug_extension_attribute(constantP // Don't bother storing it if there is no way to retrieve it if (JvmtiExport::can_get_source_debug_extension()) { - // Optimistically assume that only 1 byte UTF format is used - // (common case) - TempNewSymbol sde_symbol = SymbolTable::new_symbol((const char*)sde_buffer, length, CHECK); - k->set_source_debug_extension(sde_symbol); - // Note that set_source_debug_extension() increments the reference count - // for its copy of the Symbol*, so use a TempNewSymbol here. + assert((length+1) > length, "Overflow checking"); + u1* sde = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, u1, length+1); + for (int i = 0; i < length; i++) { + sde[i] = sde_buffer[i]; + } + sde[length] = '\0'; + set_class_sde_buffer((char*)sde, length); } // Got utf8 string, set stream position forward cfs->skip_u1(length, CHECK); @@ -2358,7 +2528,7 @@ u2 ClassFileParser::parse_classfile_inner_classes_attribute(u1* inner_classes_at u2 enclosing_method_class_index, u2 enclosing_method_method_index, constantPoolHandle cp, - instanceKlassHandle k, TRAPS) { + TRAPS) { ClassFileStream* cfs = stream(); u1* current_mark = cfs->current(); u2 length = 0; @@ -2449,7 +2619,7 @@ u2 ClassFileParser::parse_classfile_inner_classes_attribute(u1* inner_classes_at assert(index == size, "wrong size"); // Update instanceKlass with inner class info. - k->set_inner_classes(inner_classes()); + set_class_inner_classes(inner_classes); // Restore buffer's current position. cfs->set_current(current_mark); @@ -2457,11 +2627,11 @@ u2 ClassFileParser::parse_classfile_inner_classes_attribute(u1* inner_classes_at return length; } -void ClassFileParser::parse_classfile_synthetic_attribute(constantPoolHandle cp, instanceKlassHandle k, TRAPS) { - k->set_is_synthetic(); +void ClassFileParser::parse_classfile_synthetic_attribute(constantPoolHandle cp, TRAPS) { + set_class_synthetic_flag(true); } -void ClassFileParser::parse_classfile_signature_attribute(constantPoolHandle cp, instanceKlassHandle k, TRAPS) { +void ClassFileParser::parse_classfile_signature_attribute(constantPoolHandle cp, TRAPS) { ClassFileStream* cfs = stream(); u2 signature_index = cfs->get_u2(CHECK); check_property( @@ -2469,10 +2639,10 @@ void ClassFileParser::parse_classfile_signature_attribute(constantPoolHandle cp, cp->tag_at(signature_index).is_utf8(), "Invalid constant pool index %u in Signature attribute in class file %s", signature_index, CHECK); - k->set_generic_signature(cp->symbol_at(signature_index)); + set_class_generic_signature(cp->symbol_at(signature_index)); } -void ClassFileParser::parse_classfile_bootstrap_methods_attribute(constantPoolHandle cp, instanceKlassHandle k, +void ClassFileParser::parse_classfile_bootstrap_methods_attribute(constantPoolHandle cp, u4 attribute_byte_length, TRAPS) { ClassFileStream* cfs = stream(); u1* current_start = cfs->current(); @@ -2544,10 +2714,12 @@ void ClassFileParser::parse_classfile_bootstrap_methods_attribute(constantPoolHa } -void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instanceKlassHandle k, TRAPS) { +void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, + ClassFileParser::ClassAnnotationCollector* parsed_annotations, + TRAPS) { ClassFileStream* cfs = stream(); // Set inner classes attribute to default sentinel - k->set_inner_classes(Universe::the_empty_short_array()); + set_class_inner_classes(typeArrayHandle(THREAD, Universe::the_empty_short_array())); cfs->guarantee_more(2, CHECK); // attributes_count u2 attributes_count = cfs->get_u2_fast(); bool parsed_sourcefile_attribute = false; @@ -2583,10 +2755,10 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance } else { parsed_sourcefile_attribute = true; } - parse_classfile_sourcefile_attribute(cp, k, CHECK); + parse_classfile_sourcefile_attribute(cp, CHECK); } else if (tag == vmSymbols::tag_source_debug_extension()) { // Check for SourceDebugExtension tag - parse_classfile_source_debug_extension_attribute(cp, k, (int)attribute_length, CHECK); + parse_classfile_source_debug_extension_attribute(cp, (int)attribute_length, CHECK); } else if (tag == vmSymbols::tag_inner_classes()) { // Check for InnerClasses tag if (parsed_innerclasses_attribute) { @@ -2605,7 +2777,7 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance "Invalid Synthetic classfile attribute length %u in class file %s", attribute_length, CHECK); } - parse_classfile_synthetic_attribute(cp, k, CHECK); + parse_classfile_synthetic_attribute(cp, CHECK); } else if (tag == vmSymbols::tag_deprecated()) { // Check for Deprecatd tag - 4276120 if (attribute_length != 0) { @@ -2620,11 +2792,16 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance "Wrong Signature attribute length %u in class file %s", attribute_length, CHECK); } - parse_classfile_signature_attribute(cp, k, CHECK); + parse_classfile_signature_attribute(cp, CHECK); } else if (tag == vmSymbols::tag_runtime_visible_annotations()) { runtime_visible_annotations_length = attribute_length; runtime_visible_annotations = cfs->get_u1_buffer(); assert(runtime_visible_annotations != NULL, "null visible annotations"); + parse_annotations(runtime_visible_annotations, + runtime_visible_annotations_length, + cp, + parsed_annotations, + CHECK); cfs->skip_u1(runtime_visible_annotations_length, CHECK); } else if (PreserveAllAnnotations && tag == vmSymbols::tag_runtime_invisible_annotations()) { runtime_invisible_annotations_length = attribute_length; @@ -2658,7 +2835,7 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance if (parsed_bootstrap_methods_attribute) classfile_parse_error("Multiple BootstrapMethods attributes in class file %s", CHECK); parsed_bootstrap_methods_attribute = true; - parse_classfile_bootstrap_methods_attribute(cp, k, attribute_length, CHECK); + parse_classfile_bootstrap_methods_attribute(cp, attribute_length, CHECK); } else { // Unknown attribute cfs->skip_u1(attribute_length, CHECK); @@ -2673,7 +2850,7 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance runtime_invisible_annotations, runtime_invisible_annotations_length, CHECK); - k->set_class_annotations(annotations()); + set_class_annotations(annotations); if (parsed_innerclasses_attribute || parsed_enclosingmethod_attribute) { u2 num_of_classes = parse_classfile_inner_classes_attribute( @@ -2681,7 +2858,7 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance parsed_innerclasses_attribute, enclosing_method_class_index, enclosing_method_method_index, - cp, k, CHECK); + cp, CHECK); if (parsed_innerclasses_attribute &&_need_verify && _major_version >= JAVA_1_5_VERSION) { guarantee_property( inner_classes_attribute_length == sizeof(num_of_classes) + 4 * sizeof(u2) * num_of_classes, @@ -2695,6 +2872,23 @@ void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, instance } } +void ClassFileParser::apply_parsed_class_attributes(instanceKlassHandle k) { + if (_synthetic_flag) + k->set_is_synthetic(); + if (_sourcefile != NULL) { + _sourcefile->increment_refcount(); + k->set_source_file_name(_sourcefile); + } + if (_generic_signature != NULL) { + _generic_signature->increment_refcount(); + k->set_generic_signature(_generic_signature); + } + if (_sde_buffer != NULL) { + k->set_source_debug_extension(_sde_buffer, _sde_length); + } + k->set_inner_classes(_inner_classes()); + k->set_class_annotations(_annotations()); +} typeArrayHandle ClassFileParser::assemble_annotations(u1* runtime_visible_annotations, int runtime_visible_annotations_length, @@ -2745,8 +2939,7 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name, jt->get_thread_stat()->perf_timers_addr(), PerfClassTraceTime::PARSE_CLASS); - _has_finalizer = _has_empty_finalizer = _has_vanilla_constructor = false; - _max_bootstrap_specifier_index = -1; + init_parsed_class_attributes(); if (JvmtiExport::should_post_class_file_load_hook()) { // Get the cached class file bytes (if any) from the class that @@ -2979,6 +3172,13 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name, objArrayHandle methods_parameter_annotations(THREAD, methods_parameter_annotations_oop); objArrayHandle methods_default_annotations(THREAD, methods_default_annotations_oop); + // Additional attributes + ClassAnnotationCollector parsed_annotations; + parse_classfile_attributes(cp, &parsed_annotations, CHECK_(nullHandle)); + + // Make sure this is the end of class file stream + guarantee_property(cfs->at_eos(), "Extra bytes at the end of class file %s", CHECK_(nullHandle)); + // We check super class after class file is parsed and format is checked if (super_class_index > 0 && super_klass.is_null()) { Symbol* sk = cp->klass_name_at(super_class_index); @@ -3467,11 +3667,10 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name, this_klass->set_has_miranda_methods(); // then set a flag } - // Additional attributes - parse_classfile_attributes(cp, this_klass, CHECK_(nullHandle)); - - // Make sure this is the end of class file stream - guarantee_property(cfs->at_eos(), "Extra bytes at the end of class file %s", CHECK_(nullHandle)); + // Fill in field values obtained by parse_classfile_attributes + if (parsed_annotations.has_any_annotations()) + parsed_annotations.apply_to(this_klass); + apply_parsed_class_attributes(this_klass); // VerifyOops believes that once this has been set, the object is completely loaded. // Compute transitive closure of interfaces this class implements @@ -3486,6 +3685,7 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name, // Do final class setup fill_oop_maps(this_klass, nonstatic_oop_map_count, nonstatic_oop_offsets, nonstatic_oop_counts); + // Fill in has_finalizer, has_vanilla_constructor, and layout_helper set_precomputed_flags(this_klass); // reinitialize modifiers, using the InnerClasses attribute diff --git a/hotspot/src/share/vm/classfile/classFileParser.hpp b/hotspot/src/share/vm/classfile/classFileParser.hpp index de781b2fb1f..f8359f19233 100644 --- a/hotspot/src/share/vm/classfile/classFileParser.hpp +++ b/hotspot/src/share/vm/classfile/classFileParser.hpp @@ -31,8 +31,8 @@ #include "oops/typeArrayOop.hpp" #include "runtime/handles.inline.hpp" #include "utilities/accessFlags.hpp" +#include "classfile/symbolTable.hpp" -class TempNewSymbol; class FieldAllocationCount; @@ -50,11 +50,80 @@ class ClassFileParser VALUE_OBJ_CLASS_SPEC { KlassHandle _host_klass; GrowableArray* _cp_patches; // overrides for CP entries + // precomputed flags bool _has_finalizer; bool _has_empty_finalizer; bool _has_vanilla_constructor; + int _max_bootstrap_specifier_index; // detects BSS values - int _max_bootstrap_specifier_index; + // class attributes parsed before the instance klass is created: + bool _synthetic_flag; + Symbol* _sourcefile; + Symbol* _generic_signature; + char* _sde_buffer; + int _sde_length; + typeArrayHandle _inner_classes; + typeArrayHandle _annotations; + + void set_class_synthetic_flag(bool x) { _synthetic_flag = x; } + void set_class_sourcefile(Symbol* x) { _sourcefile = x; } + void set_class_generic_signature(Symbol* x) { _generic_signature = x; } + void set_class_sde_buffer(char* x, int len) { _sde_buffer = x; _sde_length = len; } + void set_class_inner_classes(typeArrayHandle x) { _inner_classes = x; } + void set_class_annotations(typeArrayHandle x) { _annotations = x; } + void init_parsed_class_attributes() { + _synthetic_flag = false; + _sourcefile = NULL; + _generic_signature = NULL; + _sde_buffer = NULL; + _sde_length = 0; + // initialize the other flags too: + _has_finalizer = _has_empty_finalizer = _has_vanilla_constructor = false; + _max_bootstrap_specifier_index = -1; + } + void apply_parsed_class_attributes(instanceKlassHandle k); // update k + + class AnnotationCollector { + public: + enum Location { _in_field, _in_method, _in_class }; + enum ID { + _unknown = 0, + _method_ForceInline, + _annotation_LIMIT + }; + const Location _location; + int _annotations_present; + AnnotationCollector(Location location) + : _location(location), _annotations_present(0) + { + assert((int)_annotation_LIMIT <= (int)sizeof(_annotations_present) * BitsPerByte, ""); + } + // If this annotation name has an ID, report it (or _none). + ID annotation_index(Symbol* name); + // Set the annotation name: + void set_annotation(ID id) { + assert((int)id >= 0 && (int)id < (int)_annotation_LIMIT, "oob"); + _annotations_present |= nth_bit((int)id); + } + // Report if the annotation is present. + bool has_any_annotations() { return _annotations_present != 0; } + bool has_annotation(ID id) { return (nth_bit((int)id) & _annotations_present) != 0; } + }; + class FieldAnnotationCollector: public AnnotationCollector { + public: + FieldAnnotationCollector() : AnnotationCollector(_in_field) { } + void apply_to(FieldInfo* f); + }; + class MethodAnnotationCollector: public AnnotationCollector { + public: + MethodAnnotationCollector() : AnnotationCollector(_in_method) { } + void apply_to(methodHandle m); + }; + class ClassAnnotationCollector: public AnnotationCollector { + public: + ClassAnnotationCollector() : AnnotationCollector(_in_class) { } + void apply_to(instanceKlassHandle k); + }; enum { fixed_buffer_size = 128 }; u_char linenumbertable_buffer[fixed_buffer_size]; @@ -87,7 +156,9 @@ class ClassFileParser VALUE_OBJ_CLASS_SPEC { u2* constantvalue_index_addr, bool* is_synthetic_addr, u2* generic_signature_index_addr, - typeArrayHandle* field_annotations, TRAPS); + typeArrayHandle* field_annotations, + FieldAnnotationCollector* parsed_annotations, + TRAPS); typeArrayHandle parse_fields(Symbol* class_name, constantPoolHandle cp, bool is_interface, FieldAllocationCount *fac, @@ -113,8 +184,8 @@ class ClassFileParser VALUE_OBJ_CLASS_SPEC { objArrayHandle methods_parameter_annotations, objArrayHandle methods_default_annotations, TRAPS); - typeArrayHandle parse_exception_table(u4 code_length, u4 exception_table_length, - constantPoolHandle cp, TRAPS); + u2* parse_exception_table(u4 code_length, u4 exception_table_length, + constantPoolHandle cp, TRAPS); void parse_linenumber_table( u4 code_attribute_length, u4 code_length, CompressedLineNumberWriteStream** write_stream, TRAPS); @@ -128,25 +199,32 @@ class ClassFileParser VALUE_OBJ_CLASS_SPEC { typeArrayOop parse_stackmap_table(u4 code_attribute_length, TRAPS); // Classfile attribute parsing - void parse_classfile_sourcefile_attribute(constantPoolHandle cp, instanceKlassHandle k, TRAPS); - void parse_classfile_source_debug_extension_attribute(constantPoolHandle cp, - instanceKlassHandle k, int length, TRAPS); + void parse_classfile_sourcefile_attribute(constantPoolHandle cp, TRAPS); + void parse_classfile_source_debug_extension_attribute(constantPoolHandle cp, int length, TRAPS); u2 parse_classfile_inner_classes_attribute(u1* inner_classes_attribute_start, bool parsed_enclosingmethod_attribute, u2 enclosing_method_class_index, u2 enclosing_method_method_index, constantPoolHandle cp, - instanceKlassHandle k, TRAPS); - void parse_classfile_attributes(constantPoolHandle cp, instanceKlassHandle k, TRAPS); - void parse_classfile_synthetic_attribute(constantPoolHandle cp, instanceKlassHandle k, TRAPS); - void parse_classfile_signature_attribute(constantPoolHandle cp, instanceKlassHandle k, TRAPS); - void parse_classfile_bootstrap_methods_attribute(constantPoolHandle cp, instanceKlassHandle k, u4 attribute_length, TRAPS); + TRAPS); + void parse_classfile_attributes(constantPoolHandle cp, + ClassAnnotationCollector* parsed_annotations, + TRAPS); + void parse_classfile_synthetic_attribute(constantPoolHandle cp, TRAPS); + void parse_classfile_signature_attribute(constantPoolHandle cp, TRAPS); + void parse_classfile_bootstrap_methods_attribute(constantPoolHandle cp, u4 attribute_length, TRAPS); // Annotations handling typeArrayHandle assemble_annotations(u1* runtime_visible_annotations, int runtime_visible_annotations_length, u1* runtime_invisible_annotations, int runtime_invisible_annotations_length, TRAPS); + int skip_annotation(u1* buffer, int limit, int index); + int skip_annotation_value(u1* buffer, int limit, int index); + void parse_annotations(u1* buffer, int limit, constantPoolHandle cp, + /* Results (currently, only one result is supported): */ + AnnotationCollector* result, + TRAPS); // Final setup unsigned int compute_oop_map_count(instanceKlassHandle super, diff --git a/hotspot/src/share/vm/classfile/classLoader.cpp b/hotspot/src/share/vm/classfile/classLoader.cpp index df42dc75d42..a2e61a4ad3b 100644 --- a/hotspot/src/share/vm/classfile/classLoader.cpp +++ b/hotspot/src/share/vm/classfile/classLoader.cpp @@ -153,7 +153,7 @@ MetaIndex::MetaIndex(char** meta_package_names, int num_meta_package_names) { _meta_package_names = NULL; _num_meta_package_names = 0; } else { - _meta_package_names = NEW_C_HEAP_ARRAY(char*, num_meta_package_names); + _meta_package_names = NEW_C_HEAP_ARRAY(char*, num_meta_package_names, mtClass); _num_meta_package_names = num_meta_package_names; memcpy(_meta_package_names, meta_package_names, num_meta_package_names * sizeof(char*)); } @@ -161,7 +161,7 @@ MetaIndex::MetaIndex(char** meta_package_names, int num_meta_package_names) { MetaIndex::~MetaIndex() { - FREE_C_HEAP_ARRAY(char*, _meta_package_names); + FREE_C_HEAP_ARRAY(char*, _meta_package_names, mtClass); } @@ -192,7 +192,7 @@ bool ClassPathEntry::is_lazy() { } ClassPathDirEntry::ClassPathDirEntry(char* dir) : ClassPathEntry() { - _dir = NEW_C_HEAP_ARRAY(char, strlen(dir)+1); + _dir = NEW_C_HEAP_ARRAY(char, strlen(dir)+1, mtClass); strcpy(_dir, dir); } @@ -229,7 +229,7 @@ ClassFileStream* ClassPathDirEntry::open_stream(const char* name) { ClassPathZipEntry::ClassPathZipEntry(jzfile* zip, const char* zip_name) : ClassPathEntry() { _zip = zip; - _zip_name = NEW_C_HEAP_ARRAY(char, strlen(zip_name)+1); + _zip_name = NEW_C_HEAP_ARRAY(char, strlen(zip_name)+1, mtClass); strcpy(_zip_name, zip_name); } @@ -237,7 +237,7 @@ ClassPathZipEntry::~ClassPathZipEntry() { if (ZipClose != NULL) { (*ZipClose)(_zip); } - FREE_C_HEAP_ARRAY(char, _zip_name); + FREE_C_HEAP_ARRAY(char, _zip_name, mtClass); } ClassFileStream* ClassPathZipEntry::open_stream(const char* name) { @@ -454,11 +454,11 @@ void ClassLoader::setup_bootstrap_search_path() { while (sys_class_path[end] && sys_class_path[end] != os::path_separator()[0]) { end++; } - char* path = NEW_C_HEAP_ARRAY(char, end-start+1); + char* path = NEW_C_HEAP_ARRAY(char, end-start+1, mtClass); strncpy(path, &sys_class_path[start], end-start); path[end-start] = '\0'; update_class_path_entry_list(path, false); - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtClass); while (sys_class_path[end] == os::path_separator()[0]) { end++; } @@ -652,13 +652,13 @@ void ClassLoader::load_zip_library() { // in the classpath must be the same files, in the same order, even // though the exact name is not the same. -class PackageInfo: public BasicHashtableEntry { +class PackageInfo: public BasicHashtableEntry { public: const char* _pkgname; // Package name int _classpath_index; // Index of directory or JAR file loaded from PackageInfo* next() { - return (PackageInfo*)BasicHashtableEntry::next(); + return (PackageInfo*)BasicHashtableEntry::next(); } const char* pkgname() { return _pkgname; } @@ -674,7 +674,7 @@ public: }; -class PackageHashtable : public BasicHashtable { +class PackageHashtable : public BasicHashtable { private: inline unsigned int compute_hash(const char *s, int n) { unsigned int val = 0; @@ -685,7 +685,7 @@ private: } PackageInfo* bucket(int index) { - return (PackageInfo*)BasicHashtable::bucket(index); + return (PackageInfo*)BasicHashtable::bucket(index); } PackageInfo* get_entry(int index, unsigned int hash, @@ -702,10 +702,10 @@ private: public: PackageHashtable(int table_size) - : BasicHashtable(table_size, sizeof(PackageInfo)) {} + : BasicHashtable(table_size, sizeof(PackageInfo)) {} - PackageHashtable(int table_size, HashtableBucket* t, int number_of_entries) - : BasicHashtable(table_size, sizeof(PackageInfo), t, number_of_entries) {} + PackageHashtable(int table_size, HashtableBucket* t, int number_of_entries) + : BasicHashtable(table_size, sizeof(PackageInfo), t, number_of_entries) {} PackageInfo* get_entry(const char* pkgname, int n) { unsigned int hash = compute_hash(pkgname, n); @@ -715,14 +715,14 @@ public: PackageInfo* new_entry(char* pkgname, int n) { unsigned int hash = compute_hash(pkgname, n); PackageInfo* pp; - pp = (PackageInfo*)BasicHashtable::new_entry(hash); + pp = (PackageInfo*)BasicHashtable::new_entry(hash); pp->set_pkgname(pkgname); return pp; } void add_entry(PackageInfo* pp) { int index = hash_to_index(pp->hash()); - BasicHashtable::add_entry(index, pp); + BasicHashtable::add_entry(index, pp); } void copy_pkgnames(const char** packages) { @@ -742,7 +742,7 @@ public: void PackageHashtable::copy_table(char** top, char* end, PackageHashtable* table) { // Copy (relocate) the table to the shared space. - BasicHashtable::copy_table(top, end); + BasicHashtable::copy_table(top, end); // Calculate the space needed for the package name strings. int i; @@ -815,7 +815,7 @@ bool ClassLoader::add_package(const char *pkgname, int classpath_index, TRAPS) { // Package prefix found int n = cp - pkgname + 1; - char* new_pkgname = NEW_C_HEAP_ARRAY(char, n + 1); + char* new_pkgname = NEW_C_HEAP_ARRAY(char, n + 1, mtClass); if (new_pkgname == NULL) { return false; } @@ -929,10 +929,10 @@ instanceKlassHandle ClassLoader::load_classfile(Symbol* h_name, TRAPS) { } -void ClassLoader::create_package_info_table(HashtableBucket *t, int length, +void ClassLoader::create_package_info_table(HashtableBucket *t, int length, int number_of_entries) { assert(_package_hash_table == NULL, "One package info table allowed."); - assert(length == package_hash_table_size * sizeof(HashtableBucket), + assert(length == package_hash_table_size * sizeof(HashtableBucket), "bad shared package info size."); _package_hash_table = new PackageHashtable(package_hash_table_size, t, number_of_entries); diff --git a/hotspot/src/share/vm/classfile/classLoader.hpp b/hotspot/src/share/vm/classfile/classLoader.hpp index 6f816837ae7..ee58550b61e 100644 --- a/hotspot/src/share/vm/classfile/classLoader.hpp +++ b/hotspot/src/share/vm/classfile/classLoader.hpp @@ -33,7 +33,7 @@ // Meta-index (optional, to be able to skip opening boot classpath jar files) -class MetaIndex: public CHeapObj { +class MetaIndex: public CHeapObj { private: char** _meta_package_names; int _num_meta_package_names; @@ -46,7 +46,7 @@ class MetaIndex: public CHeapObj { // Class path entry (directory or zip file) -class ClassPathEntry: public CHeapObj { +class ClassPathEntry: public CHeapObj { private: ClassPathEntry* _next; public: @@ -141,7 +141,7 @@ class LazyClassPathEntry: public ClassPathEntry { class PackageHashtable; class PackageInfo; -class HashtableBucket; +template class HashtableBucket; class ClassLoader: AllStatic { public: @@ -299,7 +299,7 @@ class ClassLoader: AllStatic { // Initialization static void initialize(); static void create_package_info_table(); - static void create_package_info_table(HashtableBucket *t, int length, + static void create_package_info_table(HashtableBucket *t, int length, int number_of_entries); static int compute_Object_vtable(); diff --git a/hotspot/src/share/vm/classfile/dictionary.cpp b/hotspot/src/share/vm/classfile/dictionary.cpp index 4458f46d7a9..78e76cc1f67 100644 --- a/hotspot/src/share/vm/classfile/dictionary.cpp +++ b/hotspot/src/share/vm/classfile/dictionary.cpp @@ -36,16 +36,16 @@ int Dictionary::_current_class_index = 0; Dictionary::Dictionary(int table_size) - : TwoOopHashtable(table_size, sizeof(DictionaryEntry)) { + : TwoOopHashtable(table_size, sizeof(DictionaryEntry)) { _current_class_index = 0; _current_class_entry = NULL; }; -Dictionary::Dictionary(int table_size, HashtableBucket* t, +Dictionary::Dictionary(int table_size, HashtableBucket* t, int number_of_entries) - : TwoOopHashtable(table_size, sizeof(DictionaryEntry), t, number_of_entries) { + : TwoOopHashtable(table_size, sizeof(DictionaryEntry), t, number_of_entries) { _current_class_index = 0; _current_class_entry = NULL; }; @@ -54,7 +54,7 @@ Dictionary::Dictionary(int table_size, HashtableBucket* t, DictionaryEntry* Dictionary::new_entry(unsigned int hash, klassOop klass, oop loader) { DictionaryEntry* entry; - entry = (DictionaryEntry*)Hashtable::new_entry(hash, klass); + entry = (DictionaryEntry*)Hashtable::new_entry(hash, klass); entry->set_loader(loader); entry->set_pd_set(NULL); return entry; @@ -62,7 +62,7 @@ DictionaryEntry* Dictionary::new_entry(unsigned int hash, klassOop klass, DictionaryEntry* Dictionary::new_entry() { - DictionaryEntry* entry = (DictionaryEntry*)Hashtable::new_entry(0L, NULL); + DictionaryEntry* entry = (DictionaryEntry*)Hashtable::new_entry(0L, NULL); entry->set_loader(NULL); entry->set_pd_set(NULL); return entry; @@ -76,7 +76,7 @@ void Dictionary::free_entry(DictionaryEntry* entry) { entry->set_pd_set(to_delete->next()); delete to_delete; } - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } @@ -554,12 +554,12 @@ void Dictionary::reorder_dictionary() { } SymbolPropertyTable::SymbolPropertyTable(int table_size) - : Hashtable(table_size, sizeof(SymbolPropertyEntry)) + : Hashtable(table_size, sizeof(SymbolPropertyEntry)) { } -SymbolPropertyTable::SymbolPropertyTable(int table_size, HashtableBucket* t, +SymbolPropertyTable::SymbolPropertyTable(int table_size, HashtableBucket* t, int number_of_entries) - : Hashtable(table_size, sizeof(SymbolPropertyEntry), t, number_of_entries) + : Hashtable(table_size, sizeof(SymbolPropertyEntry), t, number_of_entries) { } @@ -584,7 +584,7 @@ SymbolPropertyEntry* SymbolPropertyTable::add_entry(int index, unsigned int hash assert(find_entry(index, hash, sym, sym_mode) == NULL, "no double entry"); SymbolPropertyEntry* p = new_entry(hash, sym, sym_mode); - Hashtable::add_entry(index, p); + Hashtable::add_entry(index, p); return p; } diff --git a/hotspot/src/share/vm/classfile/dictionary.hpp b/hotspot/src/share/vm/classfile/dictionary.hpp index 98e01695001..bd33760b721 100644 --- a/hotspot/src/share/vm/classfile/dictionary.hpp +++ b/hotspot/src/share/vm/classfile/dictionary.hpp @@ -36,7 +36,7 @@ class DictionaryEntry; // The data structure for the system dictionary (and the shared system // dictionary). -class Dictionary : public TwoOopHashtable { +class Dictionary : public TwoOopHashtable { friend class VMStructs; private: // current iteration index. @@ -48,22 +48,22 @@ private: Symbol* name, Handle loader); DictionaryEntry* bucket(int i) { - return (DictionaryEntry*)Hashtable::bucket(i); + return (DictionaryEntry*)Hashtable::bucket(i); } // The following method is not MT-safe and must be done under lock. DictionaryEntry** bucket_addr(int i) { - return (DictionaryEntry**)Hashtable::bucket_addr(i); + return (DictionaryEntry**)Hashtable::bucket_addr(i); } void add_entry(int index, DictionaryEntry* new_entry) { - Hashtable::add_entry(index, (HashtableEntry*)new_entry); + Hashtable::add_entry(index, (HashtableEntry*)new_entry); } public: Dictionary(int table_size); - Dictionary(int table_size, HashtableBucket* t, int number_of_entries); + Dictionary(int table_size, HashtableBucket* t, int number_of_entries); DictionaryEntry* new_entry(unsigned int hash, klassOop klass, oop loader); @@ -129,7 +129,7 @@ public: // The following classes can be in dictionary.cpp, but we need these // to be in header file so that SA's vmStructs can access. -class ProtectionDomainEntry :public CHeapObj { +class ProtectionDomainEntry :public CHeapObj { friend class VMStructs; public: ProtectionDomainEntry* _next; @@ -147,7 +147,7 @@ class ProtectionDomainEntry :public CHeapObj { // An entry in the system dictionary, this describes a class as // { klassOop, loader, protection_domain }. -class DictionaryEntry : public HashtableEntry { +class DictionaryEntry : public HashtableEntry { friend class VMStructs; private: // Contains the set of approved protection domains that can access @@ -166,11 +166,11 @@ class DictionaryEntry : public HashtableEntry { klassOop* klass_addr() { return (klassOop*)literal_addr(); } DictionaryEntry* next() const { - return (DictionaryEntry*)HashtableEntry::next(); + return (DictionaryEntry*)HashtableEntry::next(); } DictionaryEntry** next_addr() { - return (DictionaryEntry**)HashtableEntry::next_addr(); + return (DictionaryEntry**)HashtableEntry::next_addr(); } oop loader() const { return _loader; } @@ -228,7 +228,7 @@ class DictionaryEntry : public HashtableEntry { // Entry in a SymbolPropertyTable, mapping a single Symbol* // to a managed and an unmanaged pointer. -class SymbolPropertyEntry : public HashtableEntry { +class SymbolPropertyEntry : public HashtableEntry { friend class VMStructs; private: intptr_t _symbol_mode; // secondary key @@ -248,11 +248,11 @@ class SymbolPropertyEntry : public HashtableEntry { void set_property_data(address p) { _property_data = p; } SymbolPropertyEntry* next() const { - return (SymbolPropertyEntry*)HashtableEntry::next(); + return (SymbolPropertyEntry*)HashtableEntry::next(); } SymbolPropertyEntry** next_addr() { - return (SymbolPropertyEntry**)HashtableEntry::next_addr(); + return (SymbolPropertyEntry**)HashtableEntry::next_addr(); } oop* property_oop_addr() { return &_property_oop; } @@ -278,16 +278,16 @@ class SymbolPropertyEntry : public HashtableEntry { // A system-internal mapping of symbols to pointers, both managed // and unmanaged. Used to record the auto-generation of each method // MethodHandle.invoke(S)T, for all signatures (S)T. -class SymbolPropertyTable : public Hashtable { +class SymbolPropertyTable : public Hashtable { friend class VMStructs; private: SymbolPropertyEntry* bucket(int i) { - return (SymbolPropertyEntry*) Hashtable::bucket(i); + return (SymbolPropertyEntry*) Hashtable::bucket(i); } // The following method is not MT-safe and must be done under lock. SymbolPropertyEntry** bucket_addr(int i) { - return (SymbolPropertyEntry**) Hashtable::bucket_addr(i); + return (SymbolPropertyEntry**) Hashtable::bucket_addr(i); } void add_entry(int index, SymbolPropertyEntry* new_entry) { @@ -298,7 +298,7 @@ private: } SymbolPropertyEntry* new_entry(unsigned int hash, Symbol* symbol, intptr_t symbol_mode) { - SymbolPropertyEntry* entry = (SymbolPropertyEntry*) Hashtable::new_entry(hash, symbol); + SymbolPropertyEntry* entry = (SymbolPropertyEntry*) Hashtable::new_entry(hash, symbol); // Hashtable with Symbol* literal must increment and decrement refcount. symbol->increment_refcount(); entry->set_symbol_mode(symbol_mode); @@ -309,17 +309,17 @@ private: public: SymbolPropertyTable(int table_size); - SymbolPropertyTable(int table_size, HashtableBucket* t, int number_of_entries); + SymbolPropertyTable(int table_size, HashtableBucket* t, int number_of_entries); void free_entry(SymbolPropertyEntry* entry) { // decrement Symbol refcount here because hashtable doesn't. entry->literal()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } unsigned int compute_hash(Symbol* sym, intptr_t symbol_mode) { // Use the regular identity_hash. - return Hashtable::compute_hash(sym) ^ symbol_mode; + return Hashtable::compute_hash(sym) ^ symbol_mode; } int index_for(Symbol* name, intptr_t symbol_mode) { diff --git a/hotspot/src/share/vm/classfile/javaAssertions.cpp b/hotspot/src/share/vm/classfile/javaAssertions.cpp index 7884881dedc..3e6a8ce6041 100644 --- a/hotspot/src/share/vm/classfile/javaAssertions.cpp +++ b/hotspot/src/share/vm/classfile/javaAssertions.cpp @@ -58,7 +58,7 @@ void JavaAssertions::addOption(const char* name, bool enable) { // it is never freed, so will be leaked (along with other option strings - // e.g., bootclasspath) if a process creates/destroys multiple VMs. int len = (int)strlen(name); - char *name_copy = NEW_C_HEAP_ARRAY(char, len + 1); + char *name_copy = NEW_C_HEAP_ARRAY(char, len + 1, mtClass); strcpy(name_copy, name); // Figure out which list the new item should go on. Names that end in "..." diff --git a/hotspot/src/share/vm/classfile/javaAssertions.hpp b/hotspot/src/share/vm/classfile/javaAssertions.hpp index b0fb21a2d07..d06d9010f00 100644 --- a/hotspot/src/share/vm/classfile/javaAssertions.hpp +++ b/hotspot/src/share/vm/classfile/javaAssertions.hpp @@ -68,7 +68,7 @@ private: static OptionList* _packages; // Options for package trees. }; -class JavaAssertions::OptionList: public CHeapObj { +class JavaAssertions::OptionList: public CHeapObj { public: inline OptionList(const char* name, bool enable, OptionList* next); diff --git a/hotspot/src/share/vm/classfile/javaClasses.cpp b/hotspot/src/share/vm/classfile/javaClasses.cpp index 74e6566f785..c6971302107 100644 --- a/hotspot/src/share/vm/classfile/javaClasses.cpp +++ b/hotspot/src/share/vm/classfile/javaClasses.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" #include "classfile/vmSymbols.hpp" @@ -347,13 +348,26 @@ jchar* java_lang_String::as_unicode_string(oop java_string, int& length) { return result; } -unsigned int java_lang_String::hash_string(oop java_string) { +unsigned int java_lang_String::to_hash(oop java_string) { + int length = java_lang_String::length(java_string); + // Zero length string will hash to zero with String.toHash() function. + if (length == 0) return 0; + typeArrayOop value = java_lang_String::value(java_string); int offset = java_lang_String::offset(java_string); - int length = java_lang_String::length(java_string); + return java_lang_String::to_hash(value->char_at_addr(offset), length); +} - if (length == 0) return 0; - return hash_string(value->char_at_addr(offset), length); +unsigned int java_lang_String::hash_string(oop java_string) { + int length = java_lang_String::length(java_string); + // Zero length string doesn't hash necessarily hash to zero. + if (length == 0) { + return StringTable::hash_string(NULL, 0); + } + + typeArrayOop value = java_lang_String::value(java_string); + int offset = java_lang_String::offset(java_string); + return StringTable::hash_string(value->char_at_addr(offset), length); } Symbol* java_lang_String::as_symbol(Handle java_string, TRAPS) { @@ -2724,17 +2738,6 @@ void java_lang_invoke_CallSite::compute_offsets() { if (k != NULL) { compute_offset(_target_offset, k, vmSymbols::target_name(), vmSymbols::java_lang_invoke_MethodHandle_signature()); } - - // Disallow compilation of CallSite.setTargetNormal and CallSite.setTargetVolatile - // (For C2: keep this until we have throttling logic for uncommon traps.) - if (k != NULL) { - instanceKlass* ik = instanceKlass::cast(k); - methodOop m_normal = ik->lookup_method(vmSymbols::setTargetNormal_name(), vmSymbols::setTarget_signature()); - methodOop m_volatile = ik->lookup_method(vmSymbols::setTargetVolatile_name(), vmSymbols::setTarget_signature()); - guarantee(m_normal != NULL && m_volatile != NULL, "must exist"); - m_normal->set_not_compilable_quietly(); - m_volatile->set_not_compilable_quietly(); - } } diff --git a/hotspot/src/share/vm/classfile/javaClasses.hpp b/hotspot/src/share/vm/classfile/javaClasses.hpp index 4924d5829d1..1538a78e4ab 100644 --- a/hotspot/src/share/vm/classfile/javaClasses.hpp +++ b/hotspot/src/share/vm/classfile/javaClasses.hpp @@ -158,20 +158,16 @@ class java_lang_String : AllStatic { static jchar* as_unicode_string(oop java_string, int& length); // Compute the hash value for a java.lang.String object which would - // contain the characters passed in. This hash value is used for at - // least two purposes. + // contain the characters passed in. // - // (a) As the hash value used by the StringTable for bucket selection - // and comparison (stored in the HashtableEntry structures). This - // is used in the String.intern() method. + // As the hash value used by the String object itself, in + // String.hashCode(). This value is normally calculated in Java code + // in the String.hashCode method(), but is precomputed for String + // objects in the shared archive file. + // hash P(31) from Kernighan & Ritchie // - // (b) As the hash value used by the String object itself, in - // String.hashCode(). This value is normally calculate in Java code - // in the String.hashCode method(), but is precomputed for String - // objects in the shared archive file. - // - // For this reason, THIS ALGORITHM MUST MATCH String.hashCode(). - static unsigned int hash_string(jchar* s, int len) { + // For this reason, THIS ALGORITHM MUST MATCH String.toHash(). + template static unsigned int to_hash(T* s, int len) { unsigned int h = 0; while (len-- > 0) { h = 31*h + (unsigned int) *s; @@ -179,6 +175,10 @@ class java_lang_String : AllStatic { } return h; } + static unsigned int to_hash(oop java_string); + + // This is the string hash code used by the StringTable, which may be + // the same as String.toHash or an alternate hash code. static unsigned int hash_string(oop java_string); static bool equals(oop java_string, jchar* chars, int len); diff --git a/hotspot/src/share/vm/classfile/loaderConstraints.cpp b/hotspot/src/share/vm/classfile/loaderConstraints.cpp index 5e25e4cbd02..8650cd98db6 100644 --- a/hotspot/src/share/vm/classfile/loaderConstraints.cpp +++ b/hotspot/src/share/vm/classfile/loaderConstraints.cpp @@ -31,7 +31,7 @@ #include "utilities/hashtable.inline.hpp" LoaderConstraintTable::LoaderConstraintTable(int nof_buckets) - : Hashtable(nof_buckets, sizeof(LoaderConstraintEntry)) {}; + : Hashtable(nof_buckets, sizeof(LoaderConstraintEntry)) {}; LoaderConstraintEntry* LoaderConstraintTable::new_entry( @@ -39,7 +39,7 @@ LoaderConstraintEntry* LoaderConstraintTable::new_entry( klassOop klass, int num_loaders, int max_loaders) { LoaderConstraintEntry* entry; - entry = (LoaderConstraintEntry*)Hashtable::new_entry(hash, klass); + entry = (LoaderConstraintEntry*)Hashtable::new_entry(hash, klass); entry->set_name(name); entry->set_num_loaders(num_loaders); entry->set_max_loaders(max_loaders); @@ -49,7 +49,7 @@ LoaderConstraintEntry* LoaderConstraintTable::new_entry( void LoaderConstraintTable::free_entry(LoaderConstraintEntry *entry) { // decrement name refcount before freeing entry->name()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } @@ -164,7 +164,7 @@ void LoaderConstraintTable::purge_loader_constraints(BoolObjectClosure* is_alive // Purge entry *p = probe->next(); - FREE_C_HEAP_ARRAY(oop, probe->loaders()); + FREE_C_HEAP_ARRAY(oop, probe->loaders(), mtClass); free_entry(probe); } else { #ifdef ASSERT @@ -224,7 +224,7 @@ bool LoaderConstraintTable::add_entry(Symbol* class_name, int index = hash_to_index(hash); LoaderConstraintEntry* p; p = new_entry(hash, class_name, klass, 2, 2); - p->set_loaders(NEW_C_HEAP_ARRAY(oop, 2)); + p->set_loaders(NEW_C_HEAP_ARRAY(oop, 2, mtClass)); p->set_loader(0, class_loader1()); p->set_loader(1, class_loader2()); p->set_klass(klass); @@ -340,10 +340,10 @@ void LoaderConstraintTable::ensure_loader_constraint_capacity( int nfree) { if (p->max_loaders() - p->num_loaders() < nfree) { int n = nfree + p->num_loaders(); - oop* new_loaders = NEW_C_HEAP_ARRAY(oop, n); + oop* new_loaders = NEW_C_HEAP_ARRAY(oop, n, mtClass); memcpy(new_loaders, p->loaders(), sizeof(oop) * p->num_loaders()); p->set_max_loaders(n); - FREE_C_HEAP_ARRAY(oop, p->loaders()); + FREE_C_HEAP_ARRAY(oop, p->loaders(), mtClass); p->set_loaders(new_loaders); } } @@ -425,7 +425,7 @@ void LoaderConstraintTable::merge_loader_constraints( } *pp2 = p2->next(); - FREE_C_HEAP_ARRAY(oop, p2->loaders()); + FREE_C_HEAP_ARRAY(oop, p2->loaders(), mtClass); free_entry(p2); return; } diff --git a/hotspot/src/share/vm/classfile/loaderConstraints.hpp b/hotspot/src/share/vm/classfile/loaderConstraints.hpp index 60612f5dba3..d01b2c4d63f 100644 --- a/hotspot/src/share/vm/classfile/loaderConstraints.hpp +++ b/hotspot/src/share/vm/classfile/loaderConstraints.hpp @@ -31,7 +31,7 @@ class LoaderConstraintEntry; -class LoaderConstraintTable : public Hashtable { +class LoaderConstraintTable : public Hashtable { friend class VMStructs; private: @@ -53,11 +53,11 @@ public: void free_entry(LoaderConstraintEntry *entry); LoaderConstraintEntry* bucket(int i) { - return (LoaderConstraintEntry*)Hashtable::bucket(i); + return (LoaderConstraintEntry*)Hashtable::bucket(i); } LoaderConstraintEntry** bucket_addr(int i) { - return (LoaderConstraintEntry**)Hashtable::bucket_addr(i); + return (LoaderConstraintEntry**)Hashtable::bucket_addr(i); } // GC support @@ -94,7 +94,7 @@ public: #endif }; -class LoaderConstraintEntry : public HashtableEntry { +class LoaderConstraintEntry : public HashtableEntry { friend class VMStructs; private: Symbol* _name; // class name @@ -109,14 +109,14 @@ public: void set_klass(klassOop k) { set_literal(k); } LoaderConstraintEntry* next() { - return (LoaderConstraintEntry*)HashtableEntry::next(); + return (LoaderConstraintEntry*)HashtableEntry::next(); } LoaderConstraintEntry** next_addr() { - return (LoaderConstraintEntry**)HashtableEntry::next_addr(); + return (LoaderConstraintEntry**)HashtableEntry::next_addr(); } void set_next(LoaderConstraintEntry* next) { - HashtableEntry::set_next(next); + HashtableEntry::set_next(next); } Symbol* name() { return _name; } diff --git a/hotspot/src/share/vm/classfile/placeholders.cpp b/hotspot/src/share/vm/classfile/placeholders.cpp index ef877b1033e..d3f425b241a 100644 --- a/hotspot/src/share/vm/classfile/placeholders.cpp +++ b/hotspot/src/share/vm/classfile/placeholders.cpp @@ -34,7 +34,7 @@ PlaceholderEntry* PlaceholderTable::new_entry(int hash, Symbol* name, oop loader, bool havesupername, Symbol* supername) { - PlaceholderEntry* entry = (PlaceholderEntry*)Hashtable::new_entry(hash, name); + PlaceholderEntry* entry = (PlaceholderEntry*)Hashtable::new_entry(hash, name); // Hashtable with Symbol* literal must increment and decrement refcount. name->increment_refcount(); entry->set_loader(loader); @@ -52,7 +52,7 @@ void PlaceholderTable::free_entry(PlaceholderEntry* entry) { // decrement Symbol refcount here because Hashtable doesn't. entry->literal()->decrement_refcount(); if (entry->supername() != NULL) entry->supername()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } @@ -166,7 +166,7 @@ void PlaceholderTable::find_and_remove(int index, unsigned int hash, } PlaceholderTable::PlaceholderTable(int table_size) - : TwoOopHashtable(table_size, sizeof(PlaceholderEntry)) { + : TwoOopHashtable(table_size, sizeof(PlaceholderEntry)) { } diff --git a/hotspot/src/share/vm/classfile/placeholders.hpp b/hotspot/src/share/vm/classfile/placeholders.hpp index 667c59b8c70..4dea3a6804c 100644 --- a/hotspot/src/share/vm/classfile/placeholders.hpp +++ b/hotspot/src/share/vm/classfile/placeholders.hpp @@ -34,7 +34,7 @@ class PlaceholderEntry; // being loaded, as well as arrays of primitives. // -class PlaceholderTable : public TwoOopHashtable { +class PlaceholderTable : public TwoOopHashtable { friend class VMStructs; public: @@ -44,15 +44,15 @@ public: void free_entry(PlaceholderEntry* entry); PlaceholderEntry* bucket(int i) { - return (PlaceholderEntry*)Hashtable::bucket(i); + return (PlaceholderEntry*)Hashtable::bucket(i); } PlaceholderEntry** bucket_addr(int i) { - return (PlaceholderEntry**)Hashtable::bucket_addr(i); + return (PlaceholderEntry**)Hashtable::bucket_addr(i); } void add_entry(int index, PlaceholderEntry* new_entry) { - Hashtable::add_entry(index, (HashtableEntry*)new_entry); + Hashtable::add_entry(index, (HashtableEntry*)new_entry); } void add_entry(int index, unsigned int hash, Symbol* name, @@ -116,7 +116,7 @@ public: // For DEFINE_CLASS, the head of the queue owns the // define token and the rest of the threads wait to return the // result the first thread gets. -class SeenThread: public CHeapObj { +class SeenThread: public CHeapObj { private: Thread *_thread; SeenThread* _stnext; @@ -152,7 +152,7 @@ public: // on store ordering here. // The system dictionary is the only user of this class. -class PlaceholderEntry : public HashtableEntry { +class PlaceholderEntry : public HashtableEntry { friend class VMStructs; @@ -206,11 +206,11 @@ class PlaceholderEntry : public HashtableEntry { void set_defineThreadQ(SeenThread* SeenThread) { _defineThreadQ = SeenThread; } PlaceholderEntry* next() const { - return (PlaceholderEntry*)HashtableEntry::next(); + return (PlaceholderEntry*)HashtableEntry::next(); } PlaceholderEntry** next_addr() { - return (PlaceholderEntry**)HashtableEntry::next_addr(); + return (PlaceholderEntry**)HashtableEntry::next_addr(); } // Test for equality diff --git a/hotspot/src/share/vm/classfile/resolutionErrors.cpp b/hotspot/src/share/vm/classfile/resolutionErrors.cpp index ed31224e010..e94ffa288ab 100644 --- a/hotspot/src/share/vm/classfile/resolutionErrors.cpp +++ b/hotspot/src/share/vm/classfile/resolutionErrors.cpp @@ -67,7 +67,7 @@ void ResolutionErrorEntry::set_error(Symbol* e) { ResolutionErrorEntry* ResolutionErrorTable::new_entry(int hash, constantPoolOop pool, int cp_index, Symbol* error) { - ResolutionErrorEntry* entry = (ResolutionErrorEntry*)Hashtable::new_entry(hash, pool); + ResolutionErrorEntry* entry = (ResolutionErrorEntry*)Hashtable::new_entry(hash, pool); entry->set_cp_index(cp_index); NOT_PRODUCT(entry->set_error(NULL);) entry->set_error(error); @@ -79,13 +79,13 @@ void ResolutionErrorTable::free_entry(ResolutionErrorEntry *entry) { // decrement error refcount assert(entry->error() != NULL, "error should be set"); entry->error()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } // create resolution error table ResolutionErrorTable::ResolutionErrorTable(int table_size) - : Hashtable(table_size, sizeof(ResolutionErrorEntry)) { + : Hashtable(table_size, sizeof(ResolutionErrorEntry)) { } // GC support diff --git a/hotspot/src/share/vm/classfile/resolutionErrors.hpp b/hotspot/src/share/vm/classfile/resolutionErrors.hpp index 03fcf4957bb..a18a55a2340 100644 --- a/hotspot/src/share/vm/classfile/resolutionErrors.hpp +++ b/hotspot/src/share/vm/classfile/resolutionErrors.hpp @@ -33,7 +33,7 @@ class ResolutionErrorEntry; // ResolutionError objects are used to record errors encountered during // constant pool resolution (JVMS 5.4.3). -class ResolutionErrorTable : public Hashtable { +class ResolutionErrorTable : public Hashtable { public: ResolutionErrorTable(int table_size); @@ -42,15 +42,16 @@ public: void free_entry(ResolutionErrorEntry *entry); ResolutionErrorEntry* bucket(int i) { - return (ResolutionErrorEntry*)Hashtable::bucket(i); + return (ResolutionErrorEntry*)Hashtable::bucket(i); } ResolutionErrorEntry** bucket_addr(int i) { - return (ResolutionErrorEntry**)Hashtable::bucket_addr(i); + return (ResolutionErrorEntry**)Hashtable::bucket_addr(i); } void add_entry(int index, ResolutionErrorEntry* new_entry) { - Hashtable::add_entry(index, (HashtableEntry*)new_entry); + Hashtable::add_entry(index, + (HashtableEntry*)new_entry); } void add_entry(int index, unsigned int hash, @@ -74,7 +75,7 @@ public: }; -class ResolutionErrorEntry : public HashtableEntry { +class ResolutionErrorEntry : public HashtableEntry { private: int _cp_index; Symbol* _error; @@ -90,11 +91,11 @@ class ResolutionErrorEntry : public HashtableEntry { void set_error(Symbol* e); ResolutionErrorEntry* next() const { - return (ResolutionErrorEntry*)HashtableEntry::next(); + return (ResolutionErrorEntry*)HashtableEntry::next(); } ResolutionErrorEntry** next_addr() { - return (ResolutionErrorEntry**)HashtableEntry::next_addr(); + return (ResolutionErrorEntry**)HashtableEntry::next_addr(); } // GC support diff --git a/hotspot/src/share/vm/classfile/symbolTable.cpp b/hotspot/src/share/vm/classfile/symbolTable.cpp index 66218822525..dd52e8167a8 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.cpp +++ b/hotspot/src/share/vm/classfile/symbolTable.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" @@ -34,19 +35,18 @@ #include "oops/oop.inline2.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/hashtable.inline.hpp" +#include "utilities/numberSeq.hpp" // -------------------------------------------------------------------------- SymbolTable* SymbolTable::_the_table = NULL; // Static arena for symbols that are not deallocated Arena* SymbolTable::_arena = NULL; +bool SymbolTable::_needs_rehashing = false; Symbol* SymbolTable::allocate_symbol(const u1* name, int len, bool c_heap, TRAPS) { - // Don't allow symbols to be created which cannot fit in a Symbol*. - if (len > Symbol::max_length()) { - THROW_MSG_0(vmSymbols::java_lang_InternalError(), - "name is too long to represent"); - } + assert (len <= Symbol::max_length(), "should be checked by caller"); + Symbol* sym; // Allocate symbols in the C heap when dumping shared spaces in case there // are temporary symbols we can remove. @@ -63,9 +63,9 @@ Symbol* SymbolTable::allocate_symbol(const u1* name, int len, bool c_heap, TRAPS void SymbolTable::initialize_symbols(int arena_alloc_size) { // Initialize the arena for global symbols, size passed in depends on CDS. if (arena_alloc_size == 0) { - _arena = new Arena(); + _arena = new (mtSymbol) Arena(); } else { - _arena = new Arena(arena_alloc_size); + _arena = new (mtSymbol) Arena(arena_alloc_size); } } @@ -73,7 +73,7 @@ void SymbolTable::initialize_symbols(int arena_alloc_size) { void SymbolTable::symbols_do(SymbolClosure *cl) { const int n = the_table()->table_size(); for (int i = 0; i < n; i++) { - for (HashtableEntry* p = the_table()->bucket(i); + for (HashtableEntry* p = the_table()->bucket(i); p != NULL; p = p->next()) { cl->do_symbol(p->literal_addr()); @@ -91,9 +91,14 @@ void SymbolTable::unlink() { int total = 0; size_t memory_total = 0; for (int i = 0; i < the_table()->table_size(); ++i) { - for (HashtableEntry** p = the_table()->bucket_addr(i); *p != NULL; ) { - HashtableEntry* entry = *p; - if (entry->is_shared()) { + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); + while (entry != NULL) { + // Shared entries are normally at the end of the bucket and if we run into + // a shared entry, then there is nothing more to remove. However, if we + // have rehashed the table, then the shared entries are no longer at the + // end of the bucket. + if (entry->is_shared() && !use_alternate_hashcode()) { break; } Symbol* s = entry->literal(); @@ -102,6 +107,7 @@ void SymbolTable::unlink() { assert(s != NULL, "just checking"); // If reference count is zero, remove. if (s->refcount() == 0) { + assert(!entry->is_shared(), "shared entries should be kept live"); delete s; removed++; *p = entry->next(); @@ -109,6 +115,8 @@ void SymbolTable::unlink() { } else { p = entry->next_addr(); } + // get next entry + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } } symbols_removed += removed; @@ -121,12 +129,32 @@ void SymbolTable::unlink() { } } +// Create a new table and using alternate hash code, populate the new table +// with the existing strings. Set flag to use the alternate hash code afterwards. +void SymbolTable::rehash_table() { + assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); + // This should never happen with -Xshare:dump but it might in testing mode. + if (DumpSharedSpaces) return; + // Create a new symbol table + SymbolTable* new_table = new SymbolTable(); + + the_table()->move_to(new_table); + + // Delete the table and buckets (entries are reused in new table). + delete _the_table; + // Don't check if we need rehashing until the table gets unbalanced again. + // Then rehash with a new global seed. + _needs_rehashing = false; + _the_table = new_table; +} // Lookup a symbol in a bucket. Symbol* SymbolTable::lookup(int index, const char* name, int len, unsigned int hash) { - for (HashtableEntry* e = bucket(index); e != NULL; e = e->next()) { + int count = 0; + for (HashtableEntry* e = bucket(index); e != NULL; e = e->next()) { + count++; // count all entries in this bucket, not just ones with same hash if (e->hash() == hash) { Symbol* sym = e->literal(); if (sym->equals(name, len)) { @@ -136,9 +164,20 @@ Symbol* SymbolTable::lookup(int index, const char* name, } } } + // If the bucket size is too deep check if this hash code is insufficient. + if (count >= BasicHashtable::rehash_count && !needs_rehashing()) { + _needs_rehashing = check_rehash_table(count); + } return NULL; } +// Pick hashing algorithm. +unsigned int SymbolTable::hash_symbol(const char* s, int len) { + return use_alternate_hashcode() ? + AltHashing::murmur3_32(seed(), (const jbyte*)s, len) : + java_lang_String::to_hash(s, len); +} + // We take care not to be blocking while holding the // SymbolTable_lock. Otherwise, the system might deadlock, since the @@ -156,6 +195,9 @@ Symbol* SymbolTable::lookup(const char* name, int len, TRAPS) { // Found if (s != NULL) return s; + // Grab SymbolTable_lock first. + MutexLocker ml(SymbolTable_lock, THREAD); + // Otherwise, add to symbol to table return the_table()->basic_add(index, (u1*)name, len, hashValue, true, CHECK_NULL); } @@ -193,6 +235,9 @@ Symbol* SymbolTable::lookup(const Symbol* sym, int begin, int end, TRAPS) { // We can't include the code in No_Safepoint_Verifier because of the // ResourceMark. + // Grab SymbolTable_lock first. + MutexLocker ml(SymbolTable_lock, THREAD); + return the_table()->basic_add(index, (u1*)buffer, len, hashValue, true, CHECK_NULL); } @@ -212,7 +257,7 @@ Symbol** SymbolTable::lookup_symbol_addr(Symbol* sym){ unsigned int hash = hash_symbol((char*)sym->bytes(), sym->utf8_length()); int index = the_table()->hash_to_index(hash); - for (HashtableEntry* e = the_table()->bucket(index); e != NULL; e = e->next()) { + for (HashtableEntry* e = the_table()->bucket(index); e != NULL; e = e->next()) { if (e->hash() == hash) { Symbol* literal_sym = e->literal(); if (sym == literal_sym) { @@ -261,6 +306,9 @@ void SymbolTable::add(Handle class_loader, constantPoolHandle cp, int names_count, const char** names, int* lengths, int* cp_indices, unsigned int* hashValues, TRAPS) { + // Grab SymbolTable_lock first. + MutexLocker ml(SymbolTable_lock, THREAD); + SymbolTable* table = the_table(); bool added = table->basic_add(class_loader, cp, names_count, names, lengths, cp_indices, hashValues, CHECK); @@ -281,18 +329,39 @@ Symbol* SymbolTable::new_permanent_symbol(const char* name, TRAPS) { if (result != NULL) { return result; } + // Grab SymbolTable_lock first. + MutexLocker ml(SymbolTable_lock, THREAD); + SymbolTable* table = the_table(); int index = table->hash_to_index(hash); return table->basic_add(index, (u1*)name, (int)strlen(name), hash, false, THREAD); } -Symbol* SymbolTable::basic_add(int index, u1 *name, int len, - unsigned int hashValue, bool c_heap, TRAPS) { +Symbol* SymbolTable::basic_add(int index_arg, u1 *name, int len, + unsigned int hashValue_arg, bool c_heap, TRAPS) { assert(!Universe::heap()->is_in_reserved(name) || GC_locker::is_active(), "proposed name of symbol must be stable"); - // Grab SymbolTable_lock first. - MutexLocker ml(SymbolTable_lock, THREAD); + // Don't allow symbols to be created which cannot fit in a Symbol*. + if (len > Symbol::max_length()) { + THROW_MSG_0(vmSymbols::java_lang_InternalError(), + "name is too long to represent"); + } + + // Cannot hit a safepoint in this function because the "this" pointer can move. + No_Safepoint_Verifier nsv; + + // Check if the symbol table has been rehashed, if so, need to recalculate + // the hash value and index. + unsigned int hashValue; + int index; + if (use_alternate_hashcode()) { + hashValue = hash_symbol((const char*)name, len); + index = hash_to_index(hashValue); + } else { + hashValue = hashValue_arg; + index = index_arg; + } // Since look-up was done lock-free, we need to check if another // thread beat us in the race to insert the symbol. @@ -307,7 +376,7 @@ Symbol* SymbolTable::basic_add(int index, u1 *name, int len, Symbol* sym = allocate_symbol(name, len, c_heap, CHECK_NULL); assert(sym->equals((char*)name, len), "symbol must be properly initialized"); - HashtableEntry* entry = new_entry(hashValue, sym); + HashtableEntry* entry = new_entry(hashValue, sym); add_entry(index, entry); return sym; } @@ -328,14 +397,22 @@ bool SymbolTable::basic_add(Handle class_loader, constantPoolHandle cp, } } - // Hold SymbolTable_lock through the symbol creation - MutexLocker ml(SymbolTable_lock, THREAD); + // Cannot hit a safepoint in this function because the "this" pointer can move. + No_Safepoint_Verifier nsv; for (int i=0; iequals(names[i], lengths[i]), "symbol must be properly initialized"); // why wouldn't it be??? - HashtableEntry* entry = new_entry(hashValues[i], sym); + HashtableEntry* entry = new_entry(hashValue, sym); add_entry(index, entry); cp->symbol_at_put(cp_indices[i], sym); } @@ -358,7 +435,7 @@ bool SymbolTable::basic_add(Handle class_loader, constantPoolHandle cp, void SymbolTable::verify() { for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry* p = the_table()->bucket(i); + HashtableEntry* p = the_table()->bucket(i); for ( ; p != NULL; p = p->next()) { Symbol* s = (Symbol*)(p->literal()); guarantee(s != NULL, "symbol is NULL"); @@ -370,6 +447,24 @@ void SymbolTable::verify() { } } +void SymbolTable::dump(outputStream* st) { + NumberSeq summary; + for (int i = 0; i < the_table()->table_size(); ++i) { + int count = 0; + for (HashtableEntry* e = the_table()->bucket(i); + e != NULL; e = e->next()) { + count++; + } + summary.add((double)count); + } + st->print_cr("SymbolTable statistics:"); + st->print_cr("Number of buckets : %7d", summary.num()); + st->print_cr("Average bucket size : %7.0f", summary.avg()); + st->print_cr("Variance of bucket size : %7.0f", summary.variance()); + st->print_cr("Std. dev. of bucket size: %7.0f", summary.sd()); + st->print_cr("Maximum bucket size : %7.0f", summary.maximum()); +} + //--------------------------------------------------------------------------- // Non-product code @@ -393,7 +488,7 @@ void SymbolTable::print_histogram() { int memory_total = 0; int count = 0; for (i = 0; i < the_table()->table_size(); i++) { - HashtableEntry* p = the_table()->bucket(i); + HashtableEntry* p = the_table()->bucket(i); for ( ; p != NULL; p = p->next()) { memory_total += p->literal()->object_size(); count++; @@ -454,21 +549,20 @@ void SymbolTable::print_histogram() { void SymbolTable::print() { for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry** p = the_table()->bucket_addr(i); - HashtableEntry* entry = the_table()->bucket(i); + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); if (entry != NULL) { while (entry != NULL) { tty->print(PTR_FORMAT " ", entry->literal()); entry->literal()->print(); tty->print(" %d", entry->literal()->refcount()); p = entry->next_addr(); - entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } tty->cr(); } } } - #endif // PRODUCT // -------------------------------------------------------------------------- @@ -514,21 +608,87 @@ class StableMemoryChecker : public StackObj { // -------------------------------------------------------------------------- StringTable* StringTable::_the_table = NULL; +bool StringTable::_needs_rehashing = false; + +// Pick hashing algorithm +unsigned int StringTable::hash_string(const jchar* s, int len) { + return use_alternate_hashcode() ? AltHashing::murmur3_32(seed(), s, len) : + java_lang_String::to_hash(s, len); +} + oop StringTable::lookup(int index, jchar* name, int len, unsigned int hash) { - for (HashtableEntry* l = bucket(index); l != NULL; l = l->next()) { + int count = 0; + for (HashtableEntry* l = bucket(index); l != NULL; l = l->next()) { + count++; if (l->hash() == hash) { if (java_lang_String::equals(l->literal(), name, len)) { return l->literal(); } } } + // If the bucket size is too deep check if this hash code is insufficient. + if (count >= BasicHashtable::rehash_count && !needs_rehashing()) { + _needs_rehashing = check_rehash_table(count); + } return NULL; } -oop StringTable::basic_add(int index, Handle string_or_null, jchar* name, - int len, unsigned int hashValue, TRAPS) { +oop StringTable::basic_add(int index_arg, Handle string, jchar* name, + int len, unsigned int hashValue_arg, TRAPS) { + + assert(java_lang_String::equals(string(), name, len), + "string must be properly initialized"); + // Cannot hit a safepoint in this function because the "this" pointer can move. + No_Safepoint_Verifier nsv; + + // Check if the symbol table has been rehashed, if so, need to recalculate + // the hash value and index before second lookup. + unsigned int hashValue; + int index; + if (use_alternate_hashcode()) { + hashValue = hash_string(name, len); + index = hash_to_index(hashValue); + } else { + hashValue = hashValue_arg; + index = index_arg; + } + + // Since look-up was done lock-free, we need to check if another + // thread beat us in the race to insert the symbol. + + oop test = lookup(index, name, len, hashValue); // calls lookup(u1*, int) + if (test != NULL) { + // Entry already added + return test; + } + + HashtableEntry* entry = new_entry(hashValue, string()); + add_entry(index, entry); + return string(); +} + + +oop StringTable::lookup(Symbol* symbol) { + ResourceMark rm; + int length; + jchar* chars = symbol->as_unicode(length); + unsigned int hashValue = hash_string(chars, length); + int index = the_table()->hash_to_index(hashValue); + return the_table()->lookup(index, chars, length, hashValue); +} + + +oop StringTable::intern(Handle string_or_null, jchar* name, + int len, TRAPS) { + unsigned int hashValue = hash_string(name, len); + int index = the_table()->hash_to_index(hashValue); + oop found_string = the_table()->lookup(index, name, len, hashValue); + + // Found + if (found_string != NULL) return found_string; + debug_only(StableMemoryChecker smc(name, len * sizeof(name[0]))); assert(!Universe::heap()->is_in_reserved(name) || GC_locker::is_active(), "proposed name of symbol must be stable"); @@ -541,48 +701,12 @@ oop StringTable::basic_add(int index, Handle string_or_null, jchar* name, string = java_lang_String::create_tenured_from_unicode(name, len, CHECK_NULL); } - // Allocation must be done before grapping the SymbolTable_lock lock + // Grab the StringTable_lock before getting the_table() because it could + // change at safepoint. MutexLocker ml(StringTable_lock, THREAD); - assert(java_lang_String::equals(string(), name, len), - "string must be properly initialized"); - - // Since look-up was done lock-free, we need to check if another - // thread beat us in the race to insert the symbol. - - oop test = lookup(index, name, len, hashValue); // calls lookup(u1*, int) - if (test != NULL) { - // Entry already added - return test; - } - - HashtableEntry* entry = new_entry(hashValue, string()); - add_entry(index, entry); - return string(); -} - - -oop StringTable::lookup(Symbol* symbol) { - ResourceMark rm; - int length; - jchar* chars = symbol->as_unicode(length); - unsigned int hashValue = java_lang_String::hash_string(chars, length); - int index = the_table()->hash_to_index(hashValue); - return the_table()->lookup(index, chars, length, hashValue); -} - - -oop StringTable::intern(Handle string_or_null, jchar* name, - int len, TRAPS) { - unsigned int hashValue = java_lang_String::hash_string(name, len); - int index = the_table()->hash_to_index(hashValue); - oop string = the_table()->lookup(index, name, len, hashValue); - - // Found - if (string != NULL) return string; - // Otherwise, add to symbol to table - return the_table()->basic_add(index, string_or_null, name, len, + return the_table()->basic_add(index, string, name, len, hashValue, CHECK_NULL); } @@ -625,26 +749,32 @@ void StringTable::unlink(BoolObjectClosure* is_alive) { // entries at a safepoint. assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); for (int i = 0; i < the_table()->table_size(); ++i) { - for (HashtableEntry** p = the_table()->bucket_addr(i); *p != NULL; ) { - HashtableEntry* entry = *p; - if (entry->is_shared()) { + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); + while (entry != NULL) { + // Shared entries are normally at the end of the bucket and if we run into + // a shared entry, then there is nothing more to remove. However, if we + // have rehashed the table, then the shared entries are no longer at the + // end of the bucket. + if (entry->is_shared() && !use_alternate_hashcode()) { break; } assert(entry->literal() != NULL, "just checking"); - if (is_alive->do_object_b(entry->literal())) { + if (entry->is_shared() || is_alive->do_object_b(entry->literal())) { p = entry->next_addr(); } else { *p = entry->next(); the_table()->free_entry(entry); } + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } } } void StringTable::oops_do(OopClosure* f) { for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry** p = the_table()->bucket_addr(i); - HashtableEntry* entry = the_table()->bucket(i); + HashtableEntry** p = the_table()->bucket_addr(i); + HashtableEntry* entry = the_table()->bucket(i); while (entry != NULL) { f->do_oop((oop*)entry->literal_addr()); @@ -656,14 +786,14 @@ void StringTable::oops_do(OopClosure* f) { } else { p = entry->next_addr(); } - entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); + entry = (HashtableEntry*)HashtableEntry::make_ptr(*p); } } } void StringTable::verify() { for (int i = 0; i < the_table()->table_size(); ++i) { - HashtableEntry* p = the_table()->bucket(i); + HashtableEntry* p = the_table()->bucket(i); for ( ; p != NULL; p = p->next()) { oop s = p->literal(); guarantee(s != NULL, "interned string is NULL"); @@ -675,3 +805,41 @@ void StringTable::verify() { } } } + +void StringTable::dump(outputStream* st) { + NumberSeq summary; + for (int i = 0; i < the_table()->table_size(); ++i) { + HashtableEntry* p = the_table()->bucket(i); + int count = 0; + for ( ; p != NULL; p = p->next()) { + count++; + } + summary.add((double)count); + } + st->print_cr("StringTable statistics:"); + st->print_cr("Number of buckets : %7d", summary.num()); + st->print_cr("Average bucket size : %7.0f", summary.avg()); + st->print_cr("Variance of bucket size : %7.0f", summary.variance()); + st->print_cr("Std. dev. of bucket size: %7.0f", summary.sd()); + st->print_cr("Maximum bucket size : %7.0f", summary.maximum()); +} + + +// Create a new table and using alternate hash code, populate the new table +// with the existing strings. Set flag to use the alternate hash code afterwards. +void StringTable::rehash_table() { + assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); + // This should never happen with -Xshare:dump but it might in testing mode. + if (DumpSharedSpaces) return; + StringTable* new_table = new StringTable(); + + // Rehash the table + the_table()->move_to(new_table); + + // Delete the table and buckets (entries are reused in new table). + delete _the_table; + // Don't check if we need rehashing until the table gets unbalanced again. + // Then rehash with a new global seed. + _needs_rehashing = false; + _the_table = new_table; +} diff --git a/hotspot/src/share/vm/classfile/symbolTable.hpp b/hotspot/src/share/vm/classfile/symbolTable.hpp index 3e0777fc7c1..7812fe1fb6c 100644 --- a/hotspot/src/share/vm/classfile/symbolTable.hpp +++ b/hotspot/src/share/vm/classfile/symbolTable.hpp @@ -40,6 +40,7 @@ // - symbolTableEntrys are allocated in blocks to reduce the space overhead. class BoolObjectClosure; +class outputStream; // Class to hold a newly created or referenced Symbol* temporarily in scope. @@ -70,7 +71,7 @@ class TempNewSymbol : public StackObj { operator Symbol*() { return _temp; } }; -class SymbolTable : public Hashtable { +class SymbolTable : public Hashtable { friend class VMStructs; friend class ClassFileParser; @@ -78,6 +79,9 @@ private: // The symbol table static SymbolTable* _the_table; + // Set if one bucket is out of balance due to hash algorithm deficiency + static bool _needs_rehashing; + // For statistics static int symbols_removed; static int symbols_counted; @@ -108,10 +112,10 @@ private: Symbol* lookup(int index, const char* name, int len, unsigned int hash); SymbolTable() - : Hashtable(symbol_table_size, sizeof (HashtableEntry)) {} + : Hashtable(symbol_table_size, sizeof (HashtableEntry)) {} - SymbolTable(HashtableBucket* t, int number_of_entries) - : Hashtable(symbol_table_size, sizeof (HashtableEntry), t, + SymbolTable(HashtableBucket* t, int number_of_entries) + : Hashtable(symbol_table_size, sizeof (HashtableEntry), t, number_of_entries) {} // Arena for permanent symbols (null class loader) that are never unloaded @@ -135,10 +139,10 @@ public: initialize_symbols(symbol_alloc_arena_size); } - static void create_table(HashtableBucket* t, int length, + static void create_table(HashtableBucket* t, int length, int number_of_entries) { assert(_the_table == NULL, "One symbol table allowed."); - assert(length == symbol_table_size * sizeof(HashtableBucket), + assert(length == symbol_table_size * sizeof(HashtableBucket), "bad shared symbol size."); _the_table = new SymbolTable(t, number_of_entries); // if CDS give symbol table a default arena size since most symbols @@ -146,6 +150,8 @@ public: initialize_symbols(); } + static unsigned int hash_symbol(const char* s, int len); + static Symbol* lookup(const char* name, int len, TRAPS); // lookup only, won't add. Also calculate hash. static Symbol* lookup_only(const char* name, int len, unsigned int& hash); @@ -208,39 +214,46 @@ public: // Debugging static void verify(); + static void dump(outputStream* st); // Sharing static void copy_buckets(char** top, char*end) { - the_table()->Hashtable::copy_buckets(top, end); + the_table()->Hashtable::copy_buckets(top, end); } static void copy_table(char** top, char*end) { - the_table()->Hashtable::copy_table(top, end); + the_table()->Hashtable::copy_table(top, end); } static void reverse(void* boundary = NULL) { - the_table()->Hashtable::reverse(boundary); + the_table()->Hashtable::reverse(boundary); } + + // Rehash the symbol table if it gets out of balance + static void rehash_table(); + static bool needs_rehashing() { return _needs_rehashing; } }; -class StringTable : public Hashtable { +class StringTable : public Hashtable { friend class VMStructs; private: // The string table static StringTable* _the_table; + // Set if one bucket is out of balance due to hash algorithm deficiency + static bool _needs_rehashing; + static oop intern(Handle string_or_null, jchar* chars, int length, TRAPS); oop basic_add(int index, Handle string_or_null, jchar* name, int len, unsigned int hashValue, TRAPS); oop lookup(int index, jchar* chars, int length, unsigned int hashValue); - StringTable() : Hashtable((int)StringTableSize, - sizeof (HashtableEntry)) {} + StringTable() : Hashtable((int)StringTableSize, + sizeof (HashtableEntry)) {} - StringTable(HashtableBucket* t, int number_of_entries) - : Hashtable((int)StringTableSize, sizeof (HashtableEntry), t, + StringTable(HashtableBucket* t, int number_of_entries) + : Hashtable((int)StringTableSize, sizeof (HashtableEntry), t, number_of_entries) {} - public: // The string table static StringTable* the_table() { return _the_table; } @@ -250,10 +263,10 @@ public: _the_table = new StringTable(); } - static void create_table(HashtableBucket* t, int length, + static void create_table(HashtableBucket* t, int length, int number_of_entries) { assert(_the_table == NULL, "One string table allowed."); - assert((size_t)length == StringTableSize * sizeof(HashtableBucket), + assert((size_t)length == StringTableSize * sizeof(HashtableBucket), "bad shared string size."); _the_table = new StringTable(t, number_of_entries); } @@ -265,6 +278,14 @@ public: // Invoke "f->do_oop" on the locations of all oops in the table. static void oops_do(OopClosure* f); + // Hashing algorithm, used as the hash value used by the + // StringTable for bucket selection and comparison (stored in the + // HashtableEntry structures). This is used in the String.intern() method. + static unsigned int hash_string(const jchar* s, int len); + + // Internal test. + static void test_alt_hash() PRODUCT_RETURN; + // Probing static oop lookup(Symbol* symbol); @@ -275,17 +296,21 @@ public: // Debugging static void verify(); + static void dump(outputStream* st); // Sharing static void copy_buckets(char** top, char*end) { - the_table()->Hashtable::copy_buckets(top, end); + the_table()->Hashtable::copy_buckets(top, end); } static void copy_table(char** top, char*end) { - the_table()->Hashtable::copy_table(top, end); + the_table()->Hashtable::copy_table(top, end); } static void reverse() { - the_table()->Hashtable::reverse(); + the_table()->Hashtable::reverse(); } -}; + // Rehash the symbol table if it gets out of balance + static void rehash_table(); + static bool needs_rehashing() { return _needs_rehashing; } +}; #endif // SHARE_VM_CLASSFILE_SYMBOLTABLE_HPP diff --git a/hotspot/src/share/vm/classfile/systemDictionary.cpp b/hotspot/src/share/vm/classfile/systemDictionary.cpp index 78c854f3058..aca21742fe6 100644 --- a/hotspot/src/share/vm/classfile/systemDictionary.cpp +++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp @@ -1168,9 +1168,9 @@ klassOop SystemDictionary::resolve_from_stream(Symbol* class_name, } -void SystemDictionary::set_shared_dictionary(HashtableBucket* t, int length, +void SystemDictionary::set_shared_dictionary(HashtableBucket* t, int length, int number_of_entries) { - assert(length == _nof_buckets * sizeof(HashtableBucket), + assert(length == _nof_buckets * sizeof(HashtableBucket), "bad shared dictionary size."); _shared_dictionary = new Dictionary(_nof_buckets, t, number_of_entries); } @@ -2771,7 +2771,6 @@ class ClassStatistics: AllStatic { nmethods++; method_size += m->size(); // class loader uses same objArray for empty vectors, so don't count these - if (m->exception_table()->length() != 0) method_size += m->exception_table()->size(); if (m->has_stackmap_table()) { method_size += m->stackmap_data()->size(); } diff --git a/hotspot/src/share/vm/classfile/systemDictionary.hpp b/hotspot/src/share/vm/classfile/systemDictionary.hpp index 72be344383b..7b59f075021 100644 --- a/hotspot/src/share/vm/classfile/systemDictionary.hpp +++ b/hotspot/src/share/vm/classfile/systemDictionary.hpp @@ -32,6 +32,7 @@ #include "runtime/java.hpp" #include "runtime/reflectionUtils.hpp" #include "utilities/hashtable.hpp" +#include "utilities/hashtable.inline.hpp" // The system dictionary stores all loaded classes and maps: // @@ -72,7 +73,7 @@ class Dictionary; class PlaceholderTable; class LoaderConstraintTable; -class HashtableBucket; +template class HashtableBucket; class ResolutionErrorTable; class SymbolPropertyTable; @@ -363,7 +364,7 @@ public: static void copy_buckets(char** top, char* end); static void copy_table(char** top, char* end); static void reverse(); - static void set_shared_dictionary(HashtableBucket* t, int length, + static void set_shared_dictionary(HashtableBucket* t, int length, int number_of_entries); // Printing static void print() PRODUCT_RETURN; diff --git a/hotspot/src/share/vm/classfile/verifier.cpp b/hotspot/src/share/vm/classfile/verifier.cpp index 905456a2bc6..e5badd62cbf 100644 --- a/hotspot/src/share/vm/classfile/verifier.cpp +++ b/hotspot/src/share/vm/classfile/verifier.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1368,47 +1368,48 @@ char* ClassVerifier::generate_code_data(methodHandle m, u4 code_length, TRAPS) { } void ClassVerifier::verify_exception_handler_table(u4 code_length, char* code_data, int& min, int& max, TRAPS) { - typeArrayHandle exhandlers (THREAD, _method->exception_table()); + ExceptionTable exhandlers(_method()); + int exlength = exhandlers.length(); constantPoolHandle cp (THREAD, _method->constants()); - if (exhandlers() != NULL) { - for(int i = 0; i < exhandlers->length();) { - u2 start_pc = exhandlers->int_at(i++); - u2 end_pc = exhandlers->int_at(i++); - u2 handler_pc = exhandlers->int_at(i++); - if (start_pc >= code_length || code_data[start_pc] == 0) { - class_format_error("Illegal exception table start_pc %d", start_pc); - return; - } - if (end_pc != code_length) { // special case: end_pc == code_length - if (end_pc > code_length || code_data[end_pc] == 0) { - class_format_error("Illegal exception table end_pc %d", end_pc); - return; - } - } - if (handler_pc >= code_length || code_data[handler_pc] == 0) { - class_format_error("Illegal exception table handler_pc %d", handler_pc); - return; - } - int catch_type_index = exhandlers->int_at(i++); - if (catch_type_index != 0) { - VerificationType catch_type = cp_index_to_type( - catch_type_index, cp, CHECK_VERIFY(this)); - VerificationType throwable = - VerificationType::reference_type(vmSymbols::java_lang_Throwable()); - bool is_subclass = throwable.is_assignable_from( - catch_type, this, CHECK_VERIFY(this)); - if (!is_subclass) { - // 4286534: should throw VerifyError according to recent spec change - verify_error( - "Catch type is not a subclass of Throwable in handler %d", - handler_pc); - return; - } - } - if (start_pc < min) min = start_pc; - if (end_pc > max) max = end_pc; + for(int i = 0; i < exlength; i++) { + //reacquire the table in case a GC happened + ExceptionTable exhandlers(_method()); + u2 start_pc = exhandlers.start_pc(i); + u2 end_pc = exhandlers.end_pc(i); + u2 handler_pc = exhandlers.handler_pc(i); + if (start_pc >= code_length || code_data[start_pc] == 0) { + class_format_error("Illegal exception table start_pc %d", start_pc); + return; } + if (end_pc != code_length) { // special case: end_pc == code_length + if (end_pc > code_length || code_data[end_pc] == 0) { + class_format_error("Illegal exception table end_pc %d", end_pc); + return; + } + } + if (handler_pc >= code_length || code_data[handler_pc] == 0) { + class_format_error("Illegal exception table handler_pc %d", handler_pc); + return; + } + int catch_type_index = exhandlers.catch_type_index(i); + if (catch_type_index != 0) { + VerificationType catch_type = cp_index_to_type( + catch_type_index, cp, CHECK_VERIFY(this)); + VerificationType throwable = + VerificationType::reference_type(vmSymbols::java_lang_Throwable()); + bool is_subclass = throwable.is_assignable_from( + catch_type, this, CHECK_VERIFY(this)); + if (!is_subclass) { + // 4286534: should throw VerifyError according to recent spec change + verify_error( + "Catch type is not a subclass of Throwable in handler %d", + handler_pc); + return; + } + } + if (start_pc < min) min = start_pc; + if (end_pc > max) max = end_pc; } } @@ -1474,35 +1475,36 @@ u2 ClassVerifier::verify_stackmap_table(u2 stackmap_index, u2 bci, void ClassVerifier::verify_exception_handler_targets(u2 bci, bool this_uninit, StackMapFrame* current_frame, StackMapTable* stackmap_table, TRAPS) { constantPoolHandle cp (THREAD, _method->constants()); - typeArrayHandle exhandlers (THREAD, _method->exception_table()); - if (exhandlers() != NULL) { - for(int i = 0; i < exhandlers->length();) { - u2 start_pc = exhandlers->int_at(i++); - u2 end_pc = exhandlers->int_at(i++); - u2 handler_pc = exhandlers->int_at(i++); - int catch_type_index = exhandlers->int_at(i++); - if(bci >= start_pc && bci < end_pc) { - u1 flags = current_frame->flags(); - if (this_uninit) { flags |= FLAG_THIS_UNINIT; } - StackMapFrame* new_frame = current_frame->frame_in_exception_handler(flags); - if (catch_type_index != 0) { - // We know that this index refers to a subclass of Throwable - VerificationType catch_type = cp_index_to_type( - catch_type_index, cp, CHECK_VERIFY(this)); - new_frame->push_stack(catch_type, CHECK_VERIFY(this)); - } else { - VerificationType throwable = - VerificationType::reference_type(vmSymbols::java_lang_Throwable()); - new_frame->push_stack(throwable, CHECK_VERIFY(this)); - } - bool match = stackmap_table->match_stackmap( - new_frame, handler_pc, true, false, CHECK_VERIFY(this)); - if (!match) { - verify_error(bci, - "Stack map does not match the one at exception handler %d", - handler_pc); - return; - } + ExceptionTable exhandlers(_method()); + int exlength = exhandlers.length(); + for(int i = 0; i < exlength; i++) { + //reacquire the table in case a GC happened + ExceptionTable exhandlers(_method()); + u2 start_pc = exhandlers.start_pc(i); + u2 end_pc = exhandlers.end_pc(i); + u2 handler_pc = exhandlers.handler_pc(i); + int catch_type_index = exhandlers.catch_type_index(i); + if(bci >= start_pc && bci < end_pc) { + u1 flags = current_frame->flags(); + if (this_uninit) { flags |= FLAG_THIS_UNINIT; } + StackMapFrame* new_frame = current_frame->frame_in_exception_handler(flags); + if (catch_type_index != 0) { + // We know that this index refers to a subclass of Throwable + VerificationType catch_type = cp_index_to_type( + catch_type_index, cp, CHECK_VERIFY(this)); + new_frame->push_stack(catch_type, CHECK_VERIFY(this)); + } else { + VerificationType throwable = + VerificationType::reference_type(vmSymbols::java_lang_Throwable()); + new_frame->push_stack(throwable, CHECK_VERIFY(this)); + } + bool match = stackmap_table->match_stackmap( + new_frame, handler_pc, true, false, CHECK_VERIFY(this)); + if (!match) { + verify_error(bci, + "Stack map does not match the one at exception handler %d", + handler_pc); + return; } } } diff --git a/hotspot/src/share/vm/classfile/vmSymbols.hpp b/hotspot/src/share/vm/classfile/vmSymbols.hpp index 2814b1d3668..6efa393ceac 100644 --- a/hotspot/src/share/vm/classfile/vmSymbols.hpp +++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp @@ -111,6 +111,10 @@ template(getBootClassPathEntryForClass_name, "getBootClassPathEntryForClass") \ template(sun_misc_PostVMInitHook, "sun/misc/PostVMInitHook") \ \ + /* Java runtime version access */ \ + template(sun_misc_Version, "sun/misc/Version") \ + template(java_runtime_name_name, "java_runtime_name") \ + \ /* class file format tags */ \ template(tag_source_file, "SourceFile") \ template(tag_inner_classes, "InnerClasses") \ @@ -253,6 +257,7 @@ template(java_lang_invoke_BoundMethodHandle, "java/lang/invoke/BoundMethodHandle") \ template(java_lang_invoke_DirectMethodHandle, "java/lang/invoke/DirectMethodHandle") \ template(java_lang_invoke_CountingMethodHandle, "java/lang/invoke/CountingMethodHandle") \ + template(java_lang_invoke_ForceInline_signature, "Ljava/lang/invoke/ForceInline;") \ /* internal up-calls made only by the JVM, via class sun.invoke.MethodHandleNatives: */ \ template(findMethodHandleType_name, "findMethodHandleType") \ template(findMethodHandleType_signature, "(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;") \ diff --git a/hotspot/src/share/vm/code/codeBlob.cpp b/hotspot/src/share/vm/code/codeBlob.cpp index 244c32043f3..aa20f1d1bb9 100644 --- a/hotspot/src/share/vm/code/codeBlob.cpp +++ b/hotspot/src/share/vm/code/codeBlob.cpp @@ -144,7 +144,7 @@ void CodeBlob::set_oop_maps(OopMapSet* p) { // chunk of memory, its your job to free it. if (p != NULL) { // We need to allocate a chunk big enough to hold the OopMapSet and all of its OopMaps - _oop_maps = (OopMapSet* )NEW_C_HEAP_ARRAY(unsigned char, p->heap_size()); + _oop_maps = (OopMapSet* )NEW_C_HEAP_ARRAY(unsigned char, p->heap_size(), mtCode); p->copy_to((address)_oop_maps); } else { _oop_maps = NULL; @@ -180,7 +180,7 @@ void CodeBlob::trace_new_stub(CodeBlob* stub, const char* name1, const char* nam void CodeBlob::flush() { if (_oop_maps) { - FREE_C_HEAP_ARRAY(unsigned char, _oop_maps); + FREE_C_HEAP_ARRAY(unsigned char, _oop_maps, mtCode); _oop_maps = NULL; } _comments.free(); diff --git a/hotspot/src/share/vm/code/codeCache.cpp b/hotspot/src/share/vm/code/codeCache.cpp index 8e82aaad056..ffef685f96d 100644 --- a/hotspot/src/share/vm/code/codeCache.cpp +++ b/hotspot/src/share/vm/code/codeCache.cpp @@ -856,7 +856,7 @@ void CodeCache::print_internals() { int bucketSize = 512; int bucketLimit = maxCodeSize / bucketSize + 1; - int *buckets = NEW_C_HEAP_ARRAY(int, bucketLimit); + int *buckets = NEW_C_HEAP_ARRAY(int, bucketLimit, mtCode); memset(buckets,0,sizeof(int) * bucketLimit); for (cb = first(); cb != NULL; cb = next(cb)) { @@ -893,7 +893,7 @@ void CodeCache::print_internals() { } } - FREE_C_HEAP_ARRAY(int, buckets); + FREE_C_HEAP_ARRAY(int, buckets, mtCode); } void CodeCache::print() { diff --git a/hotspot/src/share/vm/code/codeCache.hpp b/hotspot/src/share/vm/code/codeCache.hpp index bdd128e9813..6c97cc79bd1 100644 --- a/hotspot/src/share/vm/code/codeCache.hpp +++ b/hotspot/src/share/vm/code/codeCache.hpp @@ -88,6 +88,9 @@ class CodeCache : AllStatic { // Lookup that does not fail if you lookup a zombie method (if you call this, be sure to know // what you are doing) static CodeBlob* find_blob_unsafe(void* start) { + // NMT can walk the stack before code cache is created + if (_heap == NULL) return NULL; + CodeBlob* result = (CodeBlob*)_heap->find_start(start); // this assert is too strong because the heap code will return the // heapblock containing start. That block can often be larger than diff --git a/hotspot/src/share/vm/code/nmethod.hpp b/hotspot/src/share/vm/code/nmethod.hpp index 33f44a919b5..75e8940aa8e 100644 --- a/hotspot/src/share/vm/code/nmethod.hpp +++ b/hotspot/src/share/vm/code/nmethod.hpp @@ -31,7 +31,7 @@ // This class is used internally by nmethods, to cache // exception/pc/handler information. -class ExceptionCache : public CHeapObj { +class ExceptionCache : public CHeapObj { friend class VMStructs; private: enum { cache_size = 16 }; diff --git a/hotspot/src/share/vm/code/stubs.hpp b/hotspot/src/share/vm/code/stubs.hpp index 328ad8bf76e..afc8f04d46c 100644 --- a/hotspot/src/share/vm/code/stubs.hpp +++ b/hotspot/src/share/vm/code/stubs.hpp @@ -101,7 +101,7 @@ class Stub VALUE_OBJ_CLASS_SPEC { // of the concrete stub (see also macro below). There's exactly // one stub interface instance required per stub queue. -class StubInterface: public CHeapObj { +class StubInterface: public CHeapObj { public: // Initialization/finalization virtual void initialize(Stub* self, int size) = 0; // called after creation (called twice if allocated via (request, commit)) @@ -152,7 +152,7 @@ class StubInterface: public CHeapObj { // A StubQueue maintains a queue of stubs. // Note: All sizes (spaces) are given in bytes. -class StubQueue: public CHeapObj { +class StubQueue: public CHeapObj { friend class VMStructs; private: StubInterface* _stub_interface; // the interface prototype diff --git a/hotspot/src/share/vm/code/vmreg.cpp b/hotspot/src/share/vm/code/vmreg.cpp index dd5945503b2..c56be87f108 100644 --- a/hotspot/src/share/vm/code/vmreg.cpp +++ b/hotspot/src/share/vm/code/vmreg.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "code/vmreg.hpp" // First VMReg value that could refer to a stack slot -VMReg VMRegImpl::stack0 = (VMReg)(intptr_t)((ConcreteRegisterImpl::number_of_registers + 1) & ~1); +VMReg VMRegImpl::stack0 = (VMReg)(intptr_t)((ConcreteRegisterImpl::number_of_registers + 7) & ~7); // VMRegs are 4 bytes wide on all platforms const int VMRegImpl::stack_slot_size = 4; diff --git a/hotspot/src/share/vm/code/vmreg.hpp b/hotspot/src/share/vm/code/vmreg.hpp index d57e6f89bb0..ef2bdce29d4 100644 --- a/hotspot/src/share/vm/code/vmreg.hpp +++ b/hotspot/src/share/vm/code/vmreg.hpp @@ -131,6 +131,10 @@ public: assert((is_reg() && value() < stack0->value() - 1) || is_stack(), "must be"); return (VMReg)(intptr_t)(value() + 1); } + VMReg next(int i) { + assert((is_reg() && value() < stack0->value() - i) || is_stack(), "must be"); + return (VMReg)(intptr_t)(value() + i); + } VMReg prev() { assert((is_stack() && value() > stack0->value()) || (is_reg() && value() != 0), "must be"); return (VMReg)(intptr_t)(value() - 1); diff --git a/hotspot/src/share/vm/compiler/abstractCompiler.hpp b/hotspot/src/share/vm/compiler/abstractCompiler.hpp index 380dfe7bda0..55303a01fad 100644 --- a/hotspot/src/share/vm/compiler/abstractCompiler.hpp +++ b/hotspot/src/share/vm/compiler/abstractCompiler.hpp @@ -29,7 +29,7 @@ typedef void (*initializer)(void); -class AbstractCompiler : public CHeapObj { +class AbstractCompiler : public CHeapObj { private: bool _is_initialized; // Mark whether compiler object is initialized diff --git a/hotspot/src/share/vm/compiler/compileBroker.cpp b/hotspot/src/share/vm/compiler/compileBroker.cpp index 8729e056221..2c2e64b3862 100644 --- a/hotspot/src/share/vm/compiler/compileBroker.cpp +++ b/hotspot/src/share/vm/compiler/compileBroker.cpp @@ -951,7 +951,7 @@ void CompileBroker::init_compiler_threads(int c1_compiler_count, int c2_compiler int compiler_count = c1_compiler_count + c2_compiler_count; _method_threads = - new (ResourceObj::C_HEAP) GrowableArray(compiler_count, true); + new (ResourceObj::C_HEAP, mtCompiler) GrowableArray(compiler_count, true); char name_buffer[256]; for (int i = 0; i < c2_compiler_count; i++) { @@ -1627,7 +1627,7 @@ void CompileBroker::init_compiler_thread_log() { } fp = fopen(fileBuf, "at"); if (fp != NULL) { - file = NEW_C_HEAP_ARRAY(char, strlen(fileBuf)+1); + file = NEW_C_HEAP_ARRAY(char, strlen(fileBuf)+1, mtCompiler); strcpy(file, fileBuf); break; } @@ -1637,7 +1637,7 @@ void CompileBroker::init_compiler_thread_log() { } else { if (LogCompilation && Verbose) tty->print_cr("Opening compilation log %s", file); - CompileLog* log = new(ResourceObj::C_HEAP) CompileLog(file, fp, thread_id); + CompileLog* log = new(ResourceObj::C_HEAP, mtCompiler) CompileLog(file, fp, thread_id); thread->init_log(log); if (xtty != NULL) { diff --git a/hotspot/src/share/vm/compiler/compileBroker.hpp b/hotspot/src/share/vm/compiler/compileBroker.hpp index 1ee2c5419f9..8d28f8c8224 100644 --- a/hotspot/src/share/vm/compiler/compileBroker.hpp +++ b/hotspot/src/share/vm/compiler/compileBroker.hpp @@ -36,7 +36,7 @@ class nmethodLocker; // // An entry in the compile queue. It represents a pending or current // compilation. -class CompileTask : public CHeapObj { +class CompileTask : public CHeapObj { friend class VMStructs; private: @@ -131,7 +131,7 @@ public: // // Per Compiler Performance Counters. // -class CompilerCounters : public CHeapObj { +class CompilerCounters : public CHeapObj { public: enum { @@ -175,7 +175,7 @@ class CompilerCounters : public CHeapObj { // CompileQueue // // A list of CompileTasks. -class CompileQueue : public CHeapObj { +class CompileQueue : public CHeapObj { private: const char* _name; Monitor* _lock; diff --git a/hotspot/src/share/vm/compiler/compileLog.cpp b/hotspot/src/share/vm/compiler/compileLog.cpp index a306117f965..2e0fe86bc47 100644 --- a/hotspot/src/share/vm/compiler/compileLog.cpp +++ b/hotspot/src/share/vm/compiler/compileLog.cpp @@ -37,14 +37,14 @@ CompileLog* CompileLog::_first = NULL; CompileLog::CompileLog(const char* file, FILE* fp, intx thread_id) : _context(_context_buffer, sizeof(_context_buffer)) { - initialize(new(ResourceObj::C_HEAP) fileStream(fp)); + initialize(new(ResourceObj::C_HEAP, mtCompiler) fileStream(fp)); _file = file; _file_end = 0; _thread_id = thread_id; _identities_limit = 0; _identities_capacity = 400; - _identities = NEW_C_HEAP_ARRAY(char, _identities_capacity); + _identities = NEW_C_HEAP_ARRAY(char, _identities_capacity, mtCompiler); // link into the global list { MutexLocker locker(CompileTaskAlloc_lock); @@ -56,7 +56,7 @@ CompileLog::CompileLog(const char* file, FILE* fp, intx thread_id) CompileLog::~CompileLog() { delete _out; _out = NULL; - FREE_C_HEAP_ARRAY(char, _identities); + FREE_C_HEAP_ARRAY(char, _identities, mtCompiler); } @@ -109,7 +109,7 @@ int CompileLog::identify(ciObject* obj) { if (id >= _identities_capacity) { int new_cap = _identities_capacity * 2; if (new_cap <= id) new_cap = id + 100; - _identities = REALLOC_C_HEAP_ARRAY(char, _identities, new_cap); + _identities = REALLOC_C_HEAP_ARRAY(char, _identities, new_cap, mtCompiler); _identities_capacity = new_cap; } while (id >= _identities_limit) { diff --git a/hotspot/src/share/vm/compiler/compilerOracle.cpp b/hotspot/src/share/vm/compiler/compilerOracle.cpp index 07bc969b872..54ebe6ee7af 100644 --- a/hotspot/src/share/vm/compiler/compilerOracle.cpp +++ b/hotspot/src/share/vm/compiler/compilerOracle.cpp @@ -34,7 +34,7 @@ #include "runtime/handles.inline.hpp" #include "runtime/jniHandles.hpp" -class MethodMatcher : public CHeapObj { +class MethodMatcher : public CHeapObj { public: enum Mode { Exact, @@ -550,10 +550,12 @@ void CompilerOracle::parse_from_line(char* line) { } } +static const char* default_cc_file = ".hotspot_compiler"; + static const char* cc_file() { #ifdef ASSERT if (CompileCommandFile == NULL) - return ".hotspot_compiler"; + return default_cc_file; #endif return CompileCommandFile; } @@ -636,10 +638,17 @@ void compilerOracle_init() { CompilerOracle::parse_from_string(CompileOnly, CompilerOracle::parse_compile_only); if (CompilerOracle::has_command_file()) { CompilerOracle::parse_from_file(); + } else { + struct stat buf; + if (os::stat(default_cc_file, &buf) == 0) { + warning("%s file is present but has been ignored. " + "Run with -XX:CompileCommandFile=%s to load the file.", + default_cc_file, default_cc_file); + } } if (lists[PrintCommand] != NULL) { if (PrintAssembly) { - warning("CompileCommand and/or .hotspot_compiler file contains 'print' commands, but PrintAssembly is also enabled"); + warning("CompileCommand and/or %s file contains 'print' commands, but PrintAssembly is also enabled", default_cc_file); } else if (FLAG_IS_DEFAULT(DebugNonSafepoints)) { warning("printing of assembly code is enabled; turning on DebugNonSafepoints to gain additional output"); DebugNonSafepoints = true; diff --git a/hotspot/src/share/vm/compiler/oopMap.cpp b/hotspot/src/share/vm/compiler/oopMap.cpp index 9c1195cecff..2cd212d277f 100644 --- a/hotspot/src/share/vm/compiler/oopMap.cpp +++ b/hotspot/src/share/vm/compiler/oopMap.cpp @@ -599,7 +599,7 @@ void OopMapSet::print_on(outputStream* st) const { #ifdef COMPILER2 -class DerivedPointerEntry : public CHeapObj { +class DerivedPointerEntry : public CHeapObj { private: oop* _location; // Location of derived pointer (also pointing to the base) intptr_t _offset; // Offset from base pointer @@ -621,7 +621,7 @@ void DerivedPointerTable::clear() { assert (!_active, "should not be active"); assert(_list == NULL || _list->length() == 0, "table not empty"); if (_list == NULL) { - _list = new (ResourceObj::C_HEAP) GrowableArray(10, true); // Allocated on C heap + _list = new (ResourceObj::C_HEAP, mtCompiler) GrowableArray(10, true); // Allocated on C heap } _active = true; } diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp index 663b747fd77..3b7bb9aefb4 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp @@ -617,7 +617,7 @@ class CompactibleFreeListSpace: public CompactibleSpace { // A parallel-GC-thread-local allocation buffer for allocation into a // CompactibleFreeListSpace. -class CFLS_LAB : public CHeapObj { +class CFLS_LAB : public CHeapObj { // The space that this buffer allocates into. CompactibleFreeListSpace* _cfls; diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp index 938e94efcff..e8e33ff8f8a 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp @@ -174,7 +174,7 @@ NOT_PRODUCT(CompactibleFreeListSpace* debug_cms_space;) // This struct contains per-thread things necessary to support parallel // young-gen collection. -class CMSParGCThreadState: public CHeapObj { +class CMSParGCThreadState: public CHeapObj { public: CFLS_LAB lab; PromotionInfo promo; @@ -229,7 +229,7 @@ ConcurrentMarkSweepGeneration::ConcurrentMarkSweepGeneration( if (CollectedHeap::use_parallel_gc_threads()) { typedef CMSParGCThreadState* CMSParGCThreadStatePtr; _par_gc_thread_states = - NEW_C_HEAP_ARRAY(CMSParGCThreadStatePtr, ParallelGCThreads); + NEW_C_HEAP_ARRAY(CMSParGCThreadStatePtr, ParallelGCThreads, mtGC); if (_par_gc_thread_states == NULL) { vm_exit_during_initialization("Could not allocate par gc structs"); } @@ -687,7 +687,7 @@ CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, warning("task_queues allocation failure."); return; } - _hash_seed = NEW_C_HEAP_ARRAY(int, num_queues); + _hash_seed = NEW_C_HEAP_ARRAY(int, num_queues, mtGC); if (_hash_seed == NULL) { warning("_hash_seed array allocation failure"); return; @@ -737,7 +737,7 @@ CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, assert(_young_gen != NULL, "no _young_gen"); _eden_chunk_index = 0; _eden_chunk_capacity = (_young_gen->max_capacity()+CMSSamplingGrain)/CMSSamplingGrain; - _eden_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, _eden_chunk_capacity); + _eden_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, _eden_chunk_capacity, mtGC); if (_eden_chunk_array == NULL) { _eden_chunk_capacity = 0; warning("GC/CMS: _eden_chunk_array allocation failure"); @@ -750,35 +750,35 @@ CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, const size_t max_plab_samples = ((DefNewGeneration*)_young_gen)->max_survivor_size()/MinTLABSize; - _survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads); - _survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples); - _cursor = NEW_C_HEAP_ARRAY(size_t, ParallelGCThreads); + _survivor_plab_array = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads, mtGC); + _survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples, mtGC); + _cursor = NEW_C_HEAP_ARRAY(size_t, ParallelGCThreads, mtGC); if (_survivor_plab_array == NULL || _survivor_chunk_array == NULL || _cursor == NULL) { warning("Failed to allocate survivor plab/chunk array"); if (_survivor_plab_array != NULL) { - FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array); + FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array, mtGC); _survivor_plab_array = NULL; } if (_survivor_chunk_array != NULL) { - FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array); + FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array, mtGC); _survivor_chunk_array = NULL; } if (_cursor != NULL) { - FREE_C_HEAP_ARRAY(size_t, _cursor); + FREE_C_HEAP_ARRAY(size_t, _cursor, mtGC); _cursor = NULL; } } else { _survivor_chunk_capacity = 2*max_plab_samples; for (uint i = 0; i < ParallelGCThreads; i++) { - HeapWord** vec = NEW_C_HEAP_ARRAY(HeapWord*, max_plab_samples); + HeapWord** vec = NEW_C_HEAP_ARRAY(HeapWord*, max_plab_samples, mtGC); if (vec == NULL) { warning("Failed to allocate survivor plab array"); for (int j = i; j > 0; j--) { - FREE_C_HEAP_ARRAY(HeapWord*, _survivor_plab_array[j-1].array()); + FREE_C_HEAP_ARRAY(HeapWord*, _survivor_plab_array[j-1].array(), mtGC); } - FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array); - FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array); + FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array, mtGC); + FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array, mtGC); _survivor_plab_array = NULL; _survivor_chunk_array = NULL; _survivor_chunk_capacity = 0; diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp index ecc60cc3ead..3db4f11f785 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp @@ -161,7 +161,7 @@ class CMSBitMap VALUE_OBJ_CLASS_SPEC { // Represents a marking stack used by the CMS collector. // Ideally this should be GrowableArray<> just like MSC's marking stack(s). -class CMSMarkStack: public CHeapObj { +class CMSMarkStack: public CHeapObj { // friend class CMSCollector; // to get at expasion stats further below // @@ -265,7 +265,7 @@ class ModUnionClosurePar: public ModUnionClosure { // Survivor Chunk Array in support of parallelization of // Survivor Space rescan. -class ChunkArray: public CHeapObj { +class ChunkArray: public CHeapObj { size_t _index; size_t _capacity; size_t _overflows; @@ -506,7 +506,7 @@ private: }; -class CMSCollector: public CHeapObj { +class CMSCollector: public CHeapObj { friend class VMStructs; friend class ConcurrentMarkSweepThread; friend class ConcurrentMarkSweepGeneration; @@ -553,8 +553,8 @@ class CMSCollector: public CHeapObj { // The following array-pair keeps track of mark words // displaced for accomodating overflow list above. // This code will likely be revisited under RFE#4922830. - Stack _preserved_oop_stack; - Stack _preserved_mark_stack; + Stack _preserved_oop_stack; + Stack _preserved_mark_stack; int* _hash_seed; diff --git a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp b/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp index e52476586c5..44ee2ad3476 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp @@ -28,7 +28,7 @@ #include "gc_implementation/g1/heapRegion.hpp" #include "utilities/growableArray.hpp" -class CollectionSetChooser: public CHeapObj { +class CollectionSetChooser: public CHeapObj { GrowableArray _regions; diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp index a7b24607064..3eab85e13c8 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ #include "gc_implementation/g1/concurrentG1RefineThread.hpp" #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/g1/g1CollectorPolicy.hpp" +#include "gc_implementation/g1/g1GCPhaseTimes.hpp" #include "gc_implementation/g1/g1RemSet.hpp" #include "gc_implementation/g1/heapRegionSeq.inline.hpp" #include "memory/space.inline.hpp" @@ -79,7 +80,7 @@ ConcurrentG1Refine::ConcurrentG1Refine() : _n_threads = _n_worker_threads + 1; reset_threshold_step(); - _threads = NEW_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _n_threads); + _threads = NEW_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _n_threads, mtGC); int worker_id_offset = (int)DirtyCardQueueSet::num_par_ids(); ConcurrentG1RefineThread *next = NULL; for (int i = _n_threads - 1; i >= 0; i--) { @@ -157,7 +158,7 @@ void ConcurrentG1Refine::init() { _def_use_cache = true; _use_cache = true; _hot_cache_size = (1 << G1ConcRSLogCacheSize); - _hot_cache = NEW_C_HEAP_ARRAY(jbyte*, _hot_cache_size); + _hot_cache = NEW_C_HEAP_ARRAY(jbyte*, _hot_cache_size, mtGC); _n_hot = 0; _hot_cache_idx = 0; @@ -191,18 +192,18 @@ ConcurrentG1Refine::~ConcurrentG1Refine() { // Please see the comment in allocate_card_count_cache // for why we call os::malloc() and os::free() directly. assert(_card_counts != NULL, "Logic"); - os::free(_card_counts); + os::free(_card_counts, mtGC); assert(_card_epochs != NULL, "Logic"); - os::free(_card_epochs); + os::free(_card_epochs, mtGC); assert(_hot_cache != NULL, "Logic"); - FREE_C_HEAP_ARRAY(jbyte*, _hot_cache); + FREE_C_HEAP_ARRAY(jbyte*, _hot_cache, mtGC); } if (_threads != NULL) { for (int i = 0; i < _n_threads; i++) { delete _threads[i]; } - FREE_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _threads); + FREE_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _threads, mtGC); } } @@ -436,17 +437,17 @@ bool ConcurrentG1Refine::allocate_card_count_cache(size_t n, size_t counts_size = n * sizeof(CardCountCacheEntry); size_t epochs_size = n * sizeof(CardEpochCacheEntry); - *counts = (CardCountCacheEntry*) os::malloc(counts_size); + *counts = (CardCountCacheEntry*) os::malloc(counts_size, mtGC); if (*counts == NULL) { // allocation was unsuccessful return false; } - *epochs = (CardEpochCacheEntry*) os::malloc(epochs_size); + *epochs = (CardEpochCacheEntry*) os::malloc(epochs_size, mtGC); if (*epochs == NULL) { // allocation was unsuccessful - free counts array assert(*counts != NULL, "must be"); - os::free(*counts); + os::free(*counts, mtGC); *counts = NULL; return false; } @@ -479,8 +480,8 @@ bool ConcurrentG1Refine::expand_card_count_cache(int cache_size_idx) { // Allocation was successful. // We can just free the old arrays; we're // not interested in preserving the contents - if (_card_counts != NULL) os::free(_card_counts); - if (_card_epochs != NULL) os::free(_card_epochs); + if (_card_counts != NULL) os::free(_card_counts, mtGC); + if (_card_epochs != NULL) os::free(_card_epochs, mtGC); // Cache the size of the arrays and the index that got us there. _n_card_counts = cache_size; @@ -500,11 +501,11 @@ bool ConcurrentG1Refine::expand_card_count_cache(int cache_size_idx) { } void ConcurrentG1Refine::clear_and_record_card_counts() { - if (G1ConcRSLogCacheSize == 0) return; + if (G1ConcRSLogCacheSize == 0) { + return; + } -#ifndef PRODUCT double start = os::elapsedTime(); -#endif if (_expand_card_counts) { int new_idx = _cache_size_index + 1; @@ -523,11 +524,8 @@ void ConcurrentG1Refine::clear_and_record_card_counts() { assert((this_epoch+1) <= max_jint, "to many periods"); // Update epoch _n_periods++; - -#ifndef PRODUCT - double elapsed = os::elapsedTime() - start; - _g1h->g1_policy()->record_cc_clear_time(elapsed * 1000.0); -#endif + double cc_clear_time_ms = (os::elapsedTime() - start) * 1000; + _g1h->g1_policy()->phase_times()->record_cc_clear_time_ms(cc_clear_time_ms); } void ConcurrentG1Refine::print_worker_threads_on(outputStream* st) const { diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp index 2379e189f9f..46a7d309cdc 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp @@ -34,7 +34,7 @@ class ConcurrentG1RefineThread; class G1RemSet; -class ConcurrentG1Refine: public CHeapObj { +class ConcurrentG1Refine: public CHeapObj { ConcurrentG1RefineThread** _threads; int _n_threads; int _n_worker_threads; diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp index fd228964f7d..bee66147105 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp @@ -42,6 +42,7 @@ #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" +#include "services/memTracker.hpp" // Concurrent marking bit map wrapper @@ -53,6 +54,8 @@ CMBitMapRO::CMBitMapRO(ReservedSpace rs, int shifter) : ReservedSpace brs(ReservedSpace::allocation_align_size_up( (_bmWordSize >> (_shifter + LogBitsPerByte)) + 1)); + MemTracker::record_virtual_memory_type((address)brs.base(), mtGC); + guarantee(brs.is_reserved(), "couldn't allocate concurrent marking bit map"); // For now we'll just commit all of the bit map up fromt. // Later on we'll try to be more parsimonious with swap. @@ -161,7 +164,7 @@ CMMarkStack::CMMarkStack(ConcurrentMark* cm) : {} void CMMarkStack::allocate(size_t size) { - _base = NEW_C_HEAP_ARRAY(oop, size); + _base = NEW_C_HEAP_ARRAY(oop, size, mtGC); if (_base == NULL) { vm_exit_during_initialization("Failed to allocate CM region mark stack"); } @@ -173,7 +176,7 @@ void CMMarkStack::allocate(size_t size) { CMMarkStack::~CMMarkStack() { if (_base != NULL) { - FREE_C_HEAP_ARRAY(oop, _base); + FREE_C_HEAP_ARRAY(oop, _base, mtGC); } } @@ -480,11 +483,11 @@ ConcurrentMark::ConcurrentMark(ReservedSpace rs, uint max_regions) : _root_regions.init(_g1h, this); - _tasks = NEW_C_HEAP_ARRAY(CMTask*, _max_task_num); - _accum_task_vtime = NEW_C_HEAP_ARRAY(double, _max_task_num); + _tasks = NEW_C_HEAP_ARRAY(CMTask*, _max_task_num, mtGC); + _accum_task_vtime = NEW_C_HEAP_ARRAY(double, _max_task_num, mtGC); - _count_card_bitmaps = NEW_C_HEAP_ARRAY(BitMap, _max_task_num); - _count_marked_bytes = NEW_C_HEAP_ARRAY(size_t*, _max_task_num); + _count_card_bitmaps = NEW_C_HEAP_ARRAY(BitMap, _max_task_num, mtGC); + _count_marked_bytes = NEW_C_HEAP_ARRAY(size_t*, _max_task_num, mtGC); BitMap::idx_t card_bm_size = _card_bm.size(); @@ -496,7 +499,7 @@ ConcurrentMark::ConcurrentMark(ReservedSpace rs, uint max_regions) : _task_queues->register_queue(i, task_queue); _count_card_bitmaps[i] = BitMap(card_bm_size, false); - _count_marked_bytes[i] = NEW_C_HEAP_ARRAY(size_t, (size_t) max_regions); + _count_marked_bytes[i] = NEW_C_HEAP_ARRAY(size_t, (size_t) max_regions, mtGC); _tasks[i] = new CMTask(i, this, _count_marked_bytes[i], @@ -3153,9 +3156,6 @@ bool ConcurrentMark::do_yield_check(uint worker_id) { _g1h->g1_policy()->record_concurrent_pause(); } cmThread()->yield(); - if (worker_id == 0) { - _g1h->g1_policy()->record_concurrent_pause_end(); - } return true; } else { return false; diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp index ac1eff7aa40..c448e34fa2d 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp @@ -30,8 +30,8 @@ class G1CollectedHeap; class CMTask; -typedef GenericTaskQueue CMTaskQueue; -typedef GenericTaskQueueSet CMTaskQueueSet; +typedef GenericTaskQueue CMTaskQueue; +typedef GenericTaskQueueSet CMTaskQueueSet; // Closure used by CM during concurrent reference discovery // and reference processing (during remarking) to determine @@ -343,7 +343,7 @@ public: class ConcurrentMarkThread; -class ConcurrentMark : public CHeapObj { +class ConcurrentMark: public CHeapObj { friend class ConcurrentMarkThread; friend class CMTask; friend class CMBitMapClosure; diff --git a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp b/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp index 88d47dbe16b..7a0b71356f7 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp @@ -32,7 +32,7 @@ class FreeIdSet; // A closure class for processing card table entries. Note that we don't // require these closure objects to be stack-allocated. -class CardTableEntryClosure: public CHeapObj { +class CardTableEntryClosure: public CHeapObj { public: // Process the card whose card table entry is "card_ptr". If returns // "false", terminate the iteration early. diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp index d16685a7ebc..79f28250141 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp @@ -27,6 +27,7 @@ #include "memory/space.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" +#include "services/memTracker.hpp" ////////////////////////////////////////////////////////////////////// // G1BlockOffsetSharedArray @@ -44,6 +45,9 @@ G1BlockOffsetSharedArray::G1BlockOffsetSharedArray(MemRegion reserved, if (!_vs.initialize(rs, 0)) { vm_exit_during_initialization("Could not reserve enough space for heap offset array"); } + + MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); + _offset_array = (u_char*)_vs.low_boundary(); resize(init_word_size); if (TraceBlockOffsetTable) { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp index b6a42c73eba..5621fd27ec8 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.hpp @@ -117,7 +117,7 @@ public: // Here is the shared array type. -class G1BlockOffsetSharedArray: public CHeapObj { +class G1BlockOffsetSharedArray: public CHeapObj { friend class G1BlockOffsetArray; friend class G1BlockOffsetArrayContigSpace; friend class VMStructs; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index fdd82c5c9c6..c865db42883 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -33,6 +33,7 @@ #include "gc_implementation/g1/g1CollectorPolicy.hpp" #include "gc_implementation/g1/g1ErgoVerbose.hpp" #include "gc_implementation/g1/g1EvacFailure.hpp" +#include "gc_implementation/g1/g1GCPhaseTimes.hpp" #include "gc_implementation/g1/g1Log.hpp" #include "gc_implementation/g1/g1MarkSweep.hpp" #include "gc_implementation/g1/g1OopClosures.inline.hpp" @@ -1916,14 +1917,14 @@ G1CollectedHeap::G1CollectedHeap(G1CollectorPolicy* policy_) : assert(n_rem_sets > 0, "Invariant."); HeapRegionRemSetIterator** iter_arr = - NEW_C_HEAP_ARRAY(HeapRegionRemSetIterator*, n_queues); + NEW_C_HEAP_ARRAY(HeapRegionRemSetIterator*, n_queues, mtGC); for (int i = 0; i < n_queues; i++) { iter_arr[i] = new HeapRegionRemSetIterator(); } _rem_set_iterator = iter_arr; - _worker_cset_start_region = NEW_C_HEAP_ARRAY(HeapRegion*, n_queues); - _worker_cset_start_region_time_stamp = NEW_C_HEAP_ARRAY(unsigned int, n_queues); + _worker_cset_start_region = NEW_C_HEAP_ARRAY(HeapRegion*, n_queues, mtGC); + _worker_cset_start_region_time_stamp = NEW_C_HEAP_ARRAY(unsigned int, n_queues, mtGC); for (int i = 0; i < n_queues; i++) { RefToScanQueue* q = new RefToScanQueue(); @@ -2082,7 +2083,7 @@ jint G1CollectedHeap::initialize() { _in_cset_fast_test_length = max_regions(); _in_cset_fast_test_base = - NEW_C_HEAP_ARRAY(bool, (size_t) _in_cset_fast_test_length); + NEW_C_HEAP_ARRAY(bool, (size_t) _in_cset_fast_test_length, mtGC); // We're biasing _in_cset_fast_test to avoid subtracting the // beginning of the heap every time we want to index; basically @@ -2274,7 +2275,7 @@ void G1CollectedHeap::iterate_dirty_card_closure(CardTableEntryClosure* cl, while (dcqs.apply_closure_to_completed_buffer(cl, worker_i, 0, true)) { n_completed_buffers++; } - g1_policy()->record_update_rs_processed_buffers(worker_i, + g1_policy()->phase_times()->record_update_rs_processed_buffers(worker_i, (double) n_completed_buffers); dcqs.clear_n_completed_buffers(); assert(!dcqs.completed_buffers_exist_dirty(), "Completed buffers exist!"); @@ -3505,7 +3506,7 @@ void G1CollectedHeap::setup_surviving_young_words() { assert(_surviving_young_words == NULL, "pre-condition"); uint array_length = g1_policy()->young_cset_region_length(); - _surviving_young_words = NEW_C_HEAP_ARRAY(size_t, (size_t) array_length); + _surviving_young_words = NEW_C_HEAP_ARRAY(size_t, (size_t) array_length, mtGC); if (_surviving_young_words == NULL) { vm_exit_out_of_memory(sizeof(size_t) * array_length, "Not enough space for young surv words summary."); @@ -3530,7 +3531,7 @@ G1CollectedHeap::update_surviving_young_words(size_t* surv_young_words) { void G1CollectedHeap::cleanup_surviving_young_words() { guarantee( _surviving_young_words != NULL, "pre-condition" ); - FREE_C_HEAP_ARRAY(size_t, _surviving_young_words); + FREE_C_HEAP_ARRAY(size_t, _surviving_young_words, mtGC); _surviving_young_words = NULL; } @@ -3633,10 +3634,10 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { gclog_or_tty->date_stamp(G1Log::fine() && PrintGCDateStamps); TraceCPUTime tcpu(G1Log::finer(), true, gclog_or_tty); - GCCauseString gc_cause_str = GCCauseString("GC pause", gc_cause()) - .append(g1_policy()->gcs_are_young() ? " (young)" : " (mixed)") - .append(g1_policy()->during_initial_mark_pause() ? " (initial-mark)" : ""); - TraceTime t(gc_cause_str, G1Log::fine() && !G1Log::finer(), true, gclog_or_tty); + int active_workers = (G1CollectedHeap::use_parallel_gc_threads() ? + workers()->active_workers() : 1); + g1_policy()->phase_times()->note_gc_start(os::elapsedTime(), active_workers, + g1_policy()->gcs_are_young(), g1_policy()->during_initial_mark_pause(), gc_cause()); TraceCollectorStats tcs(g1mm()->incremental_collection_counters()); TraceMemoryManagerStats tms(false /* fullGC */, gc_cause()); @@ -3699,9 +3700,15 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { // before the start GC event. _hr_printer.start_gc(false /* full */, (size_t) total_collections()); + // This timing is only used by the ergonomics to handle our pause target. + // It is unclear why this should not include the full pause. We will + // investigate this in CR 7178365. + // + // Preserving the old comment here if that helps the investigation: + // // The elapsed time induced by the start time below deliberately elides // the possible verification above. - double start_time_sec = os::elapsedTime(); + double sample_start_time_sec = os::elapsedTime(); size_t start_used_bytes = used(); #if YOUNG_LIST_VERBOSE @@ -3710,7 +3717,7 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { g1_policy()->print_collection_set(g1_policy()->inc_cset_head(), gclog_or_tty); #endif // YOUNG_LIST_VERBOSE - g1_policy()->record_collection_pause_start(start_time_sec, + g1_policy()->record_collection_pause_start(sample_start_time_sec, start_used_bytes); double scan_wait_start = os::elapsedTime(); @@ -3719,11 +3726,12 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { // objects on them have been correctly scanned before we start // moving them during the GC. bool waited = _cm->root_regions()->wait_until_scan_finished(); + double wait_time_ms = 0.0; if (waited) { double scan_wait_end = os::elapsedTime(); - double wait_time_ms = (scan_wait_end - scan_wait_start) * 1000.0; - g1_policy()->record_root_region_scan_wait_time(wait_time_ms); + wait_time_ms = (scan_wait_end - scan_wait_start) * 1000.0; } + g1_policy()->phase_times()->record_root_region_scan_wait_time(wait_time_ms); #if YOUNG_LIST_VERBOSE gclog_or_tty->print_cr("\nAfter recording pause start.\nYoung_list:"); @@ -3877,12 +3885,16 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { true /* verify_fingers */); _cm->note_end_of_gc(); - double end_time_sec = os::elapsedTime(); - double pause_time_ms = (end_time_sec - start_time_sec) * MILLIUNITS; - g1_policy()->record_pause_time_ms(pause_time_ms); - int active_workers = (G1CollectedHeap::use_parallel_gc_threads() ? - workers()->active_workers() : 1); - g1_policy()->record_collection_pause_end(active_workers); + // Collect thread local data to allow the ergonomics to use + // the collected information + g1_policy()->phase_times()->collapse_par_times(); + + // This timing is only used by the ergonomics to handle our pause target. + // It is unclear why this should not include the full pause. We will + // investigate this in CR 7178365. + double sample_end_time_sec = os::elapsedTime(); + double pause_time_ms = (sample_end_time_sec - sample_start_time_sec) * MILLIUNITS; + g1_policy()->record_collection_pause_end(pause_time_ms); MemoryService::track_memory_usage(); @@ -3929,9 +3941,6 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { // RETIRE events are generated before the end GC event. _hr_printer.end_gc(false /* full */, (size_t) total_collections()); - // We have to do this after we decide whether to expand the heap or not. - g1_policy()->print_heap_transition(); - if (mark_in_progress()) { concurrent_mark()->update_g1_committed(); } @@ -3941,13 +3950,14 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { #endif gc_epilogue(false); + + g1_policy()->phase_times()->note_gc_end(os::elapsedTime()); + + // We have to do this after we decide whether to expand the heap or not. + g1_policy()->print_heap_transition(); } - // The closing of the inner scope, immediately above, will complete - // logging at the "fine" level. The record_collection_pause_end() call - // above will complete logging at the "finer" level. - // - // It is not yet to safe, however, to tell the concurrent mark to + // It is not yet to safe to tell the concurrent mark to // start as we have some optional output below. We don't want the // output from the concurrent mark thread interfering with this // logging output either. @@ -4073,7 +4083,7 @@ void G1CollectedHeap::abandon_gc_alloc_regions() { void G1CollectedHeap::init_for_evac_failure(OopsInHeapRegionClosure* cl) { _drain_in_progress = false; set_evac_failure_closure(cl); - _evac_failure_scan_stack = new (ResourceObj::C_HEAP) GrowableArray(40, true); + _evac_failure_scan_stack = new (ResourceObj::C_HEAP, mtGC) GrowableArray(40, true); } void G1CollectedHeap::finalize_for_evac_failure() { @@ -4207,9 +4217,9 @@ void G1CollectedHeap::preserve_mark_if_necessary(oop obj, markOop m) { if (_objs_with_preserved_marks == NULL) { assert(_preserved_marks_of_objs == NULL, "Both or none."); _objs_with_preserved_marks = - new (ResourceObj::C_HEAP) GrowableArray(40, true); + new (ResourceObj::C_HEAP, mtGC) GrowableArray(40, true); _preserved_marks_of_objs = - new (ResourceObj::C_HEAP) GrowableArray(40, true); + new (ResourceObj::C_HEAP, mtGC) GrowableArray(40, true); } _objs_with_preserved_marks->push(obj); _preserved_marks_of_objs->push(m); @@ -4269,7 +4279,7 @@ G1ParScanThreadState::G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num) uint array_length = PADDING_ELEM_NUM + real_length + PADDING_ELEM_NUM; - _surviving_young_words_base = NEW_C_HEAP_ARRAY(size_t, array_length); + _surviving_young_words_base = NEW_C_HEAP_ARRAY(size_t, array_length, mtGC); if (_surviving_young_words_base == NULL) vm_exit_out_of_memory(array_length * sizeof(size_t), "Not enough space for young surv histo."); @@ -4695,7 +4705,7 @@ public: if (worker_id >= _n_workers) return; // no work needed this round double start_time_ms = os::elapsedTime() * 1000.0; - _g1h->g1_policy()->record_gc_worker_start_time(worker_id, start_time_ms); + _g1h->g1_policy()->phase_times()->record_gc_worker_start_time(worker_id, start_time_ms); { ResourceMark rm; @@ -4744,15 +4754,12 @@ public: evac.do_void(); double elapsed_ms = (os::elapsedTime()-start)*1000.0; double term_ms = pss.term_time()*1000.0; - _g1h->g1_policy()->record_obj_copy_time(worker_id, elapsed_ms-term_ms); - _g1h->g1_policy()->record_termination(worker_id, term_ms, pss.term_attempts()); + _g1h->g1_policy()->phase_times()->record_obj_copy_time(worker_id, elapsed_ms-term_ms); + _g1h->g1_policy()->phase_times()->record_termination(worker_id, term_ms, pss.term_attempts()); } _g1h->g1_policy()->record_thread_age_table(pss.age_table()); _g1h->update_surviving_young_words(pss.surviving_young_words()+1); - // Clean up any par-expanded rem sets. - HeapRegionRemSet::par_cleanup(); - if (ParallelGCVerbose) { MutexLocker x(stats_lock()); pss.print_termination_stats(worker_id); @@ -4766,7 +4773,7 @@ public: } double end_time_ms = os::elapsedTime() * 1000.0; - _g1h->g1_policy()->record_gc_worker_end_time(worker_id, end_time_ms); + _g1h->g1_policy()->phase_times()->record_gc_worker_end_time(worker_id, end_time_ms); } }; @@ -4877,15 +4884,15 @@ g1_process_strong_roots(bool collecting_perm_gen, double ext_roots_end = os::elapsedTime(); - g1_policy()->reset_obj_copy_time(worker_i); + g1_policy()->phase_times()->reset_obj_copy_time(worker_i); double obj_copy_time_sec = buf_scan_perm.closure_app_seconds() + buf_scan_non_heap_roots.closure_app_seconds(); - g1_policy()->record_obj_copy_time(worker_i, obj_copy_time_sec * 1000.0); + g1_policy()->phase_times()->record_obj_copy_time(worker_i, obj_copy_time_sec * 1000.0); double ext_root_time_ms = ((ext_roots_end - ext_roots_start) - obj_copy_time_sec) * 1000.0; - g1_policy()->record_ext_root_scan_time(worker_i, ext_root_time_ms); + g1_policy()->phase_times()->record_ext_root_scan_time(worker_i, ext_root_time_ms); // During conc marking we have to filter the per-thread SATB buffers // to make sure we remove any oops into the CSet (which will show up @@ -4896,7 +4903,7 @@ g1_process_strong_roots(bool collecting_perm_gen, } } double satb_filtering_ms = (os::elapsedTime() - ext_roots_end) * 1000.0; - g1_policy()->record_satb_filtering_time(worker_i, satb_filtering_ms); + g1_policy()->phase_times()->record_satb_filtering_time(worker_i, satb_filtering_ms); // Now scan the complement of the collection set. if (scan_rs != NULL) { @@ -5396,7 +5403,7 @@ void G1CollectedHeap::process_discovered_references() { assert(pss.refs()->is_empty(), "both queue and overflow should be empty"); double ref_proc_time = os::elapsedTime() - ref_proc_start; - g1_policy()->record_ref_proc_time(ref_proc_time * 1000.0); + g1_policy()->phase_times()->record_ref_proc_time(ref_proc_time * 1000.0); } // Weak Reference processing during an evacuation pause (part 2). @@ -5433,7 +5440,7 @@ void G1CollectedHeap::enqueue_discovered_references() { // and could signicantly increase the pause time. double ref_enq_time = os::elapsedTime() - ref_enq_start; - g1_policy()->record_ref_enq_time(ref_enq_time * 1000.0); + g1_policy()->phase_times()->record_ref_enq_time(ref_enq_time * 1000.0); } void G1CollectedHeap::evacuate_collection_set() { @@ -5496,11 +5503,11 @@ void G1CollectedHeap::evacuate_collection_set() { } double par_time_ms = (end_par_time_sec - start_par_time_sec) * 1000.0; - g1_policy()->record_par_time(par_time_ms); + g1_policy()->phase_times()->record_par_time(par_time_ms); double code_root_fixup_time_ms = (os::elapsedTime() - end_par_time_sec) * 1000.0; - g1_policy()->record_code_root_fixup_time(code_root_fixup_time_ms); + g1_policy()->phase_times()->record_code_root_fixup_time(code_root_fixup_time_ms); set_par_threads(0); @@ -5762,7 +5769,7 @@ void G1CollectedHeap::cleanUpCardTable() { } double elapsed = os::elapsedTime() - start; - g1_policy()->record_clear_ct_time(elapsed * 1000.0); + g1_policy()->phase_times()->record_clear_ct_time(elapsed * 1000.0); } void G1CollectedHeap::free_collection_set(HeapRegion* cs_head) { @@ -5871,8 +5878,8 @@ void G1CollectedHeap::free_collection_set(HeapRegion* cs_head) { NULL /* old_proxy_set */, NULL /* humongous_proxy_set */, false /* par */); - policy->record_young_free_cset_time_ms(young_time_ms); - policy->record_non_young_free_cset_time_ms(non_young_time_ms); + policy->phase_times()->record_young_free_cset_time_ms(young_time_ms); + policy->phase_times()->record_non_young_free_cset_time_ms(non_young_time_ms); } // This routine is similar to the above but does not record diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp index d3f5382d03a..611cdd0b5ca 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp @@ -62,8 +62,8 @@ class ConcurrentMarkThread; class ConcurrentG1Refine; class GenerationCounters; -typedef OverflowTaskQueue RefToScanQueue; -typedef GenericTaskQueueSet RefToScanQueueSet; +typedef OverflowTaskQueue RefToScanQueue; +typedef GenericTaskQueueSet RefToScanQueueSet; typedef int RegionIdx_t; // needs to hold [ 0..max_regions() ) typedef int CardIdx_t; // needs to hold [ 0..CardsPerRegion ) @@ -74,7 +74,7 @@ enum GCAllocPurpose { GCAllocPurposeCount }; -class YoungList : public CHeapObj { +class YoungList : public CHeapObj { private: G1CollectedHeap* _g1h; @@ -1772,7 +1772,7 @@ public: G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num); ~G1ParScanThreadState() { - FREE_C_HEAP_ARRAY(size_t, _surviving_young_words_base); + FREE_C_HEAP_ARRAY(size_t, _surviving_young_words_base, mtGC); } RefToScanQueue* refs() { return _refs; } diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp index b91d04a0915..f07b14824d0 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp @@ -29,6 +29,7 @@ #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/g1/g1CollectorPolicy.hpp" #include "gc_implementation/g1/g1ErgoVerbose.hpp" +#include "gc_implementation/g1/g1GCPhaseTimes.hpp" #include "gc_implementation/g1/g1Log.hpp" #include "gc_implementation/g1/heapRegionRemSet.hpp" #include "gc_implementation/shared/gcPolicyCounters.hpp" @@ -77,57 +78,6 @@ static double non_young_other_cost_per_region_ms_defaults[] = { 1.0, 0.7, 0.7, 0.5, 0.5, 0.42, 0.42, 0.30 }; -// Help class for avoiding interleaved logging -class LineBuffer: public StackObj { - -private: - static const int BUFFER_LEN = 1024; - static const int INDENT_CHARS = 3; - char _buffer[BUFFER_LEN]; - int _indent_level; - int _cur; - - void vappend(const char* format, va_list ap) { - int res = vsnprintf(&_buffer[_cur], BUFFER_LEN - _cur, format, ap); - if (res != -1) { - _cur += res; - } else { - DEBUG_ONLY(warning("buffer too small in LineBuffer");) - _buffer[BUFFER_LEN -1] = 0; - _cur = BUFFER_LEN; // vsnprintf above should not add to _buffer if we are called again - } - } - -public: - explicit LineBuffer(int indent_level): _indent_level(indent_level), _cur(0) { - for (; (_cur < BUFFER_LEN && _cur < (_indent_level * INDENT_CHARS)); _cur++) { - _buffer[_cur] = ' '; - } - } - -#ifndef PRODUCT - ~LineBuffer() { - assert(_cur == _indent_level * INDENT_CHARS, "pending data in buffer - append_and_print_cr() not called?"); - } -#endif - - void append(const char* format, ...) { - va_list ap; - va_start(ap, format); - vappend(format, ap); - va_end(ap); - } - - void append_and_print_cr(const char* format, ...) { - va_list ap; - va_start(ap, format); - vappend(format, ap); - va_end(ap); - gclog_or_tty->print_cr("%s", _buffer); - _cur = _indent_level * INDENT_CHARS; - } -}; - G1CollectorPolicy::G1CollectorPolicy() : _parallel_gc_threads(G1CollectedHeap::use_parallel_gc_threads() ? ParallelGCThreads : 1), @@ -135,20 +85,6 @@ G1CollectorPolicy::G1CollectorPolicy() : _recent_gc_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)), _stop_world_start(0.0), - _cur_clear_ct_time_ms(0.0), - _root_region_scan_wait_time_ms(0.0), - - _cur_ref_proc_time_ms(0.0), - _cur_ref_enq_time_ms(0.0), - -#ifndef PRODUCT - _min_clear_cc_time_ms(-1.0), - _max_clear_cc_time_ms(-1.0), - _cur_clear_cc_time_ms(0.0), - _cum_clear_cc_time_ms(0.0), - _num_cc_clears(0L), -#endif - _concurrent_mark_remark_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)), _concurrent_mark_cleanup_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)), @@ -257,30 +193,9 @@ G1CollectorPolicy::G1CollectorPolicy() : _recent_prev_end_times_for_all_gcs_sec->add(os::elapsedTime()); _prev_collection_pause_end_ms = os::elapsedTime() * 1000.0; - _par_last_gc_worker_start_times_ms = new double[_parallel_gc_threads]; - _par_last_ext_root_scan_times_ms = new double[_parallel_gc_threads]; - _par_last_satb_filtering_times_ms = new double[_parallel_gc_threads]; + _phase_times = new G1GCPhaseTimes(_parallel_gc_threads); - _par_last_update_rs_times_ms = new double[_parallel_gc_threads]; - _par_last_update_rs_processed_buffers = new double[_parallel_gc_threads]; - - _par_last_scan_rs_times_ms = new double[_parallel_gc_threads]; - - _par_last_obj_copy_times_ms = new double[_parallel_gc_threads]; - - _par_last_termination_times_ms = new double[_parallel_gc_threads]; - _par_last_termination_attempts = new double[_parallel_gc_threads]; - _par_last_gc_worker_end_times_ms = new double[_parallel_gc_threads]; - _par_last_gc_worker_times_ms = new double[_parallel_gc_threads]; - _par_last_gc_worker_other_times_ms = new double[_parallel_gc_threads]; - - int index; - if (ParallelGCThreads == 0) - index = 0; - else if (ParallelGCThreads > 8) - index = 7; - else - index = ParallelGCThreads - 1; + int index = MIN2(_parallel_gc_threads - 1, 7); _pending_card_diff_seq->add(0.0); _rs_length_diff_seq->add(rs_length_diff_defaults[index]); @@ -824,7 +739,7 @@ G1CollectorPolicy::verify_young_ages(HeapRegion* head, #endif // PRODUCT void G1CollectorPolicy::record_full_collection_start() { - _cur_collection_start_sec = os::elapsedTime(); + _full_collection_start_sec = os::elapsedTime(); // Release the future to-space so that it is available for compaction into. _g1->set_full_collection(); } @@ -833,7 +748,7 @@ void G1CollectorPolicy::record_full_collection_end() { // Consider this like a collection pause for the purposes of allocation // since last pause. double end_sec = os::elapsedTime(); - double full_gc_time_sec = end_sec - _cur_collection_start_sec; + double full_gc_time_sec = end_sec - _full_collection_start_sec; double full_gc_time_ms = full_gc_time_sec * 1000.0; _trace_gen1_time_data.record_full_collection(full_gc_time_ms); @@ -869,12 +784,6 @@ void G1CollectorPolicy::record_stop_world_start() { void G1CollectorPolicy::record_collection_pause_start(double start_time_sec, size_t start_used) { - if (G1Log::finer()) { - gclog_or_tty->stamp(PrintGCTimeStamps); - gclog_or_tty->print("[%s", (const char*)GCCauseString("GC pause", _g1->gc_cause()) - .append(gcs_are_young() ? " (young)" : " (mixed)")); - } - // We only need to do this here as the policy will only be applied // to the GC we're about to start. so, no point is calculating this // every time we calculate / recalculate the target young length. @@ -888,7 +797,7 @@ void G1CollectorPolicy::record_collection_pause_start(double start_time_sec, _trace_gen0_time_data.record_start_collection(s_w_t_ms); _stop_world_start = 0.0; - _cur_collection_start_sec = start_time_sec; + phase_times()->_cur_collection_start_sec = start_time_sec; _cur_collection_pause_used_at_start_bytes = start_used; _cur_collection_pause_used_regions_at_start = _g1->used_regions(); _pending_cards = _g1->pending_card_num(); @@ -902,30 +811,6 @@ void G1CollectorPolicy::record_collection_pause_start(double start_time_sec, _survivor_bytes_before_gc = young_list->survivor_used_bytes(); _capacity_before_gc = _g1->capacity(); -#ifdef DEBUG - // initialise these to something well known so that we can spot - // if they are not set properly - - for (int i = 0; i < _parallel_gc_threads; ++i) { - _par_last_gc_worker_start_times_ms[i] = -1234.0; - _par_last_ext_root_scan_times_ms[i] = -1234.0; - _par_last_satb_filtering_times_ms[i] = -1234.0; - _par_last_update_rs_times_ms[i] = -1234.0; - _par_last_update_rs_processed_buffers[i] = -1234.0; - _par_last_scan_rs_times_ms[i] = -1234.0; - _par_last_obj_copy_times_ms[i] = -1234.0; - _par_last_termination_times_ms[i] = -1234.0; - _par_last_termination_attempts[i] = -1234.0; - _par_last_gc_worker_end_times_ms[i] = -1234.0; - _par_last_gc_worker_times_ms[i] = -1234.0; - _par_last_gc_worker_other_times_ms[i] = -1234.0; - } -#endif - - // This is initialized to zero here and is set during the evacuation - // pause if we actually waited for the root region scanning to finish. - _root_region_scan_wait_time_ms = 0.0; - _last_gc_was_young = false; // do that for any other surv rate groups @@ -974,127 +859,6 @@ void G1CollectorPolicy::record_concurrent_pause() { } } -void G1CollectorPolicy::record_concurrent_pause_end() { -} - -template -T sum_of(T* sum_arr, int start, int n, int N) { - T sum = (T)0; - for (int i = 0; i < n; i++) { - int j = (start + i) % N; - sum += sum_arr[j]; - } - return sum; -} - -void G1CollectorPolicy::print_par_stats(int level, - const char* str, - double* data, - bool showDecimals) { - double min = data[0], max = data[0]; - double total = 0.0; - LineBuffer buf(level); - buf.append("[%s (ms):", str); - for (uint i = 0; i < no_of_gc_threads(); ++i) { - double val = data[i]; - if (val < min) - min = val; - if (val > max) - max = val; - total += val; - if (G1Log::finest()) { - if (showDecimals) { - buf.append(" %.1lf", val); - } else { - buf.append(" %d", (int)val); - } - } - } - - if (G1Log::finest()) { - buf.append_and_print_cr(""); - } - double avg = total / (double) no_of_gc_threads(); - if (showDecimals) { - buf.append_and_print_cr(" Min: %.1lf, Avg: %.1lf, Max: %.1lf, Diff: %.1lf, Sum: %.1lf]", - min, avg, max, max - min, total); - } else { - buf.append_and_print_cr(" Min: %d, Avg: %d, Max: %d, Diff: %d, Sum: %d]", - (int)min, (int)avg, (int)max, (int)max - (int)min, (int)total); - } -} - -void G1CollectorPolicy::print_stats(int level, - const char* str, - double value) { - LineBuffer(level).append_and_print_cr("[%s: %.1lf ms]", str, value); -} - -void G1CollectorPolicy::print_stats(int level, - const char* str, - double value, - int workers) { - LineBuffer(level).append_and_print_cr("[%s: %.1lf ms, GC Workers: %d]", str, value, workers); -} - -void G1CollectorPolicy::print_stats(int level, - const char* str, - int value) { - LineBuffer(level).append_and_print_cr("[%s: %d]", str, value); -} - -double G1CollectorPolicy::avg_value(double* data) { - if (G1CollectedHeap::use_parallel_gc_threads()) { - double ret = 0.0; - for (uint i = 0; i < no_of_gc_threads(); ++i) { - ret += data[i]; - } - return ret / (double) no_of_gc_threads(); - } else { - return data[0]; - } -} - -double G1CollectorPolicy::max_value(double* data) { - if (G1CollectedHeap::use_parallel_gc_threads()) { - double ret = data[0]; - for (uint i = 1; i < no_of_gc_threads(); ++i) { - if (data[i] > ret) { - ret = data[i]; - } - } - return ret; - } else { - return data[0]; - } -} - -double G1CollectorPolicy::sum_of_values(double* data) { - if (G1CollectedHeap::use_parallel_gc_threads()) { - double sum = 0.0; - for (uint i = 0; i < no_of_gc_threads(); i++) { - sum += data[i]; - } - return sum; - } else { - return data[0]; - } -} - -double G1CollectorPolicy::max_sum(double* data1, double* data2) { - double ret = data1[0] + data2[0]; - - if (G1CollectedHeap::use_parallel_gc_threads()) { - for (uint i = 1; i < no_of_gc_threads(); ++i) { - double data = data1[i] + data2[i]; - if (data > ret) { - ret = data; - } - } - } - return ret; -} - bool G1CollectorPolicy::need_to_start_conc_mark(const char* source, size_t alloc_word_size) { if (_g1->concurrent_mark()->cmThread()->during_cycle()) { return false; @@ -1142,10 +906,8 @@ bool G1CollectorPolicy::need_to_start_conc_mark(const char* source, size_t alloc // Anything below that is considered to be zero #define MIN_TIMER_GRANULARITY 0.0000001 -void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { +void G1CollectorPolicy::record_collection_pause_end(double pause_time_ms) { double end_time_sec = os::elapsedTime(); - double elapsed_ms = _last_pause_time_ms; - bool parallel = G1CollectedHeap::use_parallel_gc_threads(); assert(_cur_collection_pause_used_regions_at_start >= cset_region_length(), "otherwise, the subtraction below does not make sense"); size_t rs_size = @@ -1154,7 +916,6 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { assert(cur_used_bytes == _g1->recalculate_used(), "It should!"); bool last_pause_included_initial_mark = false; bool update_stats = !_g1->evacuation_failed(); - set_no_of_gc_threads(no_of_gc_threads); #ifndef PRODUCT if (G1YoungSurvRateVerbose) { @@ -1174,7 +935,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { set_initiate_conc_mark_if_possible(); } - _mmu_tracker->add_pause(end_time_sec - elapsed_ms/1000.0, + _mmu_tracker->add_pause(end_time_sec - pause_time_ms/1000.0, end_time_sec, false); size_t freed_bytes = @@ -1185,58 +946,11 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { (double)surviving_bytes/ (double)_collection_set_bytes_used_before; - // These values are used to update the summary information that is - // displayed when TraceGen0Time is enabled, and are output as part - // of the "finer" output, in the non-parallel case. - - double ext_root_scan_time = avg_value(_par_last_ext_root_scan_times_ms); - double satb_filtering_time = avg_value(_par_last_satb_filtering_times_ms); - double update_rs_time = avg_value(_par_last_update_rs_times_ms); - double update_rs_processed_buffers = - sum_of_values(_par_last_update_rs_processed_buffers); - double scan_rs_time = avg_value(_par_last_scan_rs_times_ms); - double obj_copy_time = avg_value(_par_last_obj_copy_times_ms); - double termination_time = avg_value(_par_last_termination_times_ms); - - double known_time = ext_root_scan_time + - satb_filtering_time + - update_rs_time + - scan_rs_time + - obj_copy_time; - - double other_time_ms = elapsed_ms; - - // Subtract the root region scanning wait time. It's initialized to - // zero at the start of the pause. - other_time_ms -= _root_region_scan_wait_time_ms; - - if (parallel) { - other_time_ms -= _cur_collection_par_time_ms; - } else { - other_time_ms -= known_time; - } - - // Now subtract the time taken to fix up roots in generated code - other_time_ms -= _cur_collection_code_root_fixup_time_ms; - - // Subtract the time taken to clean the card table from the - // current value of "other time" - other_time_ms -= _cur_clear_ct_time_ms; - - // TraceGen0Time and TraceGen1Time summary info updating. - if (update_stats) { - double parallel_known_time = known_time + termination_time; - double parallel_other_time = _cur_collection_par_time_ms - parallel_known_time; - - _trace_gen0_time_data.record_end_collection( - elapsed_ms, other_time_ms, _root_region_scan_wait_time_ms, _cur_collection_par_time_ms, - ext_root_scan_time, satb_filtering_time, update_rs_time, scan_rs_time, obj_copy_time, - termination_time, parallel_other_time, _cur_clear_ct_time_ms); - + _trace_gen0_time_data.record_end_collection(pause_time_ms, phase_times()); // this is where we update the allocation rate of the application double app_time_ms = - (_cur_collection_start_sec * 1000.0 - _prev_collection_pause_end_ms); + (phase_times()->_cur_collection_start_sec * 1000.0 - _prev_collection_pause_end_ms); if (app_time_ms < MIN_TIMER_GRANULARITY) { // This usually happens due to the timer not having the required // granularity. Some Linuxes are the usual culprits. @@ -1257,7 +971,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { double interval_ms = (end_time_sec - _recent_prev_end_times_for_all_gcs_sec->oldest()) * 1000.0; - update_recent_gc_times(end_time_sec, elapsed_ms); + update_recent_gc_times(end_time_sec, pause_time_ms); _recent_avg_pause_time_ratio = _recent_gc_times_ms->sum()/interval_ms; if (recent_avg_pause_time_ratio() < 0.0 || (recent_avg_pause_time_ratio() - 1.0 > 0.0)) { @@ -1284,90 +998,6 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { } } } - - if (G1Log::finer()) { - bool print_marking_info = - _g1->mark_in_progress() && !last_pause_included_initial_mark; - - gclog_or_tty->print_cr("%s, %1.8lf secs]", - (last_pause_included_initial_mark) ? " (initial-mark)" : "", - elapsed_ms / 1000.0); - - if (_root_region_scan_wait_time_ms > 0.0) { - print_stats(1, "Root Region Scan Waiting", _root_region_scan_wait_time_ms); - } - if (parallel) { - print_stats(1, "Parallel Time", _cur_collection_par_time_ms, no_of_gc_threads); - print_par_stats(2, "GC Worker Start", _par_last_gc_worker_start_times_ms); - print_par_stats(2, "Ext Root Scanning", _par_last_ext_root_scan_times_ms); - if (print_marking_info) { - print_par_stats(2, "SATB Filtering", _par_last_satb_filtering_times_ms); - } - print_par_stats(2, "Update RS", _par_last_update_rs_times_ms); - if (G1Log::finest()) { - print_par_stats(3, "Processed Buffers", _par_last_update_rs_processed_buffers, - false /* showDecimals */); - } - print_par_stats(2, "Scan RS", _par_last_scan_rs_times_ms); - print_par_stats(2, "Object Copy", _par_last_obj_copy_times_ms); - print_par_stats(2, "Termination", _par_last_termination_times_ms); - if (G1Log::finest()) { - print_par_stats(3, "Termination Attempts", _par_last_termination_attempts, - false /* showDecimals */); - } - - for (int i = 0; i < _parallel_gc_threads; i++) { - _par_last_gc_worker_times_ms[i] = _par_last_gc_worker_end_times_ms[i] - - _par_last_gc_worker_start_times_ms[i]; - - double worker_known_time = _par_last_ext_root_scan_times_ms[i] + - _par_last_satb_filtering_times_ms[i] + - _par_last_update_rs_times_ms[i] + - _par_last_scan_rs_times_ms[i] + - _par_last_obj_copy_times_ms[i] + - _par_last_termination_times_ms[i]; - - _par_last_gc_worker_other_times_ms[i] = _par_last_gc_worker_times_ms[i] - - worker_known_time; - } - - print_par_stats(2, "GC Worker Other", _par_last_gc_worker_other_times_ms); - print_par_stats(2, "GC Worker Total", _par_last_gc_worker_times_ms); - print_par_stats(2, "GC Worker End", _par_last_gc_worker_end_times_ms); - } else { - print_stats(1, "Ext Root Scanning", ext_root_scan_time); - if (print_marking_info) { - print_stats(1, "SATB Filtering", satb_filtering_time); - } - print_stats(1, "Update RS", update_rs_time); - if (G1Log::finest()) { - print_stats(2, "Processed Buffers", (int)update_rs_processed_buffers); - } - print_stats(1, "Scan RS", scan_rs_time); - print_stats(1, "Object Copying", obj_copy_time); - } - print_stats(1, "Code Root Fixup", _cur_collection_code_root_fixup_time_ms); - print_stats(1, "Clear CT", _cur_clear_ct_time_ms); -#ifndef PRODUCT - print_stats(1, "Cur Clear CC", _cur_clear_cc_time_ms); - print_stats(1, "Cum Clear CC", _cum_clear_cc_time_ms); - print_stats(1, "Min Clear CC", _min_clear_cc_time_ms); - print_stats(1, "Max Clear CC", _max_clear_cc_time_ms); - if (_num_cc_clears > 0) { - print_stats(1, "Avg Clear CC", _cum_clear_cc_time_ms / ((double)_num_cc_clears)); - } -#endif - print_stats(1, "Other", other_time_ms); - print_stats(2, "Choose CSet", - (_recorded_young_cset_choice_time_ms + - _recorded_non_young_cset_choice_time_ms)); - print_stats(2, "Ref Proc", _cur_ref_proc_time_ms); - print_stats(2, "Ref Enq", _cur_ref_enq_time_ms); - print_stats(2, "Free CSet", - (_recorded_young_free_cset_time_ms + - _recorded_non_young_free_cset_time_ms)); - } - bool new_in_marking_window = _in_marking_window; bool new_in_marking_window_im = false; if (during_initial_mark_pause()) { @@ -1406,8 +1036,6 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { // do that for any other surv rate groupsx if (update_stats) { - double pause_time_ms = elapsed_ms; - size_t diff = 0; if (_max_pending_cards >= _pending_cards) { diff = _max_pending_cards - _pending_cards; @@ -1416,7 +1044,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { double cost_per_card_ms = 0.0; if (_pending_cards > 0) { - cost_per_card_ms = update_rs_time / (double) _pending_cards; + cost_per_card_ms = phase_times()->_update_rs_time / (double) _pending_cards; _cost_per_card_ms_seq->add(cost_per_card_ms); } @@ -1424,7 +1052,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { double cost_per_entry_ms = 0.0; if (cards_scanned > 10) { - cost_per_entry_ms = scan_rs_time / (double) cards_scanned; + cost_per_entry_ms = phase_times()->_scan_rs_time / (double) cards_scanned; if (_last_gc_was_young) { _cost_per_entry_ms_seq->add(cost_per_entry_ms); } else { @@ -1464,7 +1092,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { size_t copied_bytes = surviving_bytes; double cost_per_byte_ms = 0.0; if (copied_bytes > 0) { - cost_per_byte_ms = obj_copy_time / (double) copied_bytes; + cost_per_byte_ms = phase_times()->_obj_copy_time / (double) copied_bytes; if (_in_marking_window) { _cost_per_byte_ms_during_cm_seq->add(cost_per_byte_ms); } else { @@ -1473,21 +1101,21 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { } double all_other_time_ms = pause_time_ms - - (update_rs_time + scan_rs_time + obj_copy_time + termination_time); + (phase_times()->_update_rs_time + phase_times()->_scan_rs_time + phase_times()->_obj_copy_time + phase_times()->_termination_time); double young_other_time_ms = 0.0; if (young_cset_region_length() > 0) { young_other_time_ms = - _recorded_young_cset_choice_time_ms + - _recorded_young_free_cset_time_ms; + phase_times()->_recorded_young_cset_choice_time_ms + + phase_times()->_recorded_young_free_cset_time_ms; _young_other_cost_per_region_ms_seq->add(young_other_time_ms / (double) young_cset_region_length()); } double non_young_other_time_ms = 0.0; if (old_cset_region_length() > 0) { non_young_other_time_ms = - _recorded_non_young_cset_choice_time_ms + - _recorded_non_young_free_cset_time_ms; + phase_times()->_recorded_non_young_cset_choice_time_ms + + phase_times()->_recorded_non_young_free_cset_time_ms; _non_young_other_cost_per_region_ms_seq->add(non_young_other_time_ms / (double) old_cset_region_length()); @@ -1514,7 +1142,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) { // Note that _mmu_tracker->max_gc_time() returns the time in seconds. double update_rs_time_goal_ms = _mmu_tracker->max_gc_time() * MILLIUNITS * G1RSetUpdatingPauseTimePercent / 100.0; - adjust_concurrent_refinement(update_rs_time, update_rs_processed_buffers, update_rs_time_goal_ms); + adjust_concurrent_refinement(phase_times()->_update_rs_time, phase_times()->_update_rs_processed_buffers, update_rs_time_goal_ms); _collectionSetChooser->verify(); } @@ -2323,7 +1951,7 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) { set_recorded_rs_lengths(_inc_cset_recorded_rs_lengths); double young_end_time_sec = os::elapsedTime(); - _recorded_young_cset_choice_time_ms = + phase_times()->_recorded_young_cset_choice_time_ms = (young_end_time_sec - young_start_time_sec) * 1000.0; // We are doing young collections so reset this. @@ -2439,7 +2067,7 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) { predicted_pause_time_ms, target_pause_time_ms); double non_young_end_time_sec = os::elapsedTime(); - _recorded_non_young_cset_choice_time_ms = + phase_times()->_recorded_non_young_cset_choice_time_ms = (non_young_end_time_sec - non_young_start_time_sec) * 1000.0; } @@ -2455,33 +2083,29 @@ void TraceGen0TimeData::record_yield_time(double yield_time_ms) { } } -void TraceGen0TimeData::record_end_collection( - double total_ms, - double other_ms, - double root_region_scan_wait_ms, - double parallel_ms, - double ext_root_scan_ms, - double satb_filtering_ms, - double update_rs_ms, - double scan_rs_ms, - double obj_copy_ms, - double termination_ms, - double parallel_other_ms, - double clear_ct_ms) -{ +void TraceGen0TimeData::record_end_collection(double pause_time_ms, G1GCPhaseTimes* phase_times) { if(TraceGen0Time) { - _total.add(total_ms); - _other.add(other_ms); - _root_region_scan_wait.add(root_region_scan_wait_ms); - _parallel.add(parallel_ms); - _ext_root_scan.add(ext_root_scan_ms); - _satb_filtering.add(satb_filtering_ms); - _update_rs.add(update_rs_ms); - _scan_rs.add(scan_rs_ms); - _obj_copy.add(obj_copy_ms); - _termination.add(termination_ms); - _parallel_other.add(parallel_other_ms); - _clear_ct.add(clear_ct_ms); + _total.add(pause_time_ms); + _other.add(pause_time_ms - phase_times->accounted_time_ms()); + _root_region_scan_wait.add(phase_times->_root_region_scan_wait_time_ms); + _parallel.add(phase_times->_cur_collection_par_time_ms); + _ext_root_scan.add(phase_times->_ext_root_scan_time); + _satb_filtering.add(phase_times->_satb_filtering_time); + _update_rs.add(phase_times->_update_rs_time); + _scan_rs.add(phase_times->_scan_rs_time); + _obj_copy.add(phase_times->_obj_copy_time); + _termination.add(phase_times->_termination_time); + + double parallel_known_time = phase_times->_ext_root_scan_time + + phase_times->_satb_filtering_time + + phase_times->_update_rs_time + + phase_times->_scan_rs_time + + phase_times->_obj_copy_time + + + phase_times->_termination_time; + + double parallel_other_time = phase_times->_cur_collection_par_time_ms - parallel_known_time; + _parallel_other.add(parallel_other_time); + _clear_ct.add(phase_times->_cur_clear_ct_time_ms); } } @@ -2497,20 +2121,18 @@ void TraceGen0TimeData::increment_mixed_collection_count() { } } -void TraceGen0TimeData::print_summary(int level, - const char* str, +void TraceGen0TimeData::print_summary(const char* str, const NumberSeq* seq) const { double sum = seq->sum(); - LineBuffer(level + 1).append_and_print_cr("%-24s = %8.2lf s (avg = %8.2lf ms)", + gclog_or_tty->print_cr("%-27s = %8.2lf s (avg = %8.2lf ms)", str, sum / 1000.0, seq->avg()); } -void TraceGen0TimeData::print_summary_sd(int level, - const char* str, +void TraceGen0TimeData::print_summary_sd(const char* str, const NumberSeq* seq) const { - print_summary(level, str, seq); - LineBuffer(level + 6).append_and_print_cr("(num = %5d, std dev = %8.2lf ms, max = %8.2lf ms)", - seq->num(), seq->sd(), seq->maximum()); + print_summary(str, seq); + gclog_or_tty->print_cr("%+45s = %5d, std dev = %8.2lf ms, max = %8.2lf ms)", + "(num", seq->num(), seq->sd(), seq->maximum()); } void TraceGen0TimeData::print() const { @@ -2519,7 +2141,7 @@ void TraceGen0TimeData::print() const { } gclog_or_tty->print_cr("ALL PAUSES"); - print_summary_sd(0, "Total", &_total); + print_summary_sd(" Total", &_total); gclog_or_tty->print_cr(""); gclog_or_tty->print_cr(""); gclog_or_tty->print_cr(" Young GC Pauses: %8d", _young_pause_num); @@ -2531,24 +2153,24 @@ void TraceGen0TimeData::print() const { if (_young_pause_num == 0 && _mixed_pause_num == 0) { gclog_or_tty->print_cr("none"); } else { - print_summary_sd(0, "Evacuation Pauses", &_total); - print_summary(1, "Root Region Scan Wait", &_root_region_scan_wait); - print_summary(1, "Parallel Time", &_parallel); - print_summary(2, "Ext Root Scanning", &_ext_root_scan); - print_summary(2, "SATB Filtering", &_satb_filtering); - print_summary(2, "Update RS", &_update_rs); - print_summary(2, "Scan RS", &_scan_rs); - print_summary(2, "Object Copy", &_obj_copy); - print_summary(2, "Termination", &_termination); - print_summary(2, "Parallel Other", &_parallel_other); - print_summary(1, "Clear CT", &_clear_ct); - print_summary(1, "Other", &_other); + print_summary_sd(" Evacuation Pauses", &_total); + print_summary(" Root Region Scan Wait", &_root_region_scan_wait); + print_summary(" Parallel Time", &_parallel); + print_summary(" Ext Root Scanning", &_ext_root_scan); + print_summary(" SATB Filtering", &_satb_filtering); + print_summary(" Update RS", &_update_rs); + print_summary(" Scan RS", &_scan_rs); + print_summary(" Object Copy", &_obj_copy); + print_summary(" Termination", &_termination); + print_summary(" Parallel Other", &_parallel_other); + print_summary(" Clear CT", &_clear_ct); + print_summary(" Other", &_other); } gclog_or_tty->print_cr(""); gclog_or_tty->print_cr("MISC"); - print_summary_sd(0, "Stop World", &_all_stop_world_times_ms); - print_summary_sd(0, "Yields", &_all_yield_times_ms); + print_summary_sd(" Stop World", &_all_stop_world_times_ms); + print_summary_sd(" Yields", &_all_yield_times_ms); } void TraceGen1TimeData::record_full_collection(double full_gc_time_ms) { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp index b3b839752b9..3fa36acc3a3 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp @@ -36,11 +36,12 @@ class HeapRegion; class CollectionSetChooser; +class G1GCPhaseTimes; // TraceGen0Time collects data on _both_ young and mixed evacuation pauses // (the latter may contain non-young regions - i.e. regions that are // technically in Gen1) while TraceGen1Time collects data about full GCs. -class TraceGen0TimeData : public CHeapObj { +class TraceGen0TimeData : public CHeapObj { private: unsigned _young_pause_num; unsigned _mixed_pause_num; @@ -61,32 +62,20 @@ class TraceGen0TimeData : public CHeapObj { NumberSeq _parallel_other; NumberSeq _clear_ct; - void print_summary (int level, const char* str, const NumberSeq* seq) const; - void print_summary_sd (int level, const char* str, const NumberSeq* seq) const; + void print_summary(const char* str, const NumberSeq* seq) const; + void print_summary_sd(const char* str, const NumberSeq* seq) const; public: TraceGen0TimeData() : _young_pause_num(0), _mixed_pause_num(0) {}; void record_start_collection(double time_to_stop_the_world_ms); void record_yield_time(double yield_time_ms); - void record_end_collection( - double total_ms, - double other_ms, - double root_region_scan_wait_ms, - double parallel_ms, - double ext_root_scan_ms, - double satb_filtering_ms, - double update_rs_ms, - double scan_rs_ms, - double obj_copy_ms, - double termination_ms, - double parallel_other_ms, - double clear_ct_ms); + void record_end_collection(double pause_time_ms, G1GCPhaseTimes* phase_times); void increment_young_collection_count(); void increment_mixed_collection_count(); void print() const; }; -class TraceGen1TimeData : public CHeapObj { +class TraceGen1TimeData : public CHeapObj { private: NumberSeq _all_full_gc_times; @@ -131,7 +120,7 @@ class TraceGen1TimeData : public CHeapObj { // // NewSize and MaxNewSize override NewRatio. So, NewRatio is ignored if it is // combined with either NewSize or MaxNewSize. (A warning message is printed.) -class G1YoungGenSizer : public CHeapObj { +class G1YoungGenSizer : public CHeapObj { private: enum SizerKind { SizerDefaults, @@ -186,25 +175,9 @@ private: CollectionSetChooser* _collectionSetChooser; - double _cur_collection_start_sec; + double _full_collection_start_sec; size_t _cur_collection_pause_used_at_start_bytes; uint _cur_collection_pause_used_regions_at_start; - double _cur_collection_par_time_ms; - - double _cur_collection_code_root_fixup_time_ms; - - double _cur_clear_ct_time_ms; - double _cur_ref_proc_time_ms; - double _cur_ref_enq_time_ms; - -#ifndef PRODUCT - // Card Table Count Cache stats - double _min_clear_cc_time_ms; // min - double _max_clear_cc_time_ms; // max - double _cur_clear_cc_time_ms; // clearing time during current pause - double _cum_clear_cc_time_ms; // cummulative clearing time - jlong _num_cc_clears; // number of times the card count cache has been cleared -#endif // These exclude marking times. TruncatedSeq* _recent_gc_times_ms; @@ -217,23 +190,6 @@ private: double _stop_world_start; - double* _par_last_gc_worker_start_times_ms; - double* _par_last_ext_root_scan_times_ms; - double* _par_last_satb_filtering_times_ms; - double* _par_last_update_rs_times_ms; - double* _par_last_update_rs_processed_buffers; - double* _par_last_scan_rs_times_ms; - double* _par_last_obj_copy_times_ms; - double* _par_last_termination_times_ms; - double* _par_last_termination_attempts; - double* _par_last_gc_worker_end_times_ms; - double* _par_last_gc_worker_times_ms; - - // Each workers 'other' time i.e. the elapsed time of the parallel - // code executed by a worker minus the sum of the individual sub-phase - // times for that worker thread. - double* _par_last_gc_worker_other_times_ms; - // indicates whether we are in young or mixed GC mode bool _gcs_are_young; @@ -306,10 +262,6 @@ private: size_t _recorded_rs_lengths; size_t _max_rs_lengths; - - double _recorded_young_free_cset_time_ms; - double _recorded_non_young_free_cset_time_ms; - double _sigma; size_t _rs_lengths_prediction; @@ -341,8 +293,7 @@ private: void set_no_of_gc_threads(uintx v) { _no_of_gc_threads = v; } double _pause_time_target_ms; - double _recorded_young_cset_choice_time_ms; - double _recorded_non_young_cset_choice_time_ms; + size_t _pending_cards; size_t _max_pending_cards; @@ -497,14 +448,6 @@ public: uint young_cset_region_length() { return eden_cset_region_length() + survivor_cset_region_length(); } - void record_young_free_cset_time_ms(double time_ms) { - _recorded_young_free_cset_time_ms = time_ms; - } - - void record_non_young_free_cset_time_ms(double time_ms) { - _recorded_non_young_free_cset_time_ms = time_ms; - } - double predict_survivor_regions_evac_time(); void cset_regions_freed() { @@ -552,19 +495,6 @@ public: } private: - void print_stats(int level, const char* str, double value); - void print_stats(int level, const char* str, double value, int workers); - void print_stats(int level, const char* str, int value); - - void print_par_stats(int level, const char* str, double* data, bool showDecimals = true); - - double avg_value (double* data); - double max_value (double* data); - double sum_of_values (double* data); - double max_sum (double* data1, double* data2); - - double _last_pause_time_ms; - size_t _bytes_in_collection_set_before_gc; size_t _bytes_copied_during_gc; @@ -638,6 +568,8 @@ private: // Stash a pointer to the g1 heap. G1CollectedHeap* _g1; + G1GCPhaseTimes* _phase_times; + // The ratio of gc time to elapsed time, computed over recent pauses. double _recent_avg_pause_time_ratio; @@ -677,7 +609,6 @@ private: double _cur_mark_stop_world_time_ms; double _mark_remark_start_sec; double _mark_cleanup_start_sec; - double _root_region_scan_wait_time_ms; // Update the young list target length either by setting it to the // desired fixed value or by calculating it using G1's pause @@ -728,6 +659,8 @@ public: return CollectorPolicy::G1CollectorPolicyKind; } + G1GCPhaseTimes* phase_times() const { return _phase_times; } + // Check the current value of the young list RSet lengths and // compare it against the last prediction. If the current value is // higher, recalculate the young list target length prediction. @@ -772,10 +705,6 @@ public: void record_concurrent_mark_init_end(double mark_init_elapsed_time_ms); - void record_root_region_scan_wait_time(double time_ms) { - _root_region_scan_wait_time_ms = time_ms; - } - void record_concurrent_mark_remark_start(); void record_concurrent_mark_remark_end(); @@ -784,97 +713,14 @@ public: void record_concurrent_mark_cleanup_completed(); void record_concurrent_pause(); - void record_concurrent_pause_end(); - void record_collection_pause_end(int no_of_gc_threads); + void record_collection_pause_end(double pause_time); void print_heap_transition(); // Record the fact that a full collection occurred. void record_full_collection_start(); void record_full_collection_end(); - void record_gc_worker_start_time(int worker_i, double ms) { - _par_last_gc_worker_start_times_ms[worker_i] = ms; - } - - void record_ext_root_scan_time(int worker_i, double ms) { - _par_last_ext_root_scan_times_ms[worker_i] = ms; - } - - void record_satb_filtering_time(int worker_i, double ms) { - _par_last_satb_filtering_times_ms[worker_i] = ms; - } - - void record_update_rs_time(int thread, double ms) { - _par_last_update_rs_times_ms[thread] = ms; - } - - void record_update_rs_processed_buffers (int thread, - double processed_buffers) { - _par_last_update_rs_processed_buffers[thread] = processed_buffers; - } - - void record_scan_rs_time(int thread, double ms) { - _par_last_scan_rs_times_ms[thread] = ms; - } - - void reset_obj_copy_time(int thread) { - _par_last_obj_copy_times_ms[thread] = 0.0; - } - - void reset_obj_copy_time() { - reset_obj_copy_time(0); - } - - void record_obj_copy_time(int thread, double ms) { - _par_last_obj_copy_times_ms[thread] += ms; - } - - void record_termination(int thread, double ms, size_t attempts) { - _par_last_termination_times_ms[thread] = ms; - _par_last_termination_attempts[thread] = (double) attempts; - } - - void record_gc_worker_end_time(int worker_i, double ms) { - _par_last_gc_worker_end_times_ms[worker_i] = ms; - } - - void record_pause_time_ms(double ms) { - _last_pause_time_ms = ms; - } - - void record_clear_ct_time(double ms) { - _cur_clear_ct_time_ms = ms; - } - - void record_par_time(double ms) { - _cur_collection_par_time_ms = ms; - } - - void record_code_root_fixup_time(double ms) { - _cur_collection_code_root_fixup_time_ms = ms; - } - - void record_ref_proc_time(double ms) { - _cur_ref_proc_time_ms = ms; - } - - void record_ref_enq_time(double ms) { - _cur_ref_enq_time_ms = ms; - } - -#ifndef PRODUCT - void record_cc_clear_time(double ms) { - if (_min_clear_cc_time_ms < 0.0 || ms <= _min_clear_cc_time_ms) - _min_clear_cc_time_ms = ms; - if (_max_clear_cc_time_ms < 0.0 || ms >= _max_clear_cc_time_ms) - _max_clear_cc_time_ms = ms; - _cur_clear_cc_time_ms = ms; - _cum_clear_cc_time_ms += ms; - _num_cc_clears++; - } -#endif - // Record how much space we copied during a GC. This is typically // called when a GC alloc region is being retired. void record_bytes_copied_during_gc(size_t bytes) { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp new file mode 100644 index 00000000000..8bb9e552492 --- /dev/null +++ b/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp @@ -0,0 +1,379 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + + +#include "precompiled.hpp" +#include "gc_implementation/g1/g1CollectedHeap.inline.hpp" +#include "gc_implementation/g1/g1GCPhaseTimes.hpp" +#include "gc_implementation/g1/g1Log.hpp" + +// Helper class for avoiding interleaved logging +class LineBuffer: public StackObj { + +private: + static const int BUFFER_LEN = 1024; + static const int INDENT_CHARS = 3; + char _buffer[BUFFER_LEN]; + int _indent_level; + int _cur; + + void vappend(const char* format, va_list ap) { + int res = vsnprintf(&_buffer[_cur], BUFFER_LEN - _cur, format, ap); + if (res != -1) { + _cur += res; + } else { + DEBUG_ONLY(warning("buffer too small in LineBuffer");) + _buffer[BUFFER_LEN -1] = 0; + _cur = BUFFER_LEN; // vsnprintf above should not add to _buffer if we are called again + } + } + +public: + explicit LineBuffer(int indent_level): _indent_level(indent_level), _cur(0) { + for (; (_cur < BUFFER_LEN && _cur < (_indent_level * INDENT_CHARS)); _cur++) { + _buffer[_cur] = ' '; + } + } + +#ifndef PRODUCT + ~LineBuffer() { + assert(_cur == _indent_level * INDENT_CHARS, "pending data in buffer - append_and_print_cr() not called?"); + } +#endif + + void append(const char* format, ...) { + va_list ap; + va_start(ap, format); + vappend(format, ap); + va_end(ap); + } + + void append_and_print_cr(const char* format, ...) { + va_list ap; + va_start(ap, format); + vappend(format, ap); + va_end(ap); + gclog_or_tty->print_cr("%s", _buffer); + _cur = _indent_level * INDENT_CHARS; + } +}; + +G1GCPhaseTimes::G1GCPhaseTimes(uint max_gc_threads) : + _max_gc_threads(max_gc_threads), + _min_clear_cc_time_ms(-1.0), + _max_clear_cc_time_ms(-1.0), + _cur_clear_cc_time_ms(0.0), + _cum_clear_cc_time_ms(0.0), + _num_cc_clears(0L) +{ + assert(max_gc_threads > 0, "Must have some GC threads"); + _par_last_gc_worker_start_times_ms = new double[_max_gc_threads]; + _par_last_ext_root_scan_times_ms = new double[_max_gc_threads]; + _par_last_satb_filtering_times_ms = new double[_max_gc_threads]; + _par_last_update_rs_times_ms = new double[_max_gc_threads]; + _par_last_update_rs_processed_buffers = new double[_max_gc_threads]; + _par_last_scan_rs_times_ms = new double[_max_gc_threads]; + _par_last_obj_copy_times_ms = new double[_max_gc_threads]; + _par_last_termination_times_ms = new double[_max_gc_threads]; + _par_last_termination_attempts = new double[_max_gc_threads]; + _par_last_gc_worker_end_times_ms = new double[_max_gc_threads]; + _par_last_gc_worker_times_ms = new double[_max_gc_threads]; + _par_last_gc_worker_other_times_ms = new double[_max_gc_threads]; +} + +void G1GCPhaseTimes::note_gc_start(double pause_start_time_sec, uint active_gc_threads, + bool is_young_gc, bool is_initial_mark_gc, GCCause::Cause gc_cause) { + assert(active_gc_threads > 0, "The number of threads must be > 0"); + assert(active_gc_threads <= _max_gc_threads, "The number of active threads must be <= the max nubmer of threads"); + _active_gc_threads = active_gc_threads; + _pause_start_time_sec = pause_start_time_sec; + _is_young_gc = is_young_gc; + _is_initial_mark_gc = is_initial_mark_gc; + _gc_cause = gc_cause; + +#ifdef ASSERT + // initialise the timing data to something well known so that we can spot + // if something is not set properly + + for (uint i = 0; i < _max_gc_threads; ++i) { + _par_last_gc_worker_start_times_ms[i] = -1234.0; + _par_last_ext_root_scan_times_ms[i] = -1234.0; + _par_last_satb_filtering_times_ms[i] = -1234.0; + _par_last_update_rs_times_ms[i] = -1234.0; + _par_last_update_rs_processed_buffers[i] = -1234.0; + _par_last_scan_rs_times_ms[i] = -1234.0; + _par_last_obj_copy_times_ms[i] = -1234.0; + _par_last_termination_times_ms[i] = -1234.0; + _par_last_termination_attempts[i] = -1234.0; + _par_last_gc_worker_end_times_ms[i] = -1234.0; + _par_last_gc_worker_times_ms[i] = -1234.0; + _par_last_gc_worker_other_times_ms[i] = -1234.0; + } +#endif +} + +void G1GCPhaseTimes::note_gc_end(double pause_end_time_sec) { + if (G1Log::fine()) { + double pause_time_ms = (pause_end_time_sec - _pause_start_time_sec) * MILLIUNITS; + + for (uint i = 0; i < _active_gc_threads; i++) { + _par_last_gc_worker_times_ms[i] = _par_last_gc_worker_end_times_ms[i] - + _par_last_gc_worker_start_times_ms[i]; + + double worker_known_time = _par_last_ext_root_scan_times_ms[i] + + _par_last_satb_filtering_times_ms[i] + + _par_last_update_rs_times_ms[i] + + _par_last_scan_rs_times_ms[i] + + _par_last_obj_copy_times_ms[i] + + _par_last_termination_times_ms[i]; + + _par_last_gc_worker_other_times_ms[i] = _par_last_gc_worker_times_ms[i] - + worker_known_time; + } + + print(pause_time_ms); + } + +} + +void G1GCPhaseTimes::print_par_stats(int level, + const char* str, + double* data, + bool showDecimals) { + double min = data[0], max = data[0]; + double total = 0.0; + LineBuffer buf(level); + buf.append("[%s (ms):", str); + for (uint i = 0; i < _active_gc_threads; ++i) { + double val = data[i]; + if (val < min) + min = val; + if (val > max) + max = val; + total += val; + if (G1Log::finest()) { + if (showDecimals) { + buf.append(" %.1lf", val); + } else { + buf.append(" %d", (int)val); + } + } + } + + if (G1Log::finest()) { + buf.append_and_print_cr(""); + } + double avg = total / (double) _active_gc_threads; + if (showDecimals) { + buf.append_and_print_cr(" Min: %.1lf, Avg: %.1lf, Max: %.1lf, Diff: %.1lf, Sum: %.1lf]", + min, avg, max, max - min, total); + } else { + buf.append_and_print_cr(" Min: %d, Avg: %d, Max: %d, Diff: %d, Sum: %d]", + (int)min, (int)avg, (int)max, (int)max - (int)min, (int)total); + } +} + +void G1GCPhaseTimes::print_stats(int level, const char* str, double value) { + LineBuffer(level).append_and_print_cr("[%s: %.1lf ms]", str, value); +} + +void G1GCPhaseTimes::print_stats(int level, const char* str, double value, int workers) { + LineBuffer(level).append_and_print_cr("[%s: %.1lf ms, GC Workers: %d]", str, value, workers); +} + +void G1GCPhaseTimes::print_stats(int level, const char* str, int value) { + LineBuffer(level).append_and_print_cr("[%s: %d]", str, value); +} + +double G1GCPhaseTimes::avg_value(double* data) { + if (G1CollectedHeap::use_parallel_gc_threads()) { + double ret = 0.0; + for (uint i = 0; i < _active_gc_threads; ++i) { + ret += data[i]; + } + return ret / (double) _active_gc_threads; + } else { + return data[0]; + } +} + +double G1GCPhaseTimes::max_value(double* data) { + if (G1CollectedHeap::use_parallel_gc_threads()) { + double ret = data[0]; + for (uint i = 1; i < _active_gc_threads; ++i) { + if (data[i] > ret) { + ret = data[i]; + } + } + return ret; + } else { + return data[0]; + } +} + +double G1GCPhaseTimes::sum_of_values(double* data) { + if (G1CollectedHeap::use_parallel_gc_threads()) { + double sum = 0.0; + for (uint i = 0; i < _active_gc_threads; i++) { + sum += data[i]; + } + return sum; + } else { + return data[0]; + } +} + +double G1GCPhaseTimes::max_sum(double* data1, double* data2) { + double ret = data1[0] + data2[0]; + + if (G1CollectedHeap::use_parallel_gc_threads()) { + for (uint i = 1; i < _active_gc_threads; ++i) { + double data = data1[i] + data2[i]; + if (data > ret) { + ret = data; + } + } + } + return ret; +} + +void G1GCPhaseTimes::collapse_par_times() { + _ext_root_scan_time = avg_value(_par_last_ext_root_scan_times_ms); + _satb_filtering_time = avg_value(_par_last_satb_filtering_times_ms); + _update_rs_time = avg_value(_par_last_update_rs_times_ms); + _update_rs_processed_buffers = + sum_of_values(_par_last_update_rs_processed_buffers); + _scan_rs_time = avg_value(_par_last_scan_rs_times_ms); + _obj_copy_time = avg_value(_par_last_obj_copy_times_ms); + _termination_time = avg_value(_par_last_termination_times_ms); +} + +double G1GCPhaseTimes::accounted_time_ms() { + // Subtract the root region scanning wait time. It's initialized to + // zero at the start of the pause. + double misc_time_ms = _root_region_scan_wait_time_ms; + + misc_time_ms += _cur_collection_par_time_ms; + + // Now subtract the time taken to fix up roots in generated code + misc_time_ms += _cur_collection_code_root_fixup_time_ms; + + // Subtract the time taken to clean the card table from the + // current value of "other time" + misc_time_ms += _cur_clear_ct_time_ms; + + return misc_time_ms; +} + +void G1GCPhaseTimes::print(double pause_time_ms) { + + if (PrintGCTimeStamps) { + gclog_or_tty->stamp(); + gclog_or_tty->print(": "); + } + + GCCauseString gc_cause_str = GCCauseString("GC pause", _gc_cause) + .append(_is_young_gc ? " (young)" : " (mixed)") + .append(_is_initial_mark_gc ? " (initial-mark)" : ""); + gclog_or_tty->print_cr("[%s, %3.7f secs]", (const char*)gc_cause_str, pause_time_ms / 1000.0); + + if (!G1Log::finer()) { + return; + } + + if (_root_region_scan_wait_time_ms > 0.0) { + print_stats(1, "Root Region Scan Waiting", _root_region_scan_wait_time_ms); + } + if (G1CollectedHeap::use_parallel_gc_threads()) { + print_stats(1, "Parallel Time", _cur_collection_par_time_ms, _active_gc_threads); + print_par_stats(2, "GC Worker Start", _par_last_gc_worker_start_times_ms); + print_par_stats(2, "Ext Root Scanning", _par_last_ext_root_scan_times_ms); + if (_satb_filtering_time > 0.0) { + print_par_stats(2, "SATB Filtering", _par_last_satb_filtering_times_ms); + } + print_par_stats(2, "Update RS", _par_last_update_rs_times_ms); + if (G1Log::finest()) { + print_par_stats(3, "Processed Buffers", _par_last_update_rs_processed_buffers, + false /* showDecimals */); + } + print_par_stats(2, "Scan RS", _par_last_scan_rs_times_ms); + print_par_stats(2, "Object Copy", _par_last_obj_copy_times_ms); + print_par_stats(2, "Termination", _par_last_termination_times_ms); + if (G1Log::finest()) { + print_par_stats(3, "Termination Attempts", _par_last_termination_attempts, + false /* showDecimals */); + } + print_par_stats(2, "GC Worker Other", _par_last_gc_worker_other_times_ms); + print_par_stats(2, "GC Worker Total", _par_last_gc_worker_times_ms); + print_par_stats(2, "GC Worker End", _par_last_gc_worker_end_times_ms); + } else { + print_stats(1, "Ext Root Scanning", _ext_root_scan_time); + if (_satb_filtering_time > 0.0) { + print_stats(1, "SATB Filtering", _satb_filtering_time); + } + print_stats(1, "Update RS", _update_rs_time); + if (G1Log::finest()) { + print_stats(2, "Processed Buffers", (int)_update_rs_processed_buffers); + } + print_stats(1, "Scan RS", _scan_rs_time); + print_stats(1, "Object Copying", _obj_copy_time); + } + print_stats(1, "Code Root Fixup", _cur_collection_code_root_fixup_time_ms); + print_stats(1, "Clear CT", _cur_clear_ct_time_ms); + if (Verbose && G1Log::finest()) { + print_stats(1, "Cur Clear CC", _cur_clear_cc_time_ms); + print_stats(1, "Cum Clear CC", _cum_clear_cc_time_ms); + print_stats(1, "Min Clear CC", _min_clear_cc_time_ms); + print_stats(1, "Max Clear CC", _max_clear_cc_time_ms); + if (_num_cc_clears > 0) { + print_stats(1, "Avg Clear CC", _cum_clear_cc_time_ms / ((double)_num_cc_clears)); + } + } + double misc_time_ms = pause_time_ms - accounted_time_ms(); + print_stats(1, "Other", misc_time_ms); + print_stats(2, "Choose CSet", + (_recorded_young_cset_choice_time_ms + + _recorded_non_young_cset_choice_time_ms)); + print_stats(2, "Ref Proc", _cur_ref_proc_time_ms); + print_stats(2, "Ref Enq", _cur_ref_enq_time_ms); + print_stats(2, "Free CSet", + (_recorded_young_free_cset_time_ms + + _recorded_non_young_free_cset_time_ms)); +} + +void G1GCPhaseTimes::record_cc_clear_time_ms(double ms) { + if (!(Verbose && G1Log::finest())) { + return; + } + + if (_min_clear_cc_time_ms < 0.0 || ms <= _min_clear_cc_time_ms) { + _min_clear_cc_time_ms = ms; + } + if (_max_clear_cc_time_ms < 0.0 || ms >= _max_clear_cc_time_ms) { + _max_clear_cc_time_ms = ms; + } + _cur_clear_cc_time_ms = ms; + _cum_clear_cc_time_ms += ms; + _num_cc_clears++; +} diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp new file mode 100644 index 00000000000..d9eaf37261b --- /dev/null +++ b/hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1GCPHASETIMESLOG_HPP +#define SHARE_VM_GC_IMPLEMENTATION_G1_G1GCPHASETIMESLOG_HPP + +#include "memory/allocation.hpp" +#include "gc_interface/gcCause.hpp" + +class G1GCPhaseTimes : public CHeapObj { + friend class G1CollectorPolicy; + friend class TraceGen0TimeData; + + private: + uint _active_gc_threads; + uint _max_gc_threads; + + GCCause::Cause _gc_cause; + bool _is_young_gc; + bool _is_initial_mark_gc; + + double _pause_start_time_sec; + + double* _par_last_gc_worker_start_times_ms; + double* _par_last_ext_root_scan_times_ms; + double* _par_last_satb_filtering_times_ms; + double* _par_last_update_rs_times_ms; + double* _par_last_update_rs_processed_buffers; + double* _par_last_scan_rs_times_ms; + double* _par_last_obj_copy_times_ms; + double* _par_last_termination_times_ms; + double* _par_last_termination_attempts; + double* _par_last_gc_worker_end_times_ms; + double* _par_last_gc_worker_times_ms; + double* _par_last_gc_worker_other_times_ms; + + double _cur_collection_par_time_ms; + + double _cur_collection_code_root_fixup_time_ms; + + double _cur_clear_ct_time_ms; + double _cur_ref_proc_time_ms; + double _cur_ref_enq_time_ms; + + // Helper methods for detailed logging + void print_par_stats(int level, const char* str, double* data, bool showDecimals = true); + void print_stats(int level, const char* str, double value); + void print_stats(int level, const char* str, double value, int workers); + void print_stats(int level, const char* str, int value); + double avg_value(double* data); + double max_value(double* data); + double sum_of_values(double* data); + double max_sum(double* data1, double* data2); + double accounted_time_ms(); + + // Card Table Count Cache stats + double _min_clear_cc_time_ms; // min + double _max_clear_cc_time_ms; // max + double _cur_clear_cc_time_ms; // clearing time during current pause + double _cum_clear_cc_time_ms; // cummulative clearing time + jlong _num_cc_clears; // number of times the card count cache has been cleared + + // The following insance variables are directly accessed by G1CollectorPolicy + // and TraceGen0TimeData. This is why those classes are declared friends. + // An alternative is to add getters and setters for all of these fields. + // It might also be possible to restructure the code to reduce these + // dependencies. + double _ext_root_scan_time; + double _satb_filtering_time; + double _update_rs_time; + double _update_rs_processed_buffers; + double _scan_rs_time; + double _obj_copy_time; + double _termination_time; + + double _cur_collection_start_sec; + double _root_region_scan_wait_time_ms; + + double _recorded_young_cset_choice_time_ms; + double _recorded_non_young_cset_choice_time_ms; + + double _recorded_young_free_cset_time_ms; + double _recorded_non_young_free_cset_time_ms; + + void print(double pause_time_ms); + + public: + G1GCPhaseTimes(uint max_gc_threads); + void note_gc_start(double pause_start_time_sec, uint active_gc_threads, + bool is_young_gc, bool is_initial_mark_gc, GCCause::Cause gc_cause); + void note_gc_end(double pause_end_time_sec); + void collapse_par_times(); + + void record_gc_worker_start_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_gc_worker_start_times_ms[worker_i] = ms; + } + + void record_ext_root_scan_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_ext_root_scan_times_ms[worker_i] = ms; + } + + void record_satb_filtering_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_satb_filtering_times_ms[worker_i] = ms; + } + + void record_update_rs_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_update_rs_times_ms[worker_i] = ms; + } + + void record_update_rs_processed_buffers (uint worker_i, + double processed_buffers) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_update_rs_processed_buffers[worker_i] = processed_buffers; + } + + void record_scan_rs_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_scan_rs_times_ms[worker_i] = ms; + } + + void reset_obj_copy_time(uint worker_i) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_obj_copy_times_ms[worker_i] = 0.0; + } + + void reset_obj_copy_time() { + reset_obj_copy_time(0); + } + + void record_obj_copy_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_obj_copy_times_ms[worker_i] += ms; + } + + void record_termination(uint worker_i, double ms, size_t attempts) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_termination_times_ms[worker_i] = ms; + _par_last_termination_attempts[worker_i] = (double) attempts; + } + + void record_gc_worker_end_time(uint worker_i, double ms) { + assert(worker_i >= 0, "worker index must be > 0"); + assert(worker_i < _active_gc_threads, "worker index out of bounds"); + _par_last_gc_worker_end_times_ms[worker_i] = ms; + } + + void record_clear_ct_time(double ms) { + _cur_clear_ct_time_ms = ms; + } + + void record_par_time(double ms) { + _cur_collection_par_time_ms = ms; + } + + void record_code_root_fixup_time(double ms) { + _cur_collection_code_root_fixup_time_ms = ms; + } + + void record_ref_proc_time(double ms) { + _cur_ref_proc_time_ms = ms; + } + + void record_ref_enq_time(double ms) { + _cur_ref_enq_time_ms = ms; + } + + void record_root_region_scan_wait_time(double time_ms) { + _root_region_scan_wait_time_ms = time_ms; + } + + void record_cc_clear_time_ms(double ms); + + void record_young_free_cset_time_ms(double time_ms) { + _recorded_young_free_cset_time_ms = time_ms; + } + + void record_non_young_free_cset_time_ms(double time_ms) { + _recorded_non_young_free_cset_time_ms = time_ms; + } +}; + +#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1GCPHASETIMESLOG_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp index a13c62eb782..a8146c92386 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MMUTracker.hpp @@ -34,7 +34,7 @@ /***** ALL TIMES ARE IN SECS!!!!!!! *****/ // this is the "interface" -class G1MMUTracker: public CHeapObj { +class G1MMUTracker: public CHeapObj { protected: double _time_slice; double _max_gc_time; // this is per time slice diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp index 61e278a7ff7..4e1761e260b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp @@ -112,7 +112,7 @@ class G1CollectedHeap; // do which is important as we want to keep the eden region allocation // path as low-overhead as possible. -class G1MonitoringSupport : public CHeapObj { +class G1MonitoringSupport : public CHeapObj { friend class VMStructs; G1CollectedHeap* _g1h; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp index 1f366c8c676..c3af182b251 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp @@ -29,6 +29,7 @@ #include "gc_implementation/g1/g1BlockOffsetTable.inline.hpp" #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/g1/g1CollectorPolicy.hpp" +#include "gc_implementation/g1/g1GCPhaseTimes.hpp" #include "gc_implementation/g1/g1OopClosures.inline.hpp" #include "gc_implementation/g1/g1RemSet.inline.hpp" #include "gc_implementation/g1/heapRegionSeq.inline.hpp" @@ -75,7 +76,7 @@ G1RemSet::G1RemSet(G1CollectedHeap* g1, CardTableModRefBS* ct_bs) { _seq_task = new SubTasksDone(NumSeqTasks); guarantee(n_workers() > 0, "There should be some workers"); - _cset_rs_update_cl = NEW_C_HEAP_ARRAY(OopsInHeapRegionClosure*, n_workers()); + _cset_rs_update_cl = NEW_C_HEAP_ARRAY(OopsInHeapRegionClosure*, n_workers(), mtGC); for (uint i = 0; i < n_workers(); i++) { _cset_rs_update_cl[i] = NULL; } @@ -86,7 +87,7 @@ G1RemSet::~G1RemSet() { for (uint i = 0; i < n_workers(); i++) { assert(_cset_rs_update_cl[i] == NULL, "it should be"); } - FREE_C_HEAP_ARRAY(OopsInHeapRegionClosure*, _cset_rs_update_cl); + FREE_C_HEAP_ARRAY(OopsInHeapRegionClosure*, _cset_rs_update_cl, mtGC); } void CountNonCleanMemRegionClosure::do_MemRegion(MemRegion mr) { @@ -224,7 +225,7 @@ void G1RemSet::scanRS(OopsInHeapRegionClosure* oc, int worker_i) { assert( _cards_scanned != NULL, "invariant" ); _cards_scanned[worker_i] = scanRScl.cards_done(); - _g1p->record_scan_rs_time(worker_i, scan_rs_time_sec * 1000.0); + _g1p->phase_times()->record_scan_rs_time(worker_i, scan_rs_time_sec * 1000.0); } // Closure used for updating RSets and recording references that @@ -276,7 +277,7 @@ void G1RemSet::updateRS(DirtyCardQueue* into_cset_dcq, int worker_i) { guarantee(cl.n() == 0, "Card table should be clean."); } - _g1p->record_update_rs_time(worker_i, (os::elapsedTime() - start) * 1000.0); + _g1p->phase_times()->record_update_rs_time(worker_i, (os::elapsedTime() - start) * 1000.0); } class CountRSSizeClosure: public HeapRegionClosure { @@ -390,13 +391,13 @@ void G1RemSet::oops_into_collection_set_do(OopsInHeapRegionClosure* oc, if (G1UseParallelRSetUpdating || (worker_i == 0)) { updateRS(&into_cset_dcq, worker_i); } else { - _g1p->record_update_rs_processed_buffers(worker_i, 0.0); - _g1p->record_update_rs_time(worker_i, 0.0); + _g1p->phase_times()->record_update_rs_processed_buffers(worker_i, 0.0); + _g1p->phase_times()->record_update_rs_time(worker_i, 0.0); } if (G1UseParallelRSetScanning || (worker_i == 0)) { scanRS(oc, worker_i); } else { - _g1p->record_scan_rs_time(worker_i, 0.0); + _g1p->phase_times()->record_scan_rs_time(worker_i, 0.0); } // We now clear the cached values of _cset_rs_update_cl for this worker @@ -416,7 +417,7 @@ void G1RemSet::prepare_for_oops_into_collection_set_do() { // _seq_task->set_n_termination((int)n_workers()); } guarantee( _cards_scanned == NULL, "invariant" ); - _cards_scanned = NEW_C_HEAP_ARRAY(size_t, n_workers()); + _cards_scanned = NEW_C_HEAP_ARRAY(size_t, n_workers(), mtGC); for (uint i = 0; i < n_workers(); ++i) { _cards_scanned[i] = 0; } @@ -487,7 +488,7 @@ void G1RemSet::cleanup_after_oops_into_collection_set_do() { for (uint i = 0; i < n_workers(); ++i) { _total_cards_scanned += _cards_scanned[i]; } - FREE_C_HEAP_ARRAY(size_t, _cards_scanned); + FREE_C_HEAP_ARRAY(size_t, _cards_scanned, mtGC); _cards_scanned = NULL; // Cleanup after copy _g1->set_refine_cte_cl_concurrency(true); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp index 9c869055afd..edf28a0536b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp @@ -36,7 +36,7 @@ class ConcurrentG1Refine; // external heap references into it. Uses a mod ref bs to track updates, // so that they can be used to update the individual region remsets. -class G1RemSet: public CHeapObj { +class G1RemSet: public CHeapObj { protected: G1CollectedHeap* _g1; unsigned _conc_refine_cards; diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp index 0378688c015..a589739f7d4 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp @@ -53,6 +53,9 @@ develop(bool, G1TraceMarkStackOverflow, false, \ "If true, extra debugging code for CM restart for ovflw.") \ \ + develop(bool, G1TraceHeapRegionRememberedSet, false, \ + "Enables heap region remembered set debug logs") \ + \ diagnostic(bool, G1SummarizeConcMark, false, \ "Summarize concurrent mark info") \ \ diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp index fc275a6edae..84f7fb0bd5a 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp @@ -30,29 +30,22 @@ #include "gc_implementation/g1/heapRegionSeq.inline.hpp" #include "memory/allocation.hpp" #include "memory/space.inline.hpp" +#include "oops/oop.inline.hpp" #include "utilities/bitMap.inline.hpp" #include "utilities/globalDefinitions.hpp" -#define HRRS_VERBOSE 0 - -#define PRT_COUNT_OCCUPIED 1 - // OtherRegionsTable -class PerRegionTable: public CHeapObj { +class PerRegionTable: public CHeapObj { friend class OtherRegionsTable; friend class HeapRegionRemSetIterator; HeapRegion* _hr; BitMap _bm; -#if PRT_COUNT_OCCUPIED jint _occupied; -#endif - PerRegionTable* _next_free; - - PerRegionTable* next_free() { return _next_free; } - void set_next_free(PerRegionTable* prt) { _next_free = prt; } + // next pointer for free/allocated lis + PerRegionTable* _next; static PerRegionTable* _free_list; @@ -69,63 +62,25 @@ protected: // We need access in order to union things into the base table. BitMap* bm() { return &_bm; } -#if PRT_COUNT_OCCUPIED void recount_occupied() { _occupied = (jint) bm()->count_one_bits(); } -#endif PerRegionTable(HeapRegion* hr) : _hr(hr), -#if PRT_COUNT_OCCUPIED _occupied(0), -#endif _bm(HeapRegion::CardsPerRegion, false /* in-resource-area */) {} - static void free(PerRegionTable* prt) { - while (true) { - PerRegionTable* fl = _free_list; - prt->set_next_free(fl); - PerRegionTable* res = - (PerRegionTable*) - Atomic::cmpxchg_ptr(prt, &_free_list, fl); - if (res == fl) return; - } - ShouldNotReachHere(); - } - - static PerRegionTable* alloc(HeapRegion* hr) { - PerRegionTable* fl = _free_list; - while (fl != NULL) { - PerRegionTable* nxt = fl->next_free(); - PerRegionTable* res = - (PerRegionTable*) - Atomic::cmpxchg_ptr(nxt, &_free_list, fl); - if (res == fl) { - fl->init(hr); - return fl; - } else { - fl = _free_list; - } - } - assert(fl == NULL, "Loop condition."); - return new PerRegionTable(hr); - } - void add_card_work(CardIdx_t from_card, bool par) { if (!_bm.at(from_card)) { if (par) { if (_bm.par_at_put(from_card, 1)) { -#if PRT_COUNT_OCCUPIED Atomic::inc(&_occupied); -#endif } } else { _bm.at_put(from_card, 1); -#if PRT_COUNT_OCCUPIED _occupied++; -#endif } } } @@ -134,10 +89,13 @@ protected: // Must make this robust in case "from" is not in "_hr", because of // concurrency. -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" PRT::Add_reference_work(" PTR_FORMAT "->" PTR_FORMAT").", - from, *from); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" PRT::Add_reference_work(" PTR_FORMAT "->" PTR_FORMAT").", + from, + UseCompressedOops + ? oopDesc::load_decode_heap_oop((narrowOop*)from) + : oopDesc::load_decode_heap_oop((oop*)from)); + } HeapRegion* loc_hr = hr(); // If the test below fails, then this table was reused concurrently @@ -162,23 +120,16 @@ public: HeapRegion* hr() const { return _hr; } -#if PRT_COUNT_OCCUPIED jint occupied() const { // Overkill, but if we ever need it... // guarantee(_occupied == _bm.count_one_bits(), "Check"); return _occupied; } -#else - jint occupied() const { - return _bm.count_one_bits(); - } -#endif void init(HeapRegion* hr) { _hr = hr; -#if PRT_COUNT_OCCUPIED + _next = NULL; _occupied = 0; -#endif _bm.clear(); } @@ -194,9 +145,7 @@ public: HeapWord* hr_bot = hr()->bottom(); size_t hr_first_card_index = ctbs->index_for(hr_bot); bm()->set_intersection_at_offset(*card_bm, hr_first_card_index); -#if PRT_COUNT_OCCUPIED recount_occupied(); -#endif } void add_card(CardIdx_t from_card_index) { @@ -218,16 +167,6 @@ public: return sizeof(this) + _bm.size_in_words() * HeapWordSize; } - static size_t fl_mem_size() { - PerRegionTable* cur = _free_list; - size_t res = 0; - while (cur != NULL) { - res += sizeof(PerRegionTable); - cur = cur->next_free(); - } - return res; - } - // Requires "from" to be in "hr()". bool contains_reference(OopOrNarrowOopStar from) const { assert(hr()->is_in_reserved(from), "Precondition."); @@ -235,122 +174,29 @@ public: CardTableModRefBS::card_size); return _bm.at(card_ind); } -}; -PerRegionTable* PerRegionTable::_free_list = NULL; + PerRegionTable* next() const { return _next; } + void set_next(PerRegionTable* nxt) { _next = nxt; } + PerRegionTable** next_addr() { return &_next; } - -#define COUNT_PAR_EXPANDS 0 - -#if COUNT_PAR_EXPANDS -static jint n_par_expands = 0; -static jint n_par_contracts = 0; -static jint par_expand_list_len = 0; -static jint max_par_expand_list_len = 0; - -static void print_par_expand() { - Atomic::inc(&n_par_expands); - Atomic::inc(&par_expand_list_len); - if (par_expand_list_len > max_par_expand_list_len) { - max_par_expand_list_len = par_expand_list_len; - } - if ((n_par_expands % 10) == 0) { - gclog_or_tty->print_cr("\n\n%d par expands: %d contracts, " - "len = %d, max_len = %d\n.", - n_par_expands, n_par_contracts, par_expand_list_len, - max_par_expand_list_len); - } -} -#endif - -class PosParPRT: public PerRegionTable { - PerRegionTable** _par_tables; - - enum SomePrivateConstants { - ReserveParTableExpansion = 1 - }; - - void par_contract() { - assert(_par_tables != NULL, "Precondition."); - int n = HeapRegionRemSet::num_par_rem_sets()-1; - for (int i = 0; i < n; i++) { - _par_tables[i]->union_bitmap_into(bm()); - PerRegionTable::free(_par_tables[i]); - _par_tables[i] = NULL; - } -#if PRT_COUNT_OCCUPIED - // We must recount the "occupied." - recount_occupied(); -#endif - FREE_C_HEAP_ARRAY(PerRegionTable*, _par_tables); - _par_tables = NULL; -#if COUNT_PAR_EXPANDS - Atomic::inc(&n_par_contracts); - Atomic::dec(&par_expand_list_len); -#endif - } - - static PerRegionTable** _par_table_fl; - - PosParPRT* _next; - - static PosParPRT* _free_list; - - PerRegionTable** par_tables() const { - assert(uintptr_t(NULL) == 0, "Assumption."); - if (uintptr_t(_par_tables) <= ReserveParTableExpansion) - return NULL; - else - return _par_tables; - } - - PosParPRT* _next_par_expanded; - PosParPRT* next_par_expanded() { return _next_par_expanded; } - void set_next_par_expanded(PosParPRT* ppprt) { _next_par_expanded = ppprt; } - static PosParPRT* _par_expanded_list; - -public: - - PosParPRT(HeapRegion* hr) : PerRegionTable(hr), _par_tables(NULL) {} - - jint occupied() const { - jint res = PerRegionTable::occupied(); - if (par_tables() != NULL) { - for (int i = 0; i < HeapRegionRemSet::num_par_rem_sets()-1; i++) { - res += par_tables()[i]->occupied(); - } - } - return res; - } - - void init(HeapRegion* hr) { - PerRegionTable::init(hr); - _next = NULL; - if (par_tables() != NULL) { - for (int i = 0; i < HeapRegionRemSet::num_par_rem_sets()-1; i++) { - par_tables()[i]->init(hr); - } - } - } - - static void free(PosParPRT* prt) { + static void free(PerRegionTable* prt) { while (true) { - PosParPRT* fl = _free_list; + PerRegionTable* fl = _free_list; prt->set_next(fl); - PosParPRT* res = - (PosParPRT*) + PerRegionTable* res = + (PerRegionTable*) Atomic::cmpxchg_ptr(prt, &_free_list, fl); if (res == fl) return; } ShouldNotReachHere(); } - static PosParPRT* alloc(HeapRegion* hr) { - PosParPRT* fl = _free_list; + static PerRegionTable* alloc(HeapRegion* hr) { + PerRegionTable* fl = _free_list; while (fl != NULL) { - PosParPRT* nxt = fl->next(); - PosParPRT* res = - (PosParPRT*) + PerRegionTable* nxt = fl->next(); + PerRegionTable* res = + (PerRegionTable*) Atomic::cmpxchg_ptr(nxt, &_free_list, fl); if (res == fl) { fl->init(hr); @@ -360,148 +206,26 @@ public: } } assert(fl == NULL, "Loop condition."); - return new PosParPRT(hr); - } - - PosParPRT* next() const { return _next; } - void set_next(PosParPRT* nxt) { _next = nxt; } - PosParPRT** next_addr() { return &_next; } - - bool should_expand(int tid) { - // Given that we now defer RSet updates for after a GC we don't - // really need to expand the tables any more. This code should be - // cleaned up in the future (see CR 6921087). - return false; - } - - void par_expand() { - int n = HeapRegionRemSet::num_par_rem_sets()-1; - if (n <= 0) return; - if (_par_tables == NULL) { - PerRegionTable* res = - (PerRegionTable*) - Atomic::cmpxchg_ptr((PerRegionTable*)ReserveParTableExpansion, - &_par_tables, NULL); - if (res != NULL) return; - // Otherwise, we reserved the right to do the expansion. - - PerRegionTable** ptables = NEW_C_HEAP_ARRAY(PerRegionTable*, n); - for (int i = 0; i < n; i++) { - PerRegionTable* ptable = PerRegionTable::alloc(hr()); - ptables[i] = ptable; - } - // Here we do not need an atomic. - _par_tables = ptables; -#if COUNT_PAR_EXPANDS - print_par_expand(); -#endif - // We must put this table on the expanded list. - PosParPRT* exp_head = _par_expanded_list; - while (true) { - set_next_par_expanded(exp_head); - PosParPRT* res = - (PosParPRT*) - Atomic::cmpxchg_ptr(this, &_par_expanded_list, exp_head); - if (res == exp_head) return; - // Otherwise. - exp_head = res; - } - ShouldNotReachHere(); - } - } - - void add_reference(OopOrNarrowOopStar from, int tid) { - // Expand if necessary. - PerRegionTable** pt = par_tables(); - if (pt != NULL) { - // We always have to assume that mods to table 0 are in parallel, - // because of the claiming scheme in parallel expansion. A thread - // with tid != 0 that finds the table to be NULL, but doesn't succeed - // in claiming the right of expanding it, will end up in the else - // clause of the above if test. That thread could be delayed, and a - // thread 0 add reference could see the table expanded, and come - // here. Both threads would be adding in parallel. But we get to - // not use atomics for tids > 0. - if (tid == 0) { - PerRegionTable::add_reference(from); - } else { - pt[tid-1]->seq_add_reference(from); - } - } else { - // Not expanded -- add to the base table. - PerRegionTable::add_reference(from); - } - } - - void scrub(CardTableModRefBS* ctbs, BitMap* card_bm) { - assert(_par_tables == NULL, "Precondition"); - PerRegionTable::scrub(ctbs, card_bm); - } - - size_t mem_size() const { - size_t res = - PerRegionTable::mem_size() + sizeof(this) - sizeof(PerRegionTable); - if (_par_tables != NULL) { - for (int i = 0; i < HeapRegionRemSet::num_par_rem_sets()-1; i++) { - res += _par_tables[i]->mem_size(); - } - } - return res; + return new PerRegionTable(hr); } static size_t fl_mem_size() { - PosParPRT* cur = _free_list; + PerRegionTable* cur = _free_list; size_t res = 0; while (cur != NULL) { - res += sizeof(PosParPRT); + res += sizeof(PerRegionTable); cur = cur->next(); } return res; } - - bool contains_reference(OopOrNarrowOopStar from) const { - if (PerRegionTable::contains_reference(from)) return true; - if (_par_tables != NULL) { - for (int i = 0; i < HeapRegionRemSet::num_par_rem_sets()-1; i++) { - if (_par_tables[i]->contains_reference(from)) return true; - } - } - return false; - } - - static void par_contract_all(); }; -void PosParPRT::par_contract_all() { - PosParPRT* hd = _par_expanded_list; - while (hd != NULL) { - PosParPRT* nxt = hd->next_par_expanded(); - PosParPRT* res = - (PosParPRT*) - Atomic::cmpxchg_ptr(nxt, &_par_expanded_list, hd); - if (res == hd) { - // We claimed the right to contract this table. - hd->set_next_par_expanded(NULL); - hd->par_contract(); - hd = _par_expanded_list; - } else { - hd = res; - } - } -} - -PosParPRT* PosParPRT::_free_list = NULL; -PosParPRT* PosParPRT::_par_expanded_list = NULL; - -jint OtherRegionsTable::_cache_probes = 0; -jint OtherRegionsTable::_cache_hits = 0; +PerRegionTable* PerRegionTable::_free_list = NULL; size_t OtherRegionsTable::_max_fine_entries = 0; size_t OtherRegionsTable::_mod_max_fine_entries_mask = 0; -#if SAMPLE_FOR_EVICTION size_t OtherRegionsTable::_fine_eviction_stride = 0; size_t OtherRegionsTable::_fine_eviction_sample_size = 0; -#endif OtherRegionsTable::OtherRegionsTable(HeapRegion* hr) : _g1h(G1CollectedHeap::heap()), @@ -511,34 +235,36 @@ OtherRegionsTable::OtherRegionsTable(HeapRegion* hr) : false /* in-resource-area */), _fine_grain_regions(NULL), _n_fine_entries(0), _n_coarse_entries(0), -#if SAMPLE_FOR_EVICTION _fine_eviction_start(0), -#endif _sparse_table(hr) { - typedef PosParPRT* PosParPRTPtr; + typedef PerRegionTable* PerRegionTablePtr; + if (_max_fine_entries == 0) { assert(_mod_max_fine_entries_mask == 0, "Both or none."); size_t max_entries_log = (size_t)log2_long((jlong)G1RSetRegionEntries); _max_fine_entries = (size_t)(1 << max_entries_log); _mod_max_fine_entries_mask = _max_fine_entries - 1; -#if SAMPLE_FOR_EVICTION + assert(_fine_eviction_sample_size == 0 && _fine_eviction_stride == 0, "All init at same time."); _fine_eviction_sample_size = MAX2((size_t)4, max_entries_log); _fine_eviction_stride = _max_fine_entries / _fine_eviction_sample_size; -#endif } - _fine_grain_regions = new PosParPRTPtr[_max_fine_entries]; - if (_fine_grain_regions == NULL) + + _fine_grain_regions = new PerRegionTablePtr[_max_fine_entries]; + + if (_fine_grain_regions == NULL) { vm_exit_out_of_memory(sizeof(void*)*_max_fine_entries, "Failed to allocate _fine_grain_entries."); + } + for (size_t i = 0; i < _max_fine_entries; i++) { _fine_grain_regions[i] = NULL; } } -int** OtherRegionsTable::_from_card_cache = NULL; +int** OtherRegionsTable::_from_card_cache = NULL; size_t OtherRegionsTable::_from_card_cache_max_regions = 0; size_t OtherRegionsTable::_from_card_cache_mem_size = 0; @@ -546,9 +272,9 @@ void OtherRegionsTable::init_from_card_cache(size_t max_regions) { _from_card_cache_max_regions = max_regions; int n_par_rs = HeapRegionRemSet::num_par_rem_sets(); - _from_card_cache = NEW_C_HEAP_ARRAY(int*, n_par_rs); + _from_card_cache = NEW_C_HEAP_ARRAY(int*, n_par_rs, mtGC); for (int i = 0; i < n_par_rs; i++) { - _from_card_cache[i] = NEW_C_HEAP_ARRAY(int, max_regions); + _from_card_cache[i] = NEW_C_HEAP_ARRAY(int, max_regions, mtGC); for (size_t j = 0; j < max_regions; j++) { _from_card_cache[i][j] = -1; // An invalid value. } @@ -579,38 +305,26 @@ void OtherRegionsTable::print_from_card_cache() { void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { size_t cur_hrs_ind = (size_t) hr()->hrs_index(); -#if HRRS_VERBOSE - gclog_or_tty->print_cr("ORT::add_reference_work(" PTR_FORMAT "->" PTR_FORMAT ").", - from, - UseCompressedOops - ? oopDesc::load_decode_heap_oop((narrowOop*)from) - : oopDesc::load_decode_heap_oop((oop*)from)); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr("ORT::add_reference_work(" PTR_FORMAT "->" PTR_FORMAT ").", + from, + UseCompressedOops + ? oopDesc::load_decode_heap_oop((narrowOop*)from) + : oopDesc::load_decode_heap_oop((oop*)from)); + } int from_card = (int)(uintptr_t(from) >> CardTableModRefBS::card_shift); -#if HRRS_VERBOSE - gclog_or_tty->print_cr("Table for [" PTR_FORMAT "...): card %d (cache = %d)", - hr()->bottom(), from_card, - _from_card_cache[tid][cur_hrs_ind]); -#endif - -#define COUNT_CACHE 0 -#if COUNT_CACHE - jint p = Atomic::add(1, &_cache_probes); - if ((p % 10000) == 0) { - jint hits = _cache_hits; - gclog_or_tty->print_cr("%d/%d = %5.2f%% RS cache hits.", - _cache_hits, p, 100.0* (float)hits/(float)p); + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr("Table for [" PTR_FORMAT "...): card %d (cache = %d)", + hr()->bottom(), from_card, + _from_card_cache[tid][cur_hrs_ind]); } -#endif + if (from_card == _from_card_cache[tid][cur_hrs_ind]) { -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" from-card cache hit."); -#endif -#if COUNT_CACHE - Atomic::inc(&_cache_hits); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" from-card cache hit."); + } assert(contains_reference(from), "We just added it!"); return; } else { @@ -623,16 +337,16 @@ void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { // If the region is already coarsened, return. if (_coarse_map.at(from_hrs_ind)) { -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" coarse map hit."); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" coarse map hit."); + } assert(contains_reference(from), "We just added it!"); return; } // Otherwise find a per-region table to add it to. size_t ind = from_hrs_ind & _mod_max_fine_entries_mask; - PosParPRT* prt = find_region_table(ind, from_hr); + PerRegionTable* prt = find_region_table(ind, from_hr); if (prt == NULL) { MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag); // Confirm that it's really not there... @@ -649,35 +363,35 @@ void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { _sparse_table.add_card(from_hrs_ind, card_index)) { if (G1RecordHRRSOops) { HeapRegionRemSet::record(hr(), from); -#if HRRS_VERBOSE - gclog_or_tty->print(" Added card " PTR_FORMAT " to region " - "[" PTR_FORMAT "...) for ref " PTR_FORMAT ".\n", - align_size_down(uintptr_t(from), - CardTableModRefBS::card_size), - hr()->bottom(), from); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print(" Added card " PTR_FORMAT " to region " + "[" PTR_FORMAT "...) for ref " PTR_FORMAT ".\n", + align_size_down(uintptr_t(from), + CardTableModRefBS::card_size), + hr()->bottom(), from); + } + } + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" added card to sparse table."); } -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" added card to sparse table."); -#endif assert(contains_reference_locked(from), "We just added it!"); return; } else { -#if HRRS_VERBOSE - gclog_or_tty->print_cr(" [tid %d] sparse table entry " - "overflow(f: %d, t: %d)", - tid, from_hrs_ind, cur_hrs_ind); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print_cr(" [tid %d] sparse table entry " + "overflow(f: %d, t: %d)", + tid, from_hrs_ind, cur_hrs_ind); + } } if (_n_fine_entries == _max_fine_entries) { prt = delete_region_table(); } else { - prt = PosParPRT::alloc(from_hr); + prt = PerRegionTable::alloc(from_hr); } prt->init(from_hr); - PosParPRT* first_prt = _fine_grain_regions[ind]; + PerRegionTable* first_prt = _fine_grain_regions[ind]; prt->set_next(first_prt); // XXX Maybe move to init? _fine_grain_regions[ind] = prt; _n_fine_entries++; @@ -704,38 +418,25 @@ void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) { // OtherRegionsTable for why this is OK. assert(prt != NULL, "Inv"); - if (prt->should_expand(tid)) { - MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag); - HeapRegion* prt_hr = prt->hr(); - if (prt_hr == from_hr) { - // Make sure the table still corresponds to the same region - prt->par_expand(); - prt->add_reference(from, tid); - } - // else: The table has been concurrently coarsened, evicted, and - // the table data structure re-used for another table. So, we - // don't need to add the reference any more given that the table - // has been coarsened and the whole region will be scanned anyway. - } else { - prt->add_reference(from, tid); - } + prt->add_reference(from); + if (G1RecordHRRSOops) { HeapRegionRemSet::record(hr(), from); -#if HRRS_VERBOSE - gclog_or_tty->print("Added card " PTR_FORMAT " to region " - "[" PTR_FORMAT "...) for ref " PTR_FORMAT ".\n", - align_size_down(uintptr_t(from), - CardTableModRefBS::card_size), - hr()->bottom(), from); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print("Added card " PTR_FORMAT " to region " + "[" PTR_FORMAT "...) for ref " PTR_FORMAT ".\n", + align_size_down(uintptr_t(from), + CardTableModRefBS::card_size), + hr()->bottom(), from); + } } assert(contains_reference(from), "We just added it!"); } -PosParPRT* +PerRegionTable* OtherRegionsTable::find_region_table(size_t ind, HeapRegion* hr) const { assert(0 <= ind && ind < _max_fine_entries, "Preconditions."); - PosParPRT* prt = _fine_grain_regions[ind]; + PerRegionTable* prt = _fine_grain_regions[ind]; while (prt != NULL && prt->hr() != hr) { prt = prt->next(); } @@ -743,32 +444,16 @@ OtherRegionsTable::find_region_table(size_t ind, HeapRegion* hr) const { return prt; } - -#define DRT_CENSUS 0 - -#if DRT_CENSUS -static const int HistoSize = 6; -static int global_histo[HistoSize] = { 0, 0, 0, 0, 0, 0 }; -static int coarsenings = 0; -static int occ_sum = 0; -#endif - jint OtherRegionsTable::_n_coarsenings = 0; -PosParPRT* OtherRegionsTable::delete_region_table() { -#if DRT_CENSUS - int histo[HistoSize] = { 0, 0, 0, 0, 0, 0 }; - const int histo_limits[] = { 1, 4, 16, 64, 256, 2048 }; -#endif - +PerRegionTable* OtherRegionsTable::delete_region_table() { assert(_m.owned_by_self(), "Precondition"); assert(_n_fine_entries == _max_fine_entries, "Precondition"); - PosParPRT* max = NULL; + PerRegionTable* max = NULL; jint max_occ = 0; - PosParPRT** max_prev; + PerRegionTable** max_prev; size_t max_ind; -#if SAMPLE_FOR_EVICTION size_t i = _fine_eviction_start; for (size_t k = 0; k < _fine_eviction_sample_size; k++) { size_t ii = i; @@ -778,8 +463,8 @@ PosParPRT* OtherRegionsTable::delete_region_table() { if (ii == _max_fine_entries) ii = 0; guarantee(ii != i, "We must find one."); } - PosParPRT** prev = &_fine_grain_regions[ii]; - PosParPRT* cur = *prev; + PerRegionTable** prev = &_fine_grain_regions[ii]; + PerRegionTable* cur = *prev; while (cur != NULL) { jint cur_occ = cur->occupied(); if (max == NULL || cur_occ > max_occ) { @@ -794,64 +479,27 @@ PosParPRT* OtherRegionsTable::delete_region_table() { i = i + _fine_eviction_stride; if (i >= _n_fine_entries) i = i - _n_fine_entries; } + _fine_eviction_start++; - if (_fine_eviction_start >= _n_fine_entries) + + if (_fine_eviction_start >= _n_fine_entries) { _fine_eviction_start -= _n_fine_entries; -#else - for (int i = 0; i < _max_fine_entries; i++) { - PosParPRT** prev = &_fine_grain_regions[i]; - PosParPRT* cur = *prev; - while (cur != NULL) { - jint cur_occ = cur->occupied(); -#if DRT_CENSUS - for (int k = 0; k < HistoSize; k++) { - if (cur_occ <= histo_limits[k]) { - histo[k]++; global_histo[k]++; break; - } - } -#endif - if (max == NULL || cur_occ > max_occ) { - max = cur; - max_prev = prev; - max_ind = i; - max_occ = cur_occ; - } - prev = cur->next_addr(); - cur = cur->next(); - } } -#endif - // XXX + guarantee(max != NULL, "Since _n_fine_entries > 0"); -#if DRT_CENSUS - gclog_or_tty->print_cr("In a coarsening: histo of occs:"); - for (int k = 0; k < HistoSize; k++) { - gclog_or_tty->print_cr(" <= %4d: %5d.", histo_limits[k], histo[k]); - } - coarsenings++; - occ_sum += max_occ; - if ((coarsenings % 100) == 0) { - gclog_or_tty->print_cr("\ncoarsenings = %d; global summary:", coarsenings); - for (int k = 0; k < HistoSize; k++) { - gclog_or_tty->print_cr(" <= %4d: %5d.", histo_limits[k], global_histo[k]); - } - gclog_or_tty->print_cr("Avg occ of deleted region = %6.2f.", - (float)occ_sum/(float)coarsenings); - } -#endif // Set the corresponding coarse bit. size_t max_hrs_index = (size_t) max->hr()->hrs_index(); if (!_coarse_map.at(max_hrs_index)) { _coarse_map.at_put(max_hrs_index, true); _n_coarse_entries++; -#if 0 - gclog_or_tty->print("Coarsened entry in region [" PTR_FORMAT "...] " - "for region [" PTR_FORMAT "...] (%d coarse entries).\n", - hr()->bottom(), - max->hr()->bottom(), - _n_coarse_entries); -#endif + if (G1TraceHeapRegionRememberedSet) { + gclog_or_tty->print("Coarsened entry in region [" PTR_FORMAT "...] " + "for region [" PTR_FORMAT "...] (%d coarse entries).\n", + hr()->bottom(), + max->hr()->bottom(), + _n_coarse_entries); + } } // Unsplice. @@ -883,10 +531,10 @@ void OtherRegionsTable::scrub(CardTableModRefBS* ctbs, // Now do the fine-grained maps. for (size_t i = 0; i < _max_fine_entries; i++) { - PosParPRT* cur = _fine_grain_regions[i]; - PosParPRT** prev = &_fine_grain_regions[i]; + PerRegionTable* cur = _fine_grain_regions[i]; + PerRegionTable** prev = &_fine_grain_regions[i]; while (cur != NULL) { - PosParPRT* nxt = cur->next(); + PerRegionTable* nxt = cur->next(); // If the entire region is dead, eliminate. if (G1RSScrubVerbose) { gclog_or_tty->print_cr(" For other region %u:", @@ -899,7 +547,7 @@ void OtherRegionsTable::scrub(CardTableModRefBS* ctbs, if (G1RSScrubVerbose) { gclog_or_tty->print_cr(" deleted via region map."); } - PosParPRT::free(cur); + PerRegionTable::free(cur); } else { // Do fine-grain elimination. if (G1RSScrubVerbose) { @@ -914,7 +562,7 @@ void OtherRegionsTable::scrub(CardTableModRefBS* ctbs, *prev = nxt; cur->set_next(NULL); _n_fine_entries--; - PosParPRT::free(cur); + PerRegionTable::free(cur); } else { prev = cur->next_addr(); } @@ -940,7 +588,7 @@ size_t OtherRegionsTable::occupied() const { size_t OtherRegionsTable::occ_fine() const { size_t sum = 0; for (size_t i = 0; i < _max_fine_entries; i++) { - PosParPRT* cur = _fine_grain_regions[i]; + PerRegionTable* cur = _fine_grain_regions[i]; while (cur != NULL) { sum += cur->occupied(); cur = cur->next(); @@ -962,13 +610,13 @@ size_t OtherRegionsTable::mem_size() const { MutexLockerEx x((Mutex*)&_m, Mutex::_no_safepoint_check_flag); size_t sum = 0; for (size_t i = 0; i < _max_fine_entries; i++) { - PosParPRT* cur = _fine_grain_regions[i]; + PerRegionTable* cur = _fine_grain_regions[i]; while (cur != NULL) { sum += cur->mem_size(); cur = cur->next(); } } - sum += (sizeof(PosParPRT*) * _max_fine_entries); + sum += (sizeof(PerRegionTable*) * _max_fine_entries); sum += (_coarse_map.size_in_words() * HeapWordSize); sum += (_sparse_table.mem_size()); sum += sizeof(*this) - sizeof(_sparse_table); // Avoid double counting above. @@ -980,7 +628,7 @@ size_t OtherRegionsTable::static_mem_size() { } size_t OtherRegionsTable::fl_mem_size() { - return PerRegionTable::fl_mem_size() + PosParPRT::fl_mem_size(); + return PerRegionTable::fl_mem_size(); } void OtherRegionsTable::clear_fcc() { @@ -992,10 +640,10 @@ void OtherRegionsTable::clear_fcc() { void OtherRegionsTable::clear() { MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag); for (size_t i = 0; i < _max_fine_entries; i++) { - PosParPRT* cur = _fine_grain_regions[i]; + PerRegionTable* cur = _fine_grain_regions[i]; while (cur != NULL) { - PosParPRT* nxt = cur->next(); - PosParPRT::free(cur); + PerRegionTable* nxt = cur->next(); + PerRegionTable::free(cur); cur = nxt; } _fine_grain_regions[i] = NULL; @@ -1035,8 +683,8 @@ void OtherRegionsTable::clear_incoming_entry(HeapRegion* from_hr) { bool OtherRegionsTable::del_single_region_table(size_t ind, HeapRegion* hr) { assert(0 <= ind && ind < _max_fine_entries, "Preconditions."); - PosParPRT** prev_addr = &_fine_grain_regions[ind]; - PosParPRT* prt = *prev_addr; + PerRegionTable** prev_addr = &_fine_grain_regions[ind]; + PerRegionTable* prt = *prev_addr; while (prt != NULL && prt->hr() != hr) { prev_addr = prt->next_addr(); prt = prt->next(); @@ -1044,7 +692,7 @@ bool OtherRegionsTable::del_single_region_table(size_t ind, if (prt != NULL) { assert(prt->hr() == hr, "Loop postcondition."); *prev_addr = prt->next(); - PosParPRT::free(prt); + PerRegionTable::free(prt); _n_fine_entries--; return true; } else { @@ -1065,7 +713,7 @@ bool OtherRegionsTable::contains_reference_locked(OopOrNarrowOopStar from) const // Is this region in the coarse map? if (_coarse_map.at(hr_ind)) return true; - PosParPRT* prt = find_region_table(hr_ind & _mod_max_fine_entries_mask, + PerRegionTable* prt = find_region_table(hr_ind & _mod_max_fine_entries_mask, hr); if (prt != NULL) { return prt->contains_reference(from); @@ -1145,7 +793,7 @@ void HeapRegionRemSet::print() const { G1CollectedHeap::heap()->bot_shared()->address_for_index(card_index); gclog_or_tty->print_cr(" Card " PTR_FORMAT, card_start); } - // XXX + if (iter.n_yielded() != occupied()) { gclog_or_tty->print_cr("Yielded disagrees with occupied:"); gclog_or_tty->print_cr(" %6d yielded (%6d coarse, %6d fine).", @@ -1163,10 +811,6 @@ void HeapRegionRemSet::cleanup() { SparsePRT::cleanup_all(); } -void HeapRegionRemSet::par_cleanup() { - PosParPRT::par_contract_all(); -} - void HeapRegionRemSet::clear() { _other_regions.clear(); assert(occupied() == 0, "Should be clear."); @@ -1333,9 +977,9 @@ void HeapRegionRemSet::record(HeapRegion* hr, OopOrNarrowOopStar f) { && _recorded_cards == NULL && _recorded_regions == NULL, "Inv"); - _recorded_oops = NEW_C_HEAP_ARRAY(OopOrNarrowOopStar, MaxRecorded); - _recorded_cards = NEW_C_HEAP_ARRAY(HeapWord*, MaxRecorded); - _recorded_regions = NEW_C_HEAP_ARRAY(HeapRegion*, MaxRecorded); + _recorded_oops = NEW_C_HEAP_ARRAY(OopOrNarrowOopStar, MaxRecorded, mtGC); + _recorded_cards = NEW_C_HEAP_ARRAY(HeapWord*, MaxRecorded, mtGC); + _recorded_regions = NEW_C_HEAP_ARRAY(HeapRegion*, MaxRecorded, mtGC); } if (_n_recorded == MaxRecorded) { gclog_or_tty->print_cr("Filled up 'recorded' (%d).", MaxRecorded); @@ -1356,8 +1000,8 @@ void HeapRegionRemSet::record_event(Event evnt) { assert(_n_recorded_events == 0 && _recorded_event_index == NULL, "Inv"); - _recorded_events = NEW_C_HEAP_ARRAY(Event, MaxRecordedEvents); - _recorded_event_index = NEW_C_HEAP_ARRAY(int, MaxRecordedEvents); + _recorded_events = NEW_C_HEAP_ARRAY(Event, MaxRecordedEvents, mtGC); + _recorded_event_index = NEW_C_HEAP_ARRAY(int, MaxRecordedEvents, mtGC); } if (_n_recorded_events == MaxRecordedEvents) { gclog_or_tty->print_cr("Filled up 'recorded_events' (%d).", MaxRecordedEvents); diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp index 504afa2ef04..c1ba2e8f112 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ class G1CollectedHeap; class G1BlockOffsetSharedArray; class HeapRegion; class HeapRegionRemSetIterator; -class PosParPRT; +class PerRegionTable; class SparsePRT; // Essentially a wrapper around SparsePRTCleanupTask. See @@ -79,15 +79,14 @@ class OtherRegionsTable VALUE_OBJ_CLASS_SPEC { size_t _n_coarse_entries; static jint _n_coarsenings; - PosParPRT** _fine_grain_regions; - size_t _n_fine_entries; + PerRegionTable** _fine_grain_regions; + size_t _n_fine_entries; -#define SAMPLE_FOR_EVICTION 1 -#if SAMPLE_FOR_EVICTION + // Used to sample a subset of the fine grain PRTs to determine which + // PRT to evict and coarsen. size_t _fine_eviction_start; static size_t _fine_eviction_stride; static size_t _fine_eviction_sample_size; -#endif SparsePRT _sparse_table; @@ -98,21 +97,18 @@ class OtherRegionsTable VALUE_OBJ_CLASS_SPEC { // Requires "prt" to be the first element of the bucket list appropriate // for "hr". If this list contains an entry for "hr", return it, // otherwise return "NULL". - PosParPRT* find_region_table(size_t ind, HeapRegion* hr) const; + PerRegionTable* find_region_table(size_t ind, HeapRegion* hr) const; - // Find, delete, and return a candidate PosParPRT, if any exists, + // Find, delete, and return a candidate PerRegionTable, if any exists, // adding the deleted region to the coarse bitmap. Requires the caller // to hold _m, and the fine-grain table to be full. - PosParPRT* delete_region_table(); + PerRegionTable* delete_region_table(); // If a PRT for "hr" is in the bucket list indicated by "ind" (which must // be the correct index for "hr"), delete it and return true; else return // false. bool del_single_region_table(size_t ind, HeapRegion* hr); - static jint _cache_probes; - static jint _cache_hits; - // Indexed by thread X heap region, to minimize thread contention. static int** _from_card_cache; static size_t _from_card_cache_max_regions; @@ -127,10 +123,6 @@ public: // sense. void add_reference(OopOrNarrowOopStar from, int tid); - void add_reference(OopOrNarrowOopStar from) { - return add_reference(from, 0); - } - // Removes any entries shown by the given bitmaps to contain only dead // objects. void scrub(CardTableModRefBS* ctbs, BitMap* region_bm, BitMap* card_bm); @@ -173,7 +165,7 @@ public: static void print_from_card_cache(); }; -class HeapRegionRemSet : public CHeapObj { +class HeapRegionRemSet : public CHeapObj { friend class VMStructs; friend class HeapRegionRemSetIterator; @@ -233,14 +225,12 @@ public: static jint n_coarsenings() { return OtherRegionsTable::n_coarsenings(); } - /* Used in the sequential case. Returns "true" iff this addition causes - the size limit to be reached. */ + // Used in the sequential case. void add_reference(OopOrNarrowOopStar from) { - _other_regions.add_reference(from); + _other_regions.add_reference(from, 0); } - /* Used in the parallel case. Returns "true" iff this addition causes - the size limit to be reached. */ + // Used in the parallel case. void add_reference(OopOrNarrowOopStar from, int tid) { _other_regions.add_reference(from, tid); } @@ -253,15 +243,6 @@ public: // entries for this region in other remsets. void clear(); - // Forget any entries due to pointers from "from_hr". - void clear_incoming_entry(HeapRegion* from_hr) { - _other_regions.clear_incoming_entry(from_hr); - } - -#if 0 - virtual void cleanup() = 0; -#endif - // Attempt to claim the region. Returns true iff this call caused an // atomic transition from Unclaimed to Claimed. bool claim_iter(); @@ -290,12 +271,6 @@ public: // Initialize the given iterator to iterate over this rem set. void init_iterator(HeapRegionRemSetIterator* iter) const; -#if 0 - // Apply the "do_card" method to the start address of every card in the - // rem set. Returns false if some application of the closure aborted. - virtual bool card_iterate(CardClosure* iter) = 0; -#endif - // The actual # of bytes this hr_remset takes up. size_t mem_size() { return _other_regions.mem_size() @@ -322,10 +297,7 @@ public: void print() const; // Called during a stop-world phase to perform any deferred cleanups. - // The second version may be called by parallel threads after then finish - // collection work. static void cleanup(); - static void par_cleanup(); // Declare the heap size (in # of regions) to the HeapRegionRemSet(s). // (Uses it to initialize from_card_cache). @@ -360,14 +332,14 @@ public: #endif }; -class HeapRegionRemSetIterator : public CHeapObj { +class HeapRegionRemSetIterator : public CHeapObj { // The region over which we're iterating. const HeapRegionRemSet* _hrrs; // Local caching of HRRS fields. const BitMap* _coarse_map; - PosParPRT** _fine_grain_regions; + PerRegionTable** _fine_grain_regions; G1BlockOffsetSharedArray* _bosa; G1CollectedHeap* _g1h; @@ -404,8 +376,9 @@ class HeapRegionRemSetIterator : public CHeapObj { // Index of bucket-list we're working on. int _fine_array_index; + // Per Region Table we're doing within current bucket list. - PosParPRT* _fine_cur_prt; + PerRegionTable* _fine_cur_prt; /* SparsePRT::*/ SparsePRTIter _sparse_iter; @@ -435,12 +408,4 @@ public: } }; -#if 0 -class CardClosure: public Closure { -public: - virtual void do_card(HeapWord* card_start) = 0; -}; - -#endif - #endif // SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONREMSET_HPP diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp index dfac7d47d29..fcee7cb354b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp @@ -86,7 +86,7 @@ void HeapRegionSeq::initialize(HeapWord* bottom, HeapWord* end, _allocated_length = 0; _max_length = max_length; - _regions = NEW_C_HEAP_ARRAY(HeapRegion*, max_length); + _regions = NEW_C_HEAP_ARRAY(HeapRegion*, max_length, mtGC); memset(_regions, 0, (size_t) max_length * sizeof(HeapRegion*)); _regions_biased = _regions - ((uintx) bottom >> _region_shift); diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp index 94f4c0f7699..b1da14f6bc5 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp @@ -53,7 +53,7 @@ class FreeRegionList; // // and maintain that: _length <= _allocated_length <= _max_length -class HeapRegionSeq: public CHeapObj { +class HeapRegionSeq: public CHeapObj { friend class VMStructs; // The array that holds the HeapRegions. diff --git a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp b/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp index 7bf8fec644f..1a756aa3122 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.cpp @@ -126,7 +126,7 @@ void** PtrQueueSet::allocate_buffer() { return res; } else { // Allocate space for the BufferNode in front of the buffer. - char *b = NEW_C_HEAP_ARRAY(char, _sz + BufferNode::aligned_size()); + char *b = NEW_C_HEAP_ARRAY(char, _sz + BufferNode::aligned_size(), mtGC); return BufferNode::make_buffer_from_block(b); } } @@ -149,7 +149,7 @@ void PtrQueueSet::reduce_free_list() { assert(_buf_free_list != NULL, "_buf_free_list_sz must be wrong."); void* b = BufferNode::make_block_from_node(_buf_free_list); _buf_free_list = _buf_free_list->next(); - FREE_C_HEAP_ARRAY(char, b); + FREE_C_HEAP_ARRAY(char, b, mtGC); _buf_free_list_sz --; n--; } diff --git a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp index 69b01bc69f5..c87f12dad3e 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp @@ -208,7 +208,7 @@ void SATBMarkQueueSet::initialize(Monitor* cbl_mon, Mutex* fl_lock, PtrQueueSet::initialize(cbl_mon, fl_lock, process_completed_threshold, -1); _shared_satb_queue.set_lock(lock); if (ParallelGCThreads > 0) { - _par_closures = NEW_C_HEAP_ARRAY(ObjectClosure*, ParallelGCThreads); + _par_closures = NEW_C_HEAP_ARRAY(ObjectClosure*, ParallelGCThreads, mtGC); } } diff --git a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp index 64b1be2460f..0daa63512a3 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp @@ -148,8 +148,8 @@ void SparsePRTEntry::copy_cards(SparsePRTEntry* e) const { RSHashTable::RSHashTable(size_t capacity) : _capacity(capacity), _capacity_mask(capacity-1), _occupied_entries(0), _occupied_cards(0), - _entries((SparsePRTEntry*)NEW_C_HEAP_ARRAY(char, SparsePRTEntry::size() * capacity)), - _buckets(NEW_C_HEAP_ARRAY(int, capacity)), + _entries((SparsePRTEntry*)NEW_C_HEAP_ARRAY(char, SparsePRTEntry::size() * capacity, mtGC)), + _buckets(NEW_C_HEAP_ARRAY(int, capacity, mtGC)), _free_list(NullEntry), _free_region(0) { clear(); @@ -157,11 +157,11 @@ RSHashTable::RSHashTable(size_t capacity) : RSHashTable::~RSHashTable() { if (_entries != NULL) { - FREE_C_HEAP_ARRAY(SparsePRTEntry, _entries); + FREE_C_HEAP_ARRAY(SparsePRTEntry, _entries, mtGC); _entries = NULL; } if (_buckets != NULL) { - FREE_C_HEAP_ARRAY(int, _buckets); + FREE_C_HEAP_ARRAY(int, _buckets, mtGC); _buckets = NULL; } } diff --git a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp index 6780086795f..6a860295745 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp @@ -42,7 +42,7 @@ // insertions only enqueue old versions for deletions, but do not delete // old versions synchronously. -class SparsePRTEntry: public CHeapObj { +class SparsePRTEntry: public CHeapObj { public: enum SomePublicConstants { NullEntry = -1, @@ -101,7 +101,7 @@ public: }; -class RSHashTable : public CHeapObj { +class RSHashTable : public CHeapObj { friend class RSHashTableIter; diff --git a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp index ec44c8e70a8..1232cf390e8 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.cpp @@ -43,7 +43,7 @@ SurvRateGroup::SurvRateGroup(G1CollectorPolicy* g1p, reset(); if (summary_surv_rates_len > 0) { size_t length = summary_surv_rates_len; - _summary_surv_rates = NEW_C_HEAP_ARRAY(NumberSeq*, length); + _summary_surv_rates = NEW_C_HEAP_ARRAY(NumberSeq*, length, mtGC); for (size_t i = 0; i < length; ++i) { _summary_surv_rates[i] = new NumberSeq(); } @@ -90,9 +90,9 @@ SurvRateGroup::stop_adding_regions() { double* old_accum_surv_rate_pred = _accum_surv_rate_pred; TruncatedSeq** old_surv_rate_pred = _surv_rate_pred; - _surv_rate = NEW_C_HEAP_ARRAY(double, _region_num); - _accum_surv_rate_pred = NEW_C_HEAP_ARRAY(double, _region_num); - _surv_rate_pred = NEW_C_HEAP_ARRAY(TruncatedSeq*, _region_num); + _surv_rate = NEW_C_HEAP_ARRAY(double, _region_num, mtGC); + _accum_surv_rate_pred = NEW_C_HEAP_ARRAY(double, _region_num, mtGC); + _surv_rate_pred = NEW_C_HEAP_ARRAY(TruncatedSeq*, _region_num, mtGC); for (size_t i = 0; i < _stats_arrays_length; ++i) { _surv_rate_pred[i] = old_surv_rate_pred[i]; @@ -104,13 +104,13 @@ SurvRateGroup::stop_adding_regions() { _stats_arrays_length = _region_num; if (old_surv_rate != NULL) { - FREE_C_HEAP_ARRAY(double, old_surv_rate); + FREE_C_HEAP_ARRAY(double, old_surv_rate, mtGC); } if (old_accum_surv_rate_pred != NULL) { - FREE_C_HEAP_ARRAY(double, old_accum_surv_rate_pred); + FREE_C_HEAP_ARRAY(double, old_accum_surv_rate_pred, mtGC); } if (old_surv_rate_pred != NULL) { - FREE_C_HEAP_ARRAY(TruncatedSeq*, old_surv_rate_pred); + FREE_C_HEAP_ARRAY(TruncatedSeq*, old_surv_rate_pred, mtGC); } } diff --git a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp index c9617f2ed2e..abac3e00a72 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/survRateGroup.hpp @@ -29,7 +29,7 @@ class G1CollectorPolicy; -class SurvRateGroup : public CHeapObj { +class SurvRateGroup : public CHeapObj { private: G1CollectorPolicy* _g1p; const char* _name; diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp index 25be723aa98..b4b62fc77f9 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp @@ -457,12 +457,12 @@ get_LNC_array_for_space(Space* sp, if (_lowest_non_clean[i] != NULL) { assert(n_chunks != _lowest_non_clean_chunk_size[i], "logical consequence"); - FREE_C_HEAP_ARRAY(CardPtr, _lowest_non_clean[i]); + FREE_C_HEAP_ARRAY(CardPtr, _lowest_non_clean[i], mtGC); _lowest_non_clean[i] = NULL; } // Now allocate a new one if necessary. if (_lowest_non_clean[i] == NULL) { - _lowest_non_clean[i] = NEW_C_HEAP_ARRAY(CardPtr, n_chunks); + _lowest_non_clean[i] = NEW_C_HEAP_ARRAY(CardPtr, n_chunks, mtGC); _lowest_non_clean_chunk_size[i] = n_chunks; _lowest_non_clean_base_chunk_index[i] = addr_to_chunk_index(covered.start()); for (int j = 0; j < (int)n_chunks; j++) diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp b/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp index 6d1504a8653..ea2fbf6170e 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parGCAllocBuffer.hpp @@ -35,7 +35,7 @@ class PLABStats; // A per-thread allocation buffer used during GC. -class ParGCAllocBuffer: public CHeapObj { +class ParGCAllocBuffer: public CHeapObj { protected: char head[32]; size_t _word_sz; // in HeapWord units diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp index 96ae468f0bf..12472f6ad93 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp @@ -59,7 +59,7 @@ ParScanThreadState::ParScanThreadState(Space* to_space_, Generation* old_gen_, int thread_num_, ObjToScanQueueSet* work_queue_set_, - Stack* overflow_stacks_, + Stack* overflow_stacks_, size_t desired_plab_sz_, ParallelTaskTerminator& term_) : _to_space(to_space_), _old_gen(old_gen_), _young_gen(gen_), _thread_num(thread_num_), @@ -184,7 +184,7 @@ bool ParScanThreadState::take_from_overflow_stack() { assert(ParGCUseLocalOverflow, "Else should not call"); assert(young_gen()->overflow_list() == NULL, "Error"); ObjToScanQueue* queue = work_queue(); - Stack* const of_stack = overflow_stack(); + Stack* const of_stack = overflow_stack(); const size_t num_overflow_elems = of_stack->size(); const size_t space_available = queue->max_elems() - queue->size(); const size_t num_take_elems = MIN3(space_available / 4, @@ -297,7 +297,7 @@ public: ParNewGeneration& gen, Generation& old_gen, ObjToScanQueueSet& queue_set, - Stack* overflow_stacks_, + Stack* overflow_stacks_, size_t desired_plab_sz, ParallelTaskTerminator& term); @@ -331,7 +331,7 @@ private: ParScanThreadStateSet::ParScanThreadStateSet( int num_threads, Space& to_space, ParNewGeneration& gen, Generation& old_gen, ObjToScanQueueSet& queue_set, - Stack* overflow_stacks, + Stack* overflow_stacks, size_t desired_plab_sz, ParallelTaskTerminator& term) : ResourceArray(sizeof(ParScanThreadState), num_threads), _gen(gen), _next_gen(old_gen), _term(term) @@ -649,9 +649,14 @@ ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level) _overflow_stacks = NULL; if (ParGCUseLocalOverflow) { - _overflow_stacks = NEW_C_HEAP_ARRAY(Stack, ParallelGCThreads); + + // typedef to workaround NEW_C_HEAP_ARRAY macro, which can not deal + // with ',' + typedef Stack GCOopStack; + + _overflow_stacks = NEW_C_HEAP_ARRAY(GCOopStack, ParallelGCThreads, mtGC); for (size_t i = 0; i < ParallelGCThreads; ++i) { - new (_overflow_stacks + i) Stack(); + new (_overflow_stacks + i) Stack(); } } @@ -1401,7 +1406,7 @@ void ParNewGeneration::push_on_overflow_list(oop from_space_obj, ParScanThreadSt assert(_num_par_pushes > 0, "Tautology"); #endif if (from_space_obj->forwardee() == from_space_obj) { - oopDesc* listhead = NEW_C_HEAP_ARRAY(oopDesc, 1); + oopDesc* listhead = NEW_C_HEAP_ARRAY(oopDesc, 1, mtGC); listhead->forward_to(from_space_obj); from_space_obj = listhead; } @@ -1553,7 +1558,7 @@ bool ParNewGeneration::take_from_overflow_list_work(ParScanThreadState* par_scan // This can become a scaling bottleneck when there is work queue overflow coincident // with promotion failure. oopDesc* f = cur; - FREE_C_HEAP_ARRAY(oopDesc, f); + FREE_C_HEAP_ARRAY(oopDesc, f, mtGC); } else if (par_scan_state->should_be_partially_scanned(obj_to_push, cur)) { assert(arrayOop(cur)->length() == 0, "entire array remaining to be scanned"); obj_to_push = cur; diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp index 75eac033b06..5b124a953fd 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp @@ -41,7 +41,7 @@ class ParEvacuateFollowersClosure; // in genOopClosures.inline.hpp. typedef Padded ObjToScanQueue; -typedef GenericTaskQueueSet ObjToScanQueueSet; +typedef GenericTaskQueueSet ObjToScanQueueSet; class ParKeepAliveClosure: public DefNewGeneration::KeepAliveClosure { private: @@ -59,7 +59,7 @@ class ParScanThreadState { friend class ParScanThreadStateSet; private: ObjToScanQueue *_work_queue; - Stack* const _overflow_stack; + Stack* const _overflow_stack; ParGCAllocBuffer _to_space_alloc_buffer; @@ -127,7 +127,7 @@ class ParScanThreadState { ParScanThreadState(Space* to_space_, ParNewGeneration* gen_, Generation* old_gen_, int thread_num_, ObjToScanQueueSet* work_queue_set_, - Stack* overflow_stacks_, + Stack* overflow_stacks_, size_t desired_plab_sz_, ParallelTaskTerminator& term_); @@ -151,7 +151,7 @@ class ParScanThreadState { void trim_queues(int max_size); // Private overflow stack usage - Stack* overflow_stack() { return _overflow_stack; } + Stack* overflow_stack() { return _overflow_stack; } bool take_from_overflow_stack(); void push_on_overflow_stack(oop p); @@ -312,7 +312,7 @@ class ParNewGeneration: public DefNewGeneration { ObjToScanQueueSet* _task_queues; // Per-worker-thread local overflow stacks - Stack* _overflow_stacks; + Stack* _overflow_stacks; // Desired size of survivor space plab's PLABStats _plab_stats; diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp b/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp index 747868fc5f5..4a727e9357a 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parOopClosures.hpp @@ -32,7 +32,7 @@ class ParScanThreadState; class ParNewGeneration; typedef Padded ObjToScanQueue; -typedef GenericTaskQueueSet ObjToScanQueueSet; +typedef GenericTaskQueueSet ObjToScanQueueSet; class ParallelTaskTerminator; class ParScanClosure: public OopsInGenClosure { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp index 77fe9e022e5..3018805fe69 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp @@ -40,7 +40,7 @@ // must be shrunk. Adjusting the boundary between the generations // is called for in this class. -class AdjoiningGenerations : public CHeapObj { +class AdjoiningGenerations : public CHeapObj { friend class VMStructs; private: // The young generation and old generation, respectively diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp index 04424aa5208..b32007eded5 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp @@ -116,7 +116,7 @@ GCTaskQueue* GCTaskQueue::create() { } GCTaskQueue* GCTaskQueue::create_on_c_heap() { - GCTaskQueue* result = new(ResourceObj::C_HEAP) GCTaskQueue(true); + GCTaskQueue* result = new(ResourceObj::C_HEAP, mtGC) GCTaskQueue(true); if (TraceGCTaskQueue) { tty->print_cr("GCTaskQueue::create_on_c_heap()" " returns " INTPTR_FORMAT, @@ -403,19 +403,19 @@ void GCTaskManager::initialize() { _queue = SynchronizedGCTaskQueue::create(unsynchronized_queue, lock()); _noop_task = NoopGCTask::create_on_c_heap(); _idle_inactive_task = WaitForBarrierGCTask::create_on_c_heap(); - _resource_flag = NEW_C_HEAP_ARRAY(bool, workers()); + _resource_flag = NEW_C_HEAP_ARRAY(bool, workers(), mtGC); { // Set up worker threads. // Distribute the workers among the available processors, // unless we were told not to, or if the os doesn't want to. - uint* processor_assignment = NEW_C_HEAP_ARRAY(uint, workers()); + uint* processor_assignment = NEW_C_HEAP_ARRAY(uint, workers(), mtGC); if (!BindGCTaskThreadsToCPUs || !os::distribute_processes(workers(), processor_assignment)) { for (uint a = 0; a < workers(); a += 1) { processor_assignment[a] = sentinel_worker(); } } - _thread = NEW_C_HEAP_ARRAY(GCTaskThread*, workers()); + _thread = NEW_C_HEAP_ARRAY(GCTaskThread*, workers(), mtGC); for (uint t = 0; t < workers(); t += 1) { set_thread(t, GCTaskThread::create(this, t, processor_assignment[t])); } @@ -426,7 +426,7 @@ void GCTaskManager::initialize() { } tty->cr(); } - FREE_C_HEAP_ARRAY(uint, processor_assignment); + FREE_C_HEAP_ARRAY(uint, processor_assignment, mtGC); } reset_busy_workers(); set_unblocked(); @@ -455,11 +455,11 @@ GCTaskManager::~GCTaskManager() { GCTaskThread::destroy(thread(i)); set_thread(i, NULL); } - FREE_C_HEAP_ARRAY(GCTaskThread*, _thread); + FREE_C_HEAP_ARRAY(GCTaskThread*, _thread, mtGC); _thread = NULL; } if (_resource_flag != NULL) { - FREE_C_HEAP_ARRAY(bool, _resource_flag); + FREE_C_HEAP_ARRAY(bool, _resource_flag, mtGC); _resource_flag = NULL; } if (queue() != NULL) { @@ -817,7 +817,7 @@ NoopGCTask* NoopGCTask::create() { } NoopGCTask* NoopGCTask::create_on_c_heap() { - NoopGCTask* result = new(ResourceObj::C_HEAP) NoopGCTask(true); + NoopGCTask* result = new(ResourceObj::C_HEAP, mtGC) NoopGCTask(true); return result; } @@ -848,7 +848,7 @@ IdleGCTask* IdleGCTask::create() { } IdleGCTask* IdleGCTask::create_on_c_heap() { - IdleGCTask* result = new(ResourceObj::C_HEAP) IdleGCTask(true); + IdleGCTask* result = new(ResourceObj::C_HEAP, mtGC) IdleGCTask(true); assert(UseDynamicNumberOfGCThreads, "Should only be used with dynamic GC thread"); return result; @@ -984,7 +984,7 @@ WaitForBarrierGCTask* WaitForBarrierGCTask::create() { WaitForBarrierGCTask* WaitForBarrierGCTask::create_on_c_heap() { WaitForBarrierGCTask* result = - new (ResourceObj::C_HEAP) WaitForBarrierGCTask(true); + new (ResourceObj::C_HEAP, mtGC) WaitForBarrierGCTask(true); return result; } @@ -1114,7 +1114,7 @@ Monitor* MonitorSupply::reserve() { // Lazy initialization. if (freelist() == NULL) { _freelist = - new(ResourceObj::C_HEAP) GrowableArray(ParallelGCThreads, + new(ResourceObj::C_HEAP, mtGC) GrowableArray(ParallelGCThreads, true); } if (! freelist()->is_empty()) { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp index 65a8458d3b9..b64f7d9557e 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.hpp @@ -216,7 +216,7 @@ protected: // A GCTaskQueue that can be synchronized. // This "has-a" GCTaskQueue and a mutex to do the exclusion. -class SynchronizedGCTaskQueue : public CHeapObj { +class SynchronizedGCTaskQueue : public CHeapObj { private: // Instance state. GCTaskQueue* _unsynchronized_queue; // Has-a unsynchronized queue. @@ -278,7 +278,7 @@ protected: // This is an abstract base class for getting notifications // when a GCTaskManager is done. -class NotifyDoneClosure : public CHeapObj { +class NotifyDoneClosure : public CHeapObj { public: // The notification callback method. virtual void notify(GCTaskManager* manager) = 0; @@ -355,7 +355,7 @@ protected: // held in the GCTaskThread** _thread array in GCTaskManager. -class GCTaskManager : public CHeapObj { +class GCTaskManager : public CHeapObj { friend class ParCompactionManager; friend class PSParallelCompact; friend class PSScavenge; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp index 976d879d5f6..9bbdf49ed75 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.cpp @@ -46,7 +46,7 @@ GCTaskThread::GCTaskThread(GCTaskManager* manager, vm_exit_out_of_memory(0, "Cannot create GC thread. Out of system resources."); if (PrintGCTaskTimeStamps) { - _time_stamps = NEW_C_HEAP_ARRAY(GCTaskTimeStamp, GCTaskTimeStampEntries ); + _time_stamps = NEW_C_HEAP_ARRAY(GCTaskTimeStamp, GCTaskTimeStampEntries, mtGC); guarantee(_time_stamps != NULL, "Sanity"); } @@ -56,7 +56,7 @@ GCTaskThread::GCTaskThread(GCTaskManager* manager, GCTaskThread::~GCTaskThread() { if (_time_stamps != NULL) { - FREE_C_HEAP_ARRAY(GCTaskTimeStamp, _time_stamps); + FREE_C_HEAP_ARRAY(GCTaskTimeStamp, _time_stamps, mtGC); } } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp index c8406545e9b..1a77fe060c4 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/gcTaskThread.hpp @@ -90,7 +90,7 @@ protected: void set_is_working(bool v) { _is_working = v; } }; -class GCTaskTimeStamp : public CHeapObj +class GCTaskTimeStamp : public CHeapObj { private: jlong _entry_time; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp index 1b80839213d..8a852cc95e9 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp @@ -28,6 +28,7 @@ #include "memory/cardTableModRefBS.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" +#include "services/memTracker.hpp" void ObjectStartArray::initialize(MemRegion reserved_region) { // We're based on the assumption that we use the same @@ -50,6 +51,7 @@ void ObjectStartArray::initialize(MemRegion reserved_region) { if (!backing_store.is_reserved()) { vm_exit_during_initialization("Could not reserve space for ObjectStartArray"); } + MemTracker::record_virtual_memory_type((address)backing_store.base(), mtGC); // We do not commit any memory initially if (!_virtual_space.initialize(backing_store, 0)) { @@ -57,10 +59,14 @@ void ObjectStartArray::initialize(MemRegion reserved_region) { } _raw_base = (jbyte*)_virtual_space.low_boundary(); + if (_raw_base == NULL) { vm_exit_during_initialization("Could not get raw_base address"); } + MemTracker::record_virtual_memory_type((address)_raw_base, mtGC); + + _offset_base = _raw_base - (size_t(reserved_region.start()) >> block_shift); _covered_region.set_start(reserved_region.start()); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp index cea680b58b1..cbd671a06c4 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.hpp @@ -35,7 +35,7 @@ // covered region. // -class ObjectStartArray : public CHeapObj { +class ObjectStartArray : public CHeapObj { friend class VerifyObjectStartArrayClosure; private: diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp index 4496a6987de..44ddcba440f 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp @@ -29,6 +29,7 @@ #include "oops/oop.inline.hpp" #include "runtime/os.hpp" #include "utilities/bitMap.inline.hpp" +#include "services/memTracker.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" #endif @@ -61,6 +62,9 @@ ParMarkBitMap::initialize(MemRegion covered_region) ReservedSpace rs(bytes, rs_align, rs_align > 0); os::trace_page_sizes("par bitmap", raw_bytes, raw_bytes, page_sz, rs.base(), rs.size()); + + MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); + _virtual_space = new PSVirtualSpace(rs, page_sz); if (_virtual_space != NULL && _virtual_space->expand_by(bytes)) { _region_start = covered_region.start(); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp index e6a07310dbf..9523b7923f6 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.hpp @@ -32,7 +32,7 @@ class oopDesc; class ParMarkBitMapClosure; -class ParMarkBitMap: public CHeapObj +class ParMarkBitMap: public CHeapObj { public: typedef BitMap::idx_t idx_t; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp index 9a8848d5399..a1031a76a61 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp @@ -40,6 +40,7 @@ #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" #include "runtime/vmThread.hpp" +#include "services/memTracker.hpp" #include "utilities/vmError.hpp" PSYoungGen* ParallelScavengeHeap::_young_gen = NULL; @@ -161,6 +162,8 @@ jint ParallelScavengeHeap::initialize() { } } + MemTracker::record_virtual_memory_type((address)heap_rs.base(), mtJavaHeap); + os::trace_page_sizes("ps perm", pg_min_size, pg_max_size, pg_page_sz, heap_rs.base(), pg_max_size); os::trace_page_sizes("ps main", og_min_size + yg_min_size, diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp index ab4ad84796b..fc66dcf52a9 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp @@ -81,14 +81,14 @@ void ParCompactionManager::initialize(ParMarkBitMap* mbm) { uint parallel_gc_threads = PSParallelCompact::gc_task_manager()->workers(); assert(_manager_array == NULL, "Attempt to initialize twice"); - _manager_array = NEW_C_HEAP_ARRAY(ParCompactionManager*, parallel_gc_threads+1 ); + _manager_array = NEW_C_HEAP_ARRAY(ParCompactionManager*, parallel_gc_threads+1, mtGC); guarantee(_manager_array != NULL, "Could not allocate manager_array"); _region_list = NEW_C_HEAP_ARRAY(RegionTaskQueue*, - parallel_gc_threads+1); + parallel_gc_threads+1, mtGC); guarantee(_region_list != NULL, "Could not initialize promotion manager"); - _recycled_stack_index = NEW_C_HEAP_ARRAY(uint, parallel_gc_threads); + _recycled_stack_index = NEW_C_HEAP_ARRAY(uint, parallel_gc_threads, mtGC); // parallel_gc-threads + 1 to be consistent with the number of // compaction managers. diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp index a864ac8edf1..73849bebaaf 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp @@ -41,7 +41,7 @@ class ObjectStartArray; class ParallelCompactData; class ParMarkBitMap; -class ParCompactionManager : public CHeapObj { +class ParCompactionManager : public CHeapObj { friend class ParallelTaskTerminator; friend class ParMarkBitMap; friend class PSParallelCompact; @@ -66,8 +66,8 @@ class ParCompactionManager : public CHeapObj { private: // 32-bit: 4K * 8 = 32KiB; 64-bit: 8K * 16 = 128KiB #define QUEUE_SIZE (1 << NOT_LP64(12) LP64_ONLY(13)) - typedef OverflowTaskQueue ObjArrayTaskQueue; - typedef GenericTaskQueueSet ObjArrayTaskQueueSet; + typedef OverflowTaskQueue ObjArrayTaskQueue; + typedef GenericTaskQueueSet ObjArrayTaskQueueSet; #undef QUEUE_SIZE static ParCompactionManager** _manager_array; @@ -78,7 +78,7 @@ class ParCompactionManager : public CHeapObj { static PSOldGen* _old_gen; private: - OverflowTaskQueue _marking_stack; + OverflowTaskQueue _marking_stack; ObjArrayTaskQueue _objarray_stack; // Is there a way to reuse the _marking_stack for the @@ -110,8 +110,8 @@ private: // popped. If -1, there has not been any entry popped. static int _recycled_bottom; - Stack _revisit_klass_stack; - Stack _revisit_mdo_stack; + Stack _revisit_klass_stack; + Stack _revisit_mdo_stack; static ParMarkBitMap* _mark_bitmap; @@ -126,7 +126,7 @@ private: protected: // Array of tasks. Needed by the ParallelTaskTerminator. static RegionTaskQueueSet* region_array() { return _region_array; } - OverflowTaskQueue* marking_stack() { return &_marking_stack; } + OverflowTaskQueue* marking_stack() { return &_marking_stack; } // Pushes onto the marking stack. If the marking stack is full, // pushes onto the overflow stack. @@ -175,8 +175,8 @@ private: bool should_update(); bool should_copy(); - Stack* revisit_klass_stack() { return &_revisit_klass_stack; } - Stack* revisit_mdo_stack() { return &_revisit_mdo_stack; } + Stack* revisit_klass_stack() { return &_revisit_klass_stack; } + Stack* revisit_mdo_stack() { return &_revisit_mdo_stack; } // Save for later processing. Must not fail. inline void push(oop obj) { _marking_stack.push(obj); } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp index 67378de145e..ccb4298f883 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psGenerationCounters.cpp @@ -40,7 +40,7 @@ PSGenerationCounters::PSGenerationCounters(const char* name, const char* cns = PerfDataManager::name_space("generation", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp index 9d721d61bc4..ae92f3690fe 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp @@ -34,7 +34,7 @@ class ObjectStartArray; -class PSMarkSweepDecorator: public CHeapObj { +class PSMarkSweepDecorator: public CHeapObj { private: static PSMarkSweepDecorator* _destination_decorator; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp index ce45376f01e..c07b381bc62 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp @@ -34,7 +34,7 @@ class PSMarkSweepDecorator; -class PSOldGen : public CHeapObj { +class PSOldGen : public CHeapObj { friend class VMStructs; friend class PSPromotionManager; // Uses the cas_allocate methods friend class ParallelScavengeHeap; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp index 8e7c74e4495..2633197b067 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp @@ -53,6 +53,7 @@ #include "runtime/vmThread.hpp" #include "services/management.hpp" #include "services/memoryService.hpp" +#include "services/memTracker.hpp" #include "utilities/events.hpp" #include "utilities/stack.inline.hpp" @@ -405,6 +406,9 @@ ParallelCompactData::create_vspace(size_t count, size_t element_size) ReservedSpace rs(bytes, rs_align, rs_align > 0); os::trace_page_sizes("par compact", raw_bytes, raw_bytes, page_sz, rs.base(), rs.size()); + + MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); + PSVirtualSpace* vspace = new PSVirtualSpace(rs, page_sz); if (vspace != 0) { if (vspace->expand_by(bytes)) { @@ -2732,7 +2736,7 @@ PSParallelCompact::follow_weak_klass_links() { for (uint i = 0; i < ParallelGCThreads + 1; i++) { ParCompactionManager* cm = ParCompactionManager::manager_array(i); KeepAliveClosure keep_alive_closure(cm); - Stack* const rks = cm->revisit_klass_stack(); + Stack* const rks = cm->revisit_klass_stack(); if (PrintRevisitStats) { gclog_or_tty->print_cr("Revisit klass stack[%u] length = " SIZE_FORMAT, i, rks->size()); @@ -2765,7 +2769,7 @@ void PSParallelCompact::follow_mdo_weak_refs() { } for (uint i = 0; i < ParallelGCThreads + 1; i++) { ParCompactionManager* cm = ParCompactionManager::manager_array(i); - Stack* rms = cm->revisit_mdo_stack(); + Stack* rms = cm->revisit_mdo_stack(); if (PrintRevisitStats) { gclog_or_tty->print_cr("Revisit MDO stack[%u] size = " SIZE_FORMAT, i, rms->size()); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp index fd6a7bf561b..e11ce406eec 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionLAB.hpp @@ -36,7 +36,7 @@ class ObjectStartArray; -class PSPromotionLAB : public CHeapObj { +class PSPromotionLAB : public CHeapObj { protected: static size_t filler_header_size; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp index f7249690539..b3f91d51f99 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp @@ -45,7 +45,7 @@ void PSPromotionManager::initialize() { _young_space = heap->young_gen()->to_space(); assert(_manager_array == NULL, "Attempt to initialize twice"); - _manager_array = NEW_C_HEAP_ARRAY(PSPromotionManager*, ParallelGCThreads+1 ); + _manager_array = NEW_C_HEAP_ARRAY(PSPromotionManager*, ParallelGCThreads+1, mtGC); guarantee(_manager_array != NULL, "Could not initialize promotion manager"); _stack_array_depth = new OopStarTaskQueueSet(ParallelGCThreads); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp index 360640eba07..0e429edc660 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.hpp @@ -49,7 +49,7 @@ class MutableSpace; class PSOldGen; class ParCompactionManager; -class PSPromotionManager : public CHeapObj { +class PSPromotionManager : public CHeapObj { friend class PSScavenge; friend class PSRefProcTaskExecutor; private: @@ -77,7 +77,7 @@ class PSPromotionManager : public CHeapObj { bool _old_gen_is_full; OopStarTaskQueue _claimed_stack_depth; - OverflowTaskQueue _claimed_stack_breadth; + OverflowTaskQueue _claimed_stack_breadth; bool _totally_drain; uint _target_stack_size; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp index 65ece052d16..38d74422deb 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp @@ -62,8 +62,8 @@ bool PSScavenge::_survivor_overflow = false; int PSScavenge::_tenuring_threshold = 0; HeapWord* PSScavenge::_young_generation_boundary = NULL; elapsedTimer PSScavenge::_accumulated_time; -Stack PSScavenge::_preserved_mark_stack; -Stack PSScavenge::_preserved_oop_stack; +Stack PSScavenge::_preserved_mark_stack; +Stack PSScavenge::_preserved_oop_stack; CollectorCounters* PSScavenge::_counters = NULL; bool PSScavenge::_promotion_failed = false; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp index 2ff201e4e8b..25416d01141 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp @@ -71,8 +71,8 @@ class PSScavenge: AllStatic { static HeapWord* _young_generation_boundary; // The lowest address possible for the young_gen. // This is used to decide if an oop should be scavenged, // cards should be marked, etc. - static Stack _preserved_mark_stack; // List of marks to be restored after failed promotion - static Stack _preserved_oop_stack; // List of oops that need their mark restored. + static Stack _preserved_mark_stack; // List of marks to be restored after failed promotion + static Stack _preserved_oop_stack; // List of oops that need their mark restored. static CollectorCounters* _counters; // collector performance counters static bool _promotion_failed; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp index da452cab0dc..b90ed979b4e 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psVirtualspace.hpp @@ -32,7 +32,7 @@ // VirtualSpace is data structure for committing a previously reserved address // range in smaller chunks. -class PSVirtualSpace : public CHeapObj { +class PSVirtualSpace : public CHeapObj { friend class VMStructs; protected: // The space is committed/uncommited in chunks of size _alignment. The diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp index b5a2a14bbbf..7f1c297cc58 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp @@ -33,7 +33,7 @@ class PSMarkSweepDecorator; -class PSYoungGen : public CHeapObj { +class PSYoungGen : public CHeapObj { friend class VMStructs; friend class ParallelScavengeHeap; friend class AdjoiningGenerations; diff --git a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp index dd1895e9e06..4becadce84b 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.hpp @@ -38,7 +38,7 @@ class elapsedTimer; class CollectorPolicy; -class AdaptiveSizePolicy : public CHeapObj { +class AdaptiveSizePolicy : public CHeapObj { friend class GCAdaptivePolicyCounters; friend class PSGCAdaptivePolicyCounters; friend class CMSGCAdaptivePolicyCounters; diff --git a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp index e6820723007..2319ca1a7a2 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp @@ -37,7 +37,7 @@ CSpaceCounters::CSpaceCounters(const char* name, int ordinal, size_t max_size, const char* cns = PerfDataManager::name_space(gc->name_space(), "space", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp index d4a860eb842..c113a3338fd 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp @@ -32,7 +32,7 @@ // A CSpaceCounters is a holder class for performance counters // that track a space; -class CSpaceCounters: public CHeapObj { +class CSpaceCounters: public CHeapObj { friend class VMStructs; private: @@ -52,7 +52,7 @@ class CSpaceCounters: public CHeapObj { ContiguousSpace* s, GenerationCounters* gc); ~CSpaceCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtInternal); } inline void update_capacity() { diff --git a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp index 91dad5e66e1..d5aff5c5d09 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.cpp @@ -34,7 +34,7 @@ CollectorCounters::CollectorCounters(const char* name, int ordinal) { const char* cns = PerfDataManager::name_space("collector", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp index b793f7b24db..52eb44396ad 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/collectorCounters.hpp @@ -30,7 +30,7 @@ // CollectorCounters is a holder class for performance counters // that track a collector -class CollectorCounters: public CHeapObj { +class CollectorCounters: public CHeapObj { friend class VMStructs; private: @@ -50,7 +50,7 @@ class CollectorCounters: public CHeapObj { CollectorCounters(const char* name, int ordinal); ~CollectorCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } inline PerfCounter* invocation_counter() const { return _invocations; } diff --git a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp index 3d95950e834..00a96703d57 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.cpp @@ -41,7 +41,7 @@ GSpaceCounters::GSpaceCounters(const char* name, int ordinal, size_t max_size, const char* cns = PerfDataManager::name_space(gc->name_space(), "space", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp index 85764c4f743..8b901e2e9e0 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gSpaceCounters.hpp @@ -34,7 +34,7 @@ // A GSpaceCounter is a holder class for performance counters // that track a space; -class GSpaceCounters: public CHeapObj { +class GSpaceCounters: public CHeapObj { friend class VMStructs; private: @@ -54,7 +54,7 @@ class GSpaceCounters: public CHeapObj { GenerationCounters* gc, bool sampled=true); ~GSpaceCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } inline void update_capacity() { diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp index 6d4494c0f4d..10a7bac5144 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gcPolicyCounters.hpp @@ -30,7 +30,7 @@ // GCPolicyCounters is a holder class for performance counters // that track a generation -class GCPolicyCounters: public CHeapObj { +class GCPolicyCounters: public CHeapObj { friend class VMStructs; private: diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp b/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp index 070300e9b1a..af16ca63ecf 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gcStats.hpp @@ -27,7 +27,7 @@ #include "gc_implementation/shared/gcUtil.hpp" -class GCStats : public CHeapObj { +class GCStats : public CHeapObj { protected: // Avg amount promoted; used for avoiding promotion undo // This class does not update deviations if the sample is zero. diff --git a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp b/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp index 86daba64c3f..ba97f7cfd3a 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp @@ -43,7 +43,7 @@ // // This serves as our best estimate of a future unknown. // -class AdaptiveWeightedAverage : public CHeapObj { +class AdaptiveWeightedAverage : public CHeapObj { private: float _average; // The last computed average unsigned _sample_count; // How often we've sampled this average @@ -146,7 +146,7 @@ class AdaptivePaddedAverage : public AdaptiveWeightedAverage { // Placement support void* operator new(size_t ignored, void* p) { return p; } // Allocator - void* operator new(size_t size) { return CHeapObj::operator new(size); } + void* operator new(size_t size) { return CHeapObj::operator new(size); } // Accessor float padded_average() const { return _padded_avg; } @@ -192,7 +192,7 @@ public: // equation. // y = intercept + slope * x -class LinearLeastSquareFit : public CHeapObj { +class LinearLeastSquareFit : public CHeapObj { double _sum_x; // sum of all independent data points x double _sum_x_squared; // sum of all independent data points x**2 double _sum_y; // sum of all dependent data points y diff --git a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp index 68ab6ffc17e..8cbfac19bee 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.cpp @@ -35,7 +35,7 @@ void GenerationCounters::initialize(const char* name, int ordinal, int spaces, const char* cns = PerfDataManager::name_space("generation", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp index f399b955819..78c00769101 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/generationCounters.hpp @@ -31,7 +31,7 @@ // A GenerationCounter is a holder class for performance counters // that track a generation -class GenerationCounters: public CHeapObj { +class GenerationCounters: public CHeapObj { friend class VMStructs; private: @@ -69,7 +69,7 @@ private: VirtualSpace* v); ~GenerationCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } virtual void update_all(); diff --git a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp index 17a69fa832e..cc4cccb3bdc 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.cpp @@ -40,7 +40,7 @@ HSpaceCounters::HSpaceCounters(const char* name, const char* cns = PerfDataManager::name_space(gc->name_space(), "space", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp index a55d443a91f..d33a103fb32 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/hSpaceCounters.hpp @@ -37,7 +37,7 @@ class HeapSpaceUsedHelper; class G1SpaceMonitoringSupport; -class HSpaceCounters: public CHeapObj { +class HSpaceCounters: public CHeapObj { friend class VMStructs; private: @@ -55,7 +55,7 @@ class HSpaceCounters: public CHeapObj { size_t initial_capacity, GenerationCounters* gc); ~HSpaceCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } inline void update_capacity(size_t v) { diff --git a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp b/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp index 7d6be0d9f85..6152e64e4c9 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp @@ -33,7 +33,7 @@ // Invariant: bottom() and end() are on page_size boundaries and // bottom() <= end() -class ImmutableSpace: public CHeapObj { +class ImmutableSpace: public CHeapObj { friend class VMStructs; protected: HeapWord* _bottom; diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp b/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp index 584c24c821a..77678293653 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp @@ -30,13 +30,13 @@ #include "oops/objArrayKlass.inline.hpp" #include "oops/oop.inline.hpp" -Stack MarkSweep::_marking_stack; -Stack MarkSweep::_revisit_mdo_stack; -Stack MarkSweep::_revisit_klass_stack; -Stack MarkSweep::_objarray_stack; +Stack MarkSweep::_marking_stack; +Stack MarkSweep::_revisit_mdo_stack; +Stack MarkSweep::_revisit_klass_stack; +Stack MarkSweep::_objarray_stack; -Stack MarkSweep::_preserved_oop_stack; -Stack MarkSweep::_preserved_mark_stack; +Stack MarkSweep::_preserved_oop_stack; +Stack MarkSweep::_preserved_mark_stack; size_t MarkSweep::_preserved_count = 0; size_t MarkSweep::_preserved_count_max = 0; PreservedMark* MarkSweep::_preserved_marks = NULL; @@ -166,7 +166,7 @@ void MarkSweep::adjust_marks() { } // deal with the overflow stack - StackIterator iter(_preserved_oop_stack); + StackIterator iter(_preserved_oop_stack); while (!iter.is_empty()) { oop* p = iter.next_addr(); adjust_pointer(p); diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp b/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp index 19bee0ed34e..4decbddc7fd 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp @@ -122,16 +122,16 @@ class MarkSweep : AllStatic { // protected: // Traversal stacks used during phase1 - static Stack _marking_stack; - static Stack _objarray_stack; + static Stack _marking_stack; + static Stack _objarray_stack; // Stack for live klasses to revisit at end of marking phase - static Stack _revisit_klass_stack; + static Stack _revisit_klass_stack; // Set (stack) of MDO's to revisit at end of marking phase - static Stack _revisit_mdo_stack; + static Stack _revisit_mdo_stack; // Space for storing/restoring mark word - static Stack _preserved_mark_stack; - static Stack _preserved_oop_stack; + static Stack _preserved_mark_stack; + static Stack _preserved_oop_stack; static size_t _preserved_count; static size_t _preserved_count_max; static PreservedMark* _preserved_marks; diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp index f0f6a49d958..d930b00674b 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp @@ -43,7 +43,7 @@ MutableNUMASpace::MutableNUMASpace(size_t alignment) : MutableSpace(alignment) { - _lgrp_spaces = new (ResourceObj::C_HEAP) GrowableArray(0, true); + _lgrp_spaces = new (ResourceObj::C_HEAP, mtGC) GrowableArray(0, true); _page_size = os::vm_page_size(); _adaptation_cycles = 0; _samples_count = 0; @@ -231,7 +231,7 @@ bool MutableNUMASpace::update_layout(bool force) { if (force || changed) { // Compute lgrp intersection. Add/remove spaces. int lgrp_limit = (int)os::numa_get_groups_num(); - int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit); + int *lgrp_ids = NEW_C_HEAP_ARRAY(int, lgrp_limit, mtGC); int lgrp_num = (int)os::numa_get_leaf_groups(lgrp_ids, lgrp_limit); assert(lgrp_num > 0, "There should be at least one locality group"); // Add new spaces for the new nodes @@ -265,7 +265,7 @@ bool MutableNUMASpace::update_layout(bool force) { } } - FREE_C_HEAP_ARRAY(int, lgrp_ids); + FREE_C_HEAP_ARRAY(int, lgrp_ids, mtGC); if (changed) { for (JavaThread *thread = Threads::first(); thread; thread = thread->next()) { diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp index db7207cc24b..8b8f8d65e21 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp @@ -63,7 +63,7 @@ class MutableNUMASpace : public MutableSpace { friend class VMStructs; - class LGRPSpace : public CHeapObj { + class LGRPSpace : public CHeapObj { int _lgrp_id; MutableSpace* _space; MemRegion _invalid_region; diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp b/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp index a5815c921cd..44fc6e16b70 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.cpp @@ -39,7 +39,7 @@ SpaceCounters::SpaceCounters(const char* name, int ordinal, size_t max_size, const char* cns = PerfDataManager::name_space(gc->name_space(), "space", ordinal); - _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1); + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC); strcpy(_name_space, cns); const char* cname = PerfDataManager::counter_name(_name_space, "name"); diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp b/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp index f75a9f26c1e..1369ee0c313 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/spaceCounters.hpp @@ -35,7 +35,7 @@ // A SpaceCounter is a holder class for performance counters // that track a space; -class SpaceCounters: public CHeapObj { +class SpaceCounters: public CHeapObj { friend class VMStructs; private: @@ -55,7 +55,7 @@ class SpaceCounters: public CHeapObj { MutableSpace* m, GenerationCounters* gc); ~SpaceCounters() { - if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space); + if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtGC); } inline void update_capacity() { diff --git a/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp b/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp index c41a5eb591b..513735ddf08 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/spaceDecorator.hpp @@ -70,7 +70,7 @@ class SpaceDecorator: public AllStatic { // These subclasses abstract the differences in the types of spaces used // by each heap. -class SpaceMangler: public CHeapObj { +class SpaceMangler: public CHeapObj { friend class VMStructs; // High water mark for allocations. Typically, the space above diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp index 105e1ea8f24..be42500031d 100644 --- a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp +++ b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp @@ -74,7 +74,7 @@ class GCHeapLog : public EventLogBase { // G1CollectedHeap // ParallelScavengeHeap // -class CollectedHeap : public CHeapObj { +class CollectedHeap : public CHeapObj { friend class VMStructs; friend class IsGCActiveMark; // Block structured external access to _is_gc_active friend class constantPoolCacheKlass; // allocate() method inserts is_conc_safe diff --git a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp index 6f5511f9fcc..aa1b0adab4d 100644 --- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp +++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -375,7 +375,6 @@ IRT_ENTRY(address, InterpreterRuntime::exception_handler_for_exception(JavaThrea Handle h_exception(thread, exception); methodHandle h_method (thread, method(thread)); constantPoolHandle h_constants(thread, h_method->constants()); - typeArrayHandle h_extable (thread, h_method->exception_table()); bool should_repeat; int handler_bci; int current_bci = bci(thread); @@ -547,23 +546,6 @@ IRT_ENTRY(void, InterpreterRuntime::resolve_get_put(JavaThread* thread, Bytecode } } - if (is_put && !is_static && klass->is_subclass_of(SystemDictionary::CallSite_klass()) && (info.name() == vmSymbols::target_name())) { - const jint direction = frame::interpreter_frame_expression_stack_direction(); - Handle call_site (THREAD, *((oop*) thread->last_frame().interpreter_frame_tos_at(-1 * direction))); - Handle method_handle(THREAD, *((oop*) thread->last_frame().interpreter_frame_tos_at( 0 * direction))); - assert(call_site ->is_a(SystemDictionary::CallSite_klass()), "must be"); - assert(method_handle->is_a(SystemDictionary::MethodHandle_klass()), "must be"); - - { - // Walk all nmethods depending on this call site. - MutexLocker mu(Compile_lock, thread); - Universe::flush_dependents_on(call_site, method_handle); - } - - // Don't allow fast path for setting CallSite.target and sub-classes. - put_code = (Bytecodes::Code) 0; - } - cache_entry(thread)->set_field( get_code, put_code, @@ -1118,8 +1100,8 @@ void SignatureHandlerLibrary::initialize() { SignatureHandlerLibrary::buffer_size); _buffer = bb->code_begin(); - _fingerprints = new(ResourceObj::C_HEAP)GrowableArray(32, true); - _handlers = new(ResourceObj::C_HEAP)GrowableArray
(32, true); + _fingerprints = new(ResourceObj::C_HEAP, mtCode)GrowableArray(32, true); + _handlers = new(ResourceObj::C_HEAP, mtCode)GrowableArray
(32, true); } address SignatureHandlerLibrary::set_handler(CodeBuffer* buffer) { diff --git a/hotspot/src/share/vm/interpreter/oopMapCache.cpp b/hotspot/src/share/vm/interpreter/oopMapCache.cpp index f5ff6f6c917..01d5753547b 100644 --- a/hotspot/src/share/vm/interpreter/oopMapCache.cpp +++ b/hotspot/src/share/vm/interpreter/oopMapCache.cpp @@ -348,7 +348,7 @@ void OopMapCacheEntry::allocate_bit_mask() { if (mask_size() > small_mask_limit) { assert(_bit_mask[0] == 0, "bit mask should be new or just flushed"); _bit_mask[0] = (intptr_t) - NEW_C_HEAP_ARRAY(uintptr_t, mask_word_size()); + NEW_C_HEAP_ARRAY(uintptr_t, mask_word_size(), mtClass); } } @@ -356,7 +356,7 @@ void OopMapCacheEntry::deallocate_bit_mask() { if (mask_size() > small_mask_limit && _bit_mask[0] != 0) { assert(!Thread::current()->resource_area()->contains((void*)_bit_mask[0]), "This bit mask should not be in the resource area"); - FREE_C_HEAP_ARRAY(uintptr_t, _bit_mask[0]); + FREE_C_HEAP_ARRAY(uintptr_t, _bit_mask[0], mtClass); debug_only(_bit_mask[0] = 0;) } } @@ -506,7 +506,7 @@ inline unsigned int OopMapCache::hash_value_for(methodHandle method, int bci) { OopMapCache::OopMapCache() : _mut(Mutex::leaf, "An OopMapCache lock", true) { - _array = NEW_C_HEAP_ARRAY(OopMapCacheEntry, _size); + _array = NEW_C_HEAP_ARRAY(OopMapCacheEntry, _size, mtClass); // Cannot call flush for initialization, since flush // will check if memory should be deallocated for(int i = 0; i < _size; i++) _array[i].initialize(); @@ -520,7 +520,7 @@ OopMapCache::~OopMapCache() { flush(); // Deallocate array NOT_PRODUCT(_total_memory_usage -= sizeof(OopMapCache) + (sizeof(OopMapCacheEntry) * _size);) - FREE_C_HEAP_ARRAY(OopMapCacheEntry, _array); + FREE_C_HEAP_ARRAY(OopMapCacheEntry, _array, mtClass); } OopMapCacheEntry* OopMapCache::entry_at(int i) const { @@ -639,9 +639,9 @@ void OopMapCache::lookup(methodHandle method, void OopMapCache::compute_one_oop_map(methodHandle method, int bci, InterpreterOopMap* entry) { // Due to the invariants above it's tricky to allocate a temporary OopMapCacheEntry on the stack - OopMapCacheEntry* tmp = NEW_C_HEAP_ARRAY(OopMapCacheEntry, 1); + OopMapCacheEntry* tmp = NEW_C_HEAP_ARRAY(OopMapCacheEntry, 1, mtClass); tmp->initialize(); tmp->fill(method, bci); entry->resource_copy(tmp); - FREE_C_HEAP_ARRAY(OopMapCacheEntry, tmp); + FREE_C_HEAP_ARRAY(OopMapCacheEntry, tmp, mtInternal); } diff --git a/hotspot/src/share/vm/interpreter/oopMapCache.hpp b/hotspot/src/share/vm/interpreter/oopMapCache.hpp index 068e4d3b982..fea9ec09ca9 100644 --- a/hotspot/src/share/vm/interpreter/oopMapCache.hpp +++ b/hotspot/src/share/vm/interpreter/oopMapCache.hpp @@ -156,7 +156,7 @@ class InterpreterOopMap: ResourceObj { #endif }; -class OopMapCache : public CHeapObj { +class OopMapCache : public CHeapObj { private: enum { _size = 32, // Use fixed size for now _probe_depth = 3 // probe depth in case of collisions diff --git a/hotspot/src/share/vm/libadt/set.cpp b/hotspot/src/share/vm/libadt/set.cpp index 1849b13b294..c475a21f700 100644 --- a/hotspot/src/share/vm/libadt/set.cpp +++ b/hotspot/src/share/vm/libadt/set.cpp @@ -71,7 +71,7 @@ char *Set::setstr() const set.Sort(); // Sort elements for in-order retrieval uint len = 128; // Total string space - char *buf = NEW_C_HEAP_ARRAY(char,len);// Some initial string space + char *buf = NEW_C_HEAP_ARRAY(char,len, mtCompiler);// Some initial string space register char *s = buf; // Current working string pointer *s++ = '{'; @@ -86,7 +86,7 @@ char *Set::setstr() const if( buf+len-s < 25 ) { // Generous trailing space for upcoming numbers int offset = (int)(s-buf);// Not enuf space; compute offset into buffer len <<= 1; // Double string size - buf = REALLOC_C_HEAP_ARRAY(char,buf,len); // Reallocate doubled size + buf = REALLOC_C_HEAP_ARRAY(char,buf,len, mtCompiler); // Reallocate doubled size s = buf+offset; // Get working pointer into new bigger buffer } if( lo != (uint)-2 ) { // Startup? No! Then print previous range. @@ -101,7 +101,7 @@ char *Set::setstr() const if( buf+len-s < 25 ) { // Generous trailing space for upcoming numbers int offset = (int)(s-buf);// Not enuf space; compute offset into buffer len <<= 1; // Double string size - buf = (char*)ReallocateHeap(buf,len); // Reallocate doubled size + buf = (char*)ReallocateHeap(buf,len, mtCompiler); // Reallocate doubled size s = buf+offset; // Get working pointer into new bigger buffer } if( lo != hi ) sprintf(s,"%d-%d}",lo,hi); diff --git a/hotspot/src/share/vm/libadt/vectset.cpp b/hotspot/src/share/vm/libadt/vectset.cpp index 0042ca762fd..de7bcd81e80 100644 --- a/hotspot/src/share/vm/libadt/vectset.cpp +++ b/hotspot/src/share/vm/libadt/vectset.cpp @@ -362,7 +362,7 @@ public: }; SetI_ *VectorSet::iterate(uint &elem) const { - return new(ResourceObj::C_HEAP) VSetI_(this, elem); + return new(ResourceObj::C_HEAP, mtInternal) VSetI_(this, elem); } //============================================================================= diff --git a/hotspot/src/share/vm/memory/allocation.cpp b/hotspot/src/share/vm/memory/allocation.cpp index 0479e73378f..dfd061214f7 100644 --- a/hotspot/src/share/vm/memory/allocation.cpp +++ b/hotspot/src/share/vm/memory/allocation.cpp @@ -26,10 +26,13 @@ #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" #include "memory/resourceArea.hpp" +#include "runtime/atomic.hpp" #include "runtime/os.hpp" #include "runtime/task.hpp" #include "runtime/threadCritical.hpp" +#include "services/memTracker.hpp" #include "utilities/ostream.hpp" + #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" #endif @@ -43,32 +46,16 @@ # include "os_bsd.inline.hpp" #endif -void* CHeapObj::operator new(size_t size){ - return (void *) AllocateHeap(size, "CHeapObj-new"); -} - -void* CHeapObj::operator new (size_t size, const std::nothrow_t& nothrow_constant) { - char* p = (char*) os::malloc(size); -#ifdef ASSERT - if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p); -#endif - return p; -} - -void CHeapObj::operator delete(void* p){ - FreeHeap(p); -} - void* StackObj::operator new(size_t size) { ShouldNotCallThis(); return 0; }; void StackObj::operator delete(void* p) { ShouldNotCallThis(); }; void* _ValueObj::operator new(size_t size) { ShouldNotCallThis(); return 0; }; void _ValueObj::operator delete(void* p) { ShouldNotCallThis(); }; -void* ResourceObj::operator new(size_t size, allocation_type type) { +void* ResourceObj::operator new(size_t size, allocation_type type, MEMFLAGS flags) { address res; switch (type) { case C_HEAP: - res = (address)AllocateHeap(size, "C_Heap: ResourceOBJ"); + res = (address)AllocateHeap(size, flags, CALLER_PC); DEBUG_ONLY(set_allocation_type(res, C_HEAP);) break; case RESOURCE_AREA: @@ -184,7 +171,7 @@ bool warn_new_operator = false; // see vm_main // MT-safe pool of chunks to reduce malloc/free thrashing // NB: not using Mutex because pools are used before Threads are initialized -class ChunkPool { +class ChunkPool: public CHeapObj { Chunk* _first; // first cached Chunk; its first word points to next chunk size_t _num_chunks; // number of unused chunks in pool size_t _num_used; // number of chunks currently checked out @@ -210,14 +197,16 @@ class ChunkPool { ChunkPool(size_t size) : _size(size) { _first = NULL; _num_chunks = _num_used = 0; } // Allocate a new chunk from the pool (might expand the pool) - void* allocate(size_t bytes) { + _NOINLINE_ void* allocate(size_t bytes) { assert(bytes == _size, "bad size"); void* p = NULL; + // No VM lock can be taken inside ThreadCritical lock, so os::malloc + // should be done outside ThreadCritical lock due to NMT { ThreadCritical tc; _num_used++; p = get_first(); - if (p == NULL) p = os::malloc(bytes); } + if (p == NULL) p = os::malloc(bytes, mtChunk, CURRENT_PC); if (p == NULL) vm_exit_out_of_memory(bytes, "ChunkPool::allocate"); @@ -238,28 +227,34 @@ class ChunkPool { // Prune the pool void free_all_but(size_t n) { + Chunk* cur = NULL; + Chunk* next; + { // if we have more than n chunks, free all of them ThreadCritical tc; if (_num_chunks > n) { // free chunks at end of queue, for better locality - Chunk* cur = _first; + cur = _first; for (size_t i = 0; i < (n - 1) && cur != NULL; i++) cur = cur->next(); if (cur != NULL) { - Chunk* next = cur->next(); + next = cur->next(); cur->set_next(NULL); cur = next; - // Free all remaining chunks - while(cur != NULL) { - next = cur->next(); - os::free(cur); - _num_chunks--; - cur = next; + _num_chunks = n; } } } - } + + // Free all remaining chunks, outside of ThreadCritical + // to avoid deadlock with NMT + while(cur != NULL) { + next = cur->next(); + os::free(cur, mtChunk); + cur = next; + } + } // Accessors to preallocated pool's static ChunkPool* large_pool() { assert(_large_pool != NULL, "must be initialized"); return _large_pool; } @@ -323,7 +318,7 @@ void* Chunk::operator new(size_t requested_size, size_t length) { case Chunk::medium_size: return ChunkPool::medium_pool()->allocate(bytes); case Chunk::init_size: return ChunkPool::small_pool()->allocate(bytes); default: { - void *p = os::malloc(bytes); + void *p = os::malloc(bytes, mtChunk, CALLER_PC); if (p == NULL) vm_exit_out_of_memory(bytes, "Chunk::new"); return p; @@ -337,7 +332,7 @@ void Chunk::operator delete(void* p) { case Chunk::size: ChunkPool::large_pool()->free(c); break; case Chunk::medium_size: ChunkPool::medium_pool()->free(c); break; case Chunk::init_size: ChunkPool::small_pool()->free(c); break; - default: os::free(c); + default: os::free(c, mtChunk); } } @@ -374,6 +369,7 @@ void Chunk::start_chunk_pool_cleaner_task() { } //------------------------------Arena------------------------------------------ +NOT_PRODUCT(volatile jint Arena::_instance_count = 0;) Arena::Arena(size_t init_size) { size_t round_size = (sizeof (char *)) - 1; @@ -382,6 +378,7 @@ Arena::Arena(size_t init_size) { _hwm = _chunk->bottom(); // Save the cached hwm, max _max = _chunk->top(); set_size_in_bytes(init_size); + NOT_PRODUCT(Atomic::inc(&_instance_count);) } Arena::Arena() { @@ -389,12 +386,15 @@ Arena::Arena() { _hwm = _chunk->bottom(); // Save the cached hwm, max _max = _chunk->top(); set_size_in_bytes(Chunk::init_size); + NOT_PRODUCT(Atomic::inc(&_instance_count);) } Arena::Arena(Arena *a) : _chunk(a->_chunk), _hwm(a->_hwm), _max(a->_max), _first(a->_first) { set_size_in_bytes(a->size_in_bytes()); + NOT_PRODUCT(Atomic::inc(&_instance_count);) } + Arena *Arena::move_contents(Arena *copy) { copy->destruct_contents(); copy->_chunk = _chunk; @@ -409,6 +409,42 @@ Arena *Arena::move_contents(Arena *copy) { Arena::~Arena() { destruct_contents(); + NOT_PRODUCT(Atomic::dec(&_instance_count);) +} + +void* Arena::operator new(size_t size) { + assert(false, "Use dynamic memory type binding"); + return NULL; +} + +void* Arena::operator new (size_t size, const std::nothrow_t& nothrow_constant) { + assert(false, "Use dynamic memory type binding"); + return NULL; +} + + // dynamic memory type binding +void* Arena::operator new(size_t size, MEMFLAGS flags) { +#ifdef ASSERT + void* p = (void*)AllocateHeap(size, flags|otArena, CALLER_PC); + if (PrintMallocFree) trace_heap_malloc(size, "Arena-new", p); + return p; +#else + return (void *) AllocateHeap(size, flags|otArena, CALLER_PC); +#endif +} + +void* Arena::operator new(size_t size, const std::nothrow_t& nothrow_constant, MEMFLAGS flags) { +#ifdef ASSERT + void* p = os::malloc(size, flags|otArena, CALLER_PC); + if (PrintMallocFree) trace_heap_malloc(size, "Arena-new", p); + return p; +#else + return os::malloc(size, flags|otArena, CALLER_PC); +#endif +} + +void Arena::operator delete(void* p) { + FreeHeap(p); } // Destroy this arenas contents and reset to empty @@ -421,6 +457,14 @@ void Arena::destruct_contents() { reset(); } +// This is high traffic method, but many calls actually don't +// change the size +void Arena::set_size_in_bytes(size_t size) { + if (_size_in_bytes != size) { + _size_in_bytes = size; + MemTracker::record_arena_size((address)this, size); + } +} // Total of all Chunks in arena size_t Arena::used() const { @@ -448,7 +492,6 @@ void* Arena::grow( size_t x ) { if (_chunk == NULL) { signal_out_of_memory(len * Chunk::aligned_overhead_size(), "Arena::grow"); } - if (k) k->set_next(_chunk); // Append new chunk to end of linked list else _first = _chunk; _hwm = _chunk->bottom(); // Save the cached hwm, max @@ -538,7 +581,7 @@ void* Arena::malloc(size_t size) { assert(UseMallocOnly, "shouldn't call"); // use malloc, but save pointer in res. area for later freeing char** save = (char**)internal_malloc_4(sizeof(char*)); - return (*save = (char*)os::malloc(size)); + return (*save = (char*)os::malloc(size, mtChunk)); } // for debugging with UseMallocOnly diff --git a/hotspot/src/share/vm/memory/allocation.hpp b/hotspot/src/share/vm/memory/allocation.hpp index 4c2f1e8c836..4f0338af983 100644 --- a/hotspot/src/share/vm/memory/allocation.hpp +++ b/hotspot/src/share/vm/memory/allocation.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,6 +40,18 @@ #define ARENA_ALIGN_MASK (~((size_t)ARENA_ALIGN_M1)) #define ARENA_ALIGN(x) ((((size_t)(x)) + ARENA_ALIGN_M1) & ARENA_ALIGN_MASK) + +// noinline attribute +#ifdef _WINDOWS + #define _NOINLINE_ __declspec(noinline) +#else + #if __GNUC__ < 3 // gcc 2.x does not support noinline attribute + #define _NOINLINE_ + #else + #define _NOINLINE_ __attribute__ ((noinline)) + #endif +#endif + // All classes in the virtual machine must be subclassed // by one of the following allocation classes: // @@ -98,12 +110,72 @@ class AllocatedObj { }; #endif -class CHeapObj ALLOCATION_SUPER_CLASS_SPEC { + +/* + * MemoryType bitmap layout: + * | 16 15 14 13 12 11 10 09 | 08 07 06 05 | 04 03 02 01 | + * | memory type | object | reserved | + * | | type | | + */ +enum MemoryType { + // Memory type by sub systems. It occupies lower byte. + mtNone = 0x0000, // undefined + mtClass = 0x0100, // memory class for Java classes + mtThread = 0x0200, // memory for thread objects + mtThreadStack = 0x0300, + mtCode = 0x0400, // memory for generated code + mtGC = 0x0500, // memory for GC + mtCompiler = 0x0600, // memory for compiler + mtInternal = 0x0700, // memory used by VM, but does not belong to + // any of above categories, and not used for + // native memory tracking + mtOther = 0x0800, // memory not used by VM + mtSymbol = 0x0900, // symbol + mtNMT = 0x0A00, // memory used by native memory tracking + mtChunk = 0x0B00, // chunk that holds content of arenas + mtJavaHeap = 0x0C00, // Java heap + mtDontTrack = 0x0D00, // memory we donot or cannot track + mt_number_of_types = 0x000C, // number of memory types + mt_masks = 0x7F00, + + // object type mask + otArena = 0x0010, // an arena object + otNMTRecorder = 0x0020, // memory recorder object + ot_masks = 0x00F0 +}; + +#define IS_MEMORY_TYPE(flags, type) ((flags & mt_masks) == type) +#define HAS_VALID_MEMORY_TYPE(flags)((flags & mt_masks) != mtNone) +#define FLAGS_TO_MEMORY_TYPE(flags) (flags & mt_masks) + +#define IS_ARENA_OBJ(flags) ((flags & ot_masks) == otArena) +#define IS_NMT_RECORDER(flags) ((flags & ot_masks) == otNMTRecorder) +#define NMT_CAN_TRACK(flags) (!IS_NMT_RECORDER(flags) && !(IS_MEMORY_TYPE(flags, mtDontTrack))) + +typedef unsigned short MEMFLAGS; + +extern bool NMT_track_callsite; + +// debug build does not inline +#if defined(_DEBUG_) + #define CURRENT_PC (NMT_track_callsite ? os::get_caller_pc(1) : 0) + #define CALLER_PC (NMT_track_callsite ? os::get_caller_pc(2) : 0) + #define CALLER_CALLER_PC (NMT_track_callsite ? os::get_caller_pc(3) : 0) +#else + #define CURRENT_PC (NMT_track_callsite? os::get_caller_pc(0) : 0) + #define CALLER_PC (NMT_track_callsite ? os::get_caller_pc(1) : 0) + #define CALLER_CALLER_PC (NMT_track_callsite ? os::get_caller_pc(2) : 0) +#endif + + + +template class CHeapObj ALLOCATION_SUPER_CLASS_SPEC { public: - void* operator new(size_t size); - void* operator new (size_t size, const std::nothrow_t& nothrow_constant); + _NOINLINE_ void* operator new(size_t size, address caller_pc = 0); + _NOINLINE_ void* operator new (size_t size, const std::nothrow_t& nothrow_constant, + address caller_pc = 0); + void operator delete(void* p); - void* new_array(size_t size); }; // Base class for objects allocated on the stack only. @@ -150,7 +222,7 @@ class AllStatic { //------------------------------Chunk------------------------------------------ // Linked list of raw memory chunks -class Chunk: public CHeapObj { +class Chunk: CHeapObj { friend class VMStructs; protected: @@ -197,7 +269,7 @@ class Chunk: public CHeapObj { //------------------------------Arena------------------------------------------ // Fast allocation of memory -class Arena: public CHeapObj { +class Arena : public CHeapObj { protected: friend class ResourceMark; friend class HandleMark; @@ -208,7 +280,8 @@ protected: Chunk *_chunk; // current chunk char *_hwm, *_max; // High water mark and max in current chunk void* grow(size_t x); // Get a new Chunk of at least size x - NOT_PRODUCT(size_t _size_in_bytes;) // Size of arena (used for memory usage tracing) + size_t _size_in_bytes; // Size of arena (used for native memory tracking) + NOT_PRODUCT(static julong _bytes_allocated;) // total #bytes allocated since start friend class AllocStats; debug_only(void* malloc(size_t size);) @@ -231,6 +304,15 @@ protected: void destruct_contents(); char* hwm() const { return _hwm; } + // new operators + void* operator new (size_t size); + void* operator new (size_t size, const std::nothrow_t& nothrow_constant); + + // dynamic memory type tagging + void* operator new(size_t size, MEMFLAGS flags); + void* operator new(size_t size, const std::nothrow_t& nothrow_constant, MEMFLAGS flags); + void operator delete(void* p); + // Fast allocate in the arena. Common case is: pointer test + increment. void* Amalloc(size_t x) { assert(is_power_of_2(ARENA_AMALLOC_ALIGNMENT) , "should be a power of 2"); @@ -306,16 +388,20 @@ protected: size_t used() const; // Total # of bytes used - size_t size_in_bytes() const NOT_PRODUCT({ return _size_in_bytes; }) PRODUCT_RETURN0; - void set_size_in_bytes(size_t size) NOT_PRODUCT({ _size_in_bytes = size; }) PRODUCT_RETURN; + size_t size_in_bytes() const { return _size_in_bytes; }; + void set_size_in_bytes(size_t size); + static void free_malloced_objects(Chunk* chunk, char* hwm, char* max, char* hwm2) PRODUCT_RETURN; static void free_all(char** start, char** end) PRODUCT_RETURN; + // how many arena instances + NOT_PRODUCT(static volatile jint _instance_count;) private: // Reset this Arena to empty, access will trigger grow if necessary void reset(void) { _first = _chunk = NULL; _hwm = _max = NULL; + set_size_in_bytes(0); } }; @@ -373,7 +459,7 @@ class ResourceObj ALLOCATION_SUPER_CLASS_SPEC { #endif // ASSERT public: - void* operator new(size_t size, allocation_type type); + void* operator new(size_t size, allocation_type type, MEMFLAGS flags); void* operator new(size_t size, Arena *arena) { address res = (address)arena->Amalloc(size); DEBUG_ONLY(set_allocation_type(res, ARENA);) @@ -409,17 +495,28 @@ class ResourceObj ALLOCATION_SUPER_CLASS_SPEC { #define NEW_RESOURCE_OBJ(type)\ NEW_RESOURCE_ARRAY(type, 1) -#define NEW_C_HEAP_ARRAY(type, size)\ - (type*) (AllocateHeap((size) * sizeof(type), XSTR(type) " in " __FILE__)) +#define NEW_C_HEAP_ARRAY(type, size, memflags)\ + (type*) (AllocateHeap((size) * sizeof(type), memflags)) -#define REALLOC_C_HEAP_ARRAY(type, old, size)\ - (type*) (ReallocateHeap((char*)old, (size) * sizeof(type), XSTR(type) " in " __FILE__)) +#define REALLOC_C_HEAP_ARRAY(type, old, size, memflags)\ + (type*) (ReallocateHeap((char*)old, (size) * sizeof(type), memflags)) -#define FREE_C_HEAP_ARRAY(type,old) \ - FreeHeap((char*)(old)) +#define FREE_C_HEAP_ARRAY(type,old,memflags) \ + FreeHeap((char*)(old), memflags) + +#define NEW_C_HEAP_OBJ(type, memflags)\ + NEW_C_HEAP_ARRAY(type, 1, memflags) + + +#define NEW_C_HEAP_ARRAY2(type, size, memflags, pc)\ + (type*) (AllocateHeap((size) * sizeof(type), memflags, pc)) + +#define REALLOC_C_HEAP_ARRAY2(type, old, size, memflags, pc)\ + (type*) (ReallocateHeap((char*)old, (size) * sizeof(type), memflags, pc)) + +#define NEW_C_HEAP_OBJ2(type, memflags, pc)\ + NEW_C_HEAP_ARRAY2(type, 1, memflags, pc) -#define NEW_C_HEAP_OBJ(type)\ - NEW_C_HEAP_ARRAY(type, 1) extern bool warn_new_operator; diff --git a/hotspot/src/share/vm/memory/allocation.inline.hpp b/hotspot/src/share/vm/memory/allocation.inline.hpp index 795016df838..21e8a3bc94e 100644 --- a/hotspot/src/share/vm/memory/allocation.inline.hpp +++ b/hotspot/src/share/vm/memory/allocation.inline.hpp @@ -48,33 +48,60 @@ inline void inc_stat_counter(volatile julong* dest, julong add_value) { #endif // allocate using malloc; will fail if no memory available -inline char* AllocateHeap(size_t size, const char* name = NULL) { - char* p = (char*) os::malloc(size); +inline char* AllocateHeap(size_t size, MEMFLAGS flags, address pc = 0) { + if (pc == 0) { + pc = CURRENT_PC; + } + char* p = (char*) os::malloc(size, flags, pc); #ifdef ASSERT - if (PrintMallocFree) trace_heap_malloc(size, name, p); - #else - Unused_Variable(name); + if (PrintMallocFree) trace_heap_malloc(size, "AllocateHeap", p); #endif - if (p == NULL) vm_exit_out_of_memory(size, name); + if (p == NULL) vm_exit_out_of_memory(size, "AllocateHeap"); return p; } -inline char* ReallocateHeap(char *old, size_t size, const char* name = NULL) { - char* p = (char*) os::realloc(old,size); +inline char* ReallocateHeap(char *old, size_t size, MEMFLAGS flags) { + char* p = (char*) os::realloc(old, size, flags, CURRENT_PC); #ifdef ASSERT - if (PrintMallocFree) trace_heap_malloc(size, name, p); - #else - Unused_Variable(name); + if (PrintMallocFree) trace_heap_malloc(size, "ReallocateHeap", p); #endif - if (p == NULL) vm_exit_out_of_memory(size, name); + if (p == NULL) vm_exit_out_of_memory(size, "ReallocateHeap"); return p; } -inline void FreeHeap(void* p) { +inline void FreeHeap(void* p, MEMFLAGS memflags = mtInternal) { #ifdef ASSERT if (PrintMallocFree) trace_heap_free(p); #endif - os::free(p); + os::free(p, memflags); } + +template void* CHeapObj::operator new(size_t size, + address caller_pc){ +#ifdef ASSERT + void* p = (void*)AllocateHeap(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC)); + if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p); + return p; +#else + return (void *) AllocateHeap(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC)); +#endif + } + +template void* CHeapObj::operator new (size_t size, + const std::nothrow_t& nothrow_constant, address caller_pc) { +#ifdef ASSERT + void* p = os::malloc(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC)); + if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p); + return p; +#else + return os::malloc(size, F, (caller_pc != 0 ? caller_pc : CALLER_PC)); +#endif +} + +template void CHeapObj::operator delete(void* p){ + FreeHeap(p, F); +} + + #endif // SHARE_VM_MEMORY_ALLOCATION_INLINE_HPP diff --git a/hotspot/src/share/vm/memory/barrierSet.hpp b/hotspot/src/share/vm/memory/barrierSet.hpp index d9cf3c29394..bd92616f802 100644 --- a/hotspot/src/share/vm/memory/barrierSet.hpp +++ b/hotspot/src/share/vm/memory/barrierSet.hpp @@ -31,7 +31,7 @@ // This class provides the interface between a barrier implementation and // the rest of the system. -class BarrierSet: public CHeapObj { +class BarrierSet: public CHeapObj { friend class VMStructs; public: enum Name { diff --git a/hotspot/src/share/vm/memory/blockOffsetTable.cpp b/hotspot/src/share/vm/memory/blockOffsetTable.cpp index d40965ea813..0d607db803b 100644 --- a/hotspot/src/share/vm/memory/blockOffsetTable.cpp +++ b/hotspot/src/share/vm/memory/blockOffsetTable.cpp @@ -30,6 +30,7 @@ #include "memory/universe.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" +#include "services/memTracker.hpp" ////////////////////////////////////////////////////////////////////// // BlockOffsetSharedArray @@ -44,6 +45,9 @@ BlockOffsetSharedArray::BlockOffsetSharedArray(MemRegion reserved, if (!rs.is_reserved()) { vm_exit_during_initialization("Could not reserve enough space for heap offset array"); } + + MemTracker::record_virtual_memory_type((address)rs.base(), mtGC); + if (!_vs.initialize(rs, 0)) { vm_exit_during_initialization("Could not reserve enough space for heap offset array"); } diff --git a/hotspot/src/share/vm/memory/blockOffsetTable.hpp b/hotspot/src/share/vm/memory/blockOffsetTable.hpp index 16f329bddcf..b31865c93aa 100644 --- a/hotspot/src/share/vm/memory/blockOffsetTable.hpp +++ b/hotspot/src/share/vm/memory/blockOffsetTable.hpp @@ -100,7 +100,7 @@ public: ////////////////////////////////////////////////////////////////////////// // BlockOffsetSharedArray ////////////////////////////////////////////////////////////////////////// -class BlockOffsetSharedArray: public CHeapObj { +class BlockOffsetSharedArray: public CHeapObj { friend class BlockOffsetArray; friend class BlockOffsetArrayNonContigSpace; friend class BlockOffsetArrayContigSpace; diff --git a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp index acf6413c411..496b2cbbf7d 100644 --- a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp +++ b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp @@ -33,6 +33,7 @@ #include "runtime/java.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/virtualspace.hpp" +#include "services/memTracker.hpp" #ifdef COMPILER1 #include "c1/c1_LIR.hpp" #include "c1/c1_LIRGenerator.hpp" @@ -90,6 +91,9 @@ CardTableModRefBS::CardTableModRefBS(MemRegion whole_heap, const size_t rs_align = _page_size == (size_t) os::vm_page_size() ? 0 : MAX2(_page_size, (size_t) os::vm_allocation_granularity()); ReservedSpace heap_rs(_byte_map_size, rs_align, false); + + MemTracker::record_virtual_memory_type((address)heap_rs.base(), mtGC); + os::trace_page_sizes("card table", _guard_index + 1, _guard_index + 1, _page_size, heap_rs.base(), heap_rs.size()); if (!heap_rs.is_reserved()) { @@ -113,16 +117,17 @@ CardTableModRefBS::CardTableModRefBS(MemRegion whole_heap, // Do better than this for Merlin vm_exit_out_of_memory(_page_size, "card table last card"); } + *guard_card = last_card; _lowest_non_clean = - NEW_C_HEAP_ARRAY(CardArr, max_covered_regions); + NEW_C_HEAP_ARRAY(CardArr, max_covered_regions, mtGC); _lowest_non_clean_chunk_size = - NEW_C_HEAP_ARRAY(size_t, max_covered_regions); + NEW_C_HEAP_ARRAY(size_t, max_covered_regions, mtGC); _lowest_non_clean_base_chunk_index = - NEW_C_HEAP_ARRAY(uintptr_t, max_covered_regions); + NEW_C_HEAP_ARRAY(uintptr_t, max_covered_regions, mtGC); _last_LNC_resizing_collection = - NEW_C_HEAP_ARRAY(int, max_covered_regions); + NEW_C_HEAP_ARRAY(int, max_covered_regions, mtGC); if (_lowest_non_clean == NULL || _lowest_non_clean_chunk_size == NULL || _lowest_non_clean_base_chunk_index == NULL diff --git a/hotspot/src/share/vm/memory/collectorPolicy.hpp b/hotspot/src/share/vm/memory/collectorPolicy.hpp index 7030eb7b58f..9b6b2d47c29 100644 --- a/hotspot/src/share/vm/memory/collectorPolicy.hpp +++ b/hotspot/src/share/vm/memory/collectorPolicy.hpp @@ -56,7 +56,7 @@ class GCPolicyCounters; class PermanentGenerationSpec; class MarkSweepPolicy; -class CollectorPolicy : public CHeapObj { +class CollectorPolicy : public CHeapObj { protected: PermanentGenerationSpec *_permanent_generation; GCPolicyCounters* _gc_policy_counters; diff --git a/hotspot/src/share/vm/memory/defNewGeneration.hpp b/hotspot/src/share/vm/memory/defNewGeneration.hpp index 1d5a4859041..4f959d674af 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.hpp +++ b/hotspot/src/share/vm/memory/defNewGeneration.hpp @@ -89,8 +89,8 @@ protected: // Together, these keep pairs. // They should always contain the same number of elements. - Stack _objs_with_preserved_marks; - Stack _preserved_marks_of_objs; + Stack _objs_with_preserved_marks; + Stack _preserved_marks_of_objs; // Promotion failure handling OopClosure *_promo_failure_scan_stack_closure; @@ -98,7 +98,7 @@ protected: _promo_failure_scan_stack_closure = scan_stack_closure; } - Stack _promo_failure_scan_stack; + Stack _promo_failure_scan_stack; void drain_promo_failure_scan_stack(void); bool _promo_failure_drain_in_progress; diff --git a/hotspot/src/share/vm/memory/dump.cpp b/hotspot/src/share/vm/memory/dump.cpp index e91d33135e4..f9dc8b8b9f7 100644 --- a/hotspot/src/share/vm/memory/dump.cpp +++ b/hotspot/src/share/vm/memory/dump.cpp @@ -62,8 +62,8 @@ public: // written later, increasing the likelihood that the shared page contain // the hash can be shared. // -// NOTE THAT the algorithm in StringTable::hash_string() MUST MATCH the -// algorithm in java.lang.String.hashCode(). +// NOTE THAT we have to call java_lang_String::to_hash() to match the +// algorithm in java.lang.String.toHash(). class StringHashCodeClosure: public OopClosure { private: @@ -80,7 +80,7 @@ public: oop obj = *p; if (obj->klass() == SystemDictionary::String_klass() && java_lang_String::has_hash_field()) { - int hash = java_lang_String::hash_string(obj); + int hash = java_lang_String::to_hash(obj); obj->int_field_put(hash_offset, hash); } } @@ -231,8 +231,6 @@ public: if (obj->is_constMethod()) { mark_object(obj); mark_object(constMethodOop(obj)->stackmap_data()); - // Exception tables are needed by ci code during compilation. - mark_object(constMethodOop(obj)->exception_table()); } // Mark objects referenced by klass objects which are read-only. @@ -513,7 +511,6 @@ public: for(i = 0; i < methods->length(); i++) { methodOop m = methodOop(methods->obj_at(i)); mark_and_move_for_policy(OP_favor_startup, m->constMethod(), _move_ro); - mark_and_move_for_policy(OP_favor_runtime, m->constMethod()->exception_table(), _move_ro); mark_and_move_for_policy(OP_favor_runtime, m->constMethod()->stackmap_data(), _move_ro); } diff --git a/hotspot/src/share/vm/memory/filemap.hpp b/hotspot/src/share/vm/memory/filemap.hpp index 8d239b8413e..5c03ae38874 100644 --- a/hotspot/src/share/vm/memory/filemap.hpp +++ b/hotspot/src/share/vm/memory/filemap.hpp @@ -44,7 +44,7 @@ static const int JVM_ARCH_MAX = 12; -class FileMapInfo : public CHeapObj { +class FileMapInfo : public CHeapObj { private: enum { _invalid_version = -1, diff --git a/hotspot/src/share/vm/memory/freeBlockDictionary.hpp b/hotspot/src/share/vm/memory/freeBlockDictionary.hpp index 9e3e20a7794..66ce2be57f3 100644 --- a/hotspot/src/share/vm/memory/freeBlockDictionary.hpp +++ b/hotspot/src/share/vm/memory/freeBlockDictionary.hpp @@ -34,7 +34,7 @@ // A FreeBlockDictionary is an abstract superclass that will allow // a number of alternative implementations in the future. template -class FreeBlockDictionary: public CHeapObj { +class FreeBlockDictionary: public CHeapObj { public: enum Dither { atLeast, diff --git a/hotspot/src/share/vm/memory/genMarkSweep.cpp b/hotspot/src/share/vm/memory/genMarkSweep.cpp index 4d13fbb22dd..e7097db9dcf 100644 --- a/hotspot/src/share/vm/memory/genMarkSweep.cpp +++ b/hotspot/src/share/vm/memory/genMarkSweep.cpp @@ -203,21 +203,21 @@ void GenMarkSweep::allocate_stacks() { #ifdef VALIDATE_MARK_SWEEP if (ValidateMarkSweep) { - _root_refs_stack = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _other_refs_stack = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _adjusted_pointers = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _live_oops = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _live_oops_moved_to = new (ResourceObj::C_HEAP) GrowableArray(100, true); - _live_oops_size = new (ResourceObj::C_HEAP) GrowableArray(100, true); + _root_refs_stack = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _other_refs_stack = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _adjusted_pointers = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _live_oops = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _live_oops_moved_to = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _live_oops_size = new (ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); } if (RecordMarkSweepCompaction) { if (_cur_gc_live_oops == NULL) { - _cur_gc_live_oops = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _cur_gc_live_oops_moved_to = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _cur_gc_live_oops_size = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _last_gc_live_oops = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _last_gc_live_oops_moved_to = new(ResourceObj::C_HEAP) GrowableArray(100, true); - _last_gc_live_oops_size = new(ResourceObj::C_HEAP) GrowableArray(100, true); + _cur_gc_live_oops = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _cur_gc_live_oops_moved_to = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _cur_gc_live_oops_size = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _last_gc_live_oops = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _last_gc_live_oops_moved_to = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); + _last_gc_live_oops_size = new(ResourceObj::C_HEAP, mtGC) GrowableArray(100, true); } else { _cur_gc_live_oops->clear(); _cur_gc_live_oops_moved_to->clear(); diff --git a/hotspot/src/share/vm/memory/genOopClosures.hpp b/hotspot/src/share/vm/memory/genOopClosures.hpp index 2c9b5ad0d0b..ded9c6262a2 100644 --- a/hotspot/src/share/vm/memory/genOopClosures.hpp +++ b/hotspot/src/share/vm/memory/genOopClosures.hpp @@ -34,10 +34,10 @@ class CardTableRS; class CardTableModRefBS; class DefNewGeneration; -template class GenericTaskQueue; -typedef GenericTaskQueue OopTaskQueue; -template class GenericTaskQueueSet; -typedef GenericTaskQueueSet OopTaskQueueSet; +template class GenericTaskQueue; +typedef GenericTaskQueue OopTaskQueue; +template class GenericTaskQueueSet; +typedef GenericTaskQueueSet OopTaskQueueSet; // Closure for iterating roots from a particular generation // Note: all classes deriving from this MUST call this do_barrier diff --git a/hotspot/src/share/vm/memory/genRemSet.hpp b/hotspot/src/share/vm/memory/genRemSet.hpp index bf0535f83db..9306d452543 100644 --- a/hotspot/src/share/vm/memory/genRemSet.hpp +++ b/hotspot/src/share/vm/memory/genRemSet.hpp @@ -35,7 +35,7 @@ class BarrierSet; class OopsInGenClosure; class CardTableRS; -class GenRemSet: public CHeapObj { +class GenRemSet: public CHeapObj { friend class Generation; BarrierSet* _bs; diff --git a/hotspot/src/share/vm/memory/generation.hpp b/hotspot/src/share/vm/memory/generation.hpp index 5c62e8bf2de..96becb638b6 100644 --- a/hotspot/src/share/vm/memory/generation.hpp +++ b/hotspot/src/share/vm/memory/generation.hpp @@ -86,7 +86,7 @@ struct ScratchBlock { }; -class Generation: public CHeapObj { +class Generation: public CHeapObj { friend class VMStructs; private: jlong _time_of_last_gc; // time when last gc on this generation happened (ms) diff --git a/hotspot/src/share/vm/memory/generationSpec.hpp b/hotspot/src/share/vm/memory/generationSpec.hpp index 5aff302b9c9..e602ef7976c 100644 --- a/hotspot/src/share/vm/memory/generationSpec.hpp +++ b/hotspot/src/share/vm/memory/generationSpec.hpp @@ -32,7 +32,7 @@ // some generation-specific behavior. This is done here rather than as a // virtual function of Generation because these methods are needed in // initialization of the Generations. -class GenerationSpec : public CHeapObj { +class GenerationSpec : public CHeapObj { friend class VMStructs; private: Generation::Name _name; @@ -71,7 +71,7 @@ typedef GenerationSpec* GenerationSpecPtr; // The specification of a permanent generation. This class is very // similar to GenerationSpec in use. Due to PermGen's not being a // true Generation, we cannot combine the spec classes either. -class PermanentGenerationSpec : public CHeapObj { +class PermanentGenerationSpec : public CHeapObj { friend class VMStructs; private: PermGen::Name _name; diff --git a/hotspot/src/share/vm/memory/heap.cpp b/hotspot/src/share/vm/memory/heap.cpp index dcf1e41e0e4..95c99082cad 100644 --- a/hotspot/src/share/vm/memory/heap.cpp +++ b/hotspot/src/share/vm/memory/heap.cpp @@ -26,7 +26,7 @@ #include "memory/heap.hpp" #include "oops/oop.inline.hpp" #include "runtime/os.hpp" - +#include "services/memTracker.hpp" size_t CodeHeap::header_size() { return sizeof(HeapBlock); @@ -130,6 +130,9 @@ bool CodeHeap::reserve(size_t reserved_size, size_t committed_size, if (!_segmap.initialize(align_to_page_size(_number_of_reserved_segments), align_to_page_size(_number_of_committed_segments))) { return false; } + + MemTracker::record_virtual_memory_type((address)_segmap.low_boundary(), mtCode); + assert(_segmap.committed_size() >= (size_t) _number_of_committed_segments, "could not commit enough space for segment map"); assert(_segmap.reserved_size() >= (size_t) _number_of_reserved_segments , "could not reserve enough space for segment map"); assert(_segmap.reserved_size() >= _segmap.committed_size() , "just checking"); diff --git a/hotspot/src/share/vm/memory/heap.hpp b/hotspot/src/share/vm/memory/heap.hpp index 4f592a20ce2..74f68ae054a 100644 --- a/hotspot/src/share/vm/memory/heap.hpp +++ b/hotspot/src/share/vm/memory/heap.hpp @@ -77,7 +77,7 @@ class FreeBlock: public HeapBlock { void set_link(FreeBlock* link) { _link = link; } }; -class CodeHeap : public CHeapObj { +class CodeHeap : public CHeapObj { friend class VMStructs; private: VirtualSpace _memory; // the memory holding the blocks diff --git a/hotspot/src/share/vm/memory/heapInspection.cpp b/hotspot/src/share/vm/memory/heapInspection.cpp index 1042ff43b94..998a1ecc56c 100644 --- a/hotspot/src/share/vm/memory/heapInspection.cpp +++ b/hotspot/src/share/vm/memory/heapInspection.cpp @@ -116,7 +116,7 @@ void KlassInfoBucket::empty() { KlassInfoTable::KlassInfoTable(int size, HeapWord* ref) { _size = 0; _ref = ref; - _buckets = NEW_C_HEAP_ARRAY(KlassInfoBucket, size); + _buckets = NEW_C_HEAP_ARRAY(KlassInfoBucket, size, mtInternal); if (_buckets != NULL) { _size = size; for (int index = 0; index < _size; index++) { @@ -130,7 +130,7 @@ KlassInfoTable::~KlassInfoTable() { for (int index = 0; index < _size; index++) { _buckets[index].empty(); } - FREE_C_HEAP_ARRAY(KlassInfoBucket, _buckets); + FREE_C_HEAP_ARRAY(KlassInfoBucket, _buckets, mtInternal); _size = 0; } } @@ -179,7 +179,7 @@ int KlassInfoHisto::sort_helper(KlassInfoEntry** e1, KlassInfoEntry** e2) { KlassInfoHisto::KlassInfoHisto(const char* title, int estimatedCount) : _title(title) { - _elements = new (ResourceObj::C_HEAP) GrowableArray(estimatedCount,true); + _elements = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(estimatedCount,true); } KlassInfoHisto::~KlassInfoHisto() { diff --git a/hotspot/src/share/vm/memory/heapInspection.hpp b/hotspot/src/share/vm/memory/heapInspection.hpp index 6d2f544b461..779ff072557 100644 --- a/hotspot/src/share/vm/memory/heapInspection.hpp +++ b/hotspot/src/share/vm/memory/heapInspection.hpp @@ -44,7 +44,7 @@ // to KlassInfoEntry's and is used to sort // the entries. -class KlassInfoEntry: public CHeapObj { +class KlassInfoEntry: public CHeapObj { private: KlassInfoEntry* _next; klassOop _klass; @@ -72,7 +72,7 @@ class KlassInfoClosure: public StackObj { virtual void do_cinfo(KlassInfoEntry* cie) = 0; }; -class KlassInfoBucket: public CHeapObj { +class KlassInfoBucket: public CHeapObj { private: KlassInfoEntry* _list; KlassInfoEntry* list() { return _list; } diff --git a/hotspot/src/share/vm/memory/memRegion.hpp b/hotspot/src/share/vm/memory/memRegion.hpp index 4ed33d7312b..e8de140c654 100644 --- a/hotspot/src/share/vm/memory/memRegion.hpp +++ b/hotspot/src/share/vm/memory/memRegion.hpp @@ -99,8 +99,8 @@ public: class MemRegionClosureRO: public MemRegionClosure { public: - void* operator new(size_t size, ResourceObj::allocation_type type) { - return ResourceObj::operator new(size, type); + void* operator new(size_t size, ResourceObj::allocation_type type, MEMFLAGS flags) { + return ResourceObj::operator new(size, type, flags); } void* operator new(size_t size, Arena *arena) { return ResourceObj::operator new(size, arena); diff --git a/hotspot/src/share/vm/memory/oopFactory.cpp b/hotspot/src/share/vm/memory/oopFactory.cpp index 0dd620650e1..def88ccf14d 100644 --- a/hotspot/src/share/vm/memory/oopFactory.cpp +++ b/hotspot/src/share/vm/memory/oopFactory.cpp @@ -140,14 +140,15 @@ klassOop oopFactory::new_instanceKlass(Symbol* name, int vtable_len, int itable_ constMethodOop oopFactory::new_constMethod(int byte_code_size, int compressed_line_number_size, int localvariable_table_length, + int exception_table_length, int checked_exceptions_length, bool is_conc_safe, TRAPS) { klassOop cmkObj = Universe::constMethodKlassObj(); constMethodKlass* cmk = constMethodKlass::cast(cmkObj); return cmk->allocate(byte_code_size, compressed_line_number_size, - localvariable_table_length, checked_exceptions_length, - is_conc_safe, + localvariable_table_length, exception_table_length, + checked_exceptions_length, is_conc_safe, CHECK_NULL); } @@ -155,6 +156,7 @@ constMethodOop oopFactory::new_constMethod(int byte_code_size, methodOop oopFactory::new_method(int byte_code_size, AccessFlags access_flags, int compressed_line_number_size, int localvariable_table_length, + int exception_table_length, int checked_exceptions_length, bool is_conc_safe, TRAPS) { @@ -164,6 +166,7 @@ methodOop oopFactory::new_method(int byte_code_size, AccessFlags access_flags, constMethodOop cm = new_constMethod(byte_code_size, compressed_line_number_size, localvariable_table_length, + exception_table_length, checked_exceptions_length, is_conc_safe, CHECK_NULL); constMethodHandle rw(THREAD, cm); diff --git a/hotspot/src/share/vm/memory/oopFactory.hpp b/hotspot/src/share/vm/memory/oopFactory.hpp index 38de1a4f2c2..5fd843ee83d 100644 --- a/hotspot/src/share/vm/memory/oopFactory.hpp +++ b/hotspot/src/share/vm/memory/oopFactory.hpp @@ -86,6 +86,7 @@ private: static constMethodOop new_constMethod(int byte_code_size, int compressed_line_number_size, int localvariable_table_length, + int exception_table_length, int checked_exceptions_length, bool is_conc_safe, TRAPS); @@ -97,6 +98,7 @@ public: AccessFlags access_flags, int compressed_line_number_size, int localvariable_table_length, + int exception_table_length, int checked_exceptions_length, bool is_conc_safe, TRAPS); diff --git a/hotspot/src/share/vm/memory/permGen.hpp b/hotspot/src/share/vm/memory/permGen.hpp index 7400ed65f46..a6e2c8a6f0a 100644 --- a/hotspot/src/share/vm/memory/permGen.hpp +++ b/hotspot/src/share/vm/memory/permGen.hpp @@ -42,7 +42,7 @@ class CSpaceCounters; // PermGen models the part of the heap used to allocate class meta-data. -class PermGen : public CHeapObj { +class PermGen : public CHeapObj { friend class VMStructs; protected: size_t _capacity_expansion_limit; // maximum expansion allowed without a diff --git a/hotspot/src/share/vm/memory/referencePolicy.hpp b/hotspot/src/share/vm/memory/referencePolicy.hpp index 6616f253c19..99015d01aff 100644 --- a/hotspot/src/share/vm/memory/referencePolicy.hpp +++ b/hotspot/src/share/vm/memory/referencePolicy.hpp @@ -29,7 +29,7 @@ // should be cleared. -class ReferencePolicy : public CHeapObj { +class ReferencePolicy : public CHeapObj { public: virtual bool should_clear_reference(oop p, jlong timestamp_clock) { ShouldNotReachHere(); diff --git a/hotspot/src/share/vm/memory/referenceProcessor.cpp b/hotspot/src/share/vm/memory/referenceProcessor.cpp index 2699ecd0f5d..f103dc97944 100644 --- a/hotspot/src/share/vm/memory/referenceProcessor.cpp +++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp @@ -108,7 +108,8 @@ ReferenceProcessor::ReferenceProcessor(MemRegion span, _num_q = MAX2(1U, mt_processing_degree); _max_num_q = MAX2(_num_q, mt_discovery_degree); _discovered_refs = NEW_C_HEAP_ARRAY(DiscoveredList, - _max_num_q * number_of_subclasses_of_ref()); + _max_num_q * number_of_subclasses_of_ref(), mtGC); + if (_discovered_refs == NULL) { vm_exit_during_initialization("Could not allocated RefProc Array"); } diff --git a/hotspot/src/share/vm/memory/referenceProcessor.hpp b/hotspot/src/share/vm/memory/referenceProcessor.hpp index bfa3bdffa9e..9df15bd4d3d 100644 --- a/hotspot/src/share/vm/memory/referenceProcessor.hpp +++ b/hotspot/src/share/vm/memory/referenceProcessor.hpp @@ -203,7 +203,7 @@ public: } }; -class ReferenceProcessor : public CHeapObj { +class ReferenceProcessor : public CHeapObj { protected: // Compatibility with pre-4965777 JDK's static bool _pending_list_uses_discovered_field; diff --git a/hotspot/src/share/vm/memory/resourceArea.hpp b/hotspot/src/share/vm/memory/resourceArea.hpp index 3d312489769..567f41d400a 100644 --- a/hotspot/src/share/vm/memory/resourceArea.hpp +++ b/hotspot/src/share/vm/memory/resourceArea.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -75,7 +75,7 @@ public: if (UseMallocOnly) { // use malloc, but save pointer in res. area for later freeing char** save = (char**)internal_malloc_4(sizeof(char*)); - return (*save = (char*)os::malloc(size)); + return (*save = (char*)os::malloc(size, mtThread)); } #endif return (char*)Amalloc(size); @@ -93,18 +93,17 @@ protected: ResourceArea *_area; // Resource area to stack allocate Chunk *_chunk; // saved arena chunk char *_hwm, *_max; - NOT_PRODUCT(size_t _size_in_bytes;) + size_t _size_in_bytes; void initialize(Thread *thread) { _area = thread->resource_area(); _chunk = _area->_chunk; _hwm = _area->_hwm; _max= _area->_max; - NOT_PRODUCT(_size_in_bytes = _area->size_in_bytes();) + _size_in_bytes = _area->size_in_bytes(); debug_only(_area->_nesting++;) assert( _area->_nesting > 0, "must stack allocate RMs" ); } - public: #ifndef ASSERT @@ -120,7 +119,7 @@ protected: ResourceMark( ResourceArea *r ) : _area(r), _chunk(r->_chunk), _hwm(r->_hwm), _max(r->_max) { - NOT_PRODUCT(_size_in_bytes = _area->size_in_bytes();) + _size_in_bytes = r->_size_in_bytes; debug_only(_area->_nesting++;) assert( _area->_nesting > 0, "must stack allocate RMs" ); } @@ -148,7 +147,7 @@ protected: private: void free_malloced_objects() PRODUCT_RETURN; - size_t size_in_bytes() NOT_PRODUCT({ return _size_in_bytes; }) PRODUCT_RETURN0; + size_t size_in_bytes() { return _size_in_bytes; } }; //------------------------------DeoptResourceMark----------------------------------- @@ -180,19 +179,19 @@ protected: // and they would be stack allocated. This leaves open the possibilty of accidental // misuse so we simple duplicate the ResourceMark functionality here. -class DeoptResourceMark: public CHeapObj { +class DeoptResourceMark: public CHeapObj { protected: ResourceArea *_area; // Resource area to stack allocate Chunk *_chunk; // saved arena chunk char *_hwm, *_max; - NOT_PRODUCT(size_t _size_in_bytes;) + size_t _size_in_bytes; void initialize(Thread *thread) { _area = thread->resource_area(); _chunk = _area->_chunk; _hwm = _area->_hwm; _max= _area->_max; - NOT_PRODUCT(_size_in_bytes = _area->size_in_bytes();) + _size_in_bytes = _area->size_in_bytes(); debug_only(_area->_nesting++;) assert( _area->_nesting > 0, "must stack allocate RMs" ); } @@ -212,7 +211,7 @@ protected: DeoptResourceMark( ResourceArea *r ) : _area(r), _chunk(r->_chunk), _hwm(r->_hwm), _max(r->_max) { - NOT_PRODUCT(_size_in_bytes = _area->size_in_bytes();) + _size_in_bytes = _area->size_in_bytes(); debug_only(_area->_nesting++;) assert( _area->_nesting > 0, "must stack allocate RMs" ); } @@ -240,7 +239,7 @@ protected: private: void free_malloced_objects() PRODUCT_RETURN; - size_t size_in_bytes() NOT_PRODUCT({ return _size_in_bytes; }) PRODUCT_RETURN0; + size_t size_in_bytes() { return _size_in_bytes; }; }; #endif // SHARE_VM_MEMORY_RESOURCEAREA_HPP diff --git a/hotspot/src/share/vm/memory/restore.cpp b/hotspot/src/share/vm/memory/restore.cpp index 263867e6fff..e2f8b6a6dce 100644 --- a/hotspot/src/share/vm/memory/restore.cpp +++ b/hotspot/src/share/vm/memory/restore.cpp @@ -132,7 +132,7 @@ void CompactingPermGenGen::initialize_oops() { buffer += sizeof(intptr_t); int number_of_entries = *(intptr_t*)buffer; buffer += sizeof(intptr_t); - SymbolTable::create_table((HashtableBucket*)buffer, symbolTableLen, + SymbolTable::create_table((HashtableBucket*)buffer, symbolTableLen, number_of_entries); buffer += symbolTableLen; @@ -144,7 +144,7 @@ void CompactingPermGenGen::initialize_oops() { buffer += sizeof(intptr_t); number_of_entries = *(intptr_t*)buffer; buffer += sizeof(intptr_t); - StringTable::create_table((HashtableBucket*)buffer, stringTableLen, + StringTable::create_table((HashtableBucket*)buffer, stringTableLen, number_of_entries); buffer += stringTableLen; @@ -157,7 +157,7 @@ void CompactingPermGenGen::initialize_oops() { buffer += sizeof(intptr_t); number_of_entries = *(intptr_t*)buffer; buffer += sizeof(intptr_t); - SystemDictionary::set_shared_dictionary((HashtableBucket*)buffer, + SystemDictionary::set_shared_dictionary((HashtableBucket*)buffer, sharedDictionaryLen, number_of_entries); buffer += sharedDictionaryLen; @@ -171,7 +171,7 @@ void CompactingPermGenGen::initialize_oops() { buffer += sizeof(intptr_t); number_of_entries = *(intptr_t*)buffer; buffer += sizeof(intptr_t); - ClassLoader::create_package_info_table((HashtableBucket*)buffer, pkgInfoLen, + ClassLoader::create_package_info_table((HashtableBucket*)buffer, pkgInfoLen, number_of_entries); buffer += pkgInfoLen; ClassLoader::verify(); diff --git a/hotspot/src/share/vm/memory/space.hpp b/hotspot/src/share/vm/memory/space.hpp index f81c293a4bf..ef2f2c6e559 100644 --- a/hotspot/src/share/vm/memory/space.hpp +++ b/hotspot/src/share/vm/memory/space.hpp @@ -105,7 +105,7 @@ class SpaceMemRegionOopsIterClosure: public OopClosure { // bottom() <= top() <= end() // top() is inclusive and end() is exclusive. -class Space: public CHeapObj { +class Space: public CHeapObj { friend class VMStructs; protected: HeapWord* _bottom; diff --git a/hotspot/src/share/vm/memory/tenuredGeneration.cpp b/hotspot/src/share/vm/memory/tenuredGeneration.cpp index b88f315ed16..50b2615baea 100644 --- a/hotspot/src/share/vm/memory/tenuredGeneration.cpp +++ b/hotspot/src/share/vm/memory/tenuredGeneration.cpp @@ -65,7 +65,7 @@ TenuredGeneration::TenuredGeneration(ReservedSpace rs, if (UseParNewGC && ParallelGCThreads > 0) { typedef ParGCAllocBufferWithBOT* ParGCAllocBufferWithBOTPtr; _alloc_buffers = NEW_C_HEAP_ARRAY(ParGCAllocBufferWithBOTPtr, - ParallelGCThreads); + ParallelGCThreads, mtGC); if (_alloc_buffers == NULL) vm_exit_during_initialization("Could not allocate alloc_buffers"); for (uint i = 0; i < ParallelGCThreads; i++) { diff --git a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp index 1b8bb0a3ca7..c85a59de14e 100644 --- a/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp +++ b/hotspot/src/share/vm/memory/threadLocalAllocBuffer.hpp @@ -36,7 +36,7 @@ class GlobalTLABStats; // It is thread-private at any time, but maybe multiplexed over // time across multiple threads. The park()/unpark() pair is // used to make it avaiable for such multiplexing. -class ThreadLocalAllocBuffer: public CHeapObj { +class ThreadLocalAllocBuffer: public CHeapObj { friend class VMStructs; private: HeapWord* _start; // address of TLAB @@ -172,7 +172,7 @@ public: void verify(); }; -class GlobalTLABStats: public CHeapObj { +class GlobalTLABStats: public CHeapObj { private: // Accumulate perfdata in private variables because diff --git a/hotspot/src/share/vm/memory/universe.cpp b/hotspot/src/share/vm/memory/universe.cpp index 9282828a7e9..4ed723afa57 100644 --- a/hotspot/src/share/vm/memory/universe.cpp +++ b/hotspot/src/share/vm/memory/universe.cpp @@ -764,7 +764,7 @@ jint universe_init() { FileMapInfo* mapinfo = NULL; if (UseSharedSpaces) { - mapinfo = NEW_C_HEAP_OBJ(FileMapInfo); + mapinfo = NEW_C_HEAP_OBJ(FileMapInfo, mtInternal); memset(mapinfo, 0, sizeof(FileMapInfo)); // Open the shared archive file, read and validate the header. If @@ -1546,7 +1546,7 @@ void ActiveMethodOopsCache::add_previous_version(const methodOop method) { // This is the first previous version so make some space. // Start with 2 elements under the assumption that the class // won't be redefined much. - _prev_methods = new (ResourceObj::C_HEAP) GrowableArray(2, true); + _prev_methods = new (ResourceObj::C_HEAP, mtClass) GrowableArray(2, true); } // RC_TRACE macro has an embedded ResourceMark diff --git a/hotspot/src/share/vm/memory/universe.hpp b/hotspot/src/share/vm/memory/universe.hpp index 073a5c2ca75..e2b942e5613 100644 --- a/hotspot/src/share/vm/memory/universe.hpp +++ b/hotspot/src/share/vm/memory/universe.hpp @@ -43,7 +43,7 @@ class DeferredObjAllocEvent; // Common parts of a methodOop cache. This cache safely interacts with // the RedefineClasses API. // -class CommonMethodOopCache : public CHeapObj { +class CommonMethodOopCache : public CHeapObj { // We save the klassOop and the idnum of methodOop in order to get // the current cached methodOop. private: @@ -273,7 +273,7 @@ class Universe: AllStatic { } static klassOop typeArrayKlassObj(BasicType t) { - assert((uint)t < T_VOID+1, "range check"); + assert((uint)t < T_VOID+1, err_msg("range check for type: %s", type2name(t))); assert(_typeArrayKlassObjs[t] != NULL, "domain check"); return _typeArrayKlassObjs[t]; } @@ -455,7 +455,7 @@ class Universe: AllStatic { static int base_vtable_size() { return _base_vtable_size; } }; -class DeferredObjAllocEvent : public CHeapObj { +class DeferredObjAllocEvent : public CHeapObj { private: oop _oop; size_t _bytesize; diff --git a/hotspot/src/share/vm/oops/constMethodKlass.cpp b/hotspot/src/share/vm/oops/constMethodKlass.cpp index b66df9505fd..e74811f54b0 100644 --- a/hotspot/src/share/vm/oops/constMethodKlass.cpp +++ b/hotspot/src/share/vm/oops/constMethodKlass.cpp @@ -65,6 +65,7 @@ bool constMethodKlass::oop_is_conc_safe(oop obj) const { constMethodOop constMethodKlass::allocate(int byte_code_size, int compressed_line_number_size, int localvariable_table_length, + int exception_table_length, int checked_exceptions_length, bool is_conc_safe, TRAPS) { @@ -72,6 +73,7 @@ constMethodOop constMethodKlass::allocate(int byte_code_size, int size = constMethodOopDesc::object_size(byte_code_size, compressed_line_number_size, localvariable_table_length, + exception_table_length, checked_exceptions_length); KlassHandle h_k(THREAD, as_klassOop()); constMethodOop cm = (constMethodOop) @@ -82,12 +84,12 @@ constMethodOop constMethodKlass::allocate(int byte_code_size, cm->init_fingerprint(); cm->set_constants(NULL); cm->set_stackmap_data(NULL); - cm->set_exception_table(NULL); cm->set_code_size(byte_code_size); cm->set_constMethod_size(size); cm->set_inlined_tables_length(checked_exceptions_length, compressed_line_number_size, - localvariable_table_length); + localvariable_table_length, + exception_table_length); assert(cm->size() == size, "wrong size for object"); cm->set_is_conc_safe(is_conc_safe); cm->set_partially_loaded(); @@ -100,7 +102,6 @@ void constMethodKlass::oop_follow_contents(oop obj) { constMethodOop cm = constMethodOop(obj); MarkSweep::mark_and_push(cm->adr_constants()); MarkSweep::mark_and_push(cm->adr_stackmap_data()); - MarkSweep::mark_and_push(cm->adr_exception_table()); // Performance tweak: We skip iterating over the klass pointer since we // know that Universe::constMethodKlassObj never moves. } @@ -112,7 +113,6 @@ void constMethodKlass::oop_follow_contents(ParCompactionManager* cm, constMethodOop cm_oop = constMethodOop(obj); PSParallelCompact::mark_and_push(cm, cm_oop->adr_constants()); PSParallelCompact::mark_and_push(cm, cm_oop->adr_stackmap_data()); - PSParallelCompact::mark_and_push(cm, cm_oop->adr_exception_table()); // Performance tweak: We skip iterating over the klass pointer since we // know that Universe::constMethodKlassObj never moves. } @@ -123,7 +123,6 @@ int constMethodKlass::oop_oop_iterate(oop obj, OopClosure* blk) { constMethodOop cm = constMethodOop(obj); blk->do_oop(cm->adr_constants()); blk->do_oop(cm->adr_stackmap_data()); - blk->do_oop(cm->adr_exception_table()); // Get size before changing pointers. // Don't call size() or oop_size() since that is a virtual call. int size = cm->object_size(); @@ -139,8 +138,6 @@ int constMethodKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) if (mr.contains(adr)) blk->do_oop(adr); adr = cm->adr_stackmap_data(); if (mr.contains(adr)) blk->do_oop(adr); - adr = cm->adr_exception_table(); - if (mr.contains(adr)) blk->do_oop(adr); // Get size before changing pointers. // Don't call size() or oop_size() since that is a virtual call. int size = cm->object_size(); @@ -155,7 +152,6 @@ int constMethodKlass::oop_adjust_pointers(oop obj) { constMethodOop cm = constMethodOop(obj); MarkSweep::adjust_pointer(cm->adr_constants()); MarkSweep::adjust_pointer(cm->adr_stackmap_data()); - MarkSweep::adjust_pointer(cm->adr_exception_table()); // Get size before changing pointers. // Don't call size() or oop_size() since that is a virtual call. int size = cm->object_size(); @@ -190,7 +186,6 @@ void constMethodKlass::oop_print_on(oop obj, outputStream* st) { constMethodOop m = constMethodOop(obj); st->print(" - constants: " INTPTR_FORMAT " ", (address)m->constants()); m->constants()->print_value_on(st); st->cr(); - st->print(" - exceptions: " INTPTR_FORMAT "\n", (address)m->exception_table()); if (m->has_stackmap_table()) { st->print(" - stackmap data: "); m->stackmap_data()->print_value_on(st); @@ -228,8 +223,6 @@ void constMethodKlass::oop_verify_on(oop obj, outputStream* st) { typeArrayOop stackmap_data = m->stackmap_data(); guarantee(stackmap_data == NULL || stackmap_data->is_perm(), "should be in permspace"); - guarantee(m->exception_table()->is_perm(), "should be in permspace"); - guarantee(m->exception_table()->is_typeArray(), "should be type array"); address m_end = (address)((oop*) m + m->size()); address compressed_table_start = m->code_end(); @@ -244,11 +237,15 @@ void constMethodKlass::oop_verify_on(oop obj, outputStream* st) { compressed_table_end += stream.position(); } guarantee(compressed_table_end <= m_end, "invalid method layout"); - // Verify checked exceptions and local variable tables + // Verify checked exceptions, exception table and local variable tables if (m->has_checked_exceptions()) { u2* addr = m->checked_exceptions_length_addr(); guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); } + if (m->has_exception_handler()) { + u2* addr = m->exception_table_length_addr(); + guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); + } if (m->has_localvariable_table()) { u2* addr = m->localvariable_table_length_addr(); guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); @@ -257,12 +254,12 @@ void constMethodKlass::oop_verify_on(oop obj, outputStream* st) { u2* uncompressed_table_start; if (m->has_localvariable_table()) { uncompressed_table_start = (u2*) m->localvariable_table_start(); - } else { - if (m->has_checked_exceptions()) { + } else if (m->has_exception_handler()) { + uncompressed_table_start = (u2*) m->exception_table_start(); + } else if (m->has_checked_exceptions()) { uncompressed_table_start = (u2*) m->checked_exceptions_start(); - } else { + } else { uncompressed_table_start = (u2*) m_end; - } } int gap = (intptr_t) uncompressed_table_start - (intptr_t) compressed_table_end; int max_gap = align_object_size(1)*BytesPerWord; @@ -273,8 +270,8 @@ void constMethodKlass::oop_verify_on(oop obj, outputStream* st) { bool constMethodKlass::oop_partially_loaded(oop obj) const { assert(obj->is_constMethod(), "object must be klass"); constMethodOop m = constMethodOop(obj); - // check whether exception_table points to self (flag for partially loaded) - return m->exception_table() == (typeArrayOop)obj; + // check whether stackmap_data points to self (flag for partially loaded) + return m->stackmap_data() == (typeArrayOop)obj; } @@ -282,6 +279,6 @@ bool constMethodKlass::oop_partially_loaded(oop obj) const { void constMethodKlass::oop_set_partially_loaded(oop obj) { assert(obj->is_constMethod(), "object must be klass"); constMethodOop m = constMethodOop(obj); - // Temporarily set exception_table to point to self - m->set_exception_table((typeArrayOop)obj); + // Temporarily set stackmap_data to point to self + m->set_stackmap_data((typeArrayOop)obj); } diff --git a/hotspot/src/share/vm/oops/constMethodKlass.hpp b/hotspot/src/share/vm/oops/constMethodKlass.hpp index 1c3e3c83b83..23ba1122782 100644 --- a/hotspot/src/share/vm/oops/constMethodKlass.hpp +++ b/hotspot/src/share/vm/oops/constMethodKlass.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,6 +46,7 @@ public: DEFINE_ALLOCATE_PERMANENT(constMethodKlass); constMethodOop allocate(int byte_code_size, int compressed_line_number_size, int localvariable_table_length, + int exception_table_length, int checked_exceptions_length, bool is_conc_safe, TRAPS); diff --git a/hotspot/src/share/vm/oops/constMethodOop.cpp b/hotspot/src/share/vm/oops/constMethodOop.cpp index cc8dfd5011b..cb9256da662 100644 --- a/hotspot/src/share/vm/oops/constMethodOop.cpp +++ b/hotspot/src/share/vm/oops/constMethodOop.cpp @@ -35,6 +35,7 @@ const u2 constMethodOopDesc::UNSET_IDNUM = 0xFFFF; int constMethodOopDesc::object_size(int code_size, int compressed_line_number_size, int local_variable_table_length, + int exception_table_length, int checked_exceptions_length) { int extra_bytes = code_size; if (compressed_line_number_size > 0) { @@ -49,6 +50,10 @@ int constMethodOopDesc::object_size(int code_size, extra_bytes += local_variable_table_length * sizeof(LocalVariableTableElement); } + if (exception_table_length > 0) { + extra_bytes += sizeof(u2); + extra_bytes += exception_table_length * sizeof(ExceptionTableElement); + } int extra_words = align_size_up(extra_bytes, BytesPerWord) / BytesPerWord; return align_object_size(header_size() + extra_words); } @@ -73,23 +78,40 @@ u2* constMethodOopDesc::checked_exceptions_length_addr() const { return last_u2_element(); } -u2* constMethodOopDesc::localvariable_table_length_addr() const { - assert(has_localvariable_table(), "called only if table is present"); +u2* constMethodOopDesc::exception_table_length_addr() const { + assert(has_exception_handler(), "called only if table is present"); if (has_checked_exceptions()) { // If checked_exception present, locate immediately before them. return (u2*) checked_exceptions_start() - 1; } else { - // Else, the linenumber table is at the end of the constMethod. + // Else, the exception table is at the end of the constMethod. return last_u2_element(); } } +u2* constMethodOopDesc::localvariable_table_length_addr() const { + assert(has_localvariable_table(), "called only if table is present"); + if (has_exception_handler()) { + // If exception_table present, locate immediately before them. + return (u2*) exception_table_start() - 1; + } else { + if (has_checked_exceptions()) { + // If checked_exception present, locate immediately before them. + return (u2*) checked_exceptions_start() - 1; + } else { + // Else, the linenumber table is at the end of the constMethod. + return last_u2_element(); + } + } +} + // Update the flags to indicate the presence of these optional fields. void constMethodOopDesc::set_inlined_tables_length( int checked_exceptions_len, int compressed_line_number_size, - int localvariable_table_len) { + int localvariable_table_len, + int exception_table_len) { // Must be done in the order below, otherwise length_addr accessors // will not work. Only set bit in header if length is positive. assert(_flags == 0, "Error"); @@ -100,6 +122,10 @@ void constMethodOopDesc::set_inlined_tables_length( _flags |= _has_checked_exceptions; *(checked_exceptions_length_addr()) = checked_exceptions_len; } + if (exception_table_len > 0) { + _flags |= _has_exception_table; + *(exception_table_length_addr()) = exception_table_len; + } if (localvariable_table_len > 0) { _flags |= _has_localvariable_table; *(localvariable_table_length_addr()) = localvariable_table_len; @@ -133,3 +159,15 @@ LocalVariableTableElement* constMethodOopDesc::localvariable_table_start() const addr -= length * sizeof(LocalVariableTableElement) / sizeof(u2); return (LocalVariableTableElement*) addr; } + +int constMethodOopDesc::exception_table_length() const { + return has_exception_handler() ? *(exception_table_length_addr()) : 0; +} + +ExceptionTableElement* constMethodOopDesc::exception_table_start() const { + u2* addr = exception_table_length_addr(); + u2 length = *addr; + assert(length > 0, "should only be called if table is present"); + addr -= length * sizeof(ExceptionTableElement) / sizeof(u2); + return (ExceptionTableElement*)addr; +} diff --git a/hotspot/src/share/vm/oops/constMethodOop.hpp b/hotspot/src/share/vm/oops/constMethodOop.hpp index 10344ec6db7..549192be7a9 100644 --- a/hotspot/src/share/vm/oops/constMethodOop.hpp +++ b/hotspot/src/share/vm/oops/constMethodOop.hpp @@ -43,7 +43,6 @@ // | fingerprint 2 | // | constants (oop) | // | stackmap_data (oop) | -// | exception_table (oop) | // | constMethod_size | // | interp_kind | flags | code_size | // | name index | signature index | @@ -64,7 +63,13 @@ // | (length is u2, elements are 6-tuples of u2) | // | (see class LocalVariableTableElement) | // | (access flags bit tells whether table is present) | -// | (indexed from end of contMethodOop) | +// | (indexed from end of constMethodOop) | +// |------------------------------------------------------| +// | exception table + length (length last) | +// | (length is u2, elements are 4-tuples of u2) | +// | (see class ExceptionTableElement) | +// | (access flags bit tells whether table is present) | +// | (indexed from end of constMethodOop) | // |------------------------------------------------------| // | checked exceptions elements + length (length last) | // | (length is u2, elements are u2) | @@ -93,6 +98,15 @@ class LocalVariableTableElement VALUE_OBJ_CLASS_SPEC { }; +// Utitily class describing elements in exception table +class ExceptionTableElement VALUE_OBJ_CLASS_SPEC { + public: + u2 start_pc; + u2 end_pc; + u2 handler_pc; + u2 catch_type_index; +}; + class constMethodOopDesc : public oopDesc { friend class constMethodKlass; friend class VMStructs; @@ -100,7 +114,8 @@ private: enum { _has_linenumber_table = 1, _has_checked_exceptions = 2, - _has_localvariable_table = 4 + _has_localvariable_table = 4, + _has_exception_table = 8 }; // Bit vector of signature @@ -114,7 +129,7 @@ private: public: oop* oop_block_beg() const { return adr_constants(); } - oop* oop_block_end() const { return adr_exception_table() + 1; } + oop* oop_block_end() const { return adr_stackmap_data() + 1; } private: // @@ -126,11 +141,6 @@ private: // Raw stackmap data for the method typeArrayOop _stackmap_data; - // The exception handler table. 4-tuples of ints [start_pc, end_pc, - // handler_pc, catch_type index] For methods with no exceptions the - // table is pointing to Universe::the_empty_int_array - typeArrayOop _exception_table; - // // End of the oop block. // @@ -152,7 +162,8 @@ public: // Inlined tables void set_inlined_tables_length(int checked_exceptions_len, int compressed_line_number_size, - int localvariable_table_len); + int localvariable_table_len, + int exception_table_len); bool has_linenumber_table() const { return (_flags & _has_linenumber_table) != 0; } @@ -163,6 +174,9 @@ public: bool has_localvariable_table() const { return (_flags & _has_localvariable_table) != 0; } + bool has_exception_handler() const + { return (_flags & _has_exception_table) != 0; } + void set_interpreter_kind(int kind) { _interpreter_kind = kind; } int interpreter_kind(void) const { return _interpreter_kind; } @@ -181,11 +195,6 @@ public: } bool has_stackmap_table() const { return _stackmap_data != NULL; } - // exception handler table - typeArrayOop exception_table() const { return _exception_table; } - void set_exception_table(typeArrayOop e) { oop_store_without_check((oop*) &_exception_table, (oop) e); } - bool has_exception_handler() const { return exception_table() != NULL && exception_table()->length() > 0; } - void init_fingerprint() { const uint64_t initval = CONST64(0x8000000000000000); _fingerprint = initval; @@ -235,6 +244,7 @@ public: // Object size needed static int object_size(int code_size, int compressed_line_number_size, int local_variable_table_length, + int exception_table_length, int checked_exceptions_length); int object_size() const { return _constMethod_size; } @@ -256,6 +266,7 @@ public: u_char* compressed_linenumber_table() const; // not preserved by gc u2* checked_exceptions_length_addr() const; u2* localvariable_table_length_addr() const; + u2* exception_table_length_addr() const; // checked exceptions int checked_exceptions_length() const; @@ -265,6 +276,10 @@ public: int localvariable_table_length() const; LocalVariableTableElement* localvariable_table_start() const; + // exception table + int exception_table_length() const; + ExceptionTableElement* exception_table_start() const; + // byte codes void set_code(address code) { if (code_size() > 0) { @@ -282,13 +297,10 @@ public: // interpreter support static ByteSize constants_offset() { return byte_offset_of(constMethodOopDesc, _constants); } - static ByteSize exception_table_offset() - { return byte_offset_of(constMethodOopDesc, _exception_table); } // Garbage collection support oop* adr_constants() const { return (oop*)&_constants; } oop* adr_stackmap_data() const { return (oop*)&_stackmap_data; } - oop* adr_exception_table() const { return (oop*)&_exception_table; } bool is_conc_safe() { return _is_conc_safe; } void set_is_conc_safe(bool v) { _is_conc_safe = v; } diff --git a/hotspot/src/share/vm/oops/constantPoolOop.hpp b/hotspot/src/share/vm/oops/constantPoolOop.hpp index c2f985d7750..a2c046859df 100644 --- a/hotspot/src/share/vm/oops/constantPoolOop.hpp +++ b/hotspot/src/share/vm/oops/constantPoolOop.hpp @@ -764,7 +764,7 @@ class constantPoolOopDesc : public oopDesc { unsigned char *bytes); }; -class SymbolHashMapEntry : public CHeapObj { +class SymbolHashMapEntry : public CHeapObj { private: unsigned int _hash; // 32-bit hash for item SymbolHashMapEntry* _next; // Next element in the linked list for this bucket @@ -790,7 +790,7 @@ class SymbolHashMapEntry : public CHeapObj { }; // End SymbolHashMapEntry class -class SymbolHashMapBucket : public CHeapObj { +class SymbolHashMapBucket : public CHeapObj { private: SymbolHashMapEntry* _entry; @@ -803,7 +803,7 @@ public: }; // End SymbolHashMapBucket class -class SymbolHashMap: public CHeapObj { +class SymbolHashMap: public CHeapObj { private: // Default number of entries in the table @@ -816,7 +816,7 @@ class SymbolHashMap: public CHeapObj { void initialize_table(int table_size) { _table_size = table_size; - _buckets = NEW_C_HEAP_ARRAY(SymbolHashMapBucket, table_size); + _buckets = NEW_C_HEAP_ARRAY(SymbolHashMapBucket, table_size, mtSymbol); for (int index = 0; index < table_size; index++) { _buckets[index].clear(); } diff --git a/hotspot/src/share/vm/oops/generateOopMap.cpp b/hotspot/src/share/vm/oops/generateOopMap.cpp index 58ef931527f..3a818aad4db 100644 --- a/hotspot/src/share/vm/oops/generateOopMap.cpp +++ b/hotspot/src/share/vm/oops/generateOopMap.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -400,10 +400,9 @@ void GenerateOopMap::mark_bbheaders_and_count_gc_points() { bool fellThrough = false; // False to get first BB marked. // First mark all exception handlers as start of a basic-block - typeArrayOop excps = method()->exception_table(); - for(int i = 0; i < excps->length(); i += 4) { - int handler_pc_idx = i+2; - bb_mark_fct(this, excps->int_at(handler_pc_idx), NULL); + ExceptionTable excps(method()); + for(int i = 0; i < excps.length(); i ++) { + bb_mark_fct(this, excps.handler_pc(i), NULL); } // Then iterate through the code @@ -450,10 +449,9 @@ void GenerateOopMap::mark_reachable_code() { // Mark entry basic block as alive and all exception handlers _basic_blocks[0].mark_as_alive(); - typeArrayOop excps = method()->exception_table(); - for(int i = 0; i < excps->length(); i += 4) { - int handler_pc_idx = i+2; - BasicBlock *bb = get_basic_block_at(excps->int_at(handler_pc_idx)); + ExceptionTable excps(method()); + for(int i = 0; i < excps.length(); i++) { + BasicBlock *bb = get_basic_block_at(excps.handler_pc(i)); // If block is not already alive (due to multiple exception handlers to same bb), then // make it alive if (bb->is_dead()) bb->mark_as_alive(); @@ -1181,12 +1179,12 @@ void GenerateOopMap::do_exception_edge(BytecodeStream* itr) { if (_has_exceptions) { int bci = itr->bci(); - typeArrayOop exct = method()->exception_table(); - for(int i = 0; i< exct->length(); i+=4) { - int start_pc = exct->int_at(i); - int end_pc = exct->int_at(i+1); - int handler_pc = exct->int_at(i+2); - int catch_type = exct->int_at(i+3); + ExceptionTable exct(method()); + for(int i = 0; i< exct.length(); i++) { + int start_pc = exct.start_pc(i); + int end_pc = exct.end_pc(i); + int handler_pc = exct.handler_pc(i); + int catch_type = exct.catch_type_index(i); if (start_pc <= bci && bci < end_pc) { BasicBlock *excBB = get_basic_block_at(handler_pc); @@ -2055,7 +2053,7 @@ void GenerateOopMap::compute_map(TRAPS) { _conflict = false; _max_locals = method()->max_locals(); _max_stack = method()->max_stack(); - _has_exceptions = (method()->exception_table()->length() > 0); + _has_exceptions = (method()->has_exception_handler()); _nof_refval_conflicts = 0; _init_vars = new GrowableArray(5); // There are seldom more than 5 init_vars _report_result = false; @@ -2070,9 +2068,10 @@ void GenerateOopMap::compute_map(TRAPS) { if (Verbose) { _method->print_codes(); tty->print_cr("Exception table:"); - typeArrayOop excps = method()->exception_table(); - for(int i = 0; i < excps->length(); i += 4) { - tty->print_cr("[%d - %d] -> %d", excps->int_at(i + 0), excps->int_at(i + 1), excps->int_at(i + 2)); + ExceptionTable excps(method()); + for(int i = 0; i < excps.length(); i ++) { + tty->print_cr("[%d - %d] -> %d", + excps.start_pc(i), excps.end_pc(i), excps.handler_pc(i)); } } } diff --git a/hotspot/src/share/vm/oops/instanceKlass.cpp b/hotspot/src/share/vm/oops/instanceKlass.cpp index 794a7e2809f..0c0fd34b6b2 100644 --- a/hotspot/src/share/vm/oops/instanceKlass.cpp +++ b/hotspot/src/share/vm/oops/instanceKlass.cpp @@ -847,7 +847,6 @@ void instanceKlass::shared_symbols_iterate(SymbolClosure* closure) { Klass::shared_symbols_iterate(closure); closure->do_symbol(&_generic_signature); closure->do_symbol(&_source_file_name); - closure->do_symbol(&_source_debug_extension); for (JavaFieldStream fs(this); !fs.done(); fs.next()) { int name_index = fs.name_index(); @@ -989,7 +988,7 @@ void instanceKlass::do_nonstatic_fields(FieldClosure* cl) { fieldDescriptor fd; int length = java_fields_count(); // In DebugInfo nonstatic fields are sorted by offset. - int* fields_sorted = NEW_C_HEAP_ARRAY(int, 2*(length+1)); + int* fields_sorted = NEW_C_HEAP_ARRAY(int, 2*(length+1), mtClass); int j = 0; for (int i = 0; i < length; i += 1) { fd.initialize(as_klassOop(), i); @@ -1009,7 +1008,7 @@ void instanceKlass::do_nonstatic_fields(FieldClosure* cl) { cl->do_field(&fd); } } - FREE_C_HEAP_ARRAY(int, fields_sorted); + FREE_C_HEAP_ARRAY(int, fields_sorted, mtClass); } @@ -1236,7 +1235,7 @@ jmethodID instanceKlass::get_jmethod_id(instanceKlassHandle ik_h, methodHandle m if (length <= idnum) { // allocate a new cache that might be used size_t size = MAX2(idnum+1, (size_t)ik_h->idnum_allocated_count()); - new_jmeths = NEW_C_HEAP_ARRAY(jmethodID, size+1); + new_jmeths = NEW_C_HEAP_ARRAY(jmethodID, size+1, mtClass); memset(new_jmeths, 0, (size+1)*sizeof(jmethodID)); // cache size is stored in element[0], other elements offset by one new_jmeths[0] = (jmethodID)size; @@ -1397,7 +1396,7 @@ void instanceKlass::set_cached_itable_index(size_t idnum, int index) { // cache size is stored in element[0], other elements offset by one if (indices == NULL || (length = (size_t)indices[0]) <= idnum) { size_t size = MAX2(idnum+1, (size_t)idnum_allocated_count()); - int* new_indices = NEW_C_HEAP_ARRAY(int, size+1); + int* new_indices = NEW_C_HEAP_ARRAY(int, size+1, mtClass); new_indices[0] = (int)size; // copy any existing entries size_t i; @@ -1933,7 +1932,7 @@ void instanceKlass::release_C_heap_structures() { // deallocate the cached class file if (_cached_class_file_bytes != NULL) { - os::free(_cached_class_file_bytes); + os::free(_cached_class_file_bytes, mtClass); _cached_class_file_bytes = NULL; _cached_class_file_len = 0; } @@ -1944,9 +1943,10 @@ void instanceKlass::release_C_heap_structures() { // class can't be referenced anymore). if (_array_name != NULL) _array_name->decrement_refcount(); if (_source_file_name != NULL) _source_file_name->decrement_refcount(); - if (_source_debug_extension != NULL) _source_debug_extension->decrement_refcount(); // walk constant pool and decrement symbol reference counts _constants->unreference_symbols(); + + if (_source_debug_extension != NULL) FREE_C_HEAP_ARRAY(char, _source_debug_extension, mtClass); } void instanceKlass::set_source_file_name(Symbol* n) { @@ -1954,9 +1954,22 @@ void instanceKlass::set_source_file_name(Symbol* n) { if (_source_file_name != NULL) _source_file_name->increment_refcount(); } -void instanceKlass::set_source_debug_extension(Symbol* n) { - _source_debug_extension = n; - if (_source_debug_extension != NULL) _source_debug_extension->increment_refcount(); +void instanceKlass::set_source_debug_extension(char* array, int length) { + if (array == NULL) { + _source_debug_extension = NULL; + } else { + // Adding one to the attribute length in order to store a null terminator + // character could cause an overflow because the attribute length is + // already coded with an u4 in the classfile, but in practice, it's + // unlikely to happen. + assert((length+1) > length, "Overflow checking"); + char* sde = NEW_C_HEAP_ARRAY(char, (length + 1), mtClass); + for (int i = 0; i < length; i++) { + sde[i] = array[i]; + } + sde[length] = '\0'; + _source_debug_extension = sde; + } } address instanceKlass::static_field_addr(int offset) { @@ -2530,7 +2543,7 @@ void instanceKlass::add_previous_version(instanceKlassHandle ikh, // This is the first previous version so make some space. // Start with 2 elements under the assumption that the class // won't be redefined much. - _previous_versions = new (ResourceObj::C_HEAP) + _previous_versions = new (ResourceObj::C_HEAP, mtClass) GrowableArray(2, true); } @@ -2556,7 +2569,7 @@ void instanceKlass::add_previous_version(instanceKlassHandle ikh, ("add: all methods are obsolete; flushing any EMCP weak refs")); } else { int local_count = 0; - GrowableArray* method_refs = new (ResourceObj::C_HEAP) + GrowableArray* method_refs = new (ResourceObj::C_HEAP, mtClass) GrowableArray(emcp_method_count, true); for (int i = 0; i < old_methods->length(); i++) { if (emcp_methods->at(i)) { @@ -2948,7 +2961,7 @@ PreviousVersionInfo* PreviousVersionWalker::next_previous_version() { while (_current_index < length) { PreviousVersionNode * pv_node = _previous_versions->at(_current_index++); - PreviousVersionInfo * pv_info = new (ResourceObj::C_HEAP) + PreviousVersionInfo * pv_info = new (ResourceObj::C_HEAP, mtClass) PreviousVersionInfo(pv_node); constantPoolHandle cp_h = pv_info->prev_constant_pool_handle(); diff --git a/hotspot/src/share/vm/oops/instanceKlass.hpp b/hotspot/src/share/vm/oops/instanceKlass.hpp index 229750bce64..3c24b3f69a1 100644 --- a/hotspot/src/share/vm/oops/instanceKlass.hpp +++ b/hotspot/src/share/vm/oops/instanceKlass.hpp @@ -226,7 +226,9 @@ class instanceKlass: public Klass { // Name of source file containing this klass, NULL if not specified. Symbol* _source_file_name; // the source debug extension for this klass, NULL if not specified. - Symbol* _source_debug_extension; + // Specified as UTF-8 string without terminating zero byte in the classfile, + // it is stored in the instanceklass as a NULL-terminated UTF-8 string + char* _source_debug_extension; // Generic signature, or null if none. Symbol* _generic_signature; // Array name derived from this class which needs unreferencing @@ -542,8 +544,8 @@ class instanceKlass: public Klass { void set_major_version(u2 major_version) { _major_version = major_version; } // source debug extension - Symbol* source_debug_extension() const { return _source_debug_extension; } - void set_source_debug_extension(Symbol* n); + char* source_debug_extension() const { return _source_debug_extension; } + void set_source_debug_extension(char* array, int length); // symbol unloading support (refcount already added) Symbol* array_name() { return _array_name; } @@ -1008,7 +1010,7 @@ inline u2 instanceKlass::next_method_idnum() { /* JNIid class for jfieldIDs only */ -class JNIid: public CHeapObj { +class JNIid: public CHeapObj { friend class VMStructs; private: klassOop _holder; @@ -1059,7 +1061,7 @@ class BreakpointInfo; // reference must be used because a weak reference would be seen as // collectible. A GrowableArray of PreviousVersionNodes is attached // to the instanceKlass as needed. See PreviousVersionWalker below. -class PreviousVersionNode : public CHeapObj { +class PreviousVersionNode : public CHeapObj { private: // A shared ConstantPool is never collected so we'll always have // a reference to it so we can update items in the cache. We'll @@ -1154,7 +1156,7 @@ class PreviousVersionWalker : public StackObj { // noticed since an nmethod should be removed as many times are it's // added. // -class nmethodBucket: public CHeapObj { +class nmethodBucket: public CHeapObj { friend class VMStructs; private: nmethod* _nmethod; diff --git a/hotspot/src/share/vm/oops/instanceKlassKlass.cpp b/hotspot/src/share/vm/oops/instanceKlassKlass.cpp index 12ea2234451..d6ccd423f78 100644 --- a/hotspot/src/share/vm/oops/instanceKlassKlass.cpp +++ b/hotspot/src/share/vm/oops/instanceKlassKlass.cpp @@ -421,8 +421,7 @@ instanceKlassKlass::allocate_instance_klass(Symbol* name, int vtable_len, int it ik->set_protection_domain(NULL); ik->set_signers(NULL); ik->set_source_file_name(NULL); - ik->set_source_debug_extension(NULL); - ik->set_source_debug_extension(NULL); + ik->set_source_debug_extension(NULL, 0); ik->set_array_name(NULL); ik->set_inner_classes(NULL); ik->set_static_oop_field_count(0); @@ -531,7 +530,7 @@ void instanceKlassKlass::oop_print_on(oop obj, outputStream* st) { } if (ik->source_debug_extension() != NULL) { st->print(BULLET"source debug extension: "); - ik->source_debug_extension()->print_value_on(st); + st->print_cr("%s", ik->source_debug_extension()); st->cr(); } diff --git a/hotspot/src/share/vm/oops/methodOop.cpp b/hotspot/src/share/vm/oops/methodOop.cpp index 7a0e74e0fe3..ee5ef09bfe1 100644 --- a/hotspot/src/share/vm/oops/methodOop.cpp +++ b/hotspot/src/share/vm/oops/methodOop.cpp @@ -111,25 +111,21 @@ char* methodOopDesc::name_and_sig_as_C_string(Klass* klass, Symbol* method_name, int methodOopDesc::fast_exception_handler_bci_for(KlassHandle ex_klass, int throw_bci, TRAPS) { // exception table holds quadruple entries of the form (beg_bci, end_bci, handler_bci, klass_index) - const int beg_bci_offset = 0; - const int end_bci_offset = 1; - const int handler_bci_offset = 2; - const int klass_index_offset = 3; - const int entry_size = 4; // access exception table - typeArrayHandle table (THREAD, constMethod()->exception_table()); - int length = table->length(); - assert(length % entry_size == 0, "exception table format has changed"); + ExceptionTable table(this); + int length = table.length(); // iterate through all entries sequentially constantPoolHandle pool(THREAD, constants()); - for (int i = 0; i < length; i += entry_size) { - int beg_bci = table->int_at(i + beg_bci_offset); - int end_bci = table->int_at(i + end_bci_offset); + for (int i = 0; i < length; i ++) { + //reacquire the table in case a GC happened + ExceptionTable table(this); + int beg_bci = table.start_pc(i); + int end_bci = table.end_pc(i); assert(beg_bci <= end_bci, "inconsistent exception table"); if (beg_bci <= throw_bci && throw_bci < end_bci) { // exception handler bci range covers throw_bci => investigate further - int handler_bci = table->int_at(i + handler_bci_offset); - int klass_index = table->int_at(i + klass_index_offset); + int handler_bci = table.handler_pc(i); + int klass_index = table.catch_type_index(i); if (klass_index == 0) { return handler_bci; } else if (ex_klass.is_null()) { @@ -980,7 +976,7 @@ methodHandle methodOopDesc::make_invoke_method(KlassHandle holder, { int flags_bits = (JVM_MH_INVOKE_BITS | JVM_ACC_PUBLIC | JVM_ACC_FINAL); methodOop m_oop = oopFactory::new_method(0, accessFlags_from(flags_bits), - 0, 0, 0, IsSafeConc, CHECK_(empty)); + 0, 0, 0, 0, IsSafeConc, CHECK_(empty)); m = methodHandle(THREAD, m_oop); } m->set_constants(cp()); @@ -994,7 +990,6 @@ methodHandle methodOopDesc::make_invoke_method(KlassHandle holder, m->set_result_index(rtf.type()); #endif m->compute_size_of_parameters(THREAD); - m->set_exception_table(Universe::the_empty_int_array()); m->init_intrinsic_id(); assert(m->intrinsic_id() == vmIntrinsics::_invokeExact || m->intrinsic_id() == vmIntrinsics::_invokeGeneric, "must be an invoker"); @@ -1038,6 +1033,7 @@ methodHandle methodOopDesc:: clone_with_new_data(methodHandle m, u_char* new_cod AccessFlags flags = m->access_flags(); int checked_exceptions_len = m->checked_exceptions_length(); int localvariable_len = m->localvariable_table_length(); + int exception_table_len = m->exception_table_length(); // Allocate newm_oop with the is_conc_safe parameter set // to IsUnsafeConc to indicate that newm_oop is not yet // safe for concurrent processing by a GC. @@ -1045,6 +1041,7 @@ methodHandle methodOopDesc:: clone_with_new_data(methodHandle m, u_char* new_cod flags, new_compressed_linenumber_size, localvariable_len, + exception_table_len, checked_exceptions_len, IsUnsafeConc, CHECK_(methodHandle())); @@ -1085,6 +1082,7 @@ methodHandle methodOopDesc:: clone_with_new_data(methodHandle m, u_char* new_cod newm->set_method_size(new_method_size); assert(newm->code_size() == new_code_length, "check"); assert(newm->checked_exceptions_length() == checked_exceptions_len, "check"); + assert(newm->exception_table_length() == exception_table_len, "check"); assert(newm->localvariable_table_length() == localvariable_len, "check"); // Copy new byte codes memcpy(newm->code_base(), new_code, new_code_length); @@ -1100,6 +1098,12 @@ methodHandle methodOopDesc:: clone_with_new_data(methodHandle m, u_char* new_cod m->checked_exceptions_start(), checked_exceptions_len * sizeof(CheckedExceptionElement)); } + // Copy exception table + if (exception_table_len > 0) { + memcpy(newm->exception_table_start(), + m->exception_table_start(), + exception_table_len * sizeof(ExceptionTableElement)); + } // Copy local variable number table if (localvariable_len > 0) { memcpy(newm->localvariable_table_start(), diff --git a/hotspot/src/share/vm/oops/methodOop.hpp b/hotspot/src/share/vm/oops/methodOop.hpp index de10b7c96f0..4ba480fe5f9 100644 --- a/hotspot/src/share/vm/oops/methodOop.hpp +++ b/hotspot/src/share/vm/oops/methodOop.hpp @@ -122,8 +122,9 @@ class methodOopDesc : public oopDesc { u2 _max_locals; // Number of local variables used by this method u2 _size_of_parameters; // size of the parameter block (receiver + arguments) in words u1 _intrinsic_id; // vmSymbols::intrinsic_id (0 == _none) - u1 _jfr_towrite : 1, // Flags - : 7; + u1 _jfr_towrite : 1, // Flags + _force_inline : 1, + : 6; u2 _interpreter_throwout_count; // Count of times method was exited via exception while interpreting u2 _number_of_breakpoints; // fullspeed debugging support InvocationCounter _invocation_counter; // Incremented before each activation of the method - used to trigger frequency-based optimizations @@ -282,12 +283,12 @@ class methodOopDesc : public oopDesc { } // exception handler table - typeArrayOop exception_table() const - { return constMethod()->exception_table(); } - void set_exception_table(typeArrayOop e) - { constMethod()->set_exception_table(e); } bool has_exception_handler() const { return constMethod()->has_exception_handler(); } + int exception_table_length() const + { return constMethod()->exception_table_length(); } + ExceptionTableElement* exception_table_start() const + { return constMethod()->exception_table_start(); } // Finds the first entry point bci of an exception handler for an // exception of klass ex_klass thrown at throw_bci. A value of NULL @@ -655,6 +656,9 @@ class methodOopDesc : public oopDesc { bool jfr_towrite() { return _jfr_towrite; } void set_jfr_towrite(bool towrite) { _jfr_towrite = towrite; } + bool force_inline() { return _force_inline; } + void set_force_inline(bool fi) { _force_inline = fi; } + // On-stack replacement support bool has_osr_nmethod(int level, bool match_level) { return instanceKlass::cast(method_holder())->lookup_osr_nmethod(this, InvocationEntryBci, level, match_level) != NULL; @@ -801,7 +805,7 @@ class CompressedLineNumberReadStream: public CompressedReadStream { // breakpoints are written only at safepoints, and are read // concurrently only outside of safepoints. -class BreakpointInfo : public CHeapObj { +class BreakpointInfo : public CHeapObj { friend class VMStructs; private: Bytecodes::Code _orig_bytecode; @@ -835,4 +839,66 @@ class BreakpointInfo : public CHeapObj { void clear(methodOop method); }; +// Utility class for access exception handlers +class ExceptionTable : public StackObj { + private: + ExceptionTableElement* _table; + u2 _length; + + public: + ExceptionTable(methodOop m) { + if (m->has_exception_handler()) { + _table = m->exception_table_start(); + _length = m->exception_table_length(); + } else { + _table = NULL; + _length = 0; + } + } + + int length() const { + return _length; + } + + u2 start_pc(int idx) const { + assert(idx < _length, "out of bounds"); + return _table[idx].start_pc; + } + + void set_start_pc(int idx, u2 value) { + assert(idx < _length, "out of bounds"); + _table[idx].start_pc = value; + } + + u2 end_pc(int idx) const { + assert(idx < _length, "out of bounds"); + return _table[idx].end_pc; + } + + void set_end_pc(int idx, u2 value) { + assert(idx < _length, "out of bounds"); + _table[idx].end_pc = value; + } + + u2 handler_pc(int idx) const { + assert(idx < _length, "out of bounds"); + return _table[idx].handler_pc; + } + + void set_handler_pc(int idx, u2 value) { + assert(idx < _length, "out of bounds"); + _table[idx].handler_pc = value; + } + + u2 catch_type_index(int idx) const { + assert(idx < _length, "out of bounds"); + return _table[idx].catch_type_index; + } + + void set_catch_type_index(int idx, u2 value) { + assert(idx < _length, "out of bounds"); + _table[idx].catch_type_index = value; + } +}; + #endif // SHARE_VM_OOPS_METHODOOP_HPP diff --git a/hotspot/src/share/vm/oops/symbol.cpp b/hotspot/src/share/vm/oops/symbol.cpp index 8db92d1e2fd..cc52c7adb2d 100644 --- a/hotspot/src/share/vm/oops/symbol.cpp +++ b/hotspot/src/share/vm/oops/symbol.cpp @@ -38,7 +38,7 @@ Symbol::Symbol(const u1* name, int length, int refcount) : _refcount(refcount), void* Symbol::operator new(size_t sz, int len, TRAPS) { int alloc_size = object_size(len)*HeapWordSize; - address res = (address) AllocateHeap(alloc_size, "symbol"); + address res = (address) AllocateHeap(alloc_size, mtSymbol); DEBUG_ONLY(set_allocation_type(res, ResourceObj::C_HEAP);) return res; } diff --git a/hotspot/src/share/vm/opto/c2_globals.hpp b/hotspot/src/share/vm/opto/c2_globals.hpp index 4d5424da5f7..cc72fc0a1cf 100644 --- a/hotspot/src/share/vm/opto/c2_globals.hpp +++ b/hotspot/src/share/vm/opto/c2_globals.hpp @@ -81,6 +81,13 @@ product(intx, MaxLoopPad, (OptoLoopAlignment-1), \ "Align a loop if padding size in bytes is less or equal to this value") \ \ + product(intx, MaxVectorSize, 32, \ + "Max vector size in bytes, " \ + "actual size could be less depending on elements type") \ + \ + product(bool, AlignVector, false, \ + "Perform vector store/load alignment in loop") \ + \ product(intx, NumberOfLoopInstrToAlign, 4, \ "Number of first instructions in a loop to align") \ \ @@ -292,9 +299,12 @@ develop(bool, SuperWordRTDepCheck, false, \ "Enable runtime dependency checks.") \ \ - product(bool, TraceSuperWord, false, \ + notproduct(bool, TraceSuperWord, false, \ "Trace superword transforms") \ \ + notproduct(bool, TraceNewVectors, false, \ + "Trace creation of Vector nodes") \ + \ product_pd(bool, OptoBundling, \ "Generate nops to fill i-cache lines") \ \ diff --git a/hotspot/src/share/vm/opto/callGenerator.cpp b/hotspot/src/share/vm/opto/callGenerator.cpp index 26153217d07..1fef941d9b5 100644 --- a/hotspot/src/share/vm/opto/callGenerator.cpp +++ b/hotspot/src/share/vm/opto/callGenerator.cpp @@ -172,9 +172,11 @@ public: JVMState* DynamicCallGenerator::generate(JVMState* jvms) { GraphKit kit(jvms); + Compile* C = kit.C; + PhaseGVN& gvn = kit.gvn(); - if (kit.C->log() != NULL) { - kit.C->log()->elem("dynamic_call bci='%d'", jvms->bci()); + if (C->log() != NULL) { + C->log()->elem("dynamic_call bci='%d'", jvms->bci()); } // Get the constant pool cache from the caller class. @@ -190,18 +192,21 @@ JVMState* DynamicCallGenerator::generate(JVMState* jvms) { size_t call_site_offset = cpcache->get_f1_offset(index); // Load the CallSite object from the constant pool cache. - const TypeOopPtr* cpcache_ptr = TypeOopPtr::make_from_constant(cpcache); - Node* cpcache_adr = kit.makecon(cpcache_ptr); - Node* call_site_adr = kit.basic_plus_adr(cpcache_adr, cpcache_adr, call_site_offset); - Node* call_site = kit.make_load(kit.control(), call_site_adr, TypeInstPtr::BOTTOM, T_OBJECT, Compile::AliasIdxRaw); + const TypeOopPtr* cpcache_type = TypeOopPtr::make_from_constant(cpcache); // returns TypeAryPtr of type T_OBJECT + const TypeOopPtr* call_site_type = TypeOopPtr::make_from_klass(C->env()->CallSite_klass()); + Node* cpcache_adr = kit.makecon(cpcache_type); + Node* call_site_adr = kit.basic_plus_adr(cpcache_adr, call_site_offset); + // The oops in the constant pool cache are not compressed; load then as raw pointers. + Node* call_site = kit.make_load(kit.control(), call_site_adr, call_site_type, T_ADDRESS, Compile::AliasIdxRaw); // Load the target MethodHandle from the CallSite object. - Node* target_mh_adr = kit.basic_plus_adr(call_site, call_site, java_lang_invoke_CallSite::target_offset_in_bytes()); - Node* target_mh = kit.make_load(kit.control(), target_mh_adr, TypeInstPtr::BOTTOM, T_OBJECT); + const TypeOopPtr* target_type = TypeOopPtr::make_from_klass(C->env()->MethodHandle_klass()); + Node* target_mh_adr = kit.basic_plus_adr(call_site, java_lang_invoke_CallSite::target_offset_in_bytes()); + Node* target_mh = kit.make_load(kit.control(), target_mh_adr, target_type, T_OBJECT); address resolve_stub = SharedRuntime::get_resolve_opt_virtual_call_stub(); - CallStaticJavaNode *call = new (kit.C, tf()->domain()->cnt()) CallStaticJavaNode(tf(), resolve_stub, method(), kit.bci()); + CallStaticJavaNode* call = new (C, tf()->domain()->cnt()) CallStaticJavaNode(tf(), resolve_stub, method(), kit.bci()); // invokedynamic is treated as an optimized invokevirtual. call->set_optimized_virtual(true); // Take extra care (in the presence of argument motion) not to trash the SP: @@ -785,9 +790,10 @@ CallGenerator* CallGenerator::for_invokedynamic_inline(ciCallSite* call_site, JV JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { GraphKit kit(jvms); + Compile* C = kit.C; PhaseGVN& gvn = kit.gvn(); - CompileLog* log = kit.C->log(); + CompileLog* log = C->log(); if (log != NULL) { log->elem("predicted_dynamic_call bci='%d'", jvms->bci()); } @@ -803,8 +809,8 @@ JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { Node* receiver = kit.argument(0); // Check if the MethodHandle is the expected one - Node* cmp = gvn.transform(new(kit.C, 3) CmpPNode(receiver, predicted_mh)); - bol = gvn.transform(new(kit.C, 2) BoolNode(cmp, BoolTest::eq) ); + Node* cmp = gvn.transform(new (C, 3) CmpPNode(receiver, predicted_mh)); + bol = gvn.transform(new (C, 2) BoolNode(cmp, BoolTest::eq) ); } else { // Get the constant pool cache from the caller class. ciMethod* caller_method = jvms->method(); @@ -818,22 +824,25 @@ JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { size_t call_site_offset = cpcache->get_f1_offset(index); // Load the CallSite object from the constant pool cache. - const TypeOopPtr* cpcache_ptr = TypeOopPtr::make_from_constant(cpcache); - Node* cpcache_adr = kit.makecon(cpcache_ptr); - Node* call_site_adr = kit.basic_plus_adr(cpcache_adr, cpcache_adr, call_site_offset); - Node* call_site = kit.make_load(kit.control(), call_site_adr, TypeInstPtr::BOTTOM, T_OBJECT, Compile::AliasIdxRaw); + const TypeOopPtr* cpcache_type = TypeOopPtr::make_from_constant(cpcache); // returns TypeAryPtr of type T_OBJECT + const TypeOopPtr* call_site_type = TypeOopPtr::make_from_klass(C->env()->CallSite_klass()); + Node* cpcache_adr = kit.makecon(cpcache_type); + Node* call_site_adr = kit.basic_plus_adr(cpcache_adr, call_site_offset); + // The oops in the constant pool cache are not compressed; load then as raw pointers. + Node* call_site = kit.make_load(kit.control(), call_site_adr, call_site_type, T_ADDRESS, Compile::AliasIdxRaw); // Load the target MethodHandle from the CallSite object. + const TypeOopPtr* target_type = TypeOopPtr::make_from_klass(C->env()->MethodHandle_klass()); Node* target_adr = kit.basic_plus_adr(call_site, call_site, java_lang_invoke_CallSite::target_offset_in_bytes()); - Node* target_mh = kit.make_load(kit.control(), target_adr, TypeInstPtr::BOTTOM, T_OBJECT); + Node* target_mh = kit.make_load(kit.control(), target_adr, target_type, T_OBJECT); // Check if the MethodHandle is still the same. - Node* cmp = gvn.transform(new(kit.C, 3) CmpPNode(target_mh, predicted_mh)); - bol = gvn.transform(new(kit.C, 2) BoolNode(cmp, BoolTest::eq) ); + Node* cmp = gvn.transform(new (C, 3) CmpPNode(target_mh, predicted_mh)); + bol = gvn.transform(new (C, 2) BoolNode(cmp, BoolTest::eq) ); } IfNode* iff = kit.create_and_xform_if(kit.control(), bol, _hit_prob, COUNT_UNKNOWN); - kit.set_control( gvn.transform(new(kit.C, 1) IfTrueNode (iff))); - Node* slow_ctl = gvn.transform(new(kit.C, 1) IfFalseNode(iff)); + kit.set_control( gvn.transform(new (C, 1) IfTrueNode (iff))); + Node* slow_ctl = gvn.transform(new (C, 1) IfFalseNode(iff)); SafePointNode* slow_map = NULL; JVMState* slow_jvms; @@ -882,7 +891,7 @@ JVMState* PredictedDynamicCallGenerator::generate(JVMState* jvms) { // Finish the diamond. kit.C->set_has_split_ifs(true); // Has chance for split-if optimization - RegionNode* region = new (kit.C, 3) RegionNode(3); + RegionNode* region = new (C, 3) RegionNode(3); region->init_req(1, kit.control()); region->init_req(2, slow_map->control()); kit.set_control(gvn.transform(region)); diff --git a/hotspot/src/share/vm/opto/chaitin.cpp b/hotspot/src/share/vm/opto/chaitin.cpp index a74114add85..00cabcf237f 100644 --- a/hotspot/src/share/vm/opto/chaitin.cpp +++ b/hotspot/src/share/vm/opto/chaitin.cpp @@ -75,6 +75,7 @@ void LRG::dump( ) const { // Flags if( _is_oop ) tty->print("Oop "); if( _is_float ) tty->print("Float "); + if( _is_vector ) tty->print("Vector "); if( _was_spilled1 ) tty->print("Spilled "); if( _was_spilled2 ) tty->print("Spilled2 "); if( _direct_conflict ) tty->print("Direct_conflict "); @@ -479,16 +480,18 @@ void PhaseChaitin::Register_Allocate() { // Move important info out of the live_arena to longer lasting storage. alloc_node_regs(_names.Size()); - for( uint i=0; i < _names.Size(); i++ ) { - if( _names[i] ) { // Live range associated with Node? - LRG &lrg = lrgs( _names[i] ); - if( lrg.num_regs() == 1 ) { - _node_regs[i].set1( lrg.reg() ); + for (uint i=0; i < _names.Size(); i++) { + if (_names[i]) { // Live range associated with Node? + LRG &lrg = lrgs(_names[i]); + if (!lrg.alive()) { + _node_regs[i].set_bad(); + } else if (lrg.num_regs() == 1) { + _node_regs[i].set1(lrg.reg()); } else { // Must be a register-pair - if( !lrg._fat_proj ) { // Must be aligned adjacent register pair + if (!lrg._fat_proj) { // Must be aligned adjacent register pair // Live ranges record the highest register in their mask. // We want the low register for the AD file writer's convenience. - _node_regs[i].set2( OptoReg::add(lrg.reg(),-1) ); + _node_regs[i].set2( OptoReg::add(lrg.reg(),(1-lrg.num_regs())) ); } else { // Misaligned; extract 2 bits OptoReg::Name hi = lrg.reg(); // Get hi register lrg.Remove(hi); // Yank from mask @@ -568,7 +571,7 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { // Check for float-vs-int live range (used in register-pressure // calculations) const Type *n_type = n->bottom_type(); - if( n_type->is_floatingpoint() ) + if (n_type->is_floatingpoint()) lrg._is_float = 1; // Check for twice prior spilling. Once prior spilling might have @@ -599,18 +602,28 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { // Limit result register mask to acceptable registers const RegMask &rm = n->out_RegMask(); lrg.AND( rm ); - // Check for bound register masks - const RegMask &lrgmask = lrg.mask(); - if( lrgmask.is_bound1() || lrgmask.is_bound2() ) - lrg._is_bound = 1; - - // Check for maximum frequency value - if( lrg._maxfreq < b->_freq ) - lrg._maxfreq = b->_freq; int ireg = n->ideal_reg(); assert( !n->bottom_type()->isa_oop_ptr() || ireg == Op_RegP, "oops must be in Op_RegP's" ); + + // Check for vector live range (only if vector register is used). + // On SPARC vector uses RegD which could be misaligned so it is not + // processes as vector in RA. + if (RegMask::is_vector(ireg)) + lrg._is_vector = 1; + assert(n_type->isa_vect() == NULL || lrg._is_vector || ireg == Op_RegD, + "vector must be in vector registers"); + + // Check for bound register masks + const RegMask &lrgmask = lrg.mask(); + if (lrgmask.is_bound(ireg)) + lrg._is_bound = 1; + + // Check for maximum frequency value + if (lrg._maxfreq < b->_freq) + lrg._maxfreq = b->_freq; + // Check for oop-iness, or long/double // Check for multi-kill projection switch( ireg ) { @@ -689,7 +702,7 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { // AND changes how we count interferences. A mis-aligned // double can interfere with TWO aligned pairs, or effectively // FOUR registers! - if( rm.is_misaligned_Pair() ) { + if (rm.is_misaligned_pair()) { lrg._fat_proj = 1; lrg._is_bound = 1; } @@ -706,6 +719,33 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { lrg.set_reg_pressure(1); #endif break; + case Op_VecS: + assert(Matcher::vector_size_supported(T_BYTE,4), "sanity"); + assert(RegMask::num_registers(Op_VecS) == RegMask::SlotsPerVecS, "sanity"); + lrg.set_num_regs(RegMask::SlotsPerVecS); + lrg.set_reg_pressure(1); + break; + case Op_VecD: + assert(Matcher::vector_size_supported(T_FLOAT,RegMask::SlotsPerVecD), "sanity"); + assert(RegMask::num_registers(Op_VecD) == RegMask::SlotsPerVecD, "sanity"); + assert(lrgmask.is_aligned_sets(RegMask::SlotsPerVecD), "vector should be aligned"); + lrg.set_num_regs(RegMask::SlotsPerVecD); + lrg.set_reg_pressure(1); + break; + case Op_VecX: + assert(Matcher::vector_size_supported(T_FLOAT,RegMask::SlotsPerVecX), "sanity"); + assert(RegMask::num_registers(Op_VecX) == RegMask::SlotsPerVecX, "sanity"); + assert(lrgmask.is_aligned_sets(RegMask::SlotsPerVecX), "vector should be aligned"); + lrg.set_num_regs(RegMask::SlotsPerVecX); + lrg.set_reg_pressure(1); + break; + case Op_VecY: + assert(Matcher::vector_size_supported(T_FLOAT,RegMask::SlotsPerVecY), "sanity"); + assert(RegMask::num_registers(Op_VecY) == RegMask::SlotsPerVecY, "sanity"); + assert(lrgmask.is_aligned_sets(RegMask::SlotsPerVecY), "vector should be aligned"); + lrg.set_num_regs(RegMask::SlotsPerVecY); + lrg.set_reg_pressure(1); + break; default: ShouldNotReachHere(); } @@ -763,24 +803,38 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { } else { lrg.AND( rm ); } + // Check for bound register masks const RegMask &lrgmask = lrg.mask(); - if( lrgmask.is_bound1() || lrgmask.is_bound2() ) + int kreg = n->in(k)->ideal_reg(); + bool is_vect = RegMask::is_vector(kreg); + assert(n->in(k)->bottom_type()->isa_vect() == NULL || + is_vect || kreg == Op_RegD, + "vector must be in vector registers"); + if (lrgmask.is_bound(kreg)) lrg._is_bound = 1; + // If this use of a double forces a mis-aligned double, // flag as '_fat_proj' - really flag as allowing misalignment // AND changes how we count interferences. A mis-aligned // double can interfere with TWO aligned pairs, or effectively // FOUR registers! - if( lrg.num_regs() == 2 && !lrg._fat_proj && rm.is_misaligned_Pair() ) { +#ifdef ASSERT + if (is_vect) { + assert(lrgmask.is_aligned_sets(lrg.num_regs()), "vector should be aligned"); + assert(!lrg._fat_proj, "sanity"); + assert(RegMask::num_registers(kreg) == lrg.num_regs(), "sanity"); + } +#endif + if (!is_vect && lrg.num_regs() == 2 && !lrg._fat_proj && rm.is_misaligned_pair()) { lrg._fat_proj = 1; lrg._is_bound = 1; } // if the LRG is an unaligned pair, we will have to spill // so clear the LRG's register mask if it is not already spilled - if ( !n->is_SpillCopy() && - (lrg._def == NULL || lrg.is_multidef() || !lrg._def->is_SpillCopy()) && - lrgmask.is_misaligned_Pair()) { + if (!is_vect && !n->is_SpillCopy() && + (lrg._def == NULL || lrg.is_multidef() || !lrg._def->is_SpillCopy()) && + lrgmask.is_misaligned_pair()) { lrg.Clear(); } @@ -793,12 +847,14 @@ void PhaseChaitin::gather_lrg_masks( bool after_aggressive ) { } // end for all blocks // Final per-liverange setup - for( uint i2=0; i2<_maxlrg; i2++ ) { + for (uint i2=0; i2<_maxlrg; i2++) { LRG &lrg = lrgs(i2); - if( lrg.num_regs() == 2 && !lrg._fat_proj ) - lrg.ClearToPairs(); + assert(!lrg._is_vector || !lrg._fat_proj, "sanity"); + if (lrg.num_regs() > 1 && !lrg._fat_proj) { + lrg.clear_to_sets(); + } lrg.compute_set_mask_size(); - if( lrg.not_free() ) { // Handle case where we lose from the start + if (lrg.not_free()) { // Handle case where we lose from the start lrg.set_reg(OptoReg::Name(LRG::SPILL_REG)); lrg._direct_conflict = 1; } @@ -1104,22 +1160,17 @@ OptoReg::Name PhaseChaitin::bias_color( LRG &lrg, int chunk ) { // Choose a color which is legal for him RegMask tempmask = lrg.mask(); tempmask.AND(lrgs(copy_lrg).mask()); - OptoReg::Name reg; - if( lrg.num_regs() == 1 ) { - reg = tempmask.find_first_elem(); - } else { - tempmask.ClearToPairs(); - reg = tempmask.find_first_pair(); - } - if( OptoReg::is_valid(reg) ) + tempmask.clear_to_sets(lrg.num_regs()); + OptoReg::Name reg = tempmask.find_first_set(lrg.num_regs()); + if (OptoReg::is_valid(reg)) return reg; } } // If no bias info exists, just go with the register selection ordering - if( lrg.num_regs() == 2 ) { - // Find an aligned pair - return OptoReg::add(lrg.mask().find_first_pair(),chunk); + if (lrg._is_vector || lrg.num_regs() == 2) { + // Find an aligned set + return OptoReg::add(lrg.mask().find_first_set(lrg.num_regs()),chunk); } // CNC - Fun hack. Alternate 1st and 2nd selection. Enables post-allocate @@ -1149,6 +1200,7 @@ OptoReg::Name PhaseChaitin::choose_color( LRG &lrg, int chunk ) { // Use a heuristic to "bias" the color choice return bias_color(lrg, chunk); + assert(!lrg._is_vector, "should be not vector here" ); assert( lrg.num_regs() >= 2, "dead live ranges do not color" ); // Fat-proj case or misaligned double argument. @@ -1238,14 +1290,16 @@ uint PhaseChaitin::Select( ) { } //assert(is_allstack == lrg->mask().is_AllStack(), "nbrs must not change AllStackedness"); // Aligned pairs need aligned masks - if( lrg->num_regs() == 2 && !lrg->_fat_proj ) - lrg->ClearToPairs(); + assert(!lrg->_is_vector || !lrg->_fat_proj, "sanity"); + if (lrg->num_regs() > 1 && !lrg->_fat_proj) { + lrg->clear_to_sets(); + } // Check if a color is available and if so pick the color OptoReg::Name reg = choose_color( *lrg, chunk ); #ifdef SPARC debug_only(lrg->compute_set_mask_size()); - assert(lrg->num_regs() != 2 || lrg->is_bound() || is_even(reg-1), "allocate all doubles aligned"); + assert(lrg->num_regs() < 2 || lrg->is_bound() || is_even(reg-1), "allocate all doubles aligned"); #endif //--------------- @@ -1277,17 +1331,16 @@ uint PhaseChaitin::Select( ) { // If the live range is not bound, then we actually had some choices // to make. In this case, the mask has more bits in it than the colors // chosen. Restrict the mask to just what was picked. - if( lrg->num_regs() == 1 ) { // Size 1 live range + int n_regs = lrg->num_regs(); + assert(!lrg->_is_vector || !lrg->_fat_proj, "sanity"); + if (n_regs == 1 || !lrg->_fat_proj) { + assert(!lrg->_is_vector || n_regs <= RegMask::SlotsPerVecY, "sanity"); lrg->Clear(); // Clear the mask lrg->Insert(reg); // Set regmask to match selected reg - lrg->set_mask_size(1); - } else if( !lrg->_fat_proj ) { - // For pairs, also insert the low bit of the pair - assert( lrg->num_regs() == 2, "unbound fatproj???" ); - lrg->Clear(); // Clear the mask - lrg->Insert(reg); // Set regmask to match selected reg - lrg->Insert(OptoReg::add(reg,-1)); - lrg->set_mask_size(2); + // For vectors and pairs, also insert the low bit of the pair + for (int i = 1; i < n_regs; i++) + lrg->Insert(OptoReg::add(reg,-i)); + lrg->set_mask_size(n_regs); } else { // Else fatproj // mask must be equal to fatproj bits, by definition } @@ -1483,7 +1536,7 @@ Node *PhaseChaitin::find_base_for_derived( Node **derived_base_map, Node *derive // Check for AddP-related opcodes if( !derived->is_Phi() ) { - assert( derived->as_Mach()->ideal_Opcode() == Op_AddP, "" ); + assert(derived->as_Mach()->ideal_Opcode() == Op_AddP, err_msg("but is: %s", derived->Name())); Node *base = derived->in(AddPNode::Base); derived_base_map[derived->_idx] = base; return base; @@ -1860,12 +1913,20 @@ char *PhaseChaitin::dump_register( const Node *n, char *buf ) const { sprintf(buf,"L%d",lidx); // No register binding yet } else if( !lidx ) { // Special, not allocated value strcpy(buf,"Special"); - } else if( (lrgs(lidx).num_regs() == 1) - ? !lrgs(lidx).mask().is_bound1() - : !lrgs(lidx).mask().is_bound2() ) { - sprintf(buf,"L%d",lidx); // No register binding yet - } else { // Hah! We have a bound machine register - print_reg( lrgs(lidx).reg(), this, buf ); + } else { + if (lrgs(lidx)._is_vector) { + if (lrgs(lidx).mask().is_bound_set(lrgs(lidx).num_regs())) + print_reg( lrgs(lidx).reg(), this, buf ); // a bound machine register + else + sprintf(buf,"L%d",lidx); // No register binding yet + } else if( (lrgs(lidx).num_regs() == 1) + ? lrgs(lidx).mask().is_bound1() + : lrgs(lidx).mask().is_bound_pair() ) { + // Hah! We have a bound machine register + print_reg( lrgs(lidx).reg(), this, buf ); + } else { + sprintf(buf,"L%d",lidx); // No register binding yet + } } } return buf+strlen(buf); diff --git a/hotspot/src/share/vm/opto/chaitin.hpp b/hotspot/src/share/vm/opto/chaitin.hpp index 1e6be63c452..c10f18d742e 100644 --- a/hotspot/src/share/vm/opto/chaitin.hpp +++ b/hotspot/src/share/vm/opto/chaitin.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -99,8 +99,15 @@ public: void set_mask_size( int size ) { assert((size == 65535) || (size == (int)_mask.Size()), ""); _mask_size = size; - debug_only(_msize_valid=1;) - debug_only( if( _num_regs == 2 && !_fat_proj ) _mask.VerifyPairs(); ) +#ifdef ASSERT + _msize_valid=1; + if (_is_vector) { + assert(!_fat_proj, "sanity"); + _mask.verify_sets(_num_regs); + } else if (_num_regs == 2 && !_fat_proj) { + _mask.verify_pairs(); + } +#endif } void compute_set_mask_size() { set_mask_size(compute_mask_size()); } int mask_size() const { assert( _msize_valid, "mask size not valid" ); @@ -116,7 +123,8 @@ public: void Set_All() { _mask.Set_All(); debug_only(_msize_valid=1); _mask_size = RegMask::CHUNK_SIZE; } void Insert( OptoReg::Name reg ) { _mask.Insert(reg); debug_only(_msize_valid=0;) } void Remove( OptoReg::Name reg ) { _mask.Remove(reg); debug_only(_msize_valid=0;) } - void ClearToPairs() { _mask.ClearToPairs(); debug_only(_msize_valid=0;) } + void clear_to_pairs() { _mask.clear_to_pairs(); debug_only(_msize_valid=0;) } + void clear_to_sets() { _mask.clear_to_sets(_num_regs); debug_only(_msize_valid=0;) } // Number of registers this live range uses when it colors private: @@ -150,6 +158,7 @@ public: uint _is_oop:1, // Live-range holds an oop _is_float:1, // True if in float registers + _is_vector:1, // True if in vector registers _was_spilled1:1, // True if prior spilling on def _was_spilled2:1, // True if twice prior spilling on def _is_bound:1, // live range starts life with no diff --git a/hotspot/src/share/vm/opto/classes.hpp b/hotspot/src/share/vm/opto/classes.hpp index 03b5107c3e4..bdf18b51f32 100644 --- a/hotspot/src/share/vm/opto/classes.hpp +++ b/hotspot/src/share/vm/opto/classes.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -245,14 +245,12 @@ macro(XorI) macro(XorL) macro(Vector) macro(AddVB) -macro(AddVC) macro(AddVS) macro(AddVI) macro(AddVL) macro(AddVF) macro(AddVD) macro(SubVB) -macro(SubVC) macro(SubVS) macro(SubVI) macro(SubVL) @@ -263,74 +261,36 @@ macro(MulVD) macro(DivVF) macro(DivVD) macro(LShiftVB) -macro(LShiftVC) macro(LShiftVS) macro(LShiftVI) -macro(URShiftVB) -macro(URShiftVC) -macro(URShiftVS) -macro(URShiftVI) +macro(RShiftVB) +macro(RShiftVS) +macro(RShiftVI) macro(AndV) macro(OrV) macro(XorV) -macro(VectorLoad) -macro(Load16B) -macro(Load8B) -macro(Load4B) -macro(Load8C) -macro(Load4C) -macro(Load2C) -macro(Load8S) -macro(Load4S) -macro(Load2S) -macro(Load4I) -macro(Load2I) -macro(Load2L) -macro(Load4F) -macro(Load2F) -macro(Load2D) -macro(VectorStore) -macro(Store16B) -macro(Store8B) -macro(Store4B) -macro(Store8C) -macro(Store4C) -macro(Store2C) -macro(Store4I) -macro(Store2I) -macro(Store2L) -macro(Store4F) -macro(Store2F) -macro(Store2D) +macro(LoadVector) +macro(StoreVector) macro(Pack) macro(PackB) macro(PackS) -macro(PackC) macro(PackI) macro(PackL) macro(PackF) macro(PackD) -macro(Pack2x1B) -macro(Pack2x2B) -macro(Replicate16B) -macro(Replicate8B) -macro(Replicate4B) -macro(Replicate8S) -macro(Replicate4S) -macro(Replicate2S) -macro(Replicate8C) -macro(Replicate4C) -macro(Replicate2C) -macro(Replicate4I) -macro(Replicate2I) -macro(Replicate2L) -macro(Replicate4F) -macro(Replicate2F) -macro(Replicate2D) +macro(Pack2L) +macro(Pack2D) +macro(ReplicateB) +macro(ReplicateS) +macro(ReplicateI) +macro(ReplicateL) +macro(ReplicateF) +macro(ReplicateD) macro(Extract) macro(ExtractB) -macro(ExtractS) +macro(ExtractUB) macro(ExtractC) +macro(ExtractS) macro(ExtractI) macro(ExtractL) macro(ExtractF) diff --git a/hotspot/src/share/vm/opto/compile.cpp b/hotspot/src/share/vm/opto/compile.cpp index 5c4b5145ab7..5331d033fe2 100644 --- a/hotspot/src/share/vm/opto/compile.cpp +++ b/hotspot/src/share/vm/opto/compile.cpp @@ -2591,38 +2591,12 @@ static void final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc ) { } break; - case Op_Load16B: - case Op_Load8B: - case Op_Load4B: - case Op_Load8S: - case Op_Load4S: - case Op_Load2S: - case Op_Load8C: - case Op_Load4C: - case Op_Load2C: - case Op_Load4I: - case Op_Load2I: - case Op_Load2L: - case Op_Load4F: - case Op_Load2F: - case Op_Load2D: - case Op_Store16B: - case Op_Store8B: - case Op_Store4B: - case Op_Store8C: - case Op_Store4C: - case Op_Store2C: - case Op_Store4I: - case Op_Store2I: - case Op_Store2L: - case Op_Store4F: - case Op_Store2F: - case Op_Store2D: + case Op_LoadVector: + case Op_StoreVector: break; case Op_PackB: case Op_PackS: - case Op_PackC: case Op_PackI: case Op_PackF: case Op_PackL: diff --git a/hotspot/src/share/vm/opto/idealGraphPrinter.cpp b/hotspot/src/share/vm/opto/idealGraphPrinter.cpp index f9f40a37d7a..3344ce29c8e 100644 --- a/hotspot/src/share/vm/opto/idealGraphPrinter.cpp +++ b/hotspot/src/share/vm/opto/idealGraphPrinter.cpp @@ -130,15 +130,15 @@ IdealGraphPrinter::IdealGraphPrinter() { } else { st.print("%s%d", PrintIdealGraphFile, _file_count); } - fileStream *stream = new (ResourceObj::C_HEAP) fileStream(st.as_string()); + fileStream *stream = new (ResourceObj::C_HEAP, mtCompiler) fileStream(st.as_string()); _output = stream; } else { - fileStream *stream = new (ResourceObj::C_HEAP) fileStream(PrintIdealGraphFile); + fileStream *stream = new (ResourceObj::C_HEAP, mtCompiler) fileStream(PrintIdealGraphFile); _output = stream; } _file_count++; } else { - _stream = new (ResourceObj::C_HEAP) networkStream(); + _stream = new (ResourceObj::C_HEAP, mtCompiler) networkStream(); // Try to connect to visualizer if (_stream->connect(PrintIdealGraphAddress, PrintIdealGraphPort)) { @@ -160,7 +160,7 @@ IdealGraphPrinter::IdealGraphPrinter() { } } - _xml = new (ResourceObj::C_HEAP) xmlStream(_output); + _xml = new (ResourceObj::C_HEAP, mtCompiler) xmlStream(_output); head(TOP_ELEMENT); } diff --git a/hotspot/src/share/vm/opto/ifg.cpp b/hotspot/src/share/vm/opto/ifg.cpp index 3a225456503..4827a17d8df 100644 --- a/hotspot/src/share/vm/opto/ifg.cpp +++ b/hotspot/src/share/vm/opto/ifg.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -416,6 +416,7 @@ uint PhaseChaitin::count_int_pressure( IndexSet *liveout ) { if( lrgs(lidx).mask().is_UP() && lrgs(lidx).mask_size() && !lrgs(lidx)._is_float && + !lrgs(lidx)._is_vector && lrgs(lidx).mask().overlap(*Matcher::idealreg2regmask[Op_RegI]) ) cnt += lrgs(lidx).reg_pressure(); } @@ -430,7 +431,7 @@ uint PhaseChaitin::count_float_pressure( IndexSet *liveout ) { while ((lidx = elements.next()) != 0) { if( lrgs(lidx).mask().is_UP() && lrgs(lidx).mask_size() && - lrgs(lidx)._is_float ) + (lrgs(lidx)._is_float || lrgs(lidx)._is_vector)) cnt += lrgs(lidx).reg_pressure(); } return cnt; @@ -439,8 +440,8 @@ uint PhaseChaitin::count_float_pressure( IndexSet *liveout ) { //------------------------------lower_pressure--------------------------------- // Adjust register pressure down by 1. Capture last hi-to-low transition, static void lower_pressure( LRG *lrg, uint where, Block *b, uint *pressure, uint *hrp_index ) { - if( lrg->mask().is_UP() && lrg->mask_size() ) { - if( lrg->_is_float ) { + if (lrg->mask().is_UP() && lrg->mask_size()) { + if (lrg->_is_float || lrg->_is_vector) { pressure[1] -= lrg->reg_pressure(); if( pressure[1] == (uint)FLOATPRESSURE ) { hrp_index[1] = where; @@ -522,8 +523,8 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { LRG &lrg = lrgs(lidx); lrg._area += cost; // Compute initial register pressure - if( lrg.mask().is_UP() && lrg.mask_size() ) { - if( lrg._is_float ) { // Count float pressure + if (lrg.mask().is_UP() && lrg.mask_size()) { + if (lrg._is_float || lrg._is_vector) { // Count float pressure pressure[1] += lrg.reg_pressure(); #ifdef EXACT_PRESSURE if( pressure[1] > b->_freg_pressure ) @@ -681,13 +682,10 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { // according to its bindings. const RegMask &rmask = lrgs(r).mask(); if( lrgs(r).is_bound() && !(n->rematerialize()) && rmask.is_NotEmpty() ) { - // Smear odd bits; leave only aligned pairs of bits. - RegMask r2mask = rmask; - r2mask.SmearToPairs(); // Check for common case int r_size = lrgs(r).num_regs(); OptoReg::Name r_reg = (r_size == 1) ? rmask.find_first_elem() : OptoReg::Physical; - + // Smear odd bits IndexSetIterator elements(&liveout); uint l; while ((l = elements.next()) != 0) { @@ -701,10 +699,15 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { // Remove the bits from LRG 'r' from LRG 'l' so 'l' no // longer interferes with 'r'. If 'l' requires aligned // adjacent pairs, subtract out bit pairs. - if( lrg.num_regs() == 2 && !lrg._fat_proj ) { + assert(!lrg._is_vector || !lrg._fat_proj, "sanity"); + if (lrg.num_regs() > 1 && !lrg._fat_proj) { + RegMask r2mask = rmask; + // Leave only aligned set of bits. + r2mask.smear_to_sets(lrg.num_regs()); + // It includes vector case. lrg.SUBTRACT( r2mask ); lrg.compute_set_mask_size(); - } else if( r_size != 1 ) { + } else if( r_size != 1 ) { // fat proj lrg.SUBTRACT( rmask ); lrg.compute_set_mask_size(); } else { // Common case: size 1 bound removal @@ -763,8 +766,8 @@ uint PhaseChaitin::build_ifg_physical( ResourceArea *a ) { // Newly live things assumed live from here to top of block lrg._area += cost; // Adjust register pressure - if( lrg.mask().is_UP() && lrg.mask_size() ) { - if( lrg._is_float ) { + if (lrg.mask().is_UP() && lrg.mask_size()) { + if (lrg._is_float || lrg._is_vector) { pressure[1] += lrg.reg_pressure(); #ifdef EXACT_PRESSURE if( pressure[1] > b->_freg_pressure ) diff --git a/hotspot/src/share/vm/opto/lcm.cpp b/hotspot/src/share/vm/opto/lcm.cpp index 1ad9f0b1f0c..2f272eb55c7 100644 --- a/hotspot/src/share/vm/opto/lcm.cpp +++ b/hotspot/src/share/vm/opto/lcm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -139,6 +139,7 @@ void Block::implicit_null_check(PhaseCFG *cfg, Node *proj, Node *val, int allowe int iop = mach->ideal_Opcode(); switch( iop ) { case Op_LoadB: + case Op_LoadUB: case Op_LoadUS: case Op_LoadD: case Op_LoadF: @@ -445,6 +446,11 @@ Node *Block::select(PhaseCFG *cfg, Node_List &worklist, GrowableArray &read if( e->is_MachNullCheck() && e->in(1) == n ) continue; + // Schedule IV increment last. + if (e->is_Mach() && e->as_Mach()->ideal_Opcode() == Op_CountedLoopEnd && + e->in(1)->in(1) == n && n->is_iteratively_computed()) + continue; + uint n_choice = 2; // See if this instruction is consumed by a branch. If so, then (as the diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp index f9d740efd7b..981a241a4f1 100644 --- a/hotspot/src/share/vm/opto/library_call.cpp +++ b/hotspot/src/share/vm/opto/library_call.cpp @@ -160,6 +160,7 @@ class LibraryCallKit : public GraphKit { bool inline_trans(vmIntrinsics::ID id); bool inline_abs(vmIntrinsics::ID id); bool inline_sqrt(vmIntrinsics::ID id); + void finish_pow_exp(Node* result, Node* x, Node* y, const TypeFunc* call_type, address funcAddr, const char* funcName); bool inline_pow(vmIntrinsics::ID id); bool inline_exp(vmIntrinsics::ID id); bool inline_min_max(vmIntrinsics::ID id); @@ -1535,40 +1536,79 @@ bool LibraryCallKit::inline_abs(vmIntrinsics::ID id) { return true; } +void LibraryCallKit::finish_pow_exp(Node* result, Node* x, Node* y, const TypeFunc* call_type, address funcAddr, const char* funcName) { + //------------------- + //result=(result.isNaN())? funcAddr():result; + // Check: If isNaN() by checking result!=result? then either trap + // or go to runtime + Node* cmpisnan = _gvn.transform(new (C, 3) CmpDNode(result,result)); + // Build the boolean node + Node* bolisnum = _gvn.transform( new (C, 2) BoolNode(cmpisnan, BoolTest::eq) ); + + if (!too_many_traps(Deoptimization::Reason_intrinsic)) { + { + BuildCutout unless(this, bolisnum, PROB_STATIC_FREQUENT); + // End the current control-flow path + push_pair(x); + if (y != NULL) { + push_pair(y); + } + // The pow or exp intrinsic returned a NaN, which requires a call + // to the runtime. Recompile with the runtime call. + uncommon_trap(Deoptimization::Reason_intrinsic, + Deoptimization::Action_make_not_entrant); + } + push_pair(result); + } else { + // If this inlining ever returned NaN in the past, we compile a call + // to the runtime to properly handle corner cases + + IfNode* iff = create_and_xform_if(control(), bolisnum, PROB_STATIC_FREQUENT, COUNT_UNKNOWN); + Node* if_slow = _gvn.transform( new (C, 1) IfFalseNode(iff) ); + Node* if_fast = _gvn.transform( new (C, 1) IfTrueNode(iff) ); + + if (!if_slow->is_top()) { + RegionNode* result_region = new(C, 3) RegionNode(3); + PhiNode* result_val = new (C, 3) PhiNode(result_region, Type::DOUBLE); + + result_region->init_req(1, if_fast); + result_val->init_req(1, result); + + set_control(if_slow); + + const TypePtr* no_memory_effects = NULL; + Node* rt = make_runtime_call(RC_LEAF, call_type, funcAddr, funcName, + no_memory_effects, + x, top(), y, y ? top() : NULL); + Node* value = _gvn.transform(new (C, 1) ProjNode(rt, TypeFunc::Parms+0)); +#ifdef ASSERT + Node* value_top = _gvn.transform(new (C, 1) ProjNode(rt, TypeFunc::Parms+1)); + assert(value_top == top(), "second value must be top"); +#endif + + result_region->init_req(2, control()); + result_val->init_req(2, value); + push_result(result_region, result_val); + } else { + push_pair(result); + } + } +} + //------------------------------inline_exp------------------------------------- // Inline exp instructions, if possible. The Intel hardware only misses // really odd corner cases (+/- Infinity). Just uncommon-trap them. bool LibraryCallKit::inline_exp(vmIntrinsics::ID id) { assert(id == vmIntrinsics::_dexp, "Not exp"); - // If this inlining ever returned NaN in the past, we do not intrinsify it - // every again. NaN results requires StrictMath.exp handling. - if (too_many_traps(Deoptimization::Reason_intrinsic)) return false; - _sp += arg_size(); // restore stack pointer Node *x = pop_math_arg(); Node *result = _gvn.transform(new (C, 2) ExpDNode(0,x)); - //------------------- - //result=(result.isNaN())? StrictMath::exp():result; - // Check: If isNaN() by checking result!=result? then go to Strict Math - Node* cmpisnan = _gvn.transform(new (C, 3) CmpDNode(result,result)); - // Build the boolean node - Node* bolisnum = _gvn.transform( new (C, 2) BoolNode(cmpisnan, BoolTest::eq) ); - - { BuildCutout unless(this, bolisnum, PROB_STATIC_FREQUENT); - // End the current control-flow path - push_pair(x); - // Math.exp intrinsic returned a NaN, which requires StrictMath.exp - // to handle. Recompile without intrinsifying Math.exp - uncommon_trap(Deoptimization::Reason_intrinsic, - Deoptimization::Action_make_not_entrant); - } + finish_pow_exp(result, x, NULL, OptoRuntime::Math_D_D_Type(), CAST_FROM_FN_PTR(address, SharedRuntime::dexp), "EXP"); C->set_has_split_ifs(true); // Has chance for split-if optimization - push_pair(result); - return true; } @@ -1577,17 +1617,12 @@ bool LibraryCallKit::inline_exp(vmIntrinsics::ID id) { bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { assert(id == vmIntrinsics::_dpow, "Not pow"); - // If this inlining ever returned NaN in the past, we do not intrinsify it - // every again. NaN results requires StrictMath.pow handling. - if (too_many_traps(Deoptimization::Reason_intrinsic)) return false; - - // Do not intrinsify on older platforms which lack cmove. - if (ConditionalMoveLimit == 0) return false; - // Pseudocode for pow // if (x <= 0.0) { - // if ((double)((int)y)==y) { // if y is int - // result = ((1&(int)y)==0)?-DPow(abs(x), y):DPow(abs(x), y) + // long longy = (long)y; + // if ((double)longy == y) { // if y is long + // if (y + 1 == y) longy = 0; // huge number: even + // result = ((1&longy) == 0)?-DPow(abs(x), y):DPow(abs(x), y); // } else { // result = NaN; // } @@ -1595,7 +1630,7 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { // result = DPow(x,y); // } // if (result != result)? { - // uncommon_trap(); + // result = uncommon_trap() or runtime_call(); // } // return result; @@ -1603,15 +1638,14 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { Node* y = pop_math_arg(); Node* x = pop_math_arg(); - Node *fast_result = _gvn.transform( new (C, 3) PowDNode(0, x, y) ); + Node* result = NULL; - // Short form: if not top-level (i.e., Math.pow but inlining Math.pow - // inside of something) then skip the fancy tests and just check for - // NaN result. - Node *result = NULL; - if( jvms()->depth() >= 1 ) { - result = fast_result; + if (!too_many_traps(Deoptimization::Reason_intrinsic)) { + // Short form: skip the fancy tests and just check for NaN result. + result = _gvn.transform( new (C, 3) PowDNode(0, x, y) ); } else { + // If this inlining ever returned NaN in the past, include all + // checks + call to the runtime. // Set the merge point for If node with condition of (x <= 0.0) // There are four possible paths to region node and phi node @@ -1627,55 +1661,95 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { Node *bol1 = _gvn.transform( new (C, 2) BoolNode( cmp, BoolTest::le ) ); // Branch either way IfNode *if1 = create_and_xform_if(control(),bol1, PROB_STATIC_INFREQUENT, COUNT_UNKNOWN); - Node *opt_test = _gvn.transform(if1); - //assert( opt_test->is_If(), "Expect an IfNode"); - IfNode *opt_if1 = (IfNode*)opt_test; // Fast path taken; set region slot 3 - Node *fast_taken = _gvn.transform( new (C, 1) IfFalseNode(opt_if1) ); + Node *fast_taken = _gvn.transform( new (C, 1) IfFalseNode(if1) ); r->init_req(3,fast_taken); // Capture fast-control // Fast path not-taken, i.e. slow path - Node *complex_path = _gvn.transform( new (C, 1) IfTrueNode(opt_if1) ); + Node *complex_path = _gvn.transform( new (C, 1) IfTrueNode(if1) ); // Set fast path result - Node *fast_result = _gvn.transform( new (C, 3) PowDNode(0, y, x) ); + Node *fast_result = _gvn.transform( new (C, 3) PowDNode(0, x, y) ); phi->init_req(3, fast_result); // Complex path - // Build the second if node (if y is int) - // Node for (int)y - Node *inty = _gvn.transform( new (C, 2) ConvD2INode(y)); - // Node for (double)((int) y) - Node *doubleinty= _gvn.transform( new (C, 2) ConvI2DNode(inty)); - // Check (double)((int) y) : y - Node *cmpinty= _gvn.transform(new (C, 3) CmpDNode(doubleinty, y)); - // Check if (y isn't int) then go to slow path + // Build the second if node (if y is long) + // Node for (long)y + Node *longy = _gvn.transform( new (C, 2) ConvD2LNode(y)); + // Node for (double)((long) y) + Node *doublelongy= _gvn.transform( new (C, 2) ConvL2DNode(longy)); + // Check (double)((long) y) : y + Node *cmplongy= _gvn.transform(new (C, 3) CmpDNode(doublelongy, y)); + // Check if (y isn't long) then go to slow path - Node *bol2 = _gvn.transform( new (C, 2) BoolNode( cmpinty, BoolTest::ne ) ); + Node *bol2 = _gvn.transform( new (C, 2) BoolNode( cmplongy, BoolTest::ne ) ); // Branch either way IfNode *if2 = create_and_xform_if(complex_path,bol2, PROB_STATIC_INFREQUENT, COUNT_UNKNOWN); - Node *slow_path = opt_iff(r,if2); // Set region path 2 + Node* ylong_path = _gvn.transform( new (C, 1) IfFalseNode(if2)); - // Calculate DPow(abs(x), y)*(1 & (int)y) + Node *slow_path = _gvn.transform( new (C, 1) IfTrueNode(if2) ); + + // Calculate DPow(abs(x), y)*(1 & (long)y) // Node for constant 1 - Node *conone = intcon(1); - // 1& (int)y - Node *signnode= _gvn.transform( new (C, 3) AndINode(conone, inty) ); + Node *conone = longcon(1); + // 1& (long)y + Node *signnode= _gvn.transform( new (C, 3) AndLNode(conone, longy) ); + + // A huge number is always even. Detect a huge number by checking + // if y + 1 == y and set integer to be tested for parity to 0. + // Required for corner case: + // (long)9.223372036854776E18 = max_jlong + // (double)(long)9.223372036854776E18 = 9.223372036854776E18 + // max_jlong is odd but 9.223372036854776E18 is even + Node* yplus1 = _gvn.transform( new (C, 3) AddDNode(y, makecon(TypeD::make(1)))); + Node *cmpyplus1= _gvn.transform(new (C, 3) CmpDNode(yplus1, y)); + Node *bolyplus1 = _gvn.transform( new (C, 2) BoolNode( cmpyplus1, BoolTest::eq ) ); + Node* correctedsign = NULL; + if (ConditionalMoveLimit != 0) { + correctedsign = _gvn.transform( CMoveNode::make(C, NULL, bolyplus1, signnode, longcon(0), TypeLong::LONG)); + } else { + IfNode *ifyplus1 = create_and_xform_if(ylong_path,bolyplus1, PROB_FAIR, COUNT_UNKNOWN); + RegionNode *r = new (C, 3) RegionNode(3); + Node *phi = new (C, 3) PhiNode(r, TypeLong::LONG); + r->init_req(1, _gvn.transform( new (C, 1) IfFalseNode(ifyplus1))); + r->init_req(2, _gvn.transform( new (C, 1) IfTrueNode(ifyplus1))); + phi->init_req(1, signnode); + phi->init_req(2, longcon(0)); + correctedsign = _gvn.transform(phi); + ylong_path = _gvn.transform(r); + record_for_igvn(r); + } + // zero node - Node *conzero = intcon(0); - // Check (1&(int)y)==0? - Node *cmpeq1 = _gvn.transform(new (C, 3) CmpINode(signnode, conzero)); - // Check if (1&(int)y)!=0?, if so the result is negative + Node *conzero = longcon(0); + // Check (1&(long)y)==0? + Node *cmpeq1 = _gvn.transform(new (C, 3) CmpLNode(correctedsign, conzero)); + // Check if (1&(long)y)!=0?, if so the result is negative Node *bol3 = _gvn.transform( new (C, 2) BoolNode( cmpeq1, BoolTest::ne ) ); // abs(x) Node *absx=_gvn.transform( new (C, 2) AbsDNode(x)); // abs(x)^y - Node *absxpowy = _gvn.transform( new (C, 3) PowDNode(0, y, absx) ); + Node *absxpowy = _gvn.transform( new (C, 3) PowDNode(0, absx, y) ); // -abs(x)^y Node *negabsxpowy = _gvn.transform(new (C, 2) NegDNode (absxpowy)); - // (1&(int)y)==1?-DPow(abs(x), y):DPow(abs(x), y) - Node *signresult = _gvn.transform( CMoveNode::make(C, NULL, bol3, absxpowy, negabsxpowy, Type::DOUBLE)); + // (1&(long)y)==1?-DPow(abs(x), y):DPow(abs(x), y) + Node *signresult = NULL; + if (ConditionalMoveLimit != 0) { + signresult = _gvn.transform( CMoveNode::make(C, NULL, bol3, absxpowy, negabsxpowy, Type::DOUBLE)); + } else { + IfNode *ifyeven = create_and_xform_if(ylong_path,bol3, PROB_FAIR, COUNT_UNKNOWN); + RegionNode *r = new (C, 3) RegionNode(3); + Node *phi = new (C, 3) PhiNode(r, Type::DOUBLE); + r->init_req(1, _gvn.transform( new (C, 1) IfFalseNode(ifyeven))); + r->init_req(2, _gvn.transform( new (C, 1) IfTrueNode(ifyeven))); + phi->init_req(1, absxpowy); + phi->init_req(2, negabsxpowy); + signresult = _gvn.transform(phi); + ylong_path = _gvn.transform(r); + record_for_igvn(r); + } // Set complex path fast result + r->init_req(2, ylong_path); phi->init_req(2, signresult); static const jlong nan_bits = CONST64(0x7ff8000000000000); @@ -1689,27 +1763,10 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) { result=_gvn.transform(phi); } - //------------------- - //result=(result.isNaN())? uncommon_trap():result; - // Check: If isNaN() by checking result!=result? then go to Strict Math - Node* cmpisnan = _gvn.transform(new (C, 3) CmpDNode(result,result)); - // Build the boolean node - Node* bolisnum = _gvn.transform( new (C, 2) BoolNode(cmpisnan, BoolTest::eq) ); - - { BuildCutout unless(this, bolisnum, PROB_STATIC_FREQUENT); - // End the current control-flow path - push_pair(x); - push_pair(y); - // Math.pow intrinsic returned a NaN, which requires StrictMath.pow - // to handle. Recompile without intrinsifying Math.pow. - uncommon_trap(Deoptimization::Reason_intrinsic, - Deoptimization::Action_make_not_entrant); - } + finish_pow_exp(result, x, y, OptoRuntime::Math_DD_D_Type(), CAST_FROM_FN_PTR(address, SharedRuntime::dpow), "POW"); C->set_has_split_ifs(true); // Has chance for split-if optimization - push_pair(result); - return true; } @@ -3592,8 +3649,10 @@ bool LibraryCallKit::inline_array_copyOf(bool is_copyOfRange) { } // Bail out if length is negative. - // ...Not needed, since the new_array will throw the right exception. - //generate_negative_guard(length, bailout, &length); + // Without this the new_array would throw + // NegativeArraySizeException but IllegalArgumentException is what + // should be thrown + generate_negative_guard(length, bailout, &length); if (bailout->req() > 1) { PreserveJVMState pjvms(this); @@ -3617,7 +3676,9 @@ bool LibraryCallKit::inline_array_copyOf(bool is_copyOfRange) { // Extreme case: Arrays.copyOf((Integer[])x, 10, String[].class). // This will fail a store-check if x contains any non-nulls. bool disjoint_bases = true; - bool length_never_negative = true; + // if start > orig_length then the length of the copy may be + // negative. + bool length_never_negative = !is_copyOfRange; generate_arraycopy(TypeAryPtr::OOPS, T_OBJECT, original, start, newcopy, intcon(0), moved, disjoint_bases, length_never_negative); diff --git a/hotspot/src/share/vm/opto/loopnode.cpp b/hotspot/src/share/vm/opto/loopnode.cpp index afd96045aa7..43def731478 100644 --- a/hotspot/src/share/vm/opto/loopnode.cpp +++ b/hotspot/src/share/vm/opto/loopnode.cpp @@ -2751,7 +2751,8 @@ int PhaseIdealLoop::build_loop_tree_impl( Node *n, int pre_order ) { // Do not count uncommon calls if( !n->is_CallStaticJava() || !n->as_CallStaticJava()->_name ) { Node *iff = n->in(0)->in(0); - if( !iff->is_If() || + // No any calls for vectorized loops. + if( UseSuperWord || !iff->is_If() || (n->in(0)->Opcode() == Op_IfFalse && (1.0 - iff->as_If()->_prob) >= 0.01) || (iff->as_If()->_prob >= 0.01) ) @@ -3216,7 +3217,8 @@ void PhaseIdealLoop::build_loop_late_post( Node *n ) { case Op_ModF: case Op_ModD: case Op_LoadB: // Same with Loads; they can sink - case Op_LoadUS: // during loop optimizations. + case Op_LoadUB: // during loop optimizations. + case Op_LoadUS: case Op_LoadD: case Op_LoadF: case Op_LoadI: diff --git a/hotspot/src/share/vm/opto/machnode.cpp b/hotspot/src/share/vm/opto/machnode.cpp index 7bc5877854c..88bb23b370f 100644 --- a/hotspot/src/share/vm/opto/machnode.cpp +++ b/hotspot/src/share/vm/opto/machnode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -439,9 +439,9 @@ bool MachNode::rematerialize() const { // Don't remateralize somebody with bound inputs - it stretches a // fixed register lifetime. uint idx = oper_input_base(); - if( req() > idx ) { + if (req() > idx) { const RegMask &rm = in_RegMask(idx); - if( rm.is_bound1() || rm.is_bound2() ) + if (rm.is_bound(ideal_reg())) return false; } diff --git a/hotspot/src/share/vm/opto/machnode.hpp b/hotspot/src/share/vm/opto/machnode.hpp index 566e031d1a1..4db1154e8df 100644 --- a/hotspot/src/share/vm/opto/machnode.hpp +++ b/hotspot/src/share/vm/opto/machnode.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -319,6 +319,7 @@ public: class MachTypeNode : public MachNode { virtual uint size_of() const { return sizeof(*this); } // Size is bigger public: + MachTypeNode( ) {} const Type *_bottom_type; virtual const class Type *bottom_type() const { return _bottom_type; } @@ -370,12 +371,12 @@ public: //------------------------------MachConstantNode------------------------------- // Machine node that holds a constant which is stored in the constant table. -class MachConstantNode : public MachNode { +class MachConstantNode : public MachTypeNode { protected: Compile::Constant _constant; // This node's constant. public: - MachConstantNode() : MachNode() { + MachConstantNode() : MachTypeNode() { init_class_id(Class_MachConstant); } diff --git a/hotspot/src/share/vm/opto/macro.cpp b/hotspot/src/share/vm/opto/macro.cpp index b4d54f7e9af..fee17c48a95 100644 --- a/hotspot/src/share/vm/opto/macro.cpp +++ b/hotspot/src/share/vm/opto/macro.cpp @@ -409,7 +409,7 @@ Node *PhaseMacroExpand::value_from_mem_phi(Node *mem, BasicType ft, const Type * Node *alloc_mem = alloc->in(TypeFunc::Memory); uint length = mem->req(); - GrowableArray values(length, length, NULL); + GrowableArray values(length, length, NULL, false); // create a new Phi for the value PhiNode *phi = new (C, length) PhiNode(mem->in(0), phi_type, NULL, instance_id, alias_idx, offset); diff --git a/hotspot/src/share/vm/opto/matcher.cpp b/hotspot/src/share/vm/opto/matcher.cpp index 397385670d2..f6bb30769cd 100644 --- a/hotspot/src/share/vm/opto/matcher.cpp +++ b/hotspot/src/share/vm/opto/matcher.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,6 +35,7 @@ #include "opto/rootnode.hpp" #include "opto/runtime.hpp" #include "opto/type.hpp" +#include "opto/vectornode.hpp" #include "runtime/atomic.hpp" #include "runtime/os.hpp" #ifdef TARGET_ARCH_MODEL_x86_32 @@ -58,18 +59,6 @@ OptoReg::Name OptoReg::c_frame_pointer; - - -const int Matcher::base2reg[Type::lastype] = { - Node::NotAMachineReg,0,0, Op_RegI, Op_RegL, 0, Op_RegN, - Node::NotAMachineReg, Node::NotAMachineReg, /* tuple, array */ - Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, /* the pointers */ - 0, 0/*abio*/, - Op_RegP /* Return address */, 0, /* the memories */ - Op_RegF, Op_RegF, Op_RegF, Op_RegD, Op_RegD, Op_RegD, - 0 /*bottom*/ -}; - const RegMask *Matcher::idealreg2regmask[_last_machine_leaf]; RegMask Matcher::mreg2regmask[_last_Mach_Reg]; RegMask Matcher::STACK_ONLY_mask; @@ -107,6 +96,10 @@ Matcher::Matcher( Node_List &proj_list ) : idealreg2spillmask [Op_RegF] = NULL; idealreg2spillmask [Op_RegD] = NULL; idealreg2spillmask [Op_RegP] = NULL; + idealreg2spillmask [Op_VecS] = NULL; + idealreg2spillmask [Op_VecD] = NULL; + idealreg2spillmask [Op_VecX] = NULL; + idealreg2spillmask [Op_VecY] = NULL; idealreg2debugmask [Op_RegI] = NULL; idealreg2debugmask [Op_RegN] = NULL; @@ -114,6 +107,10 @@ Matcher::Matcher( Node_List &proj_list ) : idealreg2debugmask [Op_RegF] = NULL; idealreg2debugmask [Op_RegD] = NULL; idealreg2debugmask [Op_RegP] = NULL; + idealreg2debugmask [Op_VecS] = NULL; + idealreg2debugmask [Op_VecD] = NULL; + idealreg2debugmask [Op_VecX] = NULL; + idealreg2debugmask [Op_VecY] = NULL; idealreg2mhdebugmask[Op_RegI] = NULL; idealreg2mhdebugmask[Op_RegN] = NULL; @@ -121,6 +118,10 @@ Matcher::Matcher( Node_List &proj_list ) : idealreg2mhdebugmask[Op_RegF] = NULL; idealreg2mhdebugmask[Op_RegD] = NULL; idealreg2mhdebugmask[Op_RegP] = NULL; + idealreg2mhdebugmask[Op_VecS] = NULL; + idealreg2mhdebugmask[Op_VecD] = NULL; + idealreg2mhdebugmask[Op_VecX] = NULL; + idealreg2mhdebugmask[Op_VecY] = NULL; debug_only(_mem_node = NULL;) // Ideal memory node consumed by mach node } @@ -134,7 +135,7 @@ OptoReg::Name Matcher::warp_incoming_stk_arg( VMReg reg ) { warped = OptoReg::add(warped, C->out_preserve_stack_slots()); if( warped >= _in_arg_limit ) _in_arg_limit = OptoReg::add(warped, 1); // Bump max stack slot seen - if (!RegMask::can_represent(warped)) { + if (!RegMask::can_represent_arg(warped)) { // the compiler cannot represent this method's calling sequence C->record_method_not_compilable_all_tiers("unsupported incoming calling sequence"); return OptoReg::Bad; @@ -302,7 +303,7 @@ void Matcher::match( ) { _out_arg_limit = OptoReg::add(_new_SP, C->out_preserve_stack_slots()); assert( is_even(_out_arg_limit), "out_preserve must be even" ); - if (!RegMask::can_represent(OptoReg::add(_out_arg_limit,-1))) { + if (!RegMask::can_represent_arg(OptoReg::add(_out_arg_limit,-1))) { // the compiler cannot represent this method's calling sequence C->record_method_not_compilable("must be able to represent all call arguments in reg mask"); } @@ -428,7 +429,7 @@ static RegMask *init_input_masks( uint size, RegMask &ret_adr, RegMask &fp ) { void Matcher::init_first_stack_mask() { // Allocate storage for spill masks as masks for the appropriate load type. - RegMask *rms = (RegMask*)C->comp_arena()->Amalloc_D(sizeof(RegMask) * 3*6); + RegMask *rms = (RegMask*)C->comp_arena()->Amalloc_D(sizeof(RegMask) * (3*6+4)); idealreg2spillmask [Op_RegN] = &rms[0]; idealreg2spillmask [Op_RegI] = &rms[1]; @@ -451,6 +452,11 @@ void Matcher::init_first_stack_mask() { idealreg2mhdebugmask[Op_RegD] = &rms[16]; idealreg2mhdebugmask[Op_RegP] = &rms[17]; + idealreg2spillmask [Op_VecS] = &rms[18]; + idealreg2spillmask [Op_VecD] = &rms[19]; + idealreg2spillmask [Op_VecX] = &rms[20]; + idealreg2spillmask [Op_VecY] = &rms[21]; + OptoReg::Name i; // At first, start with the empty mask @@ -462,7 +468,7 @@ void Matcher::init_first_stack_mask() { C->FIRST_STACK_mask().Insert(i); // Add in all bits past the outgoing argument area - guarantee(RegMask::can_represent(OptoReg::add(_out_arg_limit,-1)), + guarantee(RegMask::can_represent_arg(OptoReg::add(_out_arg_limit,-1)), "must be able to represent all call arguments in reg mask"); init = _out_arg_limit; for (i = init; RegMask::can_represent(i); i = OptoReg::add(i,1)) @@ -472,21 +478,48 @@ void Matcher::init_first_stack_mask() { C->FIRST_STACK_mask().set_AllStack(); // Make spill masks. Registers for their class, plus FIRST_STACK_mask. + RegMask aligned_stack_mask = C->FIRST_STACK_mask(); + // Keep spill masks aligned. + aligned_stack_mask.clear_to_pairs(); + assert(aligned_stack_mask.is_AllStack(), "should be infinite stack"); + + *idealreg2spillmask[Op_RegP] = *idealreg2regmask[Op_RegP]; #ifdef _LP64 *idealreg2spillmask[Op_RegN] = *idealreg2regmask[Op_RegN]; idealreg2spillmask[Op_RegN]->OR(C->FIRST_STACK_mask()); + idealreg2spillmask[Op_RegP]->OR(aligned_stack_mask); +#else + idealreg2spillmask[Op_RegP]->OR(C->FIRST_STACK_mask()); #endif *idealreg2spillmask[Op_RegI] = *idealreg2regmask[Op_RegI]; idealreg2spillmask[Op_RegI]->OR(C->FIRST_STACK_mask()); *idealreg2spillmask[Op_RegL] = *idealreg2regmask[Op_RegL]; - idealreg2spillmask[Op_RegL]->OR(C->FIRST_STACK_mask()); + idealreg2spillmask[Op_RegL]->OR(aligned_stack_mask); *idealreg2spillmask[Op_RegF] = *idealreg2regmask[Op_RegF]; idealreg2spillmask[Op_RegF]->OR(C->FIRST_STACK_mask()); *idealreg2spillmask[Op_RegD] = *idealreg2regmask[Op_RegD]; - idealreg2spillmask[Op_RegD]->OR(C->FIRST_STACK_mask()); - *idealreg2spillmask[Op_RegP] = *idealreg2regmask[Op_RegP]; - idealreg2spillmask[Op_RegP]->OR(C->FIRST_STACK_mask()); + idealreg2spillmask[Op_RegD]->OR(aligned_stack_mask); + if (Matcher::vector_size_supported(T_BYTE,4)) { + *idealreg2spillmask[Op_VecS] = *idealreg2regmask[Op_VecS]; + idealreg2spillmask[Op_VecS]->OR(C->FIRST_STACK_mask()); + } + if (Matcher::vector_size_supported(T_FLOAT,2)) { + *idealreg2spillmask[Op_VecD] = *idealreg2regmask[Op_VecD]; + idealreg2spillmask[Op_VecD]->OR(aligned_stack_mask); + } + if (Matcher::vector_size_supported(T_FLOAT,4)) { + aligned_stack_mask.clear_to_sets(RegMask::SlotsPerVecX); + assert(aligned_stack_mask.is_AllStack(), "should be infinite stack"); + *idealreg2spillmask[Op_VecX] = *idealreg2regmask[Op_VecX]; + idealreg2spillmask[Op_VecX]->OR(aligned_stack_mask); + } + if (Matcher::vector_size_supported(T_FLOAT,8)) { + aligned_stack_mask.clear_to_sets(RegMask::SlotsPerVecY); + assert(aligned_stack_mask.is_AllStack(), "should be infinite stack"); + *idealreg2spillmask[Op_VecY] = *idealreg2regmask[Op_VecY]; + idealreg2spillmask[Op_VecY]->OR(aligned_stack_mask); + } if (UseFPUForSpilling) { // This mask logic assumes that the spill operations are // symmetric and that the registers involved are the same size. @@ -807,6 +840,25 @@ void Matcher::init_spill_mask( Node *ret ) { idealreg2regmask[Op_RegF] = &spillF->out_RegMask(); idealreg2regmask[Op_RegD] = &spillD->out_RegMask(); idealreg2regmask[Op_RegP] = &spillP->out_RegMask(); + + // Vector regmasks. + if (Matcher::vector_size_supported(T_BYTE,4)) { + TypeVect::VECTS = TypeVect::make(T_BYTE, 4); + MachNode *spillVectS = match_tree(new (C, 3) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTS)); + idealreg2regmask[Op_VecS] = &spillVectS->out_RegMask(); + } + if (Matcher::vector_size_supported(T_FLOAT,2)) { + MachNode *spillVectD = match_tree(new (C, 3) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTD)); + idealreg2regmask[Op_VecD] = &spillVectD->out_RegMask(); + } + if (Matcher::vector_size_supported(T_FLOAT,4)) { + MachNode *spillVectX = match_tree(new (C, 3) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTX)); + idealreg2regmask[Op_VecX] = &spillVectX->out_RegMask(); + } + if (Matcher::vector_size_supported(T_FLOAT,8)) { + MachNode *spillVectY = match_tree(new (C, 3) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTY)); + idealreg2regmask[Op_VecY] = &spillVectY->out_RegMask(); + } } #ifdef ASSERT @@ -1063,7 +1115,7 @@ OptoReg::Name Matcher::warp_outgoing_stk_arg( VMReg reg, OptoReg::Name begin_out // that is killed by the call. if( warped >= out_arg_limit_per_call ) out_arg_limit_per_call = OptoReg::add(warped,1); - if (!RegMask::can_represent(warped)) { + if (!RegMask::can_represent_arg(warped)) { C->record_method_not_compilable_all_tiers("unsupported calling sequence"); return OptoReg::Bad; } @@ -1251,7 +1303,7 @@ MachNode *Matcher::match_sfpt( SafePointNode *sfpt ) { // this killed area. uint r_cnt = mcall->tf()->range()->cnt(); MachProjNode *proj = new (C, 1) MachProjNode( mcall, r_cnt+10000, RegMask::Empty, MachProjNode::fat_proj ); - if (!RegMask::can_represent(OptoReg::Name(out_arg_limit_per_call-1))) { + if (!RegMask::can_represent_arg(OptoReg::Name(out_arg_limit_per_call-1))) { C->record_method_not_compilable_all_tiers("unsupported outgoing calling sequence"); } else { for (int i = begin_out_arg_area; i < out_arg_limit_per_call; i++) diff --git a/hotspot/src/share/vm/opto/matcher.hpp b/hotspot/src/share/vm/opto/matcher.hpp index e6aae28b317..0597cb54345 100644 --- a/hotspot/src/share/vm/opto/matcher.hpp +++ b/hotspot/src/share/vm/opto/matcher.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -250,10 +250,21 @@ public: static const bool convL2FSupported(void); // Vector width in bytes - static const uint vector_width_in_bytes(void); + static const int vector_width_in_bytes(BasicType bt); + + // Limits on vector size (number of elements). + static const int max_vector_size(const BasicType bt); + static const int min_vector_size(const BasicType bt); + static const bool vector_size_supported(const BasicType bt, int size) { + return (Matcher::max_vector_size(bt) >= size && + Matcher::min_vector_size(bt) <= size); + } // Vector ideal reg - static const uint vector_ideal_reg(void); + static const int vector_ideal_reg(int len); + + // CPU supports misaligned vectors store/load. + static const bool misaligned_vectors_ok(); // Used to determine a "low complexity" 64-bit constant. (Zero is simple.) // The standard of comparison is one (StoreL ConL) vs. two (StoreI ConI). diff --git a/hotspot/src/share/vm/opto/memnode.cpp b/hotspot/src/share/vm/opto/memnode.cpp index e28e09226ad..799c2ba14d0 100644 --- a/hotspot/src/share/vm/opto/memnode.cpp +++ b/hotspot/src/share/vm/opto/memnode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1543,6 +1543,7 @@ const Type *LoadNode::Value( PhaseTransform *phase ) const { // had an original form like p1:(AddP x x (LShiftL quux 3)), where the // expression (LShiftL quux 3) independently optimized to the constant 8. if ((t->isa_int() == NULL) && (t->isa_long() == NULL) + && (_type->isa_vect() == NULL) && Opcode() != Op_LoadKlass && Opcode() != Op_LoadNKlass) { // t might actually be lower than _type, if _type is a unique // concrete subclass of abstract class t. diff --git a/hotspot/src/share/vm/opto/mulnode.hpp b/hotspot/src/share/vm/opto/mulnode.hpp index 11cc77145a5..c3adc433fda 100644 --- a/hotspot/src/share/vm/opto/mulnode.hpp +++ b/hotspot/src/share/vm/opto/mulnode.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,7 +41,9 @@ class PhaseTransform; class MulNode : public Node { virtual uint hash() const; public: - MulNode( Node *in1, Node *in2 ): Node(0,in1,in2) {} + MulNode( Node *in1, Node *in2 ): Node(0,in1,in2) { + init_class_id(Class_Mul); + } // Handle algebraic identities here. If we have an identity, return the Node // we are equivalent to. We look for "add of zero" as an identity. diff --git a/hotspot/src/share/vm/opto/node.cpp b/hotspot/src/share/vm/opto/node.cpp index 4bd752feda5..2cb44ad0e55 100644 --- a/hotspot/src/share/vm/opto/node.cpp +++ b/hotspot/src/share/vm/opto/node.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1576,6 +1576,9 @@ void Node::dump() const { } else { tty->print("no type"); } + } else if (t->isa_vect() && this->is_MachSpillCopy()) { + // Dump MachSpillcopy vector type. + t->dump(); } if (is_new) { debug_only(dump_orig(debug_orig())); diff --git a/hotspot/src/share/vm/opto/node.hpp b/hotspot/src/share/vm/opto/node.hpp index 5ddae2f0b19..f63a967b6f2 100644 --- a/hotspot/src/share/vm/opto/node.hpp +++ b/hotspot/src/share/vm/opto/node.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -100,6 +100,7 @@ class MemBarNode; class MemBarStoreStoreNode; class MemNode; class MergeMemNode; +class MulNode; class MultiNode; class MultiBranchNode; class NeverBranchNode; @@ -133,8 +134,8 @@ class Type; class TypeNode; class UnlockNode; class VectorNode; -class VectorLoadNode; -class VectorStoreNode; +class LoadVectorNode; +class StoreVectorNode; class VectorSet; typedef void (*NFunc)(Node&,void*); extern "C" { @@ -609,9 +610,9 @@ public: DEFINE_CLASS_ID(Mem, Node, 4) DEFINE_CLASS_ID(Load, Mem, 0) - DEFINE_CLASS_ID(VectorLoad, Load, 0) + DEFINE_CLASS_ID(LoadVector, Load, 0) DEFINE_CLASS_ID(Store, Mem, 1) - DEFINE_CLASS_ID(VectorStore, Store, 0) + DEFINE_CLASS_ID(StoreVector, Store, 0) DEFINE_CLASS_ID(LoadStore, Mem, 2) DEFINE_CLASS_ID(Region, Node, 5) @@ -629,8 +630,9 @@ public: DEFINE_CLASS_ID(AddP, Node, 9) DEFINE_CLASS_ID(BoxLock, Node, 10) DEFINE_CLASS_ID(Add, Node, 11) - DEFINE_CLASS_ID(Vector, Node, 12) - DEFINE_CLASS_ID(ClearArray, Node, 13) + DEFINE_CLASS_ID(Mul, Node, 12) + DEFINE_CLASS_ID(Vector, Node, 13) + DEFINE_CLASS_ID(ClearArray, Node, 14) _max_classes = ClassMask_ClearArray }; @@ -752,6 +754,7 @@ public: DEFINE_CLASS_QUERY(MemBar) DEFINE_CLASS_QUERY(MemBarStoreStore) DEFINE_CLASS_QUERY(MergeMem) + DEFINE_CLASS_QUERY(Mul) DEFINE_CLASS_QUERY(Multi) DEFINE_CLASS_QUERY(MultiBranch) DEFINE_CLASS_QUERY(Parm) @@ -767,8 +770,8 @@ public: DEFINE_CLASS_QUERY(Sub) DEFINE_CLASS_QUERY(Type) DEFINE_CLASS_QUERY(Vector) - DEFINE_CLASS_QUERY(VectorLoad) - DEFINE_CLASS_QUERY(VectorStore) + DEFINE_CLASS_QUERY(LoadVector) + DEFINE_CLASS_QUERY(StoreVector) DEFINE_CLASS_QUERY(Unlock) #undef DEFINE_CLASS_QUERY diff --git a/hotspot/src/share/vm/opto/opcodes.cpp b/hotspot/src/share/vm/opto/opcodes.cpp index 58489db0adb..83310568b50 100644 --- a/hotspot/src/share/vm/opto/opcodes.cpp +++ b/hotspot/src/share/vm/opto/opcodes.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,6 +38,10 @@ const char *NodeClassNames[] = { "RegD", "RegL", "RegFlags", + "VecS", + "VecD", + "VecX", + "VecY", "_last_machine_leaf", #include "classes.hpp" "_last_class_name", diff --git a/hotspot/src/share/vm/opto/opcodes.hpp b/hotspot/src/share/vm/opto/opcodes.hpp index 9eb5b8a7ccc..4baec83feca 100644 --- a/hotspot/src/share/vm/opto/opcodes.hpp +++ b/hotspot/src/share/vm/opto/opcodes.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,10 @@ enum Opcodes { macro(RegF) // Machine float register macro(RegD) // Machine double register macro(RegL) // Machine long register + macro(VecS) // Machine vectors register + macro(VecD) // Machine vectord register + macro(VecX) // Machine vectorx register + macro(VecY) // Machine vectory register macro(RegFlags) // Machine flags register _last_machine_leaf, // Split between regular opcodes and machine #include "classes.hpp" diff --git a/hotspot/src/share/vm/opto/parse2.cpp b/hotspot/src/share/vm/opto/parse2.cpp index 541f26dd537..4982a1d76fc 100644 --- a/hotspot/src/share/vm/opto/parse2.cpp +++ b/hotspot/src/share/vm/opto/parse2.cpp @@ -1278,9 +1278,9 @@ void Parse::sharpen_type_after_if(BoolTest::mask btest, // or the narrowOop equivalent. const Type* obj_type = _gvn.type(obj); const TypeOopPtr* tboth = obj_type->join(con_type)->isa_oopptr(); - if (tboth != NULL && tboth != obj_type && tboth->higher_equal(obj_type)) { + if (tboth != NULL && tboth->klass_is_exact() && tboth != obj_type && + tboth->higher_equal(obj_type)) { // obj has to be of the exact type Foo if the CmpP succeeds. - assert(tboth->klass_is_exact(), "klass should be exact"); int obj_in_map = map()->find_edge(obj); JVMState* jvms = this->jvms(); if (obj_in_map >= 0 && diff --git a/hotspot/src/share/vm/opto/phaseX.cpp b/hotspot/src/share/vm/opto/phaseX.cpp index 99b7393b4cf..0fbcf4d09e1 100644 --- a/hotspot/src/share/vm/opto/phaseX.cpp +++ b/hotspot/src/share/vm/opto/phaseX.cpp @@ -757,6 +757,7 @@ void PhaseGVN::dead_loop_check( Node *n ) { //------------------------------PhaseIterGVN----------------------------------- // Initialize hash table to fresh and clean for +VerifyOpto PhaseIterGVN::PhaseIterGVN( PhaseIterGVN *igvn, const char *dummy ) : PhaseGVN(igvn,dummy), _worklist( ), + _stack(C->unique() >> 1), _delay_transform(false) { } @@ -764,6 +765,7 @@ PhaseIterGVN::PhaseIterGVN( PhaseIterGVN *igvn, const char *dummy ) : PhaseGVN(i // Initialize with previous PhaseIterGVN info; used by PhaseCCP PhaseIterGVN::PhaseIterGVN( PhaseIterGVN *igvn ) : PhaseGVN(igvn), _worklist( igvn->_worklist ), + _stack( igvn->_stack ), _delay_transform(igvn->_delay_transform) { } @@ -772,6 +774,7 @@ PhaseIterGVN::PhaseIterGVN( PhaseIterGVN *igvn ) : PhaseGVN(igvn), // Initialize with previous PhaseGVN info from Parser PhaseIterGVN::PhaseIterGVN( PhaseGVN *gvn ) : PhaseGVN(gvn), _worklist(*C->for_igvn()), + _stack(C->unique() >> 1), _delay_transform(false) { uint max; @@ -1138,51 +1141,77 @@ const Type* PhaseIterGVN::saturate(const Type* new_type, const Type* old_type, // Kill a globally dead Node. All uses are also globally dead and are // aggressively trimmed. void PhaseIterGVN::remove_globally_dead_node( Node *dead ) { - assert(dead != C->root(), "killing root, eh?"); - if (dead->is_top()) return; - NOT_PRODUCT( set_progress(); ) - // Remove from iterative worklist - _worklist.remove(dead); - if (!dead->is_Con()) { // Don't kill cons but uses - // Remove from hash table - _table.hash_delete( dead ); - // Smash all inputs to 'dead', isolating him completely - for( uint i = 0; i < dead->req(); i++ ) { - Node *in = dead->in(i); - if( in ) { // Points to something? - dead->set_req(i,NULL); // Kill the edge - if (in->outcnt() == 0 && in != C->top()) {// Made input go dead? - remove_dead_node(in); // Recursively remove - } else if (in->outcnt() == 1 && - in->has_special_unique_user()) { - _worklist.push(in->unique_out()); - } else if (in->outcnt() <= 2 && dead->is_Phi()) { - if( in->Opcode() == Op_Region ) - _worklist.push(in); - else if( in->is_Store() ) { - DUIterator_Fast imax, i = in->fast_outs(imax); - _worklist.push(in->fast_out(i)); - i++; - if(in->outcnt() == 2) { - _worklist.push(in->fast_out(i)); - i++; + enum DeleteProgress { + PROCESS_INPUTS, + PROCESS_OUTPUTS + }; + assert(_stack.is_empty(), "not empty"); + _stack.push(dead, PROCESS_INPUTS); + + while (_stack.is_nonempty()) { + dead = _stack.node(); + uint progress_state = _stack.index(); + assert(dead != C->root(), "killing root, eh?"); + assert(!dead->is_top(), "add check for top when pushing"); + NOT_PRODUCT( set_progress(); ) + if (progress_state == PROCESS_INPUTS) { + // After following inputs, continue to outputs + _stack.set_index(PROCESS_OUTPUTS); + // Remove from iterative worklist + _worklist.remove(dead); + if (!dead->is_Con()) { // Don't kill cons but uses + bool recurse = false; + // Remove from hash table + _table.hash_delete( dead ); + // Smash all inputs to 'dead', isolating him completely + for( uint i = 0; i < dead->req(); i++ ) { + Node *in = dead->in(i); + if( in ) { // Points to something? + dead->set_req(i,NULL); // Kill the edge + if (in->outcnt() == 0 && in != C->top()) {// Made input go dead? + _stack.push(in, PROCESS_INPUTS); // Recursively remove + recurse = true; + } else if (in->outcnt() == 1 && + in->has_special_unique_user()) { + _worklist.push(in->unique_out()); + } else if (in->outcnt() <= 2 && dead->is_Phi()) { + if( in->Opcode() == Op_Region ) + _worklist.push(in); + else if( in->is_Store() ) { + DUIterator_Fast imax, i = in->fast_outs(imax); + _worklist.push(in->fast_out(i)); + i++; + if(in->outcnt() == 2) { + _worklist.push(in->fast_out(i)); + i++; + } + assert(!(i < imax), "sanity"); + } } - assert(!(i < imax), "sanity"); } } + + if (dead->is_macro()) { + C->remove_macro_node(dead); + } + + if (recurse) { + continue; + } } } - if (dead->is_macro()) { - C->remove_macro_node(dead); + // Aggressively kill globally dead uses + // (Rather than pushing all the outs at once, we push one at a time, + // plus the parent to resume later, because of the indefinite number + // of edge deletions per loop trip.) + if (dead->outcnt() > 0) { + // Recursively remove + _stack.push(dead->raw_out(0), PROCESS_INPUTS); + } else { + _stack.pop(); } } - // Aggressively kill globally dead uses - // (Cannot use DUIterator_Last because of the indefinite number - // of edge deletions per loop trip.) - while (dead->outcnt() > 0) { - remove_globally_dead_node(dead->raw_out(0)); - } } //------------------------------subsume_node----------------------------------- diff --git a/hotspot/src/share/vm/opto/phaseX.hpp b/hotspot/src/share/vm/opto/phaseX.hpp index 1affa5c15b6..8a58a9d8927 100644 --- a/hotspot/src/share/vm/opto/phaseX.hpp +++ b/hotspot/src/share/vm/opto/phaseX.hpp @@ -403,6 +403,8 @@ class PhaseIterGVN : public PhaseGVN { // Subsume users of node 'old' into node 'nn' void subsume_node( Node *old, Node *nn ); + Node_Stack _stack; // Stack used to avoid recursion + protected: // Idealize new Node 'n' with respect to its inputs and its value @@ -438,8 +440,8 @@ public: // It is significant only for debugging and profiling. Node* register_new_node_with_optimizer(Node* n, Node* orig = NULL); - // Kill a globally dead Node. It is allowed to have uses which are - // assumed dead and left 'in limbo'. + // Kill a globally dead Node. All uses are also globally dead and are + // aggressively trimmed. void remove_globally_dead_node( Node *dead ); // Kill all inputs to a dead node, recursively making more dead nodes. diff --git a/hotspot/src/share/vm/opto/postaloc.cpp b/hotspot/src/share/vm/opto/postaloc.cpp index 1a7553bc5cd..912e07704e7 100644 --- a/hotspot/src/share/vm/opto/postaloc.cpp +++ b/hotspot/src/share/vm/opto/postaloc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,13 +27,15 @@ #include "opto/chaitin.hpp" #include "opto/machnode.hpp" -// see if this register kind does not requires two registers -static bool is_single_register(uint x) { -#ifdef _LP64 - return (x != Op_RegD && x != Op_RegL && x != Op_RegP); -#else - return (x != Op_RegD && x != Op_RegL); -#endif +// See if this register (or pairs, or vector) already contains the value. +static bool register_contains_value(Node* val, OptoReg::Name reg, int n_regs, + Node_List& value) { + for (int i = 0; i < n_regs; i++) { + OptoReg::Name nreg = OptoReg::add(reg,-i); + if (value[nreg] != val) + return false; + } + return true; } //---------------------------may_be_copy_of_callee----------------------------- @@ -167,9 +169,11 @@ int PhaseChaitin::use_prior_register( Node *n, uint idx, Node *def, Block *curre const RegMask &use_mask = n->in_RegMask(idx); bool can_use = ( RegMask::can_represent(def_reg) ? (use_mask.Member(def_reg) != 0) : (use_mask.is_AllStack() != 0)); - // Check for a copy to or from a misaligned pair. - can_use = can_use && !use_mask.is_misaligned_Pair() && !def_lrg.mask().is_misaligned_Pair(); - + if (!RegMask::is_vector(def->ideal_reg())) { + // Check for a copy to or from a misaligned pair. + // It is workaround for a sparc with misaligned pairs. + can_use = can_use && !use_mask.is_misaligned_pair() && !def_lrg.mask().is_misaligned_pair(); + } if (!can_use) return 0; @@ -263,18 +267,16 @@ int PhaseChaitin::elide_copy( Node *n, int k, Block *current_block, Node_List &v val = skip_copies(n->in(k)); } - if( val == x ) return blk_adjust; // No progress? + if (val == x) return blk_adjust; // No progress? - bool single = is_single_register(val->ideal_reg()); + int n_regs = RegMask::num_registers(val->ideal_reg()); uint val_idx = n2lidx(val); OptoReg::Name val_reg = lrgs(val_idx).reg(); // See if it happens to already be in the correct register! // (either Phi's direct register, or the common case of the name // never-clobbered original-def register) - if( value[val_reg] == val && - // Doubles check both halves - ( single || value[val_reg-1] == val ) ) { + if (register_contains_value(val, val_reg, n_regs, value)) { blk_adjust += use_prior_register(n,k,regnd[val_reg],current_block,value,regnd); if( n->in(k) == regnd[val_reg] ) // Success! Quit trying return blk_adjust; @@ -306,9 +308,10 @@ int PhaseChaitin::elide_copy( Node *n, int k, Block *current_block, Node_List &v } Node *vv = value[reg]; - if( !single ) { // Doubles check for aligned-adjacent pair - if( (reg&1)==0 ) continue; // Wrong half of a pair - if( vv != value[reg-1] ) continue; // Not a complete pair + if (n_regs > 1) { // Doubles and vectors check for aligned-adjacent set + uint last = (n_regs-1); // Looking for the last part of a set + if ((reg&last) != last) continue; // Wrong part of a set + if (!register_contains_value(vv, reg, n_regs, value)) continue; // Different value } if( vv == val || // Got a direct hit? (t && vv && vv->bottom_type() == t && vv->is_Mach() && @@ -526,8 +529,9 @@ void PhaseChaitin::post_allocate_copy_removal() { if( pidx ) { value.map(preg,phi); regnd.map(preg,phi); - OptoReg::Name preg_lo = OptoReg::add(preg,-1); - if( !is_single_register(phi->ideal_reg()) ) { + int n_regs = RegMask::num_registers(phi->ideal_reg()); + for (int l = 1; l < n_regs; l++) { + OptoReg::Name preg_lo = OptoReg::add(preg,-l); value.map(preg_lo,phi); regnd.map(preg_lo,phi); } @@ -568,13 +572,16 @@ void PhaseChaitin::post_allocate_copy_removal() { value.map(ureg,valdef); // record improved reaching-def info regnd.map(ureg, def); // Record other half of doubles - OptoReg::Name ureg_lo = OptoReg::add(ureg,-1); - if( !is_single_register(def->ideal_reg()) && - ( !RegMask::can_represent(ureg_lo) || - lrgs(useidx).mask().Member(ureg_lo) ) && // Nearly always adjacent - !value[ureg_lo] ) { - value.map(ureg_lo,valdef); // record improved reaching-def info - regnd.map(ureg_lo, def); + uint def_ideal_reg = def->ideal_reg(); + int n_regs = RegMask::num_registers(def_ideal_reg); + for (int l = 1; l < n_regs; l++) { + OptoReg::Name ureg_lo = OptoReg::add(ureg,-l); + if (!value[ureg_lo] && + (!RegMask::can_represent(ureg_lo) || + lrgs(useidx).mask().Member(ureg_lo))) { // Nearly always adjacent + value.map(ureg_lo,valdef); // record improved reaching-def info + regnd.map(ureg_lo, def); + } } } } @@ -607,7 +614,8 @@ void PhaseChaitin::post_allocate_copy_removal() { } uint n_ideal_reg = n->ideal_reg(); - if( is_single_register(n_ideal_reg) ) { + int n_regs = RegMask::num_registers(n_ideal_reg); + if (n_regs == 1) { // If Node 'n' does not change the value mapped by the register, // then 'n' is a useless copy. Do not update the register->node // mapping so 'n' will go dead. @@ -625,6 +633,25 @@ void PhaseChaitin::post_allocate_copy_removal() { assert( n->is_Copy(), "" ); j -= replace_and_yank_if_dead(n, nreg, b, value, regnd); } + } else if (RegMask::is_vector(n_ideal_reg)) { + // If Node 'n' does not change the value mapped by the register, + // then 'n' is a useless copy. Do not update the register->node + // mapping so 'n' will go dead. + if (!register_contains_value(val, nreg, n_regs, value)) { + // Update the mapping: record new Node defined by the register + regnd.map(nreg,n); + // Update mapping for defined *value*, which is the defined + // Node after skipping all copies. + value.map(nreg,val); + for (int l = 1; l < n_regs; l++) { + OptoReg::Name nreg_lo = OptoReg::add(nreg,-l); + regnd.map(nreg_lo, n ); + value.map(nreg_lo,val); + } + } else if (n->is_Copy()) { + // Note: vector can't be constant and can't be copy of calee. + j -= replace_and_yank_if_dead(n, nreg, b, value, regnd); + } } else { // If the value occupies a register pair, record same info // in both registers. diff --git a/hotspot/src/share/vm/opto/reg_split.cpp b/hotspot/src/share/vm/opto/reg_split.cpp index 63a11fe8f0f..cae363bea7a 100644 --- a/hotspot/src/share/vm/opto/reg_split.cpp +++ b/hotspot/src/share/vm/opto/reg_split.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -74,12 +74,13 @@ Node *PhaseChaitin::get_spillcopy_wide( Node *def, Node *use, uint uidx ) { const RegMask *w_i_mask = w_mask->overlap( *i_mask ) ? w_mask : i_mask; const RegMask *w_o_mask; + int num_regs = RegMask::num_registers(ireg); + bool is_vect = RegMask::is_vector(ireg); if( w_mask->overlap( *o_mask ) && // Overlap AND - ((ireg != Op_RegL && ireg != Op_RegD // Single use or aligned -#ifdef _LP64 - && ireg != Op_RegP -#endif - ) || o_mask->is_aligned_Pairs()) ) { + ((num_regs == 1) // Single use or aligned + || is_vect // or vector + || !is_vect && o_mask->is_aligned_pairs()) ) { + assert(!is_vect || o_mask->is_aligned_sets(num_regs), "vectors are aligned"); // Don't come here for mis-aligned doubles w_o_mask = w_mask; } else { // wide ideal mask does not overlap with o_mask @@ -400,15 +401,17 @@ bool PhaseChaitin::is_high_pressure( Block *b, LRG *lrg, uint insidx ) { // CNC - Turned off 7/8/99, causes too much spilling // if( lrg->_is_bound ) return false; + // Use float pressure numbers for vectors. + bool is_float_or_vector = lrg->_is_float || lrg->_is_vector; // Not yet reached the high-pressure cutoff point, so low pressure - uint hrp_idx = lrg->_is_float ? b->_fhrp_index : b->_ihrp_index; + uint hrp_idx = is_float_or_vector ? b->_fhrp_index : b->_ihrp_index; if( insidx < hrp_idx ) return false; // Register pressure for the block as a whole depends on reg class - int block_pres = lrg->_is_float ? b->_freg_pressure : b->_reg_pressure; + int block_pres = is_float_or_vector ? b->_freg_pressure : b->_reg_pressure; // Bound live ranges will split at the binding points first; // Intermediate splits should assume the live range's register set // got "freed up" and that num_regs will become INT_PRESSURE. - int bound_pres = lrg->_is_float ? FLOATPRESSURE : INTPRESSURE; + int bound_pres = is_float_or_vector ? FLOATPRESSURE : INTPRESSURE; // Effective register pressure limit. int lrg_pres = (lrg->get_invalid_mask_size() > lrg->num_regs()) ? (lrg->get_invalid_mask_size() >> (lrg->num_regs()-1)) : bound_pres; @@ -794,12 +797,15 @@ uint PhaseChaitin::Split( uint maxlrg ) { if( i < n->req() ) break; insert_point--; } + uint orig_eidx = b->end_idx(); maxlrg = split_DEF( n1, b, insert_point, maxlrg, Reachblock, debug_defs, splits, slidx); // If it wasn't split bail if (!maxlrg) { return 0; } - insidx++; + // Spill of NULL check mem op goes into the following block. + if (b->end_idx() > orig_eidx) + insidx++; } // This is a new DEF, so update UP UPblock[slidx] = false; @@ -960,7 +966,7 @@ uint PhaseChaitin::Split( uint maxlrg ) { // Grab register mask info const RegMask &dmask = def->out_RegMask(); const RegMask &umask = n->in_RegMask(inpidx); - + bool is_vect = RegMask::is_vector(def->ideal_reg()); assert(inpidx < oopoff, "cannot use-split oop map info"); bool dup = UPblock[slidx]; @@ -972,7 +978,7 @@ uint PhaseChaitin::Split( uint maxlrg ) { if( !umask.is_AllStack() && (int)umask.Size() <= lrgs(useidx).num_regs() && (!def->rematerialize() || - umask.is_misaligned_Pair())) { + !is_vect && umask.is_misaligned_pair())) { // These need a Split regardless of overlap or pressure // SPLIT - NO DEF - NO CISC SPILL maxlrg = split_USE(def,b,n,inpidx,maxlrg,dup,false, splits,slidx); @@ -1123,10 +1129,12 @@ uint PhaseChaitin::Split( uint maxlrg ) { // Grab UP info for DEF const RegMask &dmask = n->out_RegMask(); bool defup = dmask.is_UP(); + int ireg = n->ideal_reg(); + bool is_vect = RegMask::is_vector(ireg); // Only split at Def if this is a HRP block or bound (and spilled once) if( !n->rematerialize() && - (((dmask.is_bound1() || dmask.is_bound2() || dmask.is_misaligned_Pair()) && - (deflrg._direct_conflict || deflrg._must_spill)) || + (((dmask.is_bound(ireg) || !is_vect && dmask.is_misaligned_pair()) && + (deflrg._direct_conflict || deflrg._must_spill)) || // Check for LRG being up in a register and we are inside a high // pressure area. Spill it down immediately. (defup && is_high_pressure(b,&deflrg,insidx))) ) { diff --git a/hotspot/src/share/vm/opto/regmask.cpp b/hotspot/src/share/vm/opto/regmask.cpp index ce220f01be9..59413388ca7 100644 --- a/hotspot/src/share/vm/opto/regmask.cpp +++ b/hotspot/src/share/vm/opto/regmask.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -129,11 +129,34 @@ const RegMask RegMask::Empty( 0 ); +//============================================================================= +bool RegMask::is_vector(uint ireg) { + return (ireg == Op_VecS || ireg == Op_VecD || ireg == Op_VecX || ireg == Op_VecY); +} + +int RegMask::num_registers(uint ireg) { + switch(ireg) { + case Op_VecY: + return 8; + case Op_VecX: + return 4; + case Op_VecD: + case Op_RegD: + case Op_RegL: +#ifdef _LP64 + case Op_RegP: +#endif + return 2; + } + // Op_VecS and the rest ideal registers. + return 1; +} + //------------------------------find_first_pair-------------------------------- // Find the lowest-numbered register pair in the mask. Return the // HIGHEST register number in the pair, or BAD if no pairs. OptoReg::Name RegMask::find_first_pair() const { - VerifyPairs(); + verify_pairs(); for( int i = 0; i < RM_SIZE; i++ ) { if( _A[i] ) { // Found some bits int bit = _A[i] & -_A[i]; // Extract low bit @@ -146,30 +169,30 @@ OptoReg::Name RegMask::find_first_pair() const { //------------------------------ClearToPairs----------------------------------- // Clear out partial bits; leave only bit pairs -void RegMask::ClearToPairs() { +void RegMask::clear_to_pairs() { for( int i = 0; i < RM_SIZE; i++ ) { int bits = _A[i]; bits &= ((bits & 0x55555555)<<1); // 1 hi-bit set for each pair bits |= (bits>>1); // Smear 1 hi-bit into a pair _A[i] = bits; } - VerifyPairs(); + verify_pairs(); } //------------------------------SmearToPairs----------------------------------- // Smear out partial bits; leave only bit pairs -void RegMask::SmearToPairs() { +void RegMask::smear_to_pairs() { for( int i = 0; i < RM_SIZE; i++ ) { int bits = _A[i]; bits |= ((bits & 0x55555555)<<1); // Smear lo bit hi per pair bits |= ((bits & 0xAAAAAAAA)>>1); // Smear hi bit lo per pair _A[i] = bits; } - VerifyPairs(); + verify_pairs(); } //------------------------------is_aligned_pairs------------------------------- -bool RegMask::is_aligned_Pairs() const { +bool RegMask::is_aligned_pairs() const { // Assert that the register mask contains only bit pairs. for( int i = 0; i < RM_SIZE; i++ ) { int bits = _A[i]; @@ -204,7 +227,7 @@ int RegMask::is_bound1() const { //------------------------------is_bound2-------------------------------------- // Return TRUE if the mask contains an adjacent pair of bits and no other bits. -int RegMask::is_bound2() const { +int RegMask::is_bound_pair() const { if( is_AllStack() ) return false; int bit = -1; // Set to hold the one bit allowed @@ -226,6 +249,132 @@ int RegMask::is_bound2() const { return true; } +static int low_bits[3] = { 0x55555555, 0x11111111, 0x01010101 }; +//------------------------------find_first_set--------------------------------- +// Find the lowest-numbered register set in the mask. Return the +// HIGHEST register number in the set, or BAD if no sets. +// Works also for size 1. +OptoReg::Name RegMask::find_first_set(int size) const { + verify_sets(size); + for (int i = 0; i < RM_SIZE; i++) { + if (_A[i]) { // Found some bits + int bit = _A[i] & -_A[i]; // Extract low bit + // Convert to bit number, return hi bit in pair + return OptoReg::Name((i<<_LogWordBits)+find_lowest_bit(bit)+(size-1)); + } + } + return OptoReg::Bad; +} + +//------------------------------clear_to_sets---------------------------------- +// Clear out partial bits; leave only aligned adjacent bit pairs +void RegMask::clear_to_sets(int size) { + if (size == 1) return; + assert(2 <= size && size <= 8, "update low bits table"); + assert(is_power_of_2(size), "sanity"); + int low_bits_mask = low_bits[size>>2]; + for (int i = 0; i < RM_SIZE; i++) { + int bits = _A[i]; + int sets = (bits & low_bits_mask); + for (int j = 1; j < size; j++) { + sets = (bits & (sets<<1)); // filter bits which produce whole sets + } + sets |= (sets>>1); // Smear 1 hi-bit into a set + if (size > 2) { + sets |= (sets>>2); // Smear 2 hi-bits into a set + if (size > 4) { + sets |= (sets>>4); // Smear 4 hi-bits into a set + } + } + _A[i] = sets; + } + verify_sets(size); +} + +//------------------------------smear_to_sets---------------------------------- +// Smear out partial bits to aligned adjacent bit sets +void RegMask::smear_to_sets(int size) { + if (size == 1) return; + assert(2 <= size && size <= 8, "update low bits table"); + assert(is_power_of_2(size), "sanity"); + int low_bits_mask = low_bits[size>>2]; + for (int i = 0; i < RM_SIZE; i++) { + int bits = _A[i]; + int sets = 0; + for (int j = 0; j < size; j++) { + sets |= (bits & low_bits_mask); // collect partial bits + bits = bits>>1; + } + sets |= (sets<<1); // Smear 1 lo-bit into a set + if (size > 2) { + sets |= (sets<<2); // Smear 2 lo-bits into a set + if (size > 4) { + sets |= (sets<<4); // Smear 4 lo-bits into a set + } + } + _A[i] = sets; + } + verify_sets(size); +} + +//------------------------------is_aligned_set-------------------------------- +bool RegMask::is_aligned_sets(int size) const { + if (size == 1) return true; + assert(2 <= size && size <= 8, "update low bits table"); + assert(is_power_of_2(size), "sanity"); + int low_bits_mask = low_bits[size>>2]; + // Assert that the register mask contains only bit sets. + for (int i = 0; i < RM_SIZE; i++) { + int bits = _A[i]; + while (bits) { // Check bits for pairing + int bit = bits & -bits; // Extract low bit + // Low bit is not odd means its mis-aligned. + if ((bit & low_bits_mask) == 0) return false; + // Do extra work since (bit << size) may overflow. + int hi_bit = bit << (size-1); // high bit + int set = hi_bit + ((hi_bit-1) & ~(bit-1)); + // Check for aligned adjacent bits in this set + if ((bits & set) != set) return false; + bits -= set; // Remove this set + } + } + return true; +} + +//------------------------------is_bound_set----------------------------------- +// Return TRUE if the mask contains one adjacent set of bits and no other bits. +// Works also for size 1. +int RegMask::is_bound_set(int size) const { + if( is_AllStack() ) return false; + assert(1 <= size && size <= 8, "update low bits table"); + int bit = -1; // Set to hold the one bit allowed + for (int i = 0; i < RM_SIZE; i++) { + if (_A[i] ) { // Found some bits + if (bit != -1) + return false; // Already had bits, so fail + bit = _A[i] & -_A[i]; // Extract 1 bit from mask + int hi_bit = bit << (size-1); // high bit + if (hi_bit != 0) { // Bit set stays in same word? + int set = hi_bit + ((hi_bit-1) & ~(bit-1)); + if (set != _A[i]) + return false; // Require adjacent bit set and no more bits + } else { // Else its a split-set case + if (((-1) & ~(bit-1)) != _A[i]) + return false; // Found many bits, so fail + i++; // Skip iteration forward and check high part + assert(size <= 8, "update next code"); + // The lower 24 bits should be 0 since it is split case and size <= 8. + int set = bit>>24; + set = set & -set; // Remove sign extension. + set = (((set << size) - 1) >> 8); + if (_A[i] != set) return false; // Require 1 lo bit in next word + } + } + } + // True for both the empty mask and for a bit set + return true; +} + //------------------------------is_UP------------------------------------------ // UP means register only, Register plus stack, or stack only is DOWN bool RegMask::is_UP() const { diff --git a/hotspot/src/share/vm/opto/regmask.hpp b/hotspot/src/share/vm/opto/regmask.hpp index e50ff84ca16..e4c31dcefb2 100644 --- a/hotspot/src/share/vm/opto/regmask.hpp +++ b/hotspot/src/share/vm/opto/regmask.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -113,7 +113,11 @@ public: // the controlling alignment constraint. Note that this alignment // requirement is internal to the allocator, and independent of any // particular platform. - enum { SlotsPerLong = 2 }; + enum { SlotsPerLong = 2, + SlotsPerVecS = 1, + SlotsPerVecD = 2, + SlotsPerVecX = 4, + SlotsPerVecY = 8 }; // A constructor only used by the ADLC output. All mask fields are filled // in directly. Calls to this look something like RM(1,2,3,4); @@ -193,20 +197,53 @@ public: OptoReg::Name find_first_pair() const; // Clear out partial bits; leave only aligned adjacent bit pairs. - void ClearToPairs(); + void clear_to_pairs(); // Smear out partial bits; leave only aligned adjacent bit pairs. - void SmearToPairs(); + void smear_to_pairs(); // Verify that the mask contains only aligned adjacent bit pairs - void VerifyPairs() const { assert( is_aligned_Pairs(), "mask is not aligned, adjacent pairs" ); } + void verify_pairs() const { assert( is_aligned_pairs(), "mask is not aligned, adjacent pairs" ); } // Test that the mask contains only aligned adjacent bit pairs - bool is_aligned_Pairs() const; + bool is_aligned_pairs() const; // mask is a pair of misaligned registers - bool is_misaligned_Pair() const { return Size()==2 && !is_aligned_Pairs();} + bool is_misaligned_pair() const { return Size()==2 && !is_aligned_pairs(); } // Test for single register int is_bound1() const; // Test for a single adjacent pair - int is_bound2() const; + int is_bound_pair() const; + // Test for a single adjacent set of ideal register's size. + int is_bound(uint ireg) const { + if (is_vector(ireg)) { + if (is_bound_set(num_registers(ireg))) + return true; + } else if (is_bound1() || is_bound_pair()) { + return true; + } + return false; + } + + // Find the lowest-numbered register set in the mask. Return the + // HIGHEST register number in the set, or BAD if no sets. + // Assert that the mask contains only bit sets. + OptoReg::Name find_first_set(int size) const; + + // Clear out partial bits; leave only aligned adjacent bit sets of size. + void clear_to_sets(int size); + // Smear out partial bits to aligned adjacent bit sets. + void smear_to_sets(int size); + // Verify that the mask contains only aligned adjacent bit sets + void verify_sets(int size) const { assert(is_aligned_sets(size), "mask is not aligned, adjacent sets"); } + // Test that the mask contains only aligned adjacent bit sets + bool is_aligned_sets(int size) const; + + // mask is a set of misaligned registers + bool is_misaligned_set(int size) const { return (int)Size()==size && !is_aligned_sets(size);} + + // Test for a single adjacent set + int is_bound_set(int size) const; + + static bool is_vector(uint ireg); + static int num_registers(uint ireg); // Fast overlap test. Non-zero if any registers in common. int overlap( const RegMask &rm ) const { @@ -280,9 +317,15 @@ public: static bool can_represent(OptoReg::Name reg) { // NOTE: -1 in computation reflects the usage of the last - // bit of the regmask as an infinite stack flag. + // bit of the regmask as an infinite stack flag and + // -7 is to keep mask aligned for largest value (VecY). return (int)reg < (int)(CHUNK_SIZE-1); } + static bool can_represent_arg(OptoReg::Name reg) { + // NOTE: -SlotsPerVecY in computation reflects the need + // to keep mask aligned for largest value (VecY). + return (int)reg < (int)(CHUNK_SIZE-SlotsPerVecY); + } }; // Do not use this constant directly in client code! diff --git a/hotspot/src/share/vm/opto/runtime.hpp b/hotspot/src/share/vm/opto/runtime.hpp index 11b5434a54d..6037d19f2bc 100644 --- a/hotspot/src/share/vm/opto/runtime.hpp +++ b/hotspot/src/share/vm/opto/runtime.hpp @@ -55,7 +55,7 @@ class CallInfo; // code in various ways. Currently they are used by the lock coarsening code // -class NamedCounter : public CHeapObj { +class NamedCounter : public CHeapObj { public: enum CounterTag { NoTag, diff --git a/hotspot/src/share/vm/opto/stringopts.cpp b/hotspot/src/share/vm/opto/stringopts.cpp index 99498ea9598..803b1389932 100644 --- a/hotspot/src/share/vm/opto/stringopts.cpp +++ b/hotspot/src/share/vm/opto/stringopts.cpp @@ -112,6 +112,7 @@ class StringConcat : public ResourceObj { _arguments->ins_req(0, value); _mode.insert_before(0, mode); } + void push_string(Node* value) { push(value, StringMode); } @@ -125,9 +126,56 @@ class StringConcat : public ResourceObj { push(value, CharMode); } + static bool is_SB_toString(Node* call) { + if (call->is_CallStaticJava()) { + CallStaticJavaNode* csj = call->as_CallStaticJava(); + ciMethod* m = csj->method(); + if (m != NULL && + (m->intrinsic_id() == vmIntrinsics::_StringBuilder_toString || + m->intrinsic_id() == vmIntrinsics::_StringBuffer_toString)) { + return true; + } + } + return false; + } + + static Node* skip_string_null_check(Node* value) { + // Look for a diamond shaped Null check of toString() result + // (could be code from String.valueOf()): + // (Proj == NULL) ? "null":"CastPP(Proj)#NotNULL + if (value->is_Phi()) { + int true_path = value->as_Phi()->is_diamond_phi(); + if (true_path != 0) { + // phi->region->if_proj->ifnode->bool + BoolNode* b = value->in(0)->in(1)->in(0)->in(1)->as_Bool(); + Node* cmp = b->in(1); + Node* v1 = cmp->in(1); + Node* v2 = cmp->in(2); + // Null check of the return of toString which can simply be skipped. + if (b->_test._test == BoolTest::ne && + v2->bottom_type() == TypePtr::NULL_PTR && + value->in(true_path)->Opcode() == Op_CastPP && + value->in(true_path)->in(1) == v1 && + v1->is_Proj() && is_SB_toString(v1->in(0))) { + return v1; + } + } + } + return value; + } + Node* argument(int i) { return _arguments->in(i); } + Node* argument_uncast(int i) { + Node* arg = argument(i); + int amode = mode(i); + if (amode == StringConcat::StringMode || + amode == StringConcat::StringNullCheckMode) { + arg = skip_string_null_check(arg); + } + return arg; + } void set_argument(int i, Node* value) { _arguments->set_req(i, value); } @@ -206,9 +254,11 @@ class StringConcat : public ResourceObj { void StringConcat::eliminate_unneeded_control() { - eliminate_initialize(begin()->initialization()); for (uint i = 0; i < _control.size(); i++) { Node* n = _control.at(i); + if (n->is_Allocate()) { + eliminate_initialize(n->as_Allocate()->initialization()); + } if (n->is_Call()) { if (n != _end) { eliminate_call(n->as_Call()); @@ -239,14 +289,15 @@ StringConcat* StringConcat::merge(StringConcat* other, Node* arg) { assert(result->_control.contains(other->_end), "what?"); assert(result->_control.contains(_begin), "what?"); for (int x = 0; x < num_arguments(); x++) { - if (argument(x) == arg) { + Node* argx = argument_uncast(x); + if (argx == arg) { // replace the toString result with the all the arguments that // made up the other StringConcat for (int y = 0; y < other->num_arguments(); y++) { result->append(other->argument(y), other->mode(y)); } } else { - result->append(argument(x), mode(x)); + result->append(argx, mode(x)); } } result->set_allocation(other->_begin); @@ -327,14 +378,9 @@ Node_List PhaseStringOpts::collect_toString_calls() { while (worklist.size() > 0) { Node* ctrl = worklist.pop(); - if (ctrl->is_CallStaticJava()) { + if (StringConcat::is_SB_toString(ctrl)) { CallStaticJavaNode* csj = ctrl->as_CallStaticJava(); - ciMethod* m = csj->method(); - if (m != NULL && - (m->intrinsic_id() == vmIntrinsics::_StringBuffer_toString || - m->intrinsic_id() == vmIntrinsics::_StringBuilder_toString)) { - string_calls.push(csj); - } + string_calls.push(csj); } if (ctrl->in(0) != NULL && !_visited.test_set(ctrl->in(0)->_idx)) { worklist.push(ctrl->in(0)); @@ -487,7 +533,17 @@ StringConcat* PhaseStringOpts::build_candidate(CallStaticJavaNode* call) { if (arg->is_Proj() && arg->in(0)->is_CallStaticJava()) { CallStaticJavaNode* csj = arg->in(0)->as_CallStaticJava(); if (csj->method() != NULL && - csj->method()->intrinsic_id() == vmIntrinsics::_Integer_toString) { + csj->method()->intrinsic_id() == vmIntrinsics::_Integer_toString && + arg->outcnt() == 1) { + // _control is the list of StringBuilder calls nodes which + // will be replaced by new String code after this optimization. + // Integer::toString() call is not part of StringBuilder calls + // chain. It could be eliminated only if its result is used + // only by this SB calls chain. + // Another limitation: it should be used only once because + // it is unknown that it is used only by this SB calls chain + // until all related SB calls nodes are collected. + assert(arg->unique_out() == cnode, "sanity"); sc->add_control(csj); sc->push_int(csj->in(TypeFunc::Parms)); continue; @@ -550,44 +606,40 @@ PhaseStringOpts::PhaseStringOpts(PhaseGVN* gvn, Unique_Node_List*): for (int c = 0; c < concats.length(); c++) { StringConcat* sc = concats.at(c); for (int i = 0; i < sc->num_arguments(); i++) { - Node* arg = sc->argument(i); - if (arg->is_Proj() && arg->in(0)->is_CallStaticJava()) { + Node* arg = sc->argument_uncast(i); + if (arg->is_Proj() && StringConcat::is_SB_toString(arg->in(0))) { CallStaticJavaNode* csj = arg->in(0)->as_CallStaticJava(); - if (csj->method() != NULL && - (csj->method()->intrinsic_id() == vmIntrinsics::_StringBuilder_toString || - csj->method()->intrinsic_id() == vmIntrinsics::_StringBuffer_toString)) { - for (int o = 0; o < concats.length(); o++) { - if (c == o) continue; - StringConcat* other = concats.at(o); - if (other->end() == csj) { + for (int o = 0; o < concats.length(); o++) { + if (c == o) continue; + StringConcat* other = concats.at(o); + if (other->end() == csj) { #ifndef PRODUCT - if (PrintOptimizeStringConcat) { - tty->print_cr("considering stacked concats"); - } + if (PrintOptimizeStringConcat) { + tty->print_cr("considering stacked concats"); + } #endif - StringConcat* merged = sc->merge(other, arg); - if (merged->validate_control_flow()) { + StringConcat* merged = sc->merge(other, arg); + if (merged->validate_control_flow()) { #ifndef PRODUCT - if (PrintOptimizeStringConcat) { - tty->print_cr("stacking would succeed"); - } -#endif - if (c < o) { - concats.remove_at(o); - concats.at_put(c, merged); - } else { - concats.remove_at(c); - concats.at_put(o, merged); - } - goto restart; - } else { -#ifndef PRODUCT - if (PrintOptimizeStringConcat) { - tty->print_cr("stacking would fail"); - } -#endif + if (PrintOptimizeStringConcat) { + tty->print_cr("stacking would succeed"); } +#endif + if (c < o) { + concats.remove_at(o); + concats.at_put(c, merged); + } else { + concats.remove_at(c); + concats.at_put(o, merged); + } + goto restart; + } else { +#ifndef PRODUCT + if (PrintOptimizeStringConcat) { + tty->print_cr("stacking would fail"); + } +#endif } } } diff --git a/hotspot/src/share/vm/opto/subnode.cpp b/hotspot/src/share/vm/opto/subnode.cpp index 4fbf5435394..02a6a64953c 100644 --- a/hotspot/src/share/vm/opto/subnode.cpp +++ b/hotspot/src/share/vm/opto/subnode.cpp @@ -554,9 +554,7 @@ const Type *CmpUNode::sub( const Type *t1, const Type *t2 ) const { return TypeInt::CC_GE; } else if (hi0 <= lo1) { // Check for special case in Hashtable::get. (See below.) - if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && - in(1)->Opcode() == Op_ModI && - in(1)->in(2) == in(2) ) + if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && is_index_range_check()) return TypeInt::CC_LT; return TypeInt::CC_LE; } @@ -567,13 +565,17 @@ const Type *CmpUNode::sub( const Type *t1, const Type *t2 ) const { // to be positive. // (This is a gross hack, since the sub method never // looks at the structure of the node in any other case.) - if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && - in(1)->Opcode() == Op_ModI && - in(1)->in(2)->uncast() == in(2)->uncast()) + if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && is_index_range_check()) return TypeInt::CC_LT; return TypeInt::CC; // else use worst case results } +bool CmpUNode::is_index_range_check() const { + // Check for the "(X ModI Y) CmpU Y" shape + return (in(1)->Opcode() == Op_ModI && + in(1)->in(2)->eqv_uncast(in(2))); +} + //------------------------------Idealize--------------------------------------- Node *CmpINode::Ideal( PhaseGVN *phase, bool can_reshape ) { if (phase->type(in(2))->higher_equal(TypeInt::ZERO)) { diff --git a/hotspot/src/share/vm/opto/subnode.hpp b/hotspot/src/share/vm/opto/subnode.hpp index bacd1065a0c..2b33e90f9e5 100644 --- a/hotspot/src/share/vm/opto/subnode.hpp +++ b/hotspot/src/share/vm/opto/subnode.hpp @@ -158,6 +158,7 @@ public: CmpUNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {} virtual int Opcode() const; virtual const Type *sub( const Type *, const Type * ) const; + bool is_index_range_check() const; }; //------------------------------CmpPNode--------------------------------------- diff --git a/hotspot/src/share/vm/opto/superword.cpp b/hotspot/src/share/vm/opto/superword.cpp index ae46e7f17c8..cfeb47e507b 100644 --- a/hotspot/src/share/vm/opto/superword.cpp +++ b/hotspot/src/share/vm/opto/superword.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,6 +67,10 @@ SuperWord::SuperWord(PhaseIdealLoop* phase) : //------------------------------transform_loop--------------------------- void SuperWord::transform_loop(IdealLoopTree* lpt) { + assert(UseSuperWord, "should be"); + // Do vectors exist on this architecture? + if (Matcher::vector_width_in_bytes(T_BYTE) < 2) return; + assert(lpt->_head->is_CountedLoop(), "must be"); CountedLoopNode *cl = lpt->_head->as_CountedLoop(); @@ -89,15 +93,12 @@ void SuperWord::transform_loop(IdealLoopTree* lpt) { Node *pre_opaq1 = pre_end->limit(); if (pre_opaq1->Opcode() != Op_Opaque1) return; - // Do vectors exist on this architecture? - if (vector_width_in_bytes() == 0) return; - init(); // initialize data structures set_lpt(lpt); set_lp(cl); - // For now, define one block which is the entire loop body + // For now, define one block which is the entire loop body set_bb(cl); assert(_packset.length() == 0, "packset must be empty"); @@ -177,7 +178,7 @@ void SuperWord::find_adjacent_refs() { Node_List memops; for (int i = 0; i < _block.length(); i++) { Node* n = _block.at(i); - if (n->is_Mem() && in_bb(n) && + if (n->is_Mem() && !n->is_LoadStore() && in_bb(n) && is_java_primitive(n->as_Mem()->memory_type())) { int align = memory_alignment(n->as_Mem(), 0); if (align != bottom_align) { @@ -185,54 +186,141 @@ void SuperWord::find_adjacent_refs() { } } } - if (memops.size() == 0) return; - // Find a memory reference to align to. The pre-loop trip count - // is modified to align this reference to a vector-aligned address - find_align_to_ref(memops); - if (align_to_ref() == NULL) return; + Node_List align_to_refs; + int best_iv_adjustment = 0; + MemNode* best_align_to_mem_ref = NULL; - SWPointer align_to_ref_p(align_to_ref(), this); - int offset = align_to_ref_p.offset_in_bytes(); - int scale = align_to_ref_p.scale_in_bytes(); - int vw = vector_width_in_bytes(); - int stride_sign = (scale * iv_stride()) > 0 ? 1 : -1; - int iv_adjustment = (stride_sign * vw - (offset % vw)) % vw; + while (memops.size() != 0) { + // Find a memory reference to align to. + MemNode* mem_ref = find_align_to_ref(memops); + if (mem_ref == NULL) break; + align_to_refs.push(mem_ref); + int iv_adjustment = get_iv_adjustment(mem_ref); -#ifndef PRODUCT - if (TraceSuperWord) - tty->print_cr("\noffset = %d iv_adjustment = %d elt_align = %d scale = %d iv_stride = %d", - offset, iv_adjustment, align_to_ref_p.memory_size(), align_to_ref_p.scale_in_bytes(), iv_stride()); -#endif - - // Set alignment relative to "align_to_ref" - for (int i = memops.size() - 1; i >= 0; i--) { - MemNode* s = memops.at(i)->as_Mem(); - SWPointer p2(s, this); - if (p2.comparable(align_to_ref_p)) { - int align = memory_alignment(s, iv_adjustment); - set_alignment(s, align); - } else { - memops.remove(i); + if (best_align_to_mem_ref == NULL) { + // Set memory reference which is the best from all memory operations + // to be used for alignment. The pre-loop trip count is modified to align + // this reference to a vector-aligned address. + best_align_to_mem_ref = mem_ref; + best_iv_adjustment = iv_adjustment; } - } - // Create initial pack pairs of memory operations - for (uint i = 0; i < memops.size(); i++) { - Node* s1 = memops.at(i); - for (uint j = 0; j < memops.size(); j++) { - Node* s2 = memops.at(j); - if (s1 != s2 && are_adjacent_refs(s1, s2)) { - int align = alignment(s1); - if (stmts_can_pack(s1, s2, align)) { - Node_List* pair = new Node_List(); - pair->push(s1); - pair->push(s2); - _packset.append(pair); + SWPointer align_to_ref_p(mem_ref, this); + // Set alignment relative to "align_to_ref" for all related memory operations. + for (int i = memops.size() - 1; i >= 0; i--) { + MemNode* s = memops.at(i)->as_Mem(); + if (isomorphic(s, mem_ref)) { + SWPointer p2(s, this); + if (p2.comparable(align_to_ref_p)) { + int align = memory_alignment(s, iv_adjustment); + set_alignment(s, align); } } } - } + + // Create initial pack pairs of memory operations for which + // alignment is set and vectors will be aligned. + bool create_pack = true; + if (memory_alignment(mem_ref, best_iv_adjustment) == 0) { + if (!Matcher::misaligned_vectors_ok()) { + int vw = vector_width(mem_ref); + int vw_best = vector_width(best_align_to_mem_ref); + if (vw > vw_best) { + // Do not vectorize a memory access with more elements per vector + // if unaligned memory access is not allowed because number of + // iterations in pre-loop will be not enough to align it. + create_pack = false; + } + } + } else { + if (same_velt_type(mem_ref, best_align_to_mem_ref)) { + // Can't allow vectorization of unaligned memory accesses with the + // same type since it could be overlapped accesses to the same array. + create_pack = false; + } else { + // Allow independent (different type) unaligned memory operations + // if HW supports them. + if (!Matcher::misaligned_vectors_ok()) { + create_pack = false; + } else { + // Check if packs of the same memory type but + // with a different alignment were created before. + for (uint i = 0; i < align_to_refs.size(); i++) { + MemNode* mr = align_to_refs.at(i)->as_Mem(); + if (same_velt_type(mr, mem_ref) && + memory_alignment(mr, iv_adjustment) != 0) + create_pack = false; + } + } + } + } + if (create_pack) { + for (uint i = 0; i < memops.size(); i++) { + Node* s1 = memops.at(i); + int align = alignment(s1); + if (align == top_align) continue; + for (uint j = 0; j < memops.size(); j++) { + Node* s2 = memops.at(j); + if (alignment(s2) == top_align) continue; + if (s1 != s2 && are_adjacent_refs(s1, s2)) { + if (stmts_can_pack(s1, s2, align)) { + Node_List* pair = new Node_List(); + pair->push(s1); + pair->push(s2); + _packset.append(pair); + } + } + } + } + } else { // Don't create unaligned pack + // First, remove remaining memory ops of the same type from the list. + for (int i = memops.size() - 1; i >= 0; i--) { + MemNode* s = memops.at(i)->as_Mem(); + if (same_velt_type(s, mem_ref)) { + memops.remove(i); + } + } + + // Second, remove already constructed packs of the same type. + for (int i = _packset.length() - 1; i >= 0; i--) { + Node_List* p = _packset.at(i); + MemNode* s = p->at(0)->as_Mem(); + if (same_velt_type(s, mem_ref)) { + remove_pack_at(i); + } + } + + // If needed find the best memory reference for loop alignment again. + if (same_velt_type(mem_ref, best_align_to_mem_ref)) { + // Put memory ops from remaining packs back on memops list for + // the best alignment search. + uint orig_msize = memops.size(); + for (int i = 0; i < _packset.length(); i++) { + Node_List* p = _packset.at(i); + MemNode* s = p->at(0)->as_Mem(); + assert(!same_velt_type(s, mem_ref), "sanity"); + memops.push(s); + } + MemNode* best_align_to_mem_ref = find_align_to_ref(memops); + if (best_align_to_mem_ref == NULL) break; + best_iv_adjustment = get_iv_adjustment(best_align_to_mem_ref); + // Restore list. + while (memops.size() > orig_msize) + (void)memops.pop(); + } + } // unaligned memory accesses + + // Remove used mem nodes. + for (int i = memops.size() - 1; i >= 0; i--) { + MemNode* m = memops.at(i)->as_Mem(); + if (alignment(m) != top_align) { + memops.remove(i); + } + } + + } // while (memops.size() != 0 + set_align_to_ref(best_align_to_mem_ref); #ifndef PRODUCT if (TraceSuperWord) { @@ -246,7 +334,7 @@ void SuperWord::find_adjacent_refs() { // Find a memory reference to align the loop induction variable to. // Looks first at stores then at loads, looking for a memory reference // with the largest number of references similar to it. -void SuperWord::find_align_to_ref(Node_List &memops) { +MemNode* SuperWord::find_align_to_ref(Node_List &memops) { GrowableArray cmp_ct(arena(), memops.size(), memops.size(), 0); // Count number of comparable memory ops @@ -270,20 +358,28 @@ void SuperWord::find_align_to_ref(Node_List &memops) { } } - // Find Store (or Load) with the greatest number of "comparable" references + // Find Store (or Load) with the greatest number of "comparable" references, + // biggest vector size, smallest data size and smallest iv offset. int max_ct = 0; + int max_vw = 0; int max_idx = -1; int min_size = max_jint; int min_iv_offset = max_jint; for (uint j = 0; j < memops.size(); j++) { MemNode* s = memops.at(j)->as_Mem(); if (s->is_Store()) { + int vw = vector_width_in_bytes(s); + assert(vw > 1, "sanity"); SWPointer p(s, this); - if (cmp_ct.at(j) > max_ct || - cmp_ct.at(j) == max_ct && (data_size(s) < min_size || - data_size(s) == min_size && - p.offset_in_bytes() < min_iv_offset)) { + if (cmp_ct.at(j) > max_ct || + cmp_ct.at(j) == max_ct && + (vw > max_vw || + vw == max_vw && + (data_size(s) < min_size || + data_size(s) == min_size && + (p.offset_in_bytes() < min_iv_offset)))) { max_ct = cmp_ct.at(j); + max_vw = vw; max_idx = j; min_size = data_size(s); min_iv_offset = p.offset_in_bytes(); @@ -295,12 +391,18 @@ void SuperWord::find_align_to_ref(Node_List &memops) { for (uint j = 0; j < memops.size(); j++) { MemNode* s = memops.at(j)->as_Mem(); if (s->is_Load()) { + int vw = vector_width_in_bytes(s); + assert(vw > 1, "sanity"); SWPointer p(s, this); - if (cmp_ct.at(j) > max_ct || - cmp_ct.at(j) == max_ct && (data_size(s) < min_size || - data_size(s) == min_size && - p.offset_in_bytes() < min_iv_offset)) { + if (cmp_ct.at(j) > max_ct || + cmp_ct.at(j) == max_ct && + (vw > max_vw || + vw == max_vw && + (data_size(s) < min_size || + data_size(s) == min_size && + (p.offset_in_bytes() < min_iv_offset)))) { max_ct = cmp_ct.at(j); + max_vw = vw; max_idx = j; min_size = data_size(s); min_iv_offset = p.offset_in_bytes(); @@ -309,10 +411,7 @@ void SuperWord::find_align_to_ref(Node_List &memops) { } } - if (max_ct > 0) - set_align_to_ref(memops.at(max_idx)->as_Mem()); - -#ifndef PRODUCT +#ifdef ASSERT if (TraceSuperWord && Verbose) { tty->print_cr("\nVector memops after find_align_to_refs"); for (uint i = 0; i < memops.size(); i++) { @@ -321,6 +420,17 @@ void SuperWord::find_align_to_ref(Node_List &memops) { } } #endif + + if (max_ct > 0) { +#ifdef ASSERT + if (TraceSuperWord) { + tty->print("\nVector align to node: "); + memops.at(max_idx)->as_Mem()->dump(); + } +#endif + return memops.at(max_idx)->as_Mem(); + } + return NULL; } //------------------------------ref_is_alignable--------------------------- @@ -341,7 +451,8 @@ bool SuperWord::ref_is_alignable(SWPointer& p) { // If initial offset from start of object is computable, // compute alignment within the vector. - int vw = vector_width_in_bytes(); + int vw = vector_width_in_bytes(p.mem()); + assert(vw > 1, "sanity"); if (vw % span == 0) { Node* init_nd = pre_end->init_trip(); if (init_nd->is_Con() && p.invar() == NULL) { @@ -361,6 +472,25 @@ bool SuperWord::ref_is_alignable(SWPointer& p) { return false; } +//---------------------------get_iv_adjustment--------------------------- +// Calculate loop's iv adjustment for this memory ops. +int SuperWord::get_iv_adjustment(MemNode* mem_ref) { + SWPointer align_to_ref_p(mem_ref, this); + int offset = align_to_ref_p.offset_in_bytes(); + int scale = align_to_ref_p.scale_in_bytes(); + int vw = vector_width_in_bytes(mem_ref); + assert(vw > 1, "sanity"); + int stride_sign = (scale * iv_stride()) > 0 ? 1 : -1; + int iv_adjustment = (stride_sign * vw - (offset % vw)) % vw; + +#ifndef PRODUCT + if (TraceSuperWord) + tty->print_cr("\noffset = %d iv_adjust = %d elt_size = %d scale = %d iv_stride = %d vect_size %d", + offset, iv_adjustment, align_to_ref_p.memory_size(), scale, iv_stride(), vw); +#endif + return iv_adjustment; +} + //---------------------------dependence_graph--------------------------- // Construct dependency graph. // Add dependence edges to load/store nodes for memory dependence @@ -488,9 +618,13 @@ void SuperWord::mem_slice_preds(Node* start, Node* stop, GrowableArray &p bool SuperWord::stmts_can_pack(Node* s1, Node* s2, int align) { // Do not use superword for non-primitives - if((s1->is_Mem() && !is_java_primitive(s1->as_Mem()->memory_type())) || - (s2->is_Mem() && !is_java_primitive(s2->as_Mem()->memory_type()))) + BasicType bt1 = velt_basic_type(s1); + BasicType bt2 = velt_basic_type(s2); + if(!is_java_primitive(bt1) || !is_java_primitive(bt2)) return false; + if (Matcher::max_vector_size(bt1) < 2) { + return false; // No vectors for this type + } if (isomorphic(s1, s2)) { if (independent(s1, s2)) { @@ -552,7 +686,7 @@ bool SuperWord::isomorphic(Node* s1, Node* s2) { if (s1->Opcode() != s2->Opcode()) return false; if (s1->req() != s2->req()) return false; if (s1->in(0) != s2->in(0)) return false; - if (velt_type(s1) != velt_type(s2)) return false; + if (!same_velt_type(s1, s2)) return false; return true; } @@ -595,14 +729,16 @@ bool SuperWord::independent_path(Node* shallow, Node* deep, uint dp) { //------------------------------set_alignment--------------------------- void SuperWord::set_alignment(Node* s1, Node* s2, int align) { set_alignment(s1, align); - set_alignment(s2, align + data_size(s1)); + if (align == top_align || align == bottom_align) { + set_alignment(s2, align); + } else { + set_alignment(s2, align + data_size(s1)); + } } //------------------------------data_size--------------------------- int SuperWord::data_size(Node* s) { - const Type* t = velt_type(s); - BasicType bt = t->array_element_basic_type(); - int bsize = type2aelembytes(bt); + int bsize = type2aelembytes(velt_basic_type(s)); assert(bsize != 0, "valid size"); return bsize; } @@ -631,9 +767,9 @@ void SuperWord::extend_packlist() { //------------------------------follow_use_defs--------------------------- // Extend the packset by visiting operand definitions of nodes in pack p bool SuperWord::follow_use_defs(Node_List* p) { + assert(p->size() == 2, "just checking"); Node* s1 = p->at(0); Node* s2 = p->at(1); - assert(p->size() == 2, "just checking"); assert(s1->req() == s2->req(), "just checking"); assert(alignment(s1) + data_size(s1) == alignment(s2), "just checking"); @@ -718,7 +854,12 @@ bool SuperWord::opnd_positions_match(Node* d1, Node* u1, Node* d2, Node* u2) { for (i1++; i1 < ct; i1++) if (u1->in(i1) == d1) break; for (i2++; i2 < ct; i2++) if (u2->in(i2) == d2) break; if (i1 != i2) { - return false; + if ((i1 == (3-i2)) && (u2->is_Add() || u2->is_Mul())) { + // Further analysis relies on operands position matching. + u2->swap_edges(i1, i2); + } else { + return false; + } } } while (i1 < ct); return true; @@ -727,7 +868,7 @@ bool SuperWord::opnd_positions_match(Node* d1, Node* u1, Node* d2, Node* u2) { //------------------------------est_savings--------------------------- // Estimate the savings from executing s1 and s2 as a pack int SuperWord::est_savings(Node* s1, Node* s2) { - int save = 2 - 1; // 2 operations per instruction in packed form + int save_in = 2 - 1; // 2 operations per instruction in packed form // inputs for (uint i = 1; i < s1->req(); i++) { @@ -735,17 +876,18 @@ int SuperWord::est_savings(Node* s1, Node* s2) { Node* x2 = s2->in(i); if (x1 != x2) { if (are_adjacent_refs(x1, x2)) { - save += adjacent_profit(x1, x2); + save_in += adjacent_profit(x1, x2); } else if (!in_packset(x1, x2)) { - save -= pack_cost(2); + save_in -= pack_cost(2); } else { - save += unpack_cost(2); + save_in += unpack_cost(2); } } } // uses of result uint ct = 0; + int save_use = 0; for (DUIterator_Fast imax, i = s1->fast_outs(imax); i < imax; i++) { Node* s1_use = s1->fast_out(i); for (int j = 0; j < _packset.length(); j++) { @@ -756,7 +898,7 @@ int SuperWord::est_savings(Node* s1, Node* s2) { if (p->at(p->size()-1) == s2_use) { ct++; if (are_adjacent_refs(s1_use, s2_use)) { - save += adjacent_profit(s1_use, s2_use); + save_use += adjacent_profit(s1_use, s2_use); } } } @@ -764,10 +906,10 @@ int SuperWord::est_savings(Node* s1, Node* s2) { } } - if (ct < s1->outcnt()) save += unpack_cost(1); - if (ct < s2->outcnt()) save += unpack_cost(1); + if (ct < s1->outcnt()) save_use += unpack_cost(1); + if (ct < s2->outcnt()) save_use += unpack_cost(1); - return save; + return MAX2(save_in, save_use); } //------------------------------costs--------------------------- @@ -778,8 +920,9 @@ int SuperWord::unpack_cost(int ct) { return ct; } //------------------------------combine_packs--------------------------- // Combine packs A and B with A.last == B.first into A.first..,A.last,B.second,..B.last void SuperWord::combine_packs() { - bool changed; - do { + bool changed = true; + // Combine packs regardless max vector size. + while (changed) { changed = false; for (int i = 0; i < _packset.length(); i++) { Node_List* p1 = _packset.at(i); @@ -787,6 +930,7 @@ void SuperWord::combine_packs() { for (int j = 0; j < _packset.length(); j++) { Node_List* p2 = _packset.at(j); if (p2 == NULL) continue; + if (i == j) continue; if (p1->at(p1->size()-1) == p2->at(0)) { for (uint k = 1; k < p2->size(); k++) { p1->push(p2->at(k)); @@ -796,8 +940,39 @@ void SuperWord::combine_packs() { } } } - } while (changed); + } + // Split packs which have size greater then max vector size. + for (int i = 0; i < _packset.length(); i++) { + Node_List* p1 = _packset.at(i); + if (p1 != NULL) { + BasicType bt = velt_basic_type(p1->at(0)); + uint max_vlen = Matcher::max_vector_size(bt); // Max elements in vector + assert(is_power_of_2(max_vlen), "sanity"); + uint psize = p1->size(); + if (!is_power_of_2(psize)) { + // Skip pack which can't be vector. + // case1: for(...) { a[i] = i; } elements values are different (i+x) + // case2: for(...) { a[i] = b[i+1]; } can't align both, load and store + _packset.at_put(i, NULL); + continue; + } + if (psize > max_vlen) { + Node_List* pack = new Node_List(); + for (uint j = 0; j < psize; j++) { + pack->push(p1->at(j)); + if (pack->size() >= max_vlen) { + assert(is_power_of_2(pack->size()), "sanity"); + _packset.append(pack); + pack = new Node_List(); + } + } + _packset.at_put(i, NULL); + } + } + } + + // Compress list. for (int i = _packset.length() - 1; i >= 0; i--) { Node_List* p1 = _packset.at(i); if (p1 == NULL) { @@ -880,8 +1055,7 @@ void SuperWord::filter_packs() { // Can code be generated for pack p? bool SuperWord::implemented(Node_List* p) { Node* p0 = p->at(0); - int vopc = VectorNode::opcode(p0->Opcode(), p->size(), velt_type(p0)); - return vopc > 0 && Matcher::has_match_rule(vopc); + return VectorNode::implemented(p0->Opcode(), p->size(), velt_basic_type(p0)); } //------------------------------profitable--------------------------- @@ -939,36 +1113,36 @@ void SuperWord::schedule() { } //-------------------------------remove_and_insert------------------- -//remove "current" from its current position in the memory graph and insert -//it after the appropriate insertion point (lip or uip) +// Remove "current" from its current position in the memory graph and insert +// it after the appropriate insertion point (lip or uip). void SuperWord::remove_and_insert(MemNode *current, MemNode *prev, MemNode *lip, Node *uip, Unique_Node_List &sched_before) { Node* my_mem = current->in(MemNode::Memory); - _igvn.rehash_node_delayed(current); - _igvn.hash_delete(my_mem); + bool sched_up = sched_before.member(current); - //remove current_store from its current position in the memmory graph + // remove current_store from its current position in the memmory graph for (DUIterator i = current->outs(); current->has_out(i); i++) { Node* use = current->out(i); if (use->is_Mem()) { assert(use->in(MemNode::Memory) == current, "must be"); - _igvn.rehash_node_delayed(use); if (use == prev) { // connect prev to my_mem - use->set_req(MemNode::Memory, my_mem); + _igvn.replace_input_of(use, MemNode::Memory, my_mem); + --i; //deleted this edge; rescan position } else if (sched_before.member(use)) { - _igvn.hash_delete(uip); - use->set_req(MemNode::Memory, uip); + if (!sched_up) { // Will be moved together with current + _igvn.replace_input_of(use, MemNode::Memory, uip); + --i; //deleted this edge; rescan position + } } else { - _igvn.hash_delete(lip); - use->set_req(MemNode::Memory, lip); + if (sched_up) { // Will be moved together with current + _igvn.replace_input_of(use, MemNode::Memory, lip); + --i; //deleted this edge; rescan position + } } - --i; //deleted this edge; rescan position } } - bool sched_up = sched_before.member(current); Node *insert_pt = sched_up ? uip : lip; - _igvn.hash_delete(insert_pt); // all uses of insert_pt's memory state should use current's instead for (DUIterator i = insert_pt->outs(); insert_pt->has_out(i); i++) { @@ -988,7 +1162,7 @@ void SuperWord::remove_and_insert(MemNode *current, MemNode *prev, MemNode *lip, } //connect current to insert_pt - current->set_req(MemNode::Memory, insert_pt); + _igvn.replace_input_of(current, MemNode::Memory, insert_pt); } //------------------------------co_locate_pack---------------------------------- @@ -1025,7 +1199,7 @@ void SuperWord::co_locate_pack(Node_List* pk) { if (use->is_Mem() && use != previous) memops.push(use); } - if(current == first) break; + if (current == first) break; previous = current; current = current->in(MemNode::Memory)->as_Mem(); } @@ -1038,27 +1212,37 @@ void SuperWord::co_locate_pack(Node_List* pk) { Node *s2 = memops.at(j); if (!independent(s1, s2)) { if (in_pack(s2, pk) || schedule_before_pack.member(s2)) { - schedule_before_pack.push(s1); //s1 must be scheduled before + schedule_before_pack.push(s1); // s1 must be scheduled before Node_List* mem_pk = my_pack(s1); if (mem_pk != NULL) { for (uint ii = 0; ii < mem_pk->size(); ii++) { - Node* s = mem_pk->at(ii); // follow partner + Node* s = mem_pk->at(ii); // follow partner if (memops.member(s) && !schedule_before_pack.member(s)) schedule_before_pack.push(s); } } + break; } } } } } - MemNode* lower_insert_pt = last; Node* upper_insert_pt = first->in(MemNode::Memory); + // Following code moves loads connected to upper_insert_pt below aliased stores. + // Collect such loads here and reconnect them back to upper_insert_pt later. + memops.clear(); + for (DUIterator i = upper_insert_pt->outs(); upper_insert_pt->has_out(i); i++) { + Node* use = upper_insert_pt->out(i); + if (!use->is_Store()) + memops.push(use); + } + + MemNode* lower_insert_pt = last; previous = last; //previous store in pk current = last->in(MemNode::Memory)->as_Mem(); - //start scheduling from "last" to "first" + // start scheduling from "last" to "first" while (true) { assert(in_bb(current), "stay in block"); assert(in_pack(previous, pk), "previous stays in pack"); @@ -1066,16 +1250,13 @@ void SuperWord::co_locate_pack(Node_List* pk) { if (in_pack(current, pk)) { // Forward users of my memory state (except "previous) to my input memory state - _igvn.hash_delete(current); for (DUIterator i = current->outs(); current->has_out(i); i++) { Node* use = current->out(i); if (use->is_Mem() && use != previous) { assert(use->in(MemNode::Memory) == current, "must be"); if (schedule_before_pack.member(use)) { - _igvn.hash_delete(upper_insert_pt); _igvn.replace_input_of(use, MemNode::Memory, upper_insert_pt); } else { - _igvn.hash_delete(lower_insert_pt); _igvn.replace_input_of(use, MemNode::Memory, lower_insert_pt); } --i; // deleted this edge; rescan position @@ -1089,6 +1270,14 @@ void SuperWord::co_locate_pack(Node_List* pk) { if (current == first) break; current = my_mem->as_Mem(); } // end while + + // Reconnect loads back to upper_insert_pt. + for (uint i = 0; i < memops.size(); i++) { + Node *ld = memops.at(i); + if (ld->in(MemNode::Memory) != upper_insert_pt) { + _igvn.replace_input_of(ld, MemNode::Memory, upper_insert_pt); + } + } } else if (pk->at(0)->is_Load()) { //load // all loads in the pack should have the same memory state. By default, // we use the memory state of the last load. However, if any load could @@ -1149,35 +1338,30 @@ void SuperWord::output() { Node* vn = NULL; Node* low_adr = p->at(0); Node* first = executed_first(p); + int opc = n->Opcode(); if (n->is_Load()) { - int opc = n->Opcode(); Node* ctl = n->in(MemNode::Control); Node* mem = first->in(MemNode::Memory); Node* adr = low_adr->in(MemNode::Address); const TypePtr* atyp = n->adr_type(); - vn = VectorLoadNode::make(_phase->C, opc, ctl, mem, adr, atyp, vlen); - + vn = LoadVectorNode::make(_phase->C, opc, ctl, mem, adr, atyp, vlen, velt_basic_type(n)); } else if (n->is_Store()) { // Promote value to be stored to vector Node* val = vector_opd(p, MemNode::ValueIn); - - int opc = n->Opcode(); Node* ctl = n->in(MemNode::Control); Node* mem = first->in(MemNode::Memory); Node* adr = low_adr->in(MemNode::Address); const TypePtr* atyp = n->adr_type(); - vn = VectorStoreNode::make(_phase->C, opc, ctl, mem, adr, atyp, val, vlen); - + vn = StoreVectorNode::make(_phase->C, opc, ctl, mem, adr, atyp, val, vlen); } else if (n->req() == 3) { // Promote operands to vector Node* in1 = vector_opd(p, 1); Node* in2 = vector_opd(p, 2); - vn = VectorNode::make(_phase->C, n->Opcode(), in1, in2, vlen, velt_type(n)); - + vn = VectorNode::make(_phase->C, opc, in1, in2, vlen, velt_basic_type(n)); } else { ShouldNotReachHere(); } - + assert(vn != NULL, "sanity"); _phase->_igvn.register_new_node_with_optimizer(vn); _phase->set_ctrl(vn, _phase->get_ctrl(p->at(0))); for (uint j = 0; j < p->size(); j++) { @@ -1185,6 +1369,12 @@ void SuperWord::output() { _igvn.replace_node(pm, vn); } _igvn._worklist.push(vn); +#ifdef ASSERT + if (TraceNewVectors) { + tty->print("new Vector node: "); + vn->dump(); + } +#endif } } } @@ -1207,10 +1397,10 @@ Node* SuperWord::vector_opd(Node_List* p, int opd_idx) { } if (same_opd) { - if (opd->is_Vector() || opd->is_VectorLoad()) { + if (opd->is_Vector() || opd->is_LoadVector()) { return opd; // input is matching vector } - assert(!opd->is_VectorStore(), "such vector is not expected here"); + assert(!opd->is_StoreVector(), "such vector is not expected here"); // Convert scalar input to vector with the same number of elements as // p0's vector. Use p0's type because size of operand's container in // vector should match p0's size regardless operand's size. @@ -1219,12 +1409,18 @@ Node* SuperWord::vector_opd(Node_List* p, int opd_idx) { _phase->_igvn.register_new_node_with_optimizer(vn); _phase->set_ctrl(vn, _phase->get_ctrl(opd)); +#ifdef ASSERT + if (TraceNewVectors) { + tty->print("new Vector node: "); + vn->dump(); + } +#endif return vn; } // Insert pack operation - const Type* p0_t = velt_type(p0); - PackNode* pk = PackNode::make(_phase->C, opd, p0_t); + BasicType bt = velt_basic_type(p0); + PackNode* pk = PackNode::make(_phase->C, opd, vlen, bt); DEBUG_ONLY( const BasicType opd_bt = opd->bottom_type()->basic_type(); ) for (uint i = 1; i < vlen; i++) { @@ -1232,10 +1428,16 @@ Node* SuperWord::vector_opd(Node_List* p, int opd_idx) { Node* in = pi->in(opd_idx); assert(my_pack(in) == NULL, "Should already have been unpacked"); assert(opd_bt == in->bottom_type()->basic_type(), "all same type"); - pk->add_opd(in); + pk->add_opd(i, in); } _phase->_igvn.register_new_node_with_optimizer(pk); _phase->set_ctrl(pk, _phase->get_ctrl(opd)); +#ifdef ASSERT + if (TraceNewVectors) { + tty->print("new Vector node: "); + pk->dump(); + } +#endif return pk; } @@ -1273,16 +1475,15 @@ void SuperWord::insert_extracts(Node_List* p) { // Insert extract operation _igvn.hash_delete(def); int def_pos = alignment(def) / data_size(def); - const Type* def_t = velt_type(def); - Node* ex = ExtractNode::make(_phase->C, def, def_pos, def_t); + Node* ex = ExtractNode::make(_phase->C, def, def_pos, velt_basic_type(def)); _phase->_igvn.register_new_node_with_optimizer(ex); _phase->set_ctrl(ex, _phase->get_ctrl(def)); _igvn.replace_input_of(use, idx, ex); _igvn._worklist.push(def); bb_insert_after(ex, bb_idx(def)); - set_velt_type(ex, def_t); + set_velt_type(ex, velt_type(def)); } } @@ -1509,10 +1710,7 @@ void SuperWord::compute_vector_element_type() { // Initial type for (int i = 0; i < _block.length(); i++) { Node* n = _block.at(i); - const Type* t = n->is_Mem() ? Type::get_const_basic_type(n->as_Mem()->memory_type()) - : _igvn.type(n); - const Type* vt = container_type(t); - set_velt_type(n, vt); + set_velt_type(n, container_type(n)); } // Propagate narrowed type backwards through operations @@ -1543,7 +1741,7 @@ void SuperWord::compute_vector_element_type() { bool same_type = true; for (DUIterator_Fast kmax, k = in->fast_outs(kmax); k < kmax; k++) { Node *use = in->fast_out(k); - if (!in_bb(use) || velt_type(use) != vt) { + if (!in_bb(use) || !same_velt_type(use, n)) { same_type = false; break; } @@ -1575,20 +1773,24 @@ int SuperWord::memory_alignment(MemNode* s, int iv_adjust_in_bytes) { if (!p.valid()) { return bottom_align; } + int vw = vector_width_in_bytes(s); + if (vw < 2) { + return bottom_align; // No vectors for this type + } int offset = p.offset_in_bytes(); offset += iv_adjust_in_bytes; - int off_rem = offset % vector_width_in_bytes(); - int off_mod = off_rem >= 0 ? off_rem : off_rem + vector_width_in_bytes(); + int off_rem = offset % vw; + int off_mod = off_rem >= 0 ? off_rem : off_rem + vw; return off_mod; } //---------------------------container_type--------------------------- // Smallest type containing range of values -const Type* SuperWord::container_type(const Type* t) { - const Type* tp = t->make_ptr(); - if (tp && tp->isa_aryptr()) { - t = tp->is_aryptr()->elem(); +const Type* SuperWord::container_type(Node* n) { + if (n->is_Mem()) { + return Type::get_const_basic_type(n->as_Mem()->memory_type()); } + const Type* t = _igvn.type(n); if (t->basic_type() == T_INT) { if (t->higher_equal(TypeInt::BOOL)) return TypeInt::BOOL; if (t->higher_equal(TypeInt::BYTE)) return TypeInt::BYTE; @@ -1599,11 +1801,22 @@ const Type* SuperWord::container_type(const Type* t) { return t; } +bool SuperWord::same_velt_type(Node* n1, Node* n2) { + const Type* vt1 = velt_type(n1); + const Type* vt2 = velt_type(n1); + if (vt1->basic_type() == T_INT && vt2->basic_type() == T_INT) { + // Compare vectors element sizes for integer types. + return data_size(n1) == data_size(n2); + } + return vt1 == vt2; +} + //-------------------------vector_opd_range----------------------- // (Start, end] half-open range defining which operands are vector void SuperWord::vector_opd_range(Node* n, uint* start, uint* end) { switch (n->Opcode()) { - case Op_LoadB: case Op_LoadUS: + case Op_LoadB: case Op_LoadUB: + case Op_LoadS: case Op_LoadUS: case Op_LoadI: case Op_LoadL: case Op_LoadF: case Op_LoadD: case Op_LoadP: @@ -1721,6 +1934,7 @@ void SuperWord::align_initial_loop_index(MemNode* align_to_ref) { assert(orig_limit != NULL && _igvn.type(orig_limit) != Type::TOP, ""); SWPointer align_to_ref_p(align_to_ref, this); + assert(align_to_ref_p.valid(), "sanity"); // Given: // lim0 == original pre loop limit @@ -1773,10 +1987,12 @@ void SuperWord::align_initial_loop_index(MemNode* align_to_ref) { // N = (V - (e - lim0)) % V // lim = lim0 - (V - (e - lim0)) % V + int vw = vector_width_in_bytes(align_to_ref); int stride = iv_stride(); int scale = align_to_ref_p.scale_in_bytes(); int elt_size = align_to_ref_p.memory_size(); - int v_align = vector_width_in_bytes() / elt_size; + int v_align = vw / elt_size; + assert(v_align > 1, "sanity"); int k = align_to_ref_p.offset_in_bytes() / elt_size; Node *kn = _igvn.intcon(k); @@ -1796,6 +2012,25 @@ void SuperWord::align_initial_loop_index(MemNode* align_to_ref) { _phase->_igvn.register_new_node_with_optimizer(e); _phase->set_ctrl(e, pre_ctrl); } + if (vw > ObjectAlignmentInBytes) { + // incorporate base e +/- base && Mask >>> log2(elt) + Node* mask = _igvn.MakeConX(~(-1 << exact_log2(vw))); + Node* xbase = new(_phase->C, 2) CastP2XNode(NULL, align_to_ref_p.base()); + _phase->_igvn.register_new_node_with_optimizer(xbase); + Node* masked_xbase = new (_phase->C, 3) AndXNode(xbase, mask); + _phase->_igvn.register_new_node_with_optimizer(masked_xbase); +#ifdef _LP64 + masked_xbase = new (_phase->C, 2) ConvL2INode(masked_xbase); + _phase->_igvn.register_new_node_with_optimizer(masked_xbase); +#endif + Node* log2_elt = _igvn.intcon(exact_log2(elt_size)); + Node* bref = new (_phase->C, 3) URShiftINode(masked_xbase, log2_elt); + _phase->_igvn.register_new_node_with_optimizer(bref); + _phase->set_ctrl(bref, pre_ctrl); + e = new (_phase->C, 3) AddINode(e, bref); + _phase->_igvn.register_new_node_with_optimizer(e); + _phase->set_ctrl(e, pre_ctrl); + } // compute e +/- lim0 if (scale < 0) { diff --git a/hotspot/src/share/vm/opto/superword.hpp b/hotspot/src/share/vm/opto/superword.hpp index 50937671265..050ce9ea2df 100644 --- a/hotspot/src/share/vm/opto/superword.hpp +++ b/hotspot/src/share/vm/opto/superword.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -264,8 +264,14 @@ class SuperWord : public ResourceObj { _iv = lp->as_CountedLoop()->phi()->as_Phi(); } int iv_stride() { return lp()->as_CountedLoop()->stride_con(); } - int vector_width_in_bytes() { return Matcher::vector_width_in_bytes(); } - + int vector_width(Node* n) { + BasicType bt = velt_basic_type(n); + return MIN2(ABS(iv_stride()), Matcher::max_vector_size(bt)); + } + int vector_width_in_bytes(Node* n) { + BasicType bt = velt_basic_type(n); + return vector_width(n)*type2aelembytes(bt); + } MemNode* align_to_ref() { return _align_to_ref; } void set_align_to_ref(MemNode* m) { _align_to_ref = m; } @@ -298,7 +304,9 @@ class SuperWord : public ResourceObj { // vector element type const Type* velt_type(Node* n) { return _node_info.adr_at(bb_idx(n))->_velt_type; } + BasicType velt_basic_type(Node* n) { return velt_type(n)->array_element_basic_type(); } void set_velt_type(Node* n, const Type* t) { int i = bb_idx(n); grow_node_info(i); _node_info.adr_at(i)->_velt_type = t; } + bool same_velt_type(Node* n1, Node* n2); // my_pack Node_List* my_pack(Node* n) { return !in_bb(n) ? NULL : _node_info.adr_at(bb_idx(n))->_my_pack; } @@ -311,7 +319,9 @@ class SuperWord : public ResourceObj { // Find the adjacent memory references and create pack pairs for them. void find_adjacent_refs(); // Find a memory reference to align the loop induction variable to. - void find_align_to_ref(Node_List &memops); + MemNode* find_align_to_ref(Node_List &memops); + // Calculate loop's iv adjustment for this memory ops. + int get_iv_adjustment(MemNode* mem); // Can the preloop align the reference to position zero in the vector? bool ref_is_alignable(SWPointer& p); // Construct dependency graph. @@ -394,7 +404,7 @@ class SuperWord : public ResourceObj { // (Start, end] half-open range defining which operands are vector void vector_opd_range(Node* n, uint* start, uint* end); // Smallest type containing range of values - static const Type* container_type(const Type* t); + const Type* container_type(Node* n); // Adjust pre-loop limit so that in main loop, a load/store reference // to align_to_ref will be a position zero in the vector. void align_initial_loop_index(MemNode* align_to_ref); @@ -462,6 +472,7 @@ class SWPointer VALUE_OBJ_CLASS_SPEC { Node* base() { return _base; } Node* adr() { return _adr; } + MemNode* mem() { return _mem; } int scale_in_bytes() { return _scale; } Node* invar() { return _invar; } bool negate_invar() { return _negate_invar; } diff --git a/hotspot/src/share/vm/opto/type.cpp b/hotspot/src/share/vm/opto/type.cpp index af118139e2b..80d5830428d 100644 --- a/hotspot/src/share/vm/opto/type.cpp +++ b/hotspot/src/share/vm/opto/type.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,6 +60,10 @@ const BasicType Type::_basic_type[Type::lastype] = { T_ILLEGAL, // Tuple T_ARRAY, // Array + T_ILLEGAL, // VectorS + T_ILLEGAL, // VectorD + T_ILLEGAL, // VectorX + T_ILLEGAL, // VectorY T_ADDRESS, // AnyPtr // shows up in factory methods for NULL_PTR T_ADDRESS, // RawPtr @@ -208,7 +212,7 @@ void Type::Initialize_shared(Compile* current) { // locking. Arena* save = current->type_arena(); - Arena* shared_type_arena = new Arena(); + Arena* shared_type_arena = new (mtCompiler)Arena(); current->set_type_arena(shared_type_arena); _shared_type_dict = @@ -414,6 +418,24 @@ void Type::Initialize_shared(Compile* current) { // get_zero_type() should not happen for T_CONFLICT _zero_type[T_CONFLICT]= NULL; + // Vector predefined types, it needs initialized _const_basic_type[]. + if (Matcher::vector_size_supported(T_BYTE,4)) { + TypeVect::VECTS = TypeVect::make(T_BYTE,4); + } + if (Matcher::vector_size_supported(T_FLOAT,2)) { + TypeVect::VECTD = TypeVect::make(T_FLOAT,2); + } + if (Matcher::vector_size_supported(T_FLOAT,4)) { + TypeVect::VECTX = TypeVect::make(T_FLOAT,4); + } + if (Matcher::vector_size_supported(T_FLOAT,8)) { + TypeVect::VECTY = TypeVect::make(T_FLOAT,8); + } + mreg2type[Op_VecS] = TypeVect::VECTS; + mreg2type[Op_VecD] = TypeVect::VECTD; + mreg2type[Op_VecX] = TypeVect::VECTX; + mreg2type[Op_VecY] = TypeVect::VECTY; + // Restore working type arena. current->set_type_arena(save); current->set_type_dict(NULL); @@ -668,6 +690,10 @@ const Type::TYPES Type::dual_type[Type::lastype] = { Bad, // Tuple - handled in v-call Bad, // Array - handled in v-call + Bad, // VectorS - handled in v-call + Bad, // VectorD - handled in v-call + Bad, // VectorX - handled in v-call + Bad, // VectorY - handled in v-call Bad, // AnyPtr - handled in v-call Bad, // RawPtr - handled in v-call @@ -728,8 +754,8 @@ void Type::dump_on(outputStream *st) const { //------------------------------data------------------------------------------- const char * const Type::msg[Type::lastype] = { "bad","control","top","int:","long:","half", "narrowoop:", - "tuple:", "aryptr", - "anyptr:", "rawptr:", "java:", "inst:", "ary:", "klass:", + "tuple:", "array:", "vectors:", "vectord:", "vectorx:", "vectory:", + "anyptr:", "rawptr:", "java:", "inst:", "aryptr:", "klass:", "func", "abIO", "return_address", "memory", "float_top", "ftcon:", "float", "double_top", "dblcon:", "double", @@ -790,7 +816,7 @@ void Type::typerr( const Type *t ) const { //------------------------------isa_oop_ptr------------------------------------ // Return true if type is an oop pointer type. False for raw pointers. static char isa_oop_ptr_tbl[Type::lastype] = { - 0,0,0,0,0,0,0/*narrowoop*/,0/*tuple*/, 0/*ary*/, + 0,0,0,0,0,0,0/*narrowoop*/,0/*tuple*/, 0/*array*/, 0, 0, 0, 0/*vector*/, 0/*anyptr*/,0/*rawptr*/,1/*OopPtr*/,1/*InstPtr*/,1/*AryPtr*/,1/*KlassPtr*/, 0/*func*/,0,0/*return_address*/,0, /*floats*/0,0,0, /*doubles*/0,0,0, @@ -1926,6 +1952,121 @@ bool TypeAry::ary_must_be_exact() const { return false; } +//==============================TypeVect======================================= +// Convenience common pre-built types. +const TypeVect *TypeVect::VECTS = NULL; // 32-bit vectors +const TypeVect *TypeVect::VECTD = NULL; // 64-bit vectors +const TypeVect *TypeVect::VECTX = NULL; // 128-bit vectors +const TypeVect *TypeVect::VECTY = NULL; // 256-bit vectors + +//------------------------------make------------------------------------------- +const TypeVect* TypeVect::make(const Type *elem, uint length) { + BasicType elem_bt = elem->array_element_basic_type(); + assert(is_java_primitive(elem_bt), "only primitive types in vector"); + assert(length > 1 && is_power_of_2(length), "vector length is power of 2"); + assert(Matcher::vector_size_supported(elem_bt, length), "length in range"); + int size = length * type2aelembytes(elem_bt); + switch (Matcher::vector_ideal_reg(size)) { + case Op_VecS: + return (TypeVect*)(new TypeVectS(elem, length))->hashcons(); + case Op_VecD: + case Op_RegD: + return (TypeVect*)(new TypeVectD(elem, length))->hashcons(); + case Op_VecX: + return (TypeVect*)(new TypeVectX(elem, length))->hashcons(); + case Op_VecY: + return (TypeVect*)(new TypeVectY(elem, length))->hashcons(); + } + ShouldNotReachHere(); + return NULL; +} + +//------------------------------meet------------------------------------------- +// Compute the MEET of two types. It returns a new Type object. +const Type *TypeVect::xmeet( const Type *t ) const { + // Perform a fast test for common case; meeting the same types together. + if( this == t ) return this; // Meeting same type-rep? + + // Current "this->_base" is Vector + switch (t->base()) { // switch on original type + + case Bottom: // Ye Olde Default + return t; + + default: // All else is a mistake + typerr(t); + + case VectorS: + case VectorD: + case VectorX: + case VectorY: { // Meeting 2 vectors? + const TypeVect* v = t->is_vect(); + assert( base() == v->base(), ""); + assert(length() == v->length(), ""); + assert(element_basic_type() == v->element_basic_type(), ""); + return TypeVect::make(_elem->xmeet(v->_elem), _length); + } + case Top: + break; + } + return this; +} + +//------------------------------xdual------------------------------------------ +// Dual: compute field-by-field dual +const Type *TypeVect::xdual() const { + return new TypeVect(base(), _elem->dual(), _length); +} + +//------------------------------eq--------------------------------------------- +// Structural equality check for Type representations +bool TypeVect::eq(const Type *t) const { + const TypeVect *v = t->is_vect(); + return (_elem == v->_elem) && (_length == v->_length); +} + +//------------------------------hash------------------------------------------- +// Type-specific hashing function. +int TypeVect::hash(void) const { + return (intptr_t)_elem + (intptr_t)_length; +} + +//------------------------------singleton-------------------------------------- +// TRUE if Type is a singleton type, FALSE otherwise. Singletons are simple +// constants (Ldi nodes). Vector is singleton if all elements are the same +// constant value (when vector is created with Replicate code). +bool TypeVect::singleton(void) const { +// There is no Con node for vectors yet. +// return _elem->singleton(); + return false; +} + +bool TypeVect::empty(void) const { + return _elem->empty(); +} + +//------------------------------dump2------------------------------------------ +#ifndef PRODUCT +void TypeVect::dump2(Dict &d, uint depth, outputStream *st) const { + switch (base()) { + case VectorS: + st->print("vectors["); break; + case VectorD: + st->print("vectord["); break; + case VectorX: + st->print("vectorx["); break; + case VectorY: + st->print("vectory["); break; + default: + ShouldNotReachHere(); + } + st->print("%d]:{", _length); + _elem->dump2(d, depth, st); + st->print("}"); +} +#endif + + //============================================================================= // Convenience common pre-built types. const TypePtr *TypePtr::NULL_PTR; @@ -2472,18 +2613,26 @@ const TypeOopPtr* TypeOopPtr::make_from_klass_common(ciKlass *klass, bool klass_ //------------------------------make_from_constant----------------------------- // Make a java pointer from an oop constant const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_constant) { - if (o->is_method_data() || o->is_method() || o->is_cpcache()) { + if (o->is_method_data() || o->is_method()) { // Treat much like a typeArray of bytes, like below, but fake the type... - const Type* etype = (Type*)get_const_basic_type(T_BYTE); + const BasicType bt = T_BYTE; + const Type* etype = get_const_basic_type(bt); const TypeAry* arr0 = TypeAry::make(etype, TypeInt::POS); - ciKlass *klass = ciTypeArrayKlass::make((BasicType) T_BYTE); - assert(o->can_be_constant(), "method data oops should be tenured"); - const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); - return arr; + ciKlass* klass = ciArrayKlass::make(ciType::make(bt)); + assert(o->can_be_constant(), "should be tenured"); + return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); + } else if (o->is_cpcache()) { + // Treat much like a objArray, like below, but fake the type... + const BasicType bt = T_OBJECT; + const Type* etype = get_const_basic_type(bt); + const TypeAry* arr0 = TypeAry::make(etype, TypeInt::POS); + ciKlass* klass = ciArrayKlass::make(ciType::make(bt)); + assert(o->can_be_constant(), "should be tenured"); + return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); } else { assert(o->is_java_object(), "must be java language object"); assert(!o->is_null_object(), "null object not yet handled here."); - ciKlass *klass = o->klass(); + ciKlass* klass = o->klass(); if (klass->is_instance_klass()) { // Element is an instance if (require_constant) { @@ -2494,8 +2643,7 @@ const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_const return TypeInstPtr::make(o); } else if (klass->is_obj_array_klass()) { // Element is an object array. Recursively call ourself. - const Type *etype = - TypeOopPtr::make_from_klass_raw(klass->as_obj_array_klass()->element_klass()); + const Type *etype = make_from_klass_raw(klass->as_obj_array_klass()->element_klass()); const TypeAry* arr0 = TypeAry::make(etype, TypeInt::make(o->as_array()->length())); // We used to pass NotNull in here, asserting that the sub-arrays // are all not-null. This is not true in generally, as code can @@ -2505,12 +2653,10 @@ const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_const } else if (!o->should_be_constant()) { return TypeAryPtr::make(TypePtr::NotNull, arr0, klass, true, 0); } - const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); - return arr; + return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); } else if (klass->is_type_array_klass()) { // Element is an typeArray - const Type* etype = - (Type*)get_const_basic_type(klass->as_type_array_klass()->element_type()); + const Type* etype = get_const_basic_type(klass->as_type_array_klass()->element_type()); const TypeAry* arr0 = TypeAry::make(etype, TypeInt::make(o->as_array()->length())); // We used to pass NotNull in here, asserting that the array pointer // is not-null. That was not true in general. @@ -2519,12 +2665,11 @@ const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_const } else if (!o->should_be_constant()) { return TypeAryPtr::make(TypePtr::NotNull, arr0, klass, true, 0); } - const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); - return arr; + return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); } } - ShouldNotReachHere(); + fatal("unhandled object type"); return NULL; } @@ -4140,7 +4285,7 @@ void TypeFunc::dump2( Dict &d, uint depth, outputStream *st ) const { // Print a 'flattened' signature static const char * const flat_type_msg[Type::lastype] = { "bad","control","top","int","long","_", "narrowoop", - "tuple:", "array:", + "tuple:", "array:", "vectors:", "vectord:", "vectorx:", "vectory:", "ptr", "rawptr", "ptr", "ptr", "ptr", "ptr", "func", "abIO", "return_address", "mem", "float_top", "ftcon:", "flt", diff --git a/hotspot/src/share/vm/opto/type.hpp b/hotspot/src/share/vm/opto/type.hpp index 133ce78f061..a4b5487d78b 100644 --- a/hotspot/src/share/vm/opto/type.hpp +++ b/hotspot/src/share/vm/opto/type.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,6 +51,11 @@ class TypeLong; class TypeNarrowOop; class TypeAry; class TypeTuple; +class TypeVect; +class TypeVectS; +class TypeVectD; +class TypeVectX; +class TypeVectY; class TypePtr; class TypeRawPtr; class TypeOopPtr; @@ -78,6 +83,10 @@ public: Tuple, // Method signature or object layout Array, // Array types + VectorS, // 32bit Vector types + VectorD, // 64bit Vector types + VectorX, // 128bit Vector types + VectorY, // 256bit Vector types AnyPtr, // Any old raw, klass, inst, or array pointer RawPtr, // Raw (non-oop) pointers @@ -222,6 +231,8 @@ public: const TypeF *isa_float_constant() const; // Returns NULL if not a FloatCon const TypeTuple *is_tuple() const; // Collection of fields, NOT a pointer const TypeAry *is_ary() const; // Array, NOT array pointer + const TypeVect *is_vect() const; // Vector + const TypeVect *isa_vect() const; // Returns NULL if not a Vector const TypePtr *is_ptr() const; // Asserts it is a ptr type const TypePtr *isa_ptr() const; // Returns NULL if not ptr type const TypeRawPtr *isa_rawptr() const; // NOT Java oop @@ -574,6 +585,69 @@ public: #endif }; +//------------------------------TypeVect--------------------------------------- +// Class of Vector Types +class TypeVect : public Type { + const Type* _elem; // Vector's element type + const uint _length; // Elements in vector (power of 2) + +protected: + TypeVect(TYPES t, const Type* elem, uint length) : Type(t), + _elem(elem), _length(length) {} + +public: + const Type* element_type() const { return _elem; } + BasicType element_basic_type() const { return _elem->array_element_basic_type(); } + uint length() const { return _length; } + uint length_in_bytes() const { + return _length * type2aelembytes(element_basic_type()); + } + + virtual bool eq(const Type *t) const; + virtual int hash() const; // Type specific hashing + virtual bool singleton(void) const; // TRUE if type is a singleton + virtual bool empty(void) const; // TRUE if type is vacuous + + static const TypeVect *make(const BasicType elem_bt, uint length) { + // Use bottom primitive type. + return make(get_const_basic_type(elem_bt), length); + } + // Used directly by Replicate nodes to construct singleton vector. + static const TypeVect *make(const Type* elem, uint length); + + virtual const Type *xmeet( const Type *t) const; + virtual const Type *xdual() const; // Compute dual right now. + + static const TypeVect *VECTS; + static const TypeVect *VECTD; + static const TypeVect *VECTX; + static const TypeVect *VECTY; + +#ifndef PRODUCT + virtual void dump2(Dict &d, uint, outputStream *st) const; // Specialized per-Type dumping +#endif +}; + +class TypeVectS : public TypeVect { + friend class TypeVect; + TypeVectS(const Type* elem, uint length) : TypeVect(VectorS, elem, length) {} +}; + +class TypeVectD : public TypeVect { + friend class TypeVect; + TypeVectD(const Type* elem, uint length) : TypeVect(VectorD, elem, length) {} +}; + +class TypeVectX : public TypeVect { + friend class TypeVect; + TypeVectX(const Type* elem, uint length) : TypeVect(VectorX, elem, length) {} +}; + +class TypeVectY : public TypeVect { + friend class TypeVect; + TypeVectY(const Type* elem, uint length) : TypeVect(VectorY, elem, length) {} +}; + //------------------------------TypePtr---------------------------------------- // Class of machine Pointer Types: raw data, instances or arrays. // If the _base enum is AnyPtr, then this refers to all of the above. @@ -1113,6 +1187,15 @@ inline const TypeAry *Type::is_ary() const { return (TypeAry*)this; } +inline const TypeVect *Type::is_vect() const { + assert( _base >= VectorS && _base <= VectorY, "Not a Vector" ); + return (TypeVect*)this; +} + +inline const TypeVect *Type::isa_vect() const { + return (_base >= VectorS && _base <= VectorY) ? (TypeVect*)this : NULL; +} + inline const TypePtr *Type::is_ptr() const { // AnyPtr is the first Ptr and KlassPtr the last, with no non-ptrs between. assert(_base >= AnyPtr && _base <= KlassPtr, "Not a pointer"); diff --git a/hotspot/src/share/vm/opto/vectornode.cpp b/hotspot/src/share/vm/opto/vectornode.cpp index 885a1c89839..c786754cd08 100644 --- a/hotspot/src/share/vm/opto/vectornode.cpp +++ b/hotspot/src/share/vm/opto/vectornode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,147 +28,16 @@ //------------------------------VectorNode-------------------------------------- -// Return vector type for an element type and vector length. -const Type* VectorNode::vect_type(BasicType elt_bt, uint len) { - assert(len <= VectorNode::max_vlen(elt_bt), "len in range"); - switch(elt_bt) { - case T_BOOLEAN: - case T_BYTE: - switch(len) { - case 2: return TypeInt::CHAR; - case 4: return TypeInt::INT; - case 8: return TypeLong::LONG; - } - break; - case T_CHAR: - case T_SHORT: - switch(len) { - case 2: return TypeInt::INT; - case 4: return TypeLong::LONG; - } - break; - case T_INT: - switch(len) { - case 2: return TypeLong::LONG; - } - break; - case T_LONG: - break; - case T_FLOAT: - switch(len) { - case 2: return Type::DOUBLE; - } - break; - case T_DOUBLE: - break; - } - ShouldNotReachHere(); - return NULL; -} - -// Scalar promotion -VectorNode* VectorNode::scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t) { - BasicType bt = opd_t->array_element_basic_type(); - assert(vlen <= VectorNode::max_vlen(bt), "vlen in range"); - switch (bt) { - case T_BOOLEAN: - case T_BYTE: - if (vlen == 16) return new (C, 2) Replicate16BNode(s); - if (vlen == 8) return new (C, 2) Replicate8BNode(s); - if (vlen == 4) return new (C, 2) Replicate4BNode(s); - break; - case T_CHAR: - if (vlen == 8) return new (C, 2) Replicate8CNode(s); - if (vlen == 4) return new (C, 2) Replicate4CNode(s); - if (vlen == 2) return new (C, 2) Replicate2CNode(s); - break; - case T_SHORT: - if (vlen == 8) return new (C, 2) Replicate8SNode(s); - if (vlen == 4) return new (C, 2) Replicate4SNode(s); - if (vlen == 2) return new (C, 2) Replicate2SNode(s); - break; - case T_INT: - if (vlen == 4) return new (C, 2) Replicate4INode(s); - if (vlen == 2) return new (C, 2) Replicate2INode(s); - break; - case T_LONG: - if (vlen == 2) return new (C, 2) Replicate2LNode(s); - break; - case T_FLOAT: - if (vlen == 4) return new (C, 2) Replicate4FNode(s); - if (vlen == 2) return new (C, 2) Replicate2FNode(s); - break; - case T_DOUBLE: - if (vlen == 2) return new (C, 2) Replicate2DNode(s); - break; - } - ShouldNotReachHere(); - return NULL; -} - -// Return initial Pack node. Additional operands added with add_opd() calls. -PackNode* PackNode::make(Compile* C, Node* s, const Type* opd_t) { - BasicType bt = opd_t->array_element_basic_type(); - switch (bt) { - case T_BOOLEAN: - case T_BYTE: - return new (C, 2) PackBNode(s); - case T_CHAR: - return new (C, 2) PackCNode(s); - case T_SHORT: - return new (C, 2) PackSNode(s); - case T_INT: - return new (C, 2) PackINode(s); - case T_LONG: - return new (C, 2) PackLNode(s); - case T_FLOAT: - return new (C, 2) PackFNode(s); - case T_DOUBLE: - return new (C, 2) PackDNode(s); - } - ShouldNotReachHere(); - return NULL; -} - -// Create a binary tree form for Packs. [lo, hi) (half-open) range -Node* PackNode::binaryTreePack(Compile* C, int lo, int hi) { - int ct = hi - lo; - assert(is_power_of_2(ct), "power of 2"); - int mid = lo + ct/2; - Node* n1 = ct == 2 ? in(lo) : binaryTreePack(C, lo, mid); - Node* n2 = ct == 2 ? in(lo+1) : binaryTreePack(C, mid, hi ); - int rslt_bsize = ct * type2aelembytes(elt_basic_type()); - if (bottom_type()->is_floatingpoint()) { - switch (rslt_bsize) { - case 8: return new (C, 3) PackFNode(n1, n2); - case 16: return new (C, 3) PackDNode(n1, n2); - } - } else { - assert(bottom_type()->isa_int() || bottom_type()->isa_long(), "int or long"); - switch (rslt_bsize) { - case 2: return new (C, 3) Pack2x1BNode(n1, n2); - case 4: return new (C, 3) Pack2x2BNode(n1, n2); - case 8: return new (C, 3) PackINode(n1, n2); - case 16: return new (C, 3) PackLNode(n1, n2); - } - } - ShouldNotReachHere(); - return NULL; -} - // Return the vector operator for the specified scalar operation -// and vector length. One use is to check if the code generator +// and vector length. Also used to check if the code generator // supports the vector operation. -int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { - BasicType bt = opd_t->array_element_basic_type(); - if (!(is_power_of_2(vlen) && vlen <= max_vlen(bt))) - return 0; // unimplemented +int VectorNode::opcode(int sopc, uint vlen, BasicType bt) { switch (sopc) { case Op_AddI: switch (bt) { case T_BOOLEAN: case T_BYTE: return Op_AddVB; - case T_CHAR: return Op_AddVC; + case T_CHAR: case T_SHORT: return Op_AddVS; case T_INT: return Op_AddVI; } @@ -186,7 +55,7 @@ int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { switch (bt) { case T_BOOLEAN: case T_BYTE: return Op_SubVB; - case T_CHAR: return Op_SubVC; + case T_CHAR: case T_SHORT: return Op_SubVS; case T_INT: return Op_SubVI; } @@ -216,18 +85,18 @@ int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { switch (bt) { case T_BOOLEAN: case T_BYTE: return Op_LShiftVB; - case T_CHAR: return Op_LShiftVC; + case T_CHAR: case T_SHORT: return Op_LShiftVS; case T_INT: return Op_LShiftVI; } ShouldNotReachHere(); - case Op_URShiftI: + case Op_RShiftI: switch (bt) { case T_BOOLEAN: - case T_BYTE: return Op_URShiftVB; - case T_CHAR: return Op_URShiftVC; - case T_SHORT: return Op_URShiftVS; - case T_INT: return Op_URShiftVI; + case T_BYTE: return Op_RShiftVB; + case T_CHAR: + case T_SHORT: return Op_RShiftVS; + case T_INT: return Op_RShiftVI; } ShouldNotReachHere(); case Op_AndI: @@ -241,13 +110,14 @@ int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { return Op_XorV; case Op_LoadB: + case Op_LoadUB: case Op_LoadUS: case Op_LoadS: case Op_LoadI: case Op_LoadL: case Op_LoadF: case Op_LoadD: - return VectorLoadNode::opcode(sopc, vlen); + return Op_LoadVector; case Op_StoreB: case Op_StoreC: @@ -255,211 +125,170 @@ int VectorNode::opcode(int sopc, uint vlen, const Type* opd_t) { case Op_StoreL: case Op_StoreF: case Op_StoreD: - return VectorStoreNode::opcode(sopc, vlen); + return Op_StoreVector; } return 0; // Unimplemented } -// Helper for above. -int VectorLoadNode::opcode(int sopc, uint vlen) { - switch (sopc) { - case Op_LoadB: - switch (vlen) { - case 2: return 0; // Unimplemented - case 4: return Op_Load4B; - case 8: return Op_Load8B; - case 16: return Op_Load16B; - } - break; - case Op_LoadUS: - switch (vlen) { - case 2: return Op_Load2C; - case 4: return Op_Load4C; - case 8: return Op_Load8C; - } - break; - case Op_LoadS: - switch (vlen) { - case 2: return Op_Load2S; - case 4: return Op_Load4S; - case 8: return Op_Load8S; - } - break; - case Op_LoadI: - switch (vlen) { - case 2: return Op_Load2I; - case 4: return Op_Load4I; - } - break; - case Op_LoadL: - if (vlen == 2) return Op_Load2L; - break; - case Op_LoadF: - switch (vlen) { - case 2: return Op_Load2F; - case 4: return Op_Load4F; - } - break; - case Op_LoadD: - if (vlen == 2) return Op_Load2D; - break; +bool VectorNode::implemented(int opc, uint vlen, BasicType bt) { + if (is_java_primitive(bt) && + (vlen > 1) && is_power_of_2(vlen) && + Matcher::vector_size_supported(bt, vlen)) { + int vopc = VectorNode::opcode(opc, vlen, bt); + return vopc > 0 && Matcher::has_match_rule(vopc); } - return 0; // Unimplemented -} - -// Helper for above -int VectorStoreNode::opcode(int sopc, uint vlen) { - switch (sopc) { - case Op_StoreB: - switch (vlen) { - case 2: return 0; // Unimplemented - case 4: return Op_Store4B; - case 8: return Op_Store8B; - case 16: return Op_Store16B; - } - break; - case Op_StoreC: - switch (vlen) { - case 2: return Op_Store2C; - case 4: return Op_Store4C; - case 8: return Op_Store8C; - } - break; - case Op_StoreI: - switch (vlen) { - case 2: return Op_Store2I; - case 4: return Op_Store4I; - } - break; - case Op_StoreL: - if (vlen == 2) return Op_Store2L; - break; - case Op_StoreF: - switch (vlen) { - case 2: return Op_Store2F; - case 4: return Op_Store4F; - } - break; - case Op_StoreD: - if (vlen == 2) return Op_Store2D; - break; - } - return 0; // Unimplemented + return false; } // Return the vector version of a scalar operation node. -VectorNode* VectorNode::make(Compile* C, int sopc, Node* n1, Node* n2, uint vlen, const Type* opd_t) { - int vopc = opcode(sopc, vlen, opd_t); +VectorNode* VectorNode::make(Compile* C, int opc, Node* n1, Node* n2, uint vlen, BasicType bt) { + const TypeVect* vt = TypeVect::make(bt, vlen); + int vopc = VectorNode::opcode(opc, vlen, bt); switch (vopc) { - case Op_AddVB: return new (C, 3) AddVBNode(n1, n2, vlen); - case Op_AddVC: return new (C, 3) AddVCNode(n1, n2, vlen); - case Op_AddVS: return new (C, 3) AddVSNode(n1, n2, vlen); - case Op_AddVI: return new (C, 3) AddVINode(n1, n2, vlen); - case Op_AddVL: return new (C, 3) AddVLNode(n1, n2, vlen); - case Op_AddVF: return new (C, 3) AddVFNode(n1, n2, vlen); - case Op_AddVD: return new (C, 3) AddVDNode(n1, n2, vlen); + case Op_AddVB: return new (C, 3) AddVBNode(n1, n2, vt); + case Op_AddVS: return new (C, 3) AddVSNode(n1, n2, vt); + case Op_AddVI: return new (C, 3) AddVINode(n1, n2, vt); + case Op_AddVL: return new (C, 3) AddVLNode(n1, n2, vt); + case Op_AddVF: return new (C, 3) AddVFNode(n1, n2, vt); + case Op_AddVD: return new (C, 3) AddVDNode(n1, n2, vt); - case Op_SubVB: return new (C, 3) SubVBNode(n1, n2, vlen); - case Op_SubVC: return new (C, 3) SubVCNode(n1, n2, vlen); - case Op_SubVS: return new (C, 3) SubVSNode(n1, n2, vlen); - case Op_SubVI: return new (C, 3) SubVINode(n1, n2, vlen); - case Op_SubVL: return new (C, 3) SubVLNode(n1, n2, vlen); - case Op_SubVF: return new (C, 3) SubVFNode(n1, n2, vlen); - case Op_SubVD: return new (C, 3) SubVDNode(n1, n2, vlen); + case Op_SubVB: return new (C, 3) SubVBNode(n1, n2, vt); + case Op_SubVS: return new (C, 3) SubVSNode(n1, n2, vt); + case Op_SubVI: return new (C, 3) SubVINode(n1, n2, vt); + case Op_SubVL: return new (C, 3) SubVLNode(n1, n2, vt); + case Op_SubVF: return new (C, 3) SubVFNode(n1, n2, vt); + case Op_SubVD: return new (C, 3) SubVDNode(n1, n2, vt); - case Op_MulVF: return new (C, 3) MulVFNode(n1, n2, vlen); - case Op_MulVD: return new (C, 3) MulVDNode(n1, n2, vlen); + case Op_MulVF: return new (C, 3) MulVFNode(n1, n2, vt); + case Op_MulVD: return new (C, 3) MulVDNode(n1, n2, vt); - case Op_DivVF: return new (C, 3) DivVFNode(n1, n2, vlen); - case Op_DivVD: return new (C, 3) DivVDNode(n1, n2, vlen); + case Op_DivVF: return new (C, 3) DivVFNode(n1, n2, vt); + case Op_DivVD: return new (C, 3) DivVDNode(n1, n2, vt); - case Op_LShiftVB: return new (C, 3) LShiftVBNode(n1, n2, vlen); - case Op_LShiftVC: return new (C, 3) LShiftVCNode(n1, n2, vlen); - case Op_LShiftVS: return new (C, 3) LShiftVSNode(n1, n2, vlen); - case Op_LShiftVI: return new (C, 3) LShiftVINode(n1, n2, vlen); + case Op_LShiftVB: return new (C, 3) LShiftVBNode(n1, n2, vt); + case Op_LShiftVS: return new (C, 3) LShiftVSNode(n1, n2, vt); + case Op_LShiftVI: return new (C, 3) LShiftVINode(n1, n2, vt); - case Op_URShiftVB: return new (C, 3) URShiftVBNode(n1, n2, vlen); - case Op_URShiftVC: return new (C, 3) URShiftVCNode(n1, n2, vlen); - case Op_URShiftVS: return new (C, 3) URShiftVSNode(n1, n2, vlen); - case Op_URShiftVI: return new (C, 3) URShiftVINode(n1, n2, vlen); + case Op_RShiftVB: return new (C, 3) RShiftVBNode(n1, n2, vt); + case Op_RShiftVS: return new (C, 3) RShiftVSNode(n1, n2, vt); + case Op_RShiftVI: return new (C, 3) RShiftVINode(n1, n2, vt); - case Op_AndV: return new (C, 3) AndVNode(n1, n2, vlen, opd_t->array_element_basic_type()); - case Op_OrV: return new (C, 3) OrVNode (n1, n2, vlen, opd_t->array_element_basic_type()); - case Op_XorV: return new (C, 3) XorVNode(n1, n2, vlen, opd_t->array_element_basic_type()); + case Op_AndV: return new (C, 3) AndVNode(n1, n2, vt); + case Op_OrV: return new (C, 3) OrVNode (n1, n2, vt); + case Op_XorV: return new (C, 3) XorVNode(n1, n2, vt); } ShouldNotReachHere(); return NULL; + +} + +// Scalar promotion +VectorNode* VectorNode::scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t) { + BasicType bt = opd_t->array_element_basic_type(); + const TypeVect* vt = opd_t->singleton() ? TypeVect::make(opd_t, vlen) + : TypeVect::make(bt, vlen); + switch (bt) { + case T_BOOLEAN: + case T_BYTE: + return new (C, 2) ReplicateBNode(s, vt); + case T_CHAR: + case T_SHORT: + return new (C, 2) ReplicateSNode(s, vt); + case T_INT: + return new (C, 2) ReplicateINode(s, vt); + case T_LONG: + return new (C, 2) ReplicateLNode(s, vt); + case T_FLOAT: + return new (C, 2) ReplicateFNode(s, vt); + case T_DOUBLE: + return new (C, 2) ReplicateDNode(s, vt); + } + ShouldNotReachHere(); + return NULL; +} + +// Return initial Pack node. Additional operands added with add_opd() calls. +PackNode* PackNode::make(Compile* C, Node* s, uint vlen, BasicType bt) { + const TypeVect* vt = TypeVect::make(bt, vlen); + switch (bt) { + case T_BOOLEAN: + case T_BYTE: + return new (C, vlen+1) PackBNode(s, vt); + case T_CHAR: + case T_SHORT: + return new (C, vlen+1) PackSNode(s, vt); + case T_INT: + return new (C, vlen+1) PackINode(s, vt); + case T_LONG: + return new (C, vlen+1) PackLNode(s, vt); + case T_FLOAT: + return new (C, vlen+1) PackFNode(s, vt); + case T_DOUBLE: + return new (C, vlen+1) PackDNode(s, vt); + } + ShouldNotReachHere(); + return NULL; +} + +// Create a binary tree form for Packs. [lo, hi) (half-open) range +Node* PackNode::binaryTreePack(Compile* C, int lo, int hi) { + int ct = hi - lo; + assert(is_power_of_2(ct), "power of 2"); + if (ct == 2) { + PackNode* pk = PackNode::make(C, in(lo), 2, vect_type()->element_basic_type()); + pk->add_opd(1, in(lo+1)); + return pk; + + } else { + int mid = lo + ct/2; + Node* n1 = binaryTreePack(C, lo, mid); + Node* n2 = binaryTreePack(C, mid, hi ); + + BasicType bt = vect_type()->element_basic_type(); + switch (bt) { + case T_BOOLEAN: + case T_BYTE: + return new (C, 3) PackSNode(n1, n2, TypeVect::make(T_SHORT, 2)); + case T_CHAR: + case T_SHORT: + return new (C, 3) PackINode(n1, n2, TypeVect::make(T_INT, 2)); + case T_INT: + return new (C, 3) PackLNode(n1, n2, TypeVect::make(T_LONG, 2)); + case T_LONG: + return new (C, 3) Pack2LNode(n1, n2, TypeVect::make(T_LONG, 2)); + case T_FLOAT: + return new (C, 3) PackDNode(n1, n2, TypeVect::make(T_DOUBLE, 2)); + case T_DOUBLE: + return new (C, 3) Pack2DNode(n1, n2, TypeVect::make(T_DOUBLE, 2)); + } + ShouldNotReachHere(); + } + return NULL; } // Return the vector version of a scalar load node. -VectorLoadNode* VectorLoadNode::make(Compile* C, int opc, Node* ctl, Node* mem, - Node* adr, const TypePtr* atyp, uint vlen) { - int vopc = opcode(opc, vlen); - - switch(vopc) { - case Op_Load16B: return new (C, 3) Load16BNode(ctl, mem, adr, atyp); - case Op_Load8B: return new (C, 3) Load8BNode(ctl, mem, adr, atyp); - case Op_Load4B: return new (C, 3) Load4BNode(ctl, mem, adr, atyp); - - case Op_Load8C: return new (C, 3) Load8CNode(ctl, mem, adr, atyp); - case Op_Load4C: return new (C, 3) Load4CNode(ctl, mem, adr, atyp); - case Op_Load2C: return new (C, 3) Load2CNode(ctl, mem, adr, atyp); - - case Op_Load8S: return new (C, 3) Load8SNode(ctl, mem, adr, atyp); - case Op_Load4S: return new (C, 3) Load4SNode(ctl, mem, adr, atyp); - case Op_Load2S: return new (C, 3) Load2SNode(ctl, mem, adr, atyp); - - case Op_Load4I: return new (C, 3) Load4INode(ctl, mem, adr, atyp); - case Op_Load2I: return new (C, 3) Load2INode(ctl, mem, adr, atyp); - - case Op_Load2L: return new (C, 3) Load2LNode(ctl, mem, adr, atyp); - - case Op_Load4F: return new (C, 3) Load4FNode(ctl, mem, adr, atyp); - case Op_Load2F: return new (C, 3) Load2FNode(ctl, mem, adr, atyp); - - case Op_Load2D: return new (C, 3) Load2DNode(ctl, mem, adr, atyp); - } - ShouldNotReachHere(); +LoadVectorNode* LoadVectorNode::make(Compile* C, int opc, Node* ctl, Node* mem, + Node* adr, const TypePtr* atyp, uint vlen, BasicType bt) { + const TypeVect* vt = TypeVect::make(bt, vlen); + return new (C, 3) LoadVectorNode(ctl, mem, adr, atyp, vt); return NULL; } // Return the vector version of a scalar store node. -VectorStoreNode* VectorStoreNode::make(Compile* C, int opc, Node* ctl, Node* mem, +StoreVectorNode* StoreVectorNode::make(Compile* C, int opc, Node* ctl, Node* mem, Node* adr, const TypePtr* atyp, Node* val, uint vlen) { - int vopc = opcode(opc, vlen); - - switch(vopc) { - case Op_Store16B: return new (C, 4) Store16BNode(ctl, mem, adr, atyp, val); - case Op_Store8B: return new (C, 4) Store8BNode(ctl, mem, adr, atyp, val); - case Op_Store4B: return new (C, 4) Store4BNode(ctl, mem, adr, atyp, val); - - case Op_Store8C: return new (C, 4) Store8CNode(ctl, mem, adr, atyp, val); - case Op_Store4C: return new (C, 4) Store4CNode(ctl, mem, adr, atyp, val); - case Op_Store2C: return new (C, 4) Store2CNode(ctl, mem, adr, atyp, val); - - case Op_Store4I: return new (C, 4) Store4INode(ctl, mem, adr, atyp, val); - case Op_Store2I: return new (C, 4) Store2INode(ctl, mem, adr, atyp, val); - - case Op_Store2L: return new (C, 4) Store2LNode(ctl, mem, adr, atyp, val); - - case Op_Store4F: return new (C, 4) Store4FNode(ctl, mem, adr, atyp, val); - case Op_Store2F: return new (C, 4) Store2FNode(ctl, mem, adr, atyp, val); - - case Op_Store2D: return new (C, 4) Store2DNode(ctl, mem, adr, atyp, val); - } - ShouldNotReachHere(); - return NULL; + return new (C, 4) StoreVectorNode(ctl, mem, adr, atyp, val); } // Extract a scalar element of vector. -Node* ExtractNode::make(Compile* C, Node* v, uint position, const Type* opd_t) { - BasicType bt = opd_t->array_element_basic_type(); - assert(position < VectorNode::max_vlen(bt), "pos in range"); +Node* ExtractNode::make(Compile* C, Node* v, uint position, BasicType bt) { + assert((int)position < Matcher::max_vector_size(bt), "pos in range"); ConINode* pos = ConINode::make(C, (int)position); switch (bt) { case T_BOOLEAN: + return new (C, 3) ExtractUBNode(v, pos); case T_BYTE: return new (C, 3) ExtractBNode(v, pos); case T_CHAR: @@ -478,3 +307,4 @@ Node* ExtractNode::make(Compile* C, Node* v, uint position, const Type* opd_t) { ShouldNotReachHere(); return NULL; } + diff --git a/hotspot/src/share/vm/opto/vectornode.hpp b/hotspot/src/share/vm/opto/vectornode.hpp index 7d1905c7fb5..602ee94c54c 100644 --- a/hotspot/src/share/vm/opto/vectornode.hpp +++ b/hotspot/src/share/vm/opto/vectornode.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,48 +31,32 @@ //------------------------------VectorNode-------------------------------------- // Vector Operation -class VectorNode : public Node { - virtual uint size_of() const { return sizeof(*this); } - protected: - uint _length; // vector length - virtual BasicType elt_basic_type() const = 0; // Vector element basic type - - static const Type* vect_type(BasicType elt_bt, uint len); - static const Type* vect_type(const Type* elt_type, uint len) { - return vect_type(elt_type->array_element_basic_type(), len); - } - +class VectorNode : public TypeNode { public: - friend class VectorLoadNode; // For vect_type - friend class VectorStoreNode; // ditto. - VectorNode(Node* n1, uint vlen) : Node(NULL, n1), _length(vlen) { + VectorNode(Node* n1, const TypeVect* vt) : TypeNode(vt, 2) { init_class_id(Class_Vector); + init_req(1, n1); } - VectorNode(Node* n1, Node* n2, uint vlen) : Node(NULL, n1, n2), _length(vlen) { + VectorNode(Node* n1, Node* n2, const TypeVect* vt) : TypeNode(vt, 3) { init_class_id(Class_Vector); + init_req(1, n1); + init_req(2, n2); } + + const TypeVect* vect_type() const { return type()->is_vect(); } + uint length() const { return vect_type()->length(); } // Vector length + virtual int Opcode() const; - uint length() const { return _length; } // Vector length - - static uint max_vlen(BasicType bt) { // max vector length - return (uint)(Matcher::vector_width_in_bytes() / type2aelembytes(bt)); - } - - // Element and vector type - const Type* elt_type() const { return Type::get_const_basic_type(elt_basic_type()); } - const Type* vect_type() const { return vect_type(elt_basic_type(), length()); } - - virtual const Type *bottom_type() const { return vect_type(); } - virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(); } - - // Vector opcode from scalar opcode - static int opcode(int sopc, uint vlen, const Type* opd_t); + virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(vect_type()->length_in_bytes()); } static VectorNode* scalar2vector(Compile* C, Node* s, uint vlen, const Type* opd_t); - static VectorNode* make(Compile* C, int sopc, Node* n1, Node* n2, uint vlen, const Type* elt_t); + static VectorNode* make(Compile* C, int opc, Node* n1, Node* n2, uint vlen, BasicType bt); + + static int opcode(int opc, uint vlen, BasicType bt); + static bool implemented(int opc, uint vlen, BasicType bt); }; @@ -81,981 +65,393 @@ class VectorNode : public Node { //------------------------------AddVBNode--------------------------------------- // Vector add byte class AddVBNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } public: - AddVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} - virtual int Opcode() const; -}; - -//------------------------------AddVCNode--------------------------------------- -// Vector add char -class AddVCNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - AddVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVSNode--------------------------------------- -// Vector add short +// Vector add char/short class AddVSNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } public: - AddVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVINode--------------------------------------- // Vector add int class AddVINode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } public: - AddVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVLNode--------------------------------------- // Vector add long class AddVLNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } public: - AddVLNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVFNode--------------------------------------- // Vector add float class AddVFNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - AddVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AddVDNode--------------------------------------- // Vector add double class AddVDNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - AddVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + AddVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVBNode--------------------------------------- // Vector subtract byte class SubVBNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } public: - SubVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} - virtual int Opcode() const; -}; - -//------------------------------SubVCNode--------------------------------------- -// Vector subtract char -class SubVCNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - SubVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVSNode--------------------------------------- // Vector subtract short class SubVSNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } public: - SubVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVINode--------------------------------------- // Vector subtract int class SubVINode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } public: - SubVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVLNode--------------------------------------- // Vector subtract long class SubVLNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } public: - SubVLNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVLNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVFNode--------------------------------------- // Vector subtract float class SubVFNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - SubVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------SubVDNode--------------------------------------- // Vector subtract double class SubVDNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - SubVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + SubVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------MulVFNode--------------------------------------- // Vector multiply float class MulVFNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - MulVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + MulVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------MulVDNode--------------------------------------- // Vector multiply double class MulVDNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - MulVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + MulVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------DivVFNode--------------------------------------- // Vector divide float class DivVFNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - DivVFNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + DivVFNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------DivVDNode--------------------------------------- // Vector Divide double class DivVDNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - DivVDNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + DivVDNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------LShiftVBNode--------------------------------------- // Vector lshift byte class LShiftVBNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } public: - LShiftVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} - virtual int Opcode() const; -}; - -//------------------------------LShiftVCNode--------------------------------------- -// Vector lshift chars -class LShiftVCNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - LShiftVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + LShiftVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------LShiftVSNode--------------------------------------- // Vector lshift shorts class LShiftVSNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } public: - LShiftVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + LShiftVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------LShiftVINode--------------------------------------- // Vector lshift ints class LShiftVINode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } public: - LShiftVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + LShiftVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------URShiftVBNode--------------------------------------- // Vector urshift bytes -class URShiftVBNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +class RShiftVBNode : public VectorNode { public: - URShiftVBNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} - virtual int Opcode() const; -}; - -//------------------------------URShiftVCNode--------------------------------------- -// Vector urshift char -class URShiftVCNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - URShiftVCNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + RShiftVBNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------URShiftVSNode--------------------------------------- // Vector urshift shorts -class URShiftVSNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } +class RShiftVSNode : public VectorNode { public: - URShiftVSNode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + RShiftVSNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------URShiftVINode--------------------------------------- // Vector urshift ints -class URShiftVINode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } +class RShiftVINode : public VectorNode { public: - URShiftVINode(Node* in1, Node* in2, uint vlen) : VectorNode(in1,in2,vlen) {} + RShiftVINode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------AndVNode--------------------------------------- // Vector and class AndVNode : public VectorNode { - protected: - BasicType _bt; - virtual BasicType elt_basic_type() const { return _bt; } public: - AndVNode(Node* in1, Node* in2, uint vlen, BasicType bt) : VectorNode(in1,in2,vlen), _bt(bt) {} + AndVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------OrVNode--------------------------------------- // Vector or class OrVNode : public VectorNode { - protected: - BasicType _bt; - virtual BasicType elt_basic_type() const { return _bt; } public: - OrVNode(Node* in1, Node* in2, uint vlen, BasicType bt) : VectorNode(in1,in2,vlen), _bt(bt) {} + OrVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; //------------------------------XorVNode--------------------------------------- // Vector xor class XorVNode : public VectorNode { - protected: - BasicType _bt; - virtual BasicType elt_basic_type() const { return _bt; } public: - XorVNode(Node* in1, Node* in2, uint vlen, BasicType bt) : VectorNode(in1,in2,vlen), _bt(bt) {} + XorVNode(Node* in1, Node* in2, const TypeVect* vt) : VectorNode(in1,in2,vt) {} virtual int Opcode() const; }; -//================================= M E M O R Y ================================== - - -//------------------------------VectorLoadNode-------------------------------------- -// Vector Load from memory -class VectorLoadNode : public LoadNode { - virtual uint size_of() const { return sizeof(*this); } - - protected: - virtual BasicType elt_basic_type() const = 0; // Vector element basic type - // For use in constructor - static const Type* vect_type(const Type* elt_type, uint len) { - return VectorNode::vect_type(elt_type, len); - } +//================================= M E M O R Y =============================== +//------------------------------LoadVectorNode--------------------------------- +// Load Vector from memory +class LoadVectorNode : public LoadNode { public: - VectorLoadNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *rt) - : LoadNode(c,mem,adr,at,rt) { - init_class_id(Class_VectorLoad); + LoadVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt) + : LoadNode(c, mem, adr, at, vt) { + init_class_id(Class_LoadVector); } + + const TypeVect* vect_type() const { return type()->is_vect(); } + uint length() const { return vect_type()->length(); } // Vector length + virtual int Opcode() const; - virtual uint length() const = 0; // Vector length - - // Element and vector type - const Type* elt_type() const { return Type::get_const_basic_type(elt_basic_type()); } - const Type* vect_type() const { return VectorNode::vect_type(elt_basic_type(), length()); } - - virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(); } + virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(memory_size()); } virtual BasicType memory_type() const { return T_VOID; } - virtual int memory_size() const { return length()*type2aelembytes(elt_basic_type()); } + virtual int memory_size() const { return vect_type()->length_in_bytes(); } - // Vector opcode from scalar opcode - static int opcode(int sopc, uint vlen); + virtual int store_Opcode() const { return Op_StoreVector; } - static VectorLoadNode* make(Compile* C, int opc, Node* ctl, Node* mem, - Node* adr, const TypePtr* atyp, uint vlen); + static LoadVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem, + Node* adr, const TypePtr* atyp, uint vlen, BasicType bt); }; -//------------------------------Load16BNode-------------------------------------- -// Vector load of 16 bytes (8bits signed) from memory -class Load16BNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------StoreVectorNode-------------------------------- +// Store Vector to memory +class StoreVectorNode : public StoreNode { public: - Load16BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::BYTE) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,16)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store16B; } - virtual uint length() const { return 16; } -}; - -//------------------------------Load8BNode-------------------------------------- -// Vector load of 8 bytes (8bits signed) from memory -class Load8BNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Load8BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::BYTE) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,8)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store8B; } - virtual uint length() const { return 8; } -}; - -//------------------------------Load4BNode-------------------------------------- -// Vector load of 4 bytes (8bits signed) from memory -class Load4BNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Load4BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::BYTE) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4B; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load8CNode-------------------------------------- -// Vector load of 8 chars (16bits unsigned) from memory -class Load8CNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Load8CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::CHAR) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,8)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store8C; } - virtual uint length() const { return 8; } -}; - -//------------------------------Load4CNode-------------------------------------- -// Vector load of 4 chars (16bits unsigned) from memory -class Load4CNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Load4CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::CHAR) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4C; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load2CNode-------------------------------------- -// Vector load of 2 chars (16bits unsigned) from memory -class Load2CNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Load2CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::CHAR) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2C; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load8SNode-------------------------------------- -// Vector load of 8 shorts (16bits signed) from memory -class Load8SNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Load8SNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::SHORT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,8)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store8C; } - virtual uint length() const { return 8; } -}; - -//------------------------------Load4SNode-------------------------------------- -// Vector load of 4 shorts (16bits signed) from memory -class Load4SNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Load4SNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::SHORT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4C; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load2SNode-------------------------------------- -// Vector load of 2 shorts (16bits signed) from memory -class Load2SNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Load2SNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::SHORT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2C; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load4INode-------------------------------------- -// Vector load of 4 integers (32bits signed) from memory -class Load4INode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Load4INode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::INT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4I; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load2INode-------------------------------------- -// Vector load of 2 integers (32bits signed) from memory -class Load2INode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Load2INode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeInt *ti = TypeInt::INT) - : VectorLoadNode(c,mem,adr,at,vect_type(ti,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2I; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load2LNode-------------------------------------- -// Vector load of 2 longs (64bits signed) from memory -class Load2LNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } - public: - Load2LNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeLong *tl = TypeLong::LONG) - : VectorLoadNode(c,mem,adr,at,vect_type(tl,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2L; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load4FNode-------------------------------------- -// Vector load of 4 floats (32bits) from memory -class Load4FNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Load4FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *t = Type::FLOAT) - : VectorLoadNode(c,mem,adr,at,vect_type(t,4)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store4F; } - virtual uint length() const { return 4; } -}; - -//------------------------------Load2FNode-------------------------------------- -// Vector load of 2 floats (32bits) from memory -class Load2FNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Load2FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *t = Type::FLOAT) - : VectorLoadNode(c,mem,adr,at,vect_type(t,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2F; } - virtual uint length() const { return 2; } -}; - -//------------------------------Load2DNode-------------------------------------- -// Vector load of 2 doubles (64bits) from memory -class Load2DNode : public VectorLoadNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } - public: - Load2DNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const Type *t = Type::DOUBLE) - : VectorLoadNode(c,mem,adr,at,vect_type(t,2)) {} - virtual int Opcode() const; - virtual int store_Opcode() const { return Op_Store2D; } - virtual uint length() const { return 2; } -}; - - -//------------------------------VectorStoreNode-------------------------------------- -// Vector Store to memory -class VectorStoreNode : public StoreNode { - virtual uint size_of() const { return sizeof(*this); } - - protected: - virtual BasicType elt_basic_type() const = 0; // Vector element basic type - - public: - VectorStoreNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : StoreNode(c,mem,adr,at,val) { - init_class_id(Class_VectorStore); + StoreVectorNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) + : StoreNode(c, mem, adr, at, val) { + assert(val->is_Vector() || val->is_LoadVector(), "sanity"); + init_class_id(Class_StoreVector); } + + const TypeVect* vect_type() const { return in(MemNode::ValueIn)->bottom_type()->is_vect(); } + uint length() const { return vect_type()->length(); } // Vector length + virtual int Opcode() const; - virtual uint length() const = 0; // Vector length - - // Element and vector type - const Type* elt_type() const { return Type::get_const_basic_type(elt_basic_type()); } - const Type* vect_type() const { return VectorNode::vect_type(elt_basic_type(), length()); } - - virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(); } + virtual uint ideal_reg() const { return Matcher::vector_ideal_reg(memory_size()); } virtual BasicType memory_type() const { return T_VOID; } - virtual int memory_size() const { return length()*type2aelembytes(elt_basic_type()); } + virtual int memory_size() const { return vect_type()->length_in_bytes(); } - // Vector opcode from scalar opcode - static int opcode(int sopc, uint vlen); - - static VectorStoreNode* make(Compile* C, int opc, Node* ctl, Node* mem, + static StoreVectorNode* make(Compile* C, int opc, Node* ctl, Node* mem, Node* adr, const TypePtr* atyp, Node* val, uint vlen); }; -//------------------------------Store16BNode-------------------------------------- -// Vector store of 16 bytes (8bits signed) to memory -class Store16BNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Store16BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 16; } -}; -//------------------------------Store8BNode-------------------------------------- -// Vector store of 8 bytes (8bits signed) to memory -class Store8BNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Store8BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 8; } -}; +//=========================Promote_Scalar_to_Vector============================ -//------------------------------Store4BNode-------------------------------------- -// Vector store of 4 bytes (8bits signed) to memory -class Store4BNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------ReplicateBNode--------------------------------- +// Replicate byte scalar to be vector +class ReplicateBNode : public VectorNode { public: - Store4BNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 4; } -}; - -//------------------------------Store8CNode-------------------------------------- -// Vector store of 8 chars (16bits signed/unsigned) to memory -class Store8CNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Store8CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 8; } -}; - -//------------------------------Store4CNode-------------------------------------- -// Vector store of 4 chars (16bits signed/unsigned) to memory -class Store4CNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Store4CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 4; } -}; - -//------------------------------Store2CNode-------------------------------------- -// Vector store of 2 chars (16bits signed/unsigned) to memory -class Store2CNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Store2CNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//------------------------------Store4INode-------------------------------------- -// Vector store of 4 integers (32bits signed) to memory -class Store4INode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Store4INode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 4; } -}; - -//------------------------------Store2INode-------------------------------------- -// Vector store of 2 integers (32bits signed) to memory -class Store2INode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Store2INode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//------------------------------Store2LNode-------------------------------------- -// Vector store of 2 longs (64bits signed) to memory -class Store2LNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } - public: - Store2LNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//------------------------------Store4FNode-------------------------------------- -// Vector store of 4 floats (32bits) to memory -class Store4FNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Store4FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 4; } -}; - -//------------------------------Store2FNode-------------------------------------- -// Vector store of 2 floats (32bits) to memory -class Store2FNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Store2FNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//------------------------------Store2DNode-------------------------------------- -// Vector store of 2 doubles (64bits) to memory -class Store2DNode : public VectorStoreNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } - public: - Store2DNode(Node* c, Node* mem, Node* adr, const TypePtr* at, Node* val) - : VectorStoreNode(c,mem,adr,at,val) {} - virtual int Opcode() const; - virtual uint length() const { return 2; } -}; - -//=========================Promote_Scalar_to_Vector==================================== - -//------------------------------Replicate16BNode--------------------------------------- -// Replicate byte scalar to be vector of 16 bytes -class Replicate16BNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } - public: - Replicate16BNode(Node* in1) : VectorNode(in1, 16) {} + ReplicateBNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate8BNode--------------------------------------- -// Replicate byte scalar to be vector of 8 bytes -class Replicate8BNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------ReplicateSNode--------------------------------- +// Replicate short scalar to be vector +class ReplicateSNode : public VectorNode { public: - Replicate8BNode(Node* in1) : VectorNode(in1, 8) {} + ReplicateSNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate4BNode--------------------------------------- -// Replicate byte scalar to be vector of 4 bytes -class Replicate4BNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------ReplicateINode--------------------------------- +// Replicate int scalar to be vector +class ReplicateINode : public VectorNode { public: - Replicate4BNode(Node* in1) : VectorNode(in1, 4) {} + ReplicateINode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate8CNode--------------------------------------- -// Replicate char scalar to be vector of 8 chars -class Replicate8CNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } +//------------------------------ReplicateLNode--------------------------------- +// Replicate long scalar to be vector +class ReplicateLNode : public VectorNode { public: - Replicate8CNode(Node* in1) : VectorNode(in1, 8) {} + ReplicateLNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate4CNode--------------------------------------- -// Replicate char scalar to be vector of 4 chars -class Replicate4CNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } +//------------------------------ReplicateFNode--------------------------------- +// Replicate float scalar to be vector +class ReplicateFNode : public VectorNode { public: - Replicate4CNode(Node* in1) : VectorNode(in1, 4) {} + ReplicateFNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate2CNode--------------------------------------- -// Replicate char scalar to be vector of 2 chars -class Replicate2CNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } +//------------------------------ReplicateDNode--------------------------------- +// Replicate double scalar to be vector +class ReplicateDNode : public VectorNode { public: - Replicate2CNode(Node* in1) : VectorNode(in1, 2) {} + ReplicateDNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} virtual int Opcode() const; }; -//------------------------------Replicate8SNode--------------------------------------- -// Replicate short scalar to be vector of 8 shorts -class Replicate8SNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Replicate8SNode(Node* in1) : VectorNode(in1, 8) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate4SNode--------------------------------------- -// Replicate short scalar to be vector of 4 shorts -class Replicate4SNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Replicate4SNode(Node* in1) : VectorNode(in1, 4) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2SNode--------------------------------------- -// Replicate short scalar to be vector of 2 shorts -class Replicate2SNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } - public: - Replicate2SNode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate4INode--------------------------------------- -// Replicate int scalar to be vector of 4 ints -class Replicate4INode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Replicate4INode(Node* in1) : VectorNode(in1, 4) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2INode--------------------------------------- -// Replicate int scalar to be vector of 2 ints -class Replicate2INode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } - public: - Replicate2INode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2LNode--------------------------------------- -// Replicate long scalar to be vector of 2 longs -class Replicate2LNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } - public: - Replicate2LNode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate4FNode--------------------------------------- -// Replicate float scalar to be vector of 4 floats -class Replicate4FNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Replicate4FNode(Node* in1) : VectorNode(in1, 4) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2FNode--------------------------------------- -// Replicate float scalar to be vector of 2 floats -class Replicate2FNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } - public: - Replicate2FNode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//------------------------------Replicate2DNode--------------------------------------- -// Replicate double scalar to be vector of 2 doubles -class Replicate2DNode : public VectorNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } - public: - Replicate2DNode(Node* in1) : VectorNode(in1, 2) {} - virtual int Opcode() const; -}; - -//========================Pack_Scalars_into_a_Vector============================== +//========================Pack_Scalars_into_a_Vector=========================== //------------------------------PackNode--------------------------------------- // Pack parent class (not for code generation). class PackNode : public VectorNode { public: - PackNode(Node* in1) : VectorNode(in1, 1) {} - PackNode(Node* in1, Node* n2) : VectorNode(in1, n2, 2) {} + PackNode(Node* in1, const TypeVect* vt) : VectorNode(in1, vt) {} + PackNode(Node* in1, Node* n2, const TypeVect* vt) : VectorNode(in1, n2, vt) {} virtual int Opcode() const; - void add_opd(Node* n) { - add_req(n); - _length++; - assert(_length == req() - 1, "vector length matches edge count"); + void add_opd(uint i, Node* n) { + init_req(i+1, n); } // Create a binary tree form for Packs. [lo, hi) (half-open) range Node* binaryTreePack(Compile* C, int lo, int hi); - static PackNode* make(Compile* C, Node* s, const Type* elt_t); + static PackNode* make(Compile* C, Node* s, uint vlen, BasicType bt); }; //------------------------------PackBNode--------------------------------------- // Pack byte scalars into vector class PackBNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } public: - PackBNode(Node* in1) : PackNode(in1) {} - virtual int Opcode() const; -}; - -//------------------------------PackCNode--------------------------------------- -// Pack char scalars into vector -class PackCNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - PackCNode(Node* in1) : PackNode(in1) {} + PackBNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} virtual int Opcode() const; }; //------------------------------PackSNode--------------------------------------- // Pack short scalars into a vector class PackSNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_SHORT; } public: - PackSNode(Node* in1) : PackNode(in1) {} + PackSNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackSNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; //------------------------------PackINode--------------------------------------- // Pack integer scalars into a vector class PackINode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_INT; } public: - PackINode(Node* in1) : PackNode(in1) {} - PackINode(Node* in1, Node* in2) : PackNode(in1, in2) {} + PackINode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackINode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; //------------------------------PackLNode--------------------------------------- // Pack long scalars into a vector class PackLNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_LONG; } public: - PackLNode(Node* in1) : PackNode(in1) {} - PackLNode(Node* in1, Node* in2) : PackNode(in1, in2) {} + PackLNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackLNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} + virtual int Opcode() const; +}; + +//------------------------------Pack2LNode-------------------------------------- +// Pack 2 long scalars into a vector +class Pack2LNode : public PackNode { + public: + Pack2LNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; //------------------------------PackFNode--------------------------------------- // Pack float scalars into vector class PackFNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_FLOAT; } public: - PackFNode(Node* in1) : PackNode(in1) {} - PackFNode(Node* in1, Node* in2) : PackNode(in1, in2) {} + PackFNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackFNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; //------------------------------PackDNode--------------------------------------- // Pack double scalars into a vector class PackDNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_DOUBLE; } public: - PackDNode(Node* in1) : PackNode(in1) {} - PackDNode(Node* in1, Node* in2) : PackNode(in1, in2) {} + PackDNode(Node* in1, const TypeVect* vt) : PackNode(in1, vt) {} + PackDNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; }; -// The Pack2xN nodes assist code generation. They are created from -// Pack4C, etc. nodes in final_graph_reshape in the form of a -// balanced, binary tree. - -//------------------------------Pack2x1BNode----------------------------------------- -// Pack 2 1-byte integers into vector of 2 bytes -class Pack2x1BNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_BYTE; } +//------------------------------Pack2DNode-------------------------------------- +// Pack 2 double scalars into a vector +class Pack2DNode : public PackNode { public: - Pack2x1BNode(Node *in1, Node* in2) : PackNode(in1, in2) {} + Pack2DNode(Node* in1, Node* in2, const TypeVect* vt) : PackNode(in1, in2, vt) {} virtual int Opcode() const; - virtual uint ideal_reg() const { return Op_RegI; } }; -//------------------------------Pack2x2BNode--------------------------------------- -// Pack 2 2-byte integers into vector of 4 bytes -class Pack2x2BNode : public PackNode { - protected: - virtual BasicType elt_basic_type() const { return T_CHAR; } - public: - Pack2x2BNode(Node *in1, Node* in2) : PackNode(in1, in2) {} - virtual int Opcode() const; - virtual uint ideal_reg() const { return Op_RegI; } -}; //========================Extract_Scalar_from_Vector=============================== @@ -1069,7 +465,7 @@ class ExtractNode : public Node { virtual int Opcode() const; uint pos() const { return in(2)->get_int(); } - static Node* make(Compile* C, Node* v, uint position, const Type* opd_t); + static Node* make(Compile* C, Node* v, uint position, BasicType bt); }; //------------------------------ExtractBNode--------------------------------------- @@ -1082,6 +478,16 @@ class ExtractBNode : public ExtractNode { virtual uint ideal_reg() const { return Op_RegI; } }; +//------------------------------ExtractUBNode-------------------------------------- +// Extract a boolean from a vector at position "pos" +class ExtractUBNode : public ExtractNode { + public: + ExtractUBNode(Node* src, ConINode* pos) : ExtractNode(src, pos) {} + virtual int Opcode() const; + virtual const Type *bottom_type() const { return TypeInt::INT; } + virtual uint ideal_reg() const { return Op_RegI; } +}; + //------------------------------ExtractCNode--------------------------------------- // Extract a char from a vector at position "pos" class ExtractCNode : public ExtractNode { diff --git a/hotspot/src/share/vm/prims/jni.cpp b/hotspot/src/share/vm/prims/jni.cpp index b37f44a9120..cf032489568 100644 --- a/hotspot/src/share/vm/prims/jni.cpp +++ b/hotspot/src/share/vm/prims/jni.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" #include "classfile/classLoader.hpp" #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" @@ -32,6 +33,7 @@ #ifndef SERIALGC #include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" #endif // SERIALGC +#include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" #include "memory/gcLocker.inline.hpp" #include "memory/oopFactory.hpp" @@ -3269,7 +3271,7 @@ JNI_QUICK_ENTRY(const jchar*, jni_GetStringChars( int s_len = java_lang_String::length(s); typeArrayOop s_value = java_lang_String::value(s); int s_offset = java_lang_String::offset(s); - jchar* buf = NEW_C_HEAP_ARRAY(jchar, s_len + 1); // add one for zero termination + jchar* buf = NEW_C_HEAP_ARRAY(jchar, s_len + 1, mtInternal); // add one for zero termination if (s_len > 0) { memcpy(buf, s_value->char_at_addr(s_offset), sizeof(jchar)*s_len); } @@ -3362,7 +3364,7 @@ JNI_ENTRY(const char*, jni_GetStringUTFChars(JNIEnv *env, jstring string, jboole #endif /* USDT2 */ oop java_string = JNIHandles::resolve_non_null(string); size_t length = java_lang_String::utf8_length(java_string); - char* result = AllocateHeap(length + 1, "GetStringUTFChars"); + char* result = AllocateHeap(length + 1, mtInternal); java_lang_String::as_utf8_string(java_string, result, (int) length + 1); if (isCopy != NULL) *isCopy = JNI_TRUE; #ifndef USDT2 @@ -3618,7 +3620,7 @@ JNI_QUICK_ENTRY(ElementType*, \ * Avoid asserts in typeArrayOop. */ \ result = (ElementType*)get_bad_address(); \ } else { \ - result = NEW_C_HEAP_ARRAY(ElementType, len); \ + result = NEW_C_HEAP_ARRAY(ElementType, len, mtInternal); \ /* copy the array to the c chunk */ \ memcpy(result, a->Tag##_at_addr(0), sizeof(ElementType)*len); \ } \ @@ -3655,7 +3657,7 @@ JNI_QUICK_ENTRY(ElementType*, \ * Avoid asserts in typeArrayOop. */ \ result = (ElementType*)get_bad_address(); \ } else { \ - result = NEW_C_HEAP_ARRAY(ElementType, len); \ + result = NEW_C_HEAP_ARRAY(ElementType, len, mtInternal); \ /* copy the array to the c chunk */ \ memcpy(result, a->Tag##_at_addr(0), sizeof(ElementType)*len); \ } \ @@ -5053,6 +5055,7 @@ void execute_internal_vm_tests() { run_unit_test(arrayOopDesc::test_max_array_length()); run_unit_test(CollectedHeap::test_is_in()); run_unit_test(QuickSort::test_quick_sort()); + run_unit_test(AltHashing::test_alt_hash()); tty->print_cr("All internal VM tests passed"); } } diff --git a/hotspot/src/share/vm/prims/jniCheck.cpp b/hotspot/src/share/vm/prims/jniCheck.cpp index 3bf4ecd1a7f..7e30b58828f 100644 --- a/hotspot/src/share/vm/prims/jniCheck.cpp +++ b/hotspot/src/share/vm/prims/jniCheck.cpp @@ -1308,7 +1308,7 @@ JNI_ENTRY_CHECKED(const jchar *, assert (isCopy == NULL || *isCopy == JNI_TRUE, "GetStringChars didn't return a copy as expected"); size_t len = UNCHECKED()->GetStringLength(env,str) + 1; // + 1 for NULL termination - jint* tagLocation = (jint*) AllocateHeap(len * sizeof(jchar) + sizeof(jint), "checked_jni_GetStringChars"); + jint* tagLocation = (jint*) AllocateHeap(len * sizeof(jchar) + sizeof(jint), mtInternal); *tagLocation = STRING_TAG; jchar* newResult = (jchar*) (tagLocation + 1); memcpy(newResult, result, len * sizeof(jchar)); @@ -1378,13 +1378,13 @@ JNI_ENTRY_CHECKED(const char *, assert (isCopy == NULL || *isCopy == JNI_TRUE, "GetStringUTFChars didn't return a copy as expected"); size_t len = strlen(result) + 1; // + 1 for NULL termination - jint* tagLocation = (jint*) AllocateHeap(len + sizeof(jint), "checked_jni_GetStringUTFChars"); + jint* tagLocation = (jint*) AllocateHeap(len + sizeof(jint), mtInternal); *tagLocation = STRING_UTF_TAG; char* newResult = (char*) (tagLocation + 1); strcpy(newResult, result); // Avoiding call to UNCHECKED()->ReleaseStringUTFChars() since that will fire unexpected dtrace probes // Note that the dtrace arguments for the allocated memory will not match up with this solution. - FreeHeap((char*)result); + FreeHeap((char*)result, mtInternal); functionExit(env); return newResult; diff --git a/hotspot/src/share/vm/prims/jvm.cpp b/hotspot/src/share/vm/prims/jvm.cpp index 3f097819e3d..a211004a3d4 100644 --- a/hotspot/src/share/vm/prims/jvm.cpp +++ b/hotspot/src/share/vm/prims/jvm.cpp @@ -35,6 +35,7 @@ #include "oops/fieldStreams.hpp" #include "oops/instanceKlass.hpp" #include "oops/objArrayKlass.hpp" +#include "oops/methodOop.hpp" #include "prims/jvm.h" #include "prims/jvm_misc.hpp" #include "prims/jvmtiExport.hpp" @@ -345,9 +346,13 @@ JVM_ENTRY(jobject, JVM_InitProperties(JNIEnv *env, jobject properties)) // Do this after setting user properties to prevent people // from setting the value with a -D option, as requested. { - char as_chars[256]; - jio_snprintf(as_chars, sizeof(as_chars), INTX_FORMAT, MaxDirectMemorySize); - PUTPROP(props, "sun.nio.MaxDirectMemorySize", as_chars); + if (FLAG_IS_DEFAULT(MaxDirectMemorySize)) { + PUTPROP(props, "sun.nio.MaxDirectMemorySize", "-1"); + } else { + char as_chars[256]; + jio_snprintf(as_chars, sizeof(as_chars), UINTX_FORMAT, MaxDirectMemorySize); + PUTPROP(props, "sun.nio.MaxDirectMemorySize", as_chars); + } } // JVM monitoring and management support @@ -2179,11 +2184,11 @@ JVM_QUICK_ENTRY(void, JVM_GetMethodIxExceptionTableEntry(JNIEnv *env, jclass cls klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - typeArrayOop extable = methodOop(method)->exception_table(); - entry->start_pc = extable->int_at(entry_index * 4); - entry->end_pc = extable->int_at(entry_index * 4 + 1); - entry->handler_pc = extable->int_at(entry_index * 4 + 2); - entry->catchType = extable->int_at(entry_index * 4 + 3); + ExceptionTable extable((methodOop(method))); + entry->start_pc = extable.start_pc(entry_index); + entry->end_pc = extable.end_pc(entry_index); + entry->handler_pc = extable.handler_pc(entry_index); + entry->catchType = extable.catch_type_index(entry_index); JVM_END @@ -2192,7 +2197,7 @@ JVM_QUICK_ENTRY(jint, JVM_GetMethodIxExceptionTableLength(JNIEnv *env, jclass cl klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - return methodOop(method)->exception_table()->length() / 4; + return methodOop(method)->exception_table_length(); JVM_END diff --git a/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp b/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp index d7dfea5a99e..82655695571 100644 --- a/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp +++ b/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp @@ -191,15 +191,14 @@ void JvmtiClassFileReconstituter::write_code_attribute(methodHandle method) { } } - typeArrayHandle exception_table(thread(), const_method->exception_table()); - int exception_table_length = exception_table->length(); - int exception_table_entries = exception_table_length / 4; + ExceptionTable exception_table(method()); + int exception_table_length = exception_table.length(); int code_size = const_method->code_size(); int size = 2+2+4 + // max_stack, max_locals, code_length code_size + // code 2 + // exception_table_length - (2+2+2+2) * exception_table_entries + // exception_table + (2+2+2+2) * exception_table_length + // exception_table 2 + // attributes_count attr_size; // attributes @@ -209,12 +208,12 @@ void JvmtiClassFileReconstituter::write_code_attribute(methodHandle method) { write_u2(method->max_locals()); write_u4(code_size); copy_bytecodes(method, (unsigned char*)writeable_address(code_size)); - write_u2(exception_table_entries); - for (int index = 0; index < exception_table_length; ) { - write_u2(exception_table->int_at(index++)); - write_u2(exception_table->int_at(index++)); - write_u2(exception_table->int_at(index++)); - write_u2(exception_table->int_at(index++)); + write_u2(exception_table_length); + for (int index = 0; index < exception_table_length; index++) { + write_u2(exception_table.start_pc(index)); + write_u2(exception_table.end_pc(index)); + write_u2(exception_table.handler_pc(index)); + write_u2(exception_table.catch_type_index(index)); } write_u2(attr_count); if (line_num_cnt != 0) { @@ -268,14 +267,18 @@ void JvmtiClassFileReconstituter::write_source_file_attribute() { // JSR45| SourceDebugExtension_attribute { // JSR45| u2 attribute_name_index; // JSR45| u4 attribute_length; -// JSR45| u2 sourcefile_index; +// JSR45| u1 debug_extension[attribute_length]; // JSR45| } void JvmtiClassFileReconstituter::write_source_debug_extension_attribute() { assert(ikh()->source_debug_extension() != NULL, "caller must check"); write_attribute_name_index("SourceDebugExtension"); - write_u4(2); // always length 2 - write_u2(symbol_to_cpool_index(ikh()->source_debug_extension())); + int len = (int)strlen(ikh()->source_debug_extension()); + write_u4(len); + u1* ext = (u1*)ikh()->source_debug_extension(); + for (int i=0; i(50,true); + _global_code_blobs = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(50,true); // iterate over the stub code descriptors and put them in the list first. int index = 0; @@ -247,7 +247,7 @@ void JvmtiCodeBlobEvents::build_jvmti_addr_location_map(nmethod *nm, int pcds_in_method; pcds_in_method = (nm->scopes_pcs_end() - nm->scopes_pcs_begin()); - map = NEW_C_HEAP_ARRAY(jvmtiAddrLocationMap, pcds_in_method); + map = NEW_C_HEAP_ARRAY(jvmtiAddrLocationMap, pcds_in_method, mtInternal); address scopes_data = nm->scopes_data_begin(); for( pcd = nm->scopes_pcs_begin(); pcd < nm->scopes_pcs_end(); ++pcd ) { diff --git a/hotspot/src/share/vm/prims/jvmtiEnv.cpp b/hotspot/src/share/vm/prims/jvmtiEnv.cpp index 46519bb5796..20f5cf83748 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnv.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnv.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1012,7 +1012,7 @@ JvmtiEnv::GetOwnedMonitorInfo(JavaThread* java_thread, jint* owned_monitor_count // growable array of jvmti monitors info on the C-heap GrowableArray *owned_monitors_list = - new (ResourceObj::C_HEAP) GrowableArray(1, true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1, true); uint32_t debug_bits = 0; if (is_thread_fully_suspended(java_thread, true, &debug_bits)) { @@ -1057,7 +1057,7 @@ JvmtiEnv::GetOwnedMonitorStackDepthInfo(JavaThread* java_thread, jint* monitor_i // growable array of jvmti monitors info on the C-heap GrowableArray *owned_monitors_list = - new (ResourceObj::C_HEAP) GrowableArray(1, true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1, true); uint32_t debug_bits = 0; if (is_thread_fully_suspended(java_thread, true, &debug_bits)) { @@ -2541,15 +2541,12 @@ JvmtiEnv::GetSourceDebugExtension(oop k_mirror, char** source_debug_extension_pt if (!Klass::cast(k)->oop_is_instance()) { return JVMTI_ERROR_ABSENT_INFORMATION; } - Symbol* sdeOop = instanceKlass::cast(k)->source_debug_extension(); - NULL_CHECK(sdeOop, JVMTI_ERROR_ABSENT_INFORMATION); + char* sde = instanceKlass::cast(k)->source_debug_extension(); + NULL_CHECK(sde, JVMTI_ERROR_ABSENT_INFORMATION); { - JavaThread* current_thread = JavaThread::current(); - ResourceMark rm(current_thread); - const char* sdecp = (const char*) sdeOop->as_C_string(); - *source_debug_extension_ptr = (char *) jvmtiMalloc(strlen(sdecp)+1); - strcpy(*source_debug_extension_ptr, sdecp); + *source_debug_extension_ptr = (char *) jvmtiMalloc(strlen(sde)+1); + strcpy(*source_debug_extension_ptr, sde); } } diff --git a/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp b/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp index fd426422b13..2a6fd143b90 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvBase.cpp @@ -381,7 +381,7 @@ JvmtiEnvBase::set_native_method_prefixes(jint prefix_count, char** prefixes) { _native_method_prefixes = NULL; } else { // there are prefixes, allocate an array to hold them, and fill it - char** new_prefixes = (char**)os::malloc((prefix_count) * sizeof(char*)); + char** new_prefixes = (char**)os::malloc((prefix_count) * sizeof(char*), mtInternal); if (new_prefixes == NULL) { return JVMTI_ERROR_OUT_OF_MEMORY; } @@ -1150,7 +1150,7 @@ JvmtiEnvBase::get_object_monitor_usage(JavaThread* calling_thread, jobject objec ResourceTracker::ResourceTracker(JvmtiEnv* env) { _env = env; - _allocations = new (ResourceObj::C_HEAP) GrowableArray(20, true); + _allocations = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(20, true); _failed = false; } ResourceTracker::~ResourceTracker() { diff --git a/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp b/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp index ba0374648e5..29604db13b7 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvBase.hpp @@ -52,7 +52,7 @@ class JvmtiTagMap; // done via JNI GetEnv() call. Multiple attachments are // allowed in jvmti. -class JvmtiEnvBase : public CHeapObj { +class JvmtiEnvBase : public CHeapObj { private: @@ -175,7 +175,7 @@ class JvmtiEnvBase : public CHeapObj { if (size == 0) { *mem_ptr = NULL; } else { - *mem_ptr = (unsigned char *)os::malloc((size_t)size); + *mem_ptr = (unsigned char *)os::malloc((size_t)size, mtInternal); if (*mem_ptr == NULL) { return JVMTI_ERROR_OUT_OF_MEMORY; } @@ -185,7 +185,7 @@ class JvmtiEnvBase : public CHeapObj { jvmtiError deallocate(unsigned char* mem) { if (mem != NULL) { - os::free(mem); + os::free(mem, mtInternal); } return JVMTI_ERROR_NONE; } diff --git a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp index 9df767eb681..8e5214002c2 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.cpp @@ -95,7 +95,7 @@ JvmtiFramePops::clear_to(JvmtiFramePop& fp) { // JvmtiFramePops::JvmtiFramePops() { - _pops = new (ResourceObj::C_HEAP) GrowableArray (2, true); + _pops = new (ResourceObj::C_HEAP, mtInternal) GrowableArray (2, true); } JvmtiFramePops::~JvmtiFramePops() { diff --git a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp index e2273df0835..f9e686c0874 100644 --- a/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp +++ b/hotspot/src/share/vm/prims/jvmtiEnvThreadState.hpp @@ -76,7 +76,7 @@ class JvmtiFramePop VALUE_OBJ_CLASS_SPEC { // It records what frames on a threads stack should post frame_pop events when they're exited. // -class JvmtiFramePops : public CHeapObj { +class JvmtiFramePops : public CHeapObj { private: GrowableArray* _pops; @@ -107,7 +107,7 @@ class JvmtiFramePops : public CHeapObj { // 3: Location of last executed instruction, used to filter out duplicate // events due to instruction rewriting. -class JvmtiEnvThreadState : public CHeapObj { +class JvmtiEnvThreadState : public CHeapObj { private: friend class JvmtiEnv; JavaThread *_thread; diff --git a/hotspot/src/share/vm/prims/jvmtiExport.cpp b/hotspot/src/share/vm/prims/jvmtiExport.cpp index 5325073b620..70c5c71c9c9 100644 --- a/hotspot/src/share/vm/prims/jvmtiExport.cpp +++ b/hotspot/src/share/vm/prims/jvmtiExport.cpp @@ -617,7 +617,7 @@ class JvmtiClassFileLoadHookPoster : public StackObj { if (caching_needed && *_cached_data_ptr == NULL) { // data has been changed by the new retransformable agent // and it hasn't already been cached, cache it - *_cached_data_ptr = (unsigned char *)os::malloc(_curr_len); + *_cached_data_ptr = (unsigned char *)os::malloc(_curr_len, mtInternal); memcpy(*_cached_data_ptr, _curr_data, _curr_len); *_cached_length_ptr = _curr_len; } @@ -720,7 +720,7 @@ class JvmtiCompiledMethodLoadEventMark : public JvmtiMethodEventMark { JvmtiCodeBlobEvents::build_jvmti_addr_location_map(nm, &_map, &_map_length); } ~JvmtiCompiledMethodLoadEventMark() { - FREE_C_HEAP_ARRAY(jvmtiAddrLocationMap, _map); + FREE_C_HEAP_ARRAY(jvmtiAddrLocationMap, _map, mtInternal); } jint code_size() { return _code_size; } @@ -2323,7 +2323,7 @@ JvmtiDynamicCodeEventCollector::~JvmtiDynamicCodeEventCollector() { // register a stub void JvmtiDynamicCodeEventCollector::register_stub(const char* name, address start, address end) { if (_code_blobs == NULL) { - _code_blobs = new (ResourceObj::C_HEAP) GrowableArray(1,true); + _code_blobs = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); } _code_blobs->append(new JvmtiCodeBlobDesc(name, start, end)); } @@ -2357,7 +2357,7 @@ JvmtiVMObjectAllocEventCollector::~JvmtiVMObjectAllocEventCollector() { void JvmtiVMObjectAllocEventCollector::record_allocation(oop obj) { assert(is_enabled(), "VM object alloc event collector is not enabled"); if (_allocated == NULL) { - _allocated = new (ResourceObj::C_HEAP) GrowableArray(1, true); + _allocated = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1, true); } _allocated->push(obj); } diff --git a/hotspot/src/share/vm/prims/jvmtiExport.hpp b/hotspot/src/share/vm/prims/jvmtiExport.hpp index 31ee1ec93e8..4f6e6c6ae49 100644 --- a/hotspot/src/share/vm/prims/jvmtiExport.hpp +++ b/hotspot/src/share/vm/prims/jvmtiExport.hpp @@ -350,7 +350,7 @@ class JvmtiExport : public AllStatic { // Support class used by JvmtiDynamicCodeEventCollector and others. It // describes a single code blob by name and address range. -class JvmtiCodeBlobDesc : public CHeapObj { +class JvmtiCodeBlobDesc : public CHeapObj { private: char _name[64]; address _code_begin; diff --git a/hotspot/src/share/vm/prims/jvmtiExtensions.cpp b/hotspot/src/share/vm/prims/jvmtiExtensions.cpp index 00f99720101..9f6a1b101ec 100644 --- a/hotspot/src/share/vm/prims/jvmtiExtensions.cpp +++ b/hotspot/src/share/vm/prims/jvmtiExtensions.cpp @@ -49,8 +49,8 @@ static jvmtiError JNICALL IsClassUnloadingEnabled(const jvmtiEnv* env, jboolean* // event. The function and the event are registered here. // void JvmtiExtensions::register_extensions() { - _ext_functions = new (ResourceObj::C_HEAP) GrowableArray(1,true); - _ext_events = new (ResourceObj::C_HEAP) GrowableArray(1,true); + _ext_functions = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); + _ext_events = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); // register our extension function static jvmtiParamInfo func_params[] = { diff --git a/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp b/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp index dd07a295ad1..050aa60177e 100644 --- a/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp +++ b/hotspot/src/share/vm/prims/jvmtiGetLoadedClasses.cpp @@ -152,7 +152,7 @@ class JvmtiGetLoadedClassesClosure : public StackObj { // Public methods that get called within the scope of the closure void allocate() { - _list = NEW_C_HEAP_ARRAY(Handle, _count); + _list = NEW_C_HEAP_ARRAY(Handle, _count, mtInternal); assert(_list != NULL, "Out of memory"); if (_list == NULL) { _count = 0; diff --git a/hotspot/src/share/vm/prims/jvmtiImpl.cpp b/hotspot/src/share/vm/prims/jvmtiImpl.cpp index e0d809d4541..2244d81d9d7 100644 --- a/hotspot/src/share/vm/prims/jvmtiImpl.cpp +++ b/hotspot/src/share/vm/prims/jvmtiImpl.cpp @@ -98,8 +98,8 @@ JvmtiAgentThread::call_start_function() { void GrowableCache::recache() { int len = _elements->length(); - FREE_C_HEAP_ARRAY(address, _cache); - _cache = NEW_C_HEAP_ARRAY(address,len+1); + FREE_C_HEAP_ARRAY(address, _cache, mtInternal); + _cache = NEW_C_HEAP_ARRAY(address,len+1, mtInternal); for (int i=0; iat(i)->getCacheValue(); @@ -142,13 +142,13 @@ GrowableCache::GrowableCache() { GrowableCache::~GrowableCache() { clear(); delete _elements; - FREE_C_HEAP_ARRAY(address, _cache); + FREE_C_HEAP_ARRAY(address, _cache, mtInternal); } void GrowableCache::initialize(void *this_obj, void listener_fun(void *, address*) ) { _this_obj = this_obj; _listener_fun = listener_fun; - _elements = new (ResourceObj::C_HEAP) GrowableArray(5,true); + _elements = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(5,true); recache(); } diff --git a/hotspot/src/share/vm/prims/jvmtiImpl.hpp b/hotspot/src/share/vm/prims/jvmtiImpl.hpp index 704d287a8f3..f80d63144d4 100644 --- a/hotspot/src/share/vm/prims/jvmtiImpl.hpp +++ b/hotspot/src/share/vm/prims/jvmtiImpl.hpp @@ -64,7 +64,7 @@ class JvmtiBreakpoints; // to update its pointer to the address cache. // -class GrowableElement : public CHeapObj { +class GrowableElement : public CHeapObj { public: virtual address getCacheValue() =0; virtual bool equals(GrowableElement* e) =0; @@ -130,7 +130,7 @@ public: // Note : typesafe wrapper for GrowableCache of JvmtiBreakpoint // -class JvmtiBreakpointCache : public CHeapObj { +class JvmtiBreakpointCache : public CHeapObj { private: GrowableCache _cache; @@ -258,7 +258,7 @@ public: // CHeap allocated to emphasize its similarity to JvmtiFramePops. // -class JvmtiBreakpoints : public CHeapObj { +class JvmtiBreakpoints : public CHeapObj { private: JvmtiBreakpointCache _bps; @@ -496,7 +496,7 @@ class JvmtiDeferredEvent VALUE_OBJ_CLASS_SPEC { class JvmtiDeferredEventQueue : AllStatic { friend class JvmtiDeferredEvent; private: - class QueueNode : public CHeapObj { + class QueueNode : public CHeapObj { private: JvmtiDeferredEvent _event; QueueNode* _next; diff --git a/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp b/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp index 89cac00bb5c..9031bbb290a 100644 --- a/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp +++ b/hotspot/src/share/vm/prims/jvmtiRawMonitor.cpp @@ -27,7 +27,7 @@ #include "runtime/interfaceSupport.hpp" #include "runtime/thread.hpp" -GrowableArray *JvmtiPendingMonitors::_monitors = new (ResourceObj::C_HEAP) GrowableArray(1,true); +GrowableArray *JvmtiPendingMonitors::_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); void JvmtiPendingMonitors::transition_raw_monitors() { assert((Threads::number_of_threads()==1), @@ -53,7 +53,7 @@ is running. Raw monitor transition will not work"); JvmtiRawMonitor::JvmtiRawMonitor(const char *name) { #ifdef ASSERT - _name = strcpy(NEW_C_HEAP_ARRAY(char, strlen(name) + 1), name); + _name = strcpy(NEW_C_HEAP_ARRAY(char, strlen(name) + 1, mtInternal), name); #else _name = NULL; #endif diff --git a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp index 2caecf680bb..2c0550e9e6f 100644 --- a/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp +++ b/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -831,7 +831,7 @@ bool VM_RedefineClasses::is_unresolved_string_mismatch(constantPoolHandle cp1, jvmtiError VM_RedefineClasses::load_new_class_versions(TRAPS) { // For consistency allocate memory using os::malloc wrapper. _scratch_classes = (instanceKlassHandle *) - os::malloc(sizeof(instanceKlassHandle) * _class_count); + os::malloc(sizeof(instanceKlassHandle) * _class_count, mtInternal); if (_scratch_classes == NULL) { return JVMTI_ERROR_OUT_OF_MEMORY; } @@ -2478,23 +2478,17 @@ void VM_RedefineClasses::set_new_constant_pool( // to use new constant pool indices as needed. The exception table // holds quadruple entries of the form: // (beg_bci, end_bci, handler_bci, klass_index) - const int beg_bci_offset = 0; - const int end_bci_offset = 1; - const int handler_bci_offset = 2; - const int klass_index_offset = 3; - const int entry_size = 4; - typeArrayHandle ex_table (THREAD, method->exception_table()); - int ext_length = ex_table->length(); - assert(ext_length % entry_size == 0, "exception table format has changed"); + ExceptionTable ex_table(method()); + int ext_length = ex_table.length(); - for (int j = 0; j < ext_length; j += entry_size) { - int cur_index = ex_table->int_at(j + klass_index_offset); + for (int j = 0; j < ext_length; j ++) { + int cur_index = ex_table.catch_type_index(j); int new_index = find_new_index(cur_index); if (new_index != 0) { RC_TRACE_WITH_THREAD(0x00080000, THREAD, ("ext-klass_index change: %d to %d", cur_index, new_index)); - ex_table->int_at_put(j + klass_index_offset, new_index); + ex_table.set_catch_type_index(j, new_index); } } // end for each exception table entry @@ -3236,7 +3230,9 @@ void VM_RedefineClasses::redefine_single_class(jclass the_jclass, // Copy the "source debug extension" attribute from new class version the_class->set_source_debug_extension( - scratch_class->source_debug_extension()); + scratch_class->source_debug_extension(), + scratch_class->source_debug_extension() == NULL ? 0 : + (int)strlen(scratch_class->source_debug_extension())); // Use of javac -g could be different in the old and the new if (scratch_class->access_flags().has_localvariable_table() != diff --git a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp index a425430bf61..ba77093a7f8 100644 --- a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp +++ b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp @@ -55,7 +55,7 @@ // and the tag value. In addition an entry includes a next pointer which // is used to chain entries together. -class JvmtiTagHashmapEntry : public CHeapObj { +class JvmtiTagHashmapEntry : public CHeapObj { private: friend class JvmtiTagMap; @@ -106,7 +106,7 @@ class JvmtiTagHashmapEntry : public CHeapObj { // entries. It also provides a function to iterate over all entries // in the hashmap. -class JvmtiTagHashmap : public CHeapObj { +class JvmtiTagHashmap : public CHeapObj { private: friend class JvmtiTagMap; @@ -150,7 +150,7 @@ class JvmtiTagHashmap : public CHeapObj { _resize_threshold = (int)(_load_factor * _size); _resizing_enabled = true; size_t s = initial_size * sizeof(JvmtiTagHashmapEntry*); - _table = (JvmtiTagHashmapEntry**)os::malloc(s); + _table = (JvmtiTagHashmapEntry**)os::malloc(s, mtInternal); if (_table == NULL) { vm_exit_out_of_memory(s, "unable to allocate initial hashtable for jvmti object tags"); } @@ -188,7 +188,7 @@ class JvmtiTagHashmap : public CHeapObj { // allocate new table size_t s = new_size * sizeof(JvmtiTagHashmapEntry*); - JvmtiTagHashmapEntry** new_table = (JvmtiTagHashmapEntry**)os::malloc(s); + JvmtiTagHashmapEntry** new_table = (JvmtiTagHashmapEntry**)os::malloc(s, mtInternal); if (new_table == NULL) { warning("unable to allocate larger hashtable for jvmti object tags"); set_resizing_enabled(false); @@ -585,7 +585,7 @@ class CallbackWrapper : public StackObj { _o = klassOop_if_java_lang_Class(o); // object size - _obj_size = _o->size() * wordSize; + _obj_size = (jlong)_o->size() * wordSize; // record the context _tag_map = tag_map; @@ -776,7 +776,7 @@ jlong JvmtiTagMap::get_tag(jobject object) { // For each field it holds the field index (as defined by the JVMTI specification), // the field type, and the offset. -class ClassFieldDescriptor: public CHeapObj { +class ClassFieldDescriptor: public CHeapObj { private: int _field_index; int _field_offset; @@ -790,7 +790,7 @@ class ClassFieldDescriptor: public CHeapObj { int field_offset() const { return _field_offset; } }; -class ClassFieldMap: public CHeapObj { +class ClassFieldMap: public CHeapObj { private: enum { initial_field_count = 5 @@ -821,7 +821,8 @@ class ClassFieldMap: public CHeapObj { }; ClassFieldMap::ClassFieldMap() { - _fields = new (ResourceObj::C_HEAP) GrowableArray(initial_field_count, true); + _fields = new (ResourceObj::C_HEAP, mtInternal) + GrowableArray(initial_field_count, true); } ClassFieldMap::~ClassFieldMap() { @@ -892,7 +893,7 @@ ClassFieldMap* ClassFieldMap::create_map_of_instance_fields(oop obj) { // heap iteration and avoid creating a field map for each object in the heap // (only need to create the map when the first instance of a class is encountered). // -class JvmtiCachedClassFieldMap : public CHeapObj { +class JvmtiCachedClassFieldMap : public CHeapObj { private: enum { initial_class_count = 200 @@ -957,7 +958,8 @@ bool ClassFieldMapCacheMark::_is_active; // record that the given instanceKlass is caching a field map void JvmtiCachedClassFieldMap::add_to_class_list(instanceKlass* ik) { if (_class_list == NULL) { - _class_list = new (ResourceObj::C_HEAP) GrowableArray(initial_class_count, true); + _class_list = new (ResourceObj::C_HEAP, mtInternal) + GrowableArray(initial_class_count, true); } _class_list->push(ik); } @@ -1526,8 +1528,8 @@ class TagObjectCollector : public JvmtiTagHashmapEntryClosure { _env = env; _tags = (jlong*)tags; _tag_count = tag_count; - _object_results = new (ResourceObj::C_HEAP) GrowableArray(1,true); - _tag_results = new (ResourceObj::C_HEAP) GrowableArray(1,true); + _object_results = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); + _tag_results = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(1,true); } ~TagObjectCollector() { @@ -1672,8 +1674,8 @@ void ObjectMarker::init() { Universe::heap()->ensure_parsability(false); // no need to retire TLABs // create stacks for interesting headers - _saved_mark_stack = new (ResourceObj::C_HEAP) GrowableArray(4000, true); - _saved_oop_stack = new (ResourceObj::C_HEAP) GrowableArray(4000, true); + _saved_mark_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(4000, true); + _saved_oop_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(4000, true); if (UseBiasedLocking) { BiasedLocking::preserve_marks(); @@ -2712,7 +2714,7 @@ class VM_HeapWalkOperation: public VM_Operation { bool _reporting_string_values; GrowableArray* create_visit_stack() { - return new (ResourceObj::C_HEAP) GrowableArray(initial_visit_stack_size, true); + return new (ResourceObj::C_HEAP, mtInternal) GrowableArray(initial_visit_stack_size, true); } // accessors diff --git a/hotspot/src/share/vm/prims/jvmtiTagMap.hpp b/hotspot/src/share/vm/prims/jvmtiTagMap.hpp index 2a460edc1e0..ede639efe7e 100644 --- a/hotspot/src/share/vm/prims/jvmtiTagMap.hpp +++ b/hotspot/src/share/vm/prims/jvmtiTagMap.hpp @@ -41,7 +41,7 @@ class JvmtiTagHashmap; class JvmtiTagHashmapEntry; class JvmtiTagHashmapEntryClosure; -class JvmtiTagMap : public CHeapObj { +class JvmtiTagMap : public CHeapObj { private: enum{ diff --git a/hotspot/src/share/vm/prims/jvmtiThreadState.hpp b/hotspot/src/share/vm/prims/jvmtiThreadState.hpp index 87d2f0b03a4..6cc4e275d85 100644 --- a/hotspot/src/share/vm/prims/jvmtiThreadState.hpp +++ b/hotspot/src/share/vm/prims/jvmtiThreadState.hpp @@ -72,7 +72,7 @@ class JvmtiEnvThreadStateIterator : public StackObj { // // The Jvmti state for each thread (across all JvmtiEnv): // 1. Local table of enabled events. -class JvmtiThreadState : public CHeapObj { +class JvmtiThreadState : public CHeapObj { private: friend class JvmtiEnv; JavaThread *_thread; diff --git a/hotspot/src/share/vm/prims/jvmtiUtil.cpp b/hotspot/src/share/vm/prims/jvmtiUtil.cpp index 6671d48e995..425ca1d9803 100644 --- a/hotspot/src/share/vm/prims/jvmtiUtil.cpp +++ b/hotspot/src/share/vm/prims/jvmtiUtil.cpp @@ -40,7 +40,7 @@ ResourceArea* JvmtiUtil::single_threaded_resource_area() { if (_single_threaded_resource_area == NULL) { // lazily create the single threaded resource area // pick a size which is not a standard since the pools don't exist yet - _single_threaded_resource_area = new ResourceArea(Chunk::non_pool_size); + _single_threaded_resource_area = new (mtInternal) ResourceArea(Chunk::non_pool_size); } return _single_threaded_resource_area; } diff --git a/hotspot/src/share/vm/prims/methodHandleWalk.cpp b/hotspot/src/share/vm/prims/methodHandleWalk.cpp index d4d9a7130a5..68e83bdc7d6 100644 --- a/hotspot/src/share/vm/prims/methodHandleWalk.cpp +++ b/hotspot/src/share/vm/prims/methodHandleWalk.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1796,7 +1796,7 @@ methodHandle MethodHandleCompiler::get_method_oop(TRAPS) { { methodOop m_oop = oopFactory::new_method(bytecode_length(), accessFlags_from(flags_bits), - 0, 0, 0, oopDesc::IsSafeConc, CHECK_(empty)); + 0, 0, 0, 0, oopDesc::IsSafeConc, CHECK_(empty)); m = methodHandle(THREAD, m_oop); } @@ -1812,9 +1812,6 @@ methodHandle MethodHandleCompiler::get_method_oop(TRAPS) { m->set_max_locals(max_locals()); m->set_size_of_parameters(_num_params); - typeArrayHandle exception_handlers(THREAD, Universe::the_empty_int_array()); - m->set_exception_table(exception_handlers()); - // Rewrite the method and set up the constant pool cache. objArrayOop m_array = oopFactory::new_system_objArray(1, CHECK_(empty)); objArrayHandle methods(THREAD, m_array); diff --git a/hotspot/src/share/vm/prims/methodHandles.cpp b/hotspot/src/share/vm/prims/methodHandles.cpp index 552fbe6a803..0501496fdc0 100644 --- a/hotspot/src/share/vm/prims/methodHandles.cpp +++ b/hotspot/src/share/vm/prims/methodHandles.cpp @@ -3180,17 +3180,15 @@ JVM_ENTRY(void, JVM_RegisterMethodHandleMethods(JNIEnv *env, jclass MHN_class)) jclass MH_class = env->FindClass(MH_name); status = env->RegisterNatives(MH_class, invoke_methods, sizeof(invoke_methods)/sizeof(JNINativeMethod)); } + if (!env->ExceptionOccurred()) { + status = env->RegisterNatives(MHN_class, call_site_methods, sizeof(call_site_methods)/sizeof(JNINativeMethod)); + } if (env->ExceptionOccurred()) { warning("JSR 292 method handle code is mismatched to this JVM. Disabling support."); enable_MH = false; env->ExceptionClear(); } - status = env->RegisterNatives(MHN_class, call_site_methods, sizeof(call_site_methods)/sizeof(JNINativeMethod)); - if (env->ExceptionOccurred()) { - // Exception is okay until 7087357 - env->ExceptionClear(); - } } if (enable_MH) { diff --git a/hotspot/src/share/vm/prims/unsafe.cpp b/hotspot/src/share/vm/prims/unsafe.cpp index 19f77a5f160..c8f532d9bfe 100644 --- a/hotspot/src/share/vm/prims/unsafe.cpp +++ b/hotspot/src/share/vm/prims/unsafe.cpp @@ -178,17 +178,6 @@ jint Unsafe_invocation_key_to_method_slot(jint key) { v = *(oop*)index_oop_from_field_offset_long(p, offset); \ } -#define GET_OOP_FIELD_VOLATILE(obj, offset, v) \ - oop p = JNIHandles::resolve(obj); \ - volatile oop v; \ - if (UseCompressedOops) { \ - volatile narrowOop n = *(volatile narrowOop*)index_oop_from_field_offset_long(p, offset); \ - v = oopDesc::decode_heap_oop(n); \ - } else { \ - v = *(volatile oop*)index_oop_from_field_offset_long(p, offset); \ - } \ - OrderAccess::acquire(); - // Get/SetObject must be special-cased, since it works with handles. @@ -296,28 +285,21 @@ UNSAFE_END UNSAFE_ENTRY(jobject, Unsafe_GetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) UnsafeWrapper("Unsafe_GetObjectVolatile"); - GET_OOP_FIELD_VOLATILE(obj, offset, v) + oop p = JNIHandles::resolve(obj); + void* addr = index_oop_from_field_offset_long(p, offset); + volatile oop v; + if (UseCompressedOops) { + volatile narrowOop n = *(volatile narrowOop*) addr; + v = oopDesc::decode_heap_oop(n); + } else { + v = *(volatile oop*) addr; + } + OrderAccess::acquire(); return JNIHandles::make_local(env, v); UNSAFE_END UNSAFE_ENTRY(void, Unsafe_SetObjectVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) UnsafeWrapper("Unsafe_SetObjectVolatile"); - { - // Catch VolatileCallSite.target stores (via - // CallSite.setTargetVolatile) and check call site dependencies. - oop p = JNIHandles::resolve(obj); - if ((offset == java_lang_invoke_CallSite::target_offset_in_bytes()) && p->is_a(SystemDictionary::CallSite_klass())) { - Handle call_site (THREAD, p); - Handle method_handle(THREAD, JNIHandles::resolve(x_h)); - assert(call_site ->is_a(SystemDictionary::CallSite_klass()), "must be"); - assert(method_handle->is_a(SystemDictionary::MethodHandle_klass()), "must be"); - { - // Walk all nmethods depending on this call site. - MutexLocker mu(Compile_lock, thread); - Universe::flush_dependents_on(call_site(), method_handle()); - } - } - } oop x = JNIHandles::resolve(x_h); oop p = JNIHandles::resolve(obj); void* addr = index_oop_from_field_offset_long(p, offset); @@ -596,7 +578,7 @@ UNSAFE_ENTRY(jlong, Unsafe_AllocateMemory(JNIEnv *env, jobject unsafe, jlong siz return 0; } sz = round_to(sz, HeapWordSize); - void* x = os::malloc(sz); + void* x = os::malloc(sz, mtInternal); if (x == NULL) { THROW_0(vmSymbols::java_lang_OutOfMemoryError()); } @@ -616,7 +598,7 @@ UNSAFE_ENTRY(jlong, Unsafe_ReallocateMemory(JNIEnv *env, jobject unsafe, jlong a return 0; } sz = round_to(sz, HeapWordSize); - void* x = (p == NULL) ? os::malloc(sz) : os::realloc(p, sz); + void* x = (p == NULL) ? os::malloc(sz, mtInternal) : os::realloc(p, sz, mtInternal); if (x == NULL) { THROW_0(vmSymbols::java_lang_OutOfMemoryError()); } @@ -877,7 +859,7 @@ static jclass Unsafe_DefineClass(JNIEnv *env, jstring name, jbyteArray data, int return 0; } - body = NEW_C_HEAP_ARRAY(jbyte, length); + body = NEW_C_HEAP_ARRAY(jbyte, length, mtInternal); if (body == 0) { throw_new(env, "OutOfMemoryError"); @@ -893,7 +875,7 @@ static jclass Unsafe_DefineClass(JNIEnv *env, jstring name, jbyteArray data, int uint len = env->GetStringUTFLength(name); int unicode_len = env->GetStringLength(name); if (len >= sizeof(buf)) { - utfName = NEW_C_HEAP_ARRAY(char, len + 1); + utfName = NEW_C_HEAP_ARRAY(char, len + 1, mtInternal); if (utfName == NULL) { throw_new(env, "OutOfMemoryError"); goto free_body; @@ -913,10 +895,10 @@ static jclass Unsafe_DefineClass(JNIEnv *env, jstring name, jbyteArray data, int result = JVM_DefineClass(env, utfName, loader, body, length, pd); if (utfName && utfName != buf) - FREE_C_HEAP_ARRAY(char, utfName); + FREE_C_HEAP_ARRAY(char, utfName, mtInternal); free_body: - FREE_C_HEAP_ARRAY(jbyte, body); + FREE_C_HEAP_ARRAY(jbyte, body, mtInternal); return result; } } @@ -1011,7 +993,7 @@ Unsafe_DefineAnonymousClass_impl(JNIEnv *env, jint length = typeArrayOop(JNIHandles::resolve_non_null(data))->length(); jint word_length = (length + sizeof(HeapWord)-1) / sizeof(HeapWord); - HeapWord* body = NEW_C_HEAP_ARRAY(HeapWord, word_length); + HeapWord* body = NEW_C_HEAP_ARRAY(HeapWord, word_length, mtInternal); if (body == NULL) { THROW_0(vmSymbols::java_lang_OutOfMemoryError()); } @@ -1095,7 +1077,7 @@ UNSAFE_ENTRY(jclass, Unsafe_DefineAnonymousClass(JNIEnv *env, jobject unsafe, jc // try/finally clause: if (temp_alloc != NULL) { - FREE_C_HEAP_ARRAY(HeapWord, temp_alloc); + FREE_C_HEAP_ARRAY(HeapWord, temp_alloc, mtInternal); } return (jclass) res_jh; diff --git a/hotspot/src/share/vm/prims/whitebox.cpp b/hotspot/src/share/vm/prims/whitebox.cpp index eadc7df523f..e93b9104b44 100644 --- a/hotspot/src/share/vm/prims/whitebox.cpp +++ b/hotspot/src/share/vm/prims/whitebox.cpp @@ -113,6 +113,9 @@ const char* WhiteBox::lookup_jstring(const char* field_name, oop object) { int offset = offset_for_field(field_name, object, vmSymbols::string_signature()); oop string = object->obj_field(offset); + if (string == NULL) { + return NULL; + } const char* ret = java_lang_String::as_utf8_string(string); return ret; } diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index 438e783ecfb..185dd9643b0 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -35,6 +35,7 @@ #include "runtime/globals_extension.hpp" #include "runtime/java.hpp" #include "services/management.hpp" +#include "services/memTracker.hpp" #include "utilities/defaultStream.hpp" #include "utilities/taskqueue.hpp" #ifdef TARGET_OS_FAMILY_linux @@ -368,7 +369,7 @@ inline void SysClassPath::add_suffix(const char* suffix) { inline void SysClassPath::reset_item_at(int index) { assert(index < _scp_nitems && index != _scp_base, "just checking"); if (_items[index] != NULL) { - FREE_C_HEAP_ARRAY(char, _items[index]); + FREE_C_HEAP_ARRAY(char, _items[index], mtInternal); _items[index] = NULL; } } @@ -400,11 +401,11 @@ void SysClassPath::expand_endorsed() { expanded_path = add_jars_to_path(expanded_path, path); path = end; } else { - char* dirpath = NEW_C_HEAP_ARRAY(char, tmp_end - path + 1); + char* dirpath = NEW_C_HEAP_ARRAY(char, tmp_end - path + 1, mtInternal); memcpy(dirpath, path, tmp_end - path); dirpath[tmp_end - path] = '\0'; expanded_path = add_jars_to_path(expanded_path, dirpath); - FREE_C_HEAP_ARRAY(char, dirpath); + FREE_C_HEAP_ARRAY(char, dirpath, mtInternal); path = tmp_end + 1; } } @@ -435,7 +436,7 @@ char* SysClassPath::combined_path() { assert(total_len > 0, "empty sysclasspath not allowed"); // Copy the _items to a single string. - char* cp = NEW_C_HEAP_ARRAY(char, total_len); + char* cp = NEW_C_HEAP_ARRAY(char, total_len, mtInternal); char* cp_tmp = cp; for (i = 0; i < _scp_nitems; ++i) { if (_items[i] != NULL) { @@ -456,7 +457,7 @@ SysClassPath::add_to_path(const char* path, const char* str, bool prepend) { assert(str != NULL, "just checking"); if (path == NULL) { size_t len = strlen(str) + 1; - cp = NEW_C_HEAP_ARRAY(char, len); + cp = NEW_C_HEAP_ARRAY(char, len, mtInternal); memcpy(cp, str, len); // copy the trailing null } else { const char separator = *os::path_separator(); @@ -465,15 +466,15 @@ SysClassPath::add_to_path(const char* path, const char* str, bool prepend) { size_t len = old_len + str_len + 2; if (prepend) { - cp = NEW_C_HEAP_ARRAY(char, len); + cp = NEW_C_HEAP_ARRAY(char, len, mtInternal); char* cp_tmp = cp; memcpy(cp_tmp, str, str_len); cp_tmp += str_len; *cp_tmp = separator; memcpy(++cp_tmp, path, old_len + 1); // copy the trailing null - FREE_C_HEAP_ARRAY(char, path); + FREE_C_HEAP_ARRAY(char, path, mtInternal); } else { - cp = REALLOC_C_HEAP_ARRAY(char, path, len); + cp = REALLOC_C_HEAP_ARRAY(char, path, len, mtInternal); char* cp_tmp = cp + old_len; *cp_tmp = separator; memcpy(++cp_tmp, str, str_len + 1); // copy the trailing null @@ -495,7 +496,7 @@ char* SysClassPath::add_jars_to_path(char* path, const char* directory) { /* Scan the directory for jars/zips, appending them to path. */ struct dirent *entry; - char *dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(directory)); + char *dbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(directory), mtInternal); while ((entry = os::readdir(dir, (dirent *) dbuf)) != NULL) { const char* name = entry->d_name; const char* ext = name + strlen(name) - 4; @@ -503,13 +504,13 @@ char* SysClassPath::add_jars_to_path(char* path, const char* directory) { (os::file_name_strcmp(ext, ".jar") == 0 || os::file_name_strcmp(ext, ".zip") == 0); if (isJarOrZip) { - char* jarpath = NEW_C_HEAP_ARRAY(char, directory_len + 2 + strlen(name)); + char* jarpath = NEW_C_HEAP_ARRAY(char, directory_len + 2 + strlen(name), mtInternal); sprintf(jarpath, "%s%s%s", directory, dir_sep, name); path = add_to_path(path, jarpath, false); - FREE_C_HEAP_ARRAY(char, jarpath); + FREE_C_HEAP_ARRAY(char, jarpath, mtInternal); } } - FREE_C_HEAP_ARRAY(char, dbuf); + FREE_C_HEAP_ARRAY(char, dbuf, mtInternal); os::closedir(dir); return path; } @@ -631,7 +632,7 @@ static bool set_numeric_flag(char* name, char* value, FlagValueOrigin origin) { static bool set_string_flag(char* name, const char* value, FlagValueOrigin origin) { if (!CommandLineFlags::ccstrAtPut(name, &value, origin)) return false; // Contract: CommandLineFlags always returns a pointer that needs freeing. - FREE_C_HEAP_ARRAY(char, value); + FREE_C_HEAP_ARRAY(char, value, mtInternal); return true; } @@ -647,7 +648,7 @@ static bool append_to_string_flag(char* name, const char* new_value, FlagValueOr } else if (new_len == 0) { value = old_value; } else { - char* buf = NEW_C_HEAP_ARRAY(char, old_len + 1 + new_len + 1); + char* buf = NEW_C_HEAP_ARRAY(char, old_len + 1 + new_len + 1, mtInternal); // each new setting adds another LINE to the switch: sprintf(buf, "%s\n%s", old_value, new_value); value = buf; @@ -655,10 +656,10 @@ static bool append_to_string_flag(char* name, const char* new_value, FlagValueOr } (void) CommandLineFlags::ccstrAtPut(name, &value, origin); // CommandLineFlags always returns a pointer that needs freeing. - FREE_C_HEAP_ARRAY(char, value); + FREE_C_HEAP_ARRAY(char, value, mtInternal); if (free_this_too != NULL) { // CommandLineFlags made its own copy, so I must delete my own temp. buffer. - FREE_C_HEAP_ARRAY(char, free_this_too); + FREE_C_HEAP_ARRAY(char, free_this_too, mtInternal); } return true; } @@ -735,9 +736,9 @@ void Arguments::add_string(char*** bldarray, int* count, const char* arg) { // expand the array and add arg to the last element (*count)++; if (*bldarray == NULL) { - *bldarray = NEW_C_HEAP_ARRAY(char*, *count); + *bldarray = NEW_C_HEAP_ARRAY(char*, *count, mtInternal); } else { - *bldarray = REALLOC_C_HEAP_ARRAY(char*, *bldarray, *count); + *bldarray = REALLOC_C_HEAP_ARRAY(char*, *bldarray, *count, mtInternal); } (*bldarray)[index] = strdup(arg); } @@ -917,13 +918,13 @@ bool Arguments::add_property(const char* prop) { char* value = (char *)ns; size_t key_len = (eq == NULL) ? strlen(prop) : (eq - prop); - key = AllocateHeap(key_len + 1, "add_property"); + key = AllocateHeap(key_len + 1, mtInternal); strncpy(key, prop, key_len); key[key_len] = '\0'; if (eq != NULL) { size_t value_len = strlen(prop) - key_len - 1; - value = AllocateHeap(value_len + 1, "add_property"); + value = AllocateHeap(value_len + 1, mtInternal); strncpy(value, &prop[key_len + 1], value_len + 1); } @@ -2058,12 +2059,12 @@ jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) { const char* altclasses_jar = "alt-rt.jar"; size_t altclasses_path_len = strlen(get_meta_index_dir()) + 1 + strlen(altclasses_jar); - char* altclasses_path = NEW_C_HEAP_ARRAY(char, altclasses_path_len); + char* altclasses_path = NEW_C_HEAP_ARRAY(char, altclasses_path_len, mtInternal); strcpy(altclasses_path, get_meta_index_dir()); strcat(altclasses_path, altclasses_jar); scp.add_suffix_to_prefix(altclasses_path); scp_assembly_required = true; - FREE_C_HEAP_ARRAY(char, altclasses_path); + FREE_C_HEAP_ARRAY(char, altclasses_path, mtInternal); } if (WhiteBoxAPI) { @@ -2071,12 +2072,12 @@ jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) { const char* wb_jar = "wb.jar"; size_t wb_path_len = strlen(get_meta_index_dir()) + 1 + strlen(wb_jar); - char* wb_path = NEW_C_HEAP_ARRAY(char, wb_path_len); + char* wb_path = NEW_C_HEAP_ARRAY(char, wb_path_len, mtInternal); strcpy(wb_path, get_meta_index_dir()); strcat(wb_path, wb_jar); scp.add_suffix(wb_path); scp_assembly_required = true; - FREE_C_HEAP_ARRAY(char, wb_path); + FREE_C_HEAP_ARRAY(char, wb_path, mtInternal); } // Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM) @@ -2161,13 +2162,13 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, if (tail != NULL) { const char* pos = strchr(tail, ':'); size_t len = (pos == NULL) ? strlen(tail) : pos - tail; - char* name = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len + 1), tail, len); + char* name = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len + 1, mtInternal), tail, len); name[len] = '\0'; char *options = NULL; if(pos != NULL) { size_t len2 = strlen(pos+1) + 1; // options start after ':'. Final zero must be copied. - options = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len2), pos+1, len2); + options = (char*)memcpy(NEW_C_HEAP_ARRAY(char, len2, mtInternal), pos+1, len2); } #ifdef JVMTI_KERNEL if ((strcmp(name, "hprof") == 0) || (strcmp(name, "jdwp") == 0)) { @@ -2182,12 +2183,12 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, if(tail != NULL) { const char* pos = strchr(tail, '='); size_t len = (pos == NULL) ? strlen(tail) : pos - tail; - char* name = strncpy(NEW_C_HEAP_ARRAY(char, len + 1), tail, len); + char* name = strncpy(NEW_C_HEAP_ARRAY(char, len + 1, mtInternal), tail, len); name[len] = '\0'; char *options = NULL; if(pos != NULL) { - options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(pos + 1) + 1), pos + 1); + options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(pos + 1) + 1, mtInternal), pos + 1); } #ifdef JVMTI_KERNEL if ((strcmp(name, "hprof") == 0) || (strcmp(name, "jdwp") == 0)) { @@ -2200,7 +2201,7 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, // -javaagent } else if (match_option(option, "-javaagent:", &tail)) { if(tail != NULL) { - char *options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(tail) + 1), tail); + char *options = strcpy(NEW_C_HEAP_ARRAY(char, strlen(tail) + 1, mtInternal), tail); add_init_agent("instrument", options, false); } // -Xnoclassgc @@ -2708,6 +2709,17 @@ SOLARIS_ONLY( return JNI_EINVAL; } FLAG_SET_CMDLINE(uintx, ConcGCThreads, conc_threads); + } else if (match_option(option, "-XX:MaxDirectMemorySize=", &tail)) { + julong max_direct_memory_size = 0; + ArgsRange errcode = parse_memory_size(tail, &max_direct_memory_size, 0); + if (errcode != arg_in_range) { + jio_fprintf(defaultStream::error_stream(), + "Invalid maximum direct memory size: %s\n", + option->optionString); + describe_range_error(errcode); + return JNI_EINVAL; + } + FLAG_SET_CMDLINE(uintx, MaxDirectMemorySize, max_direct_memory_size); } else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx // Skip -XX:Flags= since that case has already been handled if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) { @@ -2958,7 +2970,7 @@ jint Arguments::parse(const JavaVMInitArgs* args) { char *end = strrchr(jvm_path, *os::file_separator()); if (end != NULL) *end = '\0'; char *shared_archive_path = NEW_C_HEAP_ARRAY(char, strlen(jvm_path) + - strlen(os::file_separator()) + 20); + strlen(os::file_separator()) + 20, mtInternal); if (shared_archive_path == NULL) return JNI_ENOMEM; strcpy(shared_archive_path, jvm_path); strcat(shared_archive_path, os::file_separator()); @@ -2971,7 +2983,10 @@ jint Arguments::parse(const JavaVMInitArgs* args) { const char* tail; // If flag "-XX:Flags=flags-file" is used it will be the first option to be processed. + const char* hotspotrc = ".hotspotrc"; bool settings_file_specified = false; + bool needs_hotspotrc_warning = false; + const char* flags_file; int index; for (index = 0; index < args->nOptions; index++) { @@ -2996,6 +3011,10 @@ jint Arguments::parse(const JavaVMInitArgs* args) { CommandLineFlags::printFlags(tty, false); vm_exit(0); } + if (match_option(option, "-XX:NativeMemoryTracking", &tail)) { + MemTracker::init_tracking_options(tail); + } + #ifndef PRODUCT if (match_option(option, "-XX:+PrintFlagsWithComments", &tail)) { @@ -3015,16 +3034,19 @@ jint Arguments::parse(const JavaVMInitArgs* args) { if (!process_settings_file(flags_file, true, args->ignoreUnrecognized)) { return JNI_EINVAL; } - } - + } else { #ifdef ASSERT - // Parse default .hotspotrc settings file - if (!settings_file_specified) { + // Parse default .hotspotrc settings file if (!process_settings_file(".hotspotrc", false, args->ignoreUnrecognized)) { return JNI_EINVAL; } - } +#else + struct stat buf; + if (os::stat(hotspotrc, &buf) == 0) { + needs_hotspotrc_warning = true; + } #endif + } if (PrintVMOptions) { for (index = 0; index < args->nOptions; index++) { @@ -3041,6 +3063,14 @@ jint Arguments::parse(const JavaVMInitArgs* args) { return result; } + // Delay warning until here so that we've had a chance to process + // the -XX:-PrintWarnings flag + if (needs_hotspotrc_warning) { + warning("%s file is present but has been ignored. " + "Run with -XX:Flags=%s to load the file.", + hotspotrc, hotspotrc); + } + #if (defined JAVASE_EMBEDDED || defined ARM) UNSUPPORTED_OPTION(UseG1GC, "G1 GC"); #endif @@ -3333,7 +3363,7 @@ char *Arguments::get_kernel_properties() { } } // Add one for null terminator. - char *props = AllocateHeap(length + 1, "get_kernel_properties"); + char *props = AllocateHeap(length + 1, mtInternal); if (length != 0) { int pos = 0; for (prop = _system_properties; prop != NULL; prop = prop->next()) { diff --git a/hotspot/src/share/vm/runtime/arguments.hpp b/hotspot/src/share/vm/runtime/arguments.hpp index 076b4861db1..e78e45c912c 100644 --- a/hotspot/src/share/vm/runtime/arguments.hpp +++ b/hotspot/src/share/vm/runtime/arguments.hpp @@ -44,7 +44,7 @@ class SysClassPath; // Element describing System and User (-Dkey=value flags) defined property. -class SystemProperty: public CHeapObj { +class SystemProperty: public CHeapObj { private: char* _key; char* _value; @@ -63,7 +63,7 @@ class SystemProperty: public CHeapObj { if (_value != NULL) { FreeHeap(_value); } - _value = AllocateHeap(strlen(value)+1); + _value = AllocateHeap(strlen(value)+1, mtInternal); if (_value != NULL) { strcpy(_value, value); } @@ -80,7 +80,7 @@ class SystemProperty: public CHeapObj { if (_value != NULL) { len += strlen(_value); } - sp = AllocateHeap(len+2); + sp = AllocateHeap(len+2, mtInternal); if (sp != NULL) { if (_value != NULL) { strcpy(sp, _value); @@ -100,13 +100,13 @@ class SystemProperty: public CHeapObj { if (key == NULL) { _key = NULL; } else { - _key = AllocateHeap(strlen(key)+1); + _key = AllocateHeap(strlen(key)+1, mtInternal); strcpy(_key, key); } if (value == NULL) { _value = NULL; } else { - _value = AllocateHeap(strlen(value)+1); + _value = AllocateHeap(strlen(value)+1, mtInternal); strcpy(_value, value); } _next = NULL; @@ -116,7 +116,7 @@ class SystemProperty: public CHeapObj { // For use by -agentlib, -agentpath and -Xrun -class AgentLibrary : public CHeapObj { +class AgentLibrary : public CHeapObj { friend class AgentLibraryList; private: char* _name; @@ -136,12 +136,12 @@ class AgentLibrary : public CHeapObj { // Constructor AgentLibrary(const char* name, const char* options, bool is_absolute_path, void* os_lib) { - _name = AllocateHeap(strlen(name)+1); + _name = AllocateHeap(strlen(name)+1, mtInternal); strcpy(_name, name); if (options == NULL) { _options = NULL; } else { - _options = AllocateHeap(strlen(options)+1); + _options = AllocateHeap(strlen(options)+1, mtInternal); strcpy(_options, options); } _is_absolute_path = is_absolute_path; diff --git a/hotspot/src/share/vm/runtime/biasedLocking.cpp b/hotspot/src/share/vm/runtime/biasedLocking.cpp index ba49d80de08..de739ecafb1 100644 --- a/hotspot/src/share/vm/runtime/biasedLocking.cpp +++ b/hotspot/src/share/vm/runtime/biasedLocking.cpp @@ -687,8 +687,8 @@ void BiasedLocking::preserve_marks() { // monitors in a prepass and, if they are biased, preserve their // mark words here. This should be a relatively small set of objects // especially compared to the number of objects in the heap. - _preserved_mark_stack = new (ResourceObj::C_HEAP) GrowableArray(10, true); - _preserved_oop_stack = new (ResourceObj::C_HEAP) GrowableArray(10, true); + _preserved_mark_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(10, true); + _preserved_oop_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(10, true); ResourceMark rm; Thread* cur = Thread::current(); diff --git a/hotspot/src/share/vm/runtime/compilationPolicy.hpp b/hotspot/src/share/vm/runtime/compilationPolicy.hpp index 1d8427cf2fd..a0912beaf5a 100644 --- a/hotspot/src/share/vm/runtime/compilationPolicy.hpp +++ b/hotspot/src/share/vm/runtime/compilationPolicy.hpp @@ -37,7 +37,7 @@ class CompileTask; class CompileQueue; -class CompilationPolicy : public CHeapObj { +class CompilationPolicy : public CHeapObj { static CompilationPolicy* _policy; // Accumulated time static elapsedTimer _accumulated_time; diff --git a/hotspot/src/share/vm/runtime/deoptimization.cpp b/hotspot/src/share/vm/runtime/deoptimization.cpp index 0e2a9839bc5..bbb5bc3cc81 100644 --- a/hotspot/src/share/vm/runtime/deoptimization.cpp +++ b/hotspot/src/share/vm/runtime/deoptimization.cpp @@ -101,7 +101,7 @@ Deoptimization::UnrollBlock::UnrollBlock(int size_of_deoptimized_frame, _number_of_frames = number_of_frames; _frame_sizes = frame_sizes; _frame_pcs = frame_pcs; - _register_block = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2); + _register_block = NEW_C_HEAP_ARRAY(intptr_t, RegisterMap::reg_count * 2, mtCompiler); _return_type = return_type; _initial_info = 0; // PD (x86 only) @@ -114,9 +114,9 @@ Deoptimization::UnrollBlock::UnrollBlock(int size_of_deoptimized_frame, Deoptimization::UnrollBlock::~UnrollBlock() { - FREE_C_HEAP_ARRAY(intptr_t, _frame_sizes); - FREE_C_HEAP_ARRAY(intptr_t, _frame_pcs); - FREE_C_HEAP_ARRAY(intptr_t, _register_block); + FREE_C_HEAP_ARRAY(intptr_t, _frame_sizes, mtCompiler); + FREE_C_HEAP_ARRAY(intptr_t, _frame_pcs, mtCompiler); + FREE_C_HEAP_ARRAY(intptr_t, _register_block, mtCompiler); } @@ -358,9 +358,9 @@ Deoptimization::UnrollBlock* Deoptimization::fetch_unroll_info_helper(JavaThread // Compute the vframes' sizes. Note that frame_sizes[] entries are ordered from outermost to innermost // virtual activation, which is the reverse of the elements in the vframes array. - intptr_t* frame_sizes = NEW_C_HEAP_ARRAY(intptr_t, number_of_frames); + intptr_t* frame_sizes = NEW_C_HEAP_ARRAY(intptr_t, number_of_frames, mtCompiler); // +1 because we always have an interpreter return address for the final slot. - address* frame_pcs = NEW_C_HEAP_ARRAY(address, number_of_frames + 1); + address* frame_pcs = NEW_C_HEAP_ARRAY(address, number_of_frames + 1, mtCompiler); int popframe_extra_args = 0; // Create an interpreter return address for the stub to use as its return // address so the skeletal frames are perfectly walkable diff --git a/hotspot/src/share/vm/runtime/deoptimization.hpp b/hotspot/src/share/vm/runtime/deoptimization.hpp index 18225467921..23870b4e8a6 100644 --- a/hotspot/src/share/vm/runtime/deoptimization.hpp +++ b/hotspot/src/share/vm/runtime/deoptimization.hpp @@ -129,7 +129,7 @@ class Deoptimization : AllStatic { // UnrollBlock is returned by fetch_unroll_info() to the deoptimization handler (blob). // This is only a CheapObj to ease debugging after a deopt failure - class UnrollBlock : public CHeapObj { + class UnrollBlock : public CHeapObj { private: int _size_of_deoptimized_frame; // Size, in bytes, of current deoptimized frame int _caller_adjustment; // Adjustment, in bytes, to caller's SP by initial interpreted frame diff --git a/hotspot/src/share/vm/runtime/dtraceJSDT.hpp b/hotspot/src/share/vm/runtime/dtraceJSDT.hpp index bff43108439..670eabfef44 100644 --- a/hotspot/src/share/vm/runtime/dtraceJSDT.hpp +++ b/hotspot/src/share/vm/runtime/dtraceJSDT.hpp @@ -63,7 +63,7 @@ class DTraceJSDT : AllStatic { static jboolean is_supported(); }; -class RegisteredProbes : public CHeapObj { +class RegisteredProbes : public CHeapObj { private: nmethod** _nmethods; // all the probe methods size_t _count; // number of probe methods @@ -72,7 +72,7 @@ class RegisteredProbes : public CHeapObj { public: RegisteredProbes(size_t count) { _count = count; - _nmethods = NEW_C_HEAP_ARRAY(nmethod*, count); + _nmethods = NEW_C_HEAP_ARRAY(nmethod*, count, mtInternal); } ~RegisteredProbes() { @@ -81,7 +81,7 @@ class RegisteredProbes : public CHeapObj { _nmethods[i]->make_not_entrant(); _nmethods[i]->method()->clear_code(); } - FREE_C_HEAP_ARRAY(nmethod*, _nmethods); + FREE_C_HEAP_ARRAY(nmethod*, _nmethods, mtInternal); _nmethods = NULL; _count = 0; } diff --git a/hotspot/src/share/vm/runtime/fieldDescriptor.cpp b/hotspot/src/share/vm/runtime/fieldDescriptor.cpp index fc26d9cd09e..3d5213f03a2 100644 --- a/hotspot/src/share/vm/runtime/fieldDescriptor.cpp +++ b/hotspot/src/share/vm/runtime/fieldDescriptor.cpp @@ -39,6 +39,10 @@ oop fieldDescriptor::loader() const { } Symbol* fieldDescriptor::generic_signature() const { + if (!has_generic_signature()) { + return NULL; + } + int idx = 0; instanceKlass* ik = instanceKlass::cast(field_holder()); for (AllFieldStream fs(ik); !fs.done(); fs.next()) { diff --git a/hotspot/src/share/vm/runtime/fieldDescriptor.hpp b/hotspot/src/share/vm/runtime/fieldDescriptor.hpp index f2cdbadbab9..ff6649cdad4 100644 --- a/hotspot/src/share/vm/runtime/fieldDescriptor.hpp +++ b/hotspot/src/share/vm/runtime/fieldDescriptor.hpp @@ -100,6 +100,7 @@ class fieldDescriptor VALUE_OBJ_CLASS_SPEC { bool is_field_access_watched() const { return access_flags().is_field_access_watched(); } bool is_field_modification_watched() const { return access_flags().is_field_modification_watched(); } + bool has_generic_signature() const { return access_flags().field_has_generic_signature(); } void set_is_field_access_watched(const bool value) { _access_flags.set_is_field_access_watched(value); diff --git a/hotspot/src/share/vm/runtime/fprofiler.cpp b/hotspot/src/share/vm/runtime/fprofiler.cpp index 3c100aa4c98..9901fb9fa80 100644 --- a/hotspot/src/share/vm/runtime/fprofiler.cpp +++ b/hotspot/src/share/vm/runtime/fprofiler.cpp @@ -70,12 +70,12 @@ IntervalData* FlatProfiler::interval_data = NULL; ThreadProfiler::ThreadProfiler() { // Space for the ProfilerNodes const int area_size = 1 * ProfilerNodeSize * 1024; - area_bottom = AllocateHeap(area_size, "fprofiler"); + area_bottom = AllocateHeap(area_size, mtInternal); area_top = area_bottom; area_limit = area_bottom + area_size; // ProfilerNode pointer table - table = NEW_C_HEAP_ARRAY(ProfilerNode*, table_size); + table = NEW_C_HEAP_ARRAY(ProfilerNode*, table_size, mtInternal); initialize(); engaged = false; } @@ -157,7 +157,7 @@ address PCRecorder::base = NULL; void PCRecorder::init() { MutexLockerEx lm(CodeCache_lock, Mutex::_no_safepoint_check_flag); int s = size(); - counters = NEW_C_HEAP_ARRAY(int, s); + counters = NEW_C_HEAP_ARRAY(int, s, mtInternal); for (int index = 0; index < s; index++) { counters[index] = 0; } @@ -850,7 +850,7 @@ void FlatProfiler::record_thread_ticks() { if (Threads_lock->try_lock()) { { // Threads_lock scope maxthreads = Threads::number_of_threads(); - threadsList = NEW_C_HEAP_ARRAY(JavaThread *, maxthreads); + threadsList = NEW_C_HEAP_ARRAY(JavaThread *, maxthreads, mtInternal); suspendedthreadcount = 0; for (JavaThread* tp = Threads::first(); tp != NULL; tp = tp->next()) { if (tp->is_Compiler_thread()) { @@ -1195,8 +1195,8 @@ void ThreadProfiler::reset() { void FlatProfiler::allocate_table() { { // Bytecode table - bytecode_ticks = NEW_C_HEAP_ARRAY(int, Bytecodes::number_of_codes); - bytecode_ticks_stub = NEW_C_HEAP_ARRAY(int, Bytecodes::number_of_codes); + bytecode_ticks = NEW_C_HEAP_ARRAY(int, Bytecodes::number_of_codes, mtInternal); + bytecode_ticks_stub = NEW_C_HEAP_ARRAY(int, Bytecodes::number_of_codes, mtInternal); for(int index = 0; index < Bytecodes::number_of_codes; index++) { bytecode_ticks[index] = 0; bytecode_ticks_stub[index] = 0; @@ -1205,7 +1205,7 @@ void FlatProfiler::allocate_table() { if (ProfilerRecordPC) PCRecorder::init(); - interval_data = NEW_C_HEAP_ARRAY(IntervalData, interval_print_size); + interval_data = NEW_C_HEAP_ARRAY(IntervalData, interval_print_size, mtInternal); FlatProfiler::interval_reset(); } diff --git a/hotspot/src/share/vm/runtime/fprofiler.hpp b/hotspot/src/share/vm/runtime/fprofiler.hpp index 2f8d6158c29..25c2f2a10dc 100644 --- a/hotspot/src/share/vm/runtime/fprofiler.hpp +++ b/hotspot/src/share/vm/runtime/fprofiler.hpp @@ -121,7 +121,7 @@ public: }; #endif // FPROF_KERNEL -class ThreadProfiler: public CHeapObj { +class ThreadProfiler: public CHeapObj { public: ThreadProfiler() KERNEL_RETURN; ~ThreadProfiler() KERNEL_RETURN; diff --git a/hotspot/src/share/vm/runtime/globals.cpp b/hotspot/src/share/vm/runtime/globals.cpp index 474090a2a4b..3dad7a0f05d 100644 --- a/hotspot/src/share/vm/runtime/globals.cpp +++ b/hotspot/src/share/vm/runtime/globals.cpp @@ -465,13 +465,13 @@ bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, FlagValu ccstr old_value = result->get_ccstr(); char* new_value = NULL; if (*value != NULL) { - new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1); + new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1, mtInternal); strcpy(new_value, *value); } result->set_ccstr(new_value); if (result->origin == DEFAULT && old_value != NULL) { // Prior value is NOT heap allocated, but was a literal constant. - char* old_value_to_free = NEW_C_HEAP_ARRAY(char, strlen(old_value)+1); + char* old_value_to_free = NEW_C_HEAP_ARRAY(char, strlen(old_value)+1, mtInternal); strcpy(old_value_to_free, old_value); old_value = old_value_to_free; } @@ -485,12 +485,12 @@ void CommandLineFlagsEx::ccstrAtPut(CommandLineFlagWithType flag, ccstr value, F Flag* faddr = address_of_flag(flag); guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type"); ccstr old_value = faddr->get_ccstr(); - char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1); + char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1, mtInternal); strcpy(new_value, value); faddr->set_ccstr(new_value); if (faddr->origin != DEFAULT && old_value != NULL) { // Prior value is heap allocated so free it. - FREE_C_HEAP_ARRAY(char, old_value); + FREE_C_HEAP_ARRAY(char, old_value, mtInternal); } faddr->origin = origin; } @@ -511,7 +511,7 @@ void CommandLineFlags::printSetFlags(outputStream* out) { while (flagTable[length].name != NULL) length++; // Sort - Flag** array = NEW_C_HEAP_ARRAY(Flag*, length); + Flag** array = NEW_C_HEAP_ARRAY(Flag*, length, mtInternal); for (int index = 0; index < length; index++) { array[index] = &flagTable[index]; } @@ -525,7 +525,7 @@ void CommandLineFlags::printSetFlags(outputStream* out) { } } out->cr(); - FREE_C_HEAP_ARRAY(Flag*, array); + FREE_C_HEAP_ARRAY(Flag*, array, mtInternal); } #ifndef PRODUCT @@ -547,7 +547,7 @@ void CommandLineFlags::printFlags(outputStream* out, bool withComments) { while (flagTable[length].name != NULL) length++; // Sort - Flag** array = NEW_C_HEAP_ARRAY(Flag*, length); + Flag** array = NEW_C_HEAP_ARRAY(Flag*, length, mtInternal); for (int index = 0; index < length; index++) { array[index] = &flagTable[index]; } @@ -560,5 +560,5 @@ void CommandLineFlags::printFlags(outputStream* out, bool withComments) { array[i]->print_on(out, withComments); } } - FREE_C_HEAP_ARRAY(Flag*, array); + FREE_C_HEAP_ARRAY(Flag*, array, mtInternal); } diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index 758f0983163..f57a9b218c4 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -190,7 +190,6 @@ define_pd_global(uint64_t,MaxRAM, 1ULL*G); #endif // no compilers - // string type aliases used only in this file typedef const char* ccstr; typedef const char* ccstrlist; // represents string arguments which accumulate @@ -896,6 +895,9 @@ class CommandLineFlags { develop(bool, UseFakeTimers, false, \ "Tells whether the VM should use system time or a fake timer") \ \ + product(ccstr, NativeMemoryTracking, "off", \ + "Native memory tracking options") \ + \ diagnostic(bool, LogCompilation, false, \ "Log compilation activity in detail to hotspot.log or LogFile") \ \ @@ -2659,6 +2661,9 @@ class CommandLineFlags { product(bool, UseHeavyMonitors, false, \ "use heavyweight instead of lightweight Java monitors") \ \ + product(bool, PrintStringTableStatistics, false, \ + "print statistics about the StringTable and SymbolTable") \ + \ notproduct(bool, PrintSymbolTableSizeHistogram, false, \ "print histogram of the symbol table") \ \ @@ -3700,7 +3705,7 @@ class CommandLineFlags { \ /* Properties for Java libraries */ \ \ - product(intx, MaxDirectMemorySize, -1, \ + product(uintx, MaxDirectMemorySize, 0, \ "Maximum total size of NIO direct-buffer allocations") \ \ /* temporary developer defined flags */ \ diff --git a/hotspot/src/share/vm/runtime/handles.cpp b/hotspot/src/share/vm/runtime/handles.cpp index 3c24f81ce0d..1ddbacc444b 100644 --- a/hotspot/src/share/vm/runtime/handles.cpp +++ b/hotspot/src/share/vm/runtime/handles.cpp @@ -111,7 +111,7 @@ void HandleMark::initialize(Thread* thread) { _chunk = _area->_chunk; _hwm = _area->_hwm; _max = _area->_max; - NOT_PRODUCT(_size_in_bytes = _area->_size_in_bytes;) + _size_in_bytes = _area->_size_in_bytes; debug_only(_area->_handle_mark_nesting++); assert(_area->_handle_mark_nesting > 0, "must stack allocate HandleMarks"); debug_only(Atomic::inc(&_nof_handlemarks);) @@ -159,7 +159,7 @@ HandleMark::~HandleMark() { area->_chunk = _chunk; area->_hwm = _hwm; area->_max = _max; - NOT_PRODUCT(area->set_size_in_bytes(_size_in_bytes);) + area->set_size_in_bytes(_size_in_bytes); #ifdef ASSERT // clear out first chunk (to detect allocation bugs) if (ZapVMHandleArea) { diff --git a/hotspot/src/share/vm/runtime/handles.hpp b/hotspot/src/share/vm/runtime/handles.hpp index d9d71e67010..e2b2d49713e 100644 --- a/hotspot/src/share/vm/runtime/handles.hpp +++ b/hotspot/src/share/vm/runtime/handles.hpp @@ -238,7 +238,6 @@ DEF_KLASS_HANDLE(constantPoolCacheKlass, oop_is_constantPool ) //------------------------------------------------------------------------------------------------------------------------ // Thread local handle area - class HandleArea: public Arena { friend class HandleMark; friend class NoHandleMark; @@ -312,7 +311,7 @@ class HandleMark { HandleArea *_area; // saved handle area Chunk *_chunk; // saved arena chunk char *_hwm, *_max; // saved arena info - NOT_PRODUCT(size_t _size_in_bytes;) // size of handle area + size_t _size_in_bytes; // size of handle area // Link to previous active HandleMark in thread HandleMark* _previous_handle_mark; diff --git a/hotspot/src/share/vm/runtime/handles.inline.hpp b/hotspot/src/share/vm/runtime/handles.inline.hpp index 3bd42fb2e17..806d66fca9b 100644 --- a/hotspot/src/share/vm/runtime/handles.inline.hpp +++ b/hotspot/src/share/vm/runtime/handles.inline.hpp @@ -85,7 +85,7 @@ inline void HandleMark::pop_and_restore() { area->_chunk = _chunk; area->_hwm = _hwm; area->_max = _max; - NOT_PRODUCT(area->set_size_in_bytes(_size_in_bytes);) + area->set_size_in_bytes(_size_in_bytes); debug_only(area->_handle_mark_nesting--); } diff --git a/hotspot/src/share/vm/runtime/init.cpp b/hotspot/src/share/vm/runtime/init.cpp index c0e870ea26e..d46de5c6532 100644 --- a/hotspot/src/share/vm/runtime/init.cpp +++ b/hotspot/src/share/vm/runtime/init.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/symbolTable.hpp" #include "code/icBuffer.hpp" #include "gc_interface/collectedHeap.hpp" #include "interpreter/bytecodes.hpp" @@ -157,6 +158,10 @@ void exit_globals() { // Print the collected safepoint statistics. SafepointSynchronize::print_stat_on_exit(); } + if (PrintStringTableStatistics) { + SymbolTable::dump(tty); + StringTable::dump(tty); + } ostream_exit(); } } diff --git a/hotspot/src/share/vm/runtime/java.cpp b/hotspot/src/share/vm/runtime/java.cpp index f256e515e9c..ed888adb43f 100644 --- a/hotspot/src/share/vm/runtime/java.cpp +++ b/hotspot/src/share/vm/runtime/java.cpp @@ -384,7 +384,7 @@ extern "C" { typedef void (*__exit_proc)(void); } -class ExitProc : public CHeapObj { +class ExitProc : public CHeapObj { private: __exit_proc _proc; // void (*_proc)(void); @@ -660,6 +660,7 @@ void vm_shutdown_during_initialization(const char* error, const char* message) { } JDK_Version JDK_Version::_current; +const char* JDK_Version::_runtime_name; void JDK_Version::initialize() { jdk_version_info info; diff --git a/hotspot/src/share/vm/runtime/java.hpp b/hotspot/src/share/vm/runtime/java.hpp index 102fd6b7acd..1d2b45b6967 100644 --- a/hotspot/src/share/vm/runtime/java.hpp +++ b/hotspot/src/share/vm/runtime/java.hpp @@ -74,6 +74,7 @@ class JDK_Version VALUE_OBJ_CLASS_SPEC { private: static JDK_Version _current; + static const char* _runtime_name; // In this class, we promote the minor version of release to be the // major version for releases >= 5 in anticipation of the JDK doing the @@ -181,6 +182,13 @@ class JDK_Version VALUE_OBJ_CLASS_SPEC { void to_string(char* buffer, size_t buflen) const; + static const char* runtime_name() { + return _runtime_name; + } + static void set_runtime_name(const char* name) { + _runtime_name = name; + } + // Convenience methods for queries on the current major/minor version static bool is_jdk12x_version() { return current().compare_major(2) == 0; diff --git a/hotspot/src/share/vm/runtime/jniHandles.hpp b/hotspot/src/share/vm/runtime/jniHandles.hpp index a3b2f9c4c29..71bb1dd8949 100644 --- a/hotspot/src/share/vm/runtime/jniHandles.hpp +++ b/hotspot/src/share/vm/runtime/jniHandles.hpp @@ -109,7 +109,7 @@ class JNIHandles : AllStatic { // JNI handle blocks holding local/global JNI handles -class JNIHandleBlock : public CHeapObj { +class JNIHandleBlock : public CHeapObj { friend class VMStructs; friend class CppInterpreter; diff --git a/hotspot/src/share/vm/runtime/monitorChunk.cpp b/hotspot/src/share/vm/runtime/monitorChunk.cpp index 1a4be7920e8..f8793fdeaee 100644 --- a/hotspot/src/share/vm/runtime/monitorChunk.cpp +++ b/hotspot/src/share/vm/runtime/monitorChunk.cpp @@ -29,7 +29,7 @@ MonitorChunk::MonitorChunk(int number_on_monitors) { _number_of_monitors = number_on_monitors; - _monitors = NEW_C_HEAP_ARRAY(BasicObjectLock, number_on_monitors); + _monitors = NEW_C_HEAP_ARRAY(BasicObjectLock, number_on_monitors, mtInternal); _next = NULL; } diff --git a/hotspot/src/share/vm/runtime/monitorChunk.hpp b/hotspot/src/share/vm/runtime/monitorChunk.hpp index 66d62438c57..eca92a6b4a7 100644 --- a/hotspot/src/share/vm/runtime/monitorChunk.hpp +++ b/hotspot/src/share/vm/runtime/monitorChunk.hpp @@ -30,7 +30,7 @@ // Data structure for holding monitors for one activation during // deoptimization. -class MonitorChunk: public CHeapObj { +class MonitorChunk: public CHeapObj { private: int _number_of_monitors; BasicObjectLock* _monitors; diff --git a/hotspot/src/share/vm/runtime/mutex.hpp b/hotspot/src/share/vm/runtime/mutex.hpp index 66a3295c857..7d2cd82724f 100644 --- a/hotspot/src/share/vm/runtime/mutex.hpp +++ b/hotspot/src/share/vm/runtime/mutex.hpp @@ -84,7 +84,7 @@ class ParkEvent ; // The default length of monitor name is chosen to be 64 to avoid false sharing. static const int MONITOR_NAME_LEN = 64; -class Monitor : public CHeapObj { +class Monitor : public CHeapObj { public: // A special lock: Is a lock where you are guaranteed not to block while you are diff --git a/hotspot/src/share/vm/runtime/os.cpp b/hotspot/src/share/vm/runtime/os.cpp index 33495d66d43..d9395b3ad0c 100644 --- a/hotspot/src/share/vm/runtime/os.cpp +++ b/hotspot/src/share/vm/runtime/os.cpp @@ -45,6 +45,7 @@ #include "runtime/os.hpp" #include "runtime/stubRoutines.hpp" #include "services/attachListener.hpp" +#include "services/memTracker.hpp" #include "services/threadService.hpp" #include "utilities/defaultStream.hpp" #include "utilities/events.hpp" @@ -433,9 +434,9 @@ void* os::native_java_library() { // --------------------- heap allocation utilities --------------------- -char *os::strdup(const char *str) { +char *os::strdup(const char *str, MEMFLAGS flags) { size_t size = strlen(str); - char *dup_str = (char *)malloc(size + 1); + char *dup_str = (char *)malloc(size + 1, flags); if (dup_str == NULL) return NULL; strcpy(dup_str, str); return dup_str; @@ -559,7 +560,7 @@ void verify_block(void* memblock) { } #endif -void* os::malloc(size_t size) { +void* os::malloc(size_t size, MEMFLAGS memflags, address caller) { NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); @@ -571,6 +572,7 @@ void* os::malloc(size_t size) { NOT_PRODUCT(if (MallocVerifyInterval > 0) check_heap()); u_char* ptr = (u_char*)::malloc(size + space_before + space_after); + #ifdef ASSERT if (ptr == NULL) return NULL; if (MallocCushion) { @@ -589,18 +591,29 @@ void* os::malloc(size_t size) { } debug_only(if (paranoid) verify_block(memblock)); if (PrintMalloc && tty != NULL) tty->print_cr("os::malloc " SIZE_FORMAT " bytes --> " PTR_FORMAT, size, memblock); + + // we do not track MallocCushion memory + if (MemTracker::is_on()) { + MemTracker::record_malloc((address)memblock, size, memflags, caller == 0 ? CALLER_PC : caller); + } + return memblock; } -void* os::realloc(void *memblock, size_t size) { +void* os::realloc(void *memblock, size_t size, MEMFLAGS memflags, address caller) { #ifndef ASSERT NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); - return ::realloc(memblock, size); + void* ptr = ::realloc(memblock, size); + if (ptr != NULL && MemTracker::is_on()) { + MemTracker::record_realloc((address)memblock, (address)ptr, size, memflags, + caller == 0 ? CALLER_PC : caller); + } + return ptr; #else if (memblock == NULL) { - return malloc(size); + return malloc(size, memflags, (caller == 0 ? CALLER_PC : caller)); } if ((intptr_t)memblock == (intptr_t)MallocCatchPtr) { tty->print_cr("os::realloc caught " PTR_FORMAT, memblock); @@ -610,7 +623,7 @@ void* os::realloc(void *memblock, size_t size) { NOT_PRODUCT(if (MallocVerifyInterval > 0) check_heap()); if (size == 0) return NULL; // always move the block - void* ptr = malloc(size); + void* ptr = malloc(size, memflags, caller == 0 ? CALLER_PC : caller); if (PrintMalloc) tty->print_cr("os::remalloc " SIZE_FORMAT " bytes, " PTR_FORMAT " --> " PTR_FORMAT, size, memblock, ptr); // Copy to new memory if malloc didn't fail if ( ptr != NULL ) { @@ -627,7 +640,7 @@ void* os::realloc(void *memblock, size_t size) { } -void os::free(void *memblock) { +void os::free(void *memblock, MEMFLAGS memflags) { NOT_PRODUCT(inc_stat_counter(&num_frees, 1)); #ifdef ASSERT if (memblock == NULL) return; @@ -660,6 +673,8 @@ void os::free(void *memblock) { fprintf(stderr, "os::free " PTR_FORMAT "\n", (uintptr_t)memblock); } #endif + MemTracker::record_free((address)memblock, memflags); + ::free((char*)memblock - space_before); } @@ -1048,7 +1063,7 @@ char* os::format_boot_path(const char* format_string, ++formatted_path_len; } - char* formatted_path = NEW_C_HEAP_ARRAY(char, formatted_path_len + 1); + char* formatted_path = NEW_C_HEAP_ARRAY(char, formatted_path_len + 1, mtInternal); if (formatted_path == NULL) { return NULL; } @@ -1127,7 +1142,7 @@ char** os::split_path(const char* path, int* n) { return NULL; } const char psepchar = *os::path_separator(); - char* inpath = (char*)NEW_C_HEAP_ARRAY(char, strlen(path) + 1); + char* inpath = (char*)NEW_C_HEAP_ARRAY(char, strlen(path) + 1, mtInternal); if (inpath == NULL) { return NULL; } @@ -1140,7 +1155,7 @@ char** os::split_path(const char* path, int* n) { p++; p = strchr(p, psepchar); } - char** opath = (char**) NEW_C_HEAP_ARRAY(char*, count); + char** opath = (char**) NEW_C_HEAP_ARRAY(char*, count, mtInternal); if (opath == NULL) { return NULL; } @@ -1153,7 +1168,7 @@ char** os::split_path(const char* path, int* n) { return NULL; } // allocate the string and add terminator storage - char* s = (char*)NEW_C_HEAP_ARRAY(char, len + 1); + char* s = (char*)NEW_C_HEAP_ARRAY(char, len + 1, mtInternal); if (s == NULL) { return NULL; } @@ -1162,7 +1177,7 @@ char** os::split_path(const char* path, int* n) { opath[i] = s; p += len + 1; } - FREE_C_HEAP_ARRAY(char, inpath); + FREE_C_HEAP_ARRAY(char, inpath, mtInternal); *n = count; return opath; } @@ -1366,3 +1381,97 @@ int os::get_line_chars(int fd, char* buf, const size_t bsize){ return (int) i; } + +bool os::create_stack_guard_pages(char* addr, size_t bytes) { + return os::pd_create_stack_guard_pages(addr, bytes); +} + + +char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { + char* result = pd_reserve_memory(bytes, addr, alignment_hint); + if (result != NULL && MemTracker::is_on()) { + MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + } + + return result; +} +char* os::attempt_reserve_memory_at(size_t bytes, char* addr) { + char* result = pd_attempt_reserve_memory_at(bytes, addr); + if (result != NULL && MemTracker::is_on()) { + MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + } + return result; +} + +void os::split_reserved_memory(char *base, size_t size, + size_t split, bool realloc) { + pd_split_reserved_memory(base, size, split, realloc); +} + +bool os::commit_memory(char* addr, size_t bytes, bool executable) { + bool res = pd_commit_memory(addr, bytes, executable); + if (res && MemTracker::is_on()) { + MemTracker::record_virtual_memory_commit((address)addr, bytes, CALLER_PC); + } + return res; +} + +bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, + bool executable) { + bool res = os::pd_commit_memory(addr, size, alignment_hint, executable); + if (res && MemTracker::is_on()) { + MemTracker::record_virtual_memory_commit((address)addr, size, CALLER_PC); + } + return res; +} + +bool os::uncommit_memory(char* addr, size_t bytes) { + bool res = pd_uncommit_memory(addr, bytes); + if (res) { + MemTracker::record_virtual_memory_uncommit((address)addr, bytes); + } + return res; +} + +bool os::release_memory(char* addr, size_t bytes) { + bool res = pd_release_memory(addr, bytes); + if (res) { + MemTracker::record_virtual_memory_release((address)addr, bytes); + } + return res; +} + + +char* os::map_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only, + bool allow_exec) { + char* result = pd_map_memory(fd, file_name, file_offset, addr, bytes, read_only, allow_exec); + if (result != NULL && MemTracker::is_on()) { + MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + } + return result; +} + +char* os::remap_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only, + bool allow_exec) { + return pd_remap_memory(fd, file_name, file_offset, addr, bytes, + read_only, allow_exec); +} + +bool os::unmap_memory(char *addr, size_t bytes) { + bool result = pd_unmap_memory(addr, bytes); + if (result) { + MemTracker::record_virtual_memory_release((address)addr, bytes); + } + return result; +} + +void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) { + pd_free_memory(addr, bytes, alignment_hint); +} + +void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { + pd_realign_memory(addr, bytes, alignment_hint); +} + diff --git a/hotspot/src/share/vm/runtime/os.hpp b/hotspot/src/share/vm/runtime/os.hpp index 68f8a3ab62a..508edba8a3e 100644 --- a/hotspot/src/share/vm/runtime/os.hpp +++ b/hotspot/src/share/vm/runtime/os.hpp @@ -99,6 +99,28 @@ class os: AllStatic { _page_sizes[1] = 0; // sentinel } + static char* pd_reserve_memory(size_t bytes, char* addr = 0, + size_t alignment_hint = 0); + static char* pd_attempt_reserve_memory_at(size_t bytes, char* addr); + static void pd_split_reserved_memory(char *base, size_t size, + size_t split, bool realloc); + static bool pd_commit_memory(char* addr, size_t bytes, bool executable = false); + static bool pd_commit_memory(char* addr, size_t size, size_t alignment_hint, + bool executable = false); + static bool pd_uncommit_memory(char* addr, size_t bytes); + static bool pd_release_memory(char* addr, size_t bytes); + + static char* pd_map_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only = false, + bool allow_exec = false); + static char* pd_remap_memory(int fd, const char* file_name, size_t file_offset, + char *addr, size_t bytes, bool read_only, + bool allow_exec); + static bool pd_unmap_memory(char *addr, size_t bytes); + static void pd_free_memory(char *addr, size_t bytes, size_t alignment_hint); + static void pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint); + + public: static void init(void); // Called before command line parsing static jint init_2(void); // Called after command line parsing @@ -236,8 +258,7 @@ class os: AllStatic { static char* attempt_reserve_memory_at(size_t bytes, char* addr); static void split_reserved_memory(char *base, size_t size, size_t split, bool realloc); - static bool commit_memory(char* addr, size_t bytes, - bool executable = false); + static bool commit_memory(char* addr, size_t bytes, bool executable = false); static bool commit_memory(char* addr, size_t size, size_t alignment_hint, bool executable = false); static bool uncommit_memory(char* addr, size_t bytes); @@ -250,6 +271,7 @@ class os: AllStatic { static bool guard_memory(char* addr, size_t bytes); static bool unguard_memory(char* addr, size_t bytes); static bool create_stack_guard_pages(char* addr, size_t bytes); + static bool pd_create_stack_guard_pages(char* addr, size_t bytes); static bool remove_stack_guard_pages(char* addr, size_t bytes); static char* map_memory(int fd, const char* file_name, size_t file_offset, @@ -573,12 +595,15 @@ class os: AllStatic { static void* thread_local_storage_at(int index); static void free_thread_local_storage(int index); + // Stack walk + static address get_caller_pc(int n = 0); + // General allocation (must be MT-safe) - static void* malloc (size_t size); - static void* realloc (void *memblock, size_t size); - static void free (void *memblock); + static void* malloc (size_t size, MEMFLAGS flags, address caller_pc = 0); + static void* realloc (void *memblock, size_t size, MEMFLAGS flags, address caller_pc = 0); + static void free (void *memblock, MEMFLAGS flags = mtNone); static bool check_heap(bool force = false); // verify C heap integrity - static char* strdup(const char *); // Like strdup + static char* strdup(const char *, MEMFLAGS flags = mtInternal); // Like strdup #ifndef PRODUCT static julong num_mallocs; // # of calls to malloc/realloc @@ -640,6 +665,10 @@ class os: AllStatic { // On Windows this will create an actual minidump, on Linux/Solaris it will simply check core dump limits static void check_or_create_dump(void* exceptionRecord, void* contextRecord, char* buffer, size_t bufferSize); + // Get the default path to the core file + // Returns the length of the string + static int get_core_path(char* buffer, size_t bufferSize); + // JVMTI & JVM monitoring and management support // The thread_cpu_time() and current_thread_cpu_time() are only // supported if is_thread_cpu_time_supported() returns true. diff --git a/hotspot/src/share/vm/runtime/osThread.hpp b/hotspot/src/share/vm/runtime/osThread.hpp index c0f2b1932c9..1dfcb376163 100644 --- a/hotspot/src/share/vm/runtime/osThread.hpp +++ b/hotspot/src/share/vm/runtime/osThread.hpp @@ -58,7 +58,7 @@ enum ThreadState { // the main thread into its own Thread at will. -class OSThread: public CHeapObj { +class OSThread: public CHeapObj { friend class VMStructs; private: OSThreadStartFunc _start_proc; // Thread start routine diff --git a/hotspot/src/share/vm/runtime/park.cpp b/hotspot/src/share/vm/runtime/park.cpp index 1be5733321a..8d91d0b6887 100644 --- a/hotspot/src/share/vm/runtime/park.cpp +++ b/hotspot/src/share/vm/runtime/park.cpp @@ -141,7 +141,7 @@ void ParkEvent::Release (ParkEvent * ev) { // although Niagara's hash function should help. void * ParkEvent::operator new (size_t sz) { - return (void *) ((intptr_t (CHeapObj::operator new (sz + 256)) + 256) & -256) ; + return (void *) ((intptr_t (AllocateHeap(sz + 256, mtInternal, CALLER_PC)) + 256) & -256) ; } void ParkEvent::operator delete (void * a) { diff --git a/hotspot/src/share/vm/runtime/perfData.cpp b/hotspot/src/share/vm/runtime/perfData.cpp index 04631ec260b..3d4bf2da8a4 100644 --- a/hotspot/src/share/vm/runtime/perfData.cpp +++ b/hotspot/src/share/vm/runtime/perfData.cpp @@ -81,7 +81,7 @@ PerfData::PerfData(CounterNS ns, const char* name, Units u, Variability v) const char* prefix = PerfDataManager::ns_to_string(ns); - _name = NEW_C_HEAP_ARRAY(char, strlen(name) + strlen(prefix) + 2); + _name = NEW_C_HEAP_ARRAY(char, strlen(name) + strlen(prefix) + 2, mtInternal); assert(_name != NULL && strlen(name) != 0, "invalid name"); if (ns == NULL_NS) { @@ -111,10 +111,10 @@ PerfData::PerfData(CounterNS ns, const char* name, Units u, Variability v) PerfData::~PerfData() { if (_name != NULL) { - FREE_C_HEAP_ARRAY(char, _name); + FREE_C_HEAP_ARRAY(char, _name, mtInternal); } if (is_on_c_heap()) { - FREE_C_HEAP_ARRAY(PerfDataEntry, _pdep); + FREE_C_HEAP_ARRAY(PerfDataEntry, _pdep, mtInternal); } } @@ -137,7 +137,7 @@ void PerfData::create_entry(BasicType dtype, size_t dsize, size_t vlen) { if (psmp == NULL) { // out of PerfMemory memory resources. allocate on the C heap // to avoid vm termination. - psmp = NEW_C_HEAP_ARRAY(char, size); + psmp = NEW_C_HEAP_ARRAY(char, size, mtInternal); _on_c_heap = true; } @@ -559,12 +559,12 @@ PerfLongCounter* PerfDataManager::create_long_counter(CounterNS ns, PerfDataList::PerfDataList(int length) { - _set = new(ResourceObj::C_HEAP) PerfDataArray(length, true); + _set = new(ResourceObj::C_HEAP, mtInternal) PerfDataArray(length, true); } PerfDataList::PerfDataList(PerfDataList* p) { - _set = new(ResourceObj::C_HEAP) PerfDataArray(p->length(), true); + _set = new(ResourceObj::C_HEAP, mtInternal) PerfDataArray(p->length(), true); _set->appendAll(p->get_impl()); } diff --git a/hotspot/src/share/vm/runtime/perfData.hpp b/hotspot/src/share/vm/runtime/perfData.hpp index 2f84ee62008..2552fe8badb 100644 --- a/hotspot/src/share/vm/runtime/perfData.hpp +++ b/hotspot/src/share/vm/runtime/perfData.hpp @@ -240,7 +240,7 @@ enum CounterNS { * be removed from the product in the future. * */ -class PerfData : public CHeapObj { +class PerfData : public CHeapObj { friend class StatSampler; // for access to protected void sample() friend class PerfDataManager; // for access to protected destructor @@ -342,7 +342,7 @@ class PerfData : public CHeapObj { * invoke the take_sample() method and write the value returned to its * appropriate location in the PerfData memory region. */ -class PerfLongSampleHelper : public CHeapObj { +class PerfLongSampleHelper : public CHeapObj { public: virtual jlong take_sample() = 0; }; @@ -591,7 +591,7 @@ class PerfStringVariable : public PerfString { * some other implementation, as long as that implementation provides * a mechanism to iterate over the container by index. */ -class PerfDataList : public CHeapObj { +class PerfDataList : public CHeapObj { private: diff --git a/hotspot/src/share/vm/runtime/perfMemory.cpp b/hotspot/src/share/vm/runtime/perfMemory.cpp index 0855b38c97f..26ef55e5f58 100644 --- a/hotspot/src/share/vm/runtime/perfMemory.cpp +++ b/hotspot/src/share/vm/runtime/perfMemory.cpp @@ -112,7 +112,7 @@ void PerfMemory::initialize() { warning("Could not create PerfData Memory region, reverting to malloc"); } - _prologue = NEW_C_HEAP_OBJ(PerfDataPrologue); + _prologue = NEW_C_HEAP_OBJ(PerfDataPrologue, mtInternal); } else { @@ -244,10 +244,10 @@ char* PerfMemory::get_perfdata_file_path() { if (PerfDataSaveFile != NULL) { // dest_file_name stores the validated file name if file_name // contains %p which will be replaced by pid. - dest_file = NEW_C_HEAP_ARRAY(char, JVM_MAXPATHLEN); + dest_file = NEW_C_HEAP_ARRAY(char, JVM_MAXPATHLEN, mtInternal); if(!Arguments::copy_expand_pid(PerfDataSaveFile, strlen(PerfDataSaveFile), dest_file, JVM_MAXPATHLEN)) { - FREE_C_HEAP_ARRAY(char, dest_file); + FREE_C_HEAP_ARRAY(char, dest_file, mtInternal); if (PrintMiscellaneous && Verbose) { warning("Invalid performance data file path name specified, "\ "fall back to a default name"); @@ -257,7 +257,7 @@ char* PerfMemory::get_perfdata_file_path() { } } // create the name of the file for retaining the instrumentation memory. - dest_file = NEW_C_HEAP_ARRAY(char, PERFDATA_FILENAME_LEN); + dest_file = NEW_C_HEAP_ARRAY(char, PERFDATA_FILENAME_LEN, mtInternal); jio_snprintf(dest_file, PERFDATA_FILENAME_LEN, "%s_%d", PERFDATA_NAME, os::current_process_id()); diff --git a/hotspot/src/share/vm/runtime/reflection.cpp b/hotspot/src/share/vm/runtime/reflection.cpp index 04b896722d1..001d87b2853 100644 --- a/hotspot/src/share/vm/runtime/reflection.cpp +++ b/hotspot/src/share/vm/runtime/reflection.cpp @@ -829,7 +829,7 @@ oop Reflection::new_field(fieldDescriptor* fd, bool intern_name, TRAPS) { java_lang_reflect_Field::set_modifiers(rh(), fd->access_flags().as_int() & JVM_RECOGNIZED_FIELD_MODIFIERS); java_lang_reflect_Field::set_override(rh(), false); if (java_lang_reflect_Field::has_signature_field() && - fd->generic_signature() != NULL) { + fd->has_generic_signature()) { Symbol* gs = fd->generic_signature(); Handle sig = java_lang_String::create_from_symbol(gs, CHECK_NULL); java_lang_reflect_Field::set_signature(rh(), sig()); diff --git a/hotspot/src/share/vm/runtime/reflectionUtils.cpp b/hotspot/src/share/vm/runtime/reflectionUtils.cpp index 6c6e8c361b6..e8a986ab346 100644 --- a/hotspot/src/share/vm/runtime/reflectionUtils.cpp +++ b/hotspot/src/share/vm/runtime/reflectionUtils.cpp @@ -59,7 +59,7 @@ bool KlassStream::eos() { GrowableArray *FilteredFieldsMap::_filtered_fields = - new (ResourceObj::C_HEAP) GrowableArray(3,true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(3,true); void FilteredFieldsMap::initialize() { diff --git a/hotspot/src/share/vm/runtime/relocator.cpp b/hotspot/src/share/vm/runtime/relocator.cpp index a3970907761..e385b22fee7 100644 --- a/hotspot/src/share/vm/runtime/relocator.cpp +++ b/hotspot/src/share/vm/runtime/relocator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -392,16 +392,16 @@ void Relocator::change_jumps(int break_bci, int delta) { // The width of instruction at "pc" is changing by "delta". Adjust the // exception table, if any, of "rc->mb". void Relocator::adjust_exception_table(int bci, int delta) { - typeArrayOop table = method()->exception_table(); - for (int index = 0; index < table->length(); index +=4) { - if (table->int_at(index) > bci) { - table->int_at_put(index+0, table->int_at(index+0) + delta); - table->int_at_put(index+1, table->int_at(index+1) + delta); - } else if (bci < table->int_at(index+1)) { - table->int_at_put(index+1, table->int_at(index+1) + delta); + ExceptionTable table(_method()); + for (int index = 0; index < table.length(); index ++) { + if (table.start_pc(index) > bci) { + table.set_start_pc(index, table.start_pc(index) + delta); + table.set_end_pc(index, table.end_pc(index) + delta); + } else if (bci < table.end_pc(index)) { + table.set_end_pc(index, table.end_pc(index) + delta); } - if (table->int_at(index+2) > bci) - table->int_at_put(index+2, table->int_at(index+2) + delta); + if (table.handler_pc(index) > bci) + table.set_handler_pc(index, table.handler_pc(index) + delta); } } diff --git a/hotspot/src/share/vm/runtime/safepoint.cpp b/hotspot/src/share/vm/runtime/safepoint.cpp index 514e7c97657..31b33e320ec 100644 --- a/hotspot/src/share/vm/runtime/safepoint.cpp +++ b/hotspot/src/share/vm/runtime/safepoint.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" #include "code/icBuffer.hpp" @@ -47,6 +48,7 @@ #include "runtime/stubRoutines.hpp" #include "runtime/sweeper.hpp" #include "runtime/synchronizer.hpp" +#include "services/memTracker.hpp" #include "services/runtimeService.hpp" #include "utilities/events.hpp" #ifdef TARGET_ARCH_x86 @@ -526,13 +528,29 @@ void SafepointSynchronize::do_cleanup_tasks() { CompilationPolicy::policy()->do_safepoint_work(); } - TraceTime t4("sweeping nmethods", TraceSafepointCleanupTime); - NMethodSweeper::scan_stacks(); + { + TraceTime t4("sweeping nmethods", TraceSafepointCleanupTime); + NMethodSweeper::scan_stacks(); + } + + if (SymbolTable::needs_rehashing()) { + TraceTime t5("rehashing symbol table", TraceSafepointCleanupTime); + SymbolTable::rehash_table(); + } + + if (StringTable::needs_rehashing()) { + TraceTime t6("rehashing string table", TraceSafepointCleanupTime); + StringTable::rehash_table(); + } // rotate log files? if (UseGCLogFileRotation) { gclog_or_tty->rotate_log(); } + + if (MemTracker::is_on()) { + MemTracker::sync(); + } } @@ -1144,7 +1162,7 @@ void SafepointSynchronize::deferred_initialize_stat() { stats_array_size = PrintSafepointStatisticsCount; } _safepoint_stats = (SafepointStats*)os::malloc(stats_array_size - * sizeof(SafepointStats)); + * sizeof(SafepointStats), mtInternal); guarantee(_safepoint_stats != NULL, "not enough memory for safepoint instrumentation data"); diff --git a/hotspot/src/share/vm/runtime/safepoint.hpp b/hotspot/src/share/vm/runtime/safepoint.hpp index 71255a27d48..005ea4d0360 100644 --- a/hotspot/src/share/vm/runtime/safepoint.hpp +++ b/hotspot/src/share/vm/runtime/safepoint.hpp @@ -190,7 +190,7 @@ public: }; // State class for a thread suspended at a safepoint -class ThreadSafepointState: public CHeapObj { +class ThreadSafepointState: public CHeapObj { public: // These states are maintained by VM thread while threads are being brought // to a safepoint. After SafepointSynchronize::end(), they are reset to diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.cpp b/hotspot/src/share/vm/runtime/sharedRuntime.cpp index 503ad0719fd..7c74f493008 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp +++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp @@ -2117,7 +2117,7 @@ void SharedRuntime::print_call_statistics(int comp_total) { // A simple wrapper class around the calling convention information // that allows sharing of adapters for the same calling convention. -class AdapterFingerPrint : public CHeapObj { +class AdapterFingerPrint : public CHeapObj { private: union { int _compact[3]; @@ -2174,7 +2174,7 @@ class AdapterFingerPrint : public CHeapObj { ptr = _value._compact; } else { _length = len; - _value._fingerprint = NEW_C_HEAP_ARRAY(int, _length); + _value._fingerprint = NEW_C_HEAP_ARRAY(int, _length, mtCode); ptr = _value._fingerprint; } @@ -2193,7 +2193,7 @@ class AdapterFingerPrint : public CHeapObj { ~AdapterFingerPrint() { if (_length > 0) { - FREE_C_HEAP_ARRAY(int, _value._fingerprint); + FREE_C_HEAP_ARRAY(int, _value._fingerprint, mtCode); } } @@ -2251,7 +2251,7 @@ class AdapterFingerPrint : public CHeapObj { // A hashtable mapping from AdapterFingerPrints to AdapterHandlerEntries -class AdapterHandlerTable : public BasicHashtable { +class AdapterHandlerTable : public BasicHashtable { friend class AdapterHandlerTableIterator; private: @@ -2265,16 +2265,16 @@ class AdapterHandlerTable : public BasicHashtable { #endif AdapterHandlerEntry* bucket(int i) { - return (AdapterHandlerEntry*)BasicHashtable::bucket(i); + return (AdapterHandlerEntry*)BasicHashtable::bucket(i); } public: AdapterHandlerTable() - : BasicHashtable(293, sizeof(AdapterHandlerEntry)) { } + : BasicHashtable(293, sizeof(AdapterHandlerEntry)) { } // Create a new entry suitable for insertion in the table AdapterHandlerEntry* new_entry(AdapterFingerPrint* fingerprint, address i2c_entry, address c2i_entry, address c2i_unverified_entry) { - AdapterHandlerEntry* entry = (AdapterHandlerEntry*)BasicHashtable::new_entry(fingerprint->compute_hash()); + AdapterHandlerEntry* entry = (AdapterHandlerEntry*)BasicHashtable::new_entry(fingerprint->compute_hash()); entry->init(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry); return entry; } @@ -2287,7 +2287,7 @@ class AdapterHandlerTable : public BasicHashtable { void free_entry(AdapterHandlerEntry* entry) { entry->deallocate(); - BasicHashtable::free_entry(entry); + BasicHashtable::free_entry(entry); } // Find a entry with the same fingerprint if it exists @@ -2572,8 +2572,8 @@ void AdapterHandlerEntry::relocate(address new_base) { void AdapterHandlerEntry::deallocate() { delete _fingerprint; #ifdef ASSERT - if (_saved_code) FREE_C_HEAP_ARRAY(unsigned char, _saved_code); - if (_saved_sig) FREE_C_HEAP_ARRAY(Basictype, _saved_sig); + if (_saved_code) FREE_C_HEAP_ARRAY(unsigned char, _saved_code, mtCode); + if (_saved_sig) FREE_C_HEAP_ARRAY(Basictype, _saved_sig, mtCode); #endif } @@ -2583,11 +2583,11 @@ void AdapterHandlerEntry::deallocate() { // against other versions. If the code is captured after relocation // then relative instructions won't be equivalent. void AdapterHandlerEntry::save_code(unsigned char* buffer, int length, int total_args_passed, BasicType* sig_bt) { - _saved_code = NEW_C_HEAP_ARRAY(unsigned char, length); + _saved_code = NEW_C_HEAP_ARRAY(unsigned char, length, mtCode); _code_length = length; memcpy(_saved_code, buffer, length); _total_args_passed = total_args_passed; - _saved_sig = NEW_C_HEAP_ARRAY(BasicType, _total_args_passed); + _saved_sig = NEW_C_HEAP_ARRAY(BasicType, _total_args_passed, mtCode); memcpy(_saved_sig, sig_bt, _total_args_passed * sizeof(BasicType)); } @@ -2893,7 +2893,7 @@ JRT_LEAF(intptr_t*, SharedRuntime::OSR_migration_begin( JavaThread *thread) ) int max_locals = moop->max_locals(); // Allocate temp buffer, 1 word per local & 2 per active monitor int buf_size_words = max_locals + active_monitor_count*2; - intptr_t *buf = NEW_C_HEAP_ARRAY(intptr_t,buf_size_words); + intptr_t *buf = NEW_C_HEAP_ARRAY(intptr_t,buf_size_words, mtCode); // Copy the locals. Order is preserved so that loading of longs works. // Since there's no GC I can copy the oops blindly. @@ -2923,7 +2923,7 @@ JRT_LEAF(intptr_t*, SharedRuntime::OSR_migration_begin( JavaThread *thread) ) JRT_END JRT_LEAF(void, SharedRuntime::OSR_migration_end( intptr_t* buf) ) - FREE_C_HEAP_ARRAY(intptr_t,buf); + FREE_C_HEAP_ARRAY(intptr_t,buf, mtCode); JRT_END bool AdapterHandlerLibrary::contains(CodeBlob* b) { diff --git a/hotspot/src/share/vm/runtime/sharedRuntime.hpp b/hotspot/src/share/vm/runtime/sharedRuntime.hpp index 9650c6e11c7..cb955c46db2 100644 --- a/hotspot/src/share/vm/runtime/sharedRuntime.hpp +++ b/hotspot/src/share/vm/runtime/sharedRuntime.hpp @@ -610,7 +610,7 @@ class SharedRuntime: AllStatic { // used by the adapters. The code generation happens here because it's very // similar to what the adapters have to do. -class AdapterHandlerEntry : public BasicHashtableEntry { +class AdapterHandlerEntry : public BasicHashtableEntry { friend class AdapterHandlerTable; private: @@ -656,7 +656,7 @@ class AdapterHandlerEntry : public BasicHashtableEntry { AdapterFingerPrint* fingerprint() { return _fingerprint; } AdapterHandlerEntry* next() { - return (AdapterHandlerEntry*)BasicHashtableEntry::next(); + return (AdapterHandlerEntry*)BasicHashtableEntry::next(); } #ifdef ASSERT diff --git a/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp b/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp index bc81f5a30ec..3fb5161f8fa 100644 --- a/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp +++ b/hotspot/src/share/vm/runtime/stubCodeGenerator.hpp @@ -36,7 +36,7 @@ // Currently, code descriptors are simply chained in a linked list, // this may have to change if searching becomes too slow. -class StubCodeDesc: public CHeapObj { +class StubCodeDesc: public CHeapObj { protected: static StubCodeDesc* _list; // the list of all descriptors static int _count; // length of list diff --git a/hotspot/src/share/vm/runtime/sweeper.cpp b/hotspot/src/share/vm/runtime/sweeper.cpp index 7f8561b6b3b..2dea6d7ba7c 100644 --- a/hotspot/src/share/vm/runtime/sweeper.cpp +++ b/hotspot/src/share/vm/runtime/sweeper.cpp @@ -228,7 +228,7 @@ void NMethodSweeper::possibly_sweep() { #ifdef ASSERT if (LogSweeper && _records == NULL) { // Create the ring buffer for the logging code - _records = NEW_C_HEAP_ARRAY(SweeperRecord, SweeperLogEntries); + _records = NEW_C_HEAP_ARRAY(SweeperRecord, SweeperLogEntries, mtGC); memset(_records, 0, sizeof(SweeperRecord) * SweeperLogEntries); } #endif diff --git a/hotspot/src/share/vm/runtime/task.hpp b/hotspot/src/share/vm/runtime/task.hpp index 2357e835fb0..206442d765b 100644 --- a/hotspot/src/share/vm/runtime/task.hpp +++ b/hotspot/src/share/vm/runtime/task.hpp @@ -35,7 +35,7 @@ // ... // pf.disenroll(); -class PeriodicTask: public CHeapObj { +class PeriodicTask: public CHeapObj { public: // Useful constants. // The interval constants are used to ensure the declared interval diff --git a/hotspot/src/share/vm/runtime/thread.cpp b/hotspot/src/share/vm/runtime/thread.cpp index 76865f6ff2c..76d0c8de168 100644 --- a/hotspot/src/share/vm/runtime/thread.cpp +++ b/hotspot/src/share/vm/runtime/thread.cpp @@ -73,6 +73,7 @@ #include "runtime/vm_operations.hpp" #include "services/attachListener.hpp" #include "services/management.hpp" +#include "services/memTracker.hpp" #include "services/threadService.hpp" #include "trace/traceEventTypes.hpp" #include "utilities/defaultStream.hpp" @@ -159,6 +160,7 @@ HS_DTRACE_PROBE_DECL5(hotspot, thread__stop, char*, intptr_t, #endif // ndef DTRACE_ENABLED + // Class hierarchy // - Thread // - VMThread @@ -168,13 +170,13 @@ HS_DTRACE_PROBE_DECL5(hotspot, thread__stop, char*, intptr_t, // - CompilerThread // ======= Thread ======== - // Support for forcing alignment of thread objects for biased locking -void* Thread::operator new(size_t size) { +void* Thread::allocate(size_t size, bool throw_excpt, MEMFLAGS flags) { if (UseBiasedLocking) { const int alignment = markOopDesc::biased_lock_alignment; size_t aligned_size = size + (alignment - sizeof(intptr_t)); - void* real_malloc_addr = CHeapObj::operator new(aligned_size); + void* real_malloc_addr = throw_excpt? AllocateHeap(aligned_size, flags, CURRENT_PC) + : os::malloc(aligned_size, flags, CURRENT_PC); void* aligned_addr = (void*) align_size_up((intptr_t) real_malloc_addr, alignment); assert(((uintptr_t) aligned_addr + (uintptr_t) size) <= ((uintptr_t) real_malloc_addr + (uintptr_t) aligned_size), @@ -187,16 +189,17 @@ void* Thread::operator new(size_t size) { ((Thread*) aligned_addr)->_real_malloc_address = real_malloc_addr; return aligned_addr; } else { - return CHeapObj::operator new(size); + return throw_excpt? AllocateHeap(size, flags, CURRENT_PC) + : os::malloc(size, flags, CURRENT_PC); } } void Thread::operator delete(void* p) { if (UseBiasedLocking) { void* real_malloc_addr = ((Thread*) p)->_real_malloc_address; - CHeapObj::operator delete(real_malloc_addr); + FreeHeap(real_malloc_addr, mtThread); } else { - CHeapObj::operator delete(p); + FreeHeap(p, mtThread); } } @@ -214,8 +217,8 @@ Thread::Thread() { // allocated data structures set_osthread(NULL); - set_resource_area(new ResourceArea()); - set_handle_area(new HandleArea(NULL)); + set_resource_area(new (mtThread)ResourceArea()); + set_handle_area(new (mtThread) HandleArea(NULL)); set_active_handles(NULL); set_free_handle_block(NULL); set_last_handle_mark(NULL); @@ -306,12 +309,17 @@ void Thread::initialize_thread_local_storage() { // set up any platform-specific state. os::initialize_thread(); - } void Thread::record_stack_base_and_size() { set_stack_base(os::current_stack_base()); set_stack_size(os::current_stack_size()); + + // record thread's native stack, stack grows downward + address vm_base = _stack_base - _stack_size; + MemTracker::record_virtual_memory_reserve(vm_base, _stack_size, + CURRENT_PC, this); + MemTracker::record_virtual_memory_type(vm_base, mtThreadStack); } @@ -319,6 +327,9 @@ Thread::~Thread() { // Reclaim the objectmonitors from the omFreeList of the moribund thread. ObjectSynchronizer::omFlush (this) ; + MemTracker::record_virtual_memory_release((_stack_base - _stack_size), + _stack_size, this); + // deallocate data structures delete resource_area(); // since the handle marks are using the handle area, we have to deallocated the root @@ -996,6 +1007,29 @@ static void call_initializeSystemClass(TRAPS) { vmSymbols::void_method_signature(), CHECK); } +char java_runtime_name[128] = ""; + +// extract the JRE name from sun.misc.Version.java_runtime_name +static const char* get_java_runtime_name(TRAPS) { + klassOop k = SystemDictionary::find(vmSymbols::sun_misc_Version(), + Handle(), Handle(), CHECK_AND_CLEAR_NULL); + fieldDescriptor fd; + bool found = k != NULL && + instanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_name_name(), + vmSymbols::string_signature(), &fd); + if (found) { + oop name_oop = k->java_mirror()->obj_field(fd.offset()); + if (name_oop == NULL) + return NULL; + const char* name = java_lang_String::as_utf8_string(name_oop, + java_runtime_name, + sizeof(java_runtime_name)); + return name; + } else { + return NULL; + } +} + // General purpose hook into Java code, run once when the VM is initialized. // The Java library method itself may be changed independently from the VM. static void call_postVMInitHook(TRAPS) { @@ -1105,14 +1139,14 @@ NamedThread::NamedThread() : Thread() { NamedThread::~NamedThread() { if (_name != NULL) { - FREE_C_HEAP_ARRAY(char, _name); + FREE_C_HEAP_ARRAY(char, _name, mtThread); _name = NULL; } } void NamedThread::set_name(const char* format, ...) { guarantee(_name == NULL, "Only get to set name once."); - _name = NEW_C_HEAP_ARRAY(char, max_name_len); + _name = NEW_C_HEAP_ARRAY(char, max_name_len, mtThread); guarantee(_name != NULL, "alloc failure"); va_list ap; va_start(ap, format); @@ -1295,6 +1329,7 @@ void JavaThread::initialize() { set_monitor_chunks(NULL); set_next(NULL); set_thread_state(_thread_new); + set_recorder(NULL); _terminated = _not_terminated; _privileged_stack_top = NULL; _array_for_gc = NULL; @@ -1370,6 +1405,7 @@ JavaThread::JavaThread(bool is_attaching_via_jni) : _jni_attach_state = _not_attaching_via_jni; } assert(_deferred_card_mark.is_empty(), "Default MemRegion ctor"); + _safepoint_visible = false; } bool JavaThread::reguard_stack(address cur_sp) { @@ -1432,7 +1468,7 @@ JavaThread::JavaThread(ThreadFunction entry_point, size_t stack_sz) : thr_type = entry_point == &compiler_thread_entry ? os::compiler_thread : os::java_thread; os::create_thread(this, thr_type, stack_sz); - + _safepoint_visible = false; // The _osthread may be NULL here because we ran out of memory (too many threads active). // We need to throw and OutOfMemoryError - however we cannot do this here because the caller // may hold a lock and all locks must be unlocked before throwing the exception (throwing @@ -1450,6 +1486,11 @@ JavaThread::~JavaThread() { tty->print_cr("terminate thread %p", this); } + // Info NMT that this JavaThread is exiting, its memory + // recorder should be collected + assert(!is_safepoint_visible(), "wrong state"); + MemTracker::thread_exiting(this); + // JSR166 -- return the parker to the free list Parker::Release(_parker); _parker = NULL ; @@ -2892,7 +2933,7 @@ void JavaThread::print_stack_on(outputStream* st) { void JavaThread::popframe_preserve_args(ByteSize size_in_bytes, void* start) { assert(_popframe_preserved_args == NULL, "should not wipe out old PopFrame preserved arguments"); if (in_bytes(size_in_bytes) != 0) { - _popframe_preserved_args = NEW_C_HEAP_ARRAY(char, in_bytes(size_in_bytes)); + _popframe_preserved_args = NEW_C_HEAP_ARRAY(char, in_bytes(size_in_bytes), mtThread); _popframe_preserved_args_size = in_bytes(size_in_bytes); Copy::conjoint_jbytes(start, _popframe_preserved_args, _popframe_preserved_args_size); } @@ -2914,7 +2955,7 @@ WordSize JavaThread::popframe_preserved_args_size_in_words() { void JavaThread::popframe_free_preserved_args() { assert(_popframe_preserved_args != NULL, "should not free PopFrame preserved arguments twice"); - FREE_C_HEAP_ARRAY(char, (char*) _popframe_preserved_args); + FREE_C_HEAP_ARRAY(char, (char*) _popframe_preserved_args, mtThread); _popframe_preserved_args = NULL; _popframe_preserved_args_size = 0; } @@ -3163,6 +3204,14 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { jint os_init_2_result = os::init_2(); if (os_init_2_result != JNI_OK) return os_init_2_result; + // intialize TLS + ThreadLocalStorage::init(); + + // Bootstrap native memory tracking, so it can start recording memory + // activities before worker thread is started. This is the first phase + // of bootstrapping, VM is currently running in single-thread mode. + MemTracker::bootstrap_single_thread(); + // Initialize output stream logging ostream_init_log(); @@ -3182,9 +3231,6 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { _number_of_threads = 0; _number_of_non_daemon_threads = 0; - // Initialize TLS - ThreadLocalStorage::init(); - // Initialize global data structures and create system classes in heap vm_init_globals(); @@ -3216,6 +3262,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // Initialize Java-Level synchronization subsystem ObjectMonitor::Initialize() ; + // Second phase of bootstrapping, VM is about entering multi-thread mode + MemTracker::bootstrap_multi_thread(); + // Initialize global modules jint status = init_globals(); if (status != JNI_OK) { @@ -3243,6 +3292,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { Universe::verify(); // make sure we're starting with a clean slate } + // Fully start NMT + MemTracker::start(); + // Create the VMThread { TraceTime timer("Start VMThread", TraceStartupTime); VMThread::create(); @@ -3352,6 +3404,9 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // The VM creates & returns objects of this class. Make sure it's initialized. initialize_class(vmSymbols::java_lang_Class(), CHECK_0); call_initializeSystemClass(CHECK_0); + + // get the Java runtime name after java.lang.System is initialized + JDK_Version::set_runtime_name(get_java_runtime_name(THREAD)); } else { warning("java.lang.System not initialized"); } @@ -3544,11 +3599,11 @@ static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, const char *on_load_sym if (library == NULL) { const char *sub_msg = " in absolute path, with error: "; size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1; - char *buf = NEW_C_HEAP_ARRAY(char, len); + char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread); jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf); // If we can't find the agent, exit. vm_exit_during_initialization(buf, NULL); - FREE_C_HEAP_ARRAY(char, buf); + FREE_C_HEAP_ARRAY(char, buf, mtThread); } } else { // Try to load the agent from the standard dll directory @@ -3562,7 +3617,7 @@ static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, const char *on_load_sym const char *fmt = "%s/bin/java %s -Dkernel.background.download=false" " sun.jkernel.DownloadManager -download client_jvm"; size_t length = strlen(props) + strlen(home) + strlen(fmt) + 1; - char *cmd = NEW_C_HEAP_ARRAY(char, length); + char *cmd = NEW_C_HEAP_ARRAY(char, length, mtThread); jio_snprintf(cmd, length, fmt, home, props); int status = os::fork_and_exec(cmd); FreeHeap(props); @@ -3571,7 +3626,7 @@ static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, const char *on_load_sym vm_exit_during_initialization("fork_and_exec failed: %s", strerror(errno)); } - FREE_C_HEAP_ARRAY(char, cmd); + FREE_C_HEAP_ARRAY(char, cmd, mtThread); // when this comes back the instrument.dll should be where it belongs. library = os::dll_load(buffer, ebuf, sizeof ebuf); } @@ -3583,11 +3638,11 @@ static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, const char *on_load_sym if (library == NULL) { const char *sub_msg = " on the library path, with error: "; size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1; - char *buf = NEW_C_HEAP_ARRAY(char, len); + char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread); jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf); // If we can't find the agent, exit. vm_exit_during_initialization(buf, NULL); - FREE_C_HEAP_ARRAY(char, buf); + FREE_C_HEAP_ARRAY(char, buf, mtThread); } } } @@ -3756,6 +3811,7 @@ void JavaThread::invoke_shutdown_hooks() { // and VM_Exit op at VM level. // // Shutdown sequence: +// + Shutdown native memory tracking if it is on // + Wait until we are the last non-daemon thread to execute // <-- every thing is still working at this moment --> // + Call java.lang.Shutdown.shutdown(), which will invoke Java level @@ -3801,6 +3857,10 @@ bool Threads::destroy_vm() { Mutex::_as_suspend_equivalent_flag); } + // Shutdown NMT before exit. Otherwise, + // it will run into trouble when system destroys static variables. + MemTracker::shutdown(MemTracker::NMT_normal); + // Hang forever on exit if we are reporting an error. if (ShowMessageBoxOnError && is_error_reported()) { os::infinite_sleep(); @@ -3907,6 +3967,8 @@ void Threads::add(JavaThread* p, bool force_daemon) { daemon = false; } + p->set_safepoint_visible(true); + ThreadService::add_thread(p, daemon); // Possible GC point. @@ -3952,6 +4014,10 @@ void Threads::remove(JavaThread* p) { // to do callbacks into the safepoint code. However, the safepoint code is not aware // of this thread since it is removed from the queue. p->set_terminated_value(); + + // Now, this thread is not visible to safepoint + p->set_safepoint_visible(false); + } // unlock Threads_lock // Since Events::log uses a lock, we grab it outside the Threads_lock diff --git a/hotspot/src/share/vm/runtime/thread.hpp b/hotspot/src/share/vm/runtime/thread.hpp index 7846cc07058..a375f264ff8 100644 --- a/hotspot/src/share/vm/runtime/thread.hpp +++ b/hotspot/src/share/vm/runtime/thread.hpp @@ -41,6 +41,7 @@ #include "runtime/stubRoutines.hpp" #include "runtime/threadLocalStorage.hpp" #include "runtime/unhandledOops.hpp" +#include "services/memRecorder.hpp" #include "trace/tracing.hpp" #include "utilities/exceptions.hpp" #include "utilities/top.hpp" @@ -100,12 +101,16 @@ class Thread: public ThreadShadow { //oop _pending_exception; // pending exception for current thread // const char* _exception_file; // file information for exception (debugging only) // int _exception_line; // line information for exception (debugging only) - + protected: // Support for forcing alignment of thread objects for biased locking void* _real_malloc_address; public: - void* operator new(size_t size); + void* operator new(size_t size) { return allocate(size, true); } + void* operator new(size_t size, std::nothrow_t& nothrow_constant) { return allocate(size, false); } void operator delete(void* p); + + protected: + static void* allocate(size_t size, bool throw_excpt, MEMFLAGS flags = mtThread); private: // *************************************************************** @@ -548,7 +553,6 @@ public: virtual void print_on_error(outputStream* st, char* buf, int buflen) const; // Debug-only code - #ifdef ASSERT private: // Deadlock detection support for Mutex locks. List of locks own by thread. @@ -1027,9 +1031,15 @@ class JavaThread: public Thread { bool do_not_unlock_if_synchronized() { return _do_not_unlock_if_synchronized; } void set_do_not_unlock_if_synchronized(bool val) { _do_not_unlock_if_synchronized = val; } + // native memory tracking + inline MemRecorder* get_recorder() const { return (MemRecorder*)_recorder; } + inline void set_recorder(MemRecorder* rc) { _recorder = (volatile MemRecorder*)rc; } + + private: + // per-thread memory recorder + volatile MemRecorder* _recorder; // Suspend/resume support for JavaThread - private: void set_ext_suspended() { set_suspend_flag (_ext_suspended); } void clear_ext_suspended() { clear_suspend_flag(_ext_suspended); } @@ -1453,6 +1463,18 @@ public: return result; } + // NMT (Native memory tracking) support. + // This flag helps NMT to determine if this JavaThread will be blocked + // at safepoint. If not, ThreadCritical is needed for writing memory records. + // JavaThread is only safepoint visible when it is in Threads' thread list, + // it is not visible until it is added to the list and becomes invisible + // once it is removed from the list. + public: + bool is_safepoint_visible() const { return _safepoint_visible; } + void set_safepoint_visible(bool visible) { _safepoint_visible = visible; } + private: + bool _safepoint_visible; + // Static operations public: // Returns the running thread as a JavaThread diff --git a/hotspot/src/share/vm/runtime/unhandledOops.cpp b/hotspot/src/share/vm/runtime/unhandledOops.cpp index 9b7211c8d1d..3216da1f2c0 100644 --- a/hotspot/src/share/vm/runtime/unhandledOops.cpp +++ b/hotspot/src/share/vm/runtime/unhandledOops.cpp @@ -37,7 +37,7 @@ const int free_list_size = 256; UnhandledOops::UnhandledOops(Thread* thread) { _thread = thread; - _oop_list = new (ResourceObj::C_HEAP) + _oop_list = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(free_list_size, true); _level = 0; } diff --git a/hotspot/src/share/vm/runtime/vframeArray.cpp b/hotspot/src/share/vm/runtime/vframeArray.cpp index 52b08099922..742197394d8 100644 --- a/hotspot/src/share/vm/runtime/vframeArray.cpp +++ b/hotspot/src/share/vm/runtime/vframeArray.cpp @@ -443,7 +443,7 @@ vframeArray* vframeArray::allocate(JavaThread* thread, int frame_size, GrowableA // Allocate the vframeArray vframeArray * result = (vframeArray*) AllocateHeap(sizeof(vframeArray) + // fixed part sizeof(vframeArrayElement) * (chunk->length() - 1), // variable part - "vframeArray::allocate"); + mtCompiler); result->_frames = chunk->length(); result->_owner_thread = thread; result->_sender = sender; diff --git a/hotspot/src/share/vm/runtime/vframeArray.hpp b/hotspot/src/share/vm/runtime/vframeArray.hpp index 6f8d436c6ca..2eeeb39e60e 100644 --- a/hotspot/src/share/vm/runtime/vframeArray.hpp +++ b/hotspot/src/share/vm/runtime/vframeArray.hpp @@ -108,7 +108,7 @@ class vframeArrayElement : public _ValueObj { // but it does make debugging easier even if we can't look // at the data in each vframeElement -class vframeArray: public CHeapObj { +class vframeArray: public CHeapObj { friend class VMStructs; private: diff --git a/hotspot/src/share/vm/runtime/vframe_hp.cpp b/hotspot/src/share/vm/runtime/vframe_hp.cpp index 274bfc604ce..4f63575d9d6 100644 --- a/hotspot/src/share/vm/runtime/vframe_hp.cpp +++ b/hotspot/src/share/vm/runtime/vframe_hp.cpp @@ -154,7 +154,7 @@ void compiledVFrame::update_local(BasicType type, int index, jvalue value) { } else { // No deferred updates pending for this thread. // allocate in C heap - deferred = new(ResourceObj::C_HEAP) GrowableArray (1, true); + deferred = new(ResourceObj::C_HEAP, mtCompiler) GrowableArray (1, true); thread()->set_deferred_locals(deferred); } deferred->push(new jvmtiDeferredLocalVariableSet(method(), bci(), fr().id())); @@ -323,7 +323,7 @@ jvmtiDeferredLocalVariableSet::jvmtiDeferredLocalVariableSet(methodOop method, i _bci = bci; _id = id; // Alway will need at least one, must be on C heap - _locals = new(ResourceObj::C_HEAP) GrowableArray (1, true); + _locals = new(ResourceObj::C_HEAP, mtCompiler) GrowableArray (1, true); } jvmtiDeferredLocalVariableSet::~jvmtiDeferredLocalVariableSet() { diff --git a/hotspot/src/share/vm/runtime/vframe_hp.hpp b/hotspot/src/share/vm/runtime/vframe_hp.hpp index 6d0bd376482..4edb53bc888 100644 --- a/hotspot/src/share/vm/runtime/vframe_hp.hpp +++ b/hotspot/src/share/vm/runtime/vframe_hp.hpp @@ -89,7 +89,7 @@ class compiledVFrame: public javaVFrame { // any updated locals. class jvmtiDeferredLocalVariable; -class jvmtiDeferredLocalVariableSet : public CHeapObj { +class jvmtiDeferredLocalVariableSet : public CHeapObj { private: methodOop _method; // must be GC'd @@ -119,7 +119,7 @@ private: }; -class jvmtiDeferredLocalVariable : public CHeapObj { +class jvmtiDeferredLocalVariable : public CHeapObj { public: jvmtiDeferredLocalVariable(int index, BasicType type, jvalue value); diff --git a/hotspot/src/share/vm/runtime/virtualspace.cpp b/hotspot/src/share/vm/runtime/virtualspace.cpp index c7e6bf80f4b..38f434dce40 100644 --- a/hotspot/src/share/vm/runtime/virtualspace.cpp +++ b/hotspot/src/share/vm/runtime/virtualspace.cpp @@ -26,6 +26,7 @@ #include "oops/markOop.hpp" #include "oops/oop.inline.hpp" #include "runtime/virtualspace.hpp" +#include "services/memTracker.hpp" #ifdef TARGET_OS_FAMILY_linux # include "os_linux.inline.hpp" #endif @@ -489,6 +490,10 @@ ReservedHeapSpace::ReservedHeapSpace(size_t size, size_t alignment, (UseCompressedOops && (Universe::narrow_oop_base() != NULL) && Universe::narrow_oop_use_implicit_null_checks()) ? lcm(os::vm_page_size(), alignment) : 0) { + if (base() > 0) { + MemTracker::record_virtual_memory_type((address)base(), mtJavaHeap); + } + // Only reserved space for the java heap should have a noaccess_prefix // if using compressed oops. protect_noaccess_prefix(size); @@ -504,6 +509,10 @@ ReservedHeapSpace::ReservedHeapSpace(const size_t prefix_size, (UseCompressedOops && (Universe::narrow_oop_base() != NULL) && Universe::narrow_oop_use_implicit_null_checks()) ? lcm(os::vm_page_size(), prefix_align) : 0) { + if (base() > 0) { + MemTracker::record_virtual_memory_type((address)base(), mtJavaHeap); + } + protect_noaccess_prefix(prefix_size+suffix_size); } @@ -513,6 +522,7 @@ ReservedCodeSpace::ReservedCodeSpace(size_t r_size, size_t rs_align, bool large) : ReservedSpace(r_size, rs_align, large, /*executable*/ true) { + MemTracker::record_virtual_memory_type((address)base(), mtCode); } // VirtualSpace diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp index 7045fa8b3ce..60d87ff937c 100644 --- a/hotspot/src/share/vm/runtime/vmStructs.cpp +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp @@ -235,7 +235,6 @@ #ifndef REG_COUNT #define REG_COUNT 0 #endif - // whole purpose of this function is to work around bug c++/27724 in gcc 4.1.1 // with optimization turned on it doesn't affect produced code static inline uint64_t cast_uint64_t(size_t x) @@ -244,6 +243,16 @@ static inline uint64_t cast_uint64_t(size_t x) } +typedef HashtableEntry IntptrHashtableEntry; +typedef Hashtable IntptrHashtable; +typedef Hashtable SymbolHashtable; +typedef HashtableEntry SymbolHashtableEntry; +typedef Hashtable StringHashtable; +typedef TwoOopHashtable klassOopTwoOopHashtable; +typedef Hashtable klassOopHashtable; +typedef HashtableEntry klassHashtableEntry; +typedef TwoOopHashtable SymbolTwoOopHashtable; + //-------------------------------------------------------------------------------- // VM_STRUCTS // @@ -299,7 +308,7 @@ static inline uint64_t cast_uint64_t(size_t x) nonstatic_field(instanceKlass, _protection_domain, oop) \ nonstatic_field(instanceKlass, _signers, objArrayOop) \ nonstatic_field(instanceKlass, _source_file_name, Symbol*) \ - nonstatic_field(instanceKlass, _source_debug_extension, Symbol*) \ + nonstatic_field(instanceKlass, _source_debug_extension, char*) \ nonstatic_field(instanceKlass, _inner_classes, typeArrayOop) \ nonstatic_field(instanceKlass, _nonstatic_field_size, int) \ nonstatic_field(instanceKlass, _static_field_size, int) \ @@ -379,7 +388,6 @@ static inline uint64_t cast_uint64_t(size_t x) volatile_nonstatic_field(constMethodOopDesc, _fingerprint, uint64_t) \ nonstatic_field(constMethodOopDesc, _constants, constantPoolOop) \ nonstatic_field(constMethodOopDesc, _stackmap_data, typeArrayOop) \ - nonstatic_field(constMethodOopDesc, _exception_table, typeArrayOop) \ nonstatic_field(constMethodOopDesc, _constMethod_size, int) \ nonstatic_field(constMethodOopDesc, _interpreter_kind, jbyte) \ nonstatic_field(constMethodOopDesc, _flags, jbyte) \ @@ -416,6 +424,10 @@ static inline uint64_t cast_uint64_t(size_t x) nonstatic_field(LocalVariableTableElement, descriptor_cp_index, u2) \ nonstatic_field(LocalVariableTableElement, signature_cp_index, u2) \ nonstatic_field(LocalVariableTableElement, slot, u2) \ + nonstatic_field(ExceptionTableElement, start_pc, u2) \ + nonstatic_field(ExceptionTableElement, end_pc, u2) \ + nonstatic_field(ExceptionTableElement, handler_pc, u2) \ + nonstatic_field(ExceptionTableElement, catch_type_index, u2) \ nonstatic_field(BreakpointInfo, _orig_bytecode, Bytecodes::Code) \ nonstatic_field(BreakpointInfo, _bci, int) \ nonstatic_field(BreakpointInfo, _name_index, u2) \ @@ -711,26 +723,26 @@ static inline uint64_t cast_uint64_t(size_t x) /* HashtableBucket */ \ /*******************/ \ \ - nonstatic_field(HashtableBucket, _entry, BasicHashtableEntry*) \ + nonstatic_field(HashtableBucket, _entry, BasicHashtableEntry*) \ \ /******************/ \ /* HashtableEntry */ \ /******************/ \ \ - nonstatic_field(BasicHashtableEntry, _next, BasicHashtableEntry*) \ - nonstatic_field(BasicHashtableEntry, _hash, unsigned int) \ - nonstatic_field(HashtableEntry, _literal, intptr_t) \ + nonstatic_field(BasicHashtableEntry, _next, BasicHashtableEntry*) \ + nonstatic_field(BasicHashtableEntry, _hash, unsigned int) \ + nonstatic_field(IntptrHashtableEntry, _literal, intptr_t) \ \ /*************/ \ /* Hashtable */ \ /*************/ \ \ - nonstatic_field(BasicHashtable, _table_size, int) \ - nonstatic_field(BasicHashtable, _buckets, HashtableBucket*) \ - nonstatic_field(BasicHashtable, _free_list, BasicHashtableEntry*) \ - nonstatic_field(BasicHashtable, _first_free_entry, char*) \ - nonstatic_field(BasicHashtable, _end_block, char*) \ - nonstatic_field(BasicHashtable, _entry_size, int) \ + nonstatic_field(BasicHashtable, _table_size, int) \ + nonstatic_field(BasicHashtable, _buckets, HashtableBucket*) \ + nonstatic_field(BasicHashtable, _free_list, BasicHashtableEntry*) \ + nonstatic_field(BasicHashtable, _first_free_entry, char*) \ + nonstatic_field(BasicHashtable, _end_block, char*) \ + nonstatic_field(BasicHashtable, _entry_size, int) \ \ /*******************/ \ /* DictionaryEntry */ \ @@ -1451,6 +1463,7 @@ static inline uint64_t cast_uint64_t(size_t x) \ declare_toplevel_type(CheckedExceptionElement) \ declare_toplevel_type(LocalVariableTableElement) \ + declare_toplevel_type(ExceptionTableElement) \ \ /******************************************/ \ /* Generation and space hierarchies */ \ @@ -1538,20 +1551,20 @@ static inline uint64_t cast_uint64_t(size_t x) /* SymbolTable, SystemDictionary */ \ /*********************************/ \ \ - declare_toplevel_type(BasicHashtable) \ - declare_type(Hashtable, BasicHashtable) \ - declare_type(SymbolTable, Hashtable) \ - declare_type(StringTable, Hashtable) \ - declare_type(LoaderConstraintTable, Hashtable) \ - declare_type(TwoOopHashtable, Hashtable) \ - declare_type(Dictionary, TwoOopHashtable) \ - declare_type(PlaceholderTable, TwoOopHashtable) \ - declare_toplevel_type(BasicHashtableEntry) \ - declare_type(HashtableEntry, BasicHashtableEntry) \ - declare_type(DictionaryEntry, HashtableEntry) \ - declare_type(PlaceholderEntry, HashtableEntry) \ - declare_type(LoaderConstraintEntry, HashtableEntry) \ - declare_toplevel_type(HashtableBucket) \ + declare_toplevel_type(BasicHashtable) \ + declare_type(IntptrHashtable, BasicHashtable) \ + declare_type(SymbolTable, SymbolHashtable) \ + declare_type(StringTable, StringHashtable) \ + declare_type(LoaderConstraintTable, klassOopHashtable) \ + declare_type(klassOopTwoOopHashtable, klassOopHashtable) \ + declare_type(Dictionary, klassOopTwoOopHashtable) \ + declare_type(PlaceholderTable, SymbolTwoOopHashtable) \ + declare_toplevel_type(BasicHashtableEntry) \ + declare_type(IntptrHashtableEntry, BasicHashtableEntry) \ + declare_type(DictionaryEntry, klassHashtableEntry) \ + declare_type(PlaceholderEntry, SymbolHashtableEntry) \ + declare_type(LoaderConstraintEntry, klassHashtableEntry) \ + declare_toplevel_type(HashtableBucket) \ declare_toplevel_type(SystemDictionary) \ declare_toplevel_type(vmSymbols) \ declare_toplevel_type(ProtectionDomainEntry) \ @@ -1944,14 +1957,12 @@ static inline uint64_t cast_uint64_t(size_t x) declare_c2_type(ReverseBytesLNode, Node) \ declare_c2_type(VectorNode, Node) \ declare_c2_type(AddVBNode, VectorNode) \ - declare_c2_type(AddVCNode, VectorNode) \ declare_c2_type(AddVSNode, VectorNode) \ declare_c2_type(AddVINode, VectorNode) \ declare_c2_type(AddVLNode, VectorNode) \ declare_c2_type(AddVFNode, VectorNode) \ declare_c2_type(AddVDNode, VectorNode) \ declare_c2_type(SubVBNode, VectorNode) \ - declare_c2_type(SubVCNode, VectorNode) \ declare_c2_type(SubVSNode, VectorNode) \ declare_c2_type(SubVINode, VectorNode) \ declare_c2_type(SubVLNode, VectorNode) \ @@ -1962,73 +1973,33 @@ static inline uint64_t cast_uint64_t(size_t x) declare_c2_type(DivVFNode, VectorNode) \ declare_c2_type(DivVDNode, VectorNode) \ declare_c2_type(LShiftVBNode, VectorNode) \ - declare_c2_type(LShiftVCNode, VectorNode) \ declare_c2_type(LShiftVSNode, VectorNode) \ declare_c2_type(LShiftVINode, VectorNode) \ - declare_c2_type(URShiftVBNode, VectorNode) \ - declare_c2_type(URShiftVCNode, VectorNode) \ - declare_c2_type(URShiftVSNode, VectorNode) \ - declare_c2_type(URShiftVINode, VectorNode) \ + declare_c2_type(RShiftVBNode, VectorNode) \ + declare_c2_type(RShiftVSNode, VectorNode) \ + declare_c2_type(RShiftVINode, VectorNode) \ declare_c2_type(AndVNode, VectorNode) \ declare_c2_type(OrVNode, VectorNode) \ declare_c2_type(XorVNode, VectorNode) \ - declare_c2_type(VectorLoadNode, LoadNode) \ - declare_c2_type(Load16BNode, VectorLoadNode) \ - declare_c2_type(Load8BNode, VectorLoadNode) \ - declare_c2_type(Load4BNode, VectorLoadNode) \ - declare_c2_type(Load8CNode, VectorLoadNode) \ - declare_c2_type(Load4CNode, VectorLoadNode) \ - declare_c2_type(Load2CNode, VectorLoadNode) \ - declare_c2_type(Load8SNode, VectorLoadNode) \ - declare_c2_type(Load4SNode, VectorLoadNode) \ - declare_c2_type(Load2SNode, VectorLoadNode) \ - declare_c2_type(Load4INode, VectorLoadNode) \ - declare_c2_type(Load2INode, VectorLoadNode) \ - declare_c2_type(Load2LNode, VectorLoadNode) \ - declare_c2_type(Load4FNode, VectorLoadNode) \ - declare_c2_type(Load2FNode, VectorLoadNode) \ - declare_c2_type(Load2DNode, VectorLoadNode) \ - declare_c2_type(VectorStoreNode, StoreNode) \ - declare_c2_type(Store16BNode, VectorStoreNode) \ - declare_c2_type(Store8BNode, VectorStoreNode) \ - declare_c2_type(Store4BNode, VectorStoreNode) \ - declare_c2_type(Store8CNode, VectorStoreNode) \ - declare_c2_type(Store4CNode, VectorStoreNode) \ - declare_c2_type(Store2CNode, VectorStoreNode) \ - declare_c2_type(Store4INode, VectorStoreNode) \ - declare_c2_type(Store2INode, VectorStoreNode) \ - declare_c2_type(Store2LNode, VectorStoreNode) \ - declare_c2_type(Store4FNode, VectorStoreNode) \ - declare_c2_type(Store2FNode, VectorStoreNode) \ - declare_c2_type(Store2DNode, VectorStoreNode) \ - declare_c2_type(Replicate16BNode, VectorNode) \ - declare_c2_type(Replicate8BNode, VectorNode) \ - declare_c2_type(Replicate4BNode, VectorNode) \ - declare_c2_type(Replicate8CNode, VectorNode) \ - declare_c2_type(Replicate4CNode, VectorNode) \ - declare_c2_type(Replicate2CNode, VectorNode) \ - declare_c2_type(Replicate8SNode, VectorNode) \ - declare_c2_type(Replicate4SNode, VectorNode) \ - declare_c2_type(Replicate2SNode, VectorNode) \ - declare_c2_type(Replicate4INode, VectorNode) \ - declare_c2_type(Replicate2INode, VectorNode) \ - declare_c2_type(Replicate2LNode, VectorNode) \ - declare_c2_type(Replicate4FNode, VectorNode) \ - declare_c2_type(Replicate2FNode, VectorNode) \ - declare_c2_type(Replicate2DNode, VectorNode) \ + declare_c2_type(LoadVectorNode, LoadNode) \ + declare_c2_type(StoreVectorNode, StoreNode) \ + declare_c2_type(ReplicateBNode, VectorNode) \ + declare_c2_type(ReplicateSNode, VectorNode) \ + declare_c2_type(ReplicateINode, VectorNode) \ + declare_c2_type(ReplicateLNode, VectorNode) \ + declare_c2_type(ReplicateFNode, VectorNode) \ + declare_c2_type(ReplicateDNode, VectorNode) \ declare_c2_type(PackNode, VectorNode) \ declare_c2_type(PackBNode, PackNode) \ - declare_c2_type(PackCNode, PackNode) \ declare_c2_type(PackSNode, PackNode) \ declare_c2_type(PackINode, PackNode) \ declare_c2_type(PackLNode, PackNode) \ declare_c2_type(PackFNode, PackNode) \ declare_c2_type(PackDNode, PackNode) \ - declare_c2_type(Pack2x1BNode, PackNode) \ - declare_c2_type(Pack2x2BNode, PackNode) \ + declare_c2_type(Pack2LNode, PackNode) \ + declare_c2_type(Pack2DNode, PackNode) \ declare_c2_type(ExtractNode, Node) \ declare_c2_type(ExtractBNode, ExtractNode) \ - declare_c2_type(ExtractCNode, ExtractNode) \ declare_c2_type(ExtractSNode, ExtractNode) \ declare_c2_type(ExtractINode, ExtractNode) \ declare_c2_type(ExtractLNode, ExtractNode) \ @@ -2334,6 +2305,7 @@ static inline uint64_t cast_uint64_t(size_t x) declare_constant(constMethodOopDesc::_has_linenumber_table) \ declare_constant(constMethodOopDesc::_has_checked_exceptions) \ declare_constant(constMethodOopDesc::_has_localvariable_table) \ + declare_constant(constMethodOopDesc::_has_exception_table) \ \ /*************************************/ \ /* instanceKlass enum */ \ diff --git a/hotspot/src/share/vm/runtime/vmThread.hpp b/hotspot/src/share/vm/runtime/vmThread.hpp index f78449676b7..acf95842bf1 100644 --- a/hotspot/src/share/vm/runtime/vmThread.hpp +++ b/hotspot/src/share/vm/runtime/vmThread.hpp @@ -46,7 +46,7 @@ // Encapsulates both queue management and // and priority policy // -class VMOperationQueue : public CHeapObj { +class VMOperationQueue : public CHeapObj { private: enum Priorities { SafepointPriority, // Highest priority (operation executed at a safepoint) diff --git a/hotspot/src/share/vm/runtime/vm_operations.hpp b/hotspot/src/share/vm/runtime/vm_operations.hpp index 081c428a62b..ccbad94b728 100644 --- a/hotspot/src/share/vm/runtime/vm_operations.hpp +++ b/hotspot/src/share/vm/runtime/vm_operations.hpp @@ -96,7 +96,7 @@ template(JFRCheckpoint) \ template(Exit) \ -class VM_Operation: public CHeapObj { +class VM_Operation: public CHeapObj { public: enum Mode { _safepoint, // blocking, safepoint, vm_op C-heap allocated diff --git a/hotspot/src/share/vm/services/attachListener.cpp b/hotspot/src/share/vm/services/attachListener.cpp index 3753a64cc95..14b4aa08eca 100644 --- a/hotspot/src/share/vm/services/attachListener.cpp +++ b/hotspot/src/share/vm/services/attachListener.cpp @@ -320,7 +320,7 @@ static jint set_ccstr_flag(const char* name, AttachOperation* op, outputStream* } bool res = CommandLineFlags::ccstrAtPut((char*)name, &value, ATTACH_ON_DEMAND); if (res) { - FREE_C_HEAP_ARRAY(char, value); + FREE_C_HEAP_ARRAY(char, value, mtInternal); } else { out->print_cr("setting flag %s failed", name); } diff --git a/hotspot/src/share/vm/services/attachListener.hpp b/hotspot/src/share/vm/services/attachListener.hpp index ba8fb93227b..e39c3fde3f9 100644 --- a/hotspot/src/share/vm/services/attachListener.hpp +++ b/hotspot/src/share/vm/services/attachListener.hpp @@ -98,7 +98,7 @@ class AttachListener: AllStatic { }; #ifndef SERVICES_KERNEL -class AttachOperation: public CHeapObj { +class AttachOperation: public CHeapObj { public: enum { name_length_max = 16, // maximum length of name diff --git a/hotspot/src/share/vm/services/diagnosticArgument.cpp b/hotspot/src/share/vm/services/diagnosticArgument.cpp index e2ced389105..23267fae520 100644 --- a/hotspot/src/share/vm/services/diagnosticArgument.cpp +++ b/hotspot/src/share/vm/services/diagnosticArgument.cpp @@ -140,7 +140,7 @@ template <> void DCmdArgument::parse_value(const char* str, if (str == NULL) { _value = NULL; } else { - _value = NEW_C_HEAP_ARRAY(char, len+1); + _value = NEW_C_HEAP_ARRAY(char, len+1, mtInternal); strncpy(_value, str, len); _value[len] = 0; } @@ -159,7 +159,7 @@ template <> void DCmdArgument::init_value(TRAPS) { template <> void DCmdArgument::destroy_value() { if (_value != NULL) { - FREE_C_HEAP_ARRAY(char, _value); + FREE_C_HEAP_ARRAY(char, _value, mtInternal); set_value(NULL); } } diff --git a/hotspot/src/share/vm/services/diagnosticArgument.hpp b/hotspot/src/share/vm/services/diagnosticArgument.hpp index 8881e99556c..596353b0752 100644 --- a/hotspot/src/share/vm/services/diagnosticArgument.hpp +++ b/hotspot/src/share/vm/services/diagnosticArgument.hpp @@ -31,17 +31,17 @@ #include "runtime/thread.hpp" #include "utilities/exceptions.hpp" -class StringArrayArgument : public CHeapObj { +class StringArrayArgument : public CHeapObj { private: GrowableArray* _array; public: StringArrayArgument() { - _array = new(ResourceObj::C_HEAP)GrowableArray(32, true); + _array = new(ResourceObj::C_HEAP, mtInternal)GrowableArray(32, true); assert(_array != NULL, "Sanity check"); } void add(const char* str, size_t len) { if (str != NULL) { - char* ptr = NEW_C_HEAP_ARRAY(char, len+1); + char* ptr = NEW_C_HEAP_ARRAY(char, len+1, mtInternal); strncpy(ptr, str, len); ptr[len] = 0; _array->append(ptr); @@ -53,7 +53,7 @@ public: ~StringArrayArgument() { for (int i=0; i<_array->length(); i++) { if(_array->at(i) != NULL) { // Safety check - FREE_C_HEAP_ARRAY(char, _array->at(i)); + FREE_C_HEAP_ARRAY(char, _array->at(i), mtInternal); } } delete _array; diff --git a/hotspot/src/share/vm/services/diagnosticCommand.hpp b/hotspot/src/share/vm/services/diagnosticCommand.hpp index d5c5cd172aa..cf4134f4123 100644 --- a/hotspot/src/share/vm/services/diagnosticCommand.hpp +++ b/hotspot/src/share/vm/services/diagnosticCommand.hpp @@ -48,7 +48,7 @@ public: "With no argument this will show a list of available commands. " "'help all' will show help for all commands."; } - static const char* impact() { return "Low: "; } + static const char* impact() { return "Low"; } static int num_arguments(); virtual void execute(TRAPS); }; @@ -60,7 +60,7 @@ public: static const char* description() { return "Print JVM version information."; } - static const char* impact() { return "Low: "; } + static const char* impact() { return "Low"; } static int num_arguments() { return 0; } virtual void execute(TRAPS); }; @@ -72,7 +72,7 @@ public: static const char* description() { return "Print the command line used to start this VM instance."; } - static const char* impact() { return "Low: "; } + static const char* impact() { return "Low"; } static int num_arguments() { return 0; } virtual void execute(TRAPS) { Arguments::print_on(_output); @@ -88,7 +88,7 @@ public: return "Print system properties."; } static const char* impact() { - return "Low: "; + return "Low"; } static int num_arguments() { return 0; } virtual void execute(TRAPS); @@ -105,7 +105,7 @@ public: return "Print VM flag options and their current values."; } static const char* impact() { - return "Low: "; + return "Low"; } static int num_arguments(); virtual void execute(TRAPS); @@ -121,7 +121,7 @@ public: return "Print VM uptime."; } static const char* impact() { - return "Low: "; + return "Low"; } static int num_arguments(); virtual void execute(TRAPS); diff --git a/hotspot/src/share/vm/services/diagnosticFramework.cpp b/hotspot/src/share/vm/services/diagnosticFramework.cpp index 73e9bdc540c..2ae7866f6c6 100644 --- a/hotspot/src/share/vm/services/diagnosticFramework.cpp +++ b/hotspot/src/share/vm/services/diagnosticFramework.cpp @@ -75,11 +75,13 @@ bool DCmdArgIter::next(TRAPS) { } // extracting first item, argument or option name _key_addr = &_buffer[_cursor]; + bool arg_had_quotes = false; while (_cursor <= _len - 1 && _buffer[_cursor] != '=' && _buffer[_cursor] != _delim) { // argument can be surrounded by single or double quotes if (_buffer[_cursor] == '\"' || _buffer[_cursor] == '\'') { _key_addr++; char quote = _buffer[_cursor]; + arg_had_quotes = true; while (_cursor < _len - 1) { _cursor++; if (_buffer[_cursor] == quote && _buffer[_cursor - 1] != '\\') { @@ -95,16 +97,22 @@ bool DCmdArgIter::next(TRAPS) { _cursor++; } _key_len = &_buffer[_cursor] - _key_addr; + if (arg_had_quotes) { + // if the argument was quoted, we need to step past the last quote here + _cursor++; + } // check if the argument has the = format if (_cursor <= _len -1 && _buffer[_cursor] == '=') { _cursor++; _value_addr = &_buffer[_cursor]; + bool value_had_quotes = false; // extract the value while (_cursor <= _len - 1 && _buffer[_cursor] != _delim) { // value can be surrounded by simple or double quotes if (_buffer[_cursor] == '\"' || _buffer[_cursor] == '\'') { _value_addr++; char quote = _buffer[_cursor]; + value_had_quotes = true; while (_cursor < _len - 1) { _cursor++; if (_buffer[_cursor] == quote && _buffer[_cursor - 1] != '\\') { @@ -120,6 +128,10 @@ bool DCmdArgIter::next(TRAPS) { _cursor++; } _value_len = &_buffer[_cursor] - _value_addr; + if (value_had_quotes) { + // if the value was quoted, we need to step past the last quote here + _cursor++; + } } else { _value_addr = NULL; _value_len = 0; @@ -185,8 +197,17 @@ void DCmdParser::parse(CmdLine* line, char delim, TRAPS) { arg->read_value(iter.key_addr(), iter.key_length(), CHECK); next_argument = next_argument->next(); } else { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Unknown argument in diagnostic command"); + const size_t buflen = 120; + const size_t argbuflen = 30; + char buf[buflen]; + char argbuf[argbuflen]; + size_t len = MIN2(iter.key_length(), argbuflen - 1); + + strncpy(argbuf, iter.key_addr(), len); + argbuf[len] = '\0'; + jio_snprintf(buf, buflen - 1, "Unknown argument '%s' in diagnostic command.", argbuf); + + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), buf); } } cont = iter.next(CHECK); @@ -207,19 +228,21 @@ GenDCmdArgument* DCmdParser::lookup_dcmd_option(const char* name, size_t len) { } void DCmdParser::check(TRAPS) { + const size_t buflen = 256; + char buf[buflen]; GenDCmdArgument* arg = _arguments_list; while (arg != NULL) { if (arg->is_mandatory() && !arg->has_value()) { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Missing argument for diagnostic command"); + jio_snprintf(buf, buflen - 1, "The argument '%s' is mandatory.", arg->name()); + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), buf); } arg = arg->next(); } arg = _options; while (arg != NULL) { if (arg->is_mandatory() && !arg->has_value()) { - THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Missing option for diagnostic command"); + jio_snprintf(buf, buflen - 1, "The option '%s' is mandatory.", arg->name()); + THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), buf); } arg = arg->next(); } diff --git a/hotspot/src/share/vm/services/diagnosticFramework.hpp b/hotspot/src/share/vm/services/diagnosticFramework.hpp index f9ea562344c..08b24e07f33 100644 --- a/hotspot/src/share/vm/services/diagnosticFramework.hpp +++ b/hotspot/src/share/vm/services/diagnosticFramework.hpp @@ -238,6 +238,16 @@ public: static const char* name() { return "No Name";} static const char* description() { return "No Help";} static const char* disabled_message() { return "Diagnostic command currently disabled"; } + // The impact() method returns a description of the intrusiveness of the diagnostic + // command on the Java Virtual Machine behavior. The rational for this method is that some + // diagnostic commands can seriously disrupt the behavior of the Java Virtual Machine + // (for instance a Thread Dump for an application with several tens of thousands of threads, + // or a Head Dump with a 40GB+ heap size) and other diagnostic commands have no serious + // impact on the JVM (for instance, getting the command line arguments or the JVM version). + // The recommended format for the description is : [longer description], + // where the impact level is selected among this list: {Low, Medium, High}. The optional + // longer description can provide more specific details like the fact that Thread Dump + // impact depends on the heap size. static const char* impact() { return "Low: No impact"; } static int num_arguments() { return 0; } outputStream* output() { return _output; } @@ -250,7 +260,7 @@ public: bool has_arg = iter.next(CHECK); if (has_arg) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), - "Unknown argument in diagnostic command"); + "The argument list of this diagnostic command should be empty."); } } virtual void execute(TRAPS) { } @@ -310,7 +320,7 @@ public: // manages the status of the diagnostic command (hidden, enabled). A DCmdFactory // has to be registered to make the diagnostic command available (see // management.cpp) -class DCmdFactory: public CHeapObj { +class DCmdFactory: public CHeapObj { private: static Mutex* _dcmdFactory_lock; // Pointer to the next factory in the singly-linked list of registered @@ -368,7 +378,7 @@ public: DCmdFactory(DCmdClass::num_arguments(), enabled, hidden) { } // Returns a C-heap allocated instance virtual DCmd* create_Cheap_instance(outputStream* output) { - return new (ResourceObj::C_HEAP) DCmdClass(output, true); + return new (ResourceObj::C_HEAP, mtInternal) DCmdClass(output, true); } // Returns a resourceArea allocated instance virtual DCmd* create_resource_instance(outputStream* output) { diff --git a/hotspot/src/share/vm/services/gcNotifier.cpp b/hotspot/src/share/vm/services/gcNotifier.cpp index c43dadead0b..abb2dd6e798 100644 --- a/hotspot/src/share/vm/services/gcNotifier.cpp +++ b/hotspot/src/share/vm/services/gcNotifier.cpp @@ -45,7 +45,7 @@ void GCNotifier::pushNotification(GCMemoryManager *mgr, const char *action, cons // GC may occur between now and the creation of the notification int num_pools = MemoryService::num_memory_pools(); // stat is deallocated inside GCNotificationRequest - GCStatInfo* stat = new(ResourceObj::C_HEAP) GCStatInfo(num_pools); + GCStatInfo* stat = new(ResourceObj::C_HEAP, mtGC) GCStatInfo(num_pools); mgr->get_last_gc_stat(stat); GCNotificationRequest *request = new GCNotificationRequest(os::javaTimeMillis(),mgr,action,cause,stat); addRequest(request); diff --git a/hotspot/src/share/vm/services/gcNotifier.hpp b/hotspot/src/share/vm/services/gcNotifier.hpp index c26765e824e..1ac807ba592 100644 --- a/hotspot/src/share/vm/services/gcNotifier.hpp +++ b/hotspot/src/share/vm/services/gcNotifier.hpp @@ -30,7 +30,7 @@ #include "services/memoryService.hpp" #include "services/memoryManager.hpp" -class GCNotificationRequest : public CHeapObj { +class GCNotificationRequest : public CHeapObj { friend class GCNotifier; GCNotificationRequest *next; jlong timestamp; diff --git a/hotspot/src/share/vm/services/heapDumper.cpp b/hotspot/src/share/vm/services/heapDumper.cpp index 3cc0e5b6813..73f4a9b6120 100644 --- a/hotspot/src/share/vm/services/heapDumper.cpp +++ b/hotspot/src/share/vm/services/heapDumper.cpp @@ -436,7 +436,7 @@ DumpWriter::DumpWriter(const char* path) { // sufficient memory then reduce size until we can allocate something. _size = io_buffer_size; do { - _buffer = (char*)os::malloc(_size); + _buffer = (char*)os::malloc(_size, mtInternal); if (_buffer == NULL) { _size = _size >> 1; } @@ -1405,7 +1405,7 @@ class VM_HeapDumper : public VM_GC_Operation { _gc_before_heap_dump = gc_before_heap_dump; _is_segmented_dump = false; _dump_start = (jlong)-1; - _klass_map = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_CLASS_COUNT, true); + _klass_map = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_CLASS_COUNT, true); _stack_traces = NULL; _num_threads = 0; if (oome) { @@ -1426,7 +1426,7 @@ class VM_HeapDumper : public VM_GC_Operation { for (int i=0; i < _num_threads; i++) { delete _stack_traces[i]; } - FREE_C_HEAP_ARRAY(ThreadStackTrace*, _stack_traces); + FREE_C_HEAP_ARRAY(ThreadStackTrace*, _stack_traces, mtInternal); } delete _klass_map; } @@ -1806,7 +1806,7 @@ void VM_HeapDumper::dump_stack_traces() { writer()->write_u4(0); // thread number writer()->write_u4(0); // frame count - _stack_traces = NEW_C_HEAP_ARRAY(ThreadStackTrace*, Threads::number_of_threads()); + _stack_traces = NEW_C_HEAP_ARRAY(ThreadStackTrace*, Threads::number_of_threads(), mtInternal); int frame_serial_num = 0; for (JavaThread* thread = Threads::first(); thread != NULL ; thread = thread->next()) { oop threadObj = thread->threadObj(); @@ -2005,7 +2005,7 @@ void HeapDumper::dump_heap(bool oome) { dump_file_name, os::current_process_id(), dump_file_ext); } const size_t len = strlen(base_path) + 1; - my_path = (char*)os::malloc(len); + my_path = (char*)os::malloc(len, mtInternal); if (my_path == NULL) { warning("Cannot create heap dump file. Out of system memory."); return; @@ -2014,7 +2014,7 @@ void HeapDumper::dump_heap(bool oome) { } else { // Append a sequence number id for dumps following the first const size_t len = strlen(base_path) + max_digit_chars + 2; // for '.' and \0 - my_path = (char*)os::malloc(len); + my_path = (char*)os::malloc(len, mtInternal); if (my_path == NULL) { warning("Cannot create heap dump file. Out of system memory."); return; diff --git a/hotspot/src/share/vm/services/lowMemoryDetector.hpp b/hotspot/src/share/vm/services/lowMemoryDetector.hpp index ce15bad2e21..311a3a418f6 100644 --- a/hotspot/src/share/vm/services/lowMemoryDetector.hpp +++ b/hotspot/src/share/vm/services/lowMemoryDetector.hpp @@ -63,7 +63,7 @@ class OopClosure; class MemoryPool; -class ThresholdSupport : public CHeapObj { +class ThresholdSupport : public CHeapObj { private: bool _support_high_threshold; bool _support_low_threshold; @@ -112,7 +112,7 @@ class ThresholdSupport : public CHeapObj { } }; -class SensorInfo : public CHeapObj { +class SensorInfo : public CHeapObj { private: instanceOop _sensor_obj; bool _sensor_on; diff --git a/hotspot/src/share/vm/services/management.cpp b/hotspot/src/share/vm/services/management.cpp index 48a5b6a0997..7d917e7217d 100644 --- a/hotspot/src/share/vm/services/management.cpp +++ b/hotspot/src/share/vm/services/management.cpp @@ -47,6 +47,7 @@ #include "services/jmm.h" #include "services/lowMemoryDetector.hpp" #include "services/gcNotifier.hpp" +#include "services/nmtDCmd.hpp" #include "services/management.hpp" #include "services/memoryManager.hpp" #include "services/memoryPool.hpp" @@ -121,6 +122,7 @@ void Management::init() { // Registration of the diagnostic commands DCmdRegistrant::register_dcmds(); DCmdRegistrant::register_dcmds_ext(); + DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl(true, false)); } void Management::initialize(TRAPS) { diff --git a/hotspot/src/share/vm/services/memBaseline.cpp b/hotspot/src/share/vm/services/memBaseline.cpp new file mode 100644 index 00000000000..5b829751649 --- /dev/null +++ b/hotspot/src/share/vm/services/memBaseline.cpp @@ -0,0 +1,387 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#include "precompiled.hpp" +#include "classfile/systemDictionary.hpp" +#include "memory/allocation.hpp" +#include "services/memBaseline.hpp" +#include "services/memTracker.hpp" + +MemType2Name MemBaseline::MemType2NameMap[NUMBER_OF_MEMORY_TYPE] = { + {mtJavaHeap, "Java Heap"}, + {mtClass, "Class"}, + {mtThreadStack,"Thread Stack"}, + {mtThread, "Thread"}, + {mtCode, "Code"}, + {mtGC, "GC"}, + {mtCompiler, "Compiler"}, + {mtInternal, "Internal"}, + {mtOther, "Other"}, + {mtSymbol, "Symbol"}, + {mtNMT, "Memory Tracking"}, + {mtChunk, "Pooled Free Chunks"}, + {mtNone, "Unknown"} // It can happen when type tagging records are lagging + // behind +}; + +MemBaseline::MemBaseline() { + _baselined = false; + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + _malloc_data[index].set_type(MemType2NameMap[index]._flag); + _vm_data[index].set_type(MemType2NameMap[index]._flag); + _arena_data[index].set_type(MemType2NameMap[index]._flag); + } + + _malloc_cs = NULL; + _vm_cs = NULL; + + _number_of_classes = 0; + _number_of_threads = 0; +} + + +void MemBaseline::clear() { + if (_malloc_cs != NULL) { + delete _malloc_cs; + _malloc_cs = NULL; + } + + if (_vm_cs != NULL) { + delete _vm_cs; + _vm_cs = NULL; + } + + reset(); +} + + +void MemBaseline::reset() { + _baselined = false; + _total_vm_reserved = 0; + _total_vm_committed = 0; + _total_malloced = 0; + _number_of_classes = 0; + + if (_malloc_cs != NULL) _malloc_cs->clear(); + if (_vm_cs != NULL) _vm_cs->clear(); + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + _malloc_data[index].clear(); + _vm_data[index].clear(); + _arena_data[index].clear(); + } +} + +MemBaseline::~MemBaseline() { + if (_malloc_cs != NULL) { + delete _malloc_cs; + } + + if (_vm_cs != NULL) { + delete _vm_cs; + } +} + +// baseline malloc'd memory records, generate overall summary and summaries by +// memory types +bool MemBaseline::baseline_malloc_summary(const MemPointerArray* malloc_records) { + MemPointerArrayIteratorImpl mItr((MemPointerArray*)malloc_records); + MemPointerRecord* mptr = (MemPointerRecord*)mItr.current(); + size_t used_arena_size = 0; + int index; + while (mptr != NULL) { + index = flag2index(FLAGS_TO_MEMORY_TYPE(mptr->flags())); + size_t size = mptr->size(); + _total_malloced += size; + _malloc_data[index].inc(size); + if (MemPointerRecord::is_arena_record(mptr->flags())) { + // see if arena size record present + MemPointerRecord* next_p = (MemPointerRecordEx*)mItr.peek_next(); + if (MemPointerRecord::is_arena_size_record(next_p->flags())) { + assert(next_p->is_size_record_of_arena(mptr), "arena records do not match"); + size = next_p->size(); + _arena_data[index].inc(size); + used_arena_size += size; + mItr.next(); + } + } + mptr = (MemPointerRecordEx*)mItr.next(); + } + + // substract used arena size to get size of arena chunk in free list + index = flag2index(mtChunk); + _malloc_data[index].reduce(used_arena_size); + // we really don't know how many chunks in free list, so just set to + // 0 + _malloc_data[index].overwrite_counter(0); + + return true; +} + +// baseline mmap'd memory records, generate overall summary and summaries by +// memory types +bool MemBaseline::baseline_vm_summary(const MemPointerArray* vm_records) { + MemPointerArrayIteratorImpl vItr((MemPointerArray*)vm_records); + VMMemRegion* vptr = (VMMemRegion*)vItr.current(); + int index; + while (vptr != NULL) { + index = flag2index(FLAGS_TO_MEMORY_TYPE(vptr->flags())); + + // we use the number of thread stack to count threads + if (IS_MEMORY_TYPE(vptr->flags(), mtThreadStack)) { + _number_of_threads ++; + } + _total_vm_reserved += vptr->reserved_size(); + _total_vm_committed += vptr->committed_size(); + _vm_data[index].inc(vptr->reserved_size(), vptr->committed_size()); + vptr = (VMMemRegion*)vItr.next(); + } + return true; +} + +// baseline malloc'd memory by callsites, but only the callsites with memory allocation +// over 1KB are stored. +bool MemBaseline::baseline_malloc_details(const MemPointerArray* malloc_records) { + assert(MemTracker::track_callsite(), "detail tracking is off"); + + MemPointerArrayIteratorImpl mItr((MemPointerArray*)malloc_records); + MemPointerRecordEx* mptr = (MemPointerRecordEx*)mItr.current(); + MallocCallsitePointer mp; + + if (_malloc_cs == NULL) { + _malloc_cs = new (std::nothrow) MemPointerArrayImpl(64); + // out of native memory + if (_malloc_cs == NULL) { + return false; + } + } else { + _malloc_cs->clear(); + } + + // baseline memory that is totaled over 1 KB + while (mptr != NULL) { + if (!MemPointerRecord::is_arena_size_record(mptr->flags())) { + // skip thread stacks + if (!IS_MEMORY_TYPE(mptr->flags(), mtThreadStack)) { + if (mp.addr() != mptr->pc()) { + if ((mp.amount()/K) > 0) { + if (!_malloc_cs->append(&mp)) { + return false; + } + } + mp = MallocCallsitePointer(mptr->pc()); + } + mp.inc(mptr->size()); + } + } + mptr = (MemPointerRecordEx*)mItr.next(); + } + + if (mp.addr() != 0 && (mp.amount()/K) > 0) { + if (!_malloc_cs->append(&mp)) { + return false; + } + } + return true; +} + +// baseline mmap'd memory by callsites +bool MemBaseline::baseline_vm_details(const MemPointerArray* vm_records) { + assert(MemTracker::track_callsite(), "detail tracking is off"); + + VMCallsitePointer vp; + MemPointerArrayIteratorImpl vItr((MemPointerArray*)vm_records); + VMMemRegionEx* vptr = (VMMemRegionEx*)vItr.current(); + + if (_vm_cs == NULL) { + _vm_cs = new (std::nothrow) MemPointerArrayImpl(64); + if (_vm_cs == NULL) { + return false; + } + } else { + _vm_cs->clear(); + } + + while (vptr != NULL) { + if (vp.addr() != vptr->pc()) { + if (!_vm_cs->append(&vp)) { + return false; + } + vp = VMCallsitePointer(vptr->pc()); + } + vp.inc(vptr->size(), vptr->committed_size()); + vptr = (VMMemRegionEx*)vItr.next(); + } + if (vp.addr() != 0) { + if (!_vm_cs->append(&vp)) { + return false; + } + } + return true; +} + +// baseline a snapshot. If summary_only = false, memory usages aggregated by +// callsites are also baselined. +bool MemBaseline::baseline(MemSnapshot& snapshot, bool summary_only) { + MutexLockerEx snapshot_locker(snapshot._lock, true); + reset(); + _baselined = baseline_malloc_summary(snapshot._alloc_ptrs) && + baseline_vm_summary(snapshot._vm_ptrs); + _number_of_classes = SystemDictionary::number_of_classes(); + + if (!summary_only && MemTracker::track_callsite() && _baselined) { + ((MemPointerArray*)snapshot._alloc_ptrs)->sort((FN_SORT)malloc_sort_by_pc); + ((MemPointerArray*)snapshot._vm_ptrs)->sort((FN_SORT)vm_sort_by_pc); + _baselined = baseline_malloc_details(snapshot._alloc_ptrs) && + baseline_vm_details(snapshot._vm_ptrs); + ((MemPointerArray*)snapshot._alloc_ptrs)->sort((FN_SORT)malloc_sort_by_addr); + ((MemPointerArray*)snapshot._vm_ptrs)->sort((FN_SORT)vm_sort_by_addr); + } + return _baselined; +} + + +int MemBaseline::flag2index(MEMFLAGS flag) const { + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + if (MemType2NameMap[index]._flag == flag) { + return index; + } + } + assert(false, "no type"); + return -1; +} + +const char* MemBaseline::type2name(MEMFLAGS type) { + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + if (MemType2NameMap[index]._flag == type) { + return MemType2NameMap[index]._name; + } + } + assert(false, "no type"); + return NULL; +} + + +MemBaseline& MemBaseline::operator=(const MemBaseline& other) { + _total_malloced = other._total_malloced; + _total_vm_reserved = other._total_vm_reserved; + _total_vm_committed = other._total_vm_committed; + + _baselined = other._baselined; + _number_of_classes = other._number_of_classes; + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + _malloc_data[index] = other._malloc_data[index]; + _vm_data[index] = other._vm_data[index]; + _arena_data[index] = other._arena_data[index]; + } + + if (MemTracker::track_callsite()) { + assert(_malloc_cs != NULL && _vm_cs != NULL, "out of memory"); + assert(other._malloc_cs != NULL && other._vm_cs != NULL, + "not properly baselined"); + _malloc_cs->clear(); + _vm_cs->clear(); + int index; + for (index = 0; index < other._malloc_cs->length(); index ++) { + _malloc_cs->append(other._malloc_cs->at(index)); + } + + for (index = 0; index < other._vm_cs->length(); index ++) { + _vm_cs->append(other._vm_cs->at(index)); + } + } + return *this; +} + +/* compare functions for sorting */ + +// sort snapshot malloc'd records in callsite pc order +int MemBaseline::malloc_sort_by_pc(const void* p1, const void* p2) { + assert(MemTracker::track_callsite(),"Just check"); + const MemPointerRecordEx* mp1 = (const MemPointerRecordEx*)p1; + const MemPointerRecordEx* mp2 = (const MemPointerRecordEx*)p2; + return UNSIGNED_COMPARE(mp1->pc(), mp2->pc()); +} + +// sort baselined malloc'd records in size order +int MemBaseline::bl_malloc_sort_by_size(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const MallocCallsitePointer* mp1 = (const MallocCallsitePointer*)p1; + const MallocCallsitePointer* mp2 = (const MallocCallsitePointer*)p2; + return UNSIGNED_COMPARE(mp2->amount(), mp1->amount()); +} + +// sort baselined malloc'd records in callsite pc order +int MemBaseline::bl_malloc_sort_by_pc(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const MallocCallsitePointer* mp1 = (const MallocCallsitePointer*)p1; + const MallocCallsitePointer* mp2 = (const MallocCallsitePointer*)p2; + return UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); +} + +// sort snapshot mmap'd records in callsite pc order +int MemBaseline::vm_sort_by_pc(const void* p1, const void* p2) { + assert(MemTracker::track_callsite(),"Just check"); + const VMMemRegionEx* mp1 = (const VMMemRegionEx*)p1; + const VMMemRegionEx* mp2 = (const VMMemRegionEx*)p2; + return UNSIGNED_COMPARE(mp1->pc(), mp2->pc()); +} + +// sort baselined mmap'd records in size (reserved size) order +int MemBaseline::bl_vm_sort_by_size(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const VMCallsitePointer* mp1 = (const VMCallsitePointer*)p1; + const VMCallsitePointer* mp2 = (const VMCallsitePointer*)p2; + return UNSIGNED_COMPARE(mp2->reserved_amount(), mp1->reserved_amount()); +} + +// sort baselined mmap'd records in callsite pc order +int MemBaseline::bl_vm_sort_by_pc(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const VMCallsitePointer* mp1 = (const VMCallsitePointer*)p1; + const VMCallsitePointer* mp2 = (const VMCallsitePointer*)p2; + return UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); +} + + +// sort snapshot malloc'd records in memory block address order +int MemBaseline::malloc_sort_by_addr(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const MemPointerRecord* mp1 = (const MemPointerRecord*)p1; + const MemPointerRecord* mp2 = (const MemPointerRecord*)p2; + int delta = UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); + assert(delta != 0, "dup pointer"); + return delta; +} + +// sort snapshot mmap'd records in memory block address order +int MemBaseline::vm_sort_by_addr(const void* p1, const void* p2) { + assert(MemTracker::is_on(), "Just check"); + const VMMemRegion* mp1 = (const VMMemRegion*)p1; + const VMMemRegion* mp2 = (const VMMemRegion*)p2; + int delta = UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); + assert(delta != 0, "dup pointer"); + return delta; +} diff --git a/hotspot/src/share/vm/services/memBaseline.hpp b/hotspot/src/share/vm/services/memBaseline.hpp new file mode 100644 index 00000000000..2affa2b96ca --- /dev/null +++ b/hotspot/src/share/vm/services/memBaseline.hpp @@ -0,0 +1,447 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_BASELINE_HPP +#define SHARE_VM_SERVICES_MEM_BASELINE_HPP + +#include "memory/allocation.hpp" +#include "runtime/mutex.hpp" +#include "services/memPtr.hpp" +#include "services/memSnapshot.hpp" + +// compare unsigned number +#define UNSIGNED_COMPARE(a, b) ((a > b) ? 1 : ((a == b) ? 0 : -1)) + +/* + * MallocCallsitePointer and VMCallsitePointer are used + * to baseline memory blocks with their callsite information. + * They are only available when detail tracking is turned + * on. + */ + +/* baselined malloc record aggregated by callsite */ +class MallocCallsitePointer : public MemPointer { + private: + size_t _count; // number of malloc invocation from this callsite + size_t _amount; // total amount of memory malloc-ed from this callsite + + public: + MallocCallsitePointer() { + _count = 0; + _amount = 0; + } + + MallocCallsitePointer(address pc) : MemPointer(pc) { + _count = 0; + _amount = 0; + } + + MallocCallsitePointer& operator=(const MallocCallsitePointer& p) { + MemPointer::operator=(p); + _count = p.count(); + _amount = p.amount(); + return *this; + } + + inline void inc(size_t size) { + _count ++; + _amount += size; + }; + + inline size_t count() const { + return _count; + } + + inline size_t amount() const { + return _amount; + } +}; + +// baselined virtual memory record aggregated by callsite +class VMCallsitePointer : public MemPointer { + private: + size_t _count; // number of invocation from this callsite + size_t _reserved_amount; // total reserved amount + size_t _committed_amount; // total committed amount + + public: + VMCallsitePointer() { + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + VMCallsitePointer(address pc) : MemPointer(pc) { + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + VMCallsitePointer& operator=(const VMCallsitePointer& p) { + MemPointer::operator=(p); + _count = p.count(); + _reserved_amount = p.reserved_amount(); + _committed_amount = p.committed_amount(); + return *this; + } + + inline void inc(size_t reserved, size_t committed) { + _count ++; + _reserved_amount += reserved; + _committed_amount += committed; + } + + inline size_t count() const { + return _count; + } + + inline size_t reserved_amount() const { + return _reserved_amount; + } + + inline size_t committed_amount() const { + return _committed_amount; + } +}; + +// maps a memory type flag to readable name +typedef struct _memType2Name { + MEMFLAGS _flag; + const char* _name; +} MemType2Name; + + +// This class aggregates malloc'd records by memory type +class MallocMem : public _ValueObj { + private: + MEMFLAGS _type; + + size_t _count; + size_t _amount; + + public: + MallocMem() { + _type = mtNone; + _count = 0; + _amount = 0; + } + + MallocMem(MEMFLAGS flags) { + assert(HAS_VALID_MEMORY_TYPE(flags), "no type"); + _type = FLAGS_TO_MEMORY_TYPE(flags); + _count = 0; + _amount = 0; + } + + inline void set_type(MEMFLAGS flag) { + _type = flag; + } + + inline void clear() { + _count = 0; + _amount = 0; + _type = mtNone; + } + + MallocMem& operator=(const MallocMem& m) { + assert(_type == m.type(), "different type"); + _count = m.count(); + _amount = m.amount(); + return *this; + } + + inline void inc(size_t amt) { + _amount += amt; + _count ++; + } + + inline void reduce(size_t amt) { + assert(_amount >= amt, "Just check"); + _amount -= amt; + } + + inline void overwrite_counter(size_t count) { + _count = count; + } + + inline MEMFLAGS type() const { + return _type; + } + + inline bool is_type(MEMFLAGS flags) const { + return FLAGS_TO_MEMORY_TYPE(flags) == _type; + } + + inline size_t count() const { + return _count; + } + + inline size_t amount() const { + return _amount; + } +}; + +// This class records live arena's memory usage +class ArenaMem : public MallocMem { + public: + ArenaMem(MEMFLAGS typeflag): MallocMem(typeflag) { + } + ArenaMem() { } +}; + +// This class aggregates virtual memory by its memory type +class VMMem : public _ValueObj { + private: + MEMFLAGS _type; + + size_t _count; + size_t _reserved_amount; + size_t _committed_amount; + + public: + VMMem() { + _type = mtNone; + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + VMMem(MEMFLAGS flags) { + assert(HAS_VALID_MEMORY_TYPE(flags), "no type"); + _type = FLAGS_TO_MEMORY_TYPE(flags); + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + inline void clear() { + _type = mtNone; + _count = 0; + _reserved_amount = 0; + _committed_amount = 0; + } + + inline void set_type(MEMFLAGS flags) { + _type = FLAGS_TO_MEMORY_TYPE(flags); + } + + VMMem& operator=(const VMMem& m) { + assert(_type == m.type(), "different type"); + + _count = m.count(); + _reserved_amount = m.reserved_amount(); + _committed_amount = m.committed_amount(); + return *this; + } + + + inline MEMFLAGS type() const { + return _type; + } + + inline bool is_type(MEMFLAGS flags) const { + return FLAGS_TO_MEMORY_TYPE(flags) == _type; + } + + inline void inc(size_t reserved_amt, size_t committed_amt) { + _reserved_amount += reserved_amt; + _committed_amount += committed_amt; + _count ++; + } + + inline size_t count() const { + return _count; + } + + inline size_t reserved_amount() const { + return _reserved_amount; + } + + inline size_t committed_amount() const { + return _committed_amount; + } +}; + + + +#define NUMBER_OF_MEMORY_TYPE (mt_number_of_types + 1) + +class BaselineReporter; +class BaselineComparisonReporter; + +/* + * This class baselines current memory snapshot. + * A memory baseline summarizes memory usage by memory type, + * aggregates memory usage by callsites when detail tracking + * is on. + */ +class MemBaseline : public _ValueObj { + friend class BaselineReporter; + friend class BaselineComparisonReporter; + + private: + // overall summaries + size_t _total_malloced; + size_t _total_vm_reserved; + size_t _total_vm_committed; + size_t _number_of_classes; + size_t _number_of_threads; + + // if it has properly baselined + bool _baselined; + + // we categorize memory into three categories within the memory type + MallocMem _malloc_data[NUMBER_OF_MEMORY_TYPE]; + VMMem _vm_data[NUMBER_OF_MEMORY_TYPE]; + ArenaMem _arena_data[NUMBER_OF_MEMORY_TYPE]; + + // memory records that aggregate memory usage by callsites. + // only available when detail tracking is on. + MemPointerArray* _malloc_cs; + MemPointerArray* _vm_cs; + + private: + static MemType2Name MemType2NameMap[NUMBER_OF_MEMORY_TYPE]; + + private: + // should not use copy constructor + MemBaseline(MemBaseline& copy) { ShouldNotReachHere(); } + + public: + // create a memory baseline + MemBaseline(); + + virtual ~MemBaseline(); + + inline bool baselined() const { + return _baselined; + } + + MemBaseline& operator=(const MemBaseline& other); + + // reset the baseline for reuse + void clear(); + + // baseline the snapshot + bool baseline(MemSnapshot& snapshot, bool summary_only = true); + + bool baseline(const MemPointerArray* malloc_records, + const MemPointerArray* vm_records, + bool summary_only = true); + + // total malloc'd memory of specified memory type + inline size_t malloc_amount(MEMFLAGS flag) const { + return _malloc_data[flag2index(flag)].amount(); + } + // number of malloc'd memory blocks of specified memory type + inline size_t malloc_count(MEMFLAGS flag) const { + return _malloc_data[flag2index(flag)].count(); + } + // total memory used by arenas of specified memory type + inline size_t arena_amount(MEMFLAGS flag) const { + return _arena_data[flag2index(flag)].amount(); + } + // number of arenas of specified memory type + inline size_t arena_count(MEMFLAGS flag) const { + return _arena_data[flag2index(flag)].count(); + } + // total reserved memory of specified memory type + inline size_t reserved_amount(MEMFLAGS flag) const { + return _vm_data[flag2index(flag)].reserved_amount(); + } + // total committed memory of specified memory type + inline size_t committed_amount(MEMFLAGS flag) const { + return _vm_data[flag2index(flag)].committed_amount(); + } + // total memory (malloc'd + mmap'd + arena) of specified + // memory type + inline size_t total_amount(MEMFLAGS flag) const { + int index = flag2index(flag); + return _malloc_data[index].amount() + + _vm_data[index].reserved_amount() + + _arena_data[index].amount(); + } + + /* overall summaries */ + + // total malloc'd memory in snapshot + inline size_t total_malloc_amount() const { + return _total_malloced; + } + // total mmap'd memory in snapshot + inline size_t total_reserved_amount() const { + return _total_vm_reserved; + } + // total committed memory in snapshot + inline size_t total_committed_amount() const { + return _total_vm_committed; + } + // number of loaded classes + inline size_t number_of_classes() const { + return _number_of_classes; + } + // number of running threads + inline size_t number_of_threads() const { + return _number_of_threads; + } + // lookup human readable name of a memory type + static const char* type2name(MEMFLAGS type); + + private: + // convert memory flag to the index to mapping table + int flag2index(MEMFLAGS flag) const; + + // reset baseline values + void reset(); + + // summarize the records in global snapshot + bool baseline_malloc_summary(const MemPointerArray* malloc_records); + bool baseline_vm_summary(const MemPointerArray* vm_records); + bool baseline_malloc_details(const MemPointerArray* malloc_records); + bool baseline_vm_details(const MemPointerArray* vm_records); + + // print a line of malloc'd memory aggregated by callsite + void print_malloc_callsite(outputStream* st, address pc, size_t size, + size_t count, int diff_amt, int diff_count) const; + // print a line of mmap'd memory aggregated by callsite + void print_vm_callsite(outputStream* st, address pc, size_t rsz, + size_t csz, int diff_rsz, int diff_csz) const; + + // sorting functions for raw records + static int malloc_sort_by_pc(const void* p1, const void* p2); + static int malloc_sort_by_addr(const void* p1, const void* p2); + + static int vm_sort_by_pc(const void* p1, const void* p2); + static int vm_sort_by_addr(const void* p1, const void* p2); + + private: + // sorting functions for baselined records + static int bl_malloc_sort_by_size(const void* p1, const void* p2); + static int bl_vm_sort_by_size(const void* p1, const void* p2); + static int bl_malloc_sort_by_pc(const void* p1, const void* p2); + static int bl_vm_sort_by_pc(const void* p1, const void* p2); +}; + + +#endif // SHARE_VM_SERVICES_MEM_BASELINE_HPP diff --git a/hotspot/src/share/vm/services/memPtr.cpp b/hotspot/src/share/vm/services/memPtr.cpp new file mode 100644 index 00000000000..c11c374fd14 --- /dev/null +++ b/hotspot/src/share/vm/services/memPtr.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "services/memPtr.hpp" +#include "services/memTracker.hpp" + +volatile jint SequenceGenerator::_seq_number = 1; +DEBUG_ONLY(jint SequenceGenerator::_max_seq_number = 1;) +DEBUG_ONLY(volatile unsigned long SequenceGenerator::_generation = 0;) + +jint SequenceGenerator::next() { + jint seq = Atomic::add(1, &_seq_number); + if (seq < 0) { + MemTracker::shutdown(MemTracker::NMT_sequence_overflow); + } + assert(seq > 0, "counter overflow"); + DEBUG_ONLY(_max_seq_number = (seq > _max_seq_number) ? seq : _max_seq_number;) + return seq; +} + + + +bool VMMemRegion::contains(const VMMemRegion* mr) const { + assert(base() != 0, "no base address"); + assert(size() != 0 || committed_size() != 0, + "no range"); + address base_addr = base(); + address end_addr = base_addr + + (is_reserve_record()? reserved_size(): committed_size()); + if (mr->is_reserve_record()) { + if (mr->base() == base_addr && mr->size() == size()) { + // the same range + return true; + } + return false; + } else if (mr->is_commit_record() || mr->is_uncommit_record()) { + assert(mr->base() != 0 && mr->committed_size() > 0, + "bad record"); + return (mr->base() >= base_addr && + (mr->base() + mr->committed_size()) <= end_addr); + } else if (mr->is_type_tagging_record()) { + assert(mr->base() != 0, "no base"); + return mr->base() == base_addr; + } else if (mr->is_release_record()) { + assert(mr->base() != 0 && mr->size() > 0, + "bad record"); + return (mr->base() == base_addr && mr->size() == size()); + } else { + assert(false, "what happened?"); + return false; + } +} diff --git a/hotspot/src/share/vm/services/memPtr.hpp b/hotspot/src/share/vm/services/memPtr.hpp new file mode 100644 index 00000000000..b8b41c326f1 --- /dev/null +++ b/hotspot/src/share/vm/services/memPtr.hpp @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_PTR_HPP +#define SHARE_VM_SERVICES_MEM_PTR_HPP + +#include "memory/allocation.hpp" +#include "runtime/atomic.hpp" +#include "runtime/os.hpp" +#include "runtime/safepoint.hpp" + +/* + * global sequence generator that generates sequence numbers to serialize + * memory records. + */ +class SequenceGenerator : AllStatic { + public: + static jint next(); + + // peek last sequence number + static jint peek() { + return _seq_number; + } + + // reset sequence number + static void reset() { + assert(SafepointSynchronize::is_at_safepoint(), "Safepoint required"); + _seq_number = 1; + DEBUG_ONLY(_generation ++;) + }; + + DEBUG_ONLY(static unsigned long current_generation() { return (unsigned long)_generation; }) + DEBUG_ONLY(static jint max_seq_num() { return _max_seq_number; }) + + private: + static volatile jint _seq_number; + DEBUG_ONLY(static jint _max_seq_number; ) + DEBUG_ONLY(static volatile unsigned long _generation; ) +}; + +/* + * followings are the classes that are used to hold memory activity records in different stages. + * MemPointer + * |--------MemPointerRecord + * | + * |----MemPointerRecordEx + * | | + * | |-------SeqMemPointerRecordEx + * | + * |----SeqMemPointerRecord + * | + * |----VMMemRegion + * | + * |-----VMMemRegionEx + * + * + * prefix 'Seq' - sequenced, the record contains a sequence number + * surfix 'Ex' - extension, the record contains a caller's pc + * + * per-thread recorder : SeqMemPointerRecord(Ex) + * snapshot staging : SeqMemPointerRecord(Ex) + * snapshot : MemPointerRecord(Ex) and VMMemRegion(Ex) + * + */ + +/* + * class that wraps an address to a memory block, + * the memory pointer either points to a malloc'd + * memory block, or a mmap'd memory block + */ +class MemPointer : public _ValueObj { + public: + MemPointer(): _addr(0) { } + MemPointer(address addr): _addr(addr) { } + + MemPointer(const MemPointer& copy_from) { + _addr = copy_from.addr(); + } + + inline address addr() const { + return _addr; + } + + inline operator address() const { + return addr(); + } + + inline bool operator == (const MemPointer& other) const { + return addr() == other.addr(); + } + + inline MemPointer& operator = (const MemPointer& other) { + _addr = other.addr(); + return *this; + } + + protected: + inline void set_addr(address addr) { _addr = addr; } + + protected: + // memory address + address _addr; +}; + +/* MemPointerRecord records an activityand associated + * attributes on a memory block. + */ +class MemPointerRecord : public MemPointer { + private: + MEMFLAGS _flags; + size_t _size; + +public: + /* extension of MemoryType enum + * see share/vm/memory/allocation.hpp for details. + * + * The tag values are associated to sorting orders, so be + * careful if changes are needed. + * The allocation records should be sorted ahead of tagging + * records, which in turn ahead of deallocation records + */ + enum MemPointerTags { + tag_alloc = 0x0001, // malloc or reserve record + tag_commit = 0x0002, // commit record + tag_type = 0x0003, // tag virtual memory to a memory type + tag_uncommit = 0x0004, // uncommit record + tag_release = 0x0005, // free or release record + tag_size = 0x0006, // arena size + tag_masks = 0x0007, // all tag bits + vmBit = 0x0008 + }; + + /* helper functions to interpret the tagging flags */ + + inline static bool is_allocation_record(MEMFLAGS flags) { + return (flags & tag_masks) == tag_alloc; + } + + inline static bool is_deallocation_record(MEMFLAGS flags) { + return (flags & tag_masks) == tag_release; + } + + inline static bool is_arena_record(MEMFLAGS flags) { + return (flags & (otArena | tag_size)) == otArena; + } + + inline static bool is_arena_size_record(MEMFLAGS flags) { + return (flags & (otArena | tag_size)) == (otArena | tag_size); + } + + inline static bool is_virtual_memory_record(MEMFLAGS flags) { + return (flags & vmBit) != 0; + } + + inline static bool is_virtual_memory_reserve_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_alloc | vmBit); + } + + inline static bool is_virtual_memory_commit_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_commit | vmBit); + } + + inline static bool is_virtual_memory_uncommit_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_uncommit | vmBit); + } + + inline static bool is_virtual_memory_release_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_release | vmBit); + } + + inline static bool is_virtual_memory_type_record(MEMFLAGS flags) { + return (flags & 0x0F) == (tag_type | vmBit); + } + + /* tagging flags */ + inline static MEMFLAGS malloc_tag() { return tag_alloc; } + inline static MEMFLAGS free_tag() { return tag_release; } + inline static MEMFLAGS arena_size_tag() { return tag_size | otArena; } + inline static MEMFLAGS virtual_memory_tag() { return vmBit; } + inline static MEMFLAGS virtual_memory_reserve_tag() { return (tag_alloc | vmBit); } + inline static MEMFLAGS virtual_memory_commit_tag() { return (tag_commit | vmBit); } + inline static MEMFLAGS virtual_memory_uncommit_tag(){ return (tag_uncommit | vmBit); } + inline static MEMFLAGS virtual_memory_release_tag() { return (tag_release | vmBit); } + inline static MEMFLAGS virtual_memory_type_tag() { return (tag_type | vmBit); } + + public: + MemPointerRecord(): _size(0), _flags(mtNone) { } + + MemPointerRecord(address addr, MEMFLAGS memflags, size_t size = 0): + MemPointer(addr), _flags(memflags), _size(size) { } + + MemPointerRecord(const MemPointerRecord& copy_from): + MemPointer(copy_from), _flags(copy_from.flags()), + _size(copy_from.size()) { + } + + /* MemPointerRecord is not sequenced, it always return + * 0 to indicate non-sequenced + */ + virtual jint seq() const { return 0; } + + inline size_t size() const { return _size; } + inline void set_size(size_t size) { _size = size; } + + inline MEMFLAGS flags() const { return _flags; } + inline void set_flags(MEMFLAGS flags) { _flags = flags; } + + MemPointerRecord& operator= (const MemPointerRecord& ptr) { + MemPointer::operator=(ptr); + _flags = ptr.flags(); +#ifdef ASSERT + if (IS_ARENA_OBJ(_flags)) { + assert(!is_vm_pointer(), "wrong flags"); + assert((_flags & ot_masks) == otArena, "wrong flags"); + } +#endif + _size = ptr.size(); + return *this; + } + + // if the pointer represents a malloc-ed memory address + inline bool is_malloced_pointer() const { + return !is_vm_pointer(); + } + + // if the pointer represents a virtual memory address + inline bool is_vm_pointer() const { + return is_virtual_memory_record(_flags); + } + + // if this record records a 'malloc' or virtual memory + // 'reserve' call + inline bool is_allocation_record() const { + return is_allocation_record(_flags); + } + + // if this record records a size information of an arena + inline bool is_arena_size_record() const { + return is_arena_size_record(_flags); + } + + // if this pointer represents an address to an arena object + inline bool is_arena_record() const { + return is_arena_record(_flags); + } + + // if this record represents a size information of specific arena + inline bool is_size_record_of_arena(const MemPointerRecord* arena_rc) { + assert(is_arena_size_record(), "not size record"); + assert(arena_rc->is_arena_record(), "not arena record"); + return (arena_rc->addr() + sizeof(void*)) == addr(); + } + + // if this record records a 'free' or virtual memory 'free' call + inline bool is_deallocation_record() const { + return is_deallocation_record(_flags); + } + + // if this record records a virtual memory 'commit' call + inline bool is_commit_record() const { + return is_virtual_memory_commit_record(_flags); + } + + // if this record records a virtual memory 'uncommit' call + inline bool is_uncommit_record() const { + return is_virtual_memory_uncommit_record(_flags); + } + + // if this record is a tagging record of a virtual memory block + inline bool is_type_tagging_record() const { + return is_virtual_memory_type_record(_flags); + } +}; + +// MemPointerRecordEx also records callsite pc, from where +// the memory block is allocated +class MemPointerRecordEx : public MemPointerRecord { + private: + address _pc; // callsite pc + + public: + MemPointerRecordEx(): _pc(0) { } + + MemPointerRecordEx(address addr, MEMFLAGS memflags, size_t size = 0, address pc = 0): + MemPointerRecord(addr, memflags, size), _pc(pc) {} + + MemPointerRecordEx(const MemPointerRecordEx& copy_from): + MemPointerRecord(copy_from), _pc(copy_from.pc()) {} + + inline address pc() const { return _pc; } + + void init(const MemPointerRecordEx* mpe) { + MemPointerRecord::operator=(*mpe); + _pc = mpe->pc(); + } + + void init(const MemPointerRecord* mp) { + MemPointerRecord::operator=(*mp); + _pc = 0; + } +}; + +// a virtual memory region +class VMMemRegion : public MemPointerRecord { + private: + // committed size + size_t _committed_size; + +public: + VMMemRegion(): _committed_size(0) { } + + void init(const MemPointerRecord* mp) { + assert(mp->is_vm_pointer(), "not virtual memory pointer"); + _addr = mp->addr(); + if (mp->is_commit_record() || mp->is_uncommit_record()) { + _committed_size = mp->size(); + set_size(_committed_size); + } else { + set_size(mp->size()); + _committed_size = 0; + } + set_flags(mp->flags()); + } + + VMMemRegion& operator=(const VMMemRegion& other) { + MemPointerRecord::operator=(other); + _committed_size = other.committed_size(); + return *this; + } + + inline bool is_reserve_record() const { + return is_virtual_memory_reserve_record(flags()); + } + + inline bool is_release_record() const { + return is_virtual_memory_release_record(flags()); + } + + // resize reserved VM range + inline void set_reserved_size(size_t new_size) { + assert(new_size >= committed_size(), "resize"); + set_size(new_size); + } + + inline void commit(size_t size) { + _committed_size += size; + } + + inline void uncommit(size_t size) { + if (_committed_size >= size) { + _committed_size -= size; + } else { + _committed_size = 0; + } + } + + /* + * if this virtual memory range covers whole range of + * the other VMMemRegion + */ + bool contains(const VMMemRegion* mr) const; + + /* base address of this virtual memory range */ + inline address base() const { + return addr(); + } + + /* tag this virtual memory range to the specified memory type */ + inline void tag(MEMFLAGS f) { + set_flags(flags() | (f & mt_masks)); + } + + // release part of memory range + inline void partial_release(address add, size_t sz) { + assert(add >= addr() && add < addr() + size(), "not valid address"); + // for now, it can partially release from the both ends, + // but not in the middle + assert(add == addr() || (add + sz) == (addr() + size()), + "release in the middle"); + if (add == addr()) { + set_addr(add + sz); + set_size(size() - sz); + } else { + set_size(size() - sz); + } + } + + // the committed size of the virtual memory block + inline size_t committed_size() const { + return _committed_size; + } + + // the reserved size of the virtual memory block + inline size_t reserved_size() const { + return size(); + } +}; + +class VMMemRegionEx : public VMMemRegion { + private: + jint _seq; // sequence number + + public: + VMMemRegionEx(): _pc(0) { } + + void init(const MemPointerRecordEx* mpe) { + VMMemRegion::init(mpe); + _pc = mpe->pc(); + } + + void init(const MemPointerRecord* mpe) { + VMMemRegion::init(mpe); + _pc = 0; + } + + VMMemRegionEx& operator=(const VMMemRegionEx& other) { + VMMemRegion::operator=(other); + _pc = other.pc(); + return *this; + } + + inline address pc() const { return _pc; } + private: + address _pc; +}; + +/* + * Sequenced memory record + */ +class SeqMemPointerRecord : public MemPointerRecord { + private: + jint _seq; // sequence number + + public: + SeqMemPointerRecord(): _seq(0){ } + + SeqMemPointerRecord(address addr, MEMFLAGS flags, size_t size) + : MemPointerRecord(addr, flags, size) { + _seq = SequenceGenerator::next(); + } + + SeqMemPointerRecord(const SeqMemPointerRecord& copy_from) + : MemPointerRecord(copy_from) { + _seq = copy_from.seq(); + } + + SeqMemPointerRecord& operator= (const SeqMemPointerRecord& ptr) { + MemPointerRecord::operator=(ptr); + _seq = ptr.seq(); + return *this; + } + + inline jint seq() const { + return _seq; + } +}; + + + +class SeqMemPointerRecordEx : public MemPointerRecordEx { + private: + jint _seq; // sequence number + + public: + SeqMemPointerRecordEx(): _seq(0) { } + + SeqMemPointerRecordEx(address addr, MEMFLAGS flags, size_t size, + address pc): MemPointerRecordEx(addr, flags, size, pc) { + _seq = SequenceGenerator::next(); + } + + SeqMemPointerRecordEx(const SeqMemPointerRecordEx& copy_from) + : MemPointerRecordEx(copy_from) { + _seq = copy_from.seq(); + } + + SeqMemPointerRecordEx& operator= (const SeqMemPointerRecordEx& ptr) { + MemPointerRecordEx::operator=(ptr); + _seq = ptr.seq(); + return *this; + } + + inline jint seq() const { + return _seq; + } +}; + +#endif // SHARE_VM_SERVICES_MEM_PTR_HPP diff --git a/hotspot/src/share/vm/services/memPtrArray.hpp b/hotspot/src/share/vm/services/memPtrArray.hpp new file mode 100644 index 00000000000..1b1b570ac0f --- /dev/null +++ b/hotspot/src/share/vm/services/memPtrArray.hpp @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#ifndef SHARE_VM_UTILITIES_MEM_PTR_ARRAY_HPP +#define SHARE_VM_UTILITIES_MEM_PTR_ARRAY_HPP + +#include "memory/allocation.hpp" +#include "services/memPtr.hpp" + +class MemPtr; +class MemRecorder; +class ArenaInfo; +class MemSnapshot; + +extern "C" { + typedef int (*FN_SORT)(const void *, const void *); +} + + +// Memory pointer array interface. This array is used by NMT to hold +// various memory block information. +// The memory pointer arrays are usually walked with their iterators. + +class MemPointerArray : public CHeapObj { + public: + virtual ~MemPointerArray() { } + + // return true if it can not allocate storage for the data + virtual bool out_of_memory() const = 0; + virtual bool is_empty() const = 0; + virtual bool is_full() = 0; + virtual int length() const = 0; + virtual void clear() = 0; + virtual bool append(MemPointer* ptr) = 0; + virtual bool insert_at(MemPointer* ptr, int pos) = 0; + virtual bool remove_at(int pos) = 0; + virtual MemPointer* at(int index) const = 0; + virtual void sort(FN_SORT fn) = 0; + virtual size_t instance_size() const = 0; + virtual bool shrink() = 0; + + debug_only(virtual int capacity() const = 0;) +}; + +// Iterator interface +class MemPointerArrayIterator VALUE_OBJ_CLASS_SPEC { + public: + // return the pointer at current position + virtual MemPointer* current() const = 0; + // return the next pointer and advance current position + virtual MemPointer* next() = 0; + // return next pointer without advancing current position + virtual MemPointer* peek_next() const = 0; + // return previous pointer without changing current position + virtual MemPointer* peek_prev() const = 0; + // remove the pointer at current position + virtual void remove() = 0; + // insert the pointer at current position + virtual bool insert(MemPointer* ptr) = 0; + // insert specified element after current position and + // move current position to newly inserted position + virtual bool insert_after(MemPointer* ptr) = 0; +}; + +// implementation class +class MemPointerArrayIteratorImpl : public MemPointerArrayIterator { +#ifdef ASSERT + protected: +#else + private: +#endif + MemPointerArray* _array; + int _pos; + + public: + MemPointerArrayIteratorImpl(MemPointerArray* arr) { + assert(arr != NULL, "Parameter check"); + _array = arr; + _pos = 0; + } + + virtual MemPointer* current() const { + if (_pos < _array->length()) { + return _array->at(_pos); + } + return NULL; + } + + virtual MemPointer* next() { + if (_pos + 1 < _array->length()) { + return _array->at(++_pos); + } + _pos = _array->length(); + return NULL; + } + + virtual MemPointer* peek_next() const { + if (_pos + 1 < _array->length()) { + return _array->at(_pos + 1); + } + return NULL; + } + + virtual MemPointer* peek_prev() const { + if (_pos > 0) { + return _array->at(_pos - 1); + } + return NULL; + } + + virtual void remove() { + if (_pos < _array->length()) { + _array->remove_at(_pos); + } + } + + virtual bool insert(MemPointer* ptr) { + return _array->insert_at(ptr, _pos); + } + + virtual bool insert_after(MemPointer* ptr) { + if (_array->insert_at(ptr, _pos + 1)) { + _pos ++; + return true; + } + return false; + } +}; + + + +// Memory pointer array implementation. +// This implementation implements expandable array +#define DEFAULT_PTR_ARRAY_SIZE 1024 + +template class MemPointerArrayImpl : public MemPointerArray { + private: + int _max_size; + int _size; + bool _init_elements; + E* _data; + + public: + MemPointerArrayImpl(int initial_size = DEFAULT_PTR_ARRAY_SIZE, bool init_elements = true): + _max_size(initial_size), _size(0), _init_elements(init_elements) { + _data = (E*)raw_allocate(sizeof(E), initial_size); + if (_init_elements) { + for (int index = 0; index < _max_size; index ++) { + ::new ((void*)&_data[index]) E(); + } + } + } + + virtual ~MemPointerArrayImpl() { + if (_data != NULL) { + raw_free(_data); + } + } + + public: + bool out_of_memory() const { + return (_data == NULL); + } + + size_t instance_size() const { + return sizeof(MemPointerArrayImpl) + _max_size * sizeof(E); + } + + bool is_empty() const { + assert(_data != NULL, "Just check"); + return _size == 0; + } + + bool is_full() { + assert(_data != NULL, "Just check"); + if (_size < _max_size) { + return false; + } else { + return !expand_array(); + } + } + + int length() const { + assert(_data != NULL, "Just check"); + return _size; + } + + debug_only(int capacity() const { return _max_size; }) + + void clear() { + assert(_data != NULL, "Just check"); + _size = 0; + } + + bool append(MemPointer* ptr) { + assert(_data != NULL, "Just check"); + if (is_full()) { + return false; + } + _data[_size ++] = *(E*)ptr; + return true; + } + + bool insert_at(MemPointer* ptr, int pos) { + assert(_data != NULL, "Just check"); + if (is_full()) { + return false; + } + for (int index = _size; index > pos; index --) { + _data[index] = _data[index - 1]; + } + _data[pos] = *(E*)ptr; + _size ++; + return true; + } + + bool remove_at(int pos) { + assert(_data != NULL, "Just check"); + if (_size <= pos && pos >= 0) { + return false; + } + -- _size; + + for (int index = pos; index < _size; index ++) { + _data[index] = _data[index + 1]; + } + return true; + } + + MemPointer* at(int index) const { + assert(_data != NULL, "Just check"); + assert(index >= 0 && index < _size, "illegal index"); + return &_data[index]; + } + + bool shrink() { + float used = ((float)_size) / ((float)_max_size); + if (used < 0.40) { + E* old_ptr = _data; + int new_size = ((_max_size) / (2 * DEFAULT_PTR_ARRAY_SIZE) + 1) * DEFAULT_PTR_ARRAY_SIZE; + _data = (E*)raw_reallocate(_data, sizeof(E), new_size); + if (_data == NULL) { + _data = old_ptr; + return false; + } else { + _max_size = new_size; + return true; + } + } + return false; + } + + void sort(FN_SORT fn) { + assert(_data != NULL, "Just check"); + qsort((void*)_data, _size, sizeof(E), fn); + } + + private: + bool expand_array() { + assert(_data != NULL, "Not yet allocated"); + E* old_ptr = _data; + if ((_data = (E*)raw_reallocate((void*)_data, sizeof(E), + _max_size + DEFAULT_PTR_ARRAY_SIZE)) == NULL) { + _data = old_ptr; + return false; + } else { + _max_size += DEFAULT_PTR_ARRAY_SIZE; + if (_init_elements) { + for (int index = _size; index < _max_size; index ++) { + ::new ((void*)&_data[index]) E(); + } + } + return true; + } + } + + void* raw_allocate(size_t elementSize, int items) { + return os::malloc(elementSize * items, mtNMT); + } + + void* raw_reallocate(void* ptr, size_t elementSize, int items) { + return os::realloc(ptr, elementSize * items, mtNMT); + } + + void raw_free(void* ptr) { + os::free(ptr, mtNMT); + } +}; + +#endif // SHARE_VM_UTILITIES_MEM_PTR_ARRAY_HPP diff --git a/hotspot/src/share/vm/services/memRecorder.cpp b/hotspot/src/share/vm/services/memRecorder.cpp new file mode 100644 index 00000000000..33db875af31 --- /dev/null +++ b/hotspot/src/share/vm/services/memRecorder.cpp @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" + +#include "runtime/atomic.hpp" +#include "services/memBaseline.hpp" +#include "services/memRecorder.hpp" +#include "services/memPtr.hpp" +#include "services/memTracker.hpp" + +MemPointer* SequencedRecordIterator::next_record() { + MemPointer* itr_cur = _itr.current(); + if (itr_cur == NULL) return NULL; + MemPointer* itr_next = _itr.next(); + + while (itr_next != NULL && + same_kind((MemPointerRecord*)itr_cur, (MemPointerRecord*)itr_next)) { + itr_cur = itr_next; + itr_next = _itr.next(); + } + + return itr_cur; +} + + +volatile jint MemRecorder::_instance_count = 0; + +MemRecorder::MemRecorder() { + assert(MemTracker::is_on(), "Native memory tracking is off"); + Atomic::inc(&_instance_count); + debug_only(set_generation();) + + if (MemTracker::track_callsite()) { + _pointer_records = new (std::nothrow)FixedSizeMemPointerArray(); + } else { + _pointer_records = new (std::nothrow)FixedSizeMemPointerArray(); + } + _next = NULL; + + + if (_pointer_records != NULL) { + // recode itself + record((address)this, (MemPointerRecord::malloc_tag()|mtNMT|otNMTRecorder), + sizeof(MemRecorder), CALLER_PC); + record((address)_pointer_records, (MemPointerRecord::malloc_tag()|mtNMT|otNMTRecorder), + _pointer_records->instance_size(),CURRENT_PC); + } +} + +MemRecorder::~MemRecorder() { + if (_pointer_records != NULL) { + if (MemTracker::is_on()) { + MemTracker::record_free((address)_pointer_records, mtNMT); + MemTracker::record_free((address)this, mtNMT); + } + delete _pointer_records; + } + if (_next != NULL) { + delete _next; + } + + Atomic::dec(&_instance_count); +} + +// Sorting order: +// 1. memory block address +// 2. mem pointer record tags +// 3. sequence number +int MemRecorder::sort_record_fn(const void* e1, const void* e2) { + const MemPointerRecord* p1 = (const MemPointerRecord*)e1; + const MemPointerRecord* p2 = (const MemPointerRecord*)e2; + int delta = UNSIGNED_COMPARE(p1->addr(), p2->addr()); + if (delta == 0) { + int df = UNSIGNED_COMPARE((p1->flags() & MemPointerRecord::tag_masks), + (p2->flags() & MemPointerRecord::tag_masks)); + if (df == 0) { + assert(p1->seq() != p2->seq(), "dup seq"); + return p1->seq() - p2->seq(); + } else { + return df; + } + } else { + return delta; + } +} + +bool MemRecorder::record(address p, MEMFLAGS flags, size_t size, address pc) { +#ifdef ASSERT + if (MemPointerRecord::is_virtual_memory_record(flags)) { + assert((flags & MemPointerRecord::tag_masks) != 0, "bad virtual memory record"); + } else { + assert((flags & MemPointerRecord::tag_masks) == MemPointerRecord::malloc_tag() || + (flags & MemPointerRecord::tag_masks) == MemPointerRecord::free_tag() || + IS_ARENA_OBJ(flags), + "bad malloc record"); + } + // a recorder should only hold records within the same generation + unsigned long cur_generation = SequenceGenerator::current_generation(); + assert(cur_generation == _generation, + "this thread did not enter sync point"); +#endif + + if (MemTracker::track_callsite()) { + SeqMemPointerRecordEx ap(p, flags, size, pc); + debug_only(check_dup_seq(ap.seq());) + return _pointer_records->append(&ap); + } else { + SeqMemPointerRecord ap(p, flags, size); + debug_only(check_dup_seq(ap.seq());) + return _pointer_records->append(&ap); + } +} + + // iterator for alloc pointers +SequencedRecordIterator MemRecorder::pointer_itr() { + assert(_pointer_records != NULL, "just check"); + _pointer_records->sort((FN_SORT)sort_record_fn); + return SequencedRecordIterator(_pointer_records); +} + + +#ifdef ASSERT +void MemRecorder::set_generation() { + _generation = SequenceGenerator::current_generation(); +} + +void MemRecorder::check_dup_seq(jint seq) const { + MemPointerArrayIteratorImpl itr(_pointer_records); + MemPointerRecord* rc = (MemPointerRecord*)itr.current(); + while (rc != NULL) { + assert(rc->seq() != seq, "dup seq"); + rc = (MemPointerRecord*)itr.next(); + } +} + +#endif diff --git a/hotspot/src/share/vm/services/memRecorder.hpp b/hotspot/src/share/vm/services/memRecorder.hpp new file mode 100644 index 00000000000..313af97db7f --- /dev/null +++ b/hotspot/src/share/vm/services/memRecorder.hpp @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_RECORDER_HPP +#define SHARE_VM_SERVICES_MEM_RECORDER_HPP + +#include "memory/allocation.hpp" +#include "runtime/os.hpp" +#include "services/memPtrArray.hpp" + +class MemSnapshot; +class MemTracker; +class MemTrackWorker; + +// Fixed size memory pointer array implementation +template class FixedSizeMemPointerArray : + public MemPointerArray { + // This implementation is for memory recorder only + friend class MemRecorder; + + private: + E _data[SIZE]; + int _size; + + protected: + FixedSizeMemPointerArray(bool init_elements = false): + _size(0){ + if (init_elements) { + for (int index = 0; index < SIZE; index ++) { + ::new ((void*)&_data[index]) E(); + } + } + } + + void* operator new(size_t size, const std::nothrow_t& nothrow_constant) { + // the instance is part of memRecorder, needs to be tagged with 'otNMTRecorder' + // to avoid recursion + return os::malloc(size, (mtNMT | otNMTRecorder)); + } + + void* operator new(size_t size) { + assert(false, "use nothrow version"); + return NULL; + } + + void operator delete(void* p) { + os::free(p, (mtNMT | otNMTRecorder)); + } + + // instance size + inline size_t instance_size() const { + return sizeof(FixedSizeMemPointerArray); + } + + debug_only(int capacity() const { return SIZE; }) + + public: + // implementation of public interface + bool out_of_memory() const { return false; } + bool is_empty() const { return _size == 0; } + bool is_full() { return length() >= SIZE; } + int length() const { return _size; } + + void clear() { + _size = 0; + } + + bool append(MemPointer* ptr) { + if (is_full()) return false; + _data[_size ++] = *(E*)ptr; + return true; + } + + virtual bool insert_at(MemPointer* p, int pos) { + assert(false, "append only"); + return false; + } + + virtual bool remove_at(int pos) { + assert(false, "not supported"); + return false; + } + + MemPointer* at(int index) const { + assert(index >= 0 && index < length(), + "parameter check"); + return ((E*)&_data[index]); + } + + void sort(FN_SORT fn) { + qsort((void*)_data, _size, sizeof(E), fn); + } + + bool shrink() { + return false; + } +}; + + +// This iterator requires pre-sorted MemPointerArray, which is sorted by: +// 1. address +// 2. allocation type +// 3. sequence number +// During the array walking, iterator collapses pointers with the same +// address and allocation type, and only returns the one with highest +// sequence number. +// +// This is read-only iterator, update methods are asserted. +class SequencedRecordIterator : public MemPointerArrayIterator { + private: + MemPointerArrayIteratorImpl _itr; + MemPointer* _cur; + + public: + SequencedRecordIterator(const MemPointerArray* arr): + _itr(const_cast(arr)) { + _cur = next_record(); + } + + SequencedRecordIterator(const SequencedRecordIterator& itr): + _itr(itr._itr) { + _cur = next_record(); + } + + // return the pointer at current position + virtual MemPointer* current() const { + return _cur; + }; + + // return the next pointer and advance current position + virtual MemPointer* next() { + _cur = next_record(); + return _cur; + } + + // return the next pointer without advancing current position + virtual MemPointer* peek_next() const { + assert(false, "not implemented"); + return NULL; + + } + // return the previous pointer without changing current position + virtual MemPointer* peek_prev() const { + assert(false, "not implemented"); + return NULL; + } + + // remove the pointer at current position + virtual void remove() { + assert(false, "read-only iterator"); + }; + // insert the pointer at current position + virtual bool insert(MemPointer* ptr) { + assert(false, "read-only iterator"); + return false; + } + + virtual bool insert_after(MemPointer* ptr) { + assert(false, "read-only iterator"); + return false; + } + private: + // collapse the 'same kind' of records, and return this 'kind' of + // record with highest sequence number + MemPointer* next_record(); + + // Test if the two records are the same kind: the same memory block and allocation + // type. + inline bool same_kind(const MemPointerRecord* p1, const MemPointerRecord* p2) const { + return (p1->addr() == p2->addr() && + (p1->flags() &MemPointerRecord::tag_masks) == + (p2->flags() & MemPointerRecord::tag_masks)); + } +}; + + + +#define DEFAULT_RECORDER_PTR_ARRAY_SIZE 512 + +class MemRecorder : public CHeapObj { + friend class MemSnapshot; + friend class MemTracker; + friend class MemTrackWorker; + + protected: + // the array that holds memory records + MemPointerArray* _pointer_records; + + private: + // used for linked list + MemRecorder* _next; + // active recorder can only record a certain generation data + debug_only(unsigned long _generation;) + + protected: + _NOINLINE_ MemRecorder(); + ~MemRecorder(); + + // record a memory operation + bool record(address addr, MEMFLAGS flags, size_t size, address caller_pc = 0); + + // linked list support + inline void set_next(MemRecorder* rec) { + _next = rec; + } + + inline MemRecorder* next() const { + return _next; + } + + // if the recorder is full + inline bool is_full() const { + assert(_pointer_records != NULL, "just check"); + return _pointer_records->is_full(); + } + + // if running out of memory when initializing recorder's internal + // data + inline bool out_of_memory() const { + return (_pointer_records == NULL || + _pointer_records->out_of_memory()); + } + + inline void clear() { + assert(_pointer_records != NULL, "Just check"); + _pointer_records->clear(); + } + + SequencedRecordIterator pointer_itr(); + + protected: + // number of MemRecorder instance + static volatile jint _instance_count; + + private: + // sorting function, sort records into following order + // 1. memory address + // 2. allocation type + // 3. sequence number + static int sort_record_fn(const void* e1, const void* e2); + + debug_only(void check_dup_seq(jint seq) const;) + debug_only(void set_generation();) +}; + +#endif // SHARE_VM_SERVICES_MEM_RECORDER_HPP diff --git a/hotspot/src/share/vm/services/memReporter.cpp b/hotspot/src/share/vm/services/memReporter.cpp new file mode 100644 index 00000000000..783d951de14 --- /dev/null +++ b/hotspot/src/share/vm/services/memReporter.cpp @@ -0,0 +1,560 @@ +/* + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#include "precompiled.hpp" +#include "classfile/systemDictionary.hpp" +#include "runtime/os.hpp" +#include "services/memReporter.hpp" +#include "services/memPtrArray.hpp" +#include "services/memTracker.hpp" + +const char* BaselineOutputer::memory_unit(size_t scale) { + switch(scale) { + case K: return "KB"; + case M: return "MB"; + case G: return "GB"; + } + ShouldNotReachHere(); + return NULL; +} + + +void BaselineReporter::report_baseline(const MemBaseline& baseline, bool summary_only) { + assert(MemTracker::is_on(), "Native memory tracking is off"); + _outputer.start(scale()); + _outputer.total_usage( + amount_in_current_scale(baseline.total_malloc_amount() + baseline.total_reserved_amount()), + amount_in_current_scale(baseline.total_malloc_amount() + baseline.total_committed_amount())); + + _outputer.num_of_classes(baseline.number_of_classes()); + _outputer.num_of_threads(baseline.number_of_threads()); + + report_summaries(baseline); + if (!summary_only && MemTracker::track_callsite()) { + report_callsites(baseline); + } + _outputer.done(); +} + +void BaselineReporter::report_summaries(const MemBaseline& baseline) { + _outputer.start_category_summary(); + MEMFLAGS type; + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + type = MemBaseline::MemType2NameMap[index]._flag; + _outputer.category_summary(type, + amount_in_current_scale(baseline.reserved_amount(type)), + amount_in_current_scale(baseline.committed_amount(type)), + amount_in_current_scale(baseline.malloc_amount(type)), + baseline.malloc_count(type), + amount_in_current_scale(baseline.arena_amount(type)), + baseline.arena_count(type)); + } + + _outputer.done_category_summary(); +} + +void BaselineReporter::report_callsites(const MemBaseline& baseline) { + _outputer.start_callsite(); + MemBaseline* pBL = const_cast(&baseline); + + pBL->_malloc_cs->sort((FN_SORT)MemBaseline::bl_malloc_sort_by_size); + pBL->_vm_cs->sort((FN_SORT)MemBaseline::bl_vm_sort_by_size); + + // walk malloc callsites + MemPointerArrayIteratorImpl malloc_itr(pBL->_malloc_cs); + MallocCallsitePointer* malloc_callsite = + (MallocCallsitePointer*)malloc_itr.current(); + while (malloc_callsite != NULL) { + _outputer.malloc_callsite(malloc_callsite->addr(), + amount_in_current_scale(malloc_callsite->amount()), malloc_callsite->count()); + malloc_callsite = (MallocCallsitePointer*)malloc_itr.next(); + } + + // walk virtual memory callsite + MemPointerArrayIteratorImpl vm_itr(pBL->_vm_cs); + VMCallsitePointer* vm_callsite = (VMCallsitePointer*)vm_itr.current(); + while (vm_callsite != NULL) { + _outputer.virtual_memory_callsite(vm_callsite->addr(), + amount_in_current_scale(vm_callsite->reserved_amount()), + amount_in_current_scale(vm_callsite->committed_amount())); + vm_callsite = (VMCallsitePointer*)vm_itr.next(); + } + pBL->_malloc_cs->sort((FN_SORT)MemBaseline::bl_malloc_sort_by_pc); + pBL->_vm_cs->sort((FN_SORT)MemBaseline::bl_vm_sort_by_pc); + _outputer.done_callsite(); +} + +void BaselineReporter::diff_baselines(const MemBaseline& cur, const MemBaseline& prev, + bool summary_only) { + assert(MemTracker::is_on(), "Native memory tracking is off"); + _outputer.start(scale()); + size_t total_reserved = cur.total_malloc_amount() + cur.total_reserved_amount(); + size_t total_committed = cur.total_malloc_amount() + cur.total_committed_amount(); + + _outputer.diff_total_usage( + amount_in_current_scale(total_reserved), amount_in_current_scale(total_committed), + diff_in_current_scale(total_reserved, (prev.total_malloc_amount() + prev.total_reserved_amount())), + diff_in_current_scale(total_committed, (prev.total_committed_amount() + prev.total_malloc_amount()))); + + _outputer.diff_num_of_classes(cur.number_of_classes(), + diff(cur.number_of_classes(), prev.number_of_classes())); + _outputer.diff_num_of_threads(cur.number_of_threads(), + diff(cur.number_of_threads(), prev.number_of_threads())); + + diff_summaries(cur, prev); + if (!summary_only && MemTracker::track_callsite()) { + diff_callsites(cur, prev); + } + _outputer.done(); +} + +void BaselineReporter::diff_summaries(const MemBaseline& cur, const MemBaseline& prev) { + _outputer.start_category_summary(); + MEMFLAGS type; + + for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { + type = MemBaseline::MemType2NameMap[index]._flag; + _outputer.diff_category_summary(type, + amount_in_current_scale(cur.reserved_amount(type)), + amount_in_current_scale(cur.committed_amount(type)), + amount_in_current_scale(cur.malloc_amount(type)), + cur.malloc_count(type), + amount_in_current_scale(cur.arena_amount(type)), + cur.arena_count(type), + diff_in_current_scale(cur.reserved_amount(type), prev.reserved_amount(type)), + diff_in_current_scale(cur.committed_amount(type), prev.committed_amount(type)), + diff_in_current_scale(cur.malloc_amount(type), prev.malloc_amount(type)), + diff(cur.malloc_count(type), prev.malloc_count(type)), + diff_in_current_scale(cur.arena_amount(type), prev.arena_amount(type)), + diff(cur.arena_count(type), prev.arena_count(type))); + } + + _outputer.done_category_summary(); +} + +void BaselineReporter::diff_callsites(const MemBaseline& cur, const MemBaseline& prev) { + _outputer.start_callsite(); + MemBaseline* pBL_cur = const_cast(&cur); + MemBaseline* pBL_prev = const_cast(&prev); + + // walk malloc callsites + MemPointerArrayIteratorImpl cur_malloc_itr(pBL_cur->_malloc_cs); + MemPointerArrayIteratorImpl prev_malloc_itr(pBL_prev->_malloc_cs); + + MallocCallsitePointer* cur_malloc_callsite = + (MallocCallsitePointer*)cur_malloc_itr.current(); + MallocCallsitePointer* prev_malloc_callsite = + (MallocCallsitePointer*)prev_malloc_itr.current(); + + while (cur_malloc_callsite != NULL || prev_malloc_callsite != NULL) { + if (prev_malloc_callsite == NULL || + cur_malloc_callsite->addr() < prev_malloc_callsite->addr()) { + _outputer.diff_malloc_callsite(cur_malloc_callsite->addr(), + amount_in_current_scale(cur_malloc_callsite->amount()), + cur_malloc_callsite->count(), + diff_in_current_scale(cur_malloc_callsite->amount(), 0), + diff(cur_malloc_callsite->count(), 0)); + cur_malloc_callsite = (MallocCallsitePointer*)cur_malloc_itr.next(); + } else if (prev_malloc_callsite == NULL || + cur_malloc_callsite->addr() > prev_malloc_callsite->addr()) { + _outputer.diff_malloc_callsite(cur_malloc_callsite->addr(), + amount_in_current_scale(prev_malloc_callsite->amount()), + prev_malloc_callsite->count(), + diff_in_current_scale(0, prev_malloc_callsite->amount()), + diff(0, prev_malloc_callsite->count())); + prev_malloc_callsite = (MallocCallsitePointer*)prev_malloc_itr.next(); + } else { // the same callsite + _outputer.diff_malloc_callsite(cur_malloc_callsite->addr(), + amount_in_current_scale(cur_malloc_callsite->amount()), + cur_malloc_callsite->count(), + diff_in_current_scale(cur_malloc_callsite->amount(), prev_malloc_callsite->amount()), + diff(cur_malloc_callsite->count(), prev_malloc_callsite->count())); + cur_malloc_callsite = (MallocCallsitePointer*)cur_malloc_itr.next(); + prev_malloc_callsite = (MallocCallsitePointer*)prev_malloc_itr.next(); + } + } + + // walk virtual memory callsite + MemPointerArrayIteratorImpl cur_vm_itr(pBL_cur->_vm_cs); + MemPointerArrayIteratorImpl prev_vm_itr(pBL_prev->_vm_cs); + VMCallsitePointer* cur_vm_callsite = (VMCallsitePointer*)cur_vm_itr.current(); + VMCallsitePointer* prev_vm_callsite = (VMCallsitePointer*)prev_vm_itr.current(); + while (cur_vm_callsite != NULL || prev_vm_callsite != NULL) { + if (prev_vm_callsite == NULL || cur_vm_callsite->addr() < prev_vm_callsite->addr()) { + _outputer.diff_virtual_memory_callsite(cur_vm_callsite->addr(), + amount_in_current_scale(cur_vm_callsite->reserved_amount()), + amount_in_current_scale(cur_vm_callsite->committed_amount()), + diff_in_current_scale(cur_vm_callsite->reserved_amount(), 0), + diff_in_current_scale(cur_vm_callsite->committed_amount(), 0)); + cur_vm_callsite = (VMCallsitePointer*)cur_vm_itr.next(); + } else if (cur_vm_callsite == NULL || cur_vm_callsite->addr() > prev_vm_callsite->addr()) { + _outputer.diff_virtual_memory_callsite(prev_vm_callsite->addr(), + amount_in_current_scale(prev_vm_callsite->reserved_amount()), + amount_in_current_scale(prev_vm_callsite->committed_amount()), + diff_in_current_scale(0, prev_vm_callsite->reserved_amount()), + diff_in_current_scale(0, prev_vm_callsite->committed_amount())); + prev_vm_callsite = (VMCallsitePointer*)prev_vm_itr.next(); + } else { // the same callsite + _outputer.diff_virtual_memory_callsite(cur_vm_callsite->addr(), + amount_in_current_scale(cur_vm_callsite->reserved_amount()), + amount_in_current_scale(cur_vm_callsite->committed_amount()), + diff_in_current_scale(cur_vm_callsite->reserved_amount(), prev_vm_callsite->reserved_amount()), + diff_in_current_scale(cur_vm_callsite->committed_amount(), prev_vm_callsite->committed_amount())); + cur_vm_callsite = (VMCallsitePointer*)cur_vm_itr.next(); + prev_vm_callsite = (VMCallsitePointer*)prev_vm_itr.next(); + } + } + + _outputer.done_callsite(); +} + +size_t BaselineReporter::amount_in_current_scale(size_t amt) const { + return (size_t)(((float)amt/(float)_scale) + 0.5); +} + +int BaselineReporter::diff_in_current_scale(size_t value1, size_t value2) const { + return (int)(((float)value1 - (float)value2)/((float)_scale) + 0.5); +} + +int BaselineReporter::diff(size_t value1, size_t value2) const { + return ((int)value1 - (int)value2); +} + +void BaselineTTYOutputer::start(size_t scale, bool report_diff) { + _scale = scale; + _output->print_cr(" "); + _output->print_cr("Native Memory Tracking:"); + _output->print_cr(" "); +} + +void BaselineTTYOutputer::done() { + +} + +void BaselineTTYOutputer::total_usage(size_t total_reserved, size_t total_committed) { + const char* unit = memory_unit(_scale); + _output->print_cr("Total: reserved=%d%s, committed=%d%s", + total_reserved, unit, total_committed, unit); +} + +void BaselineTTYOutputer::start_category_summary() { + _output->print_cr(" "); +} + +/** + * report a summary of memory type + */ +void BaselineTTYOutputer::category_summary(MEMFLAGS type, + size_t reserved_amt, size_t committed_amt, size_t malloc_amt, + size_t malloc_count, size_t arena_amt, size_t arena_count) { + + // we report mtThreadStack under mtThread category + if (type == mtThreadStack) { + assert(malloc_amt == 0 && malloc_count == 0 && arena_amt == 0, + "Just check"); + _thread_stack_reserved = reserved_amt; + _thread_stack_committed = committed_amt; + } else { + const char* unit = memory_unit(_scale); + size_t total_reserved = (reserved_amt + malloc_amt + arena_amt); + size_t total_committed = (committed_amt + malloc_amt + arena_amt); + if (type == mtThread) { + total_reserved += _thread_stack_reserved; + total_committed += _thread_stack_committed; + } + + if (total_reserved > 0) { + _output->print_cr("-%26s (reserved=%d%s, committed=%d%s)", + MemBaseline::type2name(type), total_reserved, unit, + total_committed, unit); + + if (type == mtClass) { + _output->print_cr("%27s (classes #%d)", " ", _num_of_classes); + } else if (type == mtThread) { + _output->print_cr("%27s (thread #%d)", " ", _num_of_threads); + _output->print_cr("%27s (stack: reserved=%d%s, committed=%d%s)", " ", + _thread_stack_reserved, unit, _thread_stack_committed, unit); + } + + if (malloc_amt > 0) { + if (type != mtChunk) { + _output->print_cr("%27s (malloc=%d%s, #%d)", " ", malloc_amt, unit, + malloc_count); + } else { + _output->print_cr("%27s (malloc=%d%s)", " ", malloc_amt, unit); + } + } + + if (reserved_amt > 0) { + _output->print_cr("%27s (mmap: reserved=%d%s, committed=%d%s)", + " ", reserved_amt, unit, committed_amt, unit); + } + + if (arena_amt > 0) { + _output->print_cr("%27s (arena=%d%s, #%d)", " ", arena_amt, unit, arena_count); + } + + _output->print_cr(" "); + } + } +} + +void BaselineTTYOutputer::done_category_summary() { + _output->print_cr(" "); +} + +void BaselineTTYOutputer::start_callsite() { + _output->print_cr("Details:"); + _output->print_cr(" "); +} + +void BaselineTTYOutputer::done_callsite() { + _output->print_cr(" "); +} + +void BaselineTTYOutputer::malloc_callsite(address pc, size_t malloc_amt, + size_t malloc_count) { + if (malloc_amt > 0) { + const char* unit = memory_unit(_scale); + char buf[64]; + int offset; + if (pc == 0) { + _output->print("[BOOTSTRAP]%18s", " "); + } else if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset); + _output->print("%28s", " "); + } else { + _output->print("[" PTR_FORMAT "]%18s", pc, " "); + } + + _output->print_cr("(malloc=%d%s #%d)", malloc_amt, unit, malloc_count); + _output->print_cr(" "); + } +} + +void BaselineTTYOutputer::virtual_memory_callsite(address pc, size_t reserved_amt, + size_t committed_amt) { + if (reserved_amt > 0) { + const char* unit = memory_unit(_scale); + char buf[64]; + int offset; + if (pc == 0) { + _output->print("[BOOTSTRAP]%18s", " "); + } else if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset); + _output->print("%28s", " "); + } else { + _output->print("[" PTR_FORMAT "]%18s", " "); + } + + _output->print_cr("(mmap: reserved=%d%s, committed=%d%s)", + reserved_amt, unit, committed_amt, unit); + _output->print_cr(" "); + } +} + +void BaselineTTYOutputer::diff_total_usage(size_t total_reserved, + size_t total_committed, int reserved_diff, int committed_diff) { + const char* unit = memory_unit(_scale); + _output->print_cr("Total: reserved=%d%s %+d%s, committed=%d%s %+d%s", + total_reserved, unit, reserved_diff, unit, total_committed, unit, + committed_diff, unit); +} + +void BaselineTTYOutputer::diff_category_summary(MEMFLAGS type, + size_t cur_reserved_amt, size_t cur_committed_amt, + size_t cur_malloc_amt, size_t cur_malloc_count, + size_t cur_arena_amt, size_t cur_arena_count, + int reserved_diff, int committed_diff, int malloc_diff, + int malloc_count_diff, int arena_diff, int arena_count_diff) { + + if (type == mtThreadStack) { + assert(cur_malloc_amt == 0 && cur_malloc_count == 0 && + cur_arena_amt == 0, "Just check"); + _thread_stack_reserved = cur_reserved_amt; + _thread_stack_committed = cur_committed_amt; + _thread_stack_reserved_diff = reserved_diff; + _thread_stack_committed_diff = committed_diff; + } else { + const char* unit = memory_unit(_scale); + size_t total_reserved = (cur_reserved_amt + cur_malloc_amt + cur_arena_amt); + // nothing to report in this category + if (total_reserved == 0) { + return; + } + int diff_reserved = (reserved_diff + malloc_diff + arena_diff); + + // category summary + _output->print("-%26s (reserved=%d%s", MemBaseline::type2name(type), + total_reserved, unit); + + if (diff_reserved != 0) { + _output->print(" %+d%s", diff_reserved, unit); + } + + size_t total_committed = cur_committed_amt + cur_malloc_amt + cur_arena_amt; + _output->print(", committed=%d%s", total_committed, unit); + + int total_committed_diff = committed_diff + malloc_diff + arena_diff; + if (total_committed_diff != 0) { + _output->print(" %+d%s", total_committed_diff, unit); + } + + _output->print_cr(")"); + + // special cases + if (type == mtClass) { + _output->print("%27s (classes #%d", " ", _num_of_classes); + if (_num_of_classes_diff != 0) { + _output->print(" %+d", _num_of_classes_diff); + } + _output->print_cr(")"); + } else if (type == mtThread) { + // thread count + _output->print("%27s (thread #%d", " ", _num_of_threads); + if (_num_of_threads_diff != 0) { + _output->print_cr(" %+d)", _num_of_threads_diff); + } else { + _output->print_cr(")"); + } + _output->print("%27s (stack: reserved=%d%s", " ", _thread_stack_reserved, unit); + if (_thread_stack_reserved_diff != 0) { + _output->print(" %+d%s", _thread_stack_reserved_diff, unit); + } + + _output->print(", committed=%d%s", _thread_stack_committed, unit); + if (_thread_stack_committed_diff != 0) { + _output->print(" %+d%s",_thread_stack_committed_diff, unit); + } + + _output->print_cr(")"); + } + + // malloc'd memory + if (cur_malloc_amt > 0) { + _output->print("%27s (malloc=%d%s", " ", cur_malloc_amt, unit); + if (malloc_diff != 0) { + _output->print(" %+d%s", malloc_diff, unit); + } + if (type != mtChunk) { + _output->print(", #%d", cur_malloc_count); + if (malloc_count_diff) { + _output->print(" %+d", malloc_count_diff); + } + } + _output->print_cr(")"); + } + + // mmap'd memory + if (cur_reserved_amt > 0) { + _output->print("%27s (mmap: reserved=%d%s", " ", cur_reserved_amt, unit); + if (reserved_diff != 0) { + _output->print(" %+d%s", reserved_diff, unit); + } + + _output->print(", committed=%d%s", cur_committed_amt, unit); + if (committed_diff != 0) { + _output->print(" %+d%s", committed_diff, unit); + } + _output->print_cr(")"); + } + + // arena memory + if (cur_arena_amt > 0) { + _output->print("%27s (arena=%d%s", " ", cur_arena_amt, unit); + if (arena_diff != 0) { + _output->print(" %+d%s", arena_diff, unit); + } + _output->print(", #%d", cur_arena_count); + if (arena_count_diff != 0) { + _output->print(" %+d", arena_count_diff); + } + _output->print_cr(")"); + } + + _output->print_cr(" "); + } +} + +void BaselineTTYOutputer::diff_malloc_callsite(address pc, + size_t cur_malloc_amt, size_t cur_malloc_count, + int malloc_diff, int malloc_count_diff) { + if (malloc_diff != 0) { + const char* unit = memory_unit(_scale); + char buf[64]; + int offset; + if (pc == 0) { + _output->print_cr("[BOOTSTRAP]%18s", " "); + } else { + if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset); + _output->print("%28s", " "); + } else { + _output->print("[" PTR_FORMAT "]%18s", pc, " "); + } + } + + _output->print("(malloc=%d%s", cur_malloc_amt, unit); + if (malloc_diff != 0) { + _output->print(" %+d%s", malloc_diff, unit); + } + _output->print(", #%d", cur_malloc_count); + if (malloc_count_diff != 0) { + _output->print(" %+d", malloc_count_diff); + } + _output->print_cr(")"); + _output->print_cr(" "); + } +} + +void BaselineTTYOutputer::diff_virtual_memory_callsite(address pc, + size_t cur_reserved_amt, size_t cur_committed_amt, + int reserved_diff, int committed_diff) { + if (reserved_diff != 0 || committed_diff != 0) { + const char* unit = memory_unit(_scale); + char buf[64]; + int offset; + if (pc == 0) { + _output->print_cr("[BOOSTRAP]%18s", " "); + } else { + if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset); + _output->print("%28s", " "); + } else { + _output->print("[" PTR_FORMAT "]%18s", " "); + } + } + + _output->print("(mmap: reserved=%d%s", cur_reserved_amt, unit); + if (reserved_diff != 0) { + _output->print(" %+d%s", reserved_diff, unit); + } + _output->print(", committed=%d%s", cur_committed_amt, unit); + if (committed_diff != 0) { + _output->print(" %+d%s", committed_diff, unit); + } + _output->print_cr(")"); + _output->print_cr(" "); + } +} diff --git a/hotspot/src/share/vm/services/memReporter.hpp b/hotspot/src/share/vm/services/memReporter.hpp new file mode 100644 index 00000000000..4ce64ba2d31 --- /dev/null +++ b/hotspot/src/share/vm/services/memReporter.hpp @@ -0,0 +1,268 @@ +/* + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_REPORTER_HPP +#define SHARE_VM_SERVICES_MEM_REPORTER_HPP + +#include "runtime/mutexLocker.hpp" +#include "services/memBaseline.hpp" +#include "services/memTracker.hpp" +#include "utilities/ostream.hpp" + +/* + * MemBaselineReporter reports data to this outputer class, + * ReportOutputer is responsible for format, store and redirect + * the data to the final destination. + */ +class BaselineOutputer : public StackObj { + public: + // start to report memory usage in specified scale. + // if report_diff = true, the reporter reports baseline comparison + // information. + + virtual void start(size_t scale, bool report_diff = false) = 0; + // Done reporting + virtual void done() = 0; + + /* report baseline summary information */ + virtual void total_usage(size_t total_reserved, + size_t total_committed) = 0; + virtual void num_of_classes(size_t classes) = 0; + virtual void num_of_threads(size_t threads) = 0; + + virtual void thread_info(size_t stack_reserved_amt, size_t stack_committed_amt) = 0; + + /* report baseline summary comparison */ + virtual void diff_total_usage(size_t total_reserved, + size_t total_committed, + int reserved_diff, + int committed_diff) = 0; + virtual void diff_num_of_classes(size_t classes, int diff) = 0; + virtual void diff_num_of_threads(size_t threads, int diff) = 0; + + virtual void diff_thread_info(size_t stack_reserved, size_t stack_committed, + int stack_reserved_diff, int stack_committed_diff) = 0; + + + /* + * memory summary by memory types. + * for each memory type, following summaries are reported: + * - reserved amount, committed amount + * - malloc'd amount, malloc count + * - arena amount, arena count + */ + + // start reporting memory summary by memory type + virtual void start_category_summary() = 0; + + virtual void category_summary(MEMFLAGS type, size_t reserved_amt, + size_t committed_amt, + size_t malloc_amt, size_t malloc_count, + size_t arena_amt, size_t arena_count) = 0; + + virtual void diff_category_summary(MEMFLAGS type, size_t cur_reserved_amt, + size_t cur_committed_amt, + size_t cur_malloc_amt, size_t cur_malloc_count, + size_t cur_arena_amt, size_t cur_arena_count, + int reserved_diff, int committed_diff, int malloc_diff, + int malloc_count_diff, int arena_diff, + int arena_count_diff) = 0; + + virtual void done_category_summary() = 0; + + /* + * Report callsite information + */ + virtual void start_callsite() = 0; + virtual void malloc_callsite(address pc, size_t malloc_amt, size_t malloc_count) = 0; + virtual void virtual_memory_callsite(address pc, size_t reserved_amt, size_t committed_amt) = 0; + + virtual void diff_malloc_callsite(address pc, size_t cur_malloc_amt, size_t cur_malloc_count, + int malloc_diff, int malloc_count_diff) = 0; + virtual void diff_virtual_memory_callsite(address pc, size_t cur_reserved_amt, size_t cur_committed_amt, + int reserved_diff, int committed_diff) = 0; + + virtual void done_callsite() = 0; + + // return current scale in "KB", "MB" or "GB" + static const char* memory_unit(size_t scale); +}; + +/* + * This class reports processed data from a baseline or + * the changes between the two baseline. + */ +class BaselineReporter : public StackObj { + private: + BaselineOutputer& _outputer; + size_t _scale; + + public: + // construct a reporter that reports memory usage + // in specified scale + BaselineReporter(BaselineOutputer& outputer, size_t scale = K): + _outputer(outputer) { + _scale = scale; + } + virtual void report_baseline(const MemBaseline& baseline, bool summary_only = false); + virtual void diff_baselines(const MemBaseline& cur, const MemBaseline& prev, + bool summary_only = false); + + void set_scale(size_t scale); + size_t scale() const { return _scale; } + + private: + void report_summaries(const MemBaseline& baseline); + void report_callsites(const MemBaseline& baseline); + + void diff_summaries(const MemBaseline& cur, const MemBaseline& prev); + void diff_callsites(const MemBaseline& cur, const MemBaseline& prev); + + // calculate memory size in current memory scale + size_t amount_in_current_scale(size_t amt) const; + // diff two unsigned values in current memory scale + int diff_in_current_scale(size_t value1, size_t value2) const; + // diff two unsigned value + int diff(size_t value1, size_t value2) const; +}; + +/* + * tty output implementation. Native memory tracking + * DCmd uses this outputer. + */ +class BaselineTTYOutputer : public BaselineOutputer { + private: + size_t _scale; + + size_t _num_of_classes; + size_t _num_of_threads; + size_t _thread_stack_reserved; + size_t _thread_stack_committed; + + int _num_of_classes_diff; + int _num_of_threads_diff; + int _thread_stack_reserved_diff; + int _thread_stack_committed_diff; + + outputStream* _output; + + public: + BaselineTTYOutputer(outputStream* st) { + _scale = K; + _num_of_classes = 0; + _num_of_threads = 0; + _thread_stack_reserved = 0; + _thread_stack_committed = 0; + _num_of_classes_diff = 0; + _num_of_threads_diff = 0; + _thread_stack_reserved_diff = 0; + _thread_stack_committed_diff = 0; + _output = st; + } + + // begin reporting memory usage in specified scale + void start(size_t scale, bool report_diff = false); + // done reporting + void done(); + + // total memory usage + void total_usage(size_t total_reserved, + size_t total_committed); + // report total loaded classes + void num_of_classes(size_t classes) { + _num_of_classes = classes; + } + + void num_of_threads(size_t threads) { + _num_of_threads = threads; + } + + void thread_info(size_t stack_reserved_amt, size_t stack_committed_amt) { + _thread_stack_reserved = stack_reserved_amt; + _thread_stack_committed = stack_committed_amt; + } + + void diff_total_usage(size_t total_reserved, + size_t total_committed, + int reserved_diff, + int committed_diff); + + void diff_num_of_classes(size_t classes, int diff) { + _num_of_classes = classes; + _num_of_classes_diff = diff; + } + + void diff_num_of_threads(size_t threads, int diff) { + _num_of_threads = threads; + _num_of_threads_diff = diff; + } + + void diff_thread_info(size_t stack_reserved_amt, size_t stack_committed_amt, + int stack_reserved_diff, int stack_committed_diff) { + _thread_stack_reserved = stack_reserved_amt; + _thread_stack_committed = stack_committed_amt; + _thread_stack_reserved_diff = stack_reserved_diff; + _thread_stack_committed_diff = stack_committed_diff; + } + + /* + * Report memory summary categoriuzed by memory types. + * For each memory type, following summaries are reported: + * - reserved amount, committed amount + * - malloc-ed amount, malloc count + * - arena amount, arena count + */ + // start reporting memory summary by memory type + void start_category_summary(); + void category_summary(MEMFLAGS type, size_t reserved_amt, size_t committed_amt, + size_t malloc_amt, size_t malloc_count, + size_t arena_amt, size_t arena_count); + + void diff_category_summary(MEMFLAGS type, size_t cur_reserved_amt, + size_t cur_committed_amt, + size_t cur_malloc_amt, size_t cur_malloc_count, + size_t cur_arena_amt, size_t cur_arena_count, + int reserved_diff, int committed_diff, int malloc_diff, + int malloc_count_diff, int arena_diff, + int arena_count_diff); + + void done_category_summary(); + + /* + * Report callsite information + */ + void start_callsite(); + void malloc_callsite(address pc, size_t malloc_amt, size_t malloc_count); + void virtual_memory_callsite(address pc, size_t reserved_amt, size_t committed_amt); + + void diff_malloc_callsite(address pc, size_t cur_malloc_amt, size_t cur_malloc_count, + int malloc_diff, int malloc_count_diff); + void diff_virtual_memory_callsite(address pc, size_t cur_reserved_amt, size_t cur_committed_amt, + int reserved_diff, int committed_diff); + + void done_callsite(); +}; + + +#endif // SHARE_VM_SERVICES_MEM_REPORTER_HPP diff --git a/hotspot/src/share/vm/services/memSnapshot.cpp b/hotspot/src/share/vm/services/memSnapshot.cpp new file mode 100644 index 00000000000..30288e546d4 --- /dev/null +++ b/hotspot/src/share/vm/services/memSnapshot.cpp @@ -0,0 +1,463 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "runtime/mutexLocker.hpp" +#include "utilities/decoder.hpp" +#include "services/memBaseline.hpp" +#include "services/memPtr.hpp" +#include "services/memPtrArray.hpp" +#include "services/memSnapshot.hpp" +#include "services/memTracker.hpp" + + +// stagging data groups the data of a VM memory range, so we can consolidate +// them into one record during the walk +bool StagingWalker::consolidate_vm_records(VMMemRegionEx* vm_rec) { + MemPointerRecord* cur = (MemPointerRecord*)_itr.current(); + assert(cur != NULL && cur->is_vm_pointer(), "not a virtual memory pointer"); + + jint cur_seq; + jint next_seq; + + bool trackCallsite = MemTracker::track_callsite(); + + if (trackCallsite) { + vm_rec->init((MemPointerRecordEx*)cur); + cur_seq = ((SeqMemPointerRecordEx*)cur)->seq(); + } else { + vm_rec->init((MemPointerRecord*)cur); + cur_seq = ((SeqMemPointerRecord*)cur)->seq(); + } + + // only can consolidate when we have allocation record, + // which contains virtual memory range + if (!cur->is_allocation_record()) { + _itr.next(); + return true; + } + + // allocation range + address base = cur->addr(); + address end = base + cur->size(); + + MemPointerRecord* next = (MemPointerRecord*)_itr.peek_next(); + // if the memory range is alive + bool live_vm_rec = true; + while (next != NULL && next->is_vm_pointer()) { + if (next->is_allocation_record()) { + assert(next->addr() >= base, "sorting order or overlapping"); + break; + } + + if (trackCallsite) { + next_seq = ((SeqMemPointerRecordEx*)next)->seq(); + } else { + next_seq = ((SeqMemPointerRecord*)next)->seq(); + } + + if (next_seq < cur_seq) { + _itr.next(); + next = (MemPointerRecord*)_itr.peek_next(); + continue; + } + + if (next->is_deallocation_record()) { + if (next->addr() == base && next->size() == cur->size()) { + // the virtual memory range has been released + _itr.next(); + live_vm_rec = false; + break; + } else if (next->addr() < end) { // partial release + vm_rec->partial_release(next->addr(), next->size()); + _itr.next(); + } else { + break; + } + } else if (next->is_commit_record()) { + if (next->addr() >= base && next->addr() + next->size() <= end) { + vm_rec->commit(next->size()); + _itr.next(); + } else { + assert(next->addr() >= base, "sorting order or overlapping"); + break; + } + } else if (next->is_uncommit_record()) { + if (next->addr() >= base && next->addr() + next->size() <= end) { + vm_rec->uncommit(next->size()); + _itr.next(); + } else { + assert(next->addr() >= end, "sorting order or overlapping"); + break; + } + } else if (next->is_type_tagging_record()) { + if (next->addr() >= base && next->addr() < end ) { + vm_rec->tag(next->flags()); + _itr.next(); + } else { + break; + } + } else { + assert(false, "unknown record type"); + } + next = (MemPointerRecord*)_itr.peek_next(); + } + _itr.next(); + return live_vm_rec; +} + +MemPointer* StagingWalker::next() { + MemPointerRecord* cur_p = (MemPointerRecord*)_itr.current(); + if (cur_p == NULL) { + _end_of_array = true; + return NULL; + } + + MemPointerRecord* next_p; + if (cur_p->is_vm_pointer()) { + _is_vm_record = true; + if (!consolidate_vm_records(&_vm_record)) { + return next(); + } + } else { // malloc-ed pointer + _is_vm_record = false; + next_p = (MemPointerRecord*)_itr.peek_next(); + if (next_p != NULL && next_p->addr() == cur_p->addr()) { + assert(cur_p->is_allocation_record(), "sorting order"); + assert(!next_p->is_allocation_record(), "sorting order"); + _itr.next(); + if (cur_p->seq() < next_p->seq()) { + cur_p = next_p; + } + } + if (MemTracker::track_callsite()) { + _malloc_record.init((MemPointerRecordEx*)cur_p); + } else { + _malloc_record.init((MemPointerRecord*)cur_p); + } + + _itr.next(); + } + return current(); +} + +MemSnapshot::MemSnapshot() { + if (MemTracker::track_callsite()) { + _alloc_ptrs = new (std::nothrow) MemPointerArrayImpl(); + _vm_ptrs = new (std::nothrow)MemPointerArrayImpl(64, true); + _staging_area = new (std::nothrow)MemPointerArrayImpl(); + } else { + _alloc_ptrs = new (std::nothrow) MemPointerArrayImpl(); + _vm_ptrs = new (std::nothrow)MemPointerArrayImpl(64, true); + _staging_area = new (std::nothrow)MemPointerArrayImpl(); + } + + _lock = new (std::nothrow) Mutex(Monitor::max_nonleaf - 1, "memSnapshotLock"); + NOT_PRODUCT(_untracked_count = 0;) +} + +MemSnapshot::~MemSnapshot() { + assert(MemTracker::shutdown_in_progress(), "native memory tracking still on"); + { + MutexLockerEx locker(_lock); + if (_staging_area != NULL) { + delete _staging_area; + _staging_area = NULL; + } + + if (_alloc_ptrs != NULL) { + delete _alloc_ptrs; + _alloc_ptrs = NULL; + } + + if (_vm_ptrs != NULL) { + delete _vm_ptrs; + _vm_ptrs = NULL; + } + } + + if (_lock != NULL) { + delete _lock; + _lock = NULL; + } +} + +void MemSnapshot::copy_pointer(MemPointerRecord* dest, const MemPointerRecord* src) { + assert(dest != NULL && src != NULL, "Just check"); + assert(dest->addr() == src->addr(), "Just check"); + + MEMFLAGS flags = dest->flags(); + + if (MemTracker::track_callsite()) { + *(MemPointerRecordEx*)dest = *(MemPointerRecordEx*)src; + } else { + *dest = *src; + } +} + + +// merge a per-thread memory recorder to the staging area +bool MemSnapshot::merge(MemRecorder* rec) { + assert(rec != NULL && !rec->out_of_memory(), "Just check"); + + // out of memory + if (_staging_area == NULL || _staging_area->out_of_memory()) { + return false; + } + + SequencedRecordIterator itr(rec->pointer_itr()); + + MutexLockerEx lock(_lock, true); + MemPointerIterator staging_itr(_staging_area); + MemPointerRecord *p1, *p2; + p1 = (MemPointerRecord*) itr.current(); + while (p1 != NULL) { + p2 = (MemPointerRecord*)staging_itr.locate(p1->addr()); + // we have not seen this memory block, so just add to staging area + if (p2 == NULL) { + if (!staging_itr.insert(p1)) { + return false; + } + } else if (p1->addr() == p2->addr()) { + MemPointerRecord* staging_next = (MemPointerRecord*)staging_itr.peek_next(); + // a memory block can have many tagging records, find right one to replace or + // right position to insert + while (staging_next != NULL && staging_next->addr() == p1->addr()) { + if ((staging_next->flags() & MemPointerRecord::tag_masks) <= + (p1->flags() & MemPointerRecord::tag_masks)) { + p2 = (MemPointerRecord*)staging_itr.next(); + staging_next = (MemPointerRecord*)staging_itr.peek_next(); + } else { + break; + } + } + int df = (p1->flags() & MemPointerRecord::tag_masks) - + (p2->flags() & MemPointerRecord::tag_masks); + if (df == 0) { + assert(p1->seq() > 0, "not sequenced"); + assert(p2->seq() > 0, "not sequenced"); + if (p1->seq() > p2->seq()) { + copy_pointer(p2, p1); + } + } else if (df < 0) { + if (!staging_itr.insert(p1)) { + return false; + } + } else { + if (!staging_itr.insert_after(p1)) { + return false; + } + } + } else if (p1->addr() < p2->addr()) { + if (!staging_itr.insert(p1)) { + return false; + } + } else { + if (!staging_itr.insert_after(p1)) { + return false; + } + } + p1 = (MemPointerRecord*)itr.next(); + } + NOT_PRODUCT(void check_staging_data();) + return true; +} + + + +// promote data to next generation +void MemSnapshot::promote() { + assert(_alloc_ptrs != NULL && _staging_area != NULL && _vm_ptrs != NULL, + "Just check"); + MutexLockerEx lock(_lock, true); + StagingWalker walker(_staging_area); + MemPointerIterator malloc_itr(_alloc_ptrs); + VMMemPointerIterator vm_itr(_vm_ptrs); + MemPointer* cur = walker.current(); + while (cur != NULL) { + if (walker.is_vm_record()) { + VMMemRegion* cur_vm = (VMMemRegion*)cur; + VMMemRegion* p = (VMMemRegion*)vm_itr.locate(cur_vm->addr()); + cur_vm = (VMMemRegion*)cur; + if (p != NULL && (p->contains(cur_vm) || p->base() == cur_vm->base())) { + assert(p->is_reserve_record() || + p->is_commit_record(), "wrong vm record type"); + // resize existing reserved range + if (cur_vm->is_reserve_record() && p->base() == cur_vm->base()) { + assert(cur_vm->size() >= p->committed_size(), "incorrect resizing"); + p->set_reserved_size(cur_vm->size()); + } else if (cur_vm->is_commit_record()) { + p->commit(cur_vm->committed_size()); + } else if (cur_vm->is_uncommit_record()) { + p->uncommit(cur_vm->committed_size()); + if (!p->is_reserve_record() && p->committed_size() == 0) { + vm_itr.remove(); + } + } else if (cur_vm->is_type_tagging_record()) { + p->tag(cur_vm->flags()); + } else if (cur_vm->is_release_record()) { + if (cur_vm->base() == p->base() && cur_vm->size() == p->size()) { + // release the whole range + vm_itr.remove(); + } else { + // partial release + p->partial_release(cur_vm->base(), cur_vm->size()); + } + } else { + // we do see multiple reserver on the same vm range + assert((cur_vm->is_commit_record() || cur_vm->is_reserve_record()) && + cur_vm->base() == p->base() && cur_vm->size() == p->size(), "bad record"); + p->tag(cur_vm->flags()); + } + } else { + if(cur_vm->is_reserve_record()) { + if (p == NULL || p->base() > cur_vm->base()) { + vm_itr.insert(cur_vm); + } else { + vm_itr.insert_after(cur_vm); + } + } else { +#ifdef ASSERT + // In theory, we should assert without conditions. However, in case of native + // thread stack, NMT explicitly releases the thread stack in Thread's destructor, + // due to platform dependent behaviors. On some platforms, we see uncommit/release + // native thread stack, but some, we don't. + if (!cur_vm->is_uncommit_record() && !cur_vm->is_deallocation_record()) { + ShouldNotReachHere(); + } +#endif + } + } + } else { + MemPointerRecord* cur_p = (MemPointerRecord*)cur; + MemPointerRecord* p = (MemPointerRecord*)malloc_itr.locate(cur->addr()); + if (p != NULL && cur_p->addr() == p->addr()) { + assert(p->is_allocation_record() || p->is_arena_size_record(), "untracked"); + if (cur_p->is_allocation_record() || cur_p->is_arena_size_record()) { + copy_pointer(p, cur_p); + } else { // deallocation record + assert(cur_p->is_deallocation_record(), "wrong record type"); + + // we are removing an arena record, we also need to remove its 'size' + // record behind it + if (p->is_arena_record()) { + MemPointerRecord* next_p = (MemPointerRecord*)malloc_itr.peek_next(); + if (next_p->is_arena_size_record()) { + assert(next_p->is_size_record_of_arena(p), "arena records dont match"); + malloc_itr.remove(); + } + } + malloc_itr.remove(); + } + } else { + if (cur_p->is_arena_size_record()) { + MemPointerRecord* prev_p = (MemPointerRecord*)malloc_itr.peek_prev(); + if (prev_p != NULL && + (!prev_p->is_arena_record() || !cur_p->is_size_record_of_arena(prev_p))) { + // arena already deallocated + cur_p = NULL; + } + } + if (cur_p != NULL) { + if (cur_p->is_allocation_record() || cur_p->is_arena_size_record()) { + if (p != NULL && cur_p->addr() > p->addr()) { + malloc_itr.insert_after(cur); + } else { + malloc_itr.insert(cur); + } + } +#ifndef PRODUCT + else if (!has_allocation_record(cur_p->addr())){ + // NMT can not track some startup memory, which allocated before NMT + // is enabled + _untracked_count ++; + } +#endif + } + } + } + + cur = walker.next(); + } + NOT_PRODUCT(check_malloc_pointers();) + _staging_area->shrink(); + _staging_area->clear(); +} + + +#ifdef ASSERT +void MemSnapshot::print_snapshot_stats(outputStream* st) { + st->print_cr("Snapshot:"); + st->print_cr("\tMalloced: %d/%d [%5.2f%%] %dKB", _alloc_ptrs->length(), _alloc_ptrs->capacity(), + (100.0 * (float)_alloc_ptrs->length()) / (float)_alloc_ptrs->capacity(), _alloc_ptrs->instance_size()/K); + + st->print_cr("\tVM: %d/%d [%5.2f%%] %dKB", _vm_ptrs->length(), _vm_ptrs->capacity(), + (100.0 * (float)_vm_ptrs->length()) / (float)_vm_ptrs->capacity(), _vm_ptrs->instance_size()/K); + + st->print_cr("\tStaging: %d/%d [%5.2f%%] %dKB", _staging_area->length(), _staging_area->capacity(), + (100.0 * (float)_staging_area->length()) / (float)_staging_area->capacity(), _staging_area->instance_size()/K); + + st->print_cr("\tUntracked allocation: %d", _untracked_count); +} + +void MemSnapshot::check_malloc_pointers() { + MemPointerArrayIteratorImpl mItr(_alloc_ptrs); + MemPointerRecord* p = (MemPointerRecord*)mItr.current(); + MemPointerRecord* prev = NULL; + while (p != NULL) { + if (prev != NULL) { + assert(p->addr() >= prev->addr(), "sorting order"); + } + prev = p; + p = (MemPointerRecord*)mItr.next(); + } +} + +void MemSnapshot::check_staging_data() { + MemPointerArrayIteratorImpl itr(_staging_area); + MemPointerRecord* cur = (MemPointerRecord*)itr.current(); + MemPointerRecord* next = (MemPointerRecord*)itr.next(); + while (next != NULL) { + assert((next->addr() > cur->addr()) || + ((next->flags() & MemPointerRecord::tag_masks) > + (cur->flags() & MemPointerRecord::tag_masks)), + "sorting order"); + cur = next; + next = (MemPointerRecord*)itr.next(); + } +} + +bool MemSnapshot::has_allocation_record(address addr) { + MemPointerArrayIteratorImpl itr(_staging_area); + MemPointerRecord* cur = (MemPointerRecord*)itr.current(); + while (cur != NULL) { + if (cur->addr() == addr && cur->is_allocation_record()) { + return true; + } + cur = (MemPointerRecord*)itr.next(); + } + return false; +} + +#endif diff --git a/hotspot/src/share/vm/services/memSnapshot.hpp b/hotspot/src/share/vm/services/memSnapshot.hpp new file mode 100644 index 00000000000..8b2376e5f79 --- /dev/null +++ b/hotspot/src/share/vm/services/memSnapshot.hpp @@ -0,0 +1,286 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_SNAPSHOT_HPP +#define SHARE_VM_SERVICES_MEM_SNAPSHOT_HPP + +#include "memory/allocation.hpp" +#include "runtime/mutex.hpp" +#include "runtime/mutexLocker.hpp" +#include "services/memBaseline.hpp" +#include "services/memPtrArray.hpp" + + +// Snapshot pointer array iterator + +// The pointer array contains malloc-ed pointers +class MemPointerIterator : public MemPointerArrayIteratorImpl { + public: + MemPointerIterator(MemPointerArray* arr): + MemPointerArrayIteratorImpl(arr) { + assert(arr != NULL, "null array"); + } + +#ifdef ASSERT + virtual bool is_dup_pointer(const MemPointer* ptr1, + const MemPointer* ptr2) const { + MemPointerRecord* p1 = (MemPointerRecord*)ptr1; + MemPointerRecord* p2 = (MemPointerRecord*)ptr2; + + if (p1->addr() != p2->addr()) return false; + if ((p1->flags() & MemPointerRecord::tag_masks) != + (p2->flags() & MemPointerRecord::tag_masks)) { + return false; + } + // we do see multiple commit/uncommit on the same memory, it is ok + return (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_alloc || + (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_release; + } + + virtual bool insert(MemPointer* ptr) { + if (_pos > 0) { + MemPointer* p1 = (MemPointer*)ptr; + MemPointer* p2 = (MemPointer*)_array->at(_pos - 1); + assert(!is_dup_pointer(p1, p2), + "dup pointer"); + } + if (_pos < _array->length() -1) { + MemPointer* p1 = (MemPointer*)ptr; + MemPointer* p2 = (MemPointer*)_array->at(_pos + 1); + assert(!is_dup_pointer(p1, p2), + "dup pointer"); + } + return _array->insert_at(ptr, _pos); + } + + virtual bool insert_after(MemPointer* ptr) { + if (_pos > 0) { + MemPointer* p1 = (MemPointer*)ptr; + MemPointer* p2 = (MemPointer*)_array->at(_pos - 1); + assert(!is_dup_pointer(p1, p2), + "dup pointer"); + } + if (_pos < _array->length() - 1) { + MemPointer* p1 = (MemPointer*)ptr; + MemPointer* p2 = (MemPointer*)_array->at(_pos + 1); + + assert(!is_dup_pointer(p1, p2), + "dup pointer"); + } + if (_array->insert_at(ptr, _pos + 1)) { + _pos ++; + return true; + } + return false; + } +#endif + + virtual MemPointer* locate(address addr) { + MemPointer* cur = current(); + while (cur != NULL && cur->addr() < addr) { + cur = next(); + } + return cur; + } +}; + +class VMMemPointerIterator : public MemPointerIterator { + public: + VMMemPointerIterator(MemPointerArray* arr): + MemPointerIterator(arr) { + } + + // locate an exiting record that contains specified address, or + // the record, where the record with specified address, should + // be inserted + virtual MemPointer* locate(address addr) { + VMMemRegion* cur = (VMMemRegion*)current(); + VMMemRegion* next_p; + + while (cur != NULL) { + if (cur->base() > addr) { + return cur; + } else { + // find nearest existing range that has base address <= addr + next_p = (VMMemRegion*)peek_next(); + if (next_p != NULL && next_p->base() <= addr) { + cur = (VMMemRegion*)next(); + continue; + } + } + + if (cur->is_reserve_record() && + cur->base() <= addr && + (cur->base() + cur->size() > addr)) { + return cur; + } else if (cur->is_commit_record() && + cur->base() <= addr && + (cur->base() + cur->committed_size() > addr)) { + return cur; + } + cur = (VMMemRegion*)next(); + } + return NULL; + } + +#ifdef ASSERT + virtual bool is_dup_pointer(const MemPointer* ptr1, + const MemPointer* ptr2) const { + VMMemRegion* p1 = (VMMemRegion*)ptr1; + VMMemRegion* p2 = (VMMemRegion*)ptr2; + + if (p1->addr() != p2->addr()) return false; + if ((p1->flags() & MemPointerRecord::tag_masks) != + (p2->flags() & MemPointerRecord::tag_masks)) { + return false; + } + // we do see multiple commit/uncommit on the same memory, it is ok + return (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_alloc || + (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_release; + } +#endif +}; + +class StagingWalker : public MemPointerArrayIterator { + private: + MemPointerArrayIteratorImpl _itr; + bool _is_vm_record; + bool _end_of_array; + VMMemRegionEx _vm_record; + MemPointerRecordEx _malloc_record; + + public: + StagingWalker(MemPointerArray* arr): _itr(arr) { + _end_of_array = false; + next(); + } + + // return the pointer at current position + MemPointer* current() const { + if (_end_of_array) { + return NULL; + } + if (is_vm_record()) { + return (MemPointer*)&_vm_record; + } else { + return (MemPointer*)&_malloc_record; + } + } + + // return the next pointer and advance current position + MemPointer* next(); + + // type of 'current' record + bool is_vm_record() const { + return _is_vm_record; + } + + // return the next poinger without advancing current position + MemPointer* peek_next() const { + assert(false, "not supported"); + return NULL; + } + + MemPointer* peek_prev() const { + assert(false, "not supported"); + return NULL; + } + // remove the pointer at current position + void remove() { + assert(false, "not supported"); + } + + // insert the pointer at current position + bool insert(MemPointer* ptr) { + assert(false, "not supported"); + return false; + } + + bool insert_after(MemPointer* ptr) { + assert(false, "not supported"); + return false; + } + + private: + // consolidate all records referring to this vm region + bool consolidate_vm_records(VMMemRegionEx* vm_rec); +}; + +class MemBaseline; + +class MemSnapshot : public CHeapObj { + private: + // the following two arrays contain records of all known lived memory blocks + // live malloc-ed memory pointers + MemPointerArray* _alloc_ptrs; + // live virtual memory pointers + MemPointerArray* _vm_ptrs; + + // stagging a generation's data, before + // it can be prompted to snapshot + MemPointerArray* _staging_area; + + // the lock to protect this snapshot + Monitor* _lock; + + NOT_PRODUCT(size_t _untracked_count;) + friend class MemBaseline; + + public: + MemSnapshot(); + virtual ~MemSnapshot(); + + // if we are running out of native memory + bool out_of_memory() const { + return (_alloc_ptrs == NULL || _staging_area == NULL || + _vm_ptrs == NULL || _lock == NULL || + _alloc_ptrs->out_of_memory() || + _staging_area->out_of_memory() || + _vm_ptrs->out_of_memory()); + } + + // merge a per-thread memory recorder into staging area + bool merge(MemRecorder* rec); + // promote staged data to snapshot + void promote(); + + + void wait(long timeout) { + assert(_lock != NULL, "Just check"); + MonitorLockerEx locker(_lock); + locker.wait(true, timeout); + } + + NOT_PRODUCT(void print_snapshot_stats(outputStream* st);) + NOT_PRODUCT(void check_staging_data();) + NOT_PRODUCT(void check_malloc_pointers();) + NOT_PRODUCT(bool has_allocation_record(address addr);) + + private: + // copy pointer data from src to dest + void copy_pointer(MemPointerRecord* dest, const MemPointerRecord* src); +}; + + +#endif // SHARE_VM_SERVICES_MEM_SNAPSHOT_HPP diff --git a/hotspot/src/share/vm/services/memTrackWorker.cpp b/hotspot/src/share/vm/services/memTrackWorker.cpp new file mode 100644 index 00000000000..b82a305ed72 --- /dev/null +++ b/hotspot/src/share/vm/services/memTrackWorker.cpp @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "runtime/threadCritical.hpp" +#include "services/memTracker.hpp" +#include "services/memTrackWorker.hpp" +#include "utilities/decoder.hpp" +#include "utilities/vmError.hpp" + +MemTrackWorker::MemTrackWorker() { + // create thread uses cgc thread type for now. We should revisit + // the option, or create new thread type. + _has_error = !os::create_thread(this, os::cgc_thread); + set_name("MemTrackWorker", 0); + + // initial generation circuit buffer + if (!has_error()) { + _head = _tail = 0; + for(int index = 0; index < MAX_GENERATIONS; index ++) { + _gen[index] = NULL; + } + } + NOT_PRODUCT(_sync_point_count = 0;) + NOT_PRODUCT(_merge_count = 0;) + NOT_PRODUCT(_last_gen_in_use = 0;) +} + +MemTrackWorker::~MemTrackWorker() { + for (int index = 0; index < MAX_GENERATIONS; index ++) { + MemRecorder* rc = _gen[index]; + if (rc != NULL) { + delete rc; + } + } +} + +void* MemTrackWorker::operator new(size_t size) { + assert(false, "use nothrow version"); + return NULL; +} + +void* MemTrackWorker::operator new(size_t size, const std::nothrow_t& nothrow_constant) { + return allocate(size, false, mtNMT); +} + +void MemTrackWorker::start() { + os::start_thread(this); +} + +/* + * Native memory tracking worker thread loop: + * 1. merge one generation of memory recorders to staging area + * 2. promote staging data to memory snapshot + * + * This thread can run through safepoint. + */ + +void MemTrackWorker::run() { + assert(MemTracker::is_on(), "native memory tracking is off"); + this->initialize_thread_local_storage(); + this->record_stack_base_and_size(); + MemSnapshot* snapshot = MemTracker::get_snapshot(); + assert(snapshot != NULL, "Worker should not be started"); + MemRecorder* rec; + + while (!MemTracker::shutdown_in_progress()) { + NOT_PRODUCT(_last_gen_in_use = generations_in_use();) + { + // take a recorder from earliest generation in buffer + ThreadCritical tc; + rec = _gen[_head]; + if (rec != NULL) { + _gen[_head] = rec->next(); + } + assert(count_recorder(_gen[_head]) <= MemRecorder::_instance_count, + "infinite loop after dequeue"); + } + if (rec != NULL) { + // merge the recorder into staging area + bool result = snapshot->merge(rec); + assert(result, "merge failed"); + debug_only(_merge_count ++;) + MemTracker::release_thread_recorder(rec); + } else { + // no more recorder to merge, promote staging area + // to snapshot + if (_head != _tail) { + { + ThreadCritical tc; + if (_gen[_head] != NULL || _head == _tail) { + continue; + } + // done with this generation, increment _head pointer + _head = (_head + 1) % MAX_GENERATIONS; + } + // promote this generation data to snapshot + snapshot->promote(); + } else { + snapshot->wait(1000); + ThreadCritical tc; + // check if more data arrived + if (_gen[_head] == NULL) { + _gen[_head] = MemTracker::get_pending_recorders(); + } + } + } + } + assert(MemTracker::shutdown_in_progress(), "just check"); + + // transites to final shutdown + MemTracker::final_shutdown(); +} + +// at synchronization point, where 'safepoint visible' Java threads are blocked +// at a safepoint, and the rest of threads are blocked on ThreadCritical lock. +// The caller MemTracker::sync() already takes ThreadCritical before calling this +// method. +// +// Following tasks are performed: +// 1. add all recorders in pending queue to current generation +// 2. increase generation + +void MemTrackWorker::at_sync_point(MemRecorder* rec) { + NOT_PRODUCT(_sync_point_count ++;) + assert(count_recorder(rec) <= MemRecorder::_instance_count, + "pending queue has infinite loop"); + + bool out_of_generation_buffer = false; + // check shutdown state inside ThreadCritical + if (MemTracker::shutdown_in_progress()) return; + // append the recorders to the end of the generation + if( rec != NULL) { + MemRecorder* cur_head = _gen[_tail]; + if (cur_head == NULL) { + _gen[_tail] = rec; + } else { + while (cur_head->next() != NULL) { + cur_head = cur_head->next(); + } + cur_head->set_next(rec); + } + } + assert(count_recorder(rec) <= MemRecorder::_instance_count, + "after add to current generation has infinite loop"); + // we have collected all recorders for this generation. If there is data, + // we need to increment _tail to start a new generation. + if (_gen[_tail] != NULL || _head == _tail) { + _tail = (_tail + 1) % MAX_GENERATIONS; + out_of_generation_buffer = (_tail == _head); + } + + if (out_of_generation_buffer) { + MemTracker::shutdown(MemTracker::NMT_out_of_generation); + } +} + +#ifndef PRODUCT +int MemTrackWorker::count_recorder(const MemRecorder* head) { + int count = 0; + while(head != NULL) { + count ++; + head = head->next(); + } + return count; +} + +int MemTrackWorker::count_pending_recorders() const { + int count = 0; + for (int index = 0; index < MAX_GENERATIONS; index ++) { + MemRecorder* head = _gen[index]; + if (head != NULL) { + count += count_recorder(head); + } + } + return count; +} +#endif diff --git a/hotspot/src/share/vm/services/memTrackWorker.hpp b/hotspot/src/share/vm/services/memTrackWorker.hpp new file mode 100644 index 00000000000..969828cabee --- /dev/null +++ b/hotspot/src/share/vm/services/memTrackWorker.hpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_TRACK_WORKER_HPP +#define SHARE_VM_SERVICES_MEM_TRACK_WORKER_HPP + +#include "memory/allocation.hpp" +#include "runtime/thread.hpp" +#include "services/memRecorder.hpp" + +// Maximum MAX_GENERATIONS generation data can be tracked. +#define MAX_GENERATIONS 512 + + +class MemTrackWorker : public NamedThread { + private: + // circular buffer. This buffer contains recorders to be merged into global + // snaphsot. + // Each slot holds a linked list of memory recorders, that contains one + // generation of memory data. + MemRecorder* _gen[MAX_GENERATIONS]; + int _head, _tail; // head and tail pointers to above circular buffer + + bool _has_error; + + public: + MemTrackWorker(); + ~MemTrackWorker(); + _NOINLINE_ void* operator new(size_t size); + _NOINLINE_ void* operator new(size_t size, const std::nothrow_t& nothrow_constant); + + void start(); + void run(); + + inline bool has_error() const { return _has_error; } + + // task at synchronization point + void at_sync_point(MemRecorder* pending_recorders); + + // for debugging purpose, they are not thread safe. + NOT_PRODUCT(static int count_recorder(const MemRecorder* head);) + NOT_PRODUCT(int count_pending_recorders() const;) + + NOT_PRODUCT(int _sync_point_count;) + NOT_PRODUCT(int _merge_count;) + NOT_PRODUCT(int _last_gen_in_use;) + + inline int generations_in_use() const { + return (_tail >= _head ? (_tail - _head + 1) : (MAX_GENERATIONS - (_head - _tail) + 1)); + } +}; + +#endif // SHARE_VM_SERVICES_MEM_TRACK_WORKER_HPP diff --git a/hotspot/src/share/vm/services/memTracker.cpp b/hotspot/src/share/vm/services/memTracker.cpp new file mode 100644 index 00000000000..a0067f834ba --- /dev/null +++ b/hotspot/src/share/vm/services/memTracker.cpp @@ -0,0 +1,625 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#include "precompiled.hpp" + +#include "runtime/atomic.hpp" +#include "runtime/interfaceSupport.hpp" +#include "runtime/mutexLocker.hpp" +#include "runtime/safepoint.hpp" +#include "runtime/threadCritical.hpp" +#include "services/memPtr.hpp" +#include "services/memReporter.hpp" +#include "services/memTracker.hpp" +#include "utilities/decoder.hpp" +#include "utilities/globalDefinitions.hpp" + +bool NMT_track_callsite = false; + +// walk all 'known' threads at NMT sync point, and collect their recorders +void SyncThreadRecorderClosure::do_thread(Thread* thread) { + assert(SafepointSynchronize::is_at_safepoint(), "Safepoint required"); + if (thread->is_Java_thread()) { + JavaThread* javaThread = (JavaThread*)thread; + MemRecorder* recorder = javaThread->get_recorder(); + if (recorder != NULL) { + MemTracker::enqueue_pending_recorder(recorder); + javaThread->set_recorder(NULL); + } + } + _thread_count ++; +} + + +MemRecorder* MemTracker::_global_recorder = NULL; +MemSnapshot* MemTracker::_snapshot = NULL; +MemBaseline MemTracker::_baseline; +Mutex* MemTracker::_query_lock = NULL; +volatile MemRecorder* MemTracker::_merge_pending_queue = NULL; +volatile MemRecorder* MemTracker::_pooled_recorders = NULL; +MemTrackWorker* MemTracker::_worker_thread = NULL; +int MemTracker::_sync_point_skip_count = 0; +MemTracker::NMTLevel MemTracker::_tracking_level = MemTracker::NMT_off; +volatile MemTracker::NMTStates MemTracker::_state = NMT_uninited; +MemTracker::ShutdownReason MemTracker::_reason = NMT_shutdown_none; +int MemTracker::_thread_count = 255; +volatile jint MemTracker::_pooled_recorder_count = 0; +debug_only(intx MemTracker::_main_thread_tid = 0;) +debug_only(volatile jint MemTracker::_pending_recorder_count = 0;) + +void MemTracker::init_tracking_options(const char* option_line) { + _tracking_level = NMT_off; + if (strncmp(option_line, "=summary", 8) == 0) { + _tracking_level = NMT_summary; + } else if (strncmp(option_line, "=detail", 8) == 0) { + _tracking_level = NMT_detail; + } +} + +// first phase of bootstrapping, when VM is still in single-threaded mode. +void MemTracker::bootstrap_single_thread() { + if (_tracking_level > NMT_off) { + assert(_state == NMT_uninited, "wrong state"); + + // NMT is not supported with UseMallocOnly is on. NMT can NOT + // handle the amount of malloc data without significantly impacting + // runtime performance when this flag is on. + if (UseMallocOnly) { + shutdown(NMT_use_malloc_only); + return; + } + + _query_lock = new (std::nothrow) Mutex(Monitor::max_nonleaf, "NMT_queryLock"); + if (_query_lock == NULL) { + shutdown(NMT_out_of_memory); + return; + } + + debug_only(_main_thread_tid = os::current_thread_id();) + _state = NMT_bootstrapping_single_thread; + NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack()); + } +} + +// second phase of bootstrapping, when VM is about to or already entered multi-theaded mode. +void MemTracker::bootstrap_multi_thread() { + if (_tracking_level > NMT_off && _state == NMT_bootstrapping_single_thread) { + // create nmt lock for multi-thread execution + assert(_main_thread_tid == os::current_thread_id(), "wrong thread"); + _state = NMT_bootstrapping_multi_thread; + NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack()); + } +} + +// fully start nmt +void MemTracker::start() { + // Native memory tracking is off from command line option + if (_tracking_level == NMT_off || shutdown_in_progress()) return; + + assert(_main_thread_tid == os::current_thread_id(), "wrong thread"); + assert(_state == NMT_bootstrapping_multi_thread, "wrong state"); + + _snapshot = new (std::nothrow)MemSnapshot(); + if (_snapshot != NULL && !_snapshot->out_of_memory()) { + if (start_worker()) { + _state = NMT_started; + NMT_track_callsite = (_tracking_level == NMT_detail && can_walk_stack()); + return; + } + } + + // fail to start native memory tracking, shut it down + shutdown(NMT_initialization); +} + +/** + * Shutting down native memory tracking. + * We can not shutdown native memory tracking immediately, so we just + * setup shutdown pending flag, every native memory tracking component + * should orderly shut itself down. + * + * The shutdown sequences: + * 1. MemTracker::shutdown() sets MemTracker to shutdown pending state + * 2. Worker thread calls MemTracker::final_shutdown(), which transites + * MemTracker to final shutdown state. + * 3. At sync point, MemTracker does final cleanup, before sets memory + * tracking level to off to complete shutdown. + */ +void MemTracker::shutdown(ShutdownReason reason) { + if (_tracking_level == NMT_off) return; + + if (_state <= NMT_bootstrapping_single_thread) { + // we still in single thread mode, there is not contention + _state = NMT_shutdown_pending; + _reason = reason; + } else { + // we want to know who initialized shutdown + if ((jint)NMT_started == Atomic::cmpxchg((jint)NMT_shutdown_pending, + (jint*)&_state, (jint)NMT_started)) { + _reason = reason; + } + } +} + +// final phase of shutdown +void MemTracker::final_shutdown() { + // delete all pending recorders and pooled recorders + delete_all_pending_recorders(); + delete_all_pooled_recorders(); + + { + // shared baseline and snapshot are the only objects needed to + // create query results + MutexLockerEx locker(_query_lock, true); + // cleanup baseline data and snapshot + _baseline.clear(); + delete _snapshot; + _snapshot = NULL; + } + + // shutdown shared decoder instance, since it is only + // used by native memory tracking so far. + Decoder::shutdown(); + + MemTrackWorker* worker = NULL; + { + ThreadCritical tc; + // can not delete worker inside the thread critical + if (_worker_thread != NULL && Thread::current() == _worker_thread) { + worker = _worker_thread; + _worker_thread = NULL; + } + } + if (worker != NULL) { + delete worker; + } + _state = NMT_final_shutdown; +} + +// delete all pooled recorders +void MemTracker::delete_all_pooled_recorders() { + // free all pooled recorders + volatile MemRecorder* cur_head = _pooled_recorders; + if (cur_head != NULL) { + MemRecorder* null_ptr = NULL; + while (cur_head != NULL && (void*)cur_head != Atomic::cmpxchg_ptr((void*)null_ptr, + (void*)&_pooled_recorders, (void*)cur_head)) { + cur_head = _pooled_recorders; + } + if (cur_head != NULL) { + delete cur_head; + _pooled_recorder_count = 0; + } + } +} + +// delete all recorders in pending queue +void MemTracker::delete_all_pending_recorders() { + // free all pending recorders + MemRecorder* pending_head = get_pending_recorders(); + if (pending_head != NULL) { + delete pending_head; + } +} + +/* + * retrieve per-thread recorder of specified thread. + * if thread == NULL, it means global recorder + */ +MemRecorder* MemTracker::get_thread_recorder(JavaThread* thread) { + if (shutdown_in_progress()) return NULL; + + MemRecorder* rc; + if (thread == NULL) { + rc = _global_recorder; + } else { + rc = thread->get_recorder(); + } + + if (rc != NULL && rc->is_full()) { + enqueue_pending_recorder(rc); + rc = NULL; + } + + if (rc == NULL) { + rc = get_new_or_pooled_instance(); + if (thread == NULL) { + _global_recorder = rc; + } else { + thread->set_recorder(rc); + } + } + return rc; +} + +/* + * get a per-thread recorder from pool, or create a new one if + * there is not one available. + */ +MemRecorder* MemTracker::get_new_or_pooled_instance() { + MemRecorder* cur_head = const_cast (_pooled_recorders); + if (cur_head == NULL) { + MemRecorder* rec = new (std::nothrow)MemRecorder(); + if (rec == NULL || rec->out_of_memory()) { + shutdown(NMT_out_of_memory); + if (rec != NULL) { + delete rec; + rec = NULL; + } + } + return rec; + } else { + MemRecorder* next_head = cur_head->next(); + if ((void*)cur_head != Atomic::cmpxchg_ptr((void*)next_head, (void*)&_pooled_recorders, + (void*)cur_head)) { + return get_new_or_pooled_instance(); + } + cur_head->set_next(NULL); + Atomic::dec(&_pooled_recorder_count); + debug_only(cur_head->set_generation();) + return cur_head; + } +} + +/* + * retrieve all recorders in pending queue, and empty the queue + */ +MemRecorder* MemTracker::get_pending_recorders() { + MemRecorder* cur_head = const_cast(_merge_pending_queue); + MemRecorder* null_ptr = NULL; + while ((void*)cur_head != Atomic::cmpxchg_ptr((void*)null_ptr, (void*)&_merge_pending_queue, + (void*)cur_head)) { + cur_head = const_cast(_merge_pending_queue); + } + debug_only(Atomic::store(0, &_pending_recorder_count)); + return cur_head; +} + +/* + * release a recorder to recorder pool. + */ +void MemTracker::release_thread_recorder(MemRecorder* rec) { + assert(rec != NULL, "null recorder"); + // we don't want to pool too many recorders + rec->set_next(NULL); + if (shutdown_in_progress() || _pooled_recorder_count > _thread_count * 2) { + delete rec; + return; + } + + rec->clear(); + MemRecorder* cur_head = const_cast(_pooled_recorders); + rec->set_next(cur_head); + while ((void*)cur_head != Atomic::cmpxchg_ptr((void*)rec, (void*)&_pooled_recorders, + (void*)cur_head)) { + cur_head = const_cast(_pooled_recorders); + rec->set_next(cur_head); + } + Atomic::inc(&_pooled_recorder_count); +} + +/* + * This is the most important method in whole nmt implementation. + * + * Create a memory record. + * 1. When nmt is in single-threaded bootstrapping mode, no lock is needed as VM + * still in single thread mode. + * 2. For all threads other than JavaThread, ThreadCritical is needed + * to write to recorders to global recorder. + * 3. For JavaThreads that are not longer visible by safepoint, also + * need to take ThreadCritical and records are written to global + * recorders, since these threads are NOT walked by Threads.do_thread(). + * 4. JavaThreads that are running in native state, have to transition + * to VM state before writing to per-thread recorders. + * 5. JavaThreads that are running in VM state do not need any lock and + * records are written to per-thread recorders. + * 6. For a thread has yet to attach VM 'Thread', they need to take + * ThreadCritical to write to global recorder. + * + * Important note: + * NO LOCK should be taken inside ThreadCritical lock !!! + */ +void MemTracker::create_memory_record(address addr, MEMFLAGS flags, + size_t size, address pc, Thread* thread) { + if (!shutdown_in_progress()) { + // single thread, we just write records direct to global recorder,' + // with any lock + if (_state == NMT_bootstrapping_single_thread) { + assert(_main_thread_tid == os::current_thread_id(), "wrong thread"); + thread = NULL; + } else { + if (thread == NULL) { + // don't use Thread::current(), since it is possible that + // the calling thread has yet to attach to VM 'Thread', + // which will result assertion failure + thread = ThreadLocalStorage::thread(); + } + } + + if (thread != NULL) { + if (thread->is_Java_thread() && ((JavaThread*)thread)->is_safepoint_visible()) { + JavaThread* java_thread = static_cast(thread); + JavaThreadState state = java_thread->thread_state(); + if (SafepointSynchronize::safepoint_safe(java_thread, state)) { + // JavaThreads that are safepoint safe, can run through safepoint, + // so ThreadCritical is needed to ensure no threads at safepoint create + // new records while the records are being gathered and the sequence number is changing + ThreadCritical tc; + create_record_in_recorder(addr, flags, size, pc, java_thread); + } else { + create_record_in_recorder(addr, flags, size, pc, java_thread); + } + } else { + // other threads, such as worker and watcher threads, etc. need to + // take ThreadCritical to write to global recorder + ThreadCritical tc; + create_record_in_recorder(addr, flags, size, pc, NULL); + } + } else { + if (_state == NMT_bootstrapping_single_thread) { + // single thread, no lock needed + create_record_in_recorder(addr, flags, size, pc, NULL); + } else { + // for thread has yet to attach VM 'Thread', we can not use VM mutex. + // use native thread critical instead + ThreadCritical tc; + create_record_in_recorder(addr, flags, size, pc, NULL); + } + } + } +} + +// write a record to proper recorder. No lock can be taken from this method +// down. +void MemTracker::create_record_in_recorder(address addr, MEMFLAGS flags, + size_t size, address pc, JavaThread* thread) { + + MemRecorder* rc = get_thread_recorder(thread); + if (rc != NULL) { + rc->record(addr, flags, size, pc); + } +} + +/** + * enqueue a recorder to pending queue + */ +void MemTracker::enqueue_pending_recorder(MemRecorder* rec) { + assert(rec != NULL, "null recorder"); + + // we are shutting down, so just delete it + if (shutdown_in_progress()) { + rec->set_next(NULL); + delete rec; + return; + } + + MemRecorder* cur_head = const_cast(_merge_pending_queue); + rec->set_next(cur_head); + while ((void*)cur_head != Atomic::cmpxchg_ptr((void*)rec, (void*)&_merge_pending_queue, + (void*)cur_head)) { + cur_head = const_cast(_merge_pending_queue); + rec->set_next(cur_head); + } + debug_only(Atomic::inc(&_pending_recorder_count);) +} + +/* + * The method is called at global safepoint + * during it synchronization process. + * 1. enqueue all JavaThreads' per-thread recorders + * 2. enqueue global recorder + * 3. retrieve all pending recorders + * 4. reset global sequence number generator + * 5. call worker's sync + */ +#define MAX_SAFEPOINTS_TO_SKIP 128 +#define SAFE_SEQUENCE_THRESHOLD 30 +#define HIGH_GENERATION_THRESHOLD 60 + +void MemTracker::sync() { + assert(_tracking_level > NMT_off, "NMT is not enabled"); + assert(SafepointSynchronize::is_at_safepoint(), "Safepoint required"); + + // Some GC tests hit large number of safepoints in short period of time + // without meaningful activities. We should prevent going to + // sync point in these cases, which can potentially exhaust generation buffer. + // Here is the factots to determine if we should go into sync point: + // 1. not to overflow sequence number + // 2. if we are in danger to overflow generation buffer + // 3. how many safepoints we already skipped sync point + if (_state == NMT_started) { + // worker thread is not ready, no one can manage generation + // buffer, so skip this safepoint + if (_worker_thread == NULL) return; + + if (_sync_point_skip_count < MAX_SAFEPOINTS_TO_SKIP) { + int per_seq_in_use = SequenceGenerator::peek() * 100 / max_jint; + int per_gen_in_use = _worker_thread->generations_in_use() * 100 / MAX_GENERATIONS; + if (per_seq_in_use < SAFE_SEQUENCE_THRESHOLD && per_gen_in_use >= HIGH_GENERATION_THRESHOLD) { + _sync_point_skip_count ++; + return; + } + } + _sync_point_skip_count = 0; + { + // This method is running at safepoint, with ThreadCritical lock, + // it should guarantee that NMT is fully sync-ed. + ThreadCritical tc; + + // walk all JavaThreads to collect recorders + SyncThreadRecorderClosure stc; + Threads::threads_do(&stc); + + _thread_count = stc.get_thread_count(); + MemRecorder* pending_recorders = get_pending_recorders(); + + if (_global_recorder != NULL) { + _global_recorder->set_next(pending_recorders); + pending_recorders = _global_recorder; + _global_recorder = NULL; + } + SequenceGenerator::reset(); + // check _worker_thread with lock to avoid racing condition + if (_worker_thread != NULL) { + _worker_thread->at_sync_point(pending_recorders); + } + } + } + + // now, it is the time to shut whole things off + if (_state == NMT_final_shutdown) { + // walk all JavaThreads to delete all recorders + SyncThreadRecorderClosure stc; + Threads::threads_do(&stc); + // delete global recorder + { + ThreadCritical tc; + if (_global_recorder != NULL) { + delete _global_recorder; + _global_recorder = NULL; + } + } + MemRecorder* pending_recorders = get_pending_recorders(); + if (pending_recorders != NULL) { + delete pending_recorders; + } + // try at a later sync point to ensure MemRecorder instance drops to zero to + // completely shutdown NMT + if (MemRecorder::_instance_count == 0) { + _state = NMT_shutdown; + _tracking_level = NMT_off; + } + } +} + +/* + * Start worker thread. + */ +bool MemTracker::start_worker() { + assert(_worker_thread == NULL, "Just Check"); + _worker_thread = new (std::nothrow) MemTrackWorker(); + if (_worker_thread == NULL || _worker_thread->has_error()) { + shutdown(NMT_initialization); + return false; + } + _worker_thread->start(); + return true; +} + +/* + * We need to collect a JavaThread's per-thread recorder + * before it exits. + */ +void MemTracker::thread_exiting(JavaThread* thread) { + if (is_on()) { + MemRecorder* rec = thread->get_recorder(); + if (rec != NULL) { + enqueue_pending_recorder(rec); + thread->set_recorder(NULL); + } + } +} + +// baseline current memory snapshot +bool MemTracker::baseline() { + MutexLockerEx lock(_query_lock, true); + MemSnapshot* snapshot = get_snapshot(); + if (snapshot != NULL) { + return _baseline.baseline(*snapshot, false); + } + return false; +} + +// print memory usage from current snapshot +bool MemTracker::print_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) { + MemBaseline baseline; + MutexLockerEx lock(_query_lock, true); + MemSnapshot* snapshot = get_snapshot(); + if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) { + BaselineReporter reporter(out, unit); + reporter.report_baseline(baseline, summary_only); + return true; + } + return false; +} + +// compare memory usage between current snapshot and baseline +bool MemTracker::compare_memory_usage(BaselineOutputer& out, size_t unit, bool summary_only) { + MutexLockerEx lock(_query_lock, true); + if (_baseline.baselined()) { + MemBaseline baseline; + MemSnapshot* snapshot = get_snapshot(); + if (snapshot != NULL && baseline.baseline(*snapshot, summary_only)) { + BaselineReporter reporter(out, unit); + reporter.diff_baselines(baseline, _baseline, summary_only); + return true; + } + } + return false; +} + +#ifndef PRODUCT +void MemTracker::walk_stack(int toSkip, char* buf, int len) { + int cur_len = 0; + char tmp[1024]; + address pc; + + while (cur_len < len) { + pc = os::get_caller_pc(toSkip + 1); + if (pc != NULL && os::dll_address_to_function_name(pc, tmp, sizeof(tmp), NULL)) { + jio_snprintf(&buf[cur_len], (len - cur_len), "%s\n", tmp); + cur_len = (int)strlen(buf); + } else { + buf[cur_len] = '\0'; + break; + } + toSkip ++; + } +} + +void MemTracker::print_tracker_stats(outputStream* st) { + st->print_cr("\nMemory Tracker Stats:"); + st->print_cr("\tMax sequence number = %d", SequenceGenerator::max_seq_num()); + st->print_cr("\tthead count = %d", _thread_count); + st->print_cr("\tArena instance = %d", Arena::_instance_count); + st->print_cr("\tpooled recorder count = %d", _pooled_recorder_count); + st->print_cr("\tqueued recorder count = %d", _pending_recorder_count); + st->print_cr("\tmemory recorder instance count = %d", MemRecorder::_instance_count); + if (_worker_thread != NULL) { + st->print_cr("\tWorker thread:"); + st->print_cr("\t\tSync point count = %d", _worker_thread->_sync_point_count); + st->print_cr("\t\tpending recorder count = %d", _worker_thread->count_pending_recorders()); + st->print_cr("\t\tmerge count = %d", _worker_thread->_merge_count); + } else { + st->print_cr("\tWorker thread is not started"); + } + st->print_cr(" "); + + if (_snapshot != NULL) { + _snapshot->print_snapshot_stats(st); + } else { + st->print_cr("No snapshot"); + } +} +#endif + diff --git a/hotspot/src/share/vm/services/memTracker.hpp b/hotspot/src/share/vm/services/memTracker.hpp new file mode 100644 index 00000000000..c0c6d798163 --- /dev/null +++ b/hotspot/src/share/vm/services/memTracker.hpp @@ -0,0 +1,386 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_MEM_TRACKER_HPP +#define SHARE_VM_SERVICES_MEM_TRACKER_HPP + +#include "memory/allocation.hpp" +#include "runtime/globals.hpp" +#include "runtime/mutex.hpp" +#include "runtime/os.hpp" +#include "runtime/thread.hpp" +#include "services/memPtr.hpp" +#include "services/memRecorder.hpp" +#include "services/memSnapshot.hpp" +#include "services/memTrackWorker.hpp" + +#ifdef SOLARIS +#include "thread_solaris.inline.hpp" +#endif + +#ifdef _DEBUG_ + #define DEBUG_CALLER_PC os::get_caller_pc(3) +#else + #define DEBUG_CALLER_PC 0 +#endif + +// The thread closure walks threads to collect per-thread +// memory recorders at NMT sync point +class SyncThreadRecorderClosure : public ThreadClosure { + private: + int _thread_count; + + public: + SyncThreadRecorderClosure() { + _thread_count =0; + } + + void do_thread(Thread* thread); + int get_thread_count() const { + return _thread_count; + } +}; + +class BaselineOutputer; +class MemSnapshot; +class MemTrackWorker; +class Thread; +/* + * MemTracker is the 'gate' class to native memory tracking runtime. + */ +class MemTracker : AllStatic { + friend class MemTrackWorker; + friend class MemSnapshot; + friend class SyncThreadRecorderClosure; + + // NMT state + enum NMTStates { + NMT_uninited, // not yet initialized + NMT_bootstrapping_single_thread, // bootstrapping, VM is in single thread mode + NMT_bootstrapping_multi_thread, // bootstrapping, VM is about to enter multi-thread mode + NMT_started, // NMT fully started + NMT_shutdown_pending, // shutdown pending + NMT_final_shutdown, // in final phase of shutdown + NMT_shutdown // shutdown + }; + + + // native memory tracking level + enum NMTLevel { + NMT_off, // native memory tracking is off + NMT_summary, // don't track callsite + NMT_detail // track callsite also + }; + + public: + enum ShutdownReason { + NMT_shutdown_none, // no shutdown requested + NMT_shutdown_user, // user requested shutdown + NMT_normal, // normal shutdown, process exit + NMT_out_of_memory, // shutdown due to out of memory + NMT_initialization, // shutdown due to initialization failure + NMT_use_malloc_only, // can not combine NMT with UseMallocOnly flag + NMT_error_reporting, // shutdown by vmError::report_and_die() + NMT_out_of_generation, // running out of generation queue + NMT_sequence_overflow // overflow the sequence number + }; + + public: + // initialize NMT tracking level from command line options, called + // from VM command line parsing code + static void init_tracking_options(const char* option_line); + + // if NMT is enabled to record memory activities + static inline bool is_on() { + return (_tracking_level >= NMT_summary && + _state >= NMT_bootstrapping_single_thread); + } + + // user readable reason for shutting down NMT + static const char* reason() { + switch(_reason) { + case NMT_shutdown_none: + return "Native memory tracking is not enabled"; + case NMT_shutdown_user: + return "Native memory tracking has been shutdown by user"; + case NMT_normal: + return "Native memory tracking has been shutdown due to process exiting"; + case NMT_out_of_memory: + return "Native memory tracking has been shutdown due to out of native memory"; + case NMT_initialization: + return "Native memory tracking failed to initialize"; + case NMT_error_reporting: + return "Native memory tracking has been shutdown due to error reporting"; + case NMT_out_of_generation: + return "Native memory tracking has been shutdown due to running out of generation buffer"; + case NMT_sequence_overflow: + return "Native memory tracking has been shutdown due to overflow the sequence number"; + case NMT_use_malloc_only: + return "Native memory tracking is not supported when UseMallocOnly is on"; + default: + ShouldNotReachHere(); + return NULL; + } + } + + // test if we can walk native stack + static bool can_walk_stack() { + // native stack is not walkable during bootstrapping on sparc +#if defined(SPARC) + return (_state == NMT_started); +#else + return (_state >= NMT_bootstrapping_single_thread && _state <= NMT_started); +#endif + } + + // if native memory tracking tracks callsite + static inline bool track_callsite() { return _tracking_level == NMT_detail; } + + // shutdown native memory tracking capability. Native memory tracking + // can be shutdown by VM when it encounters low memory scenarios. + // Memory tracker should gracefully shutdown itself, and preserve the + // latest memory statistics for post morten diagnosis. + static void shutdown(ShutdownReason reason); + + // if there is shutdown requested + static inline bool shutdown_in_progress() { + return (_state >= NMT_shutdown_pending); + } + + // bootstrap native memory tracking, so it can start to collect raw data + // before worker thread can start + + // the first phase of bootstrapping, when VM still in single-threaded mode + static void bootstrap_single_thread(); + // the second phase of bootstrapping, VM is about or already in multi-threaded mode + static void bootstrap_multi_thread(); + + + // start() has to be called when VM still in single thread mode, but after + // command line option parsing is done. + static void start(); + + // record a 'malloc' call + static inline void record_malloc(address addr, size_t size, MEMFLAGS flags, + address pc = 0, Thread* thread = NULL) { + assert(is_on(), "check by caller"); + if (NMT_CAN_TRACK(flags)) { + create_memory_record(addr, (flags|MemPointerRecord::malloc_tag()), size, pc, thread); + } + } + // record a 'free' call + static inline void record_free(address addr, MEMFLAGS flags, Thread* thread = NULL) { + if (is_on() && NMT_CAN_TRACK(flags)) { + create_memory_record(addr, MemPointerRecord::free_tag(), 0, 0, thread); + } + } + // record a 'realloc' call + static inline void record_realloc(address old_addr, address new_addr, size_t size, + MEMFLAGS flags, address pc = 0, Thread* thread = NULL) { + if (is_on()) { + record_free(old_addr, flags, thread); + record_malloc(new_addr, size, flags, pc, thread); + } + } + + // record arena size + static inline void record_arena_size(address addr, size_t size) { + // we add a positive offset to arena address, so we can have arena size record + // sorted after arena record + if (is_on() && !UseMallocOnly) { + create_memory_record((addr + sizeof(void*)), MemPointerRecord::arena_size_tag(), size, + 0, NULL); + } + } + + // record a virtual memory 'reserve' call + static inline void record_virtual_memory_reserve(address addr, size_t size, + address pc = 0, Thread* thread = NULL) { + if (is_on()) { + assert(size > 0, "reserve szero size"); + create_memory_record(addr, MemPointerRecord::virtual_memory_reserve_tag(), + size, pc, thread); + } + } + + // record a virtual memory 'commit' call + static inline void record_virtual_memory_commit(address addr, size_t size, + address pc = 0, Thread* thread = NULL) { + if (is_on()) { + create_memory_record(addr, MemPointerRecord::virtual_memory_commit_tag(), + size, pc, thread); + } + } + + // record a virtual memory 'uncommit' call + static inline void record_virtual_memory_uncommit(address addr, size_t size, + Thread* thread = NULL) { + if (is_on()) { + create_memory_record(addr, MemPointerRecord::virtual_memory_uncommit_tag(), + size, 0, thread); + } + } + + // record a virtual memory 'release' call + static inline void record_virtual_memory_release(address addr, size_t size, + Thread* thread = NULL) { + if (is_on()) { + create_memory_record(addr, MemPointerRecord::virtual_memory_release_tag(), + size, 0, thread); + } + } + + // record memory type on virtual memory base address + static inline void record_virtual_memory_type(address base, MEMFLAGS flags, + Thread* thread = NULL) { + if (is_on()) { + assert(base > 0, "wrong base address"); + assert((flags & (~mt_masks)) == 0, "memory type only"); + create_memory_record(base, (flags | MemPointerRecord::virtual_memory_type_tag()), + 0, 0, thread); + } + } + + + // create memory baseline of current memory snapshot + static bool baseline(); + // is there a memory baseline + static bool has_baseline() { + return _baseline.baselined(); + } + + // print memory usage from current snapshot + static bool print_memory_usage(BaselineOutputer& out, size_t unit, + bool summary_only = true); + // compare memory usage between current snapshot and baseline + static bool compare_memory_usage(BaselineOutputer& out, size_t unit, + bool summary_only = true); + + // sync is called within global safepoint to synchronize nmt data + static void sync(); + + // called when a thread is about to exit + static void thread_exiting(JavaThread* thread); + + // retrieve global snapshot + static MemSnapshot* get_snapshot() { + assert(is_on(), "native memory tracking is off"); + if (shutdown_in_progress()) { + return NULL; + } + return _snapshot; + } + + // print tracker stats + NOT_PRODUCT(static void print_tracker_stats(outputStream* st);) + NOT_PRODUCT(static void walk_stack(int toSkip, char* buf, int len);) + + private: + // start native memory tracking worker thread + static bool start_worker(); + + // called by worker thread to complete shutdown process + static void final_shutdown(); + + protected: + // retrieve per-thread recorder of the specified thread. + // if the recorder is full, it will be enqueued to overflow + // queue, a new recorder is acquired from recorder pool or a + // new instance is created. + // when thread == NULL, it means global recorder + static MemRecorder* get_thread_recorder(JavaThread* thread); + + // per-thread recorder pool + static void release_thread_recorder(MemRecorder* rec); + static void delete_all_pooled_recorders(); + + // pending recorder queue. Recorders are queued to pending queue + // when they are overflowed or collected at nmt sync point. + static void enqueue_pending_recorder(MemRecorder* rec); + static MemRecorder* get_pending_recorders(); + static void delete_all_pending_recorders(); + + private: + // retrieve a pooled memory record or create new one if there is not + // one available + static MemRecorder* get_new_or_pooled_instance(); + static void create_memory_record(address addr, MEMFLAGS type, + size_t size, address pc, Thread* thread); + static void create_record_in_recorder(address addr, MEMFLAGS type, + size_t size, address pc, JavaThread* thread); + + private: + // global memory snapshot + static MemSnapshot* _snapshot; + + // a memory baseline of snapshot + static MemBaseline _baseline; + + // query lock + static Mutex* _query_lock; + + // a thread can start to allocate memory before it is attached + // to VM 'Thread', those memory activities are recorded here. + // ThreadCritical is required to guard this global recorder. + static MemRecorder* _global_recorder; + + // main thread id + debug_only(static intx _main_thread_tid;) + + // pending recorders to be merged + static volatile MemRecorder* _merge_pending_queue; + + NOT_PRODUCT(static volatile jint _pending_recorder_count;) + + // pooled memory recorders + static volatile MemRecorder* _pooled_recorders; + + // memory recorder pool management, uses following + // counter to determine if a released memory recorder + // should be pooled + + // latest thread count + static int _thread_count; + // pooled recorder count + static volatile jint _pooled_recorder_count; + + + // worker thread to merge pending recorders into snapshot + static MemTrackWorker* _worker_thread; + + // how many safepoints we skipped without entering sync point + static int _sync_point_skip_count; + + // if the tracker is properly intialized + static bool _is_tracker_ready; + // tracking level (off, summary and detail) + static enum NMTLevel _tracking_level; + + // current nmt state + static volatile enum NMTStates _state; + // the reason for shutting down nmt + static enum ShutdownReason _reason; +}; + +#endif // SHARE_VM_SERVICES_MEM_TRACKER_HPP diff --git a/hotspot/src/share/vm/services/memoryManager.cpp b/hotspot/src/share/vm/services/memoryManager.cpp index 0666223bed5..8852f9ffc4b 100644 --- a/hotspot/src/share/vm/services/memoryManager.cpp +++ b/hotspot/src/share/vm/services/memoryManager.cpp @@ -166,15 +166,15 @@ void MemoryManager::oops_do(OopClosure* f) { GCStatInfo::GCStatInfo(int num_pools) { // initialize the arrays for memory usage - _before_gc_usage_array = (MemoryUsage*) NEW_C_HEAP_ARRAY(MemoryUsage, num_pools); - _after_gc_usage_array = (MemoryUsage*) NEW_C_HEAP_ARRAY(MemoryUsage, num_pools); + _before_gc_usage_array = (MemoryUsage*) NEW_C_HEAP_ARRAY(MemoryUsage, num_pools, mtInternal); + _after_gc_usage_array = (MemoryUsage*) NEW_C_HEAP_ARRAY(MemoryUsage, num_pools, mtInternal); _usage_array_size = num_pools; clear(); } GCStatInfo::~GCStatInfo() { - FREE_C_HEAP_ARRAY(MemoryUsage*, _before_gc_usage_array); - FREE_C_HEAP_ARRAY(MemoryUsage*, _after_gc_usage_array); + FREE_C_HEAP_ARRAY(MemoryUsage*, _before_gc_usage_array, mtInternal); + FREE_C_HEAP_ARRAY(MemoryUsage*, _after_gc_usage_array, mtInternal); } void GCStatInfo::set_gc_usage(int pool_index, MemoryUsage usage, bool before_gc) { @@ -214,8 +214,8 @@ GCMemoryManager::~GCMemoryManager() { void GCMemoryManager::initialize_gc_stat_info() { assert(MemoryService::num_memory_pools() > 0, "should have one or more memory pools"); - _last_gc_stat = new(ResourceObj::C_HEAP) GCStatInfo(MemoryService::num_memory_pools()); - _current_gc_stat = new(ResourceObj::C_HEAP) GCStatInfo(MemoryService::num_memory_pools()); + _last_gc_stat = new(ResourceObj::C_HEAP, mtGC) GCStatInfo(MemoryService::num_memory_pools()); + _current_gc_stat = new(ResourceObj::C_HEAP, mtGC) GCStatInfo(MemoryService::num_memory_pools()); // tracking concurrent collections we need two objects: one to update, and one to // hold the publicly available "last (completed) gc" information. } diff --git a/hotspot/src/share/vm/services/memoryManager.hpp b/hotspot/src/share/vm/services/memoryManager.hpp index eb0d9699c1f..bb6a8112d4a 100644 --- a/hotspot/src/share/vm/services/memoryManager.hpp +++ b/hotspot/src/share/vm/services/memoryManager.hpp @@ -40,7 +40,7 @@ class MemoryPool; class GCMemoryManager; class OopClosure; -class MemoryManager : public CHeapObj { +class MemoryManager : public CHeapObj { private: enum { max_num_pools = 10 diff --git a/hotspot/src/share/vm/services/memoryPool.hpp b/hotspot/src/share/vm/services/memoryPool.hpp index 441df25915c..db560dbeded 100644 --- a/hotspot/src/share/vm/services/memoryPool.hpp +++ b/hotspot/src/share/vm/services/memoryPool.hpp @@ -50,7 +50,7 @@ class PSPermGen; class PermGen; class ThresholdSupport; -class MemoryPool : public CHeapObj { +class MemoryPool : public CHeapObj { friend class MemoryManager; public: enum PoolType { diff --git a/hotspot/src/share/vm/services/memoryService.cpp b/hotspot/src/share/vm/services/memoryService.cpp index d1bb9c2d60e..621cb7ab01f 100644 --- a/hotspot/src/share/vm/services/memoryService.cpp +++ b/hotspot/src/share/vm/services/memoryService.cpp @@ -58,9 +58,9 @@ #endif GrowableArray* MemoryService::_pools_list = - new (ResourceObj::C_HEAP) GrowableArray(init_pools_list_size, true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(init_pools_list_size, true); GrowableArray* MemoryService::_managers_list = - new (ResourceObj::C_HEAP) GrowableArray(init_managers_list_size, true); + new (ResourceObj::C_HEAP, mtInternal) GrowableArray(init_managers_list_size, true); GCMemoryManager* MemoryService::_minor_gc_manager = NULL; GCMemoryManager* MemoryService::_major_gc_manager = NULL; diff --git a/hotspot/src/share/vm/services/nmtDCmd.cpp b/hotspot/src/share/vm/services/nmtDCmd.cpp new file mode 100644 index 00000000000..47f460e6e97 --- /dev/null +++ b/hotspot/src/share/vm/services/nmtDCmd.cpp @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#include "precompiled.hpp" +#include "services/nmtDCmd.hpp" +#include "services/memReporter.hpp" +#include "services/memTracker.hpp" +#include "utilities/globalDefinitions.hpp" + +NMTDCmd::NMTDCmd(outputStream* output, + bool heap): DCmdWithParser(output, heap), + _summary("summary", "request runtime to report current memory summary, " \ + "which includes total reserved and committed memory, along " \ + "with memory usage summary by each subsytem.", + "BOOLEAN", false, "false"), + _detail("detail", "request runtime to report memory allocation >= " + "1K by each callsite.", + "BOOLEAN", false, "false"), + _baseline("baseline", "request runtime to baseline current memory usage, " \ + "so it can be compared against in later time.", + "BOOLEAN", false, "false"), + _summary_diff("summary.diff", "request runtime to report memory summary " \ + "comparison against previous baseline.", + "BOOLEAN", false, "false"), + _detail_diff("detail.diff", "request runtime to report memory detail " \ + "comparison against previous baseline, which shows the memory " \ + "allocation activities at different callsites.", + "BOOLEAN", false, "false"), + _shutdown("shutdown", "request runtime to shutdown itself and free the " \ + "memory used by runtime.", + "BOOLEAN", false, "false"), +#ifndef PRODUCT + _debug("debug", "print tracker statistics. Debug only, not thread safe", \ + "BOOLEAN", false, "false"), +#endif + _scale("scale", "Memory usage in which scale, KB, MB or GB", + "STRING", false, "KB") { + _dcmdparser.add_dcmd_option(&_summary); + _dcmdparser.add_dcmd_option(&_detail); + _dcmdparser.add_dcmd_option(&_baseline); + _dcmdparser.add_dcmd_option(&_summary_diff); + _dcmdparser.add_dcmd_option(&_detail_diff); + _dcmdparser.add_dcmd_option(&_shutdown); +#ifndef PRODUCT + _dcmdparser.add_dcmd_option(&_debug); +#endif + _dcmdparser.add_dcmd_option(&_scale); +} + +void NMTDCmd::execute(TRAPS) { + const char* scale_value = _scale.value(); + size_t scale_unit; + if (strcmp(scale_value, "KB") == 0 || strcmp(scale_value, "kb") == 0) { + scale_unit = K; + } else if (strcmp(scale_value, "MB") == 0 || + strcmp(scale_value, "mb") == 0) { + scale_unit = M; + } else if (strcmp(scale_value, "GB") == 0 || + strcmp(scale_value, "gb") == 0) { + scale_unit = G; + } else { + output()->print_cr("Incorrect scale value: %s", scale_value); + return; + } + + int nopt = 0; + if(_summary.is_set()) { ++nopt; } + if(_detail.is_set()) { ++nopt; } + if(_baseline.is_set()) { ++nopt; } + if(_summary_diff.is_set()) { ++nopt; } + if(_detail_diff.is_set()) { ++nopt; } + if(_shutdown.is_set()) { ++nopt; } +#ifndef PRODUCT + if(_debug.is_set()) { ++nopt; } +#endif + + if(nopt > 1) { + output()->print_cr("At most one of the following option can be specified: " \ + "summary, detail, baseline, summary.diff, detail.diff, shutdown" +#ifndef PRODUCT + " ,debug" +#endif + ); + return; + } + + if(nopt == 0) { + _summary.set_value(true); + } + +#ifndef PRODUCT + if (_debug.value()) { + output()->print_cr("debug command is NOT thread-safe, may cause crash"); + MemTracker::print_tracker_stats(output()); + return; + } +#endif + + // native memory tracking has to be on + if (!MemTracker::is_on() || MemTracker::shutdown_in_progress()) { + // if it is not on, what's the reason? + output()->print_cr(MemTracker::reason()); + return; + } + + if (_summary.value()) { + BaselineTTYOutputer outputer(output()); + MemTracker::print_memory_usage(outputer, scale_unit, true); + } else if (_detail.value()) { + BaselineTTYOutputer outputer(output()); + MemTracker::print_memory_usage(outputer, scale_unit, false); + } else if (_baseline.value()) { + if (MemTracker::baseline()) { + output()->print_cr("Successfully baselined."); + } else { + output()->print_cr("Baseline failed."); + } + } else if (_summary_diff.value()) { + if (MemTracker::has_baseline()) { + BaselineTTYOutputer outputer(output()); + MemTracker::compare_memory_usage(outputer, scale_unit, true); + } else { + output()->print_cr("No baseline to compare, run 'baseline' command first"); + } + } else if (_detail_diff.value()) { + if (MemTracker::has_baseline()) { + BaselineTTYOutputer outputer(output()); + MemTracker::compare_memory_usage(outputer, scale_unit, false); + } else { + output()->print_cr("No baseline to compare to, run 'baseline' command first"); + } + } else if (_shutdown.value()) { + MemTracker::shutdown(MemTracker::NMT_shutdown_user); + output()->print_cr("Shutdown is in progress, it will take a few moments to " \ + "completely shutdown"); + } else { + ShouldNotReachHere(); + output()->print_cr("Unknown command"); + } +} + +int NMTDCmd::num_arguments() { + ResourceMark rm; + NMTDCmd* dcmd = new NMTDCmd(NULL, false); + if (dcmd != NULL) { + DCmdMark mark(dcmd); + return dcmd->_dcmdparser.num_arguments(); + } else { + return 0; + } +} + diff --git a/hotspot/src/share/vm/services/nmtDCmd.hpp b/hotspot/src/share/vm/services/nmtDCmd.hpp new file mode 100644 index 00000000000..0c8c8657a72 --- /dev/null +++ b/hotspot/src/share/vm/services/nmtDCmd.hpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_SERVICES_NMT_DCMD_HPP +#define SHARE_VM_SERVICES_NMT_DCMD_HPP + +#include "services/diagnosticArgument.hpp" +#include "services/diagnosticFramework.hpp" + +/** + * Native memory tracking DCmd implementation + */ +class NMTDCmd: public DCmdWithParser { + protected: + DCmdArgument _summary; + DCmdArgument _detail; + DCmdArgument _baseline; + DCmdArgument _summary_diff; + DCmdArgument _detail_diff; + DCmdArgument _shutdown; +#ifndef PRODUCT + DCmdArgument _debug; +#endif + DCmdArgument _scale; + + public: + NMTDCmd(outputStream* output, bool heap); + static const char* name() { return "VM.native_memory"; } + static const char* description() { + return "Print native memory usage"; + } + static const char* impact() { + return "Medium:"; + } + static int num_arguments(); + virtual void execute(TRAPS); +}; + +#endif // SHARE_VM_SERVICES_NMT_DCMD_HPP diff --git a/hotspot/src/share/vm/services/threadService.cpp b/hotspot/src/share/vm/services/threadService.cpp index 5c70fe99baa..325c236b5f7 100644 --- a/hotspot/src/share/vm/services/threadService.cpp +++ b/hotspot/src/share/vm/services/threadService.cpp @@ -437,7 +437,7 @@ StackFrameInfo::StackFrameInfo(javaVFrame* jvf, bool with_lock_info) { GrowableArray* list = jvf->locked_monitors(); int length = list->length(); if (length > 0) { - _locked_monitors = new (ResourceObj::C_HEAP) GrowableArray(length, true); + _locked_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(length, true); for (int i = 0; i < length; i++) { MonitorInfo* monitor = list->at(i); assert(monitor->owner(), "This monitor must have an owning object"); @@ -491,11 +491,11 @@ public: ThreadStackTrace::ThreadStackTrace(JavaThread* t, bool with_locked_monitors) { _thread = t; - _frames = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_ARRAY_SIZE, true); + _frames = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_ARRAY_SIZE, true); _depth = 0; _with_locked_monitors = with_locked_monitors; if (_with_locked_monitors) { - _jni_locked_monitors = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_ARRAY_SIZE, true); + _jni_locked_monitors = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_ARRAY_SIZE, true); } else { _jni_locked_monitors = NULL; } @@ -689,7 +689,7 @@ void ConcurrentLocksDump::print_locks_on(JavaThread* t, outputStream* st) { ThreadConcurrentLocks::ThreadConcurrentLocks(JavaThread* thread) { _thread = thread; - _owned_locks = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_ARRAY_SIZE, true); + _owned_locks = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_ARRAY_SIZE, true); _next = NULL; } @@ -803,7 +803,7 @@ void ThreadSnapshot::oops_do(OopClosure* f) { DeadlockCycle::DeadlockCycle() { _is_deadlock = false; - _threads = new (ResourceObj::C_HEAP) GrowableArray(INITIAL_ARRAY_SIZE, true); + _threads = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(INITIAL_ARRAY_SIZE, true); _next = NULL; } diff --git a/hotspot/src/share/vm/services/threadService.hpp b/hotspot/src/share/vm/services/threadService.hpp index bd1395a7d4b..9f91edf7a60 100644 --- a/hotspot/src/share/vm/services/threadService.hpp +++ b/hotspot/src/share/vm/services/threadService.hpp @@ -116,7 +116,7 @@ public: }; // Per-thread Statistics for synchronization -class ThreadStatistics : public CHeapObj { +class ThreadStatistics : public CHeapObj { private: // The following contention statistics are only updated by // the thread owning these statistics when contention occurs. @@ -186,7 +186,7 @@ public: }; // Thread snapshot to represent the thread state and statistics -class ThreadSnapshot : public CHeapObj { +class ThreadSnapshot : public CHeapObj { private: JavaThread* _thread; oop _threadObj; @@ -244,7 +244,7 @@ public: void oops_do(OopClosure* f); }; -class ThreadStackTrace : public CHeapObj { +class ThreadStackTrace : public CHeapObj { private: JavaThread* _thread; int _depth; // number of stack frames added @@ -275,7 +275,7 @@ class ThreadStackTrace : public CHeapObj { // StackFrameInfo for keeping methodOop and bci during // stack walking for later construction of StackTraceElement[] // Java instances -class StackFrameInfo : public CHeapObj { +class StackFrameInfo : public CHeapObj { private: methodOop _method; int _bci; @@ -299,7 +299,7 @@ class StackFrameInfo : public CHeapObj { void print_on(outputStream* st) const; }; -class ThreadConcurrentLocks : public CHeapObj { +class ThreadConcurrentLocks : public CHeapObj { private: GrowableArray* _owned_locks; ThreadConcurrentLocks* _next; @@ -356,7 +356,7 @@ class ThreadDumpResult : public StackObj { void oops_do(OopClosure* f); }; -class DeadlockCycle : public CHeapObj { +class DeadlockCycle : public CHeapObj { private: bool _is_deadlock; GrowableArray* _threads; diff --git a/hotspot/src/share/vm/utilities/array.cpp b/hotspot/src/share/vm/utilities/array.cpp index 44782ea8937..b1c7a61d970 100644 --- a/hotspot/src/share/vm/utilities/array.cpp +++ b/hotspot/src/share/vm/utilities/array.cpp @@ -49,7 +49,7 @@ void ResourceArray::init_nesting() { void ResourceArray::sort(size_t esize, ftype f) { if (!is_empty()) qsort(_data, length(), esize, f); } -void CHeapArray::sort(size_t esize, ftype f) { +template void CHeapArray::sort(size_t esize, ftype f) { if (!is_empty()) qsort(_data, length(), esize, f); } @@ -70,14 +70,14 @@ void ResourceArray::expand(size_t esize, int i, int& size) { } -void CHeapArray::expand(size_t esize, int i, int& size) { +template void CHeapArray::expand(size_t esize, int i, int& size) { // determine new size if (size == 0) size = 4; // prevent endless loop while (i >= size) size *= 2; // allocate and initialize new data section - void* data = NEW_C_HEAP_ARRAY(char*, esize * size); + void* data = NEW_C_HEAP_ARRAY(char*, esize * size, F); memcpy(data, _data, esize * length()); - FREE_C_HEAP_ARRAY(char*, _data); + FREE_C_HEAP_ARRAY(char*, _data, F); _data = data; } @@ -91,7 +91,7 @@ void ResourceArray::remove_at(size_t esize, int i) { memmove(dst, src, cnt); } -void CHeapArray::remove_at(size_t esize, int i) { +template void CHeapArray::remove_at(size_t esize, int i) { assert(0 <= i && i < length(), "index out of bounds"); _length--; void* dst = (char*)_data + i*esize; diff --git a/hotspot/src/share/vm/utilities/array.hpp b/hotspot/src/share/vm/utilities/array.hpp index cbc4161a42f..c0fb59283da 100644 --- a/hotspot/src/share/vm/utilities/array.hpp +++ b/hotspot/src/share/vm/utilities/array.hpp @@ -79,7 +79,7 @@ class ResourceArray: public ResourceObj { }; -class CHeapArray: public CHeapObj { +template class CHeapArray: public CHeapObj { protected: int _length; // the number of array elements void* _data; // the array memory @@ -94,7 +94,7 @@ class CHeapArray: public CHeapObj { CHeapArray(size_t esize, int length) { assert(length >= 0, "illegal length"); _length = length; - _data = (void*) NEW_C_HEAP_ARRAY(char *, esize * length); + _data = (void*) NEW_C_HEAP_ARRAY(char *, esize * length, F); } #ifdef ASSERT diff --git a/hotspot/src/share/vm/utilities/bitMap.cpp b/hotspot/src/share/vm/utilities/bitMap.cpp index 3141bc0de34..0b12b118079 100644 --- a/hotspot/src/share/vm/utilities/bitMap.cpp +++ b/hotspot/src/share/vm/utilities/bitMap.cpp @@ -65,8 +65,8 @@ void BitMap::resize(idx_t size_in_bits, bool in_resource_area) { if (in_resource_area) { _map = NEW_RESOURCE_ARRAY(bm_word_t, new_size_in_words); } else { - if (old_map != NULL) FREE_C_HEAP_ARRAY(bm_word_t, _map); - _map = NEW_C_HEAP_ARRAY(bm_word_t, new_size_in_words); + if (old_map != NULL) FREE_C_HEAP_ARRAY(bm_word_t, _map, mtInternal); + _map = NEW_C_HEAP_ARRAY(bm_word_t, new_size_in_words, mtInternal); } Copy::disjoint_words((HeapWord*)old_map, (HeapWord*) _map, MIN2(old_size_in_words, new_size_in_words)); @@ -469,7 +469,7 @@ BitMap::idx_t* BitMap::_pop_count_table = NULL; void BitMap::init_pop_count_table() { if (_pop_count_table == NULL) { - BitMap::idx_t *table = NEW_C_HEAP_ARRAY(idx_t, 256); + BitMap::idx_t *table = NEW_C_HEAP_ARRAY(idx_t, 256, mtInternal); for (uint i = 0; i < 256; i++) { table[i] = num_set_bits(i); } @@ -479,7 +479,7 @@ void BitMap::init_pop_count_table() { (intptr_t) NULL_WORD); if (res != NULL_WORD) { guarantee( _pop_count_table == (void*) res, "invariant" ); - FREE_C_HEAP_ARRAY(bm_word_t, table); + FREE_C_HEAP_ARRAY(bm_word_t, table, mtInternal); } } } diff --git a/hotspot/src/share/vm/utilities/decoder.hpp b/hotspot/src/share/vm/utilities/decoder.hpp index 56ff91907cc..a24f771b7bb 100644 --- a/hotspot/src/share/vm/utilities/decoder.hpp +++ b/hotspot/src/share/vm/utilities/decoder.hpp @@ -29,7 +29,7 @@ #include "memory/allocation.hpp" #include "runtime/mutex.hpp" -class AbstractDecoder : public CHeapObj { +class AbstractDecoder : public CHeapObj { public: // status code for decoding native C frame enum decoder_status { diff --git a/hotspot/src/share/vm/utilities/elfFile.cpp b/hotspot/src/share/vm/utilities/elfFile.cpp index 2e4b68302e9..5faaf83b53a 100644 --- a/hotspot/src/share/vm/utilities/elfFile.cpp +++ b/hotspot/src/share/vm/utilities/elfFile.cpp @@ -47,7 +47,7 @@ ElfFile::ElfFile(const char* filepath) { m_status = NullDecoder::no_error; int len = strlen(filepath) + 1; - m_filepath = (const char*)os::malloc(len * sizeof(char)); + m_filepath = (const char*)os::malloc(len * sizeof(char), mtInternal); if (m_filepath != NULL) { strcpy((char*)m_filepath, filepath); m_file = fopen(filepath, "r"); diff --git a/hotspot/src/share/vm/utilities/elfFile.hpp b/hotspot/src/share/vm/utilities/elfFile.hpp index e6f4ce263d6..f0cba8b6d08 100644 --- a/hotspot/src/share/vm/utilities/elfFile.hpp +++ b/hotspot/src/share/vm/utilities/elfFile.hpp @@ -82,7 +82,7 @@ class ElfSymbolTable; // in "error" state, so there are scenarios, lookup will fail. We want this // part of code to be very defensive, and bait out if anything went wrong. -class ElfFile: public CHeapObj { +class ElfFile: public CHeapObj { friend class ElfDecoder; public: ElfFile(const char* filepath); diff --git a/hotspot/src/share/vm/utilities/elfStringTable.cpp b/hotspot/src/share/vm/utilities/elfStringTable.cpp index 89286cb1883..cba67ddf646 100644 --- a/hotspot/src/share/vm/utilities/elfStringTable.cpp +++ b/hotspot/src/share/vm/utilities/elfStringTable.cpp @@ -42,7 +42,7 @@ ElfStringTable::ElfStringTable(FILE* file, Elf_Shdr shdr, int index) { // try to load the string table long cur_offset = ftell(file); - m_table = (char*)os::malloc(sizeof(char) * shdr.sh_size); + m_table = (char*)os::malloc(sizeof(char) * shdr.sh_size, mtInternal); if (m_table != NULL) { // if there is an error, mark the error if (fseek(file, shdr.sh_offset, SEEK_SET) || diff --git a/hotspot/src/share/vm/utilities/elfStringTable.hpp b/hotspot/src/share/vm/utilities/elfStringTable.hpp index 96f30b159ea..a4cdfc07854 100644 --- a/hotspot/src/share/vm/utilities/elfStringTable.hpp +++ b/hotspot/src/share/vm/utilities/elfStringTable.hpp @@ -35,7 +35,7 @@ // The string table represents a string table section in an elf file. // Whenever there is enough memory, it will load whole string table as // one blob. Otherwise, it will load string from file when requested. -class ElfStringTable: CHeapObj { +class ElfStringTable: CHeapObj { friend class ElfFile; public: ElfStringTable(FILE* file, Elf_Shdr shdr, int index); diff --git a/hotspot/src/share/vm/utilities/elfSymbolTable.cpp b/hotspot/src/share/vm/utilities/elfSymbolTable.cpp index 3ac9b9215f6..5301d5a32a5 100644 --- a/hotspot/src/share/vm/utilities/elfSymbolTable.cpp +++ b/hotspot/src/share/vm/utilities/elfSymbolTable.cpp @@ -40,7 +40,7 @@ ElfSymbolTable::ElfSymbolTable(FILE* file, Elf_Shdr shdr) { long cur_offset = ftell(file); if (cur_offset != -1) { // call malloc so we can back up if memory allocation fails. - m_symbols = (Elf_Sym*)os::malloc(shdr.sh_size); + m_symbols = (Elf_Sym*)os::malloc(shdr.sh_size, mtInternal); if (m_symbols) { if (fseek(file, shdr.sh_offset, SEEK_SET) || fread((void*)m_symbols, shdr.sh_size, 1, file) != 1 || diff --git a/hotspot/src/share/vm/utilities/elfSymbolTable.hpp b/hotspot/src/share/vm/utilities/elfSymbolTable.hpp index a149b99dfd8..4a23cfdeeda 100644 --- a/hotspot/src/share/vm/utilities/elfSymbolTable.hpp +++ b/hotspot/src/share/vm/utilities/elfSymbolTable.hpp @@ -38,7 +38,7 @@ * of the elf file into memory. Otherwise, it will walk the section in file * to look up the symbol that nearest the given address. */ -class ElfSymbolTable: public CHeapObj { +class ElfSymbolTable: public CHeapObj { friend class ElfFile; public: ElfSymbolTable(FILE* file, Elf_Shdr shdr); diff --git a/hotspot/src/share/vm/utilities/events.hpp b/hotspot/src/share/vm/utilities/events.hpp index 5b64e0c5c4d..74a804219fa 100644 --- a/hotspot/src/share/vm/utilities/events.hpp +++ b/hotspot/src/share/vm/utilities/events.hpp @@ -46,7 +46,7 @@ // crash time. This is a very generic interface that is mainly here // for completeness. Normally the templated EventLogBase would be // subclassed to provide different log types. -class EventLog : public CHeapObj { +class EventLog : public CHeapObj { friend class Events; private: diff --git a/hotspot/src/share/vm/utilities/exceptions.hpp b/hotspot/src/share/vm/utilities/exceptions.hpp index f7fece16fb6..568dfd0fb3c 100644 --- a/hotspot/src/share/vm/utilities/exceptions.hpp +++ b/hotspot/src/share/vm/utilities/exceptions.hpp @@ -57,7 +57,7 @@ class JavaCallArguments; // field of the Thread class w/o having access to the Thread's interface (for // include hierachy reasons). -class ThreadShadow: public CHeapObj { +class ThreadShadow: public CHeapObj { friend class VMStructs; protected: diff --git a/hotspot/src/share/vm/utilities/growableArray.cpp b/hotspot/src/share/vm/utilities/growableArray.cpp index a6ad8f3057e..7da659e6f68 100644 --- a/hotspot/src/share/vm/utilities/growableArray.cpp +++ b/hotspot/src/share/vm/utilities/growableArray.cpp @@ -61,7 +61,7 @@ void* GenericGrowableArray::raw_allocate(int elementSize) { if (on_stack()) { return (void*)resource_allocate_bytes(byte_size); } else if (on_C_heap()) { - return (void*)AllocateHeap(byte_size, "GrET in " __FILE__); + return (void*)AllocateHeap(byte_size, _memflags); } else { return _arena->Amalloc(byte_size); } diff --git a/hotspot/src/share/vm/utilities/growableArray.hpp b/hotspot/src/share/vm/utilities/growableArray.hpp index f7379fca551..2a6d6b88f9d 100644 --- a/hotspot/src/share/vm/utilities/growableArray.hpp +++ b/hotspot/src/share/vm/utilities/growableArray.hpp @@ -86,6 +86,9 @@ class GenericGrowableArray : public ResourceObj { // 0 means default ResourceArea // 1 means on C heap // otherwise, allocate in _arena + + MEMFLAGS _memflags; // memory type if allocation in C heap + #ifdef ASSERT int _nesting; // resource area nesting at creation void set_nesting(); @@ -102,9 +105,14 @@ class GenericGrowableArray : public ResourceObj { // This GA will use the resource stack for storage if c_heap==false, // Else it will use the C heap. Use clear_and_deallocate to avoid leaks. - GenericGrowableArray(int initial_size, int initial_len, bool c_heap) { + GenericGrowableArray(int initial_size, int initial_len, bool c_heap, MEMFLAGS flags = mtNone) { _len = initial_len; _max = initial_size; + _memflags = flags; + + // memory type has to be specified for C heap allocation + assert(!(c_heap && flags == mtNone), "memory type not specified for C heap object"); + assert(_len >= 0 && _len <= _max, "initial_len too big"); _arena = (c_heap ? (Arena*)1 : NULL); set_nesting(); @@ -121,6 +129,8 @@ class GenericGrowableArray : public ResourceObj { _max = initial_size; assert(_len >= 0 && _len <= _max, "initial_len too big"); _arena = arena; + _memflags = mtNone; + assert(on_arena(), "arena has taken on reserved value 0 or 1"); // Relax next assert to allow object allocation on resource area, // on stack or embedded into an other object. @@ -152,12 +162,14 @@ template class GrowableArray : public GenericGrowableArray { for (int i = 0; i < _max; i++) ::new ((void*)&_data[i]) E(); } - GrowableArray(int initial_size, bool C_heap = false) : GenericGrowableArray(initial_size, 0, C_heap) { + GrowableArray(int initial_size, bool C_heap = false, MEMFLAGS F = mtInternal) + : GenericGrowableArray(initial_size, 0, C_heap, F) { _data = (E*)raw_allocate(sizeof(E)); for (int i = 0; i < _max; i++) ::new ((void*)&_data[i]) E(); } - GrowableArray(int initial_size, int initial_len, const E& filler, bool C_heap = false) : GenericGrowableArray(initial_size, initial_len, C_heap) { + GrowableArray(int initial_size, int initial_len, const E& filler, bool C_heap = false, MEMFLAGS memflags = mtInternal) + : GenericGrowableArray(initial_size, initial_len, C_heap, memflags) { _data = (E*)raw_allocate(sizeof(E)); int i = 0; for (; i < _len; i++) ::new ((void*)&_data[i]) E(filler); diff --git a/hotspot/src/share/vm/utilities/hashtable.cpp b/hotspot/src/share/vm/utilities/hashtable.cpp index 698e137ff82..39092d95f5c 100644 --- a/hotspot/src/share/vm/utilities/hashtable.cpp +++ b/hotspot/src/share/vm/utilities/hashtable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,10 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" +#include "classfile/javaClasses.hpp" #include "memory/allocation.inline.hpp" +#include "memory/filemap.hpp" #include "memory/resourceArea.hpp" #include "oops/oop.inline.hpp" #include "runtime/safepoint.hpp" @@ -32,11 +35,6 @@ #include "utilities/hashtable.inline.hpp" -#ifndef USDT2 -HS_DTRACE_PROBE_DECL4(hs_private, hashtable__new_entry, - void*, unsigned int, void*, void*); -#endif /* !USDT2 */ - // This is a generic hashtable, designed to be used for the symbol // and string tables. // @@ -45,8 +43,8 @@ HS_DTRACE_PROBE_DECL4(hs_private, hashtable__new_entry, // %note: // - HashtableEntrys are allocated in blocks to reduce the space overhead. -BasicHashtableEntry* BasicHashtable::new_entry(unsigned int hashValue) { - BasicHashtableEntry* entry; +template BasicHashtableEntry* BasicHashtable::new_entry(unsigned int hashValue) { + BasicHashtableEntry* entry; if (_free_list) { entry = _free_list; @@ -57,10 +55,10 @@ BasicHashtableEntry* BasicHashtable::new_entry(unsigned int hashValue) { int len = _entry_size * block_size; len = 1 << log2_intptr(len); // round down to power of 2 assert(len >= _entry_size, ""); - _first_free_entry = NEW_C_HEAP_ARRAY(char, len); + _first_free_entry = NEW_C_HEAP_ARRAY2(char, len, F, CURRENT_PC); _end_block = _first_free_entry + len; } - entry = (BasicHashtableEntry*)_first_free_entry; + entry = (BasicHashtableEntry*)_first_free_entry; _first_free_entry += _entry_size; } @@ -70,31 +68,114 @@ BasicHashtableEntry* BasicHashtable::new_entry(unsigned int hashValue) { } -template HashtableEntry* Hashtable::new_entry(unsigned int hashValue, T obj) { - HashtableEntry* entry; +template HashtableEntry* Hashtable::new_entry(unsigned int hashValue, T obj) { + HashtableEntry* entry; - entry = (HashtableEntry*)BasicHashtable::new_entry(hashValue); + entry = (HashtableEntry*)BasicHashtable::new_entry(hashValue); entry->set_literal(obj); -#ifndef USDT2 - HS_DTRACE_PROBE4(hs_private, hashtable__new_entry, - this, hashValue, obj, entry); -#else /* USDT2 */ - HS_PRIVATE_HASHTABLE_NEW_ENTRY( - this, hashValue, (uintptr_t) obj, entry); -#endif /* USDT2 */ return entry; } +// Check to see if the hashtable is unbalanced. The caller set a flag to +// rehash at the next safepoint. If this bucket is 60 times greater than the +// expected average bucket length, it's an unbalanced hashtable. +// This is somewhat an arbitrary heuristic but if one bucket gets to +// rehash_count which is currently 100, there's probably something wrong. + +template bool BasicHashtable::check_rehash_table(int count) { + assert(table_size() != 0, "underflow"); + if (count > (((double)number_of_entries()/(double)table_size())*rehash_multiple)) { + // Set a flag for the next safepoint, which should be at some guaranteed + // safepoint interval. + return true; + } + return false; +} + +template jint Hashtable::_seed = 0; + +template unsigned int Hashtable::new_hash(Symbol* sym) { + ResourceMark rm; + // Use alternate hashing algorithm on this symbol. + return AltHashing::murmur3_32(seed(), (const jbyte*)sym->as_C_string(), sym->utf8_length()); +} + +template unsigned int Hashtable::new_hash(oop string) { + ResourceMark rm; + int length; + jchar* chars = java_lang_String::as_unicode_string(string, length); + // Use alternate hashing algorithm on the string + return AltHashing::murmur3_32(seed(), chars, length); +} + +// Create a new table and using alternate hash code, populate the new table +// with the existing elements. This can be used to change the hash code +// and could in the future change the size of the table. + +template void Hashtable::move_to(Hashtable* new_table) { + + // Initialize the global seed for hashing. + _seed = AltHashing::compute_seed(); + assert(seed() != 0, "shouldn't be zero"); + + int saved_entry_count = this->number_of_entries(); + + // Iterate through the table and create a new entry for the new table + for (int i = 0; i < new_table->table_size(); ++i) { + for (HashtableEntry* p = bucket(i); p != NULL; ) { + HashtableEntry* next = p->next(); + T string = p->literal(); + // Use alternate hashing algorithm on the symbol in the first table + unsigned int hashValue = new_hash(string); + // Get a new index relative to the new table (can also change size) + int index = new_table->hash_to_index(hashValue); + p->set_hash(hashValue); + // Keep the shared bit in the Hashtable entry to indicate that this entry + // can't be deleted. The shared bit is the LSB in the _next field so + // walking the hashtable past these entries requires + // BasicHashtableEntry::make_ptr() call. + bool keep_shared = p->is_shared(); + unlink_entry(p); + new_table->add_entry(index, p); + if (keep_shared) { + p->set_shared(); + } + p = next; + } + } + // give the new table the free list as well + new_table->copy_freelist(this); + assert(new_table->number_of_entries() == saved_entry_count, "lost entry on dictionary copy?"); + + // Destroy memory used by the buckets in the hashtable. The memory + // for the elements has been used in a new table and is not + // destroyed. The memory reuse will benefit resizing the SystemDictionary + // to avoid a memory allocation spike at safepoint. + BasicHashtable::free_buckets(); +} + +template void BasicHashtable::free_buckets() { + if (NULL != _buckets) { + // Don't delete the buckets in the shared space. They aren't + // allocated by os::malloc + if (!UseSharedSpaces || + !FileMapInfo::current_info()->is_in_shared_space(_buckets)) { + FREE_C_HEAP_ARRAY(HashtableBucket, _buckets, F); + } + _buckets = NULL; + } +} + // Reverse the order of elements in the hash buckets. -void BasicHashtable::reverse() { +template void BasicHashtable::reverse() { for (int i = 0; i < _table_size; ++i) { - BasicHashtableEntry* new_list = NULL; - BasicHashtableEntry* p = bucket(i); + BasicHashtableEntry* new_list = NULL; + BasicHashtableEntry* p = bucket(i); while (p != NULL) { - BasicHashtableEntry* next = p->next(); + BasicHashtableEntry* next = p->next(); p->set_next(new_list); new_list = p; p = next; @@ -106,7 +187,7 @@ void BasicHashtable::reverse() { // Copy the table to the shared space. -void BasicHashtable::copy_table(char** top, char* end) { +template void BasicHashtable::copy_table(char** top, char* end) { // Dump the hash table entries. @@ -115,13 +196,13 @@ void BasicHashtable::copy_table(char** top, char* end) { int i; for (i = 0; i < _table_size; ++i) { - for (BasicHashtableEntry** p = _buckets[i].entry_addr(); + for (BasicHashtableEntry** p = _buckets[i].entry_addr(); *p != NULL; p = (*p)->next_addr()) { if (*top + entry_size() > end) { report_out_of_shared_space(SharedMiscData); } - *p = (BasicHashtableEntry*)memcpy(*top, *p, entry_size()); + *p = (BasicHashtableEntry*)memcpy(*top, *p, entry_size()); *top += entry_size(); } } @@ -130,7 +211,7 @@ void BasicHashtable::copy_table(char** top, char* end) { // Set the shared bit. for (i = 0; i < _table_size; ++i) { - for (BasicHashtableEntry* p = bucket(i); p != NULL; p = p->next()) { + for (BasicHashtableEntry* p = bucket(i); p != NULL; p = p->next()) { p->set_shared(); } } @@ -140,15 +221,15 @@ void BasicHashtable::copy_table(char** top, char* end) { // Reverse the order of elements in the hash buckets. -template void Hashtable::reverse(void* boundary) { +template void Hashtable::reverse(void* boundary) { - for (int i = 0; i < table_size(); ++i) { - HashtableEntry* high_list = NULL; - HashtableEntry* low_list = NULL; - HashtableEntry* last_low_entry = NULL; - HashtableEntry* p = bucket(i); + for (int i = 0; i < this->table_size(); ++i) { + HashtableEntry* high_list = NULL; + HashtableEntry* low_list = NULL; + HashtableEntry* last_low_entry = NULL; + HashtableEntry* p = bucket(i); while (p != NULL) { - HashtableEntry* next = p->next(); + HashtableEntry* next = p->next(); if ((void*)p->literal() >= boundary) { p->set_next(high_list); high_list = p; @@ -173,8 +254,8 @@ template void Hashtable::reverse(void* boundary) { // Dump the hash table buckets. -void BasicHashtable::copy_buckets(char** top, char* end) { - intptr_t len = _table_size * sizeof(HashtableBucket); +template void BasicHashtable::copy_buckets(char** top, char* end) { + intptr_t len = _table_size * sizeof(HashtableBucket); *(intptr_t*)(*top) = len; *top += sizeof(intptr_t); @@ -184,18 +265,18 @@ void BasicHashtable::copy_buckets(char** top, char* end) { if (*top + len > end) { report_out_of_shared_space(SharedMiscData); } - _buckets = (HashtableBucket*)memcpy(*top, _buckets, len); + _buckets = (HashtableBucket*)memcpy(*top, _buckets, len); *top += len; } #ifndef PRODUCT -template void Hashtable::print() { +template void Hashtable::print() { ResourceMark rm; - for (int i = 0; i < table_size(); i++) { - HashtableEntry* entry = bucket(i); + for (int i = 0; i < BasicHashtable::table_size(); i++) { + HashtableEntry* entry = bucket(i); while(entry != NULL) { tty->print("%d : ", i); entry->literal()->print(); @@ -206,10 +287,10 @@ template void Hashtable::print() { } -void BasicHashtable::verify() { +template void BasicHashtable::verify() { int count = 0; for (int i = 0; i < table_size(); i++) { - for (BasicHashtableEntry* p = bucket(i); p != NULL; p = p->next()) { + for (BasicHashtableEntry* p = bucket(i); p != NULL; p = p->next()) { ++count; } } @@ -222,7 +303,7 @@ void BasicHashtable::verify() { #ifdef ASSERT -void BasicHashtable::verify_lookup_length(double load) { +template void BasicHashtable::verify_lookup_length(double load) { if ((double)_lookup_length / (double)_lookup_count > load * 2.0) { warning("Performance bug: SystemDictionary lookup_count=%d " "lookup_length=%d average=%lf load=%f", @@ -232,10 +313,22 @@ void BasicHashtable::verify_lookup_length(double load) { } #endif - // Explicitly instantiate these types -template class Hashtable; -template class Hashtable; -template class Hashtable; -template class Hashtable; - +template class Hashtable; +template class Hashtable; +template class Hashtable; +template class Hashtable; +#ifdef SOLARIS +template class Hashtable; +#endif +template class Hashtable; +template class Hashtable; +template class HashtableEntry; +template class HashtableEntry; +template class HashtableEntry; +template class BasicHashtableEntry; +template class BasicHashtableEntry; +template class BasicHashtable; +template class BasicHashtable; +template class BasicHashtable; +template class BasicHashtable; diff --git a/hotspot/src/share/vm/utilities/hashtable.hpp b/hotspot/src/share/vm/utilities/hashtable.hpp index 527470938d9..de7d319c07c 100644 --- a/hotspot/src/share/vm/utilities/hashtable.hpp +++ b/hotspot/src/share/vm/utilities/hashtable.hpp @@ -40,7 +40,7 @@ -class BasicHashtableEntry : public CHeapObj { +template class BasicHashtableEntry : public CHeapObj { friend class VMStructs; private: unsigned int _hash; // 32-bit hash for item @@ -52,7 +52,7 @@ private: // shared entries will not change. New entries will always be // unshared and since pointers are align, bit 0 will always remain 0 // with no extra effort. - BasicHashtableEntry* _next; + BasicHashtableEntry* _next; // Windows IA64 compiler requires subclasses to be able to access these protected: @@ -69,19 +69,19 @@ public: void set_hash(unsigned int hash) { _hash = hash; } unsigned int* hash_addr() { return &_hash; } - static BasicHashtableEntry* make_ptr(BasicHashtableEntry* p) { + static BasicHashtableEntry* make_ptr(BasicHashtableEntry* p) { return (BasicHashtableEntry*)((intptr_t)p & -2); } - BasicHashtableEntry* next() const { + BasicHashtableEntry* next() const { return make_ptr(_next); } - void set_next(BasicHashtableEntry* next) { + void set_next(BasicHashtableEntry* next) { _next = next; } - BasicHashtableEntry** next_addr() { + BasicHashtableEntry** next_addr() { return &_next; } @@ -90,13 +90,13 @@ public: } void set_shared() { - _next = (BasicHashtableEntry*)((intptr_t)_next | 1); + _next = (BasicHashtableEntry*)((intptr_t)_next | 1); } }; -template class HashtableEntry : public BasicHashtableEntry { +template class HashtableEntry : public BasicHashtableEntry { friend class VMStructs; private: T _literal; // ref to item in table. @@ -108,20 +108,20 @@ public: void set_literal(T s) { _literal = s; } HashtableEntry* next() const { - return (HashtableEntry*)BasicHashtableEntry::next(); + return (HashtableEntry*)BasicHashtableEntry::next(); } HashtableEntry** next_addr() { - return (HashtableEntry**)BasicHashtableEntry::next_addr(); + return (HashtableEntry**)BasicHashtableEntry::next_addr(); } }; -class HashtableBucket : public CHeapObj { +template class HashtableBucket : public CHeapObj { friend class VMStructs; private: // Instance variable - BasicHashtableEntry* _entry; + BasicHashtableEntry* _entry; public: // Accessing @@ -129,21 +129,21 @@ public: // The following methods use order access methods to avoid race // conditions in multiprocessor systems. - BasicHashtableEntry* get_entry() const; - void set_entry(BasicHashtableEntry* l); + BasicHashtableEntry* get_entry() const; + void set_entry(BasicHashtableEntry* l); // The following method is not MT-safe and must be done under lock. - BasicHashtableEntry** entry_addr() { return &_entry; } + BasicHashtableEntry** entry_addr() { return &_entry; } }; -class BasicHashtable : public CHeapObj { +template class BasicHashtable : public CHeapObj { friend class VMStructs; public: BasicHashtable(int table_size, int entry_size); BasicHashtable(int table_size, int entry_size, - HashtableBucket* buckets, int number_of_entries); + HashtableBucket* buckets, int number_of_entries); // Sharing support. void copy_buckets(char** top, char* end); @@ -159,13 +159,11 @@ public: // Reverse the order of elements in each of the buckets. void reverse(); - static unsigned int hash_symbol(const char* s, int len); - private: // Instance variables int _table_size; - HashtableBucket* _buckets; - BasicHashtableEntry* _free_list; + HashtableBucket* _buckets; + BasicHashtableEntry* _free_list; char* _first_free_entry; char* _end_block; int _entry_size; @@ -179,27 +177,55 @@ protected: void verify_lookup_length(double load); #endif + enum { + rehash_count = 100, + rehash_multiple = 60 + }; + void initialize(int table_size, int entry_size, int number_of_entries); // Accessor int entry_size() const { return _entry_size; } // The following method is MT-safe and may be used with caution. - BasicHashtableEntry* bucket(int i); + BasicHashtableEntry* bucket(int i); // The following method is not MT-safe and must be done under lock. - BasicHashtableEntry** bucket_addr(int i) { return _buckets[i].entry_addr(); } + BasicHashtableEntry** bucket_addr(int i) { return _buckets[i].entry_addr(); } // Table entry management - BasicHashtableEntry* new_entry(unsigned int hashValue); + BasicHashtableEntry* new_entry(unsigned int hashValue); + + // Check that the table is unbalanced + bool check_rehash_table(int count); + + // Used when moving the entry to another table + // Clean up links, but do not add to free_list + void unlink_entry(BasicHashtableEntry* entry) { + entry->set_next(NULL); + --_number_of_entries; + } + + // Move over freelist and free block for allocation + void copy_freelist(BasicHashtable* src) { + _free_list = src->_free_list; + src->_free_list = NULL; + _first_free_entry = src->_first_free_entry; + src->_first_free_entry = NULL; + _end_block = src->_end_block; + src->_end_block = NULL; + } + + // Free the buckets in this hashtable + void free_buckets(); public: int table_size() { return _table_size; } - void set_entry(int index, BasicHashtableEntry* entry); + void set_entry(int index, BasicHashtableEntry* entry); - void add_entry(int index, BasicHashtableEntry* entry); + void add_entry(int index, BasicHashtableEntry* entry); - void free_entry(BasicHashtableEntry* entry); + void free_entry(BasicHashtableEntry* entry); int number_of_entries() { return _number_of_entries; } @@ -207,16 +233,16 @@ public: }; -template class Hashtable : public BasicHashtable { +template class Hashtable : public BasicHashtable { friend class VMStructs; public: Hashtable(int table_size, int entry_size) - : BasicHashtable(table_size, entry_size) { } + : BasicHashtable(table_size, entry_size) { } Hashtable(int table_size, int entry_size, - HashtableBucket* buckets, int number_of_entries) - : BasicHashtable(table_size, entry_size, buckets, number_of_entries) { } + HashtableBucket* buckets, int number_of_entries) + : BasicHashtable(table_size, entry_size, buckets, number_of_entries) { } // Debugging void print() PRODUCT_RETURN; @@ -238,31 +264,42 @@ protected: } // Table entry management - HashtableEntry* new_entry(unsigned int hashValue, T obj); + HashtableEntry* new_entry(unsigned int hashValue, T obj); // The following method is MT-safe and may be used with caution. - HashtableEntry* bucket(int i) { - return (HashtableEntry*)BasicHashtable::bucket(i); + HashtableEntry* bucket(int i) { + return (HashtableEntry*)BasicHashtable::bucket(i); } // The following method is not MT-safe and must be done under lock. - HashtableEntry** bucket_addr(int i) { - return (HashtableEntry**)BasicHashtable::bucket_addr(i); + HashtableEntry** bucket_addr(int i) { + return (HashtableEntry**)BasicHashtable::bucket_addr(i); } + + // Function to move these elements into the new table. + void move_to(Hashtable* new_table); + static bool use_alternate_hashcode() { return _seed != 0; } + static jint seed() { return _seed; } + + private: + static jint _seed; + + unsigned int new_hash(Symbol* s); + unsigned int new_hash(oop string); }; // Verions of hashtable where two handles are used to compute the index. -template class TwoOopHashtable : public Hashtable { +template class TwoOopHashtable : public Hashtable { friend class VMStructs; protected: TwoOopHashtable(int table_size, int entry_size) - : Hashtable(table_size, entry_size) {} + : Hashtable(table_size, entry_size) {} - TwoOopHashtable(int table_size, int entry_size, HashtableBucket* t, + TwoOopHashtable(int table_size, int entry_size, HashtableBucket* t, int number_of_entries) - : Hashtable(table_size, entry_size, t, number_of_entries) {} + : Hashtable(table_size, entry_size, t, number_of_entries) {} public: unsigned int compute_hash(Symbol* name, Handle loader) { diff --git a/hotspot/src/share/vm/utilities/hashtable.inline.hpp b/hotspot/src/share/vm/utilities/hashtable.inline.hpp index 8cd2f89d0c8..237fa5f41ee 100644 --- a/hotspot/src/share/vm/utilities/hashtable.inline.hpp +++ b/hotspot/src/share/vm/utilities/hashtable.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,46 +27,26 @@ #include "memory/allocation.inline.hpp" #include "utilities/hashtable.hpp" +#include "utilities/dtrace.hpp" // Inline function definitions for hashtable.hpp. - -// -------------------------------------------------------------------------- -// Hash function - -// We originally used hashpjw, but hash P(31) gives just as good results -// and is slighly faster. We would like a hash function that looks at every -// character, since package names have large common prefixes, and also because -// hash_or_fail does error checking while iterating. - -// hash P(31) from Kernighan & Ritchie - -inline unsigned int BasicHashtable::hash_symbol(const char* s, int len) { - unsigned int h = 0; - while (len-- > 0) { - h = 31*h + (unsigned) *s; - s++; - } - return h; -} - - // -------------------------------------------------------------------------- // Initialize a table. -inline BasicHashtable::BasicHashtable(int table_size, int entry_size) { +template inline BasicHashtable::BasicHashtable(int table_size, int entry_size) { // Called on startup, no locking needed initialize(table_size, entry_size, 0); - _buckets = NEW_C_HEAP_ARRAY(HashtableBucket, table_size); + _buckets = NEW_C_HEAP_ARRAY2(HashtableBucket, table_size, F, CURRENT_PC); for (int index = 0; index < _table_size; index++) { _buckets[index].clear(); } } -inline BasicHashtable::BasicHashtable(int table_size, int entry_size, - HashtableBucket* buckets, +template inline BasicHashtable::BasicHashtable(int table_size, int entry_size, + HashtableBucket* buckets, int number_of_entries) { // Called on startup, no locking needed initialize(table_size, entry_size, number_of_entries); @@ -74,7 +54,7 @@ inline BasicHashtable::BasicHashtable(int table_size, int entry_size, } -inline void BasicHashtable::initialize(int table_size, int entry_size, +template inline void BasicHashtable::initialize(int table_size, int entry_size, int number_of_entries) { // Called on startup, no locking needed _table_size = table_size; @@ -91,12 +71,12 @@ inline void BasicHashtable::initialize(int table_size, int entry_size, // The following method is MT-safe and may be used with caution. -inline BasicHashtableEntry* BasicHashtable::bucket(int i) { +template inline BasicHashtableEntry* BasicHashtable::bucket(int i) { return _buckets[i].get_entry(); } -inline void HashtableBucket::set_entry(BasicHashtableEntry* l) { +template inline void HashtableBucket::set_entry(BasicHashtableEntry* l) { // Warning: Preserve store ordering. The SystemDictionary is read // without locks. The new SystemDictionaryEntry must be // complete before other threads can be allowed to see it @@ -105,27 +85,27 @@ inline void HashtableBucket::set_entry(BasicHashtableEntry* l) { } -inline BasicHashtableEntry* HashtableBucket::get_entry() const { +template inline BasicHashtableEntry* HashtableBucket::get_entry() const { // Warning: Preserve load ordering. The SystemDictionary is read // without locks. The new SystemDictionaryEntry must be // complete before other threads can be allowed to see it // via a store to _buckets[index]. - return (BasicHashtableEntry*) OrderAccess::load_ptr_acquire(&_entry); + return (BasicHashtableEntry*) OrderAccess::load_ptr_acquire(&_entry); } -inline void BasicHashtable::set_entry(int index, BasicHashtableEntry* entry) { +template inline void BasicHashtable::set_entry(int index, BasicHashtableEntry* entry) { _buckets[index].set_entry(entry); } -inline void BasicHashtable::add_entry(int index, BasicHashtableEntry* entry) { +template inline void BasicHashtable::add_entry(int index, BasicHashtableEntry* entry) { entry->set_next(bucket(index)); _buckets[index].set_entry(entry); ++_number_of_entries; } -inline void BasicHashtable::free_entry(BasicHashtableEntry* entry) { +template inline void BasicHashtable::free_entry(BasicHashtableEntry* entry) { entry->set_next(_free_list); _free_list = entry; --_number_of_entries; diff --git a/hotspot/src/share/vm/utilities/histogram.cpp b/hotspot/src/share/vm/utilities/histogram.cpp index ede6817cd40..114d4ac3f41 100644 --- a/hotspot/src/share/vm/utilities/histogram.cpp +++ b/hotspot/src/share/vm/utilities/histogram.cpp @@ -69,7 +69,7 @@ int Histogram::sort_helper(HistogramElement** e1, HistogramElement** e2) { Histogram::Histogram(const char* title,int estimatedCount) { _title = title; - _elements = new (ResourceObj::C_HEAP) GrowableArray(estimatedCount,true); + _elements = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(estimatedCount,true); } void Histogram::add_element(HistogramElement* element) { diff --git a/hotspot/src/share/vm/utilities/histogram.hpp b/hotspot/src/share/vm/utilities/histogram.hpp index 4eaa3d4e21a..5090aa059d4 100644 --- a/hotspot/src/share/vm/utilities/histogram.hpp +++ b/hotspot/src/share/vm/utilities/histogram.hpp @@ -77,7 +77,7 @@ #ifdef ASSERT -class HistogramElement : public CHeapObj { +class HistogramElement : public CHeapObj { protected: jint _count; const char* _name; @@ -91,7 +91,7 @@ class HistogramElement : public CHeapObj { virtual int compare(HistogramElement* e1,HistogramElement* e2); }; -class Histogram : public CHeapObj { +class Histogram : public CHeapObj { protected: GrowableArray* _elements; GrowableArray* elements() { return _elements; } diff --git a/hotspot/src/share/vm/utilities/intHisto.cpp b/hotspot/src/share/vm/utilities/intHisto.cpp index 8476c294d5c..a8508c93458 100644 --- a/hotspot/src/share/vm/utilities/intHisto.cpp +++ b/hotspot/src/share/vm/utilities/intHisto.cpp @@ -27,7 +27,7 @@ IntHistogram::IntHistogram(int est, int max) : _max(max), _tot(0) { assert(0 <= est && est <= max, "Preconditions"); - _elements = new (ResourceObj::C_HEAP) GrowableArray(est, true); + _elements = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(est, true); guarantee(_elements != NULL, "alloc failure"); } diff --git a/hotspot/src/share/vm/utilities/intHisto.hpp b/hotspot/src/share/vm/utilities/intHisto.hpp index 7c2f4ea2d0d..2d5d2834e4d 100644 --- a/hotspot/src/share/vm/utilities/intHisto.hpp +++ b/hotspot/src/share/vm/utilities/intHisto.hpp @@ -47,7 +47,7 @@ // relation) to a count. -class IntHistogram : public CHeapObj { +class IntHistogram : public CHeapObj { protected: int _max; int _tot; diff --git a/hotspot/src/share/vm/utilities/numberSeq.cpp b/hotspot/src/share/vm/utilities/numberSeq.cpp index a2ebc40f180..907c3a15c5e 100644 --- a/hotspot/src/share/vm/utilities/numberSeq.cpp +++ b/hotspot/src/share/vm/utilities/numberSeq.cpp @@ -133,13 +133,13 @@ void NumberSeq::add(double val) { TruncatedSeq::TruncatedSeq(int length, double alpha): AbsSeq(alpha), _length(length), _next(0) { - _sequence = NEW_C_HEAP_ARRAY(double, _length); + _sequence = NEW_C_HEAP_ARRAY(double, _length, mtInternal); for (int i = 0; i < _length; ++i) _sequence[i] = 0.0; } TruncatedSeq::~TruncatedSeq() { - FREE_C_HEAP_ARRAY(double, _sequence); + FREE_C_HEAP_ARRAY(double, _sequence, mtGC); } void TruncatedSeq::add(double val) { diff --git a/hotspot/src/share/vm/utilities/numberSeq.hpp b/hotspot/src/share/vm/utilities/numberSeq.hpp index 3f42a52dc72..f8f2bc1ff63 100644 --- a/hotspot/src/share/vm/utilities/numberSeq.hpp +++ b/hotspot/src/share/vm/utilities/numberSeq.hpp @@ -25,6 +25,8 @@ #ifndef SHARE_VM_UTILITIES_NUMBERSEQ_HPP #define SHARE_VM_UTILITIES_NUMBERSEQ_HPP +#include "memory/allocation.hpp" + /** ** This file contains a few classes that represent number sequence, ** x1, x2, x3, ..., xN, and can calculate their avg, max, and sd. @@ -40,7 +42,7 @@ #define DEFAULT_ALPHA_VALUE 0.7 -class AbsSeq { +class AbsSeq: public CHeapObj { private: void init(double alpha); diff --git a/hotspot/src/share/vm/utilities/ostream.cpp b/hotspot/src/share/vm/utilities/ostream.cpp index 2dc63d0445e..fc1f07eefd2 100644 --- a/hotspot/src/share/vm/utilities/ostream.cpp +++ b/hotspot/src/share/vm/utilities/ostream.cpp @@ -384,7 +384,7 @@ rotatingFileStream::~rotatingFileStream() { if (_file != NULL) { if (_need_close) fclose(_file); _file = NULL; - FREE_C_HEAP_ARRAY(char, _file_name); + FREE_C_HEAP_ARRAY(char, _file_name, mtInternal); _file_name = NULL; } } @@ -392,7 +392,7 @@ rotatingFileStream::~rotatingFileStream() { rotatingFileStream::rotatingFileStream(const char* file_name) { _cur_file_num = 0; _bytes_writen = 0L; - _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10); + _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10, mtInternal); jio_snprintf(_file_name, strlen(file_name)+10, "%s.%d", file_name, _cur_file_num); _file = fopen(_file_name, "w"); _need_close = true; @@ -401,7 +401,7 @@ rotatingFileStream::rotatingFileStream(const char* file_name) { rotatingFileStream::rotatingFileStream(const char* file_name, const char* opentype) { _cur_file_num = 0; _bytes_writen = 0L; - _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10); + _file_name = NEW_C_HEAP_ARRAY(char, strlen(file_name)+10, mtInternal); jio_snprintf(_file_name, strlen(file_name)+10, "%s.%d", file_name, _cur_file_num); _file = fopen(_file_name, opentype); _need_close = true; @@ -524,7 +524,7 @@ static const char* make_log_name(const char* log_name, const char* force_directo } // Create big enough buffer. - char *buf = NEW_C_HEAP_ARRAY(char, buffer_length); + char *buf = NEW_C_HEAP_ARRAY(char, buffer_length, mtInternal); strcpy(buf, ""); if (force_directory != NULL) { @@ -549,7 +549,7 @@ void defaultStream::init_log() { // %%% Need a MutexLocker? const char* log_name = LogFile != NULL ? LogFile : "hotspot.log"; const char* try_name = make_log_name(log_name, NULL); - fileStream* file = new(ResourceObj::C_HEAP) fileStream(try_name); + fileStream* file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name); if (!file->is_open()) { // Try again to open the file. char warnbuf[O_BUFLEN*2]; @@ -557,18 +557,18 @@ void defaultStream::init_log() { "Warning: Cannot open log file: %s\n", try_name); // Note: This feature is for maintainer use only. No need for L10N. jio_print(warnbuf); - FREE_C_HEAP_ARRAY(char, try_name); + FREE_C_HEAP_ARRAY(char, try_name, mtInternal); try_name = make_log_name("hs_pid%p.log", os::get_temp_directory()); jio_snprintf(warnbuf, sizeof(warnbuf), "Warning: Forcing option -XX:LogFile=%s\n", try_name); jio_print(warnbuf); delete file; - file = new(ResourceObj::C_HEAP) fileStream(try_name); - FREE_C_HEAP_ARRAY(char, try_name); + file = new(ResourceObj::C_HEAP, mtInternal) fileStream(try_name); + FREE_C_HEAP_ARRAY(char, try_name, mtInternal); } if (file->is_open()) { _log_file = file; - xmlStream* xs = new(ResourceObj::C_HEAP) xmlStream(file); + xmlStream* xs = new(ResourceObj::C_HEAP, mtInternal) xmlStream(file); _outer_xmlStream = xs; if (this == tty) xtty = xs; // Write XML header. @@ -815,7 +815,7 @@ void ttyLocker::break_tty_lock_for_safepoint(intx holder) { void ostream_init() { if (defaultStream::instance == NULL) { - defaultStream::instance = new(ResourceObj::C_HEAP) defaultStream(); + defaultStream::instance = new(ResourceObj::C_HEAP, mtInternal) defaultStream(); tty = defaultStream::instance; // We want to ensure that time stamps in GC logs consider time 0 @@ -833,9 +833,9 @@ void ostream_init_log() { gclog_or_tty = tty; // default to tty if (Arguments::gc_log_filename() != NULL) { fileStream * gclog = UseGCLogFileRotation ? - new(ResourceObj::C_HEAP) + new(ResourceObj::C_HEAP, mtInternal) rotatingFileStream(Arguments::gc_log_filename()) : - new(ResourceObj::C_HEAP) + new(ResourceObj::C_HEAP, mtInternal) fileStream(Arguments::gc_log_filename()); if (gclog->is_open()) { // now we update the time stamp of the GC log to be synced up @@ -940,7 +940,7 @@ void staticBufferStream::vprint_cr(const char* format, va_list argptr) { bufferedStream::bufferedStream(size_t initial_size, size_t bufmax) : outputStream() { buffer_length = initial_size; - buffer = NEW_C_HEAP_ARRAY(char, buffer_length); + buffer = NEW_C_HEAP_ARRAY(char, buffer_length, mtInternal); buffer_pos = 0; buffer_fixed = false; buffer_max = bufmax; @@ -971,7 +971,7 @@ void bufferedStream::write(const char* s, size_t len) { if (end < buffer_length * 2) { end = buffer_length * 2; } - buffer = REALLOC_C_HEAP_ARRAY(char, buffer, end); + buffer = REALLOC_C_HEAP_ARRAY(char, buffer, end, mtInternal); buffer_length = end; } } @@ -989,7 +989,7 @@ char* bufferedStream::as_string() { bufferedStream::~bufferedStream() { if (!buffer_fixed) { - FREE_C_HEAP_ARRAY(char, buffer); + FREE_C_HEAP_ARRAY(char, buffer, mtInternal); } } diff --git a/hotspot/src/share/vm/utilities/stack.hpp b/hotspot/src/share/vm/utilities/stack.hpp index eedaa7280d0..1cf85a51ac9 100644 --- a/hotspot/src/share/vm/utilities/stack.hpp +++ b/hotspot/src/share/vm/utilities/stack.hpp @@ -25,6 +25,7 @@ #ifndef SHARE_VM_UTILITIES_STACK_HPP #define SHARE_VM_UTILITIES_STACK_HPP +#include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" // Class Stack (below) grows and shrinks by linking together "segments" which @@ -51,11 +52,11 @@ // implementation in class Stack assumes that alloc() will terminate the process // if the allocation fails. -template class StackIterator; +template class StackIterator; // StackBase holds common data/methods that don't depend on the element type, // factored out to reduce template code duplication. -class StackBase +template class StackBase { public: size_t segment_size() const { return _seg_size; } // Elements per segment. @@ -89,11 +90,11 @@ protected: #define inline #endif // __GNUC__ -template -class Stack: public StackBase +template +class Stack: public StackBase { public: - friend class StackIterator; + friend class StackIterator; // segment_size: number of items per segment // max_cache_size: maxmium number of *segments* to cache @@ -103,15 +104,15 @@ public: size_t max_cache_size = 4, size_t max_size = 0); inline ~Stack() { clear(true); } - inline bool is_empty() const { return _cur_seg == NULL; } - inline bool is_full() const { return _full_seg_size >= max_size(); } + inline bool is_empty() const { return this->_cur_seg == NULL; } + inline bool is_full() const { return this->_full_seg_size >= this->max_size(); } // Performance sensitive code should use is_empty() instead of size() == 0 and // is_full() instead of size() == max_size(). Using a conditional here allows // just one var to be updated when pushing/popping elements instead of two; // _full_seg_size is updated only when pushing/popping segments. inline size_t size() const { - return is_empty() ? 0 : _full_seg_size + _cur_seg_size; + return is_empty() ? 0 : this->_full_seg_size + this->_cur_seg_size; } inline void push(E elem); @@ -161,18 +162,18 @@ private: E* _cache; // Segment cache to avoid ping-ponging. }; -template class ResourceStack: public Stack, public ResourceObj +template class ResourceStack: public Stack, public ResourceObj { public: // If this class becomes widely used, it may make sense to save the Thread // and use it when allocating segments. - ResourceStack(size_t segment_size = Stack::default_segment_size()): - Stack(segment_size, max_uintx) +// ResourceStack(size_t segment_size = Stack::default_segment_size()): + ResourceStack(size_t segment_size): Stack(segment_size, max_uintx) { } // Set the segment pointers to NULL so the parent dtor does not free them; // that must be done by the ResourceMark code. - ~ResourceStack() { Stack::reset(true); } + ~ResourceStack() { Stack::reset(true); } protected: virtual E* alloc(size_t bytes); @@ -182,13 +183,13 @@ private: void clear(bool clear_cache = false); }; -template +template class StackIterator: public StackObj { public: - StackIterator(Stack& stack): _stack(stack) { sync(); } + StackIterator(Stack& stack): _stack(stack) { sync(); } - Stack& stack() const { return _stack; } + Stack& stack() const { return _stack; } bool is_empty() const { return _cur_seg == NULL; } @@ -198,7 +199,7 @@ public: void sync(); // Sync the iterator's state to the stack's current state. private: - Stack& _stack; + Stack& _stack; size_t _cur_seg_size; E* _cur_seg; size_t _full_seg_size; diff --git a/hotspot/src/share/vm/utilities/stack.inline.hpp b/hotspot/src/share/vm/utilities/stack.inline.hpp index bb97fc9a274..f53fd3c2c02 100644 --- a/hotspot/src/share/vm/utilities/stack.inline.hpp +++ b/hotspot/src/share/vm/utilities/stack.inline.hpp @@ -27,7 +27,7 @@ #include "utilities/stack.hpp" -StackBase::StackBase(size_t segment_size, size_t max_cache_size, +template StackBase::StackBase(size_t segment_size, size_t max_cache_size, size_t max_size): _seg_size(segment_size), _max_cache_size(max_cache_size), @@ -36,7 +36,7 @@ StackBase::StackBase(size_t segment_size, size_t max_cache_size, assert(_max_size % _seg_size == 0, "not a multiple"); } -size_t StackBase::adjust_max_size(size_t max_size, size_t seg_size) +template size_t StackBase::adjust_max_size(size_t max_size, size_t seg_size) { assert(seg_size > 0, "cannot be 0"); assert(max_size >= seg_size || max_size == 0, "max_size too small"); @@ -47,54 +47,54 @@ size_t StackBase::adjust_max_size(size_t max_size, size_t seg_size) return (max_size + seg_size - 1) / seg_size * seg_size; } -template -Stack::Stack(size_t segment_size, size_t max_cache_size, size_t max_size): - StackBase(adjust_segment_size(segment_size), max_cache_size, max_size) +template +Stack::Stack(size_t segment_size, size_t max_cache_size, size_t max_size): + StackBase(adjust_segment_size(segment_size), max_cache_size, max_size) { reset(true); } -template -void Stack::push(E item) +template +void Stack::push(E item) { assert(!is_full(), "pushing onto a full stack"); - if (_cur_seg_size == _seg_size) { + if (this->_cur_seg_size == this->_seg_size) { push_segment(); } - _cur_seg[_cur_seg_size] = item; - ++_cur_seg_size; + this->_cur_seg[this->_cur_seg_size] = item; + ++this->_cur_seg_size; } -template -E Stack::pop() +template +E Stack::pop() { assert(!is_empty(), "popping from an empty stack"); - if (_cur_seg_size == 1) { - E tmp = _cur_seg[--_cur_seg_size]; + if (this->_cur_seg_size == 1) { + E tmp = _cur_seg[--this->_cur_seg_size]; pop_segment(); return tmp; } - return _cur_seg[--_cur_seg_size]; + return this->_cur_seg[--this->_cur_seg_size]; } -template -void Stack::clear(bool clear_cache) +template +void Stack::clear(bool clear_cache) { free_segments(_cur_seg); if (clear_cache) free_segments(_cache); reset(clear_cache); } -template -size_t Stack::default_segment_size() +template +size_t Stack::default_segment_size() { // Number of elements that fit in 4K bytes minus the size of two pointers // (link field and malloc header). return (4096 - 2 * sizeof(E*)) / sizeof(E); } -template -size_t Stack::adjust_segment_size(size_t seg_size) +template +size_t Stack::adjust_segment_size(size_t seg_size) { const size_t elem_sz = sizeof(E); const size_t ptr_sz = sizeof(E*); @@ -105,93 +105,93 @@ size_t Stack::adjust_segment_size(size_t seg_size) return seg_size; } -template -size_t Stack::link_offset() const +template +size_t Stack::link_offset() const { - return align_size_up(_seg_size * sizeof(E), sizeof(E*)); + return align_size_up(this->_seg_size * sizeof(E), sizeof(E*)); } -template -size_t Stack::segment_bytes() const +template +size_t Stack::segment_bytes() const { return link_offset() + sizeof(E*); } -template -E** Stack::link_addr(E* seg) const +template +E** Stack::link_addr(E* seg) const { return (E**) ((char*)seg + link_offset()); } -template -E* Stack::get_link(E* seg) const +template +E* Stack::get_link(E* seg) const { return *link_addr(seg); } -template -E* Stack::set_link(E* new_seg, E* old_seg) +template +E* Stack::set_link(E* new_seg, E* old_seg) { *link_addr(new_seg) = old_seg; return new_seg; } -template -E* Stack::alloc(size_t bytes) +template +E* Stack::alloc(size_t bytes) { - return (E*) NEW_C_HEAP_ARRAY(char, bytes); + return (E*) NEW_C_HEAP_ARRAY(char, bytes, F); } -template -void Stack::free(E* addr, size_t bytes) +template +void Stack::free(E* addr, size_t bytes) { - FREE_C_HEAP_ARRAY(char, (char*) addr); + FREE_C_HEAP_ARRAY(char, (char*) addr, F); } -template -void Stack::push_segment() +template +void Stack::push_segment() { - assert(_cur_seg_size == _seg_size, "current segment is not full"); + assert(this->_cur_seg_size == this->_seg_size, "current segment is not full"); E* next; - if (_cache_size > 0) { + if (this->_cache_size > 0) { // Use a cached segment. next = _cache; _cache = get_link(_cache); - --_cache_size; + --this->_cache_size; } else { next = alloc(segment_bytes()); DEBUG_ONLY(zap_segment(next, true);) } const bool at_empty_transition = is_empty(); - _cur_seg = set_link(next, _cur_seg); - _cur_seg_size = 0; - _full_seg_size += at_empty_transition ? 0 : _seg_size; + this->_cur_seg = set_link(next, _cur_seg); + this->_cur_seg_size = 0; + this->_full_seg_size += at_empty_transition ? 0 : this->_seg_size; DEBUG_ONLY(verify(at_empty_transition);) } -template -void Stack::pop_segment() +template +void Stack::pop_segment() { - assert(_cur_seg_size == 0, "current segment is not empty"); + assert(this->_cur_seg_size == 0, "current segment is not empty"); E* const prev = get_link(_cur_seg); - if (_cache_size < _max_cache_size) { + if (this->_cache_size < this->_max_cache_size) { // Add the current segment to the cache. DEBUG_ONLY(zap_segment(_cur_seg, false);) _cache = set_link(_cur_seg, _cache); - ++_cache_size; + ++this->_cache_size; } else { DEBUG_ONLY(zap_segment(_cur_seg, true);) free(_cur_seg, segment_bytes()); } const bool at_empty_transition = prev == NULL; - _cur_seg = prev; - _cur_seg_size = _seg_size; - _full_seg_size -= at_empty_transition ? 0 : _seg_size; + this->_cur_seg = prev; + this->_cur_seg_size = this->_seg_size; + this->_full_seg_size -= at_empty_transition ? 0 : this->_seg_size; DEBUG_ONLY(verify(at_empty_transition);) } -template -void Stack::free_segments(E* seg) +template +void Stack::free_segments(E* seg) { const size_t bytes = segment_bytes(); while (seg != NULL) { @@ -201,37 +201,37 @@ void Stack::free_segments(E* seg) } } -template -void Stack::reset(bool reset_cache) +template +void Stack::reset(bool reset_cache) { - _cur_seg_size = _seg_size; // So push() will alloc a new segment. - _full_seg_size = 0; + this->_cur_seg_size = this->_seg_size; // So push() will alloc a new segment. + this->_full_seg_size = 0; _cur_seg = NULL; if (reset_cache) { - _cache_size = 0; + this->_cache_size = 0; _cache = NULL; } } #ifdef ASSERT -template -void Stack::verify(bool at_empty_transition) const +template +void Stack::verify(bool at_empty_transition) const { - assert(size() <= max_size(), "stack exceeded bounds"); - assert(cache_size() <= max_cache_size(), "cache exceeded bounds"); - assert(_cur_seg_size <= segment_size(), "segment index exceeded bounds"); + assert(size() <= this->max_size(), "stack exceeded bounds"); + assert(this->cache_size() <= this->max_cache_size(), "cache exceeded bounds"); + assert(this->_cur_seg_size <= this->segment_size(), "segment index exceeded bounds"); - assert(_full_seg_size % _seg_size == 0, "not a multiple"); + assert(this->_full_seg_size % this->_seg_size == 0, "not a multiple"); assert(at_empty_transition || is_empty() == (size() == 0), "mismatch"); - assert((_cache == NULL) == (cache_size() == 0), "mismatch"); + assert((_cache == NULL) == (this->cache_size() == 0), "mismatch"); if (is_empty()) { - assert(_cur_seg_size == segment_size(), "sanity"); + assert(this->_cur_seg_size == this->segment_size(), "sanity"); } } -template -void Stack::zap_segment(E* seg, bool zap_link_field) const +template +void Stack::zap_segment(E* seg, bool zap_link_field) const { if (!ZapStackSegments) return; const size_t zap_bytes = segment_bytes() - (zap_link_field ? 0 : sizeof(E*)); @@ -243,28 +243,28 @@ void Stack::zap_segment(E* seg, bool zap_link_field) const } #endif -template -E* ResourceStack::alloc(size_t bytes) +template +E* ResourceStack::alloc(size_t bytes) { return (E*) resource_allocate_bytes(bytes); } -template -void ResourceStack::free(E* addr, size_t bytes) +template +void ResourceStack::free(E* addr, size_t bytes) { resource_free_bytes((char*) addr, bytes); } -template -void StackIterator::sync() +template +void StackIterator::sync() { _full_seg_size = _stack._full_seg_size; _cur_seg_size = _stack._cur_seg_size; _cur_seg = _stack._cur_seg; } -template -E* StackIterator::next_addr() +template +E* StackIterator::next_addr() { assert(!is_empty(), "no items left"); if (_cur_seg_size == 1) { diff --git a/hotspot/src/share/vm/utilities/taskqueue.hpp b/hotspot/src/share/vm/utilities/taskqueue.hpp index 545c6dbb5e0..9d67af456ff 100644 --- a/hotspot/src/share/vm/utilities/taskqueue.hpp +++ b/hotspot/src/share/vm/utilities/taskqueue.hpp @@ -132,8 +132,8 @@ void TaskQueueStats::reset() { } #endif // TASKQUEUE_STATS -template -class TaskQueueSuper: public CHeapObj { +template +class TaskQueueSuper: public CHeapObj { protected: // Internal type for indexing the queue; also used for the tag. typedef NOT_LP64(uint16_t) LP64_ONLY(uint32_t) idx_t; @@ -249,22 +249,27 @@ public: TASKQUEUE_STATS_ONLY(TaskQueueStats stats;) }; -template -class GenericTaskQueue: public TaskQueueSuper { -protected: - typedef typename TaskQueueSuper::Age Age; - typedef typename TaskQueueSuper::idx_t idx_t; - using TaskQueueSuper::_bottom; - using TaskQueueSuper::_age; - using TaskQueueSuper::increment_index; - using TaskQueueSuper::decrement_index; - using TaskQueueSuper::dirty_size; + +template +class GenericTaskQueue: public TaskQueueSuper { +protected: + typedef typename TaskQueueSuper::Age Age; + typedef typename TaskQueueSuper::idx_t idx_t; + + using TaskQueueSuper::_bottom; + using TaskQueueSuper::_age; + using TaskQueueSuper::increment_index; + using TaskQueueSuper::decrement_index; + using TaskQueueSuper::dirty_size; public: - using TaskQueueSuper::max_elems; - using TaskQueueSuper::size; - TASKQUEUE_STATS_ONLY(using TaskQueueSuper::stats;) + using TaskQueueSuper::max_elems; + using TaskQueueSuper::size; + +#if TASKQUEUE_STATS + using TaskQueueSuper::stats; +#endif private: // Slow paths for push, pop_local. (pop_global has no fast path.) @@ -302,18 +307,18 @@ private: volatile E* _elems; }; -template -GenericTaskQueue::GenericTaskQueue() { +template +GenericTaskQueue::GenericTaskQueue() { assert(sizeof(Age) == sizeof(size_t), "Depends on this."); } -template -void GenericTaskQueue::initialize() { - _elems = NEW_C_HEAP_ARRAY(E, N); +template +void GenericTaskQueue::initialize() { + _elems = NEW_C_HEAP_ARRAY(E, N, F); } -template -void GenericTaskQueue::oops_do(OopClosure* f) { +template +void GenericTaskQueue::oops_do(OopClosure* f) { // tty->print_cr("START OopTaskQueue::oops_do"); uint iters = size(); uint index = _bottom; @@ -329,8 +334,8 @@ void GenericTaskQueue::oops_do(OopClosure* f) { // tty->print_cr("END OopTaskQueue::oops_do"); } -template -bool GenericTaskQueue::push_slow(E t, uint dirty_n_elems) { +template +bool GenericTaskQueue::push_slow(E t, uint dirty_n_elems) { if (dirty_n_elems == N - 1) { // Actually means 0, so do the push. uint localBot = _bottom; @@ -349,8 +354,8 @@ bool GenericTaskQueue::push_slow(E t, uint dirty_n_elems) { // whenever the queue goes empty which it will do here if this thread // gets the last task or in pop_global() if the queue wraps (top == 0 // and pop_global() succeeds, see pop_global()). -template -bool GenericTaskQueue::pop_local_slow(uint localBot, Age oldAge) { +template +bool GenericTaskQueue::pop_local_slow(uint localBot, Age oldAge) { // This queue was observed to contain exactly one element; either this // thread will claim it, or a competing "pop_global". In either case, // the queue will be logically empty afterwards. Create a new Age value @@ -382,8 +387,8 @@ bool GenericTaskQueue::pop_local_slow(uint localBot, Age oldAge) { return false; } -template -bool GenericTaskQueue::pop_global(E& t) { +template +bool GenericTaskQueue::pop_global(E& t) { Age oldAge = _age.get(); uint localBot = _bottom; uint n_elems = size(localBot, oldAge.top()); @@ -402,9 +407,9 @@ bool GenericTaskQueue::pop_global(E& t) { return resAge == oldAge; } -template -GenericTaskQueue::~GenericTaskQueue() { - FREE_C_HEAP_ARRAY(E, _elems); +template +GenericTaskQueue::~GenericTaskQueue() { + FREE_C_HEAP_ARRAY(E, _elems, F); } // OverflowTaskQueue is a TaskQueue that also includes an overflow stack for @@ -418,12 +423,12 @@ GenericTaskQueue::~GenericTaskQueue() { // Note that size() is not hidden--it returns the number of elements in the // TaskQueue, and does not include the size of the overflow stack. This // simplifies replacement of GenericTaskQueues with OverflowTaskQueues. -template -class OverflowTaskQueue: public GenericTaskQueue +template +class OverflowTaskQueue: public GenericTaskQueue { public: - typedef Stack overflow_t; - typedef GenericTaskQueue taskqueue_t; + typedef Stack overflow_t; + typedef GenericTaskQueue taskqueue_t; TASKQUEUE_STATS_ONLY(using taskqueue_t::stats;) @@ -445,8 +450,8 @@ private: overflow_t _overflow_stack; }; -template -bool OverflowTaskQueue::push(E t) +template +bool OverflowTaskQueue::push(E t) { if (!taskqueue_t::push(t)) { overflow_stack()->push(t); @@ -455,15 +460,15 @@ bool OverflowTaskQueue::push(E t) return true; } -template -bool OverflowTaskQueue::pop_overflow(E& t) +template +bool OverflowTaskQueue::pop_overflow(E& t) { if (overflow_empty()) return false; t = overflow_stack()->pop(); return true; } -class TaskQueueSetSuper: public CHeapObj { +class TaskQueueSetSuper { protected: static int randomParkAndMiller(int* seed0); public: @@ -471,8 +476,11 @@ public: virtual bool peek() = 0; }; -template -class GenericTaskQueueSet: public TaskQueueSetSuper { +template class TaskQueueSetSuperImpl: public CHeapObj, public TaskQueueSetSuper { +}; + +template +class GenericTaskQueueSet: public TaskQueueSetSuperImpl { private: uint _n; T** _queues; @@ -482,7 +490,7 @@ public: GenericTaskQueueSet(int n) : _n(n) { typedef T* GenericTaskQueuePtr; - _queues = NEW_C_HEAP_ARRAY(GenericTaskQueuePtr, n); + _queues = NEW_C_HEAP_ARRAY(GenericTaskQueuePtr, n, F); for (int i = 0; i < n; i++) { _queues[i] = NULL; } @@ -506,19 +514,19 @@ public: bool peek(); }; -template void -GenericTaskQueueSet::register_queue(uint i, T* q) { +template void +GenericTaskQueueSet::register_queue(uint i, T* q) { assert(i < _n, "index out of range."); _queues[i] = q; } -template T* -GenericTaskQueueSet::queue(uint i) { +template T* +GenericTaskQueueSet::queue(uint i) { return _queues[i]; } -template bool -GenericTaskQueueSet::steal(uint queue_num, int* seed, E& t) { +template bool +GenericTaskQueueSet::steal(uint queue_num, int* seed, E& t) { for (uint i = 0; i < 2 * _n; i++) { if (steal_best_of_2(queue_num, seed, t)) { TASKQUEUE_STATS_ONLY(queue(queue_num)->stats.record_steal(true)); @@ -529,8 +537,8 @@ GenericTaskQueueSet::steal(uint queue_num, int* seed, E& t) { return false; } -template bool -GenericTaskQueueSet::steal_best_of_all(uint queue_num, int* seed, E& t) { +template bool +GenericTaskQueueSet::steal_best_of_all(uint queue_num, int* seed, E& t) { if (_n > 2) { int best_k; uint best_sz = 0; @@ -553,11 +561,11 @@ GenericTaskQueueSet::steal_best_of_all(uint queue_num, int* seed, E& t) { } } -template bool -GenericTaskQueueSet::steal_1_random(uint queue_num, int* seed, E& t) { +template bool +GenericTaskQueueSet::steal_1_random(uint queue_num, int* seed, E& t) { if (_n > 2) { uint k = queue_num; - while (k == queue_num) k = randomParkAndMiller(seed) % _n; + while (k == queue_num) k = TaskQueueSetSuper::randomParkAndMiller(seed) % _n; return _queues[2]->pop_global(t); } else if (_n == 2) { // Just try the other one. @@ -569,13 +577,13 @@ GenericTaskQueueSet::steal_1_random(uint queue_num, int* seed, E& t) { } } -template bool -GenericTaskQueueSet::steal_best_of_2(uint queue_num, int* seed, E& t) { +template bool +GenericTaskQueueSet::steal_best_of_2(uint queue_num, int* seed, E& t) { if (_n > 2) { uint k1 = queue_num; - while (k1 == queue_num) k1 = randomParkAndMiller(seed) % _n; + while (k1 == queue_num) k1 = TaskQueueSetSuper::randomParkAndMiller(seed) % _n; uint k2 = queue_num; - while (k2 == queue_num || k2 == k1) k2 = randomParkAndMiller(seed) % _n; + while (k2 == queue_num || k2 == k1) k2 = TaskQueueSetSuper::randomParkAndMiller(seed) % _n; // Sample both and try the larger. uint sz1 = _queues[k1]->size(); uint sz2 = _queues[k2]->size(); @@ -591,8 +599,8 @@ GenericTaskQueueSet::steal_best_of_2(uint queue_num, int* seed, E& t) { } } -template -bool GenericTaskQueueSet::peek() { +template +bool GenericTaskQueueSet::peek() { // Try all the queues. for (uint j = 0; j < _n; j++) { if (_queues[j]->peek()) @@ -602,7 +610,7 @@ bool GenericTaskQueueSet::peek() { } // When to terminate from the termination protocol. -class TerminatorTerminator: public CHeapObj { +class TerminatorTerminator: public CHeapObj { public: virtual bool should_exit_termination() = 0; }; @@ -665,8 +673,8 @@ public: #endif }; -template inline bool -GenericTaskQueue::push(E t) { +template inline bool +GenericTaskQueue::push(E t) { uint localBot = _bottom; assert((localBot >= 0) && (localBot < N), "_bottom out of range."); idx_t top = _age.top(); @@ -683,8 +691,8 @@ GenericTaskQueue::push(E t) { } } -template inline bool -GenericTaskQueue::pop_local(E& t) { +template inline bool +GenericTaskQueue::pop_local(E& t) { uint localBot = _bottom; // This value cannot be N-1. That can only occur as a result of // the assignment to bottom in this method. If it does, this method @@ -715,8 +723,8 @@ GenericTaskQueue::pop_local(E& t) { } } -typedef GenericTaskQueue OopTaskQueue; -typedef GenericTaskQueueSet OopTaskQueueSet; +typedef GenericTaskQueue OopTaskQueue; +typedef GenericTaskQueueSet OopTaskQueueSet; #ifdef _MSC_VER #pragma warning(push) @@ -796,11 +804,11 @@ private: #pragma warning(pop) #endif -typedef OverflowTaskQueue OopStarTaskQueue; -typedef GenericTaskQueueSet OopStarTaskQueueSet; +typedef OverflowTaskQueue OopStarTaskQueue; +typedef GenericTaskQueueSet OopStarTaskQueueSet; -typedef OverflowTaskQueue RegionTaskQueue; -typedef GenericTaskQueueSet RegionTaskQueueSet; +typedef OverflowTaskQueue RegionTaskQueue; +typedef GenericTaskQueueSet RegionTaskQueueSet; #endif // SHARE_VM_UTILITIES_TASKQUEUE_HPP diff --git a/hotspot/src/share/vm/utilities/vmError.cpp b/hotspot/src/share/vm/utilities/vmError.cpp index e450676fa7a..175848b79de 100644 --- a/hotspot/src/share/vm/utilities/vmError.cpp +++ b/hotspot/src/share/vm/utilities/vmError.cpp @@ -33,6 +33,7 @@ #include "runtime/thread.hpp" #include "runtime/vmThread.hpp" #include "runtime/vm_operations.hpp" +#include "services/memTracker.hpp" #include "utilities/debug.hpp" #include "utilities/decoder.hpp" #include "utilities/defaultStream.hpp" @@ -450,7 +451,9 @@ void VMError::report(outputStream* st) { // VM version st->print_cr("#"); JDK_Version::current().to_string(buf, sizeof(buf)); - st->print_cr("# JRE version: %s", buf); + const char* runtime_name = JDK_Version::runtime_name() != NULL ? + JDK_Version::runtime_name() : ""; + st->print_cr("# JRE version: %s (%s)", runtime_name, buf); st->print_cr("# Java VM: %s (%s %s %s %s)", Abstract_VM_Version::vm_name(), Abstract_VM_Version::vm_release(), @@ -818,6 +821,9 @@ void VMError::report_and_die() { static bool transmit_report_done = false; // done error reporting static fdStream log; // error log + // disble NMT to avoid further exception + MemTracker::shutdown(MemTracker::NMT_error_reporting); + if (SuppressFatalErrorMessage) { os::abort(); } diff --git a/hotspot/src/share/vm/utilities/workgroup.cpp b/hotspot/src/share/vm/utilities/workgroup.cpp index 0ef1f833d04..4952058b484 100644 --- a/hotspot/src/share/vm/utilities/workgroup.cpp +++ b/hotspot/src/share/vm/utilities/workgroup.cpp @@ -77,7 +77,7 @@ bool WorkGang::initialize_workers() { name(), total_workers()); } - _gang_workers = NEW_C_HEAP_ARRAY(GangWorker*, total_workers()); + _gang_workers = NEW_C_HEAP_ARRAY(GangWorker*, total_workers(), mtInternal); if (gang_workers() == NULL) { vm_exit_out_of_memory(0, "Cannot create GangWorker array."); return false; @@ -241,6 +241,7 @@ void GangWorker::run() { void GangWorker::initialize() { this->initialize_thread_local_storage(); + this->record_stack_base_and_size(); assert(_gang != NULL, "No gang to run in"); os::set_priority(this, NearMaxPriority); if (TraceWorkGang) { @@ -421,7 +422,7 @@ void WorkGangBarrierSync::enter() { SubTasksDone::SubTasksDone(uint n) : _n_tasks(n), _n_threads(1), _tasks(NULL) { - _tasks = NEW_C_HEAP_ARRAY(uint, n); + _tasks = NEW_C_HEAP_ARRAY(uint, n, mtInternal); guarantee(_tasks != NULL, "alloc failure"); clear(); } @@ -476,7 +477,7 @@ void SubTasksDone::all_tasks_completed() { SubTasksDone::~SubTasksDone() { - if (_tasks != NULL) FREE_C_HEAP_ARRAY(jint, _tasks); + if (_tasks != NULL) FREE_C_HEAP_ARRAY(jint, _tasks, mtInternal); } // *** SequentialSubTasksDone diff --git a/hotspot/src/share/vm/utilities/workgroup.hpp b/hotspot/src/share/vm/utilities/workgroup.hpp index 7fc0ddf5674..9bd34e6bc82 100644 --- a/hotspot/src/share/vm/utilities/workgroup.hpp +++ b/hotspot/src/share/vm/utilities/workgroup.hpp @@ -123,7 +123,7 @@ class AbstractGangTaskWOopQueues : public AbstractGangTask { // Class AbstractWorkGang: // An abstract class representing a gang of workers. // You subclass this to supply an implementation of run_task(). -class AbstractWorkGang: public CHeapObj { +class AbstractWorkGang: public CHeapObj { // Here's the public interface to this class. public: // Constructor and destructor. @@ -402,7 +402,7 @@ public: // subtasks will be identified by integer indices, usually elements of an // enumeration type. -class SubTasksDone : public CHeapObj { +class SubTasksDone: public CHeapObj { uint* _tasks; uint _n_tasks; // _n_threads is used to determine when a sub task is done. diff --git a/hotspot/src/share/vm/utilities/xmlstream.cpp b/hotspot/src/share/vm/utilities/xmlstream.cpp index 8646c309bfb..2753b850cbb 100644 --- a/hotspot/src/share/vm/utilities/xmlstream.cpp +++ b/hotspot/src/share/vm/utilities/xmlstream.cpp @@ -43,7 +43,7 @@ void xmlStream::initialize(outputStream* out) { #ifdef ASSERT _element_depth = 0; int init_len = 100; - char* init_buf = NEW_C_HEAP_ARRAY(char, init_len); + char* init_buf = NEW_C_HEAP_ARRAY(char, init_len, mtInternal); _element_close_stack_low = init_buf; _element_close_stack_high = init_buf + init_len; _element_close_stack_ptr = init_buf + init_len - 1; @@ -58,7 +58,7 @@ void xmlStream::initialize(outputStream* out) { #ifdef ASSERT xmlStream::~xmlStream() { - FREE_C_HEAP_ARRAY(char, _element_close_stack_low); + FREE_C_HEAP_ARRAY(char, _element_close_stack_low, mtInternal); } #endif @@ -155,14 +155,14 @@ void xmlStream::see_tag(const char* tag, bool push) { int old_len = _element_close_stack_high - old_ptr; int new_len = old_len * 2; if (new_len < 100) new_len = 100; - char* new_low = NEW_C_HEAP_ARRAY(char, new_len); + char* new_low = NEW_C_HEAP_ARRAY(char, new_len, mtInternal); char* new_high = new_low + new_len; char* new_ptr = new_high - old_len; memcpy(new_ptr, old_ptr, old_len); _element_close_stack_high = new_high; _element_close_stack_low = new_low; _element_close_stack_ptr = new_ptr; - FREE_C_HEAP_ARRAY(char, old_low); + FREE_C_HEAP_ARRAY(char, old_low, mtInternal); push_ptr = new_ptr - (tag_len+1); } assert(push_ptr >= _element_close_stack_low, "in range"); diff --git a/hotspot/test/compiler/7119644/TestBooleanVect.java b/hotspot/test/compiler/7119644/TestBooleanVect.java new file mode 100644 index 00000000000..d4e3ad68d5f --- /dev/null +++ b/hotspot/test/compiler/7119644/TestBooleanVect.java @@ -0,0 +1,952 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestBooleanVect + */ + +public class TestBooleanVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Boolean vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + boolean[] a1 = new boolean[ARRLEN]; + boolean[] a2 = new boolean[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0); + } + for (int i=ALIGN_OFF; i 0); + errn += verify("test_cp_alndst_overlap: a1", i, a1[i], v); + } + for (int i=0; i 0); + errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], v); + } + for (int i=0; i 0); + } + for (int i=UNALIGN_OFF; i 0); + errn += verify("test_cp_unalndst_overlap: a1", i, a1[i], v); + } + for (int i=0; i 0); + errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], v); + } + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = false; + } + } + static void test_vi_neg(boolean[] a, boolean b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(boolean[] a, boolean[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(boolean[] a, boolean[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = false; + b[i] = false; + } + } + static void test_2vi_neg(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(boolean[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = false; + } + } + static void test_vi_oppos(boolean[] a, boolean b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(boolean[] a, boolean[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(boolean[] a, boolean[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = false; + b[i] = false; + } + } + static void test_2vi_oppos(boolean[] a, boolean[] b, boolean c, boolean d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(boolean[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = false; + } + } + static void test_vi_off(boolean[] a, boolean b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = false; + b[i+OFFSET] = false; + } + } + static void test_2vi_off(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(boolean[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = false; + } + } + static void test_vi_inv(boolean[] a, boolean b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(boolean[] a, boolean[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(boolean[] a, boolean[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = false; + b[i+k] = false; + } + } + static void test_2vi_inv(boolean[] a, boolean[] b, boolean c, boolean d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(boolean[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = false; + } + } + static void test_vi_scl(boolean[] a, boolean b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(boolean[] a, boolean[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(boolean[] a, boolean[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = false; + b[i*SCALE] = false; + } + } + static void test_2vi_scl(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = false; + b[i] = false; + } + } + static void test_2vi_aln(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(boolean[] a, boolean[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = false; + b[i] = false; + } + } + static void test_2vi_unaln(boolean[] a, boolean[] b, boolean c, boolean d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, boolean elem, boolean val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteDoubleVect.java b/hotspot/test/compiler/7119644/TestByteDoubleVect.java new file mode 100644 index 00000000000..acf71bf218b --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteDoubleVect + */ + +public class TestByteDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.; + } + } + static void test_vi_neg(byte[] a, double[] b, byte c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.; + } + } + static void test_vi_oppos(byte[] a, double[] b, byte c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_aln(byte[] a, double[] b, byte c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_unaln(byte[] a, double[] b, byte c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteFloatVect.java b/hotspot/test/compiler/7119644/TestByteFloatVect.java new file mode 100644 index 00000000000..45fe34e9577 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteFloatVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteFloatVect + */ + +public class TestByteFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + float[] b1 = new float[ARRLEN]; + float[] b2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.f; + } + } + static void test_vi_neg(byte[] a, float[] b, byte c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.f; + } + } + static void test_vi_oppos(byte[] a, float[] b, byte c, float d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, float[] c, float[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_aln(byte[] a, float[] b, byte c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_unaln(byte[] a, float[] b, byte c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteIntVect.java b/hotspot/test/compiler/7119644/TestByteIntVect.java new file mode 100644 index 00000000000..8d9aa6a808b --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteIntVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteIntVect + */ + +public class TestByteIntVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Integer vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + int[] b1 = new int[ARRLEN]; + int[] b2 = new int[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(byte[] a, int[] b, byte c, int d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, int[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(byte[] a, int[] b, byte c, int d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, int[] c, int[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(byte[] a, int[] b, byte c, int d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(byte[] a, int[] b, byte c, int d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteLongVect.java b/hotspot/test/compiler/7119644/TestByteLongVect.java new file mode 100644 index 00000000000..c2d439057d9 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteLongVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteLongVect + */ + +public class TestByteLongVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Long vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + long[] b1 = new long[ARRLEN]; + long[] b2 = new long[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(byte[] a, long[] b, byte c, long d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(byte[] a, long[] b, byte c, long d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, long[] c, long[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(byte[] a, long[] b, byte c, long d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(byte[] a, long[] b, byte c, long d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteShortVect.java b/hotspot/test/compiler/7119644/TestByteShortVect.java new file mode 100644 index 00000000000..ee1a206c1f2 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteShortVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteShortVect + */ + +public class TestByteShortVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte + Short vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + short[] b1 = new short[ARRLEN]; + short[] b2 = new short[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(byte[] a, short[] b, byte c, short d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(byte[] a, short[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(byte[] a, short[] b, byte c, short d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(byte[] a, byte[] b, short[] c, short[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(byte[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(byte[] a, short[] b, byte c, short d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(byte[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(byte[] a, short[] b, byte c, short d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestByteVect.java b/hotspot/test/compiler/7119644/TestByteVect.java new file mode 100644 index 00000000000..6167678acf9 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestByteVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestByteVect + */ + +public class TestByteVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Byte vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + byte[] a1 = new byte[ARRLEN]; + byte[] a2 = new byte[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + } + } + static void test_vi_neg(byte[] a, byte b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(byte[] a, byte[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(byte[] a, byte[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_2vi_neg(byte[] a, byte[] b, byte c, byte d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(byte[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + } + } + static void test_vi_oppos(byte[] a, byte b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(byte[] a, byte[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(byte[] a, byte[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_2vi_oppos(byte[] a, byte[] b, byte c, byte d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(byte[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + } + } + static void test_vi_off(byte[] a, byte b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(byte[] a, byte[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(byte[] a, byte[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + b[i+OFFSET] = -103; + } + } + static void test_2vi_off(byte[] a, byte[] b, byte c, byte d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(byte[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + } + } + static void test_vi_inv(byte[] a, byte b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(byte[] a, byte[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(byte[] a, byte[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + b[i+k] = -103; + } + } + static void test_2vi_inv(byte[] a, byte[] b, byte c, byte d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(byte[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + } + } + static void test_vi_scl(byte[] a, byte b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(byte[] a, byte[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(byte[] a, byte[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + b[i*SCALE] = -103; + } + } + static void test_2vi_scl(byte[] a, byte[] b, byte c, byte d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(byte[] a, byte[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(byte[] a, byte[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(byte[] a, byte[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_aln(byte[] a, byte[] b, byte c, byte d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(byte[] a, byte[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(byte[] a, byte[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(byte[] a, byte[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_unaln(byte[] a, byte[] b, byte c, byte d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, byte elem, byte val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestCharShortVect.java b/hotspot/test/compiler/7119644/TestCharShortVect.java new file mode 100644 index 00000000000..55f8e03b772 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestCharShortVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestCharShortVect + */ + +public class TestCharShortVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Char + Short vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + char[] a1 = new char[ARRLEN]; + char[] a2 = new char[ARRLEN]; + short[] b1 = new short[ARRLEN]; + short[] b2 = new short[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = (char)-123; + b[i] = (short)-103; + } + } + static void test_vi_neg(char[] a, short[] b, char c, short d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(char[] a, char[] b, short[] c, short[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(char[] a, short[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = (char)-123; + b[i] = (short)-103; + } + } + static void test_vi_oppos(char[] a, short[] b, char c, short d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(char[] a, char[] b, short[] c, short[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(char[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = (char)-123; + b[i] = (short)-103; + } + } + static void test_vi_aln(char[] a, short[] b, char c, short d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(char[] a, char[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(char[] a, char[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(char[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = (char)-123; + b[i] = (short)-103; + } + } + static void test_vi_unaln(char[] a, short[] b, char c, short d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(char[] a, char[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(char[] a, char[] b, short[] c, short[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, char elem, char val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestCharVect.java b/hotspot/test/compiler/7119644/TestCharVect.java new file mode 100644 index 00000000000..d05ed4d1ccd --- /dev/null +++ b/hotspot/test/compiler/7119644/TestCharVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestCharVect + */ + +public class TestCharVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Char vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + char[] a1 = new char[ARRLEN]; + char[] a2 = new char[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = (char)-123; + } + } + static void test_vi_neg(char[] a, char b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(char[] a, char[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(char[] a, char[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = (char)-123; + b[i] = (char)-103; + } + } + static void test_2vi_neg(char[] a, char[] b, char c, char d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(char[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = (char)-123; + } + } + static void test_vi_oppos(char[] a, char b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(char[] a, char[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(char[] a, char[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = (char)-123; + b[i] = (char)-103; + } + } + static void test_2vi_oppos(char[] a, char[] b, char c, char d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(char[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = (char)-123; + } + } + static void test_vi_off(char[] a, char b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(char[] a, char[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(char[] a, char[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = (char)-123; + b[i+OFFSET] = (char)-103; + } + } + static void test_2vi_off(char[] a, char[] b, char c, char d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(char[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = (char)-123; + } + } + static void test_vi_inv(char[] a, char b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(char[] a, char[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(char[] a, char[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = (char)-123; + b[i+k] = (char)-103; + } + } + static void test_2vi_inv(char[] a, char[] b, char c, char d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(char[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = (char)-123; + } + } + static void test_vi_scl(char[] a, char b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(char[] a, char[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(char[] a, char[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = (char)-123; + b[i*SCALE] = (char)-103; + } + } + static void test_2vi_scl(char[] a, char[] b, char c, char d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(char[] a, char[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(char[] a, char[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(char[] a, char[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = (char)-123; + b[i] = (char)-103; + } + } + static void test_2vi_aln(char[] a, char[] b, char c, char d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(char[] a, char[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(char[] a, char[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(char[] a, char[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = (char)-123; + b[i] = (char)-103; + } + } + static void test_2vi_unaln(char[] a, char[] b, char c, char d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, char elem, char val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestDoubleVect.java b/hotspot/test/compiler/7119644/TestDoubleVect.java new file mode 100644 index 00000000000..385a64d5a2f --- /dev/null +++ b/hotspot/test/compiler/7119644/TestDoubleVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestDoubleVect + */ + +public class TestDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + double[] a1 = new double[ARRLEN]; + double[] a2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123.; + } + } + static void test_vi_neg(double[] a, double b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(double[] a, double[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(double[] a, double[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123.; + b[i] = -103.; + } + } + static void test_2vi_neg(double[] a, double[] b, double c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(double[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.; + } + } + static void test_vi_oppos(double[] a, double b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(double[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(double[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.; + b[i] = -103.; + } + } + static void test_2vi_oppos(double[] a, double[] b, double c, double d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(double[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123.; + } + } + static void test_vi_off(double[] a, double b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(double[] a, double[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(double[] a, double[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123.; + b[i+OFFSET] = -103.; + } + } + static void test_2vi_off(double[] a, double[] b, double c, double d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(double[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123.; + } + } + static void test_vi_inv(double[] a, double b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(double[] a, double[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(double[] a, double[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123.; + b[i+k] = -103.; + } + } + static void test_2vi_inv(double[] a, double[] b, double c, double d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(double[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123.; + } + } + static void test_vi_scl(double[] a, double b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(double[] a, double[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(double[] a, double[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123.; + b[i*SCALE] = -103.; + } + } + static void test_2vi_scl(double[] a, double[] b, double c, double d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(double[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(double[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(double[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123.; + b[i] = -103.; + } + } + static void test_2vi_aln(double[] a, double[] b, double c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(double[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(double[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(double[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123.; + b[i] = -103.; + } + } + static void test_2vi_unaln(double[] a, double[] b, double c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestFloatDoubleVect.java b/hotspot/test/compiler/7119644/TestFloatDoubleVect.java new file mode 100644 index 00000000000..827ecdb4615 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestFloatDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestFloatDoubleVect + */ + +public class TestFloatDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Float + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + float[] a1 = new float[ARRLEN]; + float[] a2 = new float[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123.f; + b[i] = -103.; + } + } + static void test_vi_neg(float[] a, double[] b, float c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(float[] a, float[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(float[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.f; + b[i] = -103.; + } + } + static void test_vi_oppos(float[] a, double[] b, float c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(float[] a, float[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(float[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123.f; + b[i] = -103.; + } + } + static void test_vi_aln(float[] a, double[] b, float c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(float[] a, float[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(float[] a, float[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(float[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123.f; + b[i] = -103.; + } + } + static void test_vi_unaln(float[] a, double[] b, float c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(float[] a, float[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(float[] a, float[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestFloatVect.java b/hotspot/test/compiler/7119644/TestFloatVect.java new file mode 100644 index 00000000000..825fffed64c --- /dev/null +++ b/hotspot/test/compiler/7119644/TestFloatVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestFloatVect + */ + +public class TestFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + float[] a1 = new float[ARRLEN]; + float[] a2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123.f; + } + } + static void test_vi_neg(float[] a, float b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(float[] a, float[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(float[] a, float[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123.f; + b[i] = -103.f; + } + } + static void test_2vi_neg(float[] a, float[] b, float c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(float[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.f; + } + } + static void test_vi_oppos(float[] a, float b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(float[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(float[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123.f; + b[i] = -103.f; + } + } + static void test_2vi_oppos(float[] a, float[] b, float c, float d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(float[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123.f; + } + } + static void test_vi_off(float[] a, float b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(float[] a, float[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(float[] a, float[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123.f; + b[i+OFFSET] = -103.f; + } + } + static void test_2vi_off(float[] a, float[] b, float c, float d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(float[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123.f; + } + } + static void test_vi_inv(float[] a, float b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(float[] a, float[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(float[] a, float[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123.f; + b[i+k] = -103.f; + } + } + static void test_2vi_inv(float[] a, float[] b, float c, float d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(float[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123.f; + } + } + static void test_vi_scl(float[] a, float b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(float[] a, float[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(float[] a, float[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123.f; + b[i*SCALE] = -103.f; + } + } + static void test_2vi_scl(float[] a, float[] b, float c, float d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(float[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(float[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(float[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123.f; + b[i] = -103.f; + } + } + static void test_2vi_aln(float[] a, float[] b, float c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(float[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(float[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(float[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123.f; + b[i] = -103.f; + } + } + static void test_2vi_unaln(float[] a, float[] b, float c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestIntDoubleVect.java b/hotspot/test/compiler/7119644/TestIntDoubleVect.java new file mode 100644 index 00000000000..fc6e32dce05 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestIntDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntDoubleVect + */ + +public class TestIntDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Integer + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + int[] a1 = new int[ARRLEN]; + int[] a2 = new int[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.; + } + } + static void test_vi_neg(int[] a, double[] b, int c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(int[] a, int[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(int[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.; + } + } + static void test_vi_oppos(int[] a, double[] b, int c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(int[] a, int[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(int[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_aln(int[] a, double[] b, int c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(int[] a, int[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(int[] a, int[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(int[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_unaln(int[] a, double[] b, int c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(int[] a, int[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(int[] a, int[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestIntFloatVect.java b/hotspot/test/compiler/7119644/TestIntFloatVect.java new file mode 100644 index 00000000000..e698c890d69 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestIntFloatVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntFloatVect + */ + +public class TestIntFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Integer + Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + int[] a1 = new int[ARRLEN]; + int[] a2 = new int[ARRLEN]; + float[] b1 = new float[ARRLEN]; + float[] b2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.f; + } + } + static void test_vi_neg(int[] a, float[] b, int c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(int[] a, int[] b, float[] c, float[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(int[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.f; + } + } + static void test_vi_oppos(int[] a, float[] b, int c, float d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(int[] a, int[] b, float[] c, float[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(int[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_aln(int[] a, float[] b, int c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(int[] a, int[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(int[] a, int[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(int[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_unaln(int[] a, float[] b, int c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(int[] a, int[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(int[] a, int[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestIntLongVect.java b/hotspot/test/compiler/7119644/TestIntLongVect.java new file mode 100644 index 00000000000..def0d9b1bc2 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestIntLongVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntLongVect + */ + +public class TestIntLongVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Integer + Long vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + int[] a1 = new int[ARRLEN]; + int[] a2 = new int[ARRLEN]; + long[] b1 = new long[ARRLEN]; + long[] b2 = new long[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(int[] a, long[] b, int c, long d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(int[] a, int[] b, long[] c, long[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(int[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(int[] a, long[] b, int c, long d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(int[] a, int[] b, long[] c, long[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(int[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(int[] a, long[] b, int c, long d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(int[] a, int[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(int[] a, int[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(int[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(int[] a, long[] b, int c, long d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(int[] a, int[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(int[] a, int[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestIntVect.java b/hotspot/test/compiler/7119644/TestIntVect.java new file mode 100644 index 00000000000..9d3f4e53920 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestIntVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntVect + */ + +public class TestIntVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Integer vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + int[] a1 = new int[ARRLEN]; + int[] a2 = new int[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + } + } + static void test_vi_neg(int[] a, int b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(int[] a, int[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(int[] a, int[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_2vi_neg(int[] a, int[] b, int c, int d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(int[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + } + } + static void test_vi_oppos(int[] a, int b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(int[] a, int[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(int[] a, int[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_2vi_oppos(int[] a, int[] b, int c, int d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(int[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + } + } + static void test_vi_off(int[] a, int b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(int[] a, int[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(int[] a, int[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + b[i+OFFSET] = -103; + } + } + static void test_2vi_off(int[] a, int[] b, int c, int d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(int[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + } + } + static void test_vi_inv(int[] a, int b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(int[] a, int[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(int[] a, int[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + b[i+k] = -103; + } + } + static void test_2vi_inv(int[] a, int[] b, int c, int d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(int[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + } + } + static void test_vi_scl(int[] a, int b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(int[] a, int[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(int[] a, int[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + b[i*SCALE] = -103; + } + } + static void test_2vi_scl(int[] a, int[] b, int c, int d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(int[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(int[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(int[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_aln(int[] a, int[] b, int c, int d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(int[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(int[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(int[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_unaln(int[] a, int[] b, int c, int d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestLongDoubleVect.java b/hotspot/test/compiler/7119644/TestLongDoubleVect.java new file mode 100644 index 00000000000..344e3a980bb --- /dev/null +++ b/hotspot/test/compiler/7119644/TestLongDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestLongDoubleVect + */ + +public class TestLongDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Long + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + long[] a1 = new long[ARRLEN]; + long[] a2 = new long[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.; + } + } + static void test_vi_neg(long[] a, double[] b, long c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(long[] a, long[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(long[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.; + } + } + static void test_vi_oppos(long[] a, double[] b, long c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(long[] a, long[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(long[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_aln(long[] a, double[] b, long c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(long[] a, long[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(long[] a, long[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(long[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_unaln(long[] a, double[] b, long c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(long[] a, long[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(long[] a, long[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestLongFloatVect.java b/hotspot/test/compiler/7119644/TestLongFloatVect.java new file mode 100644 index 00000000000..714f6c83687 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestLongFloatVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestLongFloatVect + */ + +public class TestLongFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Long + Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + long[] a1 = new long[ARRLEN]; + long[] a2 = new long[ARRLEN]; + float[] b1 = new float[ARRLEN]; + float[] b2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.f; + } + } + static void test_vi_neg(long[] a, float[] b, long c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(long[] a, long[] b, float[] c, float[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(long[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.f; + } + } + static void test_vi_oppos(long[] a, float[] b, long c, float d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(long[] a, long[] b, float[] c, float[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(long[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_aln(long[] a, float[] b, long c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(long[] a, long[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(long[] a, long[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(long[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_unaln(long[] a, float[] b, long c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(long[] a, long[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(long[] a, long[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestLongVect.java b/hotspot/test/compiler/7119644/TestLongVect.java new file mode 100644 index 00000000000..6f0365bb5c1 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestLongVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestLongVect + */ + +public class TestLongVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Long vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + long[] a1 = new long[ARRLEN]; + long[] a2 = new long[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + } + } + static void test_vi_neg(long[] a, long b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(long[] a, long[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(long[] a, long[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_2vi_neg(long[] a, long[] b, long c, long d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(long[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + } + } + static void test_vi_oppos(long[] a, long b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(long[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(long[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_2vi_oppos(long[] a, long[] b, long c, long d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(long[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + } + } + static void test_vi_off(long[] a, long b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(long[] a, long[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(long[] a, long[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + b[i+OFFSET] = -103; + } + } + static void test_2vi_off(long[] a, long[] b, long c, long d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(long[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + } + } + static void test_vi_inv(long[] a, long b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(long[] a, long[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(long[] a, long[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + b[i+k] = -103; + } + } + static void test_2vi_inv(long[] a, long[] b, long c, long d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(long[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + } + } + static void test_vi_scl(long[] a, long b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(long[] a, long[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(long[] a, long[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + b[i*SCALE] = -103; + } + } + static void test_2vi_scl(long[] a, long[] b, long c, long d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(long[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(long[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(long[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_aln(long[] a, long[] b, long c, long d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(long[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(long[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(long[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_unaln(long[] a, long[] b, long c, long d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortDoubleVect.java b/hotspot/test/compiler/7119644/TestShortDoubleVect.java new file mode 100644 index 00000000000..c21037e4c87 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortDoubleVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortDoubleVect + */ + +public class TestShortDoubleVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short + Double vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + double[] b1 = new double[ARRLEN]; + double[] b2 = new double[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.; + } + } + static void test_vi_neg(short[] a, double[] b, short c, double d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(short[] a, short[] b, double[] c, double[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(short[] a, double[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.; + } + } + static void test_vi_oppos(short[] a, double[] b, short c, double d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(short[] a, short[] b, double[] c, double[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(short[] a, double[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_aln(short[] a, double[] b, short c, double d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(short[] a, short[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(short[] a, double[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.; + } + } + static void test_vi_unaln(short[] a, double[] b, short c, double d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b, double[] c, double[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, double elem, double val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortFloatVect.java b/hotspot/test/compiler/7119644/TestShortFloatVect.java new file mode 100644 index 00000000000..05b4dddd980 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortFloatVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortFloatVect + */ + +public class TestShortFloatVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short + Float vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + float[] b1 = new float[ARRLEN]; + float[] b2 = new float[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103.f; + } + } + static void test_vi_neg(short[] a, float[] b, short c, float d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(short[] a, short[] b, float[] c, float[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(short[] a, float[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103.f; + } + } + static void test_vi_oppos(short[] a, float[] b, short c, float d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(short[] a, short[] b, float[] c, float[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(short[] a, float[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_aln(short[] a, float[] b, short c, float d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(short[] a, short[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(short[] a, float[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103.f; + } + } + static void test_vi_unaln(short[] a, float[] b, short c, float d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b, float[] c, float[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, float elem, float val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortIntVect.java b/hotspot/test/compiler/7119644/TestShortIntVect.java new file mode 100644 index 00000000000..bf180940856 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortIntVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortIntVect + */ + +public class TestShortIntVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short + Integer vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + int[] b1 = new int[ARRLEN]; + int[] b2 = new int[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(short[] a, int[] b, short c, int d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(short[] a, short[] b, int[] c, int[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(short[] a, int[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(short[] a, int[] b, short c, int d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(short[] a, short[] b, int[] c, int[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(short[] a, int[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(short[] a, int[] b, short c, int d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(short[] a, short[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(short[] a, int[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(short[] a, int[] b, short c, int d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b, int[] c, int[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortLongVect.java b/hotspot/test/compiler/7119644/TestShortLongVect.java new file mode 100644 index 00000000000..d4c121f8716 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortLongVect.java @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortLongVect + */ + +public class TestShortLongVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short + Long vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + long[] b1 = new long[ARRLEN]; + long[] b2 = new long[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_vi_neg(short[] a, long[] b, short c, long d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_cp_neg(short[] a, short[] b, long[] c, long[] d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + c[i] = d[i]; + } + } + static void test_ci_oppos(short[] a, long[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_vi_oppos(short[] a, long[] b, short c, long d) { + int limit = a.length-1; + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_cp_oppos(short[] a, short[] b, long[] c, long[] d) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + c[limit-i] = d[i]; + } + } + static void test_ci_aln(short[] a, long[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_aln(short[] a, long[] b, short c, long d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_alndst(short[] a, short[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + c[i+ALIGN_OFF] = d[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + c[i] = d[i+ALIGN_OFF]; + } + } + static void test_ci_unaln(short[] a, long[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_vi_unaln(short[] a, long[] b, short c, long d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + c[i+UNALIGN_OFF] = d[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b, long[] c, long[] d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + c[i] = d[i+UNALIGN_OFF]; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7119644/TestShortVect.java b/hotspot/test/compiler/7119644/TestShortVect.java new file mode 100644 index 00000000000..d4583832158 --- /dev/null +++ b/hotspot/test/compiler/7119644/TestShortVect.java @@ -0,0 +1,953 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7119644 + * @summary Increase superword's vector size up to 256 bits + * + * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestShortVect + */ + +public class TestShortVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int OFFSET = 3; + private static final int SCALE = 2; + private static final int ALIGN_OFF = 8; + private static final int UNALIGN_OFF = 5; + + public static void main(String args[]) { + System.out.println("Testing Short vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + short[] a1 = new short[ARRLEN]; + short[] a2 = new short[ARRLEN]; + System.out.println("Warmup"); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + start = System.currentTimeMillis(); + for (int i=0; i= 0; i-=1) { + a[i] = -123; + } + } + static void test_vi_neg(short[] a, short b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b; + } + } + static void test_cp_neg(short[] a, short[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = b[i]; + } + } + static void test_2ci_neg(short[] a, short[] b) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = -123; + b[i] = -103; + } + } + static void test_2vi_neg(short[] a, short[] b, short c, short d) { + for (int i = a.length-1; i >= 0; i-=1) { + a[i] = c; + b[i] = d; + } + } + static void test_ci_oppos(short[] a) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + } + } + static void test_vi_oppos(short[] a, short b) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[limit-i] = b; + } + } + static void test_cp_oppos(short[] a, short[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[i] = b[limit-i]; + } + } + static void test_2ci_oppos(short[] a, short[] b) { + int limit = a.length-1; + for (int i = 0; i < a.length; i+=1) { + a[limit-i] = -123; + b[i] = -103; + } + } + static void test_2vi_oppos(short[] a, short[] b, short c, short d) { + int limit = a.length-1; + for (int i = limit; i >= 0; i-=1) { + a[i] = c; + b[limit-i] = d; + } + } + static void test_ci_off(short[] a) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + } + } + static void test_vi_off(short[] a, short b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b; + } + } + static void test_cp_off(short[] a, short[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = b[i+OFFSET]; + } + } + static void test_2ci_off(short[] a, short[] b) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = -123; + b[i+OFFSET] = -103; + } + } + static void test_2vi_off(short[] a, short[] b, short c, short d) { + for (int i = 0; i < a.length-OFFSET; i+=1) { + a[i+OFFSET] = c; + b[i+OFFSET] = d; + } + } + static void test_ci_inv(short[] a, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + } + } + static void test_vi_inv(short[] a, short b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b; + } + } + static void test_cp_inv(short[] a, short[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = b[i+k]; + } + } + static void test_2ci_inv(short[] a, short[] b, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = -123; + b[i+k] = -103; + } + } + static void test_2vi_inv(short[] a, short[] b, short c, short d, int k) { + for (int i = 0; i < a.length-k; i+=1) { + a[i+k] = c; + b[i+k] = d; + } + } + static void test_ci_scl(short[] a) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + } + } + static void test_vi_scl(short[] a, short b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b; + } + } + static void test_cp_scl(short[] a, short[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = b[i*SCALE]; + } + } + static void test_2ci_scl(short[] a, short[] b) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = -123; + b[i*SCALE] = -103; + } + } + static void test_2vi_scl(short[] a, short[] b, short c, short d) { + for (int i = 0; i*SCALE < a.length; i+=1) { + a[i*SCALE] = c; + b[i*SCALE] = d; + } + } + static void test_cp_alndst(short[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = b[i]; + } + } + static void test_cp_alnsrc(short[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = b[i+ALIGN_OFF]; + } + } + static void test_2ci_aln(short[] a, short[] b) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i+ALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_aln(short[] a, short[] b, short c, short d) { + for (int i = 0; i < a.length-ALIGN_OFF; i+=1) { + a[i] = c; + b[i+ALIGN_OFF] = d; + } + } + static void test_cp_unalndst(short[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = b[i]; + } + } + static void test_cp_unalnsrc(short[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = b[i+UNALIGN_OFF]; + } + } + static void test_2ci_unaln(short[] a, short[] b) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i+UNALIGN_OFF] = -123; + b[i] = -103; + } + } + static void test_2vi_unaln(short[] a, short[] b, short c, short d) { + for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) { + a[i] = c; + b[i+UNALIGN_OFF] = d; + } + } + + static int verify(String text, int i, short elem, short val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } +} diff --git a/hotspot/test/compiler/7174363/Test7174363.java b/hotspot/test/compiler/7174363/Test7174363.java new file mode 100644 index 00000000000..50f784da1eb --- /dev/null +++ b/hotspot/test/compiler/7174363/Test7174363.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 7174363 + * @summary crash with Arrays.copyOfRange(original, from, to) when from > original.length + * + * @run main/othervm -XX:-BackgroundCompilation Test7174363 + */ + +import java.util.*; + +public class Test7174363 { + + static Object[] m(Object[] original, int from, int to) { + return Arrays.copyOfRange(original, from, to, Object[].class); + } + + static public void main(String[] args) { + Object[] orig = new Object[10]; + for (int i = 0; i < 20000; i++) { + try { + m(orig, 15, 20); + } catch(ArrayIndexOutOfBoundsException excp) {} + } + } +} diff --git a/hotspot/test/compiler/7177917/Test7177917.java b/hotspot/test/compiler/7177917/Test7177917.java new file mode 100644 index 00000000000..7d2c76490a9 --- /dev/null +++ b/hotspot/test/compiler/7177917/Test7177917.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/* + * Micro-benchmark for Math.pow() and Math.exp() + */ + +import java.util.*; + +public class Test7177917 { + + static double d; + + static Random r = new Random(0); + + static long m_pow(double[][] values) { + double res = 0; + long start = System.nanoTime(); + for (int i = 0; i < values.length; i++) { + res += Math.pow(values[i][0], values[i][1]); + } + long stop = System.nanoTime(); + d = res; + return (stop - start) / 1000; + } + + static long m_exp(double[] values) { + double res = 0; + long start = System.nanoTime(); + for (int i = 0; i < values.length; i++) { + res += Math.exp(values[i]); + } + long stop = System.nanoTime(); + d = res; + return (stop - start) / 1000; + } + + static double[][] pow_values(int nb) { + double[][] res = new double[nb][2]; + for (int i = 0; i < nb; i++) { + double ylogx = (1 + (r.nextDouble() * 2045)) - 1023; // 2045 rather than 2046 as a safety margin + double x = Math.abs(Double.longBitsToDouble(r.nextLong())); + while (x != x) { + x = Math.abs(Double.longBitsToDouble(r.nextLong())); + } + double logx = Math.log(x) / Math.log(2); + double y = ylogx / logx; + + res[i][0] = x; + res[i][1] = y; + } + return res; + } + + static double[] exp_values(int nb) { + double[] res = new double[nb]; + for (int i = 0; i < nb; i++) { + double ylogx = (1 + (r.nextDouble() * 2045)) - 1023; // 2045 rather than 2046 as a safety margin + double x = Math.E; + double logx = Math.log(x) / Math.log(2); + double y = ylogx / logx; + res[i] = y; + } + return res; + } + + static public void main(String[] args) { + { + // warmup + double[][] warmup_values = pow_values(10); + m_pow(warmup_values); + + for (int i = 0; i < 20000; i++) { + m_pow(warmup_values); + } + // test pow perf + double[][] values = pow_values(1000000); + System.out.println("==> POW " + m_pow(values)); + + // force uncommon trap + double[][] nan_values = new double[1][2]; + nan_values[0][0] = Double.NaN; + nan_values[0][1] = Double.NaN; + m_pow(nan_values); + + // force recompilation + for (int i = 0; i < 20000; i++) { + m_pow(warmup_values); + } + + // test pow perf again + System.out.println("==> POW " + m_pow(values)); + } + { + // warmup + double[] warmup_values = exp_values(10); + m_exp(warmup_values); + + for (int i = 0; i < 20000; i++) { + m_exp(warmup_values); + } + + // test pow perf + double[] values = exp_values(1000000); + System.out.println("==> EXP " + m_exp(values)); + + // force uncommon trap + double[] nan_values = new double[1]; + nan_values[0] = Double.NaN; + m_exp(nan_values); + + // force recompilation + for (int i = 0; i < 20000; i++) { + m_exp(warmup_values); + } + + // test pow perf again + System.out.println("==> EXP " + m_exp(values)); + } + } +} diff --git a/hotspot/test/compiler/7179138/Test7179138_1.java b/hotspot/test/compiler/7179138/Test7179138_1.java new file mode 100644 index 00000000000..afa830731e3 --- /dev/null +++ b/hotspot/test/compiler/7179138/Test7179138_1.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012 Skip Balk. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7179138 + * @summary Incorrect result with String concatenation optimization + * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation Test7179138_1 + * + * @author Skip Balk + */ + +public class Test7179138_1 { + public static void main(String[] args) throws Exception { + System.out.println("Java Version: " + System.getProperty("java.vm.version")); + long[] durations = new long[60]; + for (int i = 0; i < 100000; i++) { + // this empty for-loop is required to reproduce this bug + for (long duration : durations) { + // do nothing + } + { + String s = "test"; + int len = s.length(); + + s = new StringBuilder(String.valueOf(s)).append(s).toString(); + len = len + len; + + s = new StringBuilder(String.valueOf(s)).append(s).toString(); + len = len + len; + + s = new StringBuilder(String.valueOf(s)).append(s).toString(); + len = len + len; + + if (s.length() != len) { + System.out.println("Failed at iteration: " + i); + System.out.println("Length mismatch: " + s.length() + " <> " + len); + System.out.println("Expected: \"" + "test" + "test" + "test" + "test" + "test" + "test" + "test" + "test" + "\""); + System.out.println("Actual: \"" + s + "\""); + System.exit(97); + } + } + } + } +} + diff --git a/hotspot/test/compiler/7179138/Test7179138_2.java b/hotspot/test/compiler/7179138/Test7179138_2.java new file mode 100644 index 00000000000..615c614fc30 --- /dev/null +++ b/hotspot/test/compiler/7179138/Test7179138_2.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012 Skip Balk. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7179138 + * @summary Incorrect result with String concatenation optimization + * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation Test7179138_2 + * + * @author Skip Balk + */ + +public class Test7179138_2 { + public static void main(String[] args) throws Exception { + System.out.println("Java Version: " + System.getProperty("java.vm.version")); + long[] durations = new long[60]; + for (int i = 0; i < 100000; i++) { + // this empty for-loop is required to reproduce this bug + for (long duration : durations) { + // do nothing + } + { + String s = "test"; + int len = s.length(); + + s = s + s; + len = len + len; + + s = s + s; + len = len + len; + + s = s + s; + len = len + len; + + if (s.length() != len) { + System.out.println("Failed at iteration: " + i); + System.out.println("Length mismatch: " + s.length() + " <> " + len); + System.out.println("Expected: \"" + "test" + "test" + "test" + "test" + "test" + "test" + "test" + "test" + "\""); + System.out.println("Actual: \"" + s + "\""); + System.exit(0); + } + } + } + } +} + diff --git a/hotspot/test/runtime/6294277/SourceDebugExtension.java b/hotspot/test/runtime/6294277/SourceDebugExtension.java new file mode 100644 index 00000000000..e8cc8a8bb50 --- /dev/null +++ b/hotspot/test/runtime/6294277/SourceDebugExtension.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6294277 + * @summary java -Xdebug crashes on SourceDebugExtension attribute larger than 64K + * @run main/othervm -Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n SourceDebugExtension + */ +import java.io.*; + +public class SourceDebugExtension extends ClassLoader +{ + static final int attrSize = 68000; + static byte[] header = { +(byte)0xca, (byte)0xfe, (byte)0xba, (byte)0xbe, (byte)0x00, (byte)0x00, (byte)0x00, +(byte)0x32, (byte)0x00, (byte)0x1e, (byte)0x0a, (byte)0x00, (byte)0x06, (byte)0x00, +(byte)0x0f, (byte)0x09, (byte)0x00, (byte)0x10, (byte)0x00, (byte)0x11, (byte)0x08, +(byte)0x00, (byte)0x12, (byte)0x0a, (byte)0x00, (byte)0x13, (byte)0x00, (byte)0x14, +(byte)0x07, (byte)0x00, (byte)0x15, (byte)0x07, (byte)0x00, (byte)0x16, (byte)0x01, +(byte)0x00, (byte)0x06, (byte)0x3c, (byte)0x69, (byte)0x6e, (byte)0x69, (byte)0x74, +(byte)0x3e, (byte)0x01, (byte)0x00, (byte)0x03, (byte)0x28, (byte)0x29, (byte)0x56, +(byte)0x01, (byte)0x00, (byte)0x04, (byte)0x43, (byte)0x6f, (byte)0x64, (byte)0x65, +(byte)0x01, (byte)0x00, (byte)0x0f, (byte)0x4c, (byte)0x69, (byte)0x6e, (byte)0x65, +(byte)0x4e, (byte)0x75, (byte)0x6d, (byte)0x62, (byte)0x65, (byte)0x72, (byte)0x54, +(byte)0x61, (byte)0x62, (byte)0x6c, (byte)0x65, (byte)0x01, (byte)0x00, (byte)0x04, +(byte)0x6d, (byte)0x61, (byte)0x69, (byte)0x6e, (byte)0x01, (byte)0x00, (byte)0x16, +(byte)0x28, (byte)0x5b, (byte)0x4c, (byte)0x6a, (byte)0x61, (byte)0x76, (byte)0x61, +(byte)0x2f, (byte)0x6c, (byte)0x61, (byte)0x6e, (byte)0x67, (byte)0x2f, (byte)0x53, +(byte)0x74, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x67, (byte)0x3b, (byte)0x29, +(byte)0x56, (byte)0x01, (byte)0x00, (byte)0x0a, (byte)0x53, (byte)0x6f, (byte)0x75, +(byte)0x72, (byte)0x63, (byte)0x65, (byte)0x46, (byte)0x69, (byte)0x6c, (byte)0x65, +(byte)0x01, (byte)0x00, (byte)0x0d, (byte)0x54, (byte)0x65, (byte)0x73, (byte)0x74, +(byte)0x50, (byte)0x72, (byte)0x6f, (byte)0x67, (byte)0x2e, (byte)0x6a, (byte)0x61, +(byte)0x76, (byte)0x61, (byte)0x0c, (byte)0x00, (byte)0x07, (byte)0x00, (byte)0x08, +(byte)0x07, (byte)0x00, (byte)0x17, (byte)0x0c, (byte)0x00, (byte)0x18, (byte)0x00, +(byte)0x19, (byte)0x01, (byte)0x00, (byte)0x34, (byte)0x54, (byte)0x65, (byte)0x73, +(byte)0x74, (byte)0x20, (byte)0x70, (byte)0x72, (byte)0x6f, (byte)0x67, (byte)0x72, +(byte)0x61, (byte)0x6d, (byte)0x20, (byte)0x66, (byte)0x6f, (byte)0x72, (byte)0x20, +(byte)0x62, (byte)0x69, (byte)0x67, (byte)0x20, (byte)0x53, (byte)0x6f, (byte)0x75, +(byte)0x72, (byte)0x63, (byte)0x65, (byte)0x44, (byte)0x65, (byte)0x62, (byte)0x75, +(byte)0x67, (byte)0x45, (byte)0x78, (byte)0x74, (byte)0x65, (byte)0x6e, (byte)0x73, +(byte)0x69, (byte)0x6f, (byte)0x6e, (byte)0x20, (byte)0x61, (byte)0x74, (byte)0x74, +(byte)0x72, (byte)0x69, (byte)0x62, (byte)0x75, (byte)0x74, (byte)0x65, (byte)0x73, +(byte)0x07, (byte)0x00, (byte)0x1a, (byte)0x0c, (byte)0x00, (byte)0x1b, (byte)0x00, +(byte)0x1c, (byte)0x01, (byte)0x00, (byte)0x08, (byte)0x54, (byte)0x65, (byte)0x73, +(byte)0x74, (byte)0x50, (byte)0x72, (byte)0x6f, (byte)0x67, (byte)0x01, (byte)0x00, +(byte)0x10, (byte)0x6a, (byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x6c, +(byte)0x61, (byte)0x6e, (byte)0x67, (byte)0x2f, (byte)0x4f, (byte)0x62, (byte)0x6a, +(byte)0x65, (byte)0x63, (byte)0x74, (byte)0x01, (byte)0x00, (byte)0x10, (byte)0x6a, +(byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x6c, (byte)0x61, (byte)0x6e, +(byte)0x67, (byte)0x2f, (byte)0x53, (byte)0x79, (byte)0x73, (byte)0x74, (byte)0x65, +(byte)0x6d, (byte)0x01, (byte)0x00, (byte)0x03, (byte)0x6f, (byte)0x75, (byte)0x74, +(byte)0x01, (byte)0x00, (byte)0x15, (byte)0x4c, (byte)0x6a, (byte)0x61, (byte)0x76, +(byte)0x61, (byte)0x2f, (byte)0x69, (byte)0x6f, (byte)0x2f, (byte)0x50, (byte)0x72, +(byte)0x69, (byte)0x6e, (byte)0x74, (byte)0x53, (byte)0x74, (byte)0x72, (byte)0x65, +(byte)0x61, (byte)0x6d, (byte)0x3b, (byte)0x01, (byte)0x00, (byte)0x13, (byte)0x6a, +(byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x69, (byte)0x6f, (byte)0x2f, +(byte)0x50, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x74, (byte)0x53, (byte)0x74, +(byte)0x72, (byte)0x65, (byte)0x61, (byte)0x6d, (byte)0x01, (byte)0x00, (byte)0x07, +(byte)0x70, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x74, (byte)0x6c, (byte)0x6e, +(byte)0x01, (byte)0x00, (byte)0x15, (byte)0x28, (byte)0x4c, (byte)0x6a, (byte)0x61, +(byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x6c, (byte)0x61, (byte)0x6e, (byte)0x67, +(byte)0x2f, (byte)0x53, (byte)0x74, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x67, +(byte)0x3b, (byte)0x29, (byte)0x56, (byte)0x01, (byte)0x00, (byte)0x14, (byte)0x53, +(byte)0x6f, (byte)0x75, (byte)0x72, (byte)0x63, (byte)0x65, (byte)0x44, (byte)0x65, +(byte)0x62, (byte)0x75, (byte)0x67, (byte)0x45, (byte)0x78, (byte)0x74, (byte)0x65, +(byte)0x6e, (byte)0x73, (byte)0x69, (byte)0x6f, (byte)0x6e, (byte)0x00, (byte)0x21, +(byte)0x00, (byte)0x05, (byte)0x00, (byte)0x06, (byte)0x00, (byte)0x00, (byte)0x00, +(byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x07, +(byte)0x00, (byte)0x08, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x09, (byte)0x00, +(byte)0x00, (byte)0x00, (byte)0x1d, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x01, +(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x05, (byte)0x2a, (byte)0xb7, (byte)0x00, +(byte)0x01, (byte)0xb1, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, +(byte)0x0a, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x06, (byte)0x00, (byte)0x01, +(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x09, (byte)0x00, +(byte)0x0b, (byte)0x00, (byte)0x0c, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x09, +(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x25, (byte)0x00, (byte)0x02, (byte)0x00, +(byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x09, (byte)0xb2, (byte)0x00, +(byte)0x02, (byte)0x12, (byte)0x03, (byte)0xb6, (byte)0x00, (byte)0x04, (byte)0xb1, +(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x0a, (byte)0x00, +(byte)0x00, (byte)0x00, (byte)0x0a, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, +(byte)0x00, (byte)0x03, (byte)0x00, (byte)0x08, (byte)0x00, (byte)0x04, (byte)0x00, +(byte)0x02, (byte)0x00, (byte)0x0d, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, +(byte)0x00, (byte)0x0e, (byte)0x00, (byte)0x1d, (byte)0x00, (byte)0x01, (byte)0x09, +(byte)0xa0 + }; + + public static void main(String[] args) throws Exception + { + try { + SourceDebugExtension loader = new SourceDebugExtension(); + /* The test program creates a class file from the header + * stored above and adding the content of a SourceDebugExtension + * attribute made of the character 0x02 repeated 68000 times. + * This attribute doesn't follow the syntax specified in JSR 45 + * but it's fine because this test just checks that the JVM is + * able to load a class file with a SourceDebugExtension + * attribute bigger than 64KB. The JVM doesn't try to + * parse the content of the attribute, this work is performed + * by the SA or external tools. + */ + byte[] buf = new byte[header.length + attrSize]; + for(int i=0; i test.out 2>&1 & +C_PID=$! + +sleep 60 + +ps | grep ${C_PID} | grep -v grep + +if [ $? = 0 ] +then + kill -9 ${C_PID} + echo "Test Failed" + exit 1 +else + echo "Test Passed" + exit 0 +fi diff --git a/hotspot/test/runtime/7158800/badstrings.txt b/hotspot/test/runtime/7158800/badstrings.txt new file mode 100644 index 00000000000..d7f76fb838e --- /dev/null +++ b/hotspot/test/runtime/7158800/badstrings.txt @@ -0,0 +1,30001 @@ +EOcLKvbddZyPxYpb +DncLKvbdPxmAGrqj +DoCjjvbdpxoIHQdY +EPCkKvbdqYoHfqEY +DnbkKvbdezvYdiUX +DnbjjvbdeEoRbXCj +EObkKvbdbsCkUEKB +EOcLKvbdnUtyjiqf +DncLKvbdRWnDcMHc +DoCkKvbdrSUkOLAm +DncLKvbdfNFwGmJk +EPDLKvbdvAdYroFI +DoDLKvbdiGibyViu +DncLKvbdYqNEhmFR +DoCkKvbdEARhlzXX +DncLKvbdSZjHsCvA +DncKjvbdqTsgRqkU +DnbjjvbdqAiFAXHd +EPDKjvbdGcjvJaij +DnbkKvbdwtldpxkn +DoDKjvbdYkrETnMN +EPCjjvbdbBWEfQQX +EPCjjvbduMXwAtBX +DncLKvbdbsCkTcia +DoCjjvbdczYpYZRC +EOcKjvbdFeiqmhsq +DoCkKvbdKCicQibx +EOcKjvbdZLrEUOLm +DoCjjvbdaNKbStmH +DoDKjvbdJbjDQjDY +EPCkKvbdemFwGmKL +EPDKjvbdZQleImEq +DncKjvbdZjShPfbG +DnbjjvbdqYnhHREY +DoCkKvbdaRfDIUGL +DoDKjvbdLrWlyuQz +DnbjjvbdZisHofaf +EObjjvbdhtydvrUb +DnbjjvbdRotHKGEX +EObjjvbdNeEThhkE +EPCjjvbdZtJJZESn +DoDKjvbdnPyxvLYb +EPDKjvbdeEoRbWbj +EOcLKvbdFxttaEXb +EObjjvbddwystRez +EPCjjvbdJpzEnenF +DnbkKvbdTppntuIN +EPCkKvbdTukpKUBR +DnbkKvbdhlFEOUcZ +EObkKvbdlhdUQuRa +DnbjjvbdkClKqHUg +EOcKjvbdqTtGqqkU +DncKjvbdtkwvaUBX +DoDKjvbdsQWOjCuf +DncLKvbdEKIJuwjA +DncKjvbdGLErcIMu +EOcLKvbdNPwpumfs +EObkKvbdnVUzLJrG +DoCkKvbdcTDKsdKB +DncKjvbdKRZdoFme +EOcLKvbdemFvgNKL +EPCkKvbdznopdblY +EPDLKvbdOYPVzdOU +DnbjjvbdsZlPsAhO +DoDLKvbdKCjDRKDY +DoCkKvbdhuZeXSVC +EPDKjvbdOStVgEtp +DncLKvbdvwMAvBWV +EPDKjvbdBcoaWJlf +EOcKjvbdZxdKODMS +DoCjjvbdbsCkTcjB +EOcLKvbdwWlAuaWV +DnbjjvbdFejRnJUR +DnbjjvbdmIdTqVSB +DnbkKvbdqBIeAWhE +DncKjvbdrMzJyMIJ +DoCkKvbdZGvdAOsJ +DncLKvbdjggLfFnL +DoCjjvbdYqNFJMdq +DoCkKvbdqZPHfqDx +DncLKvbdOEdThiLE +DoCkKvbdZirgpGaf +EPDLKvbdziuQPdSt +EObkKvbdKQyeOenF +DoDLKvbduaDySndh +DoCjjvbdVUNUGLvK +DncKjvbdAMhYrvzY +DnbkKvbdnQZxvKxb +EPCjjvbdBhjakJFj +DncLKvbdmfeYNNfy +DoDLKvbdjlbLydfo +DoDLKvbdpyPIGpcx +EOcLKvbdnVUzLJqf +DoCjjvbdmJETqVSB +DoDLKvbdJTZAsMxM +DoCkKvbdnQZxvLZC +DoDKjvbdACqwizJQ +DncKjvbdvBEZSoFI +DncKjvbdGckVjCJj +DncLKvbdiMFENtcZ +Dnbjjvbdjuvmcaww +DnbkKvbdZyEKNblS +DoCjjvbduMYXBUBX +DnbjjvbdFWYopNJe +DoDKjvbdelfXGljL +DnbjjvbdakLenmcA +EPDKjvbdfILWRmpg +EObjjvbdSLYeuHLT +DoCjjvbdMfbolotk +EPDLKvbdrRuKnKaN +EOcKjvbdyzdnRhIh +DoDLKvbdGAoRZJzm +DoCjjvbdhlFDnUcZ +EPDLKvbdmpZyVkYb +DncKjvbdTpqPUuIN +DncLKvbdHDjvJaij +EPDLKvbdYlRcsmkm +EPDLKvbdvlvAMdFN +DncKjvbdIsZArmYM +EOcLKvbdegjuqnQg +EOcLKvbdZQmFJNFR +DoCjjvbdZxdJmcMS +EPCkKvbdlZTSTYgU +DoDKjvbdqceJPnWB +DncLKvbdVgwuxGxz +DncKjvbdDnbkLXDE +EPDLKvbdatbHYKsh +DncKjvbdEzsqFLbi +EPDLKvbdnVVZkKRf +EOcKjvbdKeegbBQu +EPCkKvbdKfGHaaRV +EPDKjvbdmIctRVRa +EPCjjvbdRMxBxnUz +DnbjjvbdJYTbILpp +EPCkKvbdTAEiHbPE +EOcLKvbdfelZnGgA +DoCjjvbdOStWGeUp +EOcLKvbdemGXHNJk +DoDKjvbdYTMAmUOx +EPCkKvbdpyOhGpcx +EPCkKvbdAMgxsWzY +DnbjjvbdYkrETnMN +EPDLKvbdUQqPUtgm +DncKjvbdehKurNqH +DoCjjvbdZMSETnLm +DoDKjvbdIHGyyXwg +EObjjvbdXGYzUAPT +DoCjjvbdhbPCeWqR +DoCkKvbdKNADzGuB +DnbjjvbdFeirOJTq +DncLKvbdaRecHtFk +DnbkKvbdzoPpeClY +EObkKvbdZRMeJMeR +DnbjjvbdYfvdAPSi +DncLKvbdJcKCqJcY +EOcLKvbdqvokbhyR +DoDLKvbdrRuLNjaN +DoCjjvbdTlWPBWOi +DoCkKvbdjvWnEBxX +DoDLKvbdTkunaVoJ +DoCkKvbdQZNAHTSK +EObjjvbdqwPkbhyR +EOcLKvbdNHDPlpUk +DncLKvbdIHHZxxYH +DncLKvbdtkxXAtAw +DncLKvbdSCEFMJZL +DnbjjvbdZQmEhldq +DoCjjvbdNGbolotk +DnbjjvbdnCKWwnmu +DncLKvbdzHZMANEw +DoDKjvbdmttykJrG +DnbkKvbdlrZUzSci +EPDKjvbdSKyGVHKs +DoCjjvbdKVuGEFGi +EPCjjvbdCIkBkIej +DncLKvbdzHZMAMeX +DnbkKvbdaSFbgsek +DncLKvbdHDjujBij +DoDKjvbdGZVUaDwb +DnbjjvbdZnnJFEzK +DoCkKvbdtcDUwWOo +DoCkKvbdlBMoNALA +EOcKjvbdNsUWHFUp +DoDLKvbdVUNUFlVj +DnbkKvbdhkdcnUcZ +DncLKvbdLiBkqYAS +EOcKjvbdzoPpdcLx +EPDKjvbdijGIJmXr +EOcKjvbdZisHofaf +DoDLKvbdeOdrkUUS +DoDLKvbdnPyxvKxb +EPDKjvbdIxUBhMRQ +DncLKvbdlhctRUqa +DoDLKvbdmgFXlnGy +DncKjvbdCJKbKiGK +EOcLKvbddndrjtUS +DnbjjvbdkDLjqGuH +DncKjvbdmIcsptqa +DoCkKvbdvvlAvBWV +EObjjvbdjblLQftg +DnbjjvbdCEQBWKMf +DnbjjvbdBdPaVilf +DoCkKvbdZxcjODLr +DoCkKvbdEObjjwCd +EPDKjvbdyTNhlqbH +EPCkKvbdUMVoAvPJ +DncKjvbdUxhUZjoO +DncKjvbdqqtjmkAm +DncKjvbdKfGICBRV +EPCjjvbdVrOXaeLc +EPDLKvbdwXLaWBWV +EPCkKvbdjblKqHUg +DnbjjvbduDCuWuoP +EPDKjvbdNGbpMouL +EObjjvbdBcoaVjNG +DncLKvbdrWpMDIxq +DncLKvbdhaoCdwRR +DnbkKvbdFxtuBDwb +DncKjvbdIjEAKPgE +EOcLKvbduCbuXVoP +DoDKjvbdZtIiZDsO +DnbjjvbdEztRElCi +DncLKvbdxmsHwsJD +DnbjjvbdRbEElIxk +DoDKjvbdWHwvXgYz +EOcKjvbdQlwbYnUz +EOcLKvbdVTltFkuj +DncKjvbdliETptqa +DnbkKvbddoErjtTr +DoCkKvbdgPazvdXh +DncKjvbdySmhlqag +DoCjjvbdbPgHDkzd +DoCkKvbdFWZPomKF +EObjjvbdssSSxydc +EObjjvbdzQnliJwA +EObkKvbdKCjCpibx +EPCjjvbdpyOhHREY +DncLKvbddjJqutzn +EObkKvbdBdQAujMf +EPCkKvbdLAjflbXq +DncLKvbdLBLGlaxR +DoDLKvbdrpWPJbuf +DoCjjvbdEKHiuxKA +DoCjjvbdXsMAlsnx +EObkKvbdptTgSSLU +DoDKjvbdnHFXmNfy +DncKjvbdCJKbKhej +EPCjjvbdhlEdOUby +EOcKjvbdKWUfEFGi +DoDKjvbdZQmFJMdq +EPCjjvbdiGjDZWKV +EObkKvbdVAbQrprZ +DoDKjvbdfekzNgHA +DoDLKvbdnHEwlmgZ +DncKjvbdwzHeexEr +DoCjjvbdmpZxujyC +EPDKjvbdwMvAMcdm +DoCjjvbdfHkVrNqH +EPCkKvbdYzbfRiuy +EPCkKvbdZtIiZDrn +DnbjjvbdjvWnDbYX +DoCjjvbdOStVgEtp +EPDLKvbdZMSETmlN +EPDKjvbdBhjajhej +EPCjjvbddoFTLUUS +DnbkKvbdsQVoJcWG +EPCjjvbdrEFJQNvB +DoCjjvbdMpYRWOGs +EOcLKvbdZirgpHBf +EPDLKvbdyOTIXsJD +DoCkKvbdKRZdnfNe +DnbjjvbdbBWFFoow +EPCjjvbdgFlZnHHA +DnbkKvbdGGJrOIsq +DoDLKvbduDCtwWPP +EObjjvbdNddUIhjd +DnbjjvbdxsNiMqag +EObjjvbddeOrCWbj +EObjjvbdPxmAGsRj +EOcLKvbddeOrCXDK +DoDLKvbddeOrBwCj +DoCjjvbdVqnYCElD +DnbkKvbdUyIUZjoO +EObjjvbdeFOrCXDK +EObkKvbdVrNxCFLc +EObjjvbdTfzmkwWF +EOcKjvbdIHGzZYYH +EPDKjvbdtbbuXWPP +DoCjjvbdZisIQHBf +EObjjvbdbsCkUDjB +EPCkKvbdVwJXudFH +EPDKjvbdrouoKDVf +EPCkKvbdFyVVBEYC +DncLKvbdZnnIeEzK +EPDLKvbdxVNFQxkn +DoDKjvbdpxnggRDx +DoDLKvbdqZOgfpcx +DncKjvbdCIjakJGK +EPCkKvbdCJLBjhej +DoDLKvbdnPzYvKxb +EOcKjvbdqTsgSRkU +EOcLKvbdLBLGlaxR +DoDLKvbdcbTMrAUN +DncLKvbdzitoodSt +DoDKjvbdJvUfDdfi +EOcLKvbdHDjvKCJj +EPCkKvbdeOeTKssr +DnbkKvbdlYrqsYft +DncLKvbdiiehKMxS +DncKjvbdURQoVUhN +DnbkKvbduMYXBUAw +DoDLKvbdSPtHJfEX +EObkKvbdqBJFAWgd +EOcKjvbdFpATWgFy +DoDLKvbdBsBDTfXS +DncKjvbdjhHLfFmk +DoCjjvbdCJKakIfK +DnbkKvbddoFSjtTr +EObkKvbdANIYsWzY +EObjjvbdCTAbtFvr +EObjjvbdrRtkOLAm +DnbkKvbdkxsSTYgU +DoCjjvbdnBiwXnmu +EObjjvbdwtmEqYlO +EPDKjvbdrylQTAhO +DoDLKvbdtbbtvvOo +EPCjjvbdZLrETmlN +EPDLKvbdWXJYWDdg +DoCkKvbdKQzFOfOF +EPCjjvbdwzIFfXeS +DncKjvbdRjyFuHLT +EPDLKvbdULunaWPJ +DncKjvbdUxhTykOn +DnbkKvbdJcKCqKDY +EPDLKvbdcbSmSATm +DnbkKvbdegjurNqH +EPDKjvbdZjTIQGbG +EPCjjvbdiLddNuCy +DoCjjvbdZQldiNEq +EOcLKvbdakMGPODA +EObjjvbdnHEwlmgZ +EOcLKvbdBsAcUGXS +EPCkKvbdiVZdwSUb +EOcLKvbddCTNSAUN +DnbkKvbdEXxMUUUM +DncKjvbdYpldiMeR +DoDKjvbdNddTiIjd +DoDLKvbdZLqdUNlN +EPCkKvbdiBncFWpq +DncLKvbdiCPDEvqR +EOcKjvbdUyHszKoO +DncKjvbdhtydvqtb +EPCjjvbdpxoHgQcx +EObkKvbdkWWnDaxX +DnbjjvbdBhkBkJFj +DoCkKvbdRacdkhyL +EOcLKvbdZjTHpHCG +EPCkKvbdMowqWOGs +DncLKvbdegjurNpg +EObjjvbdfMfWfmKL +EPDLKvbdZirgpGaf +DoDLKvbdiZuFlQnG +DncLKvbdFxuVAcxC +EObkKvbdZisHofaf +EOcKjvbdJSyBSmYM +EPDLKvbdVYgtZkPO +EOcKjvbdRbEFMJYk +DncLKvbdrEFIonWB +DncKjvbdKDJbqJcY +EOcLKvbdhfjCxuiu +EObjjvbdLLAhWAKZ +DoCkKvbdRXNcblID +DoDLKvbdcbSmSATm +EOcLKvbdwWlAvAuu +EObkKvbdiBnbdvpq +DoCkKvbdNQXpumgT +DncLKvbdkVwOECYX +DnbkKvbdfoazwDxI +DoDLKvbdbBWFFpPw +DoDLKvbdvBDxsPEh +EPDKjvbdJqZdoFme +DoDLKvbdIryArmXl +EPCjjvbdANIZSwZx +EPCkKvbdVhYVxGxz +DncKjvbdLAjgNCYR +DncKjvbdxxIjCQZk +DncKjvbdbiNKKewY +EPCjjvbdlrZVZsEJ +EPDKjvbdIryAsMwl +DoCkKvbdtAHRIAAr +EPDKjvbdJmAEZfuB +EPCkKvbdZjSgogBf +DoDLKvbdOXnuzcnU +DnbkKvbdehKvRnQg +EObjjvbdZyDimbkr +DoDKjvbdmajWwoOV +EOcKjvbdkMalZeHP +EOcKjvbdIjEAJpHE +EPCkKvbdDihKVxKA +DncKjvbdNddUIiKd +EObjjvbdqdFIpOWB +DoCkKvbdxnShXsJD +DoDLKvbdjmBkzEfo +EOcLKvbdatagYLTh +DoCjjvbdVhYVxHYz +DnbjjvbdJbjDRKDY +EPCjjvbdLBLHNCYR +DnbjjvbdnGeYNOGy +EOcLKvbdUsmTekvK +EPCjjvbdtkxXBTaX +EPCjjvbdzoPqFCkx +DncKjvbdCIjbKhej +DncKjvbdZLqdTmkm +DoDKjvbdsPunicVf +EOcKjvbdmgFXmNgZ +EObkKvbdiMFENuCy +DoDKjvbdhanbeXRR +EObkKvbdACqwiyhp +DncKjvbdZisIQHBf +EPCjjvbdgQBzwDwh +DnbjjvbdyYJJaoyk +DoDKjvbdxUldqZMO +EObkKvbdkClLQgVH +EPCjjvbdZQldiMeR +EPDLKvbdZyEKOClS +EPDLKvbdcIlikFvx +DoDKjvbdrzMQTBHn +DnbjjvbdVYgtZkPO +DoDLKvbdHEKuiajK +EPCkKvbdczZQXxqC +DoDKjvbdrDdiQNua +DncLKvbdcImKLGWx +DoCjjvbdVYgtZkPO +EPDLKvbdZnnIeFZj +EPDKjvbdMIakqYAS +DoCkKvbdSLYfUgLT +EPDLKvbdiCObdvpq +DnbjjvbdRpUHKFcw +DoDLKvbdIHHZyYXg +EPCjjvbdypoMhiwA +DnbkKvbdCEPaVjMf +DnbkKvbderAvzlDP +DnbkKvbdZQleImFR +EOcKjvbdKRZdneme +DoDLKvbdiBnbeXQq +DncLKvbdEPDKjvcE +EOcLKvbdauCGwkTh +DncLKvbdEvZQPmJe +EPCkKvbdURQnuVIN +DncLKvbdegjvSOQg +EPCjjvbdKaKgMawq +DnbkKvbdRzKISbvA +DncLKvbdiLdcnUcZ +EPDLKvbdkDMKpfuH +DoDLKvbdRbDdkhyL +DnbjjvbdDwxMUUTl +DnbkKvbdrpWPKCuf +DnbkKvbdNVSqjmAX +DoDKjvbdRbDeMIxk +EOcLKvbdcyxpXyRC +DncLKvbdRMwbYnUz +EObjjvbdqlzJxlHi +DoCkKvbdJYUCIMQp +DncLKvbdLZQjSzuG +EOcKjvbdxVNEqYkn +DnbkKvbdZoOIeFZj +DoCjjvbdBraCtFwS +EOcLKvbdliDsqVSB +EPCkKvbdeATqNXif +DncLKvbdkMbLydgP +EObjjvbdZxdJmbkr +DoCjjvbdraellHLZ +EObkKvbduDCuWvPP +DoCkKvbdpstGrSLU +DoCjjvbdLGFgbBQu +DnbkKvbdhtzFWquC +EObjjvbdoAKztHdO +EPDLKvbdatafxKtI +EPDKjvbdkWXNcaww +DoCkKvbdwkXEHzzG +EObkKvbdmgEwmNgZ +DncKjvbdBiLCLJFj +DoCjjvbdeOdsKssr +EOcLKvbdfILWSORH +EObkKvbdCDpAujMf +EPDKjvbdKDKDQibx +DoDKjvbdVUMtGLuj +EObkKvbdrXQMCiYq +DncKjvbdePEsLTtS +DncLKvbdDxYLtUTl +EPCkKvbdGYuVBEYC +DncLKvbdNeEUIiKd +EPCkKvbdpxoIHRDx +EObjjvbdFkEsDHlu +EObjjvbdssSSxzFD +DoCkKvbdUtNTfMVj +DnbjjvbdJcKDRKDY +DncKjvbdqiAKEmOe +DoDKjvbdtlXwAtBX +DnbkKvbdxmsIYTIc +EObkKvbdLrXMzUpz +DoCjjvbdkxsSSxft +DncKjvbdQlwaxnUz +EObkKvbdjhGlFfNk +EPCkKvbdxsNhmRag +DoDLKvbdMfcPmQUk +DoDKjvbdQvnEDLhD +EObjjvbdVgxVxHYz +DoDLKvbdlrYtyrdJ +DoCjjvbdezvYeIsw +DncLKvbdNddTiIjd +EPDLKvbdGGJrNiUR +EPDLKvbdRzJhTDWA +EPCjjvbdvvkaWBVu +EOcKjvbdRXNdCkgc +EOcKjvbdQZNAHTSK +EPCkKvbdsCGNLfkZ +EOcLKvbdDwwktTsl +EOcLKvbdqlzJyLgi +EOcLKvbdxsNiMqag +EOcLKvbdhzVFlROG +EOcKjvbdEztRFMCi +DnbkKvbdqiAJdmPF +EPDLKvbdjcMKqGtg +EObkKvbdTlWOaWOi +EPDLKvbdURRPUuHm +DoDKjvbdelfWgNKL +EOcLKvbdGAnqZJzm +EObjjvbdGZUuAdXb +DoDLKvbduLwwAtAw +DoCjjvbdZjTIQGbG +EPCjjvbdRNXbYnUz +EPDLKvbdiLeENtby +EObjjvbdMowpunGs +EOcKjvbdbiNJjevx +DoDKjvbdEYYLstTl +DoDLKvbdqUTfrRjt +DoDKjvbdbsCkUEJa +DoDKjvbdXsMBNUPY +EPCjjvbdRNXaxnUz +DoDLKvbdNGcQNQUk +DnbjjvbdEARiMywX +EPDKjvbdSKxfUfkT +DncKjvbdhtyeXRtb +DncKjvbdZLqcsnLm +EObkKvbdZnmheEzK +EObjjvbdtbcUvuno +DnbjjvbdrzMQTBHn +DnbjjvbdDwwktTsl +EPDKjvbdkxsSTYgU +DoDKjvbdIryArlxM +DoDKjvbdnBivxOnV +DoDKjvbdeATplwif +EOcLKvbdKeegbApu +EPCjjvbdMgDQMotk +DoCjjvbduCbtwWOo +DnbkKvbdyNsHwrhc +DnbkKvbdtvNxJpsA +EOcLKvbdqAheAWgd +DoCkKvbdURQoUtgm +EOcKjvbdqceIpOWB +DoCkKvbdVwIwudFH +DnbkKvbdbLMFnmcA +EOcLKvbdZjTHpHBf +EOcKjvbdRXNdCkhD +EPDLKvbdiHJcZViu +DoCjjvbdxxIjCPzL +DnbkKvbdBcpBWJmG +EPCkKvbdZyEKOCkr +EPDKjvbdOTUWHFVQ +DoCjjvbdIGgZxwwg +EPDLKvbdFjeSbhMu +EPDLKvbdhgKCxvJu +EOcLKvbdNsUWGdtp +EPDKjvbduVnXipsA +DncLKvbdGYuVBEXb +EPDLKvbdZtIhyESn +DoDKjvbdZxdJmcLr +DoCjjvbdUsltGLuj +DoDKjvbdDoDLKvbd +DncLKvbdrDdhpNvB +EPDLKvbdKCjDRJbx +DoDLKvbdxLWdHzyf +EObkKvbdrzMQTAhO +EOcLKvbdOFDtJJKd +EPCkKvbdrSVKmjaN +EOcKjvbdWWiYVdEg +EOcKjvbdWWhwvDdg +DncKjvbdpstHRqjt +EPCkKvbdKWVFceGi +DoCkKvbdZjShPfbG +DoCkKvbdSxKlNzkY +EPDLKvbdIwtCHkqQ +EOcKjvbdsCGNLgLZ +DncKjvbdzaAOfgCM +DoDLKvbdxmrhYSiD +DncLKvbdfMfWgMjL +EPDKjvbdqFdEsuaI +EOcLKvbdiLeDnUcZ +DoCjjvbdKVuFceHJ +DoCjjvbdfekzNgHA +EOcKjvbdOFEThiLE +EPDLKvbdqceJPnWB +DoDLKvbduCbtwWOo +DncKjvbdTqROtuIN +DncKjvbdpedFUWBI +DoDLKvbdrEFJQNua +DoDLKvbdyXhjCPyk +EPCkKvbdJYUBhLqQ +EPCkKvbdtcCuXVno +DoDLKvbdZLrEUOLm +EPCkKvbdpstGrRjt +DncLKvbddePSCXCj +EObkKvbdauCHXjsh +DoDLKvbdkHfkefNk +EObjjvbdMRwMzUpz +EObjjvbdaMkCTVNH +DoCkKvbdGGJrNhtR +EPDLKvbdvBDxrneI +EPDLKvbdIHHZxwxH +EOcLKvbdrJAJdmPF +EOcKjvbdGZUuAdXb +EOcLKvbdbUbHYLUI +DnbjjvbdJzofYEAN +EPDKjvbdFxtuBDxC +DnbkKvbdQvnDbkgc +EPDKjvbdJmADzGta +DoDKjvbdZRMdhleR +DnbkKvbdsrqsZZeD +EObkKvbdrovPJbuf +EPCjjvbddeOqbXCj +EObjjvbdtcDVXVoP +DncKjvbdMfbpNQVL +DoCkKvbdhbPCeXQq +DoCkKvbdNHComQVL +EObjjvbdvBDxroFI +EPCjjvbdnBivwoNu +EObjjvbdbhljKewY +EPDKjvbdZyDimcMS +EObkKvbdWSOXbElD +EOcKjvbdTfznMXVe +EPCjjvbdZtJJYcsO +DoCjjvbdRjxfVHLT +DoCkKvbdVTltGMVj +DncKjvbdYfwEAOri +DncKjvbdYkrEUOMN +EObkKvbdqGEEsuaI +DncLKvbdjJfHimXr +EPDLKvbddndsLUTr +DnbkKvbdqBJFAWhE +EPDLKvbdEOcKjwDE +EPCkKvbdtvOYJqTA +DncLKvbdkyTRsZHU +DoCjjvbdTppnuVIN +DncLKvbdwyhFeweS +DncKjvbdsBelkgKy +DoCjjvbdKDKCqJcY +DoCjjvbdkClKqHVH +DoCjjvbdcTCjtDia +EPDLKvbdUVkpJtAq +EPDLKvbdRyjITCvA +DnbjjvbdJuuFcdgJ +DoDKjvbdrJAJdmOe +DncKjvbdJcJbqKCx +DoDLKvbdJcJbqJcY +DoDKjvbdeEoSCXDK +DoDLKvbdSwjlNzkY +EObjjvbdzitopDrt +DoCkKvbdKWVGEEgJ +DncKjvbdpssfqrKt +EOcLKvbdUMWPBVoJ +DncKjvbdyzdmrIIh +EPCjjvbdxUldqZLn +DoDLKvbdySnImRbH +DoCjjvbdGdKvJaij +DoCkKvbdxZgeewdr +EObkKvbdiLddNuDZ +DnbjjvbdSCDdkiZL +DncKjvbdznpREcMY +EOcLKvbdaRebhTfL +DnbjjvbdZQldiMdq +EPCjjvbdbrbjtEKB +EOcKjvbdEARiMzXX +DoDLKvbdXrkaNTnx +EPCkKvbdQZNAHTRj +DoDLKvbdEzspeLcJ +EPCjjvbduVnYKRTA +EObjjvbdJXtBhMQp +EPDKjvbdeOdrjssr +EPCjjvbdLqwMytpz +EPDKjvbdUMVoBVoJ +DncKjvbdRpUGifDw +EPDLKvbdZyDinDLr +DnbkKvbdNrsufeVQ +EPCkKvbdZMSDtNlN +EPCkKvbdySnJNSCH +EPCjjvbdfMevfljL +DncLKvbdXsMBNTnx +DnbkKvbdpxoHfqDx +DncLKvbdUQpntthN +DncKjvbdIsZArlwl +DoDLKvbdZGwEAOsJ +EOcKjvbdVvhwvDdg +EOcLKvbduWNxJqTA +EPCjjvbdHEKvJaij +DoDKjvbdrpWOjCuf +DncLKvbdrpWOjDVf +DoCjjvbdIHGzYwwg +DoDLKvbdpxoIGqEY +DoDLKvbdJcJbqKDY +DoCjjvbdRWmdClHc +EPCjjvbdFWYopNJe +DncKjvbdmfdwlmfy +DoCkKvbdxUleQxlO +EObjjvbdnGdxMnGy +EPCjjvbdvvlAvBVu +DncLKvbddndsKssr +EObjjvbdZMRcsnLm +EOcKjvbdFxttaEXb +DncKjvbdVUNTfMVj +EOcLKvbdNrtWHFUp +DoDKjvbdwuMdqYlO +EPDLKvbdrXPkbhxq +EObjjvbdrEFIpNua +EObjjvbdziuQQDrt +EOcLKvbdqYoIGpcx +DnbjjvbdsQVoJcVf +EObkKvbdkDMKpgUg +EObjjvbdvBDyTPFI +DncKjvbduCbuWvOo +EPCjjvbdkVvnECYX +DncLKvbdZGvdAOri +DoCkKvbdrXPlDJZR +EOcLKvbduCcVWvOo +DoDKjvbdCEPaWJlf +EPDKjvbddoErjssr +DncKjvbdACqxKZiQ +EPCjjvbdUVlPitAq +EPDKjvbdjJfHjMxS +EObkKvbdAMhYsWzY +DoDKjvbdnBivxOmu +EOcLKvbdbiNKKfXY +EPDKjvbdYqMeIleR +EObkKvbdJmADygUa +EObjjvbdEPDLLWcE +EPCjjvbdrXPkcIxq +EOcLKvbdliDtQtqa +DoCjjvbdmoyxujyC +EPDLKvbddoFTLTsr +EOcLKvbdCWzdJEpW +DnbjjvbdrEEhpOWB +DoDKjvbdZLrDtNkm +EOcLKvbdLFfHbAqV +EOcKjvbdmttzLKSG +EOcLKvbdmbJvwoOV +EOcKjvbdUaCQrqSZ +DnbjjvbdmgExMnGy +EPDKjvbddndrkUUS +EObkKvbdDwwkstTl +DoCkKvbdcJMjLFwY +DnbjjvbdaNLBruMg +DoDLKvbdQYmAHTRj +DnbkKvbdsQWOicWG +EObkKvbdMRwMzUpz +DoDLKvbdZshiZDrn +EPDLKvbdnPzYujxb +EOcKjvbdCEQAujMf +EPDLKvbdKefHbApu +DoDLKvbdYpldiNFR +DoCkKvbdFWZQQNJe +DncLKvbdznpQeCkx +EOcKjvbdnQZxvKxb +DoCkKvbdVBBprpqy +DnbkKvbdZirhPfaf +DnbkKvbdegjvSNqH +EOcLKvbdqdEiPnWB +EObjjvbdBhkCKiGK +EObjjvbdxZgfGYFS +DnbjjvbdNQYQumgT +EPCjjvbdxsNhlrBg +DoCkKvbdQdDApRDr +DoCkKvbdxxIiaoyk +EPDKjvbdFeirNhtR +DoCjjvbdegjvSOQg +EObkKvbdqcdiQNvB +DncLKvbdiMEdNtcZ +DncLKvbdTqRPUthN +EPCkKvbdwygeexFS +DoDKjvbdyTOJMrBg +DncLKvbdeEoRavbj +EPCjjvbdtbcUvvOo +EObjjvbdKCicRJcY +EObjjvbdZyEKODMS +DnbjjvbdmJDtQtrB +DncLKvbdEARhlyvw +DnbjjvbdIxTbILqQ +EOcLKvbdwygefYFS +DoCjjvbdznoqFCkx +DoCjjvbdRpUGjGDw +DncKjvbdhzVGMQnG +EPCjjvbdhkeDnVCy +EObkKvbdOEdUIiKd +DncKjvbdrDeIomua +DncLKvbdiHJbxuiu +EPDKjvbddxZstRez +EPDLKvbdmSYuZrdJ +EObkKvbdVUNUFkvK +EPDLKvbdNeEUJIjd +DoCkKvbdiMEdNuCy +DoDLKvbdRDcApQcr +EPCjjvbdTlVoBVoJ +EObjjvbdLBKgNBwq +EPCkKvbdsCFllHKy +EObjjvbdnVUzLJqf +DoDKjvbdqrVLNkBN +DoCkKvbdqFcdtWBI +DncLKvbdbVCGxLTh +EOcLKvbdeFPSCXCj +EOcLKvbdRpTgKFdX +EObjjvbdznpQeDLx +EOcKjvbdjvXNcaxX +DnbjjvbdHDkWJbJj +DncKjvbdhkeENuDZ +DnbkKvbdnUtyjjSG +DoDKjvbdSQUHJfDw +DncKjvbdbUbHYLUI +EOcLKvbdNsTvGduQ +EPDLKvbdSZigsCvA +DncKjvbdMfcPlpUk +DoDLKvbdxrnIlrBg +DncKjvbdiLdcnVCy +EPCjjvbdmfeYNOHZ +DoCkKvbdjvWmcaxX +DoDKjvbdbUbHXkUI +DncKjvbdBhkBjiFj +DoDLKvbdNHColpVL +EOcKjvbdrykosAhO +DncLKvbdqGDeUVaI +DnbkKvbdhgJcZViu +DnbjjvbduLxXAtBX +EPCjjvbdYpleJNFR +EPDLKvbdQvmdClHc +DnbjjvbdJYTbIMRQ +DncLKvbdznpRFDMY +EOcLKvbdZnmiFEyj +DnbkKvbdrRuLOLAm +EObkKvbdhkeEOUby +DncLKvbdYlSEUOLm +DoCjjvbdhkdcmtby +DncLKvbdddnrCXDK +DoDLKvbdKaLHNCYR +EOcKjvbdcyxpYZQb +EPDLKvbdACqwjZhp +DoCkKvbdBsBDTevr +EObkKvbdeKJqvUzn +EObkKvbdcImJkGWx +DncLKvbdYSlAltOx +DncLKvbdlrYtyrdJ +EObkKvbdKxqJrztf +EOcKjvbdsQWPJcVf +DoDKjvbdkySqrxgU +EObjjvbdeEoRbXCj +EOcKjvbdHDkVjBij +DoDLKvbdCTBCsfXS +DoCjjvbdKCjDQibx +DoCjjvbdlhdTqUrB +DoDKjvbdTulQKTaR +DoCkKvbdRjxetfkT +EPCjjvbdEuyQQNKF +EPCjjvbdDoDKkXDE +DoCjjvbdsQWPJbuf +DoDKjvbdhuZdvqtb +EPDLKvbdiHKCyWJu +EPDLKvbdLFegaaQu +DoCjjvbdqZPHgRDx +DncKjvbdUWMPjUAq +DoDLKvbdTYKkmzjx +DoDKjvbdegjvSOQg +DnbkKvbdUtNTekvK +EObkKvbdNsTvGeVQ +DoDLKvbdfNFvgMjL +EOcLKvbdZQmEiNEq +EPDKjvbdBraDTfWr +EPDKjvbdNGcQNQVL +EPDLKvbdZyEKODMS +EOcKjvbdBvzdIdpW +EPCjjvbdACqwiyiQ +DoCjjvbddePRawCj +EPDKjvbdWWiXucdg +DoDKjvbdWexzUAPT +DnbjjvbdwXMBWBWV +EOcLKvbdUyHszLOn +EPCkKvbdOYOuzcnU +EPCkKvbdhancEwQq +DnbkKvbdjggLefOL +EPCkKvbdFjdsDIMu +DoDKjvbdrSUjmkBN +DoDLKvbdZjTIQGaf +DoDKjvbdMgDPmPtk +EPDLKvbdWRmwbFMD +DoCkKvbdzROmJKXA +DnbkKvbdrDdiQNvB +DnbjjvbduDCtwVoP +EOcLKvbdCIjbLJFj +EPDKjvbdXrkaMsnx +EPDKjvbdVhXvXfxz +DncKjvbdhbPDEwRR +DoCkKvbdpxoHgQcx +DoCkKvbduMXwBUBX +EObjjvbdNeEThhjd +DoCjjvbdirzhrkJz +DoDLKvbdaMkCTUlg +DncLKvbdWRnYBeLc +DnbjjvbdGBPRZJzm +EOcLKvbdeOeSjstS +DoDLKvbdmIctRVSB +DoCjjvbdZxdJnDMS +DoCkKvbdRpTgKFcw +DncLKvbdTukojTaR +DnbjjvbdKRZdoFme +DnbkKvbdURQoVUhN +DoDLKvbdyYJKBozL +EObkKvbdfNFwHMjL +DoDLKvbdZisIQHBf +EObkKvbdqFcdsuaI +DncLKvbdzoPqFDLx +DoDKjvbdSKxeuHLT +EPDKjvbdsBemLfjy +DoCjjvbdJbjCqJcY +DoCjjvbdNPxRVnGs +DncLKvbdGcjvJbKK +EOcKjvbdrWpMDIxq +EOcLKvbdQdDApQcr +DoDKjvbdZMRdTnLm +EOcLKvbddxZssrFz +EObjjvbdUtNTfLuj +EPCjjvbdLLBIWAKZ +DoCkKvbdgFlZmfgA +EPCjjvbdUVkoitAq +DoDKjvbdDncKjvcE +DoDLKvbdRpUHJfEX +EPDKjvbdLqvlzVQz +EPDKjvbdZMRdUOLm +EOcLKvbdCJLBkIfK +DncKjvbdaSFbhUFk +EPDLKvbdZoNheEzK +DncKjvbdUVlPjUAq +DnbkKvbdKNADyfuB +EObkKvbdZdwfzghb +EPDLKvbdZtIhxcrn +EObkKvbdGckViajK +DncLKvbdFfJqmiUR +DncKjvbdKWUfDdgJ +DoDKjvbdMtrqjmAX +EOcLKvbdsQWPKDVf +DoCjjvbdwtleRZMO +EObjjvbduaDxsPEh +EPDLKvbdKxqJrzuG +EOcKjvbdVAaprprZ +EObjjvbdEuxopMjF +DnbjjvbdyOTHwriD +EPDLKvbdrpVnibvG +EPDKjvbdkWWnDaww +DncLKvbdrXPkbiYq +DoDLKvbddxZssqez +EOcLKvbdHDkWJbJj +DncLKvbdEPCkLWcE +DnbkKvbdEXwkstTl +EObjjvbdqiAKEmOe +DncLKvbdjAQGaQGj +EPCjjvbdNeDtJJKd +EPCjjvbdvwMBWBVu +EPDKjvbdFejSOItR +EOcLKvbdNPwqWOHT +EPDKjvbdbsCjscia +EObkKvbdyYIiaoyk +DoDKjvbdLZQirzuG +EObjjvbdSLZGVGjs +DoCjjvbdAMgxsWzY +DoDLKvbdEObjjwCd +DnbkKvbdsPvOicWG +EPCkKvbdrJAKElne +EPCkKvbdauCGwjsh +DncLKvbdegkWRnQg +EPCkKvbdYpmEiNFR +DoDKjvbduaDxsPFI +DoCjjvbdcyxoxYqC +DoCkKvbdkMakzFHP +DnbjjvbdJbibqJbx +DnbkKvbdWWhxWDeH +DoCjjvbdssRsYzFD +DoDKjvbdpyPIHRDx +DncLKvbdwNWANDeN +DoDKjvbdJYUBglRQ +EObkKvbdXnRAYVVt +DoCjjvbdUWLpKTaR +DoDKjvbdTqROttgm +EPCkKvbdVqnXaeMD +EObjjvbdADRwiyiQ +DoDKjvbdlrZUyrci +EPDKjvbdvAdZSndh +DoCkKvbdzoQQeDLx +DnbkKvbdSQUGjFdX +EOcLKvbdqBJFAXIE +EObkKvbdSCEFLiZL +DnbjjvbdzoQQdcMY +DnbkKvbdpxngfqEY +DncLKvbdbsDLUEKB +DoCjjvbdXrlBMtOx +EObjjvbdKCjDQicY +DncLKvbdLrWlzUpz +EObjjvbdaaWEfQQX +EObjjvbdtlYWaTaX +DnbkKvbdMowpunGs +EObkKvbdSLYeuHKs +EObkKvbdTAEhhCOd +EPCkKvbdmSYtyrci +DncLKvbdYkqcsnLm +DoDLKvbdrylQTAgn +DncLKvbdJXtCIMRQ +EObkKvbdSBdElIyL +DoDLKvbdwygefYFS +DncKjvbdyXhibPzL +EPCjjvbduaDxsPFI +EObjjvbdZoNiFEzK +EPCjjvbdkNBkyeHP +EPCkKvbdWRnXadlD +DncLKvbdRWmdDLhD +DnbkKvbdmSYtzTDi +EOcKjvbdkVwODbXw +DncLKvbdQlxCZOUz +EObjjvbdbhlijfXY +EOcLKvbdXmqAXtut +EOcLKvbdmbKXXnnV +DoDKjvbdkHgMFfOL +EPCkKvbdfekymgHA +DoCjjvbdeKKRvUzn +DoDKjvbdkHfkefNk +DoCjjvbdyqPMiKXA +DnbjjvbdUQqOtuIN +EOcKjvbdEPCkKwDE +DoDLKvbdZRNFIleR +DnbjjvbdRacdlJZL +EOcLKvbdTukoitAq +EOcLKvbdZLrDtOMN +EOcLKvbdgKfzcGAE +EObjjvbdzjVQQESt +EOcLKvbdcIlijevx +EOcKjvbdGKdsDHmV +DncLKvbdKkBHvAJy +EOcKjvbdZMRctOLm +EPCkKvbdADRxKZiQ +EObjjvbdDwxLsssl +EPDLKvbdUxgszLPO +EPCkKvbdSQTfiedX +EPCjjvbdNeEUJIkE +DoDLKvbdpyPHfqDx +DnbkKvbdyOShXsJD +DncLKvbdLiBkpxAS +DoDKjvbdaaWEepQX +DoCjjvbdWSOYBeLc +EOcKjvbdLFegbAqV +EPDKjvbdffLzOGgA +EObkKvbdFkErbglu +DncLKvbdiZuFlROG +DncKjvbdegkWRnQg +DoDLKvbdQdDApRDr +EOcLKvbdeYZtURez +EObjjvbdrXQLcIxq +DoDLKvbdxZhGGXeS +DoDLKvbdGGKSOItR +EObjjvbdjhHLfFnL +EOcLKvbdUQpoUuHm +DoCkKvbdXrlBNUPY +DoDKjvbdJXtCIMRQ +DnbkKvbdZMSDsnLm +DncKjvbdCTBDUGWr +DncKjvbdbhlikGXY +DoDKjvbdXmqAYVWU +DnbjjvbdliDsqVRa +DnbkKvbdmajXYOnV +EObjjvbdJpyePGNe +DnbkKvbdCTAcUGXS +DoDLKvbdCDpBVjNG +EOcLKvbdxwhiaoyk +DoDKjvbdxVNFQyMO +EPCkKvbdVvhwvEEg +DnbkKvbdFWYoomJe +EOcKjvbdlrZUysEJ +EPDKjvbdqquKnKaN +DoCkKvbdTkunaVoJ +EOcLKvbdfHkVrOQg +EPDLKvbdiUzFWrUb +DoDLKvbdtAGqIABS +DoCkKvbdZRMdhmEq +DnbkKvbdNsUVfeVQ +EPDLKvbdqwPkbiZR +DoCkKvbdNUsSLNAX +DncKjvbdmpZxvKyC +EPCkKvbdLYqKSztf +EPDKjvbdZyEKODMS +EPDKjvbdNGbomPuL +DncKjvbdZMSDtNlN +EPCjjvbdTXjkmzjx +EObkKvbdBdQAvKMf +EOcLKvbdkySrTYgU +DnbkKvbdZoOIddzK +DoCkKvbdZMSDsmkm +EPCkKvbdCWzdIdpW +DncLKvbdBvzdIdov +DoCjjvbdaRfDHtFk +DnbkKvbdWeyZtAOs +DoDLKvbdnCJwYPOV +DoCjjvbdEYYLstUM +EOcLKvbdwtldqZMO +EPCjjvbdFVxoomKF +EObkKvbdyqPMhiwA +DoDLKvbdkxrrSxgU +DoCjjvbdeATqNYKG +DncLKvbdJKEAJpHE +DoCkKvbddndsLUTr +DnbjjvbdqFceUWBI +DoDLKvbdhkddOUby +DncKjvbdGKdrcIMu +EPCkKvbdelevflik +DoDKjvbdhaoDFWqR +DoCjjvbdYlSDsmlN +EPCjjvbdiZuGLpmf +EObkKvbdnCJvxPNu +DnbkKvbdhzUelRNf +DnbkKvbdZeYGzgiC +DoCkKvbdDnbkLWbd +DnbkKvbdnHFYMmfy +DoCjjvbdePEsKtTr +DnbjjvbdZQmEhleR +DnbkKvbdTkunaVoJ +DnbkKvbdFWZPpMjF +DoDKjvbdSwkMNzkY +EOcLKvbdwtldpyMO +EOcKjvbdhkdcmtby +DoCjjvbdNQXqWNfs +EPDKjvbdzjUpPdTU +DnbjjvbdqceJPnWB +EPDKjvbdUyHsyjoO +EPCkKvbdZshhxcsO +DncKjvbdqAiFAWgd +EObkKvbdgFkzOGgA +DncKjvbdmgFYNNgZ +DoDLKvbdDjHjWYKA +DnbjjvbdJbicRKCx +DnbkKvbdfNFwHMjL +EPCkKvbdWSNxBdlD +EPDLKvbdCJKbLJFj +EPDKjvbdEOcKkXDE +EPCkKvbdVrOYCElD +DnbjjvbdCIkBjhej +DoDLKvbddoFTKstS +DnbjjvbduDDVXVoP +EObkKvbdxwiKCPzL +DnbkKvbdZGvdAPTJ +DoDLKvbdBdPaVjNG +EOcKjvbdIHGzYwxH +DoCjjvbdGFjSNhsq +DnbjjvbdlYsSSxgU +EPCjjvbdqrUjnKaN +EOcLKvbdtvOXipsA +DoDLKvbdrounjCuf +DoCkKvbdFVyPomKF +EOcKjvbdNHCpNPtk +EPDLKvbdWeyZtAPT +EPDKjvbdjcLkQfuH +EOcLKvbdzHZMAMeX +DoCjjvbdUMWPBVni +EOcKjvbdHELWKBjK +DoDKjvbdMgComQUk +DnbkKvbdiGjDZWJu +DncKjvbdyqOmJKXA +DoDKjvbdVZITyjoO +DoCjjvbdzQoNJJwA +EOcLKvbdGAoQxizm +DoDKjvbdatagYKsh +EPDKjvbdSBceMJYk +DoDLKvbdMpYQvOHT +DncKjvbdiCOcFWpq +DoCjjvbdUGznLvvF +EPDLKvbdANIYrvyx +EPCjjvbdIwtCHkpp +EObkKvbdJSyBSmYM +EObkKvbdwuMdqYlO +EObjjvbdmuVZkKSG +DncLKvbdSPsfjFdX +DoDLKvbdSQUHJedX +DoDKjvbdiVZdwSUb +EPDLKvbdRjxfVGkT +EObjjvbdmpZyVkZC +DncLKvbdhzUelROG +EPCkKvbdxVMeRZMO +EOcKjvbdxxIiapZk +EOcKjvbdJSyBTNYM +EPDKjvbdMSXMzUpz +EPCkKvbdNddThhjd +DoDKjvbdznpREcLx +DncLKvbdqYoHgREY +DnbjjvbdiCPCdvqR +DoCjjvbdsQVoKDVf +DoCjjvbdqFcdtWBI +EPCkKvbdFkFTDIMu +DnbkKvbdQvmdCkgc +DnbjjvbduCbtwWOo +DoCjjvbdaNKaruNH +EOcLKvbdrpWPKCvG +DoCjjvbdEKHiuwjA +DoDLKvbdsBfMlHKy +EObjjvbduCcVWuno +DoCkKvbdNddUIiLE +DoDLKvbdVrNwbElD +EPCkKvbdTqQoUuHm +DoCjjvbdcJMikFvx +EOcKjvbdijGIJmYS +DncKjvbdtvNwipsA +EPDKjvbdGQASwGey +DoCkKvbdmJEUQtqa +DncKjvbdpxnggQcx +EOcLKvbdDnbjjwDE +DnbjjvbdxVMdqZLn +EPCkKvbdTkvPAvOi +DnbkKvbddijRvUzn +DnbjjvbdJuuFceGi +DoDLKvbdeATplxJf +EObjjvbdiLeDmuDZ +EObkKvbdzHYlANFX +EObkKvbdSBdFLiYk +DncLKvbdMgCpNPuL +DncLKvbdNsTufeVQ +EPCjjvbdUQqOtuIN +EPCkKvbdKDJcQicY +DnbkKvbdsCFmLfjy +DnbjjvbdNdctJIjd +DoDLKvbdzjUpPdSt +EPDLKvbdMoxRVmgT +EOcKjvbdbsCjscia +DoCjjvbdrDeIpOWB +EPDKjvbdOTUVgFVQ +EOcLKvbduWNwipsA +DoDKjvbdJcJcRKCx +DncKjvbdGZUtaDwb +EPCjjvbdZtJJYdSn +DoDLKvbdtcDVWuoP +EObjjvbdKaLGmCXq +DoCjjvbddZxoxYpb +DnbkKvbdWRmxCEkc +EOcLKvbdNrsufduQ +DoDLKvbdqlzJxlIJ +DoCkKvbdFVyPoljF +DnbkKvbdjggMGGOL +DoDLKvbdLAkHMawq +DncLKvbdwuMdpxlO +DoDKjvbdtSqrxydc +DoCjjvbdSLZGVHKs +DnbjjvbdrMzKYlIJ +DnbjjvbdTAFIhBnd +EPDLKvbdIxTbIMRQ +DoDLKvbdbBVeGQPw +DnbkKvbdvlvANEEm +EPDLKvbdEOcKkXCd +DoCkKvbdYqMdhmFR +EObjjvbdnUtzKiqf +EPCkKvbdtunXjQsA +DnbkKvbdddoSBwDK +DnbjjvbdTqROttgm +EPCkKvbdzQnmJJwA +EObjjvbdfpBzwDwh +DncKjvbdRotHJecw +EPCjjvbdhtzFWrVC +DncLKvbdqdEhpNvB +DnbjjvbdkWWmcbYX +EOcLKvbdYSkaMsoY +EObjjvbdDjIKVxKA +DnbkKvbdrounjDVf +EObkKvbdJzpFwdAN +DoDLKvbdsBelkgLZ +DoDLKvbdwtmEqZMO +DncKjvbdxmrgwriD +EOcKjvbdDoDLLWbd +EPDKjvbdIwtBhLpp +EPDLKvbdUaBqTRRy +DoCjjvbdjKFhJlwr +DoCkKvbdGLFTDIMu +EPCjjvbdrbFmMHKy +DoDLKvbdehKurOQg +DncKjvbdijFhJlwr +DoCjjvbdjvXOEBww +EPCjjvbdTXjkmzkY +EOcKjvbdaSFcHtGL +EPDLKvbdpyPIHQcx +EOcKjvbdmaiwXoNu +DoDKjvbdSBdFMJZL +DoDKjvbdjKGIKMwr +DncLKvbdyXiKBozL +DoCkKvbdqlzJxkhJ +EObkKvbdrNZiyLhJ +DoCkKvbdrpWPKCvG +DncLKvbdVrOXbEkc +DnbkKvbdOAIrtJrA +DnbkKvbdrXQMChyR +EOcLKvbdDnbjjwCd +EPCjjvbdjvXOECXw +EPCkKvbdMgDPmPtk +DoDLKvbdYfwEAPSi +EPCjjvbdzGxlANEw +DoDKjvbdmbKWwoNu +EOcLKvbddZxpXxqC +DoDLKvbdLGGHbApu +DoCjjvbdVTltGLuj +EPCjjvbdOEdThiKd +DoCjjvbdUyHtZkPO +DncLKvbdHELWJajK +EOcKjvbdcarmSAUN +EObjjvbdqiAJdmOe +EObkKvbdZQleImFR +EObkKvbdQccBQRDr +DoCkKvbdLAjfmBwq +DncKjvbdSKxeuHKs +DncLKvbdmJDsqUrB +EOcLKvbdGFirNhtR +DncLKvbdEARiMywX +DnbjjvbdZxcjNblS +DncLKvbdWXIwudEg +DoDLKvbdhkeDmuCy +EObkKvbdUslselWK +DoCkKvbdLhakqYAS +DoCjjvbdIMBzmvpk +EPCjjvbdKaKgMbXq +EPCjjvbdiLeDmtcZ +DnbjjvbdsPvPKCvG +DncLKvbdnVUzLKRf +DoDLKvbdiUyeWrVC +EOcLKvbdjblLRGuH +DnbkKvbdhtydvqtb +EOcKjvbdTqQnuVIN +DoCjjvbdMtsRkNAX +EPCjjvbdGKdrbglu +DncKjvbdMoxQvOGs +DoDKjvbdiHKDZWKV +DoDKjvbdULvPAvPJ +DnbkKvbdEvZQPmKF +EObjjvbdkxrrTZGt +EObjjvbdKCicQibx +DoCjjvbdKkAgvAKZ +EOcKjvbdNxOuzcmt +EPDLKvbdbsCjsdJa +EObjjvbdHDkVjBjK +EPCjjvbdYqMdiMeR +EPCkKvbdczYoxZRC +DncKjvbdnPzYujxb +DnbjjvbdMpYRWOHT +DncLKvbdLFegbBRV +DncKjvbdxVMdqYlO +DoDKjvbdFkErbhNV +DncKjvbdLLBHvAJy +DoDKjvbdTfzmkwWF +EPCjjvbdyXiKCQZk +DoDKjvbdqUUGrSLU +EObjjvbdGcjuiaij +EOcLKvbdZRMdhmFR +DoCjjvbdZoNiEdzK +DoCjjvbdEARiNZwX +DoCkKvbdwXMBVaWV +EPCjjvbdVZHsyjoO +DoDKjvbdyXhjBpZk +EObkKvbdtkxWaUAw +DnbkKvbdLrWmZuQz +DncLKvbdySnJNRbH +EPCjjvbdezvYdhsw +DoDLKvbdhancFWqR +EObjjvbdyzeORgiI +EPCjjvbdyXiJbPyk +EObjjvbduVnXiqTA +DnbjjvbdZjTHofaf +EPDLKvbdLrXMyuQz +DnbjjvbdHffyxxXg +DoDLKvbdOStWGdtp +DnbjjvbddijRvUzn +DoCjjvbdYNqAXtut +EPCjjvbdUQpntuHm +DoDKjvbduWOXjQsA +DoDLKvbdtTRsYydc +DncKjvbdpfDeUVaI +DoDLKvbdULuoAvOi +DnbjjvbdqmZjYkhJ +EPDKjvbdZMSETmkm +DoDLKvbdZshhyETO +DncLKvbdQdCaQQcr +DncKjvbdQccBQRES +EOcKjvbdrNZjYlIJ +EPDKjvbdjAQHBPgK +DoCjjvbdnUuZkJqf +DoDKjvbdLAjfmBxR +EObjjvbdUsltFkuj +DoDLKvbdZQleJMeR +DnbjjvbdBraCtGXS +DoDLKvbdaSFbhUGL +EObjjvbdrbGMkgLZ +EPCkKvbdJYUCHlRQ +EOcKjvbdgFkzNfgA +DoCjjvbdaRecHtFk +EPDKjvbdnUuZkKSG +EPDLKvbdkWWmdBww +EObkKvbdypoNJKXA +EOcKjvbdZxdJmblS +DncLKvbdZirhPgCG +DoDLKvbddeOrCXCj +DoCjjvbdOXoVzcnU +DncLKvbdSBdFMJZL +DncKjvbdrzMPraHn +DncLKvbdqZPHfpcx +DncKjvbdVAbQsQqy +DoDKjvbdySnJNSCH +EPDLKvbdtSqsZZeD +DncLKvbdtvOYKRTA +DncLKvbdLGGICBQu +DoDLKvbdDncLKwDE +EObjjvbdNrtVgEtp +EOcKjvbdUQqOtthN +EObjjvbdZtIiYcrn +EOcKjvbdmuVZjjRf +DnbjjvbdcJNKKevx +DoCkKvbdDxXlTtUM +DncLKvbdqZOhHQcx +EPDKjvbdIsZBSlwl +EOcKjvbdNUsRkNAX +DoDLKvbdRbEFMJYk +DnbjjvbdiBncFWqR +EOcLKvbdRzKIScWA +EOcKjvbdRbEFMIyL +EPDKjvbdsPunjDVf +DoCjjvbdhzVFkpmf +EOcKjvbddxZtUSFz +DncKjvbdnVUykJrG +EOcLKvbdEPCkKvbd +EPCjjvbdnUuZkKSG +DnbjjvbdnCKWxOmu +DnbkKvbdYzcFrKVy +DoDKjvbdvmWAMcdm +EObkKvbdhkdcmuDZ +DncKjvbdNsUVgFVQ +EPDLKvbdYzbeqiuy +EOcLKvbdUxgszLOn +DnbjjvbdZQmEiMeR +DoCjjvbdkHflFemk +EPDLKvbdhbPCdwRR +DoDLKvbdWXIwucdg +DoCjjvbdOYOuzcnU +DoDLKvbdcSbkTdJa +EOcKjvbdEvYpQMjF +EPDLKvbdrykosAhO +EObkKvbdrovPJbvG +DoDLKvbdkHflGGNk +DoCjjvbdZtIiYcsO +DoDLKvbdZnmiEdzK +EObjjvbdZMSDsnLm +EPCjjvbdLAjfmBxR +DncLKvbdptUGrRjt +EOcLKvbdNQXqVmgT +DoDLKvbdCIkCLIfK +EPDLKvbduVmxKRTA +EPDKjvbdHbLzEzAD +EPCjjvbdbUbGxKsh +DoCkKvbdjlbLzEgP +EPCkKvbdXGYzUAPT +DnbkKvbduLxXAsaX +EObkKvbdJvUfEFHJ +EOcKjvbdmbKXXoNu +EPDKjvbdQvnDbkgc +DoDLKvbdiUzFWrVC +EObkKvbdZyEKNcLr +DoDKjvbdrEEhpNua +DnbkKvbdzitoocsU +EPCjjvbdmbJvxOnV +EOcLKvbdNddTiIjd +DncKjvbdfpBzvdYI +EObkKvbdBhjbLIfK +DoCjjvbdFjeTDHmV +EOcKjvbdRjyGVGkT +DoCkKvbdZQldhmFR +EPDKjvbdqlzKZLhJ +DnbkKvbdZoOIeEyj +DncKjvbdBdPaVjNG +EPCkKvbdTulPjUBR +EPDLKvbdGGJqmiTq +DoDLKvbdGGJqmhsq +EOcKjvbdIryBTNXl +EPDLKvbdIsYaSmXl +DoCjjvbdVwJXudEg +EPCkKvbduDCtvuoP +EOcLKvbddBsMrAUN +DncLKvbdrouoJcWG +DoDKjvbdCgLfHAzc +DncLKvbdhtzEvqtb +DoDKjvbdZtIiYcsO +DncKjvbdMfbomPtk +DncKjvbdYqNEiMdq +DnbkKvbdCTBCtFvr +DncLKvbdhtzEvquC +DoCjjvbdAMhZSvyx +DoDKjvbdjlbLzEfo +EOcKjvbdZLrETmkm +DncKjvbdULvPAuni +DoCjjvbdtcCtvuoP +EPCkKvbdOTTugEtp +EObjjvbdhtzEvquC +DoCjjvbdkHgLfFmk +DncKjvbdmoyyVkZC +DnbkKvbdsBemLgKy +DoDKjvbddCTMrAUN +DoCjjvbdmuUykJqf +DnbjjvbdbQHGckzd +DoDLKvbdyOShXriD +EPDLKvbdZRNFImFR +EOcLKvbdDoDKkWcE +EPCkKvbdwMvAMcdm +DnbjjvbdbKlFoNcA +DoCkKvbdMfbpMpVL +DncLKvbdhkeDnUby +DoDKjvbdMSWmZtpz +EPCjjvbdmfeYMmgZ +DnbjjvbdqiAKFMoF +DoCkKvbdSBdElIxk +EOcLKvbduoTzpkPU +DncLKvbdDoCjjwCd +EObjjvbdLGGHbBQu +DnbkKvbdQcbaQRDr +EPDLKvbdyNrgxTJD +EObjjvbdtSqryZdc +DoDLKvbdegkWSNpg +EOcKjvbdZLrDsnLm +EObjjvbdFkEsCgmV +DoDKjvbdatagXjtI +DncLKvbdGZUuBDwb +DoDLKvbduDDUvuno +EObjjvbdURROtuIN +DnbkKvbdyXhjBpZk +DoDLKvbdKaLGlaxR +DoCkKvbdlZTRrxgU +EPDLKvbdUsltFlWK +DncLKvbdGGKRnIsq +DnbkKvbdijFhKNXr +DoDKjvbdrWokbiYq +EObjjvbdUaCRSqRy +EObjjvbdRkYfVHKs +DnbkKvbdQvnDcMID +EObjjvbdvBEYrneI +DnbkKvbdySmiNRbH +EPDKjvbdjuvmcaxX +DoCjjvbdVTmUGLuj +EPDLKvbdxVMeRYlO +DnbjjvbdNPwpvNgT +DoDKjvbdJTZArlxM +EPDLKvbdjbkkRHUg +DnbkKvbdSBdFMIyL +EPDKjvbdMgColpUk +DncLKvbdVAbQsQrZ +DncLKvbdyTOJNRag +DnbjjvbdmgFYMmgZ +EPDKjvbdTAFIgbOd +EObkKvbdFWYoomJe +DoDKjvbdIxUBhMRQ +DoCjjvbdFWYopNKF +DoDKjvbdNdcshiLE +EOcLKvbdwWlBWAuu +EPCkKvbdYpldiNFR +EPDLKvbdQwODbkgc +EPCkKvbdqZOhHQcx +EObjjvbdHDjujCKK +DoDLKvbdnBjWwnmu +EPDLKvbdUQqPUuHm +DnbkKvbdIryBSlxM +DnbkKvbdjhGlFfNk +DnbkKvbdqlyiyMHi +EPDLKvbdxmsIYTIc +EPCjjvbdNrsufduQ +DncLKvbdaaWEepPw +DnbjjvbdkVvnDaxX +EOcKjvbdUQpntuIN +EOcKjvbdQdDAopcr +DoCkKvbduMXvaUAw +DnbkKvbdMRwNZuQz +DoCkKvbdNGcQMotk +EPDLKvbduWOYJpsA +DncKjvbdZtJIxcrn +DnbjjvbdwyhFfXeS +EOcLKvbdIryAsNYM +EObjjvbdyTNiNRag +EPCkKvbdiZuGLqOG +DncKjvbdHELWJbKK +DoDKjvbdIGfyxwxH +EPCkKvbdeOdrkTsr +DoDKjvbdpstGrRjt +EOcKjvbdZtJIxdSn +EObjjvbdZtIiZDrn +DnbjjvbdOEctIhkE +DncLKvbdKDJbqJbx +DncKjvbdEOcLKvcE +EOcLKvbdgLGzcGAE +DoCjjvbdGBPQxizm +EPCjjvbdeFOqbXDK +EObkKvbdehKuqnQg +DncKjvbdRosgKFcw +EOcLKvbdUsmUGLuj +EOcLKvbdrXQMCiZR +DoDKjvbdjcMLQftg +EPDLKvbdHEKvKBjK +EPDKjvbdbVCHYLUI +DncKjvbdFfKSOItR +DncKjvbdYSkaNToY +DncLKvbdQvmccLhD +EOcKjvbdnVUykKSG +DoCkKvbdbsDKsdJa +EObkKvbdGLFTChMu +DoCkKvbdqGEFTuaI +EPCkKvbdddoRbXCj +EPCjjvbdMfbpNQVL +DoDKjvbdFjdrbgmV +EPCkKvbdmRxuZsDi +DncKjvbdaRfChUGL +DncLKvbdMJBkqYAS +EObkKvbdxUmEqYlO +EPDLKvbdtbbtvuoP +DoDKjvbdxsOJNSBg +EPDKjvbdZtIhyDrn +DncLKvbdKCicRKDY +EPDLKvbdUtNUFlVj +EPCjjvbdeATqMxJf +EOcLKvbdaNLBsUmH +DoDKjvbdJcJcQjDY +EPCkKvbdiMEdNtby +DoCjjvbdiGibyWJu +DncKjvbdeEnrCXDK +EPCjjvbdUVlPisaR +DncLKvbdXGZZtAPT +DoDKjvbdddoRbXDK +DoDLKvbdSBdElIyL +DoCjjvbdRNXbZOUz +DnbjjvbdTAEhhCPE +EObjjvbdUMVoBWOi +DnbkKvbdFjdrcHmV +DoCjjvbdfIKurORH +DoDLKvbdVBCRTQrZ +EOcLKvbdZoNhddzK +DoCkKvbdULvOaVoJ +DnbjjvbdZirhPgCG +EOcKjvbdVBBprqSZ +DoDLKvbdaSFcIUGL +DoDLKvbdfIKuqnRH +DncKjvbdijGIKNXr +EPDLKvbdrzMPsAgn +EPDKjvbdNUsSKmAX +EPCkKvbdLLAhWAKZ +DncKjvbdkWWnDaww +DnbkKvbdJYUCHlQp +EPDLKvbdNwoVzdNt +DoCjjvbdSLYetfjs +DoDLKvbdptTgSSLU +DncKjvbdxVMdqZLn +DncKjvbdZyDinDMS +DnbkKvbdnPyxujxb +EPCkKvbdSiZjRABM +EPDKjvbdPyNAHSqj +DncLKvbdqwPlChyR +EPDKjvbdGckWJbKK +DoDLKvbdbBWFFoow +DoCkKvbdkCkkRGuH +DncLKvbdmJDtQuSB +EObkKvbdQdCaQQdS +DncKjvbdKfFhBaQu +DncKjvbdaNKaruMg +EOcKjvbdnPzZWLYb +EObjjvbdxUldqZMO +DnbkKvbdGckWJaij +DncKjvbdkVwODaww +EObjjvbdGKdsDHlu +EObkKvbdKQyeOfOF +EPCkKvbdGdKvKCJj +DnbkKvbdGdKuibKK +DoDKjvbdOFDtJJKd +DoCkKvbdwuMdpxkn +EObjjvbdZjShPgBf +DoDKjvbdcyxpYZQb +DnbjjvbdrbGMkgLZ +DnbjjvbdxsNiMqbH +DoDKjvbdWSOXbFLc +EPCjjvbdrDeIomvB +EOcKjvbdEuxopNJe +DoDKjvbdKDKCqKCx +DoCkKvbdkIHLfGNk +EOcKjvbdnUuZjirG +DncKjvbdIryArmXl +DoDKjvbdraemMGkZ +DncKjvbdEJgivYKA +DoDLKvbdbhmJkGWx +DnbjjvbdZyDimcMS +EOcKjvbdhuZeWrVC +DnbkKvbdRbEFMJZL +EPCkKvbdeOdrkUTr +DoCkKvbdlhdUQuRa +DnbjjvbdZtIiZDsO +EPCjjvbdZyEJmcMS +DnbjjvbdFpATWgGZ +EOcLKvbduaDxroEh +DnbkKvbdpeceUWBI +EOcKjvbdjcMLQftg +DncLKvbdnPzZWLZC +DnbjjvbdZyEKNcMS +DoDKjvbdZMSDsnLm +DnbjjvbdOAIsTjSA +DoCjjvbdWSNxCFLc +DoDKjvbdkClLRHVH +DncKjvbdZxdJmcLr +EPCjjvbdOYOuzdOU +DncKjvbdWHxVxHYz +DoDLKvbdwXMBWBVu +EObjjvbdZxdJmcMS +EOcKjvbdrEFJPmvB +EOcKjvbdQcbaQQcr +EPCkKvbdfHkWRnRH +EOcKjvbdrEEiQNvB +EObkKvbdcTCjtDia +DoCkKvbdnCJvwoOV +DoDLKvbdxnTIYSiD +EOcKjvbdGQASvfey +DoDKjvbdUtNTekvK +DoDLKvbdbUbHXkTh +DncKjvbdaNLBsVNH +EPCkKvbdmtuZjirG +EPDKjvbdvlvANEEm +DnbkKvbdcIljLGWx +EOcKjvbdJSyArmYM +EObjjvbdVTltFlVj +DncKjvbdTAFIgbOd +EOcLKvbdUsltGLuj +EObjjvbdZRNEhmFR +EOcKjvbdUGznMXVe +DnbjjvbdTqQoUthN +DncLKvbdZRNEhmEq +EObkKvbdKxpirzuG +EOcKjvbdiVZdvqtb +EOcLKvbdatbGxKtI +DnbkKvbdpfDdsvBI +DnbjjvbdpyPIGqDx +DoCkKvbdqUUGrRjt +DoCjjvbdfHjuqmqH +EPDKjvbdqlzJyLgi +DoCjjvbdznpREcMY +EObjjvbdjuvnEBww +DoCkKvbdQwNdCkgc +DoCjjvbdxsNhlqag +EOcKjvbdbsDKtEJa +EPDLKvbdfIKuqnQg +DncLKvbdJXsbILqQ +DoDLKvbdiUydwRuC +EOcLKvbdUtMsfMVj +DnbkKvbdfNGWflik +DoDLKvbdqwQLcJZR +DncLKvbdYqMeIleR +DoCjjvbdzaAPGgBl +EPCkKvbdauBgYLUI +EPDLKvbdiUydvqtb +DnbjjvbdRyjITCvA +DncLKvbdIwsahLqQ +EPCjjvbdRacdkiYk +EOcKjvbdRbEFMJZL +DoCjjvbdrzLoraHn +EObkKvbdxxIiaozL +EOcLKvbdJcJbqJbx +EPCjjvbdZisHogBf +EOcKjvbdVTmUGMWK +EPDKjvbdrylQSaIO +DncLKvbdSCEEkiYk +DoDLKvbdhtyeXRuC +EObjjvbdQvmcblID +DoDKjvbdauCGwjtI +DnbkKvbdGYtuBEYC +DoCkKvbdkyTSSxft +EPDLKvbdIGfyyYYH +EObjjvbdjlbLzEgP +EPCjjvbdIwsbHkpp +EPDKjvbdmuUyjjSG +DoCkKvbdUQpoUtgm +EObkKvbdUQqPVVIN +DncLKvbdXrkaMsnx +DncLKvbdaMjbTUlg +DncLKvbdhgJbyVjV +DnbkKvbdURQoUuIN +DnbjjvbdFWZQQMie +EPCjjvbdnCJwYPNu +EOcLKvbdBcpBVimG +DoCkKvbdyqPMiKXA +EObkKvbdnVUzKjRf +DnbkKvbdVgwvXgYz +EObkKvbdZsiJZDsO +EPDKjvbdiCPCdwRR +EObkKvbdGYuUaEYC +DnbkKvbdpyPIHREY +DnbjjvbdiZtfLpnG +EPCkKvbdVUNTelWK +DnbkKvbdTppoVUhN +DnbjjvbdxrnIlrBg +EPDKjvbdmIdUQtrB +EObjjvbdkNBkzFGo +DncKjvbdhbOcFXQq +DoDLKvbdNGcPmQVL +EPDKjvbdZoNheEyj +DnbkKvbdjlbLzEfo +DoCjjvbdZRMdiNEq +EObjjvbdczYoxYqC +EPDKjvbdLAkHMaxR +DoDLKvbdsPunibuf +DoDLKvbdNdcshhkE +EPDKjvbdhkdcnVCy +EPCkKvbdVZHtZkOn +DnbjjvbdsrrTYzFD +DoCjjvbdatbGxKtI +EOcLKvbdnGdxMnHZ +EPDLKvbdmaivwoOV +EObkKvbdjJegjMwr +EPDKjvbdYfwEAOri +EOcKjvbdpxngfpcx +DnbjjvbdEPCjkXCd +EPDKjvbdxsOImRag +EObjjvbdEPDKjwDE +DnbjjvbdYlSETnLm +DncLKvbdBiLBjhej +DoDKjvbdrpWPJcVf +DncKjvbdRpTfiedX +DoDKjvbdakMGOnDA +DnbjjvbduVmxKQsA +DncKjvbdKfFhCBRV +DnbkKvbdpfEFTvBI +DncLKvbdqwQLcIyR +EOcKjvbdlhdTpuSB +DncKjvbdqwQLbhxq +DnbkKvbdnHEwlmgZ +EPDKjvbdDoCjkWbd +EObkKvbdANIYsWyx +EObjjvbdpfEEsvBI +EPDKjvbdCJLCKiFj +DoDKjvbdqcdhonVa +EPCjjvbdzjUpQESt +DncLKvbdZQleImEq +EPCjjvbdEPCkLXCd +EPDKjvbdYlRdUNlN +EObkKvbdxwiKBozL +DnbjjvbdFjdsChNV +EObjjvbdwtleRYlO +DoDLKvbdeOdsLUUS +EPDKjvbdZLqctOLm +DoDLKvbdjlbLyeHP +DoCkKvbdaNLCTVMg +DnbkKvbdEKHjWXjA +DnbkKvbdZshhyDsO +DnbjjvbdsPunibuf +EPCkKvbdwWkaWBVu +EPDLKvbdFpATWfey +EObjjvbdzoQQdcMY +EPDLKvbdpxngfpcx +DnbjjvbdgPazwDwh +EPDKjvbdKVtfEEfi +EOcLKvbdhkeENuDZ +EObkKvbdIwtCILqQ +EPCjjvbdyNrhXsJD +DnbkKvbdMSWmZuQz +EOcLKvbdsPunicWG +DncLKvbdULvPBWPJ +DoCkKvbdKfFhCApu +EOcLKvbdTAEhhCOd +DnbkKvbdSKxetfjs +DoCjjvbdUtNTfLuj +EObjjvbdhzVGMROG +DoCkKvbdxsNhmRag +DnbjjvbddZyPwxpb +EObjjvbdEuxooljF +DncLKvbdVTlsfLuj +DoCkKvbdZjShQGaf +EPDKjvbdrSVKnKaN +DnbkKvbdFxuVBDwb +DoCkKvbdJXtBhLpp +EPCjjvbdHffzZXxH +DoCjjvbdqZOgfqDx +DncLKvbdqwQMChyR +EObjjvbdaSGDIUFk +EPDLKvbdZxdKNcMS +EObjjvbdhuZdwSUb +EPDLKvbdfMfWgMik +DncLKvbdZRNFJMdq +EOcKjvbdJKEAKPfd +EPCkKvbdcyxoxYqC +EOcKjvbdCSaCsevr +DoDLKvbdKQzEoGNe +DoDLKvbdjhHLefOL +DoCjjvbdRjxeuGjs +DncKjvbdyOTIXsIc +DnbkKvbdBdQBWKMf +EOcKjvbduLxXBUBX +EObkKvbdrSUkNkAm +DoDKjvbdKfFhBaRV +EPCjjvbdddoSBvcK +DncKjvbdyOTHxTJD +EOcLKvbdiLeENuDZ +DoCjjvbdJbjDRKCx +EPDKjvbddoErkUUS +DoCkKvbdBiKakJGK +DnbkKvbdCIjbKiFj +DoCjjvbdIsZBSmXl +EOcLKvbdBhjajiFj +DnbjjvbdrzMQTBIO +EObjjvbdrWolChyR +EPCkKvbdEARiMzXX +DoDLKvbdrWpMDJYq +EOcLKvbdKRZdoGOF +DoCjjvbdBsAcUFvr +DoCjjvbdBraDUGXS +DoCkKvbdIwtBhMQp +EObjjvbdeATqMxKG +EPDKjvbdYzbfRjWZ +EOcLKvbdsCGNLgKy +DoDKjvbdhficZWKV +EObjjvbdZQldhldq +EPDKjvbdsQVoJbvG +EPDKjvbdsQVnicWG +DoDLKvbdVZITyjoO +EPCjjvbdILazmvpk +EPCkKvbdZMSDsmlN +DoCjjvbdZGvdAOri +DoDKjvbdwuMeRYkn +DnbjjvbdZyEJmblS +EPDKjvbdhkeENuDZ +EPDLKvbdGdKvKCKK +EPCjjvbdjuwOECXw +EObkKvbdZeXfzghb +EObjjvbdJmAEZgUa +EOcLKvbdtcCuWvOo +EPCkKvbdiiehJlwr +DoDLKvbdwtldpyMO +DoCjjvbdjblLQfuH +DncKjvbdNPwpunGs +DnbjjvbdSLZFtgLT +EPDKjvbdyXhjCPyk +EObjjvbdliETpuSB +Dnbjjvbdqlyixkgi +DoDLKvbdmbJvxOnV +DoCjjvbdZjSgpGaf +DoCjjvbdqdEhpNua +DoDLKvbdelfXGmKL +EPDKjvbdIGgZyYYH +DncLKvbdfMfXHMik +DoCjjvbdZoNheEyj +EPCkKvbdsZlPsBIO +EOcKjvbdLAjgMbXq +DncKjvbdVZITykOn +DnbjjvbdpyOgfqEY +EPDKjvbdbUagYKtI +EObkKvbdrSUjnLBN +DncKjvbdQwNdDLhD +EOcLKvbdrykosBIO +EPDKjvbdsPunicWG +EPCjjvbdliDtQuRa +EOcKjvbdcSbkTdKB +EOcLKvbdKaKgNCXq +DnbjjvbdZshhxcrn +DnbkKvbdcbTMrAUN +EPCkKvbdsQWPKDVf +DncKjvbdijGHjMwr +EOcLKvbdULvPBVni +EPCjjvbdffLynHHA +DoCjjvbdTqQntuHm +DoDLKvbdjuwNdCXw +DoCkKvbdVZITzLOn +EPDLKvbdqrUkOLAm +EPDLKvbdZQmEhmFR +DoDKjvbdwjvdHzyf +EPDKjvbdePErjtTr +EObjjvbdmozYvLZC +DnbjjvbdACrXizIp +EOcLKvbdTvMQJtAq +DncLKvbdssSTZZeD +DnbjjvbdmozZVjxb +EOcLKvbdtSrSxzFD +EPDLKvbdZyDjOCkr +DnbkKvbdbBWEeopX +EOcLKvbdkWWmcbXw +DoCkKvbdkVwNdBww +DncKjvbdEzsqFMCi +DncLKvbdACqxJyhp +DoDKjvbdYpmFIleR +DncKjvbdGKdsCglu +DoCkKvbdZnnJFEzK +DoDKjvbdBsBCtGWr +EPDKjvbdBcpAuimG +DnbjjvbdIGfzYxXg +DnbkKvbdGLEsCgmV +EPCkKvbdySnJNSBg +DoCkKvbdPyNAGrqj +EPDKjvbdmaivxPNu +DnbjjvbddoFSkUUS +DoCkKvbdySmiNRag +DoDLKvbdEYXlUUUM +EObkKvbdCTBCtFwS +DoDLKvbdoznDkXoA +EOcLKvbdBvzciEov +DoCjjvbdSPtHJfEX +EPDLKvbdtvOYJqTA +EPDKjvbdZisHpHBf +EPDKjvbdILazmvqL +EOcKjvbdRpUHKGDw +DncKjvbdWXJYWDdg +EPDLKvbdIwtCHlQp +EPDKjvbdUtNTfLvK +DncLKvbddZxpXxqC +EOcLKvbdkNBlZdgP +EObkKvbdqYnhGqEY +EPDLKvbdfpBzwDwh +DncLKvbdTkuoBVoJ +DnbkKvbdvvlBWAvV +DoCjjvbdrXQMCiYq +EPCjjvbdFeiqmiUR +DncLKvbdzjUopDsU +DncKjvbdhkeDmuCy +EPCjjvbdVqnYBdlD +EOcLKvbdSCDeLiYk +DoCjjvbdJvUeceHJ +EPCjjvbdjgfkfFnL +DnbjjvbdkVwNdBww +EObkKvbdczYowyRC +EPCjjvbdZoNhddyj +EPCjjvbdOSsugEuQ +EObkKvbdZMRcsnLm +EObjjvbdrMzJyLgi +EPDKjvbdrSUjnKaN +EPDKjvbdSLYfUfkT +EPDKjvbdUVlQKUAq +DoDLKvbdJcKCqJbx +DnbjjvbdeFPRbWcK +DoCkKvbdVAbQsQqy +DncLKvbdpeceTvBI +DoDLKvbdcIlikFwY +DoDLKvbdbsDLTdJa +EPCkKvbdRXOEClHc +DnbjjvbdbKkennDA +DncLKvbdEzsqEkcJ +EPCjjvbdJvUedEgJ +EOcLKvbdzitpQDsU +DncLKvbdQvnDblHc +EOcKjvbdbQGgDkzd +DnbkKvbddZyPxYpb +EPDLKvbdLrXNZuQz +DoDKjvbdDjIJvYKA +EPCjjvbdbVCHXjsh +EOcLKvbdsPunicVf +EOcLKvbdEzspdlCi +DoDLKvbdmRxtzSdJ +DnbjjvbdsBfNLfjy +DoCjjvbdcTDLUDia +EPDLKvbdidjgVPAO +DoCkKvbduVmxKQsA +EObjjvbdxLXDgzzG +EPCkKvbduaEZSoFI +EOcLKvbddneSjssr +DoCkKvbdWXJYVdFH +DncLKvbdHkaznWqL +DncKjvbdbVCGxKsh +DnbjjvbdiMEcmtcZ +DoDKjvbdqAheAXHd +EPCkKvbdMIalQxAS +DnbjjvbdVviXucdg +DnbjjvbdMpXpumgT +EObkKvbdMJCLqYAS +EObjjvbdczZQYYqC +DncLKvbdUxgtZjoO +EOcLKvbdjuwNdCYX +DncKjvbdSwjlNzkY +EPDLKvbdrWpLbhxq +DoDKjvbdnBjWwoOV +EPCjjvbdmSYtyrdJ +DoDLKvbdzeZnzdzQ +DncLKvbdMowqWOGs +EPCkKvbdqTsfqrLU +EObkKvbdraemMHKy +EOcLKvbdJcJbpjCx +DnbjjvbdmuUzKjRf +DncKjvbdNeEThhkE +DoDKjvbdHakydzAD +EOcKjvbdXsLaNUPY +EObjjvbdLFfHbBQu +DncLKvbdbKlFoODA +DoCjjvbdRpTfiecw +DnbkKvbdRkYetgLT +DoCjjvbdegkVrOQg +DoDLKvbdhlFEOUby +DoCkKvbdFyUtaEXb +DnbjjvbdAMgxsXZx +EOcLKvbdUQqOtuHm +EPDKjvbdxrmiMrCH +EOcLKvbdREDApQdS +DoDLKvbdWRmxBdlD +DnbjjvbdiHKCyVjV +EPCkKvbdxwhjCPyk +EObjjvbdLKaHvAJy +EPDLKvbdZtJJYcsO +DoCjjvbdbPfgDkzd +EObkKvbdUaBqTRRy +EPDKjvbdGYtuAcwb +DnbjjvbdQcbaQRDr +EPCjjvbdsBfNMHKy +EPDKjvbdZyDimblS +DoDKjvbdJXtBglRQ +EObkKvbdpssfrSLU +EOcLKvbdMRwMytpz +DoCjjvbdEYYMUTtM +DoCkKvbdeAUQmXif +DncLKvbdUaBqSpqy +EObkKvbdVAbQrqRy +EObkKvbdwXMAuaWV +DncLKvbdCIjakIfK +DncLKvbdjmBkzEfo +EOcLKvbdKVtfDeGi +EObkKvbdnQZyVjxb +DncLKvbdzRPMhiwA +DncKjvbdJpydnfOF +EPDKjvbdqTsfrRkU +EPDLKvbdEuyQPlie +DnbjjvbdfSBWzlCo +DnbkKvbdqiAKFMne +EPCjjvbdatbHYLUI +EOcKjvbdNsTugEtp +EPCkKvbdmgFXmNgZ +EPDLKvbdMSXNZtpz +DoDKjvbdUaBprqRy +DnbjjvbdXmqAXtvU +EOcKjvbdHlBznWpk +EOcKjvbdVqmwbElD +DoCkKvbdqrVLOLAm +DnbkKvbdZshiYcrn +DoCkKvbdZoNhddyj +EOcLKvbdEuxooljF +DnbkKvbduCcVXVoP +EPCkKvbdmuVZjirG +DncKjvbdRzKHrbvA +EObkKvbdeKJqutzn +EObkKvbdyOShXsIc +EPCjjvbdRbDdlJZL +DoDKjvbdSBdFMIxk +DncLKvbdKaKgMawq +EObkKvbdCDpAuilf +DnbkKvbdRWnDcLgc +DncLKvbdqlzJxkhJ +EPCjjvbdNHDQMpUk +EOcLKvbdRMwbZNtz +EPDKjvbdOEdThiLE +DoDLKvbdUyHszKoO +DnbkKvbdZisIPgCG +DncKjvbdwzHeeweS +DncKjvbdQwODcLhD +DoDLKvbdqdFJPmua +EOcLKvbdvwMAvBVu +EPDLKvbdbVBfwjsh +DoCkKvbdRyjHrcWA +DoDLKvbdWIYVxGxz +DnbkKvbdbiMjLGXY +EOcLKvbdBhjbKiFj +EObjjvbdCDpAvJmG +EPDKjvbdLBKfmCYR +DoCkKvbdbiMijevx +DnbkKvbdyOSgwriD +EPDLKvbdlYrqsZHU +EOcLKvbdwyhGFxFS +EPDLKvbdRyjHsCvA +EPCkKvbdHgGzYxYH +DoDLKvbdGFjRmhtR +EPDKjvbdFyUtaEYC +DncLKvbdeFOrCWbj +DoDLKvbdJSyArlwl +EOcKjvbdZyEKODLr +EOcLKvbdemGXGmJk +DnbjjvbdSCDeLhyL +DoDLKvbdYTLaMsnx +DoCjjvbdxKwEHzyf +EOcLKvbdiVZdvquC +DnbkKvbdUaBqTQqy +EPCjjvbdGZVVBEXb +DoDLKvbdCEQAvKMf +DoDLKvbdRWmdCkhD +EPDKjvbdRotHJecw +DoCjjvbdZxcimblS +EOcLKvbdtbcUvvOo +DnbjjvbdZsiJZDsO +EOcKjvbdRyjHsCvA +EOcKjvbdxLWdHzzG +DoCjjvbdFjdrbhMu +EPCkKvbdxVNFRYlO +DoCkKvbdmIcsqUqa +EPDLKvbdfMfWgMjL +EPDKjvbdTqQoUthN +EOcKjvbdtkwvaUAw +DoDKjvbdBdPaVilf +DoDLKvbdZMRdTmkm +EPDLKvbdelewGlik +DoCkKvbdwzHfFxEr +EPCkKvbdvAcyTPFI +EObjjvbdQdDBPqES +DoDKjvbdZtIiYcrn +EOcKjvbdypnlhiwA +DoCkKvbdNrtWGduQ +DncKjvbdxsOIlqbH +EPCjjvbdANIYrvyx +DnbjjvbdNwnuzdOU +EPCkKvbdFyUuBEXb +EOcLKvbdaaWFGQQX +DncLKvbdraelkfkZ +EPCjjvbdTpqPVUhN +DncKjvbdySmiNSBg +EPDKjvbdrpWPJbvG +EObjjvbdwNWANEFN +EObjjvbdZeYGzhJC +DoCjjvbddndsKstS +EPDLKvbdegkWSORH +EPCjjvbdvwMAvBVu +EPCjjvbdkySqrxgU +EPCkKvbdHkaznWqL +EPCjjvbdqlzKYkhJ +DncLKvbdZxdJmcMS +EPCjjvbdqGEFTvAh +EObjjvbdTYKkmzkY +EPCkKvbdZisHofbG +EOcLKvbdzoPpdcLx +EPDKjvbdZjTHpHCG +EOcKjvbdKWVGEFHJ +EPCjjvbdhyuFlROG +EPCkKvbdFjeTDIMu +DncLKvbdOYPVzcnU +DoCjjvbdSZjISbvA +DoCkKvbdZoNiEdyj +EPCjjvbdrWpMDJZR +EObkKvbdkVvnDaxX +EObjjvbdcSbjtDia +DnbjjvbdLGGICBRV +EPDLKvbdkWWmcbXw +EObjjvbdnHExNOHZ +DncKjvbdUtNUFlVj +EObkKvbdEvZPomKF +DoCkKvbduoTzpjnt +EOcLKvbdURQoVVHm +DnbkKvbdTAEiIBnd +DncKjvbdQwOECkgc +DnbjjvbdRbDdkiZL +DoCjjvbdEPCkLWcE +EPDKjvbdzjUpPdSt +EPDKjvbdZMSDsmkm +DoDLKvbdBdPaWJmG +EPCkKvbdwjwEHzyf +DnbjjvbdhuZeXSUb +DoCkKvbdlYrqsYft +DoCjjvbdEXxMTssl +DoDKjvbdzoPpdbkx +DncKjvbdWRnXbFMD +DoDLKvbddijRutzn +DncKjvbdnCKWwnmu +EOcLKvbdZMSDsmkm +EOcLKvbdUaCRTRSZ +EObkKvbdkCkjpgVH +DnbkKvbdirziTKiz +DoDLKvbdJpyeOenF +EObkKvbdGKdsDHmV +EObjjvbdoAKzshDn +EPDLKvbdlrZVZrci +DncLKvbdRzKHsDWA +EObkKvbdKkAhWAKZ +EPDLKvbdVAaqSqRy +DoCkKvbdjAPgApHK +EPCkKvbdBcpBWJmG +DncKjvbduCbuXWOo +EOcLKvbdqiAKEmOe +EPDKjvbdYpldhleR +DnbjjvbdEPCjjwCd +DnbjjvbdbsDKtEJa +EObjjvbdKfGICBRV +DoDLKvbdRadFMIxk +DoDKjvbdGGJqmhsq +EPCjjvbdJbicQjDY +DncKjvbdbiNKKfWx +EOcLKvbduLxXAsaX +EPCjjvbdEKIJuwjA +EPCjjvbdWRmwadlD +DnbjjvbdfMewGmJk +EOcLKvbdNxOuzdOU +DnbkKvbdfIKvSOQg +DncLKvbdQZNAHSqj +DnbjjvbdZLqdUNlN +EPCjjvbdSLYetgLT +DncKjvbdeEoSCWbj +EPDLKvbdsCFmMGjy +EPDLKvbdLGGHaaRV +DncLKvbdEuxpQMjF +EObjjvbdVYhTzLPO +EPCkKvbdaSFbhTek +DnbkKvbdDihJuwjA +EObjjvbdFjeTDIMu +EObjjvbdhkeDnUby +DoDKjvbdxUmEpyLn +DncLKvbdiVZdvqtb +DoCkKvbdunszqLPU +DnbkKvbdSBcdkiYk +EObjjvbdbhmKKevx +DnbjjvbdVZHtZkOn +DoDLKvbdZirgogCG +DoDLKvbdqBIeAWhE +EPCjjvbdwtmEqYkn +DncKjvbdKCjDRJbx +EOcKjvbdTvLpJsaR +DoDKjvbdyXhjBozL +DnbjjvbduDDUwVoP +DoDKjvbdzaAOfgBl +DoCjjvbdWSOYCElD +EOcLKvbdqwQMDJYq +DoCkKvbdNHColpUk +EPCkKvbdCEPaVimG +EOcKjvbdjKFhJlxS +EOcLKvbdxUleRYkn +DnbkKvbdrNZjZMHi +DoDKjvbdmuUzLKSG +EObjjvbdfIKurOQg +EPDKjvbdQlwbZNtz +DncKjvbdhkeDnUby +EObjjvbdwuMdqZMO +DncKjvbdliDtQtrB +EPCjjvbdNPwqWNgT +DncKjvbdjAPgApGj +EObkKvbdMpYRVmfs +DnbkKvbdGKeTChNV +DoDLKvbdHbMZdzAD +EObjjvbdQlwayOUz +EPDKjvbdVqnYCFLc +DoCkKvbdmpZyVjyC +EObkKvbdUslsfLuj +DoDLKvbdlhdURVSB +EOcLKvbdmSZVZrci +DoCjjvbdYzberJuy +EPDLKvbdhzVGLpnG +EPCjjvbdsPvOicVf +EObkKvbdeOeTLUUS +DncLKvbdmfdxMnHZ +EPDKjvbdHffzYwxH +EPDLKvbdrylPsAgn +EOcKjvbdwWlBWAvV +EPDKjvbdVAbQsQqy +DnbkKvbdsZlPsBIO +DncLKvbdEzspdkbi +DncLKvbdhyuGMROG +DoCkKvbdFaOpxizm +DoCkKvbdZsiIxcrn +DoCkKvbdijGHjMwr +DnbkKvbdcyxpYZQb +DnbjjvbdEzspdkbi +DncLKvbdNQYRVnGs +EObkKvbdkClKpgVH +EOcLKvbdkClKqHVH +EOcKjvbdhanbdvqR +EPCkKvbdmfdwmNfy +EObkKvbdYTMAmUPY +DoCkKvbdIGgZxxXg +EOcKjvbdnHEwlnHZ +DncLKvbdCDpAuilf +EPCjjvbdmbKXXoOV +EObkKvbdapGfdLzd +EPCkKvbdRjyGVHLT +DoCkKvbddoFTLTtS +EPCjjvbdGLFTCglu +DoCjjvbdiLeENtcZ +DoCkKvbdKCicQjCx +EPCkKvbduoTzqLPU +EPCjjvbduVmwiqTA +EPCjjvbdWIXuxGxz +EPCjjvbdpxngfqDx +EOcKjvbdeOdrkTsr +DoDLKvbdNrsufduQ +EOcKjvbdIHHZyXwg +DoCjjvbdpfEEsvBI +EOcKjvbdhgKDYvKV +DnbjjvbdmbJvxOmu +EPDKjvbdGdKujCKK +DoDLKvbdfkGzcGAE +EPCkKvbdZoNiEeZj +EPDLKvbdaMjbTUlg +EPCkKvbdSPsgJfEX +EPDKjvbdDxYLstUM +EPCjjvbdKVtfDeGi +EOcLKvbdpeceTvAh +EObjjvbdHffzYwxH +DnbjjvbdffMZnHHA +EOcLKvbdsQVnibvG +EOcKjvbdZirgpGbG +EObjjvbdJSxaTMxM +EOcLKvbdbrcLUEKB +EPCjjvbdGZUuAcwb +DnbkKvbdpssgRrLU +DnbkKvbdKVteceHJ +EPDKjvbdmajXYOmu +EPDKjvbdNwoVzdOU +DnbjjvbdrpVnicWG +DoDKjvbdjhGlFfNk +EObjjvbdEXwlTtTl +DoDLKvbdkCkkQftg +DncKjvbdDxYLtUTl +DncKjvbdNQYQunGs +DoDLKvbdZQleImFR +DoDKjvbduVmxKRTA +DoDLKvbdsrqsZZdc +DoDLKvbdZLqctNlN +EPDLKvbdNsUVfeVQ +DncLKvbdhuZeXRuC +EPCkKvbdiCObdwRR +DoDKjvbdIwsbIMQp +EObjjvbdtcCtvvPP +EOcLKvbdpyOhHRDx +EObjjvbdmgEwmOHZ +DoCkKvbdelevgNJk +DoCjjvbduLwwBTaX +DoCkKvbdXrlBNTnx +EPDLKvbduCcUvuoP +EPDKjvbdURRPVUgm +EObkKvbdBsBCsfXS +DoDLKvbdZjSgogCG +EObkKvbdhgKDZViu +EPCkKvbdEYXkstUM +DncLKvbdrMzJyLgi +DnbjjvbdaSFcIUFk +EPDLKvbdnBjWxOnV +EPDLKvbdssRryZeD +EOcKjvbderAvzkbo +DoCjjvbdZirhQHCG +DnbkKvbdBraCtFvr +EOcLKvbdxZgfFxFS +DoDKjvbdJuuFdFGi +EPDKjvbdUQqPUtgm +EPDLKvbdNHCpMpUk +EPDKjvbdnCKXYOnV +DoCkKvbddZyQXyQb +DnbjjvbdpxoHgREY +EPCkKvbdfNFwHNJk +DncLKvbdVBCQsQqy +EPCkKvbdUxhTzLOn +EObjjvbdSQTgJfEX +DoCkKvbdrWpLbiZR +DoDLKvbdtcDUwWOo +DoCkKvbdwzHfGXeS +EPDLKvbdrzMPraHn +EPCkKvbdDoCjjvcE +DoDLKvbdbhlijewY +EObkKvbdUxgsyjoO +DoDLKvbdbUafxKsh +DoCjjvbdULuoBWOi +EPCkKvbdVBBqSqRy +DoCjjvbdhkeENtcZ +EPCjjvbdqYnggRDx +DncLKvbdjhHMFfOL +EOcKjvbdZxcinDMS +DoDLKvbdvBDySndh +DncKjvbdirziTKiz +DncKjvbdJXsaglRQ +DncKjvbdhfjDYvJu +DncLKvbdjuvnDbYX +EOcKjvbdKaLHMaxR +DoCjjvbdiGjDZWKV +DnbjjvbdEObjkWbd +DnbkKvbdJmADygVB +EPDKjvbdJvVFdEfi +EPDLKvbdnGeXmOGy +DoCjjvbdpssgSSKt +EPDKjvbdwtldqYlO +EPDKjvbdmfeXmNgZ +DoCjjvbdqvokbiZR +DoDLKvbdqUUHSRjt +EObkKvbdmbKXYOnV +EOcKjvbdaSGChTfL +EPCkKvbdWWiYWDdg +DoCjjvbduoTzqKnt +DnbjjvbdHDkVjBjK +EOcKjvbdbVBfwjtI +EOcKjvbdjvXOEBxX +DncKjvbdZLrETnMN +EObkKvbdfNGXHMjL +EPCkKvbdkDLkRHUg +EObjjvbdZjTIQGbG +DoDKjvbdZsiIyDsO +DnbkKvbdbrbjscjB +EPCjjvbdmbJwYPOV +DoCkKvbdKDJcQicY +DoDLKvbdZxcinCkr +DoDKjvbduoTzqLPU +EOcKjvbddndsKstS +DnbjjvbdNQXqWNfs +EOcKjvbdIidAKQGd +DoDLKvbdTkvOaVni +DoCjjvbdsPvPJcVf +DoDKjvbdVqnXbElD +EOcKjvbdIHGyyXxH +DnbkKvbdUxgszLOn +EPDLKvbdwuMdpxkn +DnbkKvbdqrVLNkBN +DncKjvbdijFgjMwr +EPCkKvbdSQUGjFcw +EObjjvbdRWmdCkgc +DnbkKvbdVTltFkvK +EOcLKvbdJbjCqKDY +EObkKvbdfMfXGmKL +EObjjvbdzRPNJKXA +EPCjjvbdBsAbtGWr +DoDKjvbdJXsahLqQ +DnbkKvbdlBNOmALA +DoDLKvbdlrYtzTDi +EPDLKvbdZtJIxdTO +DncKjvbdmbJvxPOV +EPDLKvbdaMkBsUmH +EPCkKvbdNsUVgFUp +DoCjjvbdWfYytAPT +EObjjvbdNHCpMpVL +EPCjjvbdMgComPtk +EOcLKvbdeqaWzlDP +DoCkKvbdFVxopNKF +EOcKjvbdYkrDsmlN +DncKjvbdWWiYWEFH +DoDKjvbdSLYfUfkT +DnbjjvbdhkeEOVCy +DoDKjvbdJXsagkpp +DoDLKvbdZoOIdeZj +DncLKvbdLiCMRYAS +DncKjvbdyOTHwsJD +DncKjvbdvmWANDeN +DoDLKvbdtTSTYydc +DoCkKvbddneSjtTr +EObkKvbdkDMKpftg +DnbjjvbdbhljKewY +EPCkKvbdIsZBSlwl +EPCjjvbdlqxuZsDi +DnbjjvbdNrtWGeVQ +EOcLKvbdvBEZSndh +EOcKjvbdrJAJdmOe +DoCjjvbdyOTHxTIc +DoCjjvbdmfdwlnGy +EOcLKvbdkDMKpgVH +DoCkKvbdRECaQQdS +DncKjvbdaMjartlg +EPCjjvbdVviXuceH +DnbkKvbdNsUVgFVQ +DoDKjvbdFkEsDIMu +EOcKjvbddZyPwyQb +DoDKjvbdqmZixlIJ +DoDKjvbdrEEhomvB +EOcLKvbdlZSqsZHU +EPCkKvbdehKuqmqH +DoDLKvbdFxtuBDwb +EPCjjvbdKjaHvAJy +DncLKvbdBcpAujMf +DoCjjvbdNQYRWOHT +DoCjjvbdHakzEzAD +EPCkKvbdJTYaSlwl +DoCjjvbdzitpQETU +DoDKjvbdvBEZSoFI +DncLKvbdnBjXXoOV +DoDLKvbdiZuGMROG +DoDKjvbdKVtecdfi +DnbjjvbddjJqvUzn +EPCkKvbdaMjbStlg +EOcKjvbdSZjHsDWA +DnbkKvbdUaCRSqSZ +DoDLKvbdxZgefXeS +DncKjvbdjhGkfFnL +DncKjvbdIjEAJogE +EPCkKvbdNGcPlpVL +DncKjvbdUMWPAvOi +DnbkKvbdatafxKsh +EObkKvbdjcMLQgUg +DoDKjvbddeOqavcK +EOcLKvbdoznELXoA +EPDLKvbdeOdrjtUS +DnbkKvbdjKFhJmXr +EPCkKvbdpxoHfpdY +DoCjjvbdZLrDsnMN +EPCkKvbdwyhFexFS +EOcKjvbdkClKpftg +DoDKjvbdxnTIYSiD +DncKjvbdxnShYSiD +DoCkKvbdFxtuBDwb +EObjjvbdYkrEUNkm +DnbjjvbdNQYQvNfs +EPCkKvbdhlFDnUby +EOcLKvbdiCObdwRR +DoCjjvbdVwJXvEFH +DnbkKvbdBvzchePv +EObkKvbdZHWdAPSi +DncKjvbdHgGzYxXg +DoCkKvbdMJCMQxAS +EPCkKvbdZLqdTmkm +DoDLKvbdnCJwYPNu +EPCjjvbdOSsvGdtp +DncKjvbdlYrqsZGt +EOcLKvbdJYUBhLqQ +DoCjjvbdZisHpGaf +DnbjjvbdVgxWXfxz +EPDKjvbdkWXNdBxX +DoCkKvbdlZTSSyHU +DncKjvbdjggLeenL +DnbjjvbdKNAEZfuB +DoCjjvbdLAkHMaxR +EOcLKvbdZRNFJNFR +DoDLKvbdjAQGaPfj +EObjjvbdjggMGFmk +DoDLKvbdyfyMAMeX +DncLKvbdjbkkRHVH +EOcLKvbdOTTugFVQ +EOcKjvbdWHxWXfxz +EPCkKvbdvwMBWBVu +EPCjjvbdnHEwlnHZ +DoDKjvbdHEKuiaij +DoCjjvbdVwIwvEEg +EPDLKvbdehKvRnRH +DncLKvbdnVUyjirG +EObjjvbdfMevgNJk +EPDKjvbdjbkjqHVH +DncLKvbdrJAKEloF +DoCkKvbdGckWJaij +DnbjjvbdTvMQJtAq +EPCkKvbdhkddNtcZ +DnbkKvbdrzMQTBIO +DncKjvbdsZlQTAgn +EPDLKvbdOFDtJIjd +EOcLKvbdnBivwoOV +DncKjvbdJXtBhLpp +EPCkKvbdJTYaSmXl +EOcLKvbdLGFgbBQu +DncKjvbdnHEwlmgZ +DoCjjvbdACrYJzJQ +EPCkKvbdiZuGLqNf +DnbjjvbdnGdxMmfy +DnbkKvbdRkZGUgKs +DoDLKvbdZisHofaf +EPDLKvbdJKEAJpGd +DnbkKvbdBsBDUFwS +EObjjvbdtcDVWuno +EOcKjvbdBsAbsfWr +EPDKjvbdrWpMChyR +DoDLKvbdVTltFkuj +EPDKjvbdGFjSOJUR +EOcKjvbdBsAcUGXS +EPCkKvbdcJNKKfWx +EPDLKvbdnQZyWKxb +EPCkKvbdqTtGrSKt +EObkKvbdjJfIKNXr +EOcLKvbdVqmxBdkc +EOcKjvbdFWYopMjF +DnbjjvbdqdFJPnWB +DoCjjvbdehKvRnRH +EPDKjvbdkyTRsZGt +EObjjvbdozmckYPA +DnbjjvbdbrcLUDjB +DoDLKvbdrMyixkhJ +DoDLKvbdrpWOjCvG +DoDKjvbdLFehCAqV +DncKjvbdrWpMCiYq +EOcKjvbdVTmUFkvK +EObkKvbdhficZVjV +EPCkKvbdIsZAsNXl +DoCjjvbdmfdxNOHZ +EPDKjvbdznopdblY +DnbjjvbdLiCMRYAS +DncLKvbdePEsKstS +DoDLKvbdUMVoBVni +DncKjvbdWRnXaeLc +EObjjvbdrDdiPmvB +DoDKjvbdDoDKkXDE +DncKjvbdOAIrtJrA +EPCkKvbdwzIGGXdr +EOcLKvbdUQqPUtgm +EPDLKvbdhlFEOUby +DncKjvbdZirhPfbG +EOcLKvbdKVuGEEgJ +DoDKjvbddePSBvbj +EPDLKvbdfHjuqmqH +EPDKjvbdZjSgpHBf +DncLKvbdunszpjoU +EPCkKvbdqTtHRrKt +EObjjvbdfNGXGljL +EObjjvbdUGznMWue +DnbkKvbdsPuoJbvG +EObjjvbdnQZxujxb +EPDLKvbdczZPwyQb +DoCkKvbdWXIwvDdg +EOcKjvbdQvmdDLhD +DncLKvbdCIkBjiFj +EObjjvbdjJegjNXr +DncLKvbdcIlikFvx +EPDLKvbdRkZFtfjs +DoCjjvbdczYoxZRC +EOcLKvbdatagXjsh +DncLKvbdjcLjqGuH +DoCjjvbdMSWlyuQz +DoCkKvbdjuvnDbYX +DnbjjvbdiMEdOUcZ +EPCjjvbdcTDKtEKB +DnbjjvbdwzHeexEr +EPDLKvbdemGWgNJk +EObjjvbdakLfOnDA +EPDLKvbdTfznLvvF +DoDKjvbdaNLBsUmH +EOcLKvbdhzVFkqNf +DoDKjvbdZRNFIldq +DoDKjvbdlrZVZsEJ +EObkKvbdbUagXjtI +DoDLKvbdUyHsykPO +EObjjvbdkVwNdCYX +EPDLKvbdUVkpJtBR +EPDKjvbdrMzJxkgi +EOcKjvbdSLYfUgLT +DoCjjvbdMRwNZtpz +EPDLKvbdIxTaglRQ +EPDLKvbdJqZdnenF +DoDLKvbdZMRdTmkm +DnbkKvbdANHxrvyx +EPCjjvbdFkErbhNV +EOcLKvbdWSNxCEkc +EPCjjvbdiCPCdwQq +DnbkKvbdbAvEeoow +EOcKjvbdeFOrBvcK +DnbkKvbdaRecHtGL +DnbkKvbdZshhxcrn +EOcKjvbdqTtHRrKt +EObjjvbdauBgXjtI +EOcKjvbdQdCaQRDr +DoCjjvbdFVxopMjF +EPDLKvbdIGgZyXwg +DoDLKvbdRpTfjFdX +DnbkKvbdSQUGifEX +DnbjjvbdpxoIHREY +DoDLKvbdqiAJeMne +EOcLKvbdCIkBkJFj +DncLKvbdFfKSNhsq +DoDKjvbdwWkaVaVu +EPDLKvbdNeETiJKd +DnbjjvbdhbOcEvpq +DoCkKvbdrbGMlHLZ +DnbjjvbdLAjgMawq +DncLKvbdlqyUzSdJ +DncLKvbdYkqdTnLm +EOcKjvbdYkrDsnMN +EOcLKvbdnCKXXnnV +DoCjjvbdDncLLWbd +DoDKjvbdYpmFJMdq +EPDLKvbdFpATXHFy +DoDKjvbdJvUfEEfi +EPDLKvbdmJEURVSB +DncLKvbdtbcVWuno +EOcLKvbdbUagYKtI +EObkKvbdcJMjKevx +DnbjjvbdKVuGEFGi +DoCkKvbdZMRctNkm +EOcLKvbdYpmEiMdq +DoDKjvbdYpmEhmEq +DncKjvbdzjVQQDrt +EPCjjvbdzHYlAMdw +EPDLKvbdYkqcsnMN +EObkKvbdiiehJmYS +DnbjjvbdDwwktUUM +EObkKvbdrounjCuf +DnbjjvbdGGKRmiUR +EOcLKvbdwzIGFxEr +EPDKjvbdOEdUJJLE +DoCkKvbdfNFvgMjL +DoDLKvbdOEdThhjd +DnbkKvbdyTOImSCH +EOcLKvbdzitpQESt +DoDKjvbduDCuWvPP +DoCjjvbdTppnuUhN +DoCkKvbdIBlZdzAD +DoCjjvbdZQmFJMeR +DnbkKvbdJXsaglQp +DoCkKvbdSZigrcWA +EObjjvbdZsiIyETO +EPDKjvbdZLqctOLm +DncKjvbdwyhGFxFS +DncLKvbdqwPkcIyR +EPDKjvbdRkYfUgLT +DoCkKvbdxxIjBpZk +DncLKvbdqlyjYlIJ +EPCjjvbdRaceLiYk +EPDKjvbdjlbLyeHP +EPDKjvbdrbFmLfkZ +EPCkKvbdvBEYsPFI +DncKjvbdSBdElJYk +EPDKjvbdpxoIHREY +EPCkKvbdjhHMFfNk +EPCkKvbdANIYsXZx +EObjjvbdnGdxNOHZ +EObjjvbdKQzFPGOF +DoCjjvbdtunYKRTA +DnbjjvbdLFfHbBRV +EOcKjvbdpedEsuaI +DnbjjvbdYkqcsmkm +EPCkKvbdbrcLUEKB +DnbkKvbdNQYQunGs +DoDLKvbdJcJbqKCx +EPDLKvbdIxTbHlRQ +DnbkKvbdvwMAvBWV +EOcKjvbdfHkVqnQg +EOcLKvbdbKkfPNcA +EPDLKvbdVAbQrpqy +DncLKvbdWRnXaeLc +EPCkKvbdFpATXGey +DoDLKvbdyfxlANFX +DoCkKvbdFVyQQMjF +EOcLKvbdxnShXrhc +DoCjjvbdmaivwoOV +DnbkKvbdbsDLTdJa +DoCkKvbdUtMtGMVj +DnbjjvbdNVSqkNAX +EPDLKvbdWfYytAOs +EPCkKvbdZyEJnDLr +EObkKvbdyXhjCQZk +EObkKvbddoFSkUTr +EOcKjvbdeATqMxKG +DnbkKvbdnPyyWKyC +DncKjvbdkySrTZHU +DnbjjvbdmfdxNNfy +EPCkKvbdHlBznXQk +EPDKjvbdZisIPgCG +DncLKvbdrEEhonVa +DoDLKvbdrykosBHn +EObkKvbdqvpLbiZR +DoCjjvbdhkeDnUcZ +DoCkKvbdVwIwudEg +DncLKvbdyXiJaozL +DoCkKvbdyzeOSIIh +EPCjjvbdkVwNcbYX +DncLKvbdTkuoAuoJ +EPCjjvbdijFgimYS +DncLKvbdliEURUrB +DoDKjvbdURQoUuIN +DoDKjvbdrMzJxkhJ +EPCkKvbdqYngfqEY +EPDLKvbddwzUTrFz +DoCkKvbdyYIjBpZk +EPCjjvbdssSSxzEc +EObkKvbdFejSNiUR +EPCkKvbdrEFJPmua +DnbkKvbdiifIJmXr +EPDLKvbdZLrEUOLm +EObjjvbdGFiqnItR +DoCkKvbdjuwNcaww +DncKjvbdmpZxukYb +DoDLKvbdqdFJQNua +EPDKjvbdNQYRWOGs +DoCjjvbdZeYGzhIb +EObjjvbdZjSgpHCG +EObjjvbdhfjDYvKV +EPCkKvbdJpzFOeme +DnbkKvbdlhcsptrB +DncLKvbdFeiqnJTq +EObjjvbdZxcinCkr +EPDLKvbdFVyQPmKF +EObkKvbdelfWfljL +EOcKjvbdJpydnenF +DnbkKvbdbVCGwkUI +EObkKvbdemFwGmJk +DoCkKvbdBsAbsfWr +EPDLKvbdJYTbHkqQ +DncKjvbdyNrgxTIc +DoDKjvbdGQASvfey +EOcLKvbdRNYCZOUz +EOcKjvbdyzeORgiI +EOcLKvbdZQmEhleR +EPCjjvbdmttyjjRf +DnbjjvbdLBLGmBwq +EOcLKvbdKVuFdFGi +EPCkKvbdxmsHwsJD +DoDLKvbdyOTIXriD +EPDLKvbdZsiJYcsO +EPCjjvbdjvXOEBxX +DoCkKvbdlZSqsZGt +DoDKjvbdADRxKZiQ +EOcKjvbdzoQREcMY +EObkKvbdGGKRmhsq +EObjjvbdJutfDdgJ +DoDLKvbdUsltFkvK +EObkKvbdHDkWKBjK +DncKjvbdLqwMzVQz +EObjjvbdaRecITfL +DoDKjvbdakMGPNcA +DnbjjvbdwXMBWAvV +EOcKjvbdQwOEDLhD +EOcKjvbdAMgxrwZx +DnbjjvbdqqtkNkAm +DoDLKvbdbhmKKewY +DoCjjvbdQmYBxnUz +DnbkKvbdvPTzqKnt +EPCkKvbdJqZePGOF +DoDLKvbdTfznMXVe +DoCkKvbdFyVUaDwb +DncLKvbdFxuUaDwb +EObkKvbdhlEcnUby +DnbjjvbdCJLCKhfK +DoCkKvbdPyNAGrrK +EOcKjvbdVgxVxGxz +EObkKvbdSxKkmzjx +EOcLKvbdemFwHMjL +EObjjvbdrEEiPnVa +DoCkKvbdDjIJvXjA +EPCjjvbdYTMAmToY +DoCjjvbdbLMFnmcA +DoCkKvbdrounjCuf +EPDKjvbdrJAJeNOe +DncLKvbdJbicQjDY +EPCjjvbdmpZxvLZC +DncLKvbdVrNxCElD +DnbkKvbdDoDLKwCd +DoDKjvbdsZkpSaIO +EPCjjvbdNQYRVnGs +DoCkKvbdVrOXbFMD +DoCjjvbdlYrqryHU +DoDLKvbdVTltGMVj +DncLKvbdwzHfGXeS +EPCkKvbdmajXYOnV +EOcLKvbdZLqdTmlN +DoDLKvbdqdFJQOWB +EObkKvbdVgwvXgYz +EPDKjvbdkMakzFHP +DoDKjvbdakLfPNcA +EObjjvbdyYJJbQZk +DoDLKvbdDigivXjA +DoDLKvbdHELWJajK +EObjjvbdZGvdAPTJ +EOcKjvbdUGzmkvue +DncLKvbdSZigsCvA +DoDLKvbddBsMrATm +EObkKvbdmSZUzSdJ +DncKjvbdjAPfaQGj +DoDKjvbdlBMoNALA +DnbkKvbdJTZArlxM +EObjjvbdHgHZyXwg +EPDLKvbdhzUekpnG +EPDKjvbdEOcKjvbd +DoCkKvbdjcLkRHUg +EObjjvbdBiLBkIej +DnbjjvbdZMSEUNkm +DoCkKvbdzRPNJJwA +EPCjjvbdGdKuiajK +EPDLKvbdrEFIpOVa +EPCkKvbdKfGHbApu +EPDKjvbdUtMsfMVj +DoDLKvbdbVCHYKsh +EPDLKvbdEztRFMCi +EOcLKvbdJmADzGta +DnbjjvbdtSrSxydc +DoCjjvbdACrYKZiQ +EPDKjvbdsrqsYzEc +DoCjjvbduLxXAtAw +DoCjjvbdEztQdkbi +DoDLKvbdkClKpgVH +DoDLKvbdSCDeMJYk +DoDLKvbdpxoIGqDx +DoCkKvbdDigjVxKA +EPDKjvbdGGKSOJUR +EOcLKvbdiLeDnVDZ +DnbjjvbdyOSgxShc +EPDLKvbdNsUWHEuQ +EOcLKvbdYpmFImEq +DoDKjvbdZLrDtOLm +DncKjvbdJvVGEFHJ +EOcKjvbdZirgogCG +EPCkKvbdKCjCqJbx +EObjjvbdgKfzcGAE +DncKjvbdZjTIQHBf +DoDKjvbdRDcBQQcr +DnbkKvbdZQmEiNFR +EObkKvbdSiZjRABM +EObkKvbdURROttgm +EObjjvbdlZSrSxft +DoCjjvbdNxPVzdOU +EPCjjvbdqAheAWhE +EPCkKvbdwXLaWBWV +DoCkKvbdKDKDQjCx +EOcKjvbdehLVqnQg +DoCkKvbdZxdJmcMS +DncLKvbdDjHjVxKA +EObkKvbdXrlAmToY +EOcLKvbdwtleRYlO +EPCjjvbdtlYWaUBX +EPCkKvbdiUzFXSVC +DoCjjvbdcJNJkFwY +EObkKvbdaRebhUGL +EOcKjvbdNHDQMotk +DoDLKvbdyTNhlqbH +EOcLKvbdKfGIBaRV +EObkKvbdKaLHMawq +DoCkKvbdnCKWwoNu +EPDLKvbdHffzYwxH +DncKjvbdnGdxMmgZ +EPCjjvbdNPwpvNgT +DoDLKvbdYkrEUOMN +DoDKjvbdTqROuUgm +DoDKjvbdvBDyTPEh +DnbkKvbdJKEAKQHE +EObjjvbdiBoCeWqR +DnbkKvbdmRyUyrci +DnbkKvbdJuuGEFGi +EOcLKvbdFyVVBEXb +EObkKvbdwyhGFwdr +EObkKvbdCTBDTevr +DoDKjvbdjbkkQftg +EOcKjvbdVAbQrqRy +EObjjvbdLAkHMawq +EObjjvbdEztQeLcJ +EPCjjvbdcIlikFvx +DncKjvbdZyEJmcLr +EObjjvbdqceJPmua +DncKjvbdZnmiEdyj +EOcLKvbdiGicYujV +DoCkKvbdFeirNhtR +DoCkKvbdDjHjVxKA +DnbkKvbdqFdEsvBI +EOcKjvbdcImKKevx +EPDLKvbdQmXbZOUz +DncKjvbdqcdhpNvB +EObkKvbdsPvOjCvG +DoDKjvbdFVyQPmKF +EOcKjvbdqYnhGpcx +EPDKjvbdKfGIBaRV +EPCkKvbdnGeXmNgZ +DncKjvbdKVtedEgJ +EObjjvbdCTAbsewS +DnbjjvbdeEoRavcK +EPCkKvbdNsUVfeVQ +EPDLKvbdGdLWKCKK +DnbjjvbdKfFhCBRV +DoCjjvbdZLrDtOLm +EPDLKvbdhtydvrVC +DoDLKvbdZjTIPfaf +DoCjjvbdbrcLTdKB +DncKjvbdzoQRFClY +DnbjjvbdSKyFuHKs +EOcKjvbdZQldiMeR +DncLKvbdkySrTYft +DnbkKvbdSLZGUgKs +EPCkKvbduCbuWvOo +DoDKjvbdsCFlkgLZ +DoCjjvbdrDdiPmvB +EPDLKvbdySnJNRbH +EPDLKvbdDoDKkXDE +EPCjjvbdijGHjMwr +EOcLKvbdeJjSWUzn +EPCkKvbdKWVFdEgJ +DoDLKvbdVYhTykPO +EObkKvbdeJiqutzn +DoCjjvbdRjyFuGkT +DoDKjvbdHDkWJajK +EPCkKvbdbKlFnnDA +EPDKjvbdQwOEDMHc +DoDLKvbdZshiZESn +EObjjvbdkyTSSyGt +DoCkKvbdxUmEpyLn +EObjjvbdMuSqkNAX +DncLKvbdbiNJkGWx +DoCjjvbdWIYVwfxz +DncLKvbdkVwNcaww +DoDLKvbdOFEThhjd +DoDLKvbddndrkUTr +DnbkKvbdyzeNrHiI +EPCjjvbdZRNEhldq +DncKjvbdhlEdNuDZ +DoCjjvbdqquKmkAm +DoDKjvbdFyVVBDxC +EPCkKvbdJuteceHJ +DnbkKvbdiBoDEvqR +DoDLKvbdLqvlzUpz +EPCjjvbdrRuKnLBN +DnbkKvbdZjShQHCG +DnbkKvbdcScLTcjB +EOcKjvbdyNrgxSiD +EOcKjvbdZirhPfbG +DoDLKvbdkIGkefOL +EPDLKvbdkCkkRGtg +EPDKjvbdbUafxLTh +EObkKvbdhfjDYvKV +DoCjjvbdpecdsvAh +EOcKjvbdpfDeUWAh +DnbkKvbdPxmAGsRj +DnbjjvbdZMSEUNlN +EOcLKvbdqFdFTvAh +DoCjjvbdWXJXvDeH +DoCjjvbdqUTfqrLU +EPCjjvbdvOszqLPU +EObkKvbdmtuZkJqf +EOcLKvbdjgfkefNk +DoCjjvbdhaoCeWqR +EObjjvbdKaLHMbXq +DoCjjvbdSLZFtfjs +DoCjjvbdFfKSOItR +DnbkKvbdqUUHSSKt +EPCkKvbdHEKujBjK +EObkKvbdIsZBSmXl +EOcKjvbdRDcApQcr +DoDKjvbduDDVWvPP +EOcKjvbdLBLGlaxR +DoDLKvbdIxTbHlQp +EPDLKvbdrRtkOKaN +DoCjjvbdRjyFtfkT +EPDKjvbdGQASwHGZ +EPDKjvbdMgDPlouL +EObkKvbdJXtCILqQ +EObkKvbdrEFJQNvB +DoCkKvbdeOeTKtUS +EObkKvbdSQTgJfDw +EPCjjvbdSQUGiedX +DoCjjvbdqUUGrRjt +EPDKjvbdTqRPVUgm +EPCkKvbdIMBznWqL +EObkKvbdhancEwRR +EOcKjvbdrMzJxkgi +EPCjjvbdhbPDEvqR +EPDKjvbdZHXEAOsJ +EPDLKvbdxnShXriD +DoCkKvbdLLAgvAKZ +DoCkKvbdhficYvJu +EObjjvbdZRMeIleR +DncLKvbdYfwEAOri +DoDLKvbdDwxMTtUM +DoCkKvbdWRmwbFLc +DnbkKvbdNQYRVnHT +DnbjjvbdjmCMZeHP +EPDKjvbdaNKbTUlg +EPCkKvbdidkHVPAO +DoCjjvbdHfgZxwxH +EObjjvbdxwhibPyk +EPDKjvbdFjeTDHmV +DoDKjvbdiCOcFWqR +DoCkKvbdJmADyfuB +EOcLKvbdhficYujV +DncLKvbdYzbfSJuy +DoCjjvbdbUagXjtI +DoDKjvbdjKFhKNYS +EOcLKvbdCIkCLJGK +DoDKjvbdZshiZESn +EPCkKvbdSQTfjFcw +EObkKvbdiMEcnUcZ +EPDLKvbdyOTHxSiD +EPCjjvbdFjeTDHmV +DnbjjvbdJuuGEFGi +EPDKjvbdhkeDnVCy +EPCkKvbdVAaqSprZ +DncLKvbdVUNTelVj +DoCkKvbdfILVrNpg +DncKjvbdNHDQNPuL +EOcLKvbdLZQirztf +EObjjvbdGckWKCJj +EObkKvbdIHGyyXwg +DncLKvbdiUydwSVC +DoDLKvbdpecdtWBI +EOcLKvbdLGFgaaRV +EOcLKvbdezuxeJUX +EObkKvbdgGLymgHA +DnbjjvbdEvZQQNJe +DncKjvbdJcJbpjDY +DoDKjvbdIxTahLqQ +DncKjvbdBcpAvJlf +EObjjvbdnPyyVkYb +EObjjvbdfNGWfljL +DnbjjvbdieLHVPAO +EOcKjvbdRNYCYmtz +EPDKjvbdiHJcYuiu +EObkKvbdMowqVnHT +DoCjjvbdiUydvrUb +EObjjvbdZMRcsnLm +DnbkKvbdaSFcIUFk +DnbjjvbdZyEKNcLr +DnbkKvbdZnnJFEzK +DncLKvbdJSyBSlxM +DoCkKvbdXsMAmUOx +EPCjjvbddneSkTtS +EOcLKvbdVwIxWEEg +EPCjjvbdxsOJMrBg +DncKjvbdkIHMGGOL +DncLKvbdGFjRmhsq +DnbkKvbdySmiNRag +EPDKjvbdpyPHgREY +DnbjjvbdGZUuAcxC +DnbjjvbdiHKDYvJu +DoCjjvbdtlXwBUBX +EObkKvbdTkvPAvPJ +EOcKjvbdSxLLmzkY +DncKjvbdhgJcZVjV +EOcLKvbdZirgogBf +EOcKjvbdTukpKUBR +EPDLKvbdQlwaxmtz +DoCkKvbdNxOuzdNt +EPDLKvbduCbuXWPP +EPCkKvbdmbJvwoNu +EObkKvbdKDKCqJbx +EPCjjvbdyNsIXrhc +EPCkKvbdSCEEkiYk +EObkKvbdOFDshiLE +DoDKjvbdZnmiFEzK +EObkKvbdJbjDRKDY +EObkKvbdYfvdAOri +DncKjvbdkDLjpfuH +DoCkKvbdsrqsZZdc +DoDKjvbdLBLHNBwq +DncLKvbdDjHjWYKA +DoDKjvbdZQleIldq +DoDKjvbdatbGxKtI +EObjjvbdUWMQKUAq +EOcLKvbdlhdUQtrB +EPCjjvbdAMhZTWyx +DoCjjvbdjhGlGFmk +DoDLKvbdHgGzZXxH +EOcKjvbdrykoraIO +DoDKjvbdjJehJlwr +EObkKvbdrEEhonWB +EPCjjvbdiUyeWrUb +DnbkKvbdNQYRVmgT +EPCjjvbdVUNUFkuj +DnbjjvbdEYYMTtUM +DoDKjvbdYpldhldq +EPCjjvbdtlYWaTaX +DoCjjvbdozmdLXoA +DnbjjvbdZnnJFFZj +EObjjvbdZshiZDrn +EPDLKvbdZjShPfaf +DoCkKvbdrpVnibvG +DoCkKvbdQwNcblHc +EObkKvbdxZgefXdr +DoDKjvbdNddUIhkE +DncKjvbdcImJkFwY +DoDKjvbdZirhQGaf +DoDKjvbdqwPkcJZR +EPDLKvbdkHgLfFnL +DncKjvbdlqxuZrci +DncKjvbdRadFLiYk +EPDKjvbdIHGyxxXg +EObkKvbdmpZyVjyC +EPCkKvbdUaBqSpqy +EOcKjvbdqZOgfqDx +EObkKvbdkNBlZeGo +EObjjvbdOAIrsjSA +EPDLKvbdEvZPpNKF +DnbjjvbdczYoxZRC +DoDKjvbdvAdZTPEh +DncKjvbdqUTfqrKt +EPCkKvbdZGwEAPTJ +EPDLKvbdZMSEUNkm +EPCjjvbdYkqctNlN +DnbkKvbdeEnqawDK +DoCjjvbdKVuGEFHJ +EOcKjvbdzitopDsU +DnbjjvbdsBfNLgLZ +DnbjjvbdcImJkFvx +EPCkKvbdMgCpNQUk +EOcLKvbdZQmEhleR +EPDLKvbdtTRrxzEc +DncLKvbdKVuFceHJ +EPCkKvbdyfxlAMdw +DnbkKvbdsZkosBHn +EPDLKvbdwWlAvBVu +DoDLKvbdlqxuZrdJ +EPDLKvbdMRwMzUpz +EObjjvbdFkFTCgmV +EObkKvbdHEKvJbKK +DncLKvbdkNCMZdfo +DoCjjvbddoFSkTtS +EPCkKvbdRpTfjFdX +DoDKjvbdIGgZyYXg +EPCkKvbdBiLCLIfK +DoCjjvbdKQydnfNe +EPCjjvbdHgGzZYYH +DnbjjvbdYNqAYUvU +DncKjvbdGckVjBjK +DoCjjvbdjhHMFemk +DnbkKvbdkIGkeenL +DncLKvbdmaivwnmu +EPDLKvbdmuVZkJqf +EPDKjvbdNddUIhjd +DoCkKvbdRDbaQRES +DncLKvbdTvLojUBR +DncLKvbdtSrSxyeD +DncKjvbdjgflGFmk +DoCkKvbdQwNdDLgc +DoCkKvbdEXwksssl +DoDKjvbdtAHRIAAr +DoDLKvbdSPsgJecw +EObkKvbdjggLfGOL +DoCjjvbdSBdFLhxk +DoCkKvbdiMEdNuDZ +DoCjjvbdhtzFWrUb +EPCjjvbdSKxetgKs +DoDLKvbddndsLTtS +DncKjvbdtcCtwVno +DoDLKvbdACrYJzJQ +EOcLKvbdyOShXrhc +EObjjvbdqquKnKaN +DoCkKvbdnCJvxOnV +EPDLKvbdFWYpQMjF +DnbjjvbdnCJvwoNu +EObkKvbdhfjCyWKV +DoDKjvbdrNZjZLhJ +DnbkKvbdyNrgwsIc +EPCkKvbdSZjITDWA +DncLKvbdqiAJeNOe +DoCkKvbdhaoDEvpq +EOcLKvbdtkwwAtAw +DncKjvbdsPvOicWG +DoCjjvbdWXJYVcdg +DoDLKvbdmIdUQuSB +DnbkKvbdauBgYKtI +EOcLKvbdJbicRKCx +DoDLKvbdsPuoJcVf +EPCkKvbdfILWRnRH +EPCkKvbdAMhYrvzY +DoCjjvbdKWUedEfi +EPCkKvbdhaoDEvqR +EObjjvbdxVMeRZMO +DncKjvbdFaOqZJzm +DncKjvbdIryArlwl +EObkKvbdRWmccLgc +EPCkKvbdsPunibvG +EOcKjvbdQccBPpcr +EPDKjvbdssRsYzFD +DncLKvbdySmiMqbH +EObkKvbdZLqdTmlN +EPDLKvbdVAaqTQqy +DncLKvbdFWZPomJe +DoDKjvbdUVkojTaR +DncKjvbdULvPBWPJ +EObjjvbdUslsfLuj +DoDKjvbdsBfMlHKy +DoCjjvbdkySrTYgU +EPDKjvbdYgXEAPTJ +EOcLKvbdrzMPsAhO +DoCkKvbdcyxpXyRC +DncLKvbdkIGkeemk +EObkKvbdVqnXbElD +EObkKvbdMuSqkNAX +DncLKvbdkNCLydfo +EOcLKvbdUVlQJsaR +EOcKjvbdczZPxYqC +EObkKvbdWIXvXfxz +DoCkKvbddndsLTtS +DnbkKvbdFfJqmiUR +DncKjvbdURROuVIN +EObkKvbdddnrCXDK +DncLKvbdZyEJmcLr +EPCkKvbdVgxVxHYz +DoDKjvbdFfKRmiTq +EPDKjvbddCTNSAUN +DoDLKvbdUxgsykOn +DoDLKvbdBhjbLIfK +DoCkKvbdFejRmiTq +EPDLKvbdmuUykJqf +DoCkKvbdVTmTfLuj +DoCjjvbdkNCLydgP +DnbjjvbdHffzYxYH +EObkKvbdpxngfpcx +EPCjjvbdKQzFOfOF +DncLKvbdOEdThiKd +EOcKjvbdJSyBTNXl +DncLKvbdyNsIXriD +EOcLKvbdJYTagkpp +DoCjjvbdkMakzEfo +DoDLKvbdZjSgpGbG +DnbjjvbdSQUHJfDw +DncKjvbdRpTgJedX +DncKjvbdrykosBIO +EObkKvbdGYttaEYC +DoCkKvbdZxcjNcMS +DoCjjvbdRadElIyL +DoDKjvbdkySqryGt +EPDKjvbdiHJbyWJu +EPCjjvbdwzHeewdr +EPDKjvbdQwNccLhD +DoCjjvbdbBVeGPow +EOcKjvbdddnrCWcK +EPCjjvbdJXtCHkqQ +EObkKvbdrbFllHLZ +DncKjvbdACqxKZhp +DoCkKvbdJXtCILpp +DncKjvbdEYYMTssl +EOcKjvbdwjvdHzzG +EPDLKvbdemGWgMik +EPCjjvbdqvokcIyR +DnbkKvbdUaCQrprZ +DoCjjvbdKCjCqKDY +EPDKjvbdYSlBMtOx +EPDLKvbdyXiKBozL +EObkKvbdZxdKNcMS +EObkKvbdCDpBVjNG +DncKjvbdmgExMmgZ +EObjjvbdHkaznWqL +EObjjvbdkNCLzEfo +EPDLKvbdyNrgwsIc +DncKjvbdnHFYNNfy +DoCkKvbdDwwktTsl +EPDLKvbdTlWOaWPJ +DoDKjvbdmIctRVRa +EPCkKvbdeEnqbWbj +EPDKjvbdTYLMNzkY +DncKjvbdkHgLfGNk +DncLKvbdnPyxvLZC +EOcLKvbdjKGHjMxS +DoCjjvbdiZtfMROG +EPDKjvbdFeiqmhsq +EPDKjvbdDoDKjvbd +EOcLKvbdKRZeOfOF +DoDKjvbdzoQQeCkx +EObjjvbdEOcLKwDE +DoCkKvbdrafNLgLZ +EObjjvbdMfbomPuL +DncKjvbdUQqPUthN +EOcLKvbddjJrWUzn +DoDLKvbdvBDySoEh +DnbjjvbdVUMselVj +DoCkKvbddndrkUUS +EObkKvbdmpZxvKxb +EPCkKvbdmbJvxPNu +EPCkKvbdmfdwlnHZ +DnbkKvbdZRMdhmFR +DnbjjvbdYSlBNToY +DncLKvbdzoQRFClY +EPCkKvbdVZITzLOn +DncKjvbdZtIiZDrn +DncKjvbdFVxopNKF +EOcKjvbdtTSSxydc +EObjjvbdUVlQKTaR +EPDLKvbdkMbLzEgP +DoDLKvbdKDJcQicY +DoDLKvbdJmAEZgVB +EOcKjvbdCWzdJFPv +DncLKvbddneTLUUS +EObjjvbdBcoaWJlf +EPDKjvbdGcjvJbJj +DoCjjvbdddoRavcK +EOcLKvbdAMhZSvyx +DnbjjvbdajlGOmcA +DoCkKvbdCIkCLJFj +DnbjjvbdMSWmZtpz +EOcKjvbdNGcQMpUk +EOcKjvbdTqROuUhN +DoCkKvbdFVxoolie +DoDKjvbdUQpnuUgm +EPDKjvbdnBiwXnmu +DnbjjvbdJuuGDdgJ +EPCjjvbdZLqcsnLm +EObkKvbdZnmheEzK +DoDKjvbdXsMAltOx +EObkKvbdiMEdOUcZ +DoDKjvbdZRNEhleR +DoDLKvbdMIbLpxAS +DoDLKvbdVwIwucdg +DoCjjvbdRbDeLiZL +DncLKvbdZMRctNlN +DoCkKvbdGcjvJbJj +DnbjjvbdSZihScWA +EPDLKvbdkDLjqHUg +DnbjjvbdZisIPfaf +EObjjvbdmpZyWLZC +EOcLKvbdrbGNLgLZ +DnbkKvbdkVvmdBww +EObjjvbddoFSjstS +EObjjvbdxwiJbPyk +EPDKjvbdTvLoitAq +DoCkKvbdZLrDsnMN +DoDKjvbdOAJTUJrA +EObkKvbdURQntuHm +EObkKvbdkIGkefOL +DncLKvbdsCFllHKy +EPCkKvbdatafxKtI +DoCjjvbdiifHjMxS +DnbkKvbdZsiIyDsO +DncKjvbdieKgUoAO +EPCjjvbdBhkCLIej +DnbjjvbdDxXktTsl +EObkKvbdKCjCqKCx +EOcLKvbdIwsahLqQ +EPDLKvbdhzUfLpnG +EObjjvbdbAvEepPw +EOcLKvbdSLZFuHKs +DnbkKvbdIidAJogE +DnbjjvbdJbjDQicY +EPDLKvbdQwODblID +EObkKvbdqZOgfqEY +EObjjvbdkWWnDbXw +DncLKvbdEvZPpMjF +EPDLKvbdKQydnfNe +EObjjvbdUWMQJtAq +EOcLKvbdqrUjmkBN +DoDLKvbdJmAEZfuB +DoCkKvbdhtydvqtb +DoCkKvbdtAHQhABS +EPDLKvbdxZhGGXdr +EPDKjvbdmSZVZrci +DnbkKvbdZjTHogCG +EObkKvbdYqMdiMeR +DoDKjvbddwzUURez +DoDLKvbdbKlFnnDA +EPCkKvbdGGKSOJTq +EObkKvbdLGFgbBRV +DoCkKvbdKyQjSzuG +DncKjvbdJcJcRJcY +EOcLKvbdnBiwYPOV +EOcLKvbdLGGHaaRV +EObjjvbddneSkTtS +DoDKjvbdiLddOUcZ +EObkKvbdsPvOjCuf +DnbkKvbdZyEKOClS +DoCjjvbdyzeORhIh +DnbkKvbdhkeDmuCy +EObkKvbdvvkaWAvV +EOcKjvbdzeZnzdzQ +DoCjjvbdVAaprqSZ +EObjjvbdjhGkefNk +DncLKvbdSKxfVHLT +EPCjjvbdZRMeImFR +DncLKvbdFeirOJTq +DncLKvbdFfJrOItR +DoDLKvbdmoyyVkYb +DncLKvbdddoRavcK +DoDLKvbdauBfxKtI +EObjjvbdSPtHJfDw +EPCjjvbdCEQBWJmG +DoCjjvbdDnbkLWcE +EPDLKvbdVUNUGMVj +DnbkKvbdnQZyVjyC +DnbkKvbdgFkymfgA +DoDKjvbdRDcBQQdS +EOcKjvbdtcCuWvOo +EObkKvbdlrYuZrdJ +DoCjjvbdZirgogBf +DoDLKvbdMfcPmPuL +EOcKjvbdDwwlTtTl +DncLKvbdwXLaWAuu +EPDKjvbdUaBqSpqy +EObkKvbdHlBznXRL +EPCkKvbdkMakzFHP +DnbkKvbdqZOgfpcx +DnbkKvbdUMWOaWPJ +DncLKvbdMfbolpVL +EObjjvbdfekynGgA +EPCkKvbdWWiXvEFH +DoCjjvbdpxnhGqDx +DoDKjvbdsQVnjDWG +EObkKvbdYNqAXtut +DncLKvbdDnbkLXCd +EObkKvbdKaLGmBwq +DoCkKvbdBvzciFPv +DoDLKvbdjKFgilwr +EPCkKvbdUaBqTQqy +DoDLKvbdVgwvYHYz +EPDKjvbdIHGyyXwg +EPDKjvbdEXxMTstM +DnbkKvbdQccBPpcr +DnbkKvbdMgCpNPuL +EPDKjvbdSPtHKFcw +DoDKjvbdkIHMGFnL +DncLKvbdnGeXmNgZ +DoDLKvbdhtyeWquC +EObjjvbdqGEFUVaI +EOcLKvbdNPwpumgT +DnbkKvbdZshiYdTO +DoDKjvbdZMSETmkm +DncLKvbdRbDdkhyL +EPCjjvbdTvMQJtBR +EObkKvbdjvXOEBww +DncLKvbdrXPkbiZR +EOcLKvbdFejSOJTq +EOcKjvbdegjvRnRH +EPDLKvbdJvVGDeHJ +EObjjvbdXrlBMtOx +DncKjvbdFejSNhsq +EPDKjvbdBiLBjiGK +EOcKjvbddiirVtzn +EPDLKvbdVBBqTRRy +DoCkKvbdeqaWzkcP +EObjjvbdqYnggREY +EPDKjvbdEARiNZwX +EObjjvbdSQTfifEX +EObjjvbdLBLHNBxR +EPCkKvbdNHCpMpUk +EPCkKvbdKVuGDdfi +EPCkKvbdxrnImRbH +EOcLKvbdZRNEiNFR +EOcLKvbdtbcUvuno +EPCjjvbdJTZAsNXl +EPDLKvbdFVyQPljF +DoCkKvbdieKftoAO +EObkKvbdZMSETnMN +DoCjjvbddePSBvcK +DncLKvbdqUUHSSLU +DoDLKvbdZQldhmEq +DoDKjvbdOTTugFUp +DncLKvbdZsiJZESn +DnbjjvbdtbcUwWPP +EPDLKvbddwzTtRez +DnbjjvbdZoNheFZj +EPCkKvbdKfFgbApu +DoDLKvbdhytfMQmf +DnbkKvbdnGeXlnGy +EPCjjvbdSBcdlIyL +DncKjvbdbAvFFpPw +EObjjvbdzoPpeClY +EOcLKvbdqwQMDIyR +EPCjjvbdmaivxOmu +EPCjjvbdIwsahLqQ +DncLKvbdddoSBwCj +EOcLKvbdrEEhpNvB +DoCjjvbdEPCkKvcE +DncKjvbdePEsLTsr +DncKjvbdmRyVZsEJ +DnbjjvbdZLqdTnMN +EPDKjvbdRbEFMIxk +EObjjvbdJXsbHlRQ +DncKjvbdkDMLQftg +EOcKjvbdOEctJIjd +DnbkKvbdqTsfrRkU +EPDKjvbdkIGkeenL +DoDLKvbdUxhUZjnn +DncLKvbdwyhFexFS +EPDKjvbdbLLfOmcA +DnbkKvbdtbbuXWPP +EOcLKvbdYpmEhmFR +DnbkKvbdxmsHxTIc +DoDKjvbdznoqFDLx +EObjjvbdmfdxMnHZ +EObjjvbdYTMBNUOx +EObjjvbdADRwizJQ +EOcLKvbdMoxQvOGs +EOcLKvbdrWolDJYq +EPCjjvbdeFPRbXDK +DoDKjvbdrDdhpNvB +EPDKjvbdZxdKODLr +EOcLKvbdWSNwadlD +EOcKjvbdxrmhlqbH +DoDLKvbdzoPqEblY +DncKjvbdTkuoBWPJ +DnbjjvbdrykpSaHn +EOcKjvbdKWUfDdgJ +DnbkKvbdZMSEUOMN +EObkKvbdSBcdkhxk +DnbjjvbdIGfyyYXg +EPCkKvbdnBjWwoOV +EOcKjvbdzaAPGgBl +DnbjjvbdkVvmdCXw +DoDLKvbdkDLkQfuH +DoCkKvbdVqnXbFMD +DncKjvbdWWiXuceH +DoCjjvbdBvzdIePv +DncKjvbdLFfICBQu +DncLKvbdeFPRawDK +DncKjvbdjmBkydgP +EObjjvbdVUMtFkuj +EPDLKvbdrSUjmkBN +DoDLKvbdSPsgKFdX +DoDKjvbduDDVXVno +DoCjjvbdMuSqjmAX +EPCkKvbdZyEJmcLr +DnbkKvbdMfcQMouL +DoDLKvbdUMWPAuni +DnbjjvbddZxpYZRC +EPDKjvbdbAvEeopX +DnbkKvbddoErkUUS +DoCjjvbdePErjstS +EOcKjvbdGKeTDHlu +EObjjvbdfIKvSORH +EPCjjvbdUsmTelWK +EObkKvbdaMkBsVMg +DoCkKvbdRjxfVHKs +DnbkKvbdMpYQumgT +DncLKvbdVwIxWEFH +DncKjvbdaMkCTUmH +DoDLKvbdhlFENuDZ +EPCjjvbdZisIPgCG +EPCjjvbdZnnJEdzK +EPDKjvbdGLEsDINV +EObjjvbdYzcFrKVy +EPDKjvbdZirhPgBf +EPDLKvbdKaLGmCXq +EObkKvbddoErkTsr +DoCkKvbdRXNdCkgc +DoDLKvbdEvZQQNKF +DoCkKvbdZoNhdeZj +EPCkKvbdhkddNtby +EPDLKvbdZLrDtNlN +DncKjvbdRbDdlIxk +EPCkKvbdEOcKjwCd +DncKjvbdlqyUyrdJ +DoDLKvbdNddThhkE +EOcKjvbdwyhFewdr +EPDLKvbdiUydwSVC +DnbkKvbdYzcFqjWZ +DnbkKvbdiBoCdwRR +EOcLKvbdpecdsuaI +EPCkKvbdQlxCYnUz +EPDLKvbdVvhxWEEg +EOcLKvbdlZSqryGt +EPCkKvbdUaCQsQqy +DoCkKvbdvAdZSndh +DnbjjvbdmttykKRf +EPCkKvbdYgWdAPTJ +DoCkKvbdlYrqsZGt +DnbkKvbdZsiIxcrn +DoCjjvbddeOqavbj +EObkKvbdbVBfwjsh +EObjjvbdMoxQvOHT +EPCkKvbdRbEFLiYk +DoCkKvbdlhdTqUqa +EOcLKvbdMIbMRYAS +EObkKvbdDncKkWbd +DncLKvbdfSAvzkcP +DnbkKvbdxsOIlqbH +DoCkKvbdADSYKZhp +EPCjjvbdZshiZESn +DoCjjvbdieLGuPAO +EPCjjvbdkHgMFenL +EPDKjvbddBrlrAUN +DncKjvbdddoSCXCj +EPCjjvbdsQWOibvG +EObkKvbdKkBHvAKZ +EObjjvbdkWWmdBww +EObjjvbdnGeXmNgZ +EOcLKvbdyNrgwrhc +DnbkKvbdNddThiLE +DncKjvbdDjHivYKA +EObjjvbdWXIxWDdg +EObjjvbdrMyixlIJ +EOcKjvbdcyyPxYpb +DncKjvbdcyxowxpb +EOcLKvbdhbOcFXQq +EOcKjvbdHDjuibKK +DoDKjvbdiVZeXRuC +EOcKjvbdnBjXYOnV +DnbkKvbdOTTufdtp +DoDKjvbdVAbRTRSZ +DnbjjvbdRXOEDLgc +EOcLKvbdznopdcLx +DncLKvbdRNXayOUz +DncLKvbdSPtHKFdX +EPDKjvbdxUldqYkn +DoCkKvbdZRNEiNEq +EPDKjvbdrbFllGjy +EPCjjvbdUyHszLPO +DncLKvbdxwhibQZk +EOcKjvbdFWYopMie +EOcKjvbdaNKbTVMg +DnbjjvbdliETqUrB +EObjjvbdRXODbkgc +DnbkKvbdTlWPBWPJ +EOcKjvbdOFEThiKd +EObjjvbdMSXMzVQz +EObjjvbdHDkVjCKK +EPDLKvbdqFceTuaI +EOcKjvbdFyUtaDxC +EOcLKvbdmgExMnGy +DncKjvbdtlYWaUBX +DoDKjvbdCDoaWJlf +EPDKjvbdkyTSTYgU +DoCjjvbdqqtjnLAm +DnbjjvbdGYtuAdXb +DoCkKvbdBhjbLIfK +EPDKjvbdNPwqVmfs +DoCjjvbdsrqsYzFD +EPDKjvbdSPsfjFdX +EPCjjvbdZyDjNbkr +EPDKjvbdqZOgfpcx +EPCkKvbdqGDeUVaI +DoDKjvbdUVkpKUAq +DoCjjvbdRpUGjGEX +DoDLKvbdmgFYMmfy +EPDLKvbdRpUHKFcw +DoDLKvbdEvZQPmKF +DoDKjvbdZshhxdTO +DoCjjvbdiZuGMROG +DoDKjvbdfpBzvdYI +EPCjjvbdmgFYNOGy +EOcKjvbdNrtWGdtp +DnbjjvbdWHxVwgYz +EPCkKvbdJbjDRKDY +EPCjjvbduWOYJpsA +DncKjvbdehLVrORH +DoCjjvbdGFjSOItR +DoCkKvbdjuwODbYX +EObjjvbdJTZBSmXl +DnbkKvbdzQoNIiwA +EObjjvbdjJfHilwr +EOcKjvbdJpyeOfOF +DnbjjvbdqFdEsuaI +EPDLKvbdUxhTzKoO +EPDKjvbdBraCsfXS +DoCjjvbdLAjgNBxR +EObkKvbdlhdTqUrB +EPCjjvbdZoOIeFZj +DnbjjvbdrDdhpNua +EPCjjvbdIHHZxxYH +EPCkKvbdiMEdOVCy +DoDKjvbdhgJbxvKV +DoDLKvbdUyHsyjoO +DoDKjvbdGQATXGfZ +DnbjjvbdvAdYroEh +EPCkKvbdhtydvrUb +DoCjjvbdsQWOicWG +DncLKvbdcJMjLGWx +DoCkKvbdIwsaglQp +DoCkKvbdYkrEUOLm +EObkKvbdVvhxWDeH +EPDLKvbdZMRdTnLm +DoCjjvbdADRwizJQ +DoDKjvbdSwjkmzjx +DnbkKvbdBiKbLIfK +EPCjjvbdRyigsDWA +EPDKjvbdRXOECkhD +EObjjvbddxZtTqez +EObjjvbdbBVdfPow +DncLKvbdMfcQNQVL +EPDKjvbdVBBqTQrZ +DncKjvbdZMRctOLm +DncKjvbdGGJrOIsq +EPCjjvbdZMSETmlN +DoDLKvbdhlEdOVDZ +EOcLKvbdOhAXyAZB +DoCkKvbdyOTIYSiD +DoCjjvbdUtNUGMVj +EObkKvbdWXJYWDdg +EOcLKvbdBhjbKhej +EObkKvbdVwIwvDdg +EPDLKvbdzjUpQDsU +EOcKjvbdqAiFAXHd +DoDLKvbdqrUkNjaN +EOcKjvbdYORAYUvU +EOcLKvbdcIljLFwY +DnbkKvbdVwJXvDdg +DoDKjvbdVBCQsRSZ +DoDLKvbdmuUzKiqf +EObkKvbdJYUCILpp +EPDKjvbdsQVoKCvG +EPDLKvbdmoyyVkZC +EPDLKvbdsCGNLfjy +EOcKjvbdbiNKLGWx +DoCjjvbdrpVnjDWG +EObkKvbdfVzxPizs +DnbkKvbdRXODcLgc +EPCjjvbdjJfIJlxS +DoCjjvbdZLqcsnLm +DncKjvbdjuvnECXw +DoDLKvbdEPDKkXCd +DnbjjvbdOSsvGduQ +DoDKjvbdIMBzmvpk +EPCjjvbdqrUkOLAm +EPCjjvbdTkvOaVoJ +EObjjvbdozmdKwoA +DncLKvbdDxXkstTl +EOcKjvbdfMewHMik +DoDLKvbdGKeTCgmV +EObjjvbdxnSgwsIc +EPCkKvbdaaVdepPw +EObkKvbdqGEFUVaI +DncLKvbdjblKpgUg +DoDLKvbdRWnEDLhD +DnbjjvbdFxuVAcxC +DncKjvbdqZOhGpcx +DoCkKvbdfHjvRnQg +DnbkKvbdwMvANDeN +EObkKvbdFfKSOIsq +DoCjjvbdmajXYPNu +EObkKvbdANHyTXZx +EPCjjvbdLFfHbAqV +DoCjjvbdVgwuxHYz +EPCjjvbdQvmcblHc +DoDKjvbdaSFbhUGL +DncLKvbdzHZMANFX +DncKjvbdySnJNRbH +DoCjjvbdMpYRVnHT +EObkKvbddePSBwDK +EPCkKvbdMfcPmQUk +EObjjvbdMgCpNQVL +DoDKjvbdrEFIonWB +DoDLKvbdFjdsCgmV +EObjjvbdwtmFRYlO +DnbjjvbdIwtBgkqQ +EPCjjvbduaDxrndh +EPDLKvbdShzKRABM +DnbjjvbdfHjvRnRH +EOcKjvbdBiLBjiGK +EPCjjvbdCEPaWKNG +DoDKjvbdtbbuWuoP +DoDKjvbdegkWRmqH +DnbjjvbdNeETiJLE +EPCkKvbdjcLkRHUg +DnbjjvbdjvXOEBww +EOcLKvbdTlWPAvOi +DoCjjvbdrMyixkhJ +EObkKvbdqGEEtWAh +DncKjvbdbBVeGQPw +DoDLKvbdpssfqqjt +DnbkKvbdFWZPomJe +DoDKjvbdSBcdkiYk +DoCkKvbdvBEZSoFI +EOcKjvbdRaceLhxk +EOcKjvbdJKEAKQHE +DoDLKvbddZyQYYpb +EObjjvbdeXzTsqez +DncLKvbdCSaCtGXS +EPCkKvbdlZSrSyHU +EOcLKvbdTJZiqABM +DncLKvbdvAdYsOdh +DnbkKvbdcyxoxZQb +DnbkKvbdhanbdwRR +EPCjjvbdbBVeFopX +DncKjvbdGLFTDHmV +DoCjjvbdiZuGLpmf +EOcLKvbdJbjCqJbx +EObkKvbdGdLWJbKK +DoCjjvbdRkZGVHKs +DoCjjvbdGckWJajK +DncKjvbdAMgxrvyx +EPCjjvbdEPDKjvbd +EOcLKvbdkDLjqGtg +DoDLKvbdNPxRVnGs +DoDKjvbdySmhmRag +EPCjjvbdVqnXadkc +EPDKjvbdTulPitAq +EObjjvbdGLErcHlu +DoDLKvbdHELWKCJj +EObjjvbdbVCHYLUI +DncKjvbdqvpLbiZR +EPCjjvbdvAdZSoFI +EOcLKvbdfjfzcGAE +DnbjjvbdaNKartmH +EOcLKvbdcTDKsdJa +DncLKvbdOSsufduQ +DnbkKvbdyYIiapZk +DoCjjvbdunszqKoU +DoCkKvbddndsLTsr +DoDKjvbdxxJKBoyk +DoDLKvbdrovOibvG +EPCkKvbdiLddOVDZ +EPCkKvbdiBncFWqR +EOcLKvbdZQldiNFR +DoCkKvbdOEctJJKd +DoCkKvbdrMzKZMIJ +DnbkKvbdVhYVwgYz +EOcLKvbdQvnDblHc +DoDLKvbdmJEURVRa +DoDLKvbdCTBDUFwS +EPCkKvbdNrsvHEuQ +DnbkKvbdegkVqnRH +DoCjjvbddBrlrATm +DoCkKvbdCJLCLJFj +EOcKjvbdxZgefXeS +EPDKjvbdZtJJZDsO +DoCkKvbdQvmdDMID +DoDLKvbdRaceLhxk +DnbkKvbdSBdFLhxk +DoDKjvbdOTTufdtp +DoDLKvbdnQZxujyC +DnbjjvbdZshhyETO +DoCjjvbdtvOYJqTA +DncLKvbdRMxBxmtz +DnbjjvbdEzsqElCi +EObjjvbdKefHbAqV +DnbkKvbdmpZyWKyC +DncLKvbdNQXqWOGs +EPDLKvbdVTlsekuj +EPCkKvbdGcjvJajK +EPDLKvbdIryArlxM +DoDLKvbdwyhGFwdr +EPCkKvbdzaAOgGal +DncLKvbdiHKCxvJu +EOcKjvbdLBKgMbXq +DoCjjvbdTppoVVIN +EPDKjvbdNPxQvOHT +DnbjjvbdTvLpJsaR +DncKjvbdnVUyjiqf +EPCjjvbdVUNTfLvK +EOcLKvbdDxYLtTtM +DnbkKvbddePSCXCj +EPDLKvbdgGLzOHHA +DoCkKvbdTukpKTaR +DncLKvbdVUMtGMWK +EObkKvbdXnRAYVWU +DncLKvbdyqOmJJwA +DoDKjvbdFVyQQNKF +DncKjvbdvOszqLOt +EPCkKvbdZRMdhmFR +EPDLKvbdhlFDmuCy +EOcKjvbdkIHLeenL +DnbjjvbdqceJQOWB +DoCkKvbdzitpPdSt +EPCjjvbdFeiqmhtR +DoDLKvbdsQVoJcVf +EPDLKvbdUQpnuVIN +DoDLKvbdWSNxBdlD +EPCjjvbdpyPHgQcx +EOcKjvbdUyHsyjoO +DoCjjvbdxrnJNSCH +DoCjjvbdKDKCpjCx +EPDLKvbdxsOIlrBg +DoCkKvbdnGdxMnHZ +EPDLKvbdfHkWSNpg +DnbjjvbdkHgMGFnL +EOcLKvbdxmsIYSiD +DoDLKvbdEXxLsssl +DoDKjvbdjFLGuPAO +EOcLKvbdeEoRawCj +DoDKjvbdyOTIYSiD +DnbjjvbdIHGyyXxH +DncKjvbdTqQoUuHm +EOcKjvbdMfcQNPuL +DnbkKvbdatbGxKsh +DoDKjvbdOTUWHEtp +EPCkKvbdGLFTCgmV +DoDKjvbdkHfkfGNk +EObjjvbdJXtBhMRQ +EObkKvbdRpUHKGEX +DnbjjvbdiUzFWrVC +EPCkKvbdliETqUrB +DnbkKvbdZjTIQHBf +DoCjjvbdZMSETnLm +EPDLKvbdFWYoomKF +EPDLKvbdRaceLhxk +DoDLKvbdEASJNZwX +EPDLKvbdGZUtaEXb +DncLKvbdyNrgxSiD +EOcKjvbdbVBgXkTh +EPCkKvbdvOszpkOt +EObkKvbdKfGHbBRV +DncLKvbdjvXOEBxX +EPDLKvbdvAcyTPFI +EObjjvbdNsUWGeUp +EPCjjvbdZtIiZDrn +DoDLKvbdrRtkOLBN +DncKjvbdptUHSSLU +DncLKvbdWSOXaeLc +EPCkKvbdiLeDmuCy +DoCjjvbdhyuFkqNf +DnbkKvbdzoPqFDMY +DoCkKvbdGFirOItR +DoCjjvbdEObjkXCd +DnbkKvbdjKFgilwr +EPDLKvbdVwIwvEFH +DoDKjvbdfIKvRmpg +EPDLKvbdOFDsiIkE +EPDLKvbdGKdrcIMu +EPDKjvbdZnmiEeZj +DoDKjvbdKWVFceHJ +DncKjvbdvBDySneI +DncKjvbddeOqawCj +DoCkKvbdEztRFLbi +EPDKjvbdMpXpumgT +EPDKjvbdtunYJqTA +EPCjjvbdegkVqmpg +EObjjvbdlYsRsZHU +EOcKjvbdbUagXkUI +EPDLKvbdANHySvyx +DnbkKvbdmJEUQtqa +EPDKjvbdVUNUFlVj +EPCkKvbdvvlBVaVu +DoCjjvbdmozZWLYb +DoDKjvbdwzIFfXeS +DoDLKvbdNQXpvOGs +DncLKvbdEYXlTstM +EPCkKvbdbUbGwkUI +EOcLKvbdLBLHNBxR +DnbkKvbdePErkUUS +EObjjvbdyXiJaoyk +DncLKvbdVrNxBeLc +DoCjjvbdaRebhUGL +EOcKjvbdxsNhmSBg +EOcKjvbdXrkaMsoY +EObjjvbdhuZdwSVC +DoCkKvbdqGEFUWAh +DoDKjvbdegkVrNpg +DoCkKvbdtcCtvuoP +EOcKjvbdmJEUQtrB +EOcKjvbdWXIwucdg +DoDLKvbdhgKCyWJu +EPCjjvbdcSbkUDjB +EPDKjvbdLrWmZuQz +EPDLKvbdXrlAlsnx +DnbkKvbdKNADygUa +EPDKjvbdyNrhXsJD +EOcLKvbdIsZBSlxM +EPCkKvbddndrkTsr +DnbjjvbdFyUuBEYC +EPCkKvbdJcKCpjCx +EObkKvbdbBWFGQPw +EOcLKvbdFjdrbhNV +EPDLKvbdrDdiQNvB +EObkKvbdkHgMGGOL +EPCkKvbdkySrSyHU +DncLKvbdaaWEfQQX +EObkKvbdehKvRmpg +DnbkKvbdmIdURVRa +DoDLKvbdvBEZSneI +DoCkKvbdNdcshhjd +DncLKvbdZyEKOCkr +DoCkKvbdVrNwbFMD +DnbkKvbdnCKXXoNu +EPDKjvbdSQTgKGDw +EObkKvbdaRfCgtFk +EObjjvbdkWXNcaww +EObkKvbdDihJuxKA +DncLKvbdnVVZkKSG +EPCkKvbdVBBqSpqy +DncLKvbdqGEFUWAh +DoCkKvbdsPvOjDWG +DncKjvbdySmiNRbH +DoDKjvbdraemLfjy +DoDLKvbdnPzZWKxb +DnbjjvbdRjxfVGkT +DoDKjvbdGLEsDHlu +DnbjjvbdRotHKFdX +DoCkKvbdRpUGiecw +DnbjjvbdZjTHogBf +EPDKjvbdcTCjtDia +EOcKjvbdrounibuf +EOcKjvbdVBCRSqRy +EPDKjvbdEvZPolie +DnbkKvbdzRPNJKXA +DncLKvbdBhjbKiGK +DnbkKvbdqrVKmkBN +DnbjjvbdBraDTewS +DnbkKvbdJcKDRJbx +DoCjjvbdbUbHYLUI +DoDKjvbdUyITykOn +DoCkKvbdYlSEUOMN +EPCkKvbdRpUHKGEX +EObkKvbdTAFJICPE +EPDKjvbdrpWPJcVf +DoCkKvbdZnnJFFZj +EPCkKvbdkVvmcaxX +EOcKjvbdyzdnRgiI +EObjjvbdqAiFAXIE +DncLKvbdWWiYWDeH +EPCjjvbdqlzKZLgi +EObjjvbdauCGwkUI +DoDLKvbdtTSSxydc +EObkKvbdbVCGxLTh +EObkKvbdkWWmdBxX +EObjjvbdRNXaxnUz +EOcKjvbdwXLaVaVu +DncKjvbdqTtGqrKt +DncKjvbdIjEAJpGd +EPDKjvbdHffyyXwg +EObkKvbdSCEFLiYk +DncKjvbdiVZeXRuC +DoDLKvbdWWhwudFH +EPDLKvbdrRuKmkAm +EObjjvbdxsNhlqag +EPDKjvbdcJMikFwY +DoDKjvbdpyPHfpdY +DncKjvbdwyhGGXdr +DoCkKvbdkVwODbXw +DncLKvbdJcJbpibx +EPCkKvbdsQWPJcVf +EOcKjvbdZRNEiMdq +EObkKvbdjvXOECXw +EObjjvbdZxcjODLr +DncKjvbdRWmdDMID +DncKjvbdjvWmcbYX +DoCjjvbdnBjXXoOV +DncKjvbdiBnbdwQq +EPDKjvbdDoDKjwCd +EPCkKvbdFxuVBEYC +DncKjvbdFVxopMie +EOcLKvbdKWUfEEfi +EPCkKvbdNrtVgEtp +DoDLKvbdfoazwDxI +DoDKjvbdqquKmkAm +EPDKjvbdhbPCeXRR +DncKjvbdZtIhyETO +EPCkKvbdQwNdCkhD +EPDKjvbdhzUfMROG +DnbjjvbdrpVoKCuf +EPDLKvbdtlYWaUAw +EOcLKvbddoErjstS +DnbkKvbdyzeORghh +EPDLKvbdZnmhdeZj +DoCjjvbdcIlikGXY +EOcLKvbdLAkHNBxR +DoCjjvbdtkwwBUAw +DoCjjvbdgGMZnHHA +DnbkKvbdUsmTfLuj +EOcLKvbdqZPHgQcx +EPDLKvbdLqvlytpz +DoDLKvbdqdFIomvB +EObjjvbdBhjbKhfK +EOcLKvbdrMyjYlIJ +DncKjvbdDncKkXCd +DnbkKvbdNQXpunHT +EPDKjvbdZjSgofbG +DnbjjvbdBiKbLIej +DoCjjvbdGAoQxizm +EOcLKvbdwtldqZLn +DoDLKvbdIrxaSmXl +DoCjjvbdNHDQMpUk +EOcLKvbdTkunaWOi +DncLKvbdNHCpMpVL +DoDKjvbdelfXHNKL +EObjjvbdcyxpYYqC +DoDLKvbdZGwEAOri +DoDLKvbdIxUCHkqQ +DoCjjvbdoznEKxPA +EOcKjvbdbLMGPNcA +EObjjvbdiiegilxS +DoDKjvbdZRNFImFR +DncLKvbdRbDeLhxk +EPCkKvbdqlzJxlHi +EOcLKvbdhkeDnUby +EPCjjvbdhaoDEwQq +EPCkKvbdFkFScHlu +EPCjjvbdJKEAKQGd +DoCkKvbdpxngfqDx +EObjjvbdUGznLwWF +EObjjvbdVZHsykPO +DncLKvbdYlRdUNlN +EPCkKvbdHDkWKBjK +DncLKvbdjKFhKMxS +DnbjjvbdnBjWxPOV +EObkKvbdtcCtvvOo +DnbjjvbdTpqPUthN +DncLKvbdMoxQvOGs +DnbjjvbdfNGXHMjL +EPDKjvbdhgJcZVjV +DoDLKvbdNGbolpVL +EPDKjvbdatbHYLUI +DncLKvbdczZPwxqC +DnbjjvbdZxcimblS +EPDLKvbdKaKgMbXq +EOcLKvbdtbcUwWOo +DnbkKvbdJutfEEfi +DoCjjvbdmIdURUqa +EPCjjvbddBrmSATm +EPCkKvbdXsLaNUPY +DnbkKvbdNPwpvOGs +EOcKjvbdIwsaglQp +DoCkKvbdlhdUQtrB +DoDLKvbdGdLWJaij +DoCjjvbdwXMAvAvV +DnbkKvbdbrbkTdJa +EPDKjvbdFVxpQNJe +DoCjjvbdHDkWJbKK +DnbkKvbdjvXODbYX +DoCjjvbdemFwGmJk +DoCjjvbdQdCaPpcr +EOcKjvbdqcdiQNvB +DncLKvbdbBWFFoow +EOcKjvbdKaKgMawq +EObkKvbdLBKgMawq +DncKjvbdcbSmSAUN +DoCjjvbdyOTHwsJD +EOcLKvbdOStVfeUp +EObkKvbdHffyyYXg +EPCjjvbdmuUykJrG +DoDLKvbdJYTbILpp +DncKjvbdnGdwlmgZ +EPDKjvbdZQldhldq +EObjjvbdUaBpsRSZ +EOcKjvbdrzLpSaIO +DnbjjvbdLGFgbAqV +EPDKjvbdXrlAmUOx +EPDLKvbdtSqryZeD +DoDKjvbdtlXwAtAw +DoDKjvbdaRebgsfL +EObjjvbdUWLpKUAq +EObjjvbdQvmccLgc +EOcLKvbdznopeDMY +EOcLKvbdIwsbHkpp +EPDLKvbdziuQPcsU +EPDLKvbdelevgMik +DoDKjvbdTAFIgbOd +DoDLKvbdbBWFGPow +DoDKjvbdYqNEiMeR +EOcLKvbdhficYuiu +EOcKjvbdyTOImRbH +DncKjvbdiLeDmtby +EPDLKvbdUsmTekvK +DoCkKvbdkCkkQftg +DoCkKvbdVTmUFlVj +DoCkKvbdTIyjRAAl +EOcKjvbdbUafxKtI +EOcKjvbdZsiIxdSn +DoDKjvbdSCEElIyL +DnbjjvbdBsAbsfXS +DoCkKvbdBcpAuimG +DoCkKvbdVwIwvEEg +DnbjjvbdajlFoNcA +EPCkKvbdtSrTYzFD +DnbkKvbdGFirNhsq +EOcKjvbdapHHELzd +DoDLKvbdiUyeXSUb +DnbjjvbdtAGqIABS +DnbkKvbdXsLaMsnx +DoCkKvbdeEnqawDK +EOcKjvbdDxXkstUM +DnbjjvbdcyxoxZQb +DoDLKvbdlrZVZrci +DoCkKvbdTAEiICPE +EOcLKvbdpyPHfpcx +EPDLKvbdVBCRTQqy +DnbjjvbdmJEUQtqa +DnbjjvbdkClKqHVH +EObkKvbdCJKajiGK +EObkKvbdeAURMxJf +EPDLKvbdcSbkUDjB +DncLKvbdsCFmLfjy +EPCkKvbdIwsahLqQ +DoCkKvbdrJAJeMne +DoDLKvbdIHGzYwxH +DoCjjvbdGckVjBjK +EObjjvbdegkVqmqH +DoDLKvbdLKaIWAKZ +EPDLKvbdaRfChUGL +DoDLKvbdyYJJaozL +DoCkKvbdrWpLbhyR +DoCkKvbdLGGIBaRV +DoDKjvbdKyRJrztf +DoCkKvbdjuvnEBxX +EObkKvbdNeEThhkE +EPCjjvbdQwNcbkhD +DoCkKvbdJqZePGOF +EObjjvbdNGbomQUk +EObkKvbdkxrqsZHU +EOcLKvbdrounjDVf +DoDLKvbdkClLRGtg +EOcLKvbdbKkfOnDA +EPCkKvbdRDbaPpcr +EPDLKvbdkHgLefNk +EOcLKvbdFVxpPmKF +EObkKvbdsrrSxzEc +DnbkKvbdFeirOIsq +DncLKvbdzitopDrt +DoCjjvbduWOXjQsA +EPCkKvbdyXhjCPyk +DoDKjvbdaaWEfPow +DncLKvbdvAcySneI +EObjjvbdADRwjZhp +EObkKvbdnPyxvLYb +DncKjvbdijGIJlwr +EPCjjvbdJcJbqJcY +DnbkKvbdkMbLydgP +DoCkKvbdRDbaQQcr +DoCjjvbdxsOIlrCH +DnbjjvbdKQydnfOF +EPDKjvbdcImKKfWx +DnbjjvbdcImKKewY +EObkKvbdqdFJPmua +EObjjvbdajkennDA +DnbjjvbdZyEKNcLr +DoCjjvbdKWVFdEgJ +EPDKjvbdWXIwuceH +DnbjjvbdqiAJdlne +EOcLKvbdkyTRryGt +EPCjjvbdpaJFAWgd +EPCjjvbdmJDsqVSB +EPCjjvbdREDAopdS +DoCjjvbdRpUHKFdX +DncKjvbdptUHSSKt +EPCjjvbdiCObdvpq +DncLKvbdNwnuzcmt +DncKjvbdqdFIpOWB +DoDKjvbdjggLefNk +EObkKvbdrNZiyLgi +EPCkKvbdaSFcITfL +DnbjjvbdGLFTDINV +EPCkKvbdiLeENuDZ +DncLKvbdZyEJmcLr +EObjjvbduDCuWvOo +DoDKjvbdNQXqWNgT +DncKjvbdVBCRTRRy +EPCjjvbdSQUGifEX +EOcLKvbdANIZSvyx +DoDKjvbdvBDyTPFI +DnbkKvbdEPCkLWbd +DoCkKvbdyYIjCPyk +DnbkKvbdelewGmKL +EPDLKvbdatbGxLUI +EPDLKvbdTvLojTaR +DoCjjvbdhtyeWrVC +DoDKjvbdzeZnzdzQ +DnbjjvbdyzdnRhJI +EPCjjvbduLxWaUBX +EOcLKvbdkyTRsYgU +DnbjjvbdCTBCsewS +EObjjvbdjAPgApHK +EPDLKvbdwkWdHzyf +EObjjvbdsPvOicWG +DoCkKvbdTulPisaR +DnbkKvbduCcUvuoP +EObkKvbdZRMdiMeR +DoCkKvbdSPtHJfDw +DncLKvbdKaLGlaxR +DnbkKvbdRpTgKGDw +DoCjjvbdWXJYWEEg +EObjjvbdWXJYWDdg +EOcKjvbdKCjCqKCx +DnbkKvbdakMGPNcA +DoDKjvbdwkXDgzzG +EObkKvbdNHDPlotk +DncLKvbdyzdmrIJI +EObkKvbdFkErbhMu +EPCkKvbdNeDsiIjd +DoDKjvbdIGfyyXxH +DoCjjvbdZyDinDLr +EPCjjvbdemFvfmJk +EObjjvbdJYTbILqQ +DnbjjvbdWXIwucdg +DoCjjvbdiHKCxvJu +EPDKjvbdfpBzwDxI +DoCjjvbdaNLCStlg +EPCkKvbdnVUykJqf +DoCjjvbdyYIjBozL +EPCjjvbdzjUpQDsU +DoDLKvbdZxcjOCkr +EPCkKvbdeFOrBvcK +EPDKjvbdKaKflaxR +EOcLKvbdfMevgMjL +EPDKjvbdGckWKCKK +DoCjjvbdKVuFdEgJ +EObjjvbdfMfWfmJk +DoDLKvbdMfbomQVL +EPDLKvbdRkYeuGjs +EOcLKvbdKfGHaaQu +EObkKvbdoznDjwoA +EOcKjvbdUMWPBVoJ +DoCkKvbdFjeSbgmV +EPCjjvbdrEFJQOWB +EOcLKvbdvAcyTOdh +DnbjjvbdWfYzUAOs +EObkKvbdTkuoBWPJ +DnbkKvbdFpASvgFy +DoCjjvbdczZQXyRC +DoCjjvbdRDcBQQdS +DoDKjvbdqYngfqDx +EObkKvbdWRmwbElD +EPCjjvbdFyVVBDwb +EObjjvbdBhjbKhej +DncLKvbdzaAPGgBl +EObkKvbdTppoVUgm +DoCjjvbdbrcLTcjB +EPCkKvbdGLFTCglu +DoDLKvbdDwxMUUUM +EPCjjvbdNQYQumgT +DncKjvbdmfeXmOGy +EPCjjvbdwtmFRYkn +DoCkKvbdsBfMlGjy +DncLKvbdRpUHKGDw +EObjjvbdjblLQfuH +EObjjvbdJYTbHlRQ +DoCkKvbdmttyjiqf +DoCkKvbdZQldiMdq +EPDKjvbdFejSNiUR +EOcLKvbdjgfkfFnL +DnbjjvbdMpYQvNgT +DnbkKvbdUyIUZjnn +DnbkKvbdJbjDRKDY +EPCjjvbdeEnrBvcK +EOcKjvbdyzdnSIIh +DoDKjvbdDoDKjwCd +DoDLKvbdCSaDUFwS +DoDLKvbdIrxaTMwl +DnbkKvbdRNXayNtz +DoCkKvbdxxJKBoyk +DncLKvbdnGdxNOGy +DnbjjvbdySmhlqbH +DoCkKvbdxwhjBoyk +EPCjjvbdZQleIleR +EPCjjvbdaRfChTek +EOcKjvbdYTMBNUPY +DoCjjvbdegkWSNpg +EObkKvbdziuQPdTU +EOcKjvbdnCKXYOmu +DoCkKvbdZnmhddzK +EObjjvbdzaAPGgBl +DoDLKvbdePFSjtTr +EPCkKvbdNrtWGeVQ +EPCjjvbdelfWfmKL +DoDKjvbdKxpjSztf +EPDKjvbdxmsIXsIc +EPCjjvbddZyPxYqC +DoDKjvbdvOszqLOt +DncKjvbdatbGxLTh +EObjjvbdzoQQdbkx +DoCjjvbdZRMeImEq +EOcKjvbdqTtGqqjt +EOcKjvbdqAheAWgd +DnbjjvbdySmhmRag +DncKjvbdjKFhJlwr +EPDKjvbdqFceUWBI +DoDKjvbdsBemLgLZ +EPDLKvbdKQzEoFnF +EOcKjvbdFjdsCgmV +EObjjvbdpfEEtWBI +EPDKjvbdZxcjOClS +EPDKjvbdnBivwoOV +EPCjjvbdrylQTAhO +EPDKjvbdKaLGmBxR +EPDKjvbdHgGzYwxH +EObjjvbdkHflGFmk +DnbjjvbdqGDeUVaI +EPDKjvbdMgDQNQUk +DncLKvbdSKyGVHKs +EOcKjvbdqFdEsvAh +EOcKjvbdYkrETnLm +DnbkKvbdqBIeAXHd +DncLKvbdZQldhmFR +DncLKvbdFjeSbhMu +EPCkKvbddePRavcK +EPCkKvbdssRsYzEc +EPCkKvbdRadFLhxk +DnbkKvbdVvhxWEEg +EOcLKvbdIryArmYM +EPCkKvbdKfGHbAqV +DncKjvbdEKIJuxKA +EPDKjvbdIwsbIMRQ +EObkKvbdzaAOfgBl +DncLKvbdeUAUASlv +DnbjjvbdlqxuZsDi +DnbjjvbdUWMQKTaR +EOcLKvbdNGbpNPtk +EPDKjvbdWSOYCEkc +DoCkKvbdjggMGGOL +DoCjjvbdSQUHJecw +DncLKvbdZyDjODMS +EObjjvbdfpBzvcxI +EOcLKvbdTlVoAvPJ +DnbjjvbdVviYWEFH +EPCkKvbdZnmiFFZj +EObjjvbdNGbpNQUk +DoDLKvbdrbGMkfjy +DoDLKvbdxnShYSiD +EObkKvbdJYTahMRQ +DoDLKvbdoAKzshEO +DoCkKvbdZxcjOCkr +EPDLKvbdRWmdCkgc +EPCkKvbdGFiqnJUR +DoDKjvbdRzJgsDWA +DncLKvbdptTfqqjt +EPDKjvbdmIctRUqa +EObkKvbdnBiwXoOV +DnbjjvbdfMevfljL +EObkKvbdBraDUGWr +DncKjvbdUxhTzKnn +DoCjjvbdmfdxMmfy +DnbjjvbdhuZeWrVC +DnbkKvbdLiCLpxAS +DnbjjvbdKfFgbApu +DnbjjvbdziuPpETU +DoCjjvbdwuNEqZLn +EPCkKvbdEXwksssl +EPCjjvbdhgKCxujV +DoDKjvbdhlEdOVDZ +DncKjvbdLAjgMbXq +DncKjvbdOFEThhkE +DoCkKvbdANHxrvzY +EPCjjvbdZtIiZDrn +DoCjjvbdYpldhmEq +DncLKvbdqwPlDIyR +DncLKvbdUtNUFlWK +EObkKvbdkWXODbYX +DnbjjvbdRzJhSbvA +DoCkKvbdEJgjVxKA +DncKjvbdxnSgxShc +EObjjvbdbUbHYKsh +DncLKvbdZoNiFEzK +EPDKjvbdbiMjKevx +DnbkKvbdIwsbHlRQ +EObjjvbdhWyAzzAJ +EObkKvbdqvpLcIyR +EObjjvbdGGKSOIsq +EObkKvbdTpqPUthN +DncKjvbduaEZTOdh +EObkKvbdJJdAJofd +DoCkKvbdEKIJuwjA +DncLKvbdDnbjkXDE +DnbjjvbdhbObdwQq +EObjjvbdunszpkPU +EPCjjvbdwNWANDdm +EPDLKvbdozmcjxPA +EObjjvbdZnmiFFZj +DnbjjvbduDDUwVno +EOcKjvbdZjShPfbG +DncLKvbdADSXiyhp +DoCjjvbduCcVXWPP +DnbkKvbdffLzOHHA +DncLKvbdBdPaWJlf +EPDLKvbdJvVGEFGi +EPCkKvbdvwMBWBWV +EObjjvbdijGHjMxS +EPCkKvbdaNLCTVNH +EPCjjvbdbAudeopX +DoDKjvbdozmcjwoA +EPCjjvbdYlRctOMN +DoCjjvbdDoDLKvcE +EObkKvbdVqmwaeMD +DnbjjvbdqvolChyR +EPCkKvbdRkZGVGjs +DoDKjvbdjvXOEBxX +DoCjjvbdIHHZyXwg +DnbkKvbdLBKgNCYR +EPDKjvbdyNsHxShc +EOcKjvbdyzdmqhJI +DnbjjvbdqFcdtVaI +EObjjvbdrJAKElne +DncKjvbdTvLpJtAq +EObkKvbdDoDKjvbd +EPCjjvbdYlRcsnLm +DoDKjvbdegkVqmqH +EPDLKvbdZHXEAPSi +DoDKjvbdakLennDA +DncLKvbdrDdiPmua +DoCjjvbdhbPDEwRR +EPDLKvbdtcDUvuno +DnbjjvbdEKHjVxKA +EOcLKvbdYqMdhmFR +EPDLKvbdmttzKiqf +EPDLKvbdTkvPAuoJ +DncLKvbdVAbRTQqy +DncLKvbdLBKflbYR +DoCjjvbdZyDimcMS +EOcKjvbdFpATXHFy +EObkKvbdnCJwYOmu +EPCkKvbdVZHszLPO +EPCkKvbdCSaDTfXS +DncKjvbdNVSqjmAX +EPCkKvbdFjdrbhMu +EPCkKvbdbsCkUDjB +EObjjvbdMowpumfs +DoDLKvbdRotHJecw +DnbjjvbdTfzmkwWF +EObjjvbdBcpAvKNG +DoDLKvbdWHxWXfxz +EPCjjvbdqUUGrSKt +DncLKvbdliDsqVSB +DnbkKvbdBdQAujMf +DnbkKvbdWXIxVcdg +DoCkKvbddePSCXCj +DnbjjvbdZirhPfbG +DnbjjvbdyXiKBozL +DnbjjvbdznpREcMY +DncKjvbdJcKCqKCx +EPCkKvbdJbibpjDY +EPDLKvbdkClLRHVH +EPDKjvbdTvLoisaR +EOcKjvbdZGwEAPSi +EPCkKvbdKRZdnenF +DncKjvbdfMfXGmJk +EPCkKvbdhfibyWJu +EOcKjvbdMIbLqYAS +EPDLKvbdbUbHXjtI +EObkKvbdCSaDUFwS +EPDLKvbdGGJqnJUR +EOcLKvbdDoDKjvbd +DnbjjvbdFkFTDIMu +DnbjjvbdgFlZnGgA +DoCkKvbdakLfPODA +EPDLKvbdDwwlTstM +DoCjjvbdMJBkqYAS +DnbjjvbdiGjCxujV +EPDLKvbdVwIwuceH +EPDLKvbdZyEKOCkr +EPDKjvbddoFTLTtS +DoCkKvbdXrlAlsnx +EOcLKvbdZoOIeEzK +DnbjjvbdaMjbTVMg +EPDKjvbdeOeTKssr +DncKjvbdSKxetfjs +DoCjjvbdpxnhGpcx +EPDLKvbdmtuZkJrG +DoCjjvbdYkqdTmlN +EOcLKvbdJuuGEEfi +DoCjjvbdhzUfMROG +DncLKvbdddnrBvbj +EOcLKvbdWSNwbFMD +DoDLKvbdtSrTYydc +EPCjjvbdRjxetgKs +DncKjvbdFxttaEYC +EPDLKvbdiBncFWpq +DnbjjvbdyTOImSCH +DoDKjvbdcyyQXyRC +EOcLKvbdZLrEUOLm +DoCjjvbdXmqAYVWU +EPCjjvbdUsltFkvK +DncKjvbdLqvmZuQz +DnbjjvbdZjTIQGaf +DoDKjvbdzoPpeCkx +EPDKjvbdGGKSNhsq +DncKjvbdtSrSxzFD +EPCkKvbdyOTHxShc +DnbkKvbdehKvSORH +DoDLKvbdWIXvYHYz +EObkKvbdDoCkLXCd +DoDLKvbdLBKflaxR +EPDLKvbdKQzFOenF +EObjjvbdjFLHVPAO +EObkKvbdFeiqmhsq +DoDKjvbdRotHKFdX +DnbkKvbddZxpYZQb +DncKjvbdqqtkNkBN +EPDKjvbdZjShPgBf +DoCkKvbdNHCpMouL +EObjjvbdxZgefYFS +DoCjjvbdNrsvHEuQ +DoCjjvbdwzHeewdr +EObjjvbdvPTzpkPU +EPDKjvbdrounibvG +DnbkKvbdpstGqqjt +EPDLKvbdeFOrCXDK +EOcLKvbdGBPRYizm +DoDLKvbdNwnuzdOU +DnbkKvbdRMwaxnUz +EOcLKvbdDihKWXjA +EObkKvbdFeirOJTq +DoDLKvbdSKxeuGjs +EOcLKvbddndsKssr +DnbjjvbdiCPDEvpq +EOcKjvbdMoxQumfs +DnbkKvbdfNGWfljL +DnbkKvbdIHGzZXwg +EObjjvbdTlWPAvOi +DoDLKvbdnPyyVkZC +EOcKjvbdkWWmdBxX +EObkKvbdEJgjWXjA +DnbjjvbdkMalZdgP +DnbkKvbdsCGNLfjy +DnbjjvbdYqMeIleR +DncLKvbdMgComPtk +DoCkKvbdMfbolouL +DncKjvbderAvzlDP +DnbjjvbdqwQLcIyR +EObjjvbdcImJkFwY +EPCjjvbdYzberKVy +DoCjjvbdEzsqElCi +EObkKvbdRotGiecw +EPCkKvbdGLErcINV +DoCkKvbdYpmEiMdq +DoDKjvbdJXsaglRQ +DnbkKvbdFVxpPmJe +DnbkKvbdxUmEpyLn +EPCjjvbdLrXMytpz +DnbkKvbdhtzEvqtb +EPDKjvbdDxYLstTl +EPCkKvbdiBoDFXQq +EPCkKvbdZoOJEeZj +DoCjjvbduDCuWuoP +EObkKvbdjcLkQfuH +DoCkKvbdcImKLGWx +EPDLKvbdEYXlUUTl +EOcLKvbdZLqdTnMN +EOcKjvbdmozYujyC +DncLKvbdJpzEnfOF +EOcLKvbdiCPCdvpq +DncKjvbdADRxKZhp +DoDLKvbdmJDsqVSB +EObkKvbdnBiwYPOV +EObkKvbdqwQMDIxq +DncKjvbdeFOqbWbj +EPDKjvbdmfeYMmfy +DnbkKvbdGLFSbhNV +DoDLKvbdwkXDgzzG +EObkKvbdbAvFFpQX +EPDLKvbdyXhjBoyk +DoCjjvbdMfbpMouL +DoCjjvbdREDApRES +DncLKvbdmajWwnmu +DoDLKvbdIidAJofd +DoCjjvbdSZihTCvA +DoCkKvbduLwvaUBX +EPCkKvbdiHJbyVjV +EObkKvbdGYtuAdXb +DoDLKvbdCTBCtFwS +EOcLKvbdhlFENtby +DoCkKvbdySnIlrBg +EPDLKvbdwuNFQyMO +DncKjvbdlqxtzTDi +DoDKjvbdWWhxWEFH +DoCkKvbdiHJcZVjV +EPDKjvbdCflGHAzc +DncLKvbdzROmJKXA +EPDLKvbdCJLBjhej +EOcKjvbdVrNwbEkc +DnbkKvbdUtNUFlWK +DoDKjvbdLBKflbYR +EPCjjvbdauBfwkTh +EPCkKvbdrXQMDJZR +DnbjjvbdnVUyjjSG +DncKjvbdiMEdOUby +DoDKjvbdqiAKFNPF +EOcLKvbdQdDBQQcr +DoDKjvbdpxnggQdY +DncKjvbdtSrTYydc +DnbjjvbdwzHefXeS +DoCjjvbdRosfjGEX +EPCkKvbdnPyxujyC +EObjjvbdZyEJnCkr +DnbkKvbdhytelRNf +EPDLKvbdeYZstSFz +EObjjvbdTfzmlXVe +EOcKjvbdbKkenmcA +DncLKvbdvwMAuaVu +EObkKvbdwMvAMdEm +EOcLKvbdkHflFfNk +EPCjjvbdzoPpeDMY +DoCjjvbdiLeDmuCy +EOcKjvbdRpUGjGDw +DnbkKvbdUslsekuj +EPCjjvbdmJEURVRa +DncLKvbdZjSgofaf +EOcLKvbdaMjasUlg +DoCjjvbdREDBPpdS +DnbjjvbdIwsaglQp +DoCkKvbdkNCLzFHP +DoDLKvbdaRfChUFk +EPCjjvbdrRtjnKaN +EPCkKvbduoTzpkOt +EOcKjvbdnHFYMmfy +EOcKjvbdHDkVjBjK +EObjjvbdEXxMTssl +DnbjjvbdNPxRWOHT +EObjjvbdiZtfLpmf +EObjjvbdTvLojTaR +DoDKjvbdKkBIWAKZ +DoDLKvbduCbtwVno +DncLKvbdmttzKjSG +DncLKvbdbBVdfQQX +EObkKvbdyXiKBpZk +DncLKvbdzGxlAMdw +DoCkKvbdMpXpvNfs +DoCkKvbdKQydoGOF +EPDLKvbdTfzmlXVe +EPDKjvbdQccBPqES +EPCjjvbdZtJIyESn +DoCjjvbdVrOXbElD +DnbjjvbdbLMGOmcA +DnbkKvbdnPzZWKyC +EPDLKvbdmajWwoOV +EObjjvbdQwOEDMHc +EPCkKvbdTvMQKUBR +DoCjjvbdOTUVgEtp +DoCkKvbdIHHZyXxH +EPDLKvbdDoDLKwDE +EObjjvbdiZtfMQmf +EObjjvbdijGHimXr +DoDKjvbdVrNxCElD +EPDLKvbdJutedFGi +DnbjjvbdmSZVZsEJ +DncKjvbdqlzKYlIJ +EOcKjvbdfelZnGgA +EOcKjvbdYlRctOLm +DoDKjvbdPxmAHSrK +EPCjjvbdWWiYWEEg +DoCjjvbdbAvFFoow +EOcKjvbdFjeSbglu +EPDLKvbdlqyVZsEJ +EOcKjvbdddoRbXDK +EPCkKvbdaRecHtFk +DncLKvbdSKyGUgKs +DoDLKvbdcyyPwyQb +DoDLKvbdnVUzKjRf +EObjjvbdYkqdUOLm +EObkKvbdRbEEkhyL +DncKjvbdtAHQhAAr +DnbkKvbdVqmwbFMD +EOcLKvbdznoqFDLx +EOcLKvbdEXxLtTsl +DnbkKvbdtumwipsA +EObjjvbdmJEUQtqa +DncKjvbdxwhjCPyk +DnbkKvbdyfyMANFX +DncLKvbdiVZeXRtb +EObkKvbddtAUATMv +EOcKjvbdxnSgwriD +EObjjvbdlrZVZrdJ +EPCkKvbdsBelkfkZ +DoDKjvbdFVyPomJe +EPCkKvbdQmYBxnUz +EOcKjvbdSBdFLhyL +DncLKvbdmJETpuSB +DoDLKvbdRECaPpcr +DncLKvbdIxUBglRQ +DoCjjvbdpssfrSLU +DnbkKvbdSQUHJedX +EObjjvbdkySrTZHU +EObkKvbdZtIiZETO +DoCjjvbdtumwipsA +DoCjjvbddBrlrAUN +EPCjjvbdKCjDQibx +DoCjjvbdQccAopdS +DoDLKvbdSBceLiYk +EPDKjvbdREDAoqDr +EOcKjvbdZQleJMeR +DoCkKvbdEARiMywX +EPDKjvbdkDLkQgUg +DncLKvbdFjdsDIMu +EPCjjvbdlrYtysDi +EPCkKvbdezuxeIsw +EObkKvbdyNsHxTJD +DnbkKvbdemGWgMik +DoDLKvbdBhkCKhej +EOcLKvbdjvWmcaww +EPDLKvbdqTsgRrLU +EObkKvbdZyDimcLr +EPCjjvbdlrYtzTEJ +DoCkKvbdHgGyyYXg +DoCkKvbdZoNhddyj +EPDKjvbdhtzFWquC +EPCkKvbdDoCkKwDE +DoDLKvbdsrqsZZeD +EPCkKvbdiHJbxuiu +DoCjjvbdhlFEOUcZ +EPDKjvbdDigiuwjA +EPDKjvbdQdDBPqES +DoCjjvbdcTCjsdKB +DncLKvbdUsmUFkuj +EPDLKvbdnHEwlnGy +EOcLKvbdxVNEqYkn +DoDKjvbdEuxopNJe +EObkKvbdkClLQfuH +EPCjjvbdcTDLUEKB +EOcKjvbdEPDKkXDE +EPCjjvbdXsLaNUOx +DoDKjvbdFWZQQNKF +EPDLKvbdUtMtFlVj +EOcKjvbdzaAPGfal +DnbkKvbdHlBznXRL +DoDLKvbdTlVoBWPJ +EPCkKvbdDoCjkXDE +EOcKjvbdrzMQTAhO +EOcLKvbdozmdLXoA +DoDLKvbdzQnmIjXA +DoCkKvbdmgExMmgZ +EPCkKvbdzjUoocrt +EOcLKvbdwyhGFweS +EOcLKvbdWWhxVceH +DncLKvbdqqtkOKaN +DoCkKvbdOTTvHEuQ +DoDLKvbdjJehKMwr +DoCjjvbduDCtvuoP +DnbjjvbdqdEiPmvB +DnbjjvbdhtzEwRuC +DnbkKvbdRkYetfkT +DoDKjvbdCDpBVjNG +DoCkKvbdcSbjscjB +EPDLKvbdYpldiMdq +DoCjjvbdaaWEfPow +EOcKjvbdqZPHgQdY +DoCkKvbdeOdrjtUS +DoDLKvbdFaPRZJzm +DnbjjvbdRECaPqES +DncKjvbdaMjaruMg +EObjjvbduVnYJpsA +DnbkKvbdqTsfrSLU +DncKjvbdYqMeJMdq +EOcKjvbdvvlBWAuu +DnbjjvbdUxgtZkOn +EOcKjvbdOSsufduQ +EOcLKvbdtumxJqTA +DncKjvbdIryAsNXl +DoDKjvbdMuTRkNAX +DoDLKvbdxnSgwrhc +EOcKjvbdiHKCxujV +EObkKvbdeKJrVtzn +EPDLKvbdjhHMGGNk +EOcLKvbdkVwNdBww +EOcLKvbdygZMANEw +EPDLKvbdRXODcLhD +EPCjjvbdSPsfjFcw +DoDKjvbdYpleIldq +DoDLKvbdOEcsiIjd +DnbjjvbdddoRavbj +DncLKvbdHDkWKBjK +DoCjjvbdxxJKBoyk +EPDKjvbdYkqdUNkm +DoDLKvbdDnbjjvcE +DoCkKvbdVvhxVceH +EPDLKvbdWRnXbFMD +EObkKvbdliEUQtqa +EPCkKvbdNQXqVmfs +EOcLKvbdIGfyyYYH +DncKjvbdxUldpxlO +DoDKjvbdznopdcLx +DncKjvbdHDkVibKK +EPDLKvbdjlbLydgP +DoDKjvbdYTMAltOx +DoDKjvbdcSbkUEKB +EPCjjvbdzoQREblY +EOcKjvbdZxcinDMS +DoDKjvbdZyDjODMS +DoCjjvbdxZgfFwdr +EPDLKvbdaMkBsVMg +EPCkKvbduDDUvuno +DncKjvbdsCFmLgKy +DoDLKvbddeOrCWcK +DncLKvbdNddThhjd +EOcKjvbdBvzcheQW +EPDLKvbdeEnqbXCj +DoCjjvbdNrtVfduQ +EOcKjvbdZQmEiNFR +EPCkKvbdGFjSNiTq +EPDKjvbdZxcinCkr +DoCjjvbdkNBlZdgP +DoCkKvbdEYXkstTl +DncLKvbdYpmEhmEq +EOcLKvbdePFSkTsr +DoCjjvbdemFvfmKL +DnbkKvbdemFwGljL +EPDLKvbdmbJvxOnV +EPCjjvbdtbcVXVoP +EOcKjvbdFkErcHmV +DoDKjvbdVUMtFlWK +EOcLKvbdkMakydfo +DnbjjvbdIMBznWqL +EObkKvbdptUHRrLU +DnbkKvbdjJfHilwr +EPCjjvbdGYuUaDxC +EObjjvbdmtuZjjRf +DncLKvbdkCkkQfuH +DoDLKvbdtlXwBUBX +DncLKvbdCWzchePv +EObkKvbdrEEiPmua +EOcLKvbdYqNFIldq +DoDLKvbdfILWRnQg +DoDLKvbdqUUGrRkU +DoCjjvbdfMfWflik +EOcLKvbdOTTugEuQ +DncLKvbdjvWnDaww +EOcLKvbdsPuoKDVf +EPDLKvbdZirhPfaf +DoCjjvbdDwxLsstM +DnbjjvbdfHkWRmpg +DncLKvbdrpWOibuf +EPDLKvbdZtIhyESn +DncLKvbdwygfGYEr +EPCjjvbdeEoSCWcK +EPCjjvbdjuvmdBww +EObjjvbdqUTfqqjt +EOcLKvbdZjSgogBf +DoDKjvbdYqMdiMeR +DoCjjvbdKefICApu +DoDLKvbdMfcQNQVL +EPCkKvbdjggMGGNk +EObkKvbdCDoaVjMf +EObkKvbdWWiXuceH +EOcLKvbdURROuVHm +DnbjjvbdpssfrSLU +DncKjvbdgFkzNgHA +DnbjjvbdaSFbgtFk +DncLKvbdIxTahMQp +EPDLKvbdKWVFceGi +DncKjvbdFVyPomKF +DoDKjvbdZirgpHBf +EObjjvbdVqmwadkc +EPCkKvbdieLHVPAO +DncKjvbdZLqdUOMN +DoDKjvbdWWiYWDeH +EObkKvbdQwNdClID +DnbjjvbdMoxRVnGs +DncLKvbdrDdiPmvB +DnbjjvbdZQleJNFR +EOcLKvbdrDdhpOVa +EPDLKvbdYqNFImFR +DoDKjvbdEYXlTtUM +DoCjjvbdhuZeWqtb +EPDKjvbdMfcPlpVL +EOcKjvbdNQYQvNfs +DoDKjvbdiUzFXSVC +DoCkKvbdmRxtzSci +DnbjjvbdbiMikGXY +DoCjjvbdQdDBQQdS +EObjjvbdqZPIGqDx +DoCkKvbdkWWmdBxX +DoDKjvbdKxpirzuG +DoCjjvbdlBNPNALA +DoCjjvbdhzVGMROG +DoCjjvbdzoQREcMY +EPDKjvbdlAlnmALA +EPDLKvbdwuMeRZLn +EOcLKvbdYqMdiNFR +EObkKvbdOTTugEuQ +EOcKjvbdYTMAmUOx +DnbjjvbdRDcBQRES +DoDLKvbdidkHVPAO +EPCkKvbdSKyFtfjs +DoCjjvbdhytelQmf +DncLKvbdEztRElCi +EPDLKvbdRWnEDLgc +DoDKjvbdwuNFQyLn +EObkKvbdGLFTDHmV +DnbkKvbdShyiqABM +EObkKvbdUaCQsRSZ +EOcKjvbdjuwNcbXw +DnbkKvbdmfeXlnHZ +DncKjvbdsPuoKDVf +EOcKjvbdNGbomPtk +DoDKjvbdvPTzpkOt +EPDKjvbdJqZdneme +DncKjvbdqTtGqqkU +DnbkKvbdjggLeemk +DoCjjvbdVZIUZkOn +EPCkKvbdzjVPodTU +DncKjvbdnBjXYOnV +DoDKjvbdHgGzYxYH +EPCkKvbdSZigsCvA +EPCjjvbdtbbtvuno +DoDKjvbdPIAXyAZB +EObjjvbdRNXaxmtz +DoCkKvbdUyITykPO +EPCkKvbdssRryZeD +EObkKvbdJuuGEFGi +DoDLKvbdxZgfGXeS +EObjjvbduoTzqLOt +DoDKjvbdbrbkTcjB +DncLKvbdxxIiaoyk +DoCjjvbdFxtuBDxC +EPDLKvbdzaAPGgBl +EPDLKvbdpxnhGqDx +EOcKjvbdtSqsZZeD +EOcLKvbdMowpvOGs +EObkKvbdVBCRSpqy +DoCkKvbdZRNEiMeR +EPCjjvbdczYowyQb +DncKjvbdjgfkfGNk +DnbkKvbdssSTYzFD +EOcLKvbdVhYWYGxz +DncKjvbdKDJcQibx +DncKjvbdZHWdAPTJ +EPCkKvbdFjdsChNV +DoDLKvbdJcJcRJcY +EPCjjvbdRjyGVHLT +DnbkKvbdBcpBWKMf +DoCjjvbdxUmEpyMO +EPDKjvbdZoNiFEzK +DoCjjvbdPIAYZAZB +EOcLKvbdFejSOIsq +DoDKjvbdjggMGFmk +EObkKvbdWRnXadlD +EObkKvbdnGdxMmfy +DoDLKvbdLBKgNBxR +DoCjjvbdaSGChTek +EPCkKvbdSCEElIxk +EObjjvbdIxTbHlQp +EPCkKvbdOEcshhkE +EOcLKvbdbsCjsdKB +DncLKvbdCSaDUGXS +EPCjjvbdRzJgsDWA +EPDLKvbduCbuXVno +EOcLKvbdGdLViajK +DncKjvbdCWzdJEpW +DncKjvbdjuwODbXw +DncLKvbdqUTfqqjt +EOcKjvbdxUmFRYkn +DoCjjvbdVAaqSqRy +EPDLKvbdaMkBsUlg +EOcKjvbdGLFTCgmV +EPCkKvbdZeYGzgiC +DoCjjvbdwXLaWBVu +DoCjjvbdelevgMik +EPDKjvbdkHgMGGOL +DoCjjvbdcJMjKewY +EOcLKvbdwzHfGYEr +DncLKvbdlZTRryGt +EOcLKvbdfVzwoizs +EPDKjvbdhzUelRNf +EPCkKvbdiHKCxvKV +EOcKjvbdGFjRmhtR +EPDLKvbdGLEsChNV +DoDKjvbdYORAXuWU +DnbjjvbdpstHSSKt +EObkKvbdegkVqmpg +EPDLKvbdhyuGMQmf +EObkKvbdliDtQtqa +DoCkKvbdfNGXGlik +DoCkKvbdHfgZyXwg +DoCjjvbddndsKssr +EPCjjvbdZMSDsnLm +EObkKvbdEXxMTstM +EPDKjvbdJvUecdfi +DnbkKvbdVUMsekuj +EPCjjvbdPyNAGsSK +DoCjjvbdMSWmZuQz +EObkKvbdBcpBVjNG +DnbjjvbdezuxdiUX +EPCjjvbdBdQAvJlf +DncKjvbdOTUWHFVQ +DoDKjvbdaSGDIUFk +EOcKjvbdUGzmlWvF +EOcLKvbdjlakydfo +DoCkKvbdWSOXaeLc +DoDKjvbdznpRFDLx +DoCkKvbdwtldpxlO +DoDLKvbdGdLVjBjK +EObjjvbdmttykKSG +DoDKjvbdZjShQGaf +DoDKjvbdrDdhomvB +EPDLKvbdiUyeXSVC +DncKjvbdIsYaSmXl +DnbjjvbdVhXvYHYz +EPDKjvbdwzHfGXdr +EOcKjvbdxsOJMqbH +DoCjjvbdehKuqmqH +EPCjjvbdZdxGzhJC +EOcKjvbdsCGMlHLZ +DoCjjvbdOEcshhkE +DoCjjvbdEzsqElDJ +DncLKvbdURRPVVIN +EPCkKvbdZoOJFEzK +DnbjjvbdBiKajhfK +EOcLKvbdbUafwkTh +EOcLKvbdVZHszKoO +DnbkKvbdGKdsDIMu +DnbkKvbddoFSkUUS +DnbjjvbdPxmAGrqj +EPCjjvbdKNADzHVB +EPCjjvbdcyxpXxqC +DnbkKvbdLBLGmBxR +EPDKjvbdFWYopNJe +EPCkKvbdcJNKKewY +DoCjjvbdGLErcHmV +EPCjjvbdWXIxWDdg +DnbkKvbdQvmcbkhD +EOcLKvbdbVCGwjtI +DoCjjvbdmgFYMmfy +EPDLKvbdQdDApRES +DnbkKvbdWWhwvEFH +DnbjjvbdxZhFexFS +EPCkKvbdCIjakJGK +EPCkKvbdKQyeOfOF +DncKjvbdEObjkXDE +DnbjjvbdNGcPlotk +DoCjjvbdVUMtGMVj +EPDLKvbdelfWgNKL +DnbkKvbdqwPlDJZR +DncLKvbdbiMikFwY +EObkKvbdkNBkzEgP +DoCkKvbdmuUyjiqf +DncKjvbddneSjtTr +EPCkKvbdRkZFtgLT +EObkKvbdRjyGUgLT +EPCkKvbdKaKgMaxR +DnbkKvbdZMRdTnMN +EPCkKvbdqZOhGpcx +EPCkKvbdxwhjBozL +DncKjvbdGckViajK +EPCkKvbdiifHilxS +EOcLKvbdqUUGrRjt +EPCjjvbdbhljLGWx +DnbkKvbdhgKCxujV +DoDLKvbdJSyAsNXl +DoDLKvbdjgflFenL +EPCkKvbdMJBlQxAS +DncLKvbdUMVoAvPJ +DoCkKvbdkCkjpgVH +EPDKjvbdqGEEsvAh +EObkKvbdmRxuZrci +EObjjvbdNdctIhjd +EPCkKvbdCSaDTevr +EPCjjvbdRDcAopcr +EObkKvbdwtmEpyMO +EOcKjvbdqZPHfqDx +EOcLKvbdaNKbStmH +EOcLKvbdaSFcHsfL +DnbkKvbdRosgJecw +EObkKvbdkySrSyGt +EOcLKvbdwuMdqYkn +EPCjjvbdrDdhonWB +EPCkKvbdiBoDEwRR +EPCkKvbdEztQdlCi +EObkKvbdFyUuBEXb +EPDKjvbdOAIsUJrA +EPDKjvbdKCicRKCx +EObjjvbdSZihSbvA +DncLKvbdvAdYsPEh +DncKjvbdySnImSCH +EObkKvbdiVZeXRtb +EOcKjvbdsCFllHLZ +EPDKjvbdZeXfzgiC +DnbjjvbdMpXpvNgT +DoDLKvbdsCFllHKy +DoCkKvbdqYoHfpdY +DnbjjvbdRzKHrbvA +EOcKjvbdNHComPtk +EOcLKvbdCJLBjiGK +EPDLKvbdsZlPsAhO +DnbkKvbdemFvgMik +DoCjjvbdFyUuBDwb +DnbjjvbdrafMlGkZ +DncKjvbddZyPxYpb +EObjjvbdxZhGFwdr +EPCkKvbdEXwlTssl +DnbkKvbdANIYrvyx +EObjjvbddePRawCj +EPDKjvbdyNsIXrhc +EPCkKvbdhkeEOVDZ +DoDLKvbdAMgxrwZx +EPDLKvbdsQWPJbvG +DoCkKvbdkVvmcbXw +EPDKjvbdJYTbIMQp +DncLKvbdBsAcTewS +DncLKvbdxrnJNRag +EOcLKvbdmSYtzSdJ +EObkKvbdqdFJQNua +DoCjjvbdZyEKOCkr +DoCkKvbdZLrEUOLm +EPCkKvbdRNXaxnUz +EPDLKvbdnUuZjjRf +EObkKvbdmbKXYOmu +DnbkKvbdlZTSTYgU +EPDKjvbdGYuUaDxC +DncLKvbdFyVVAcxC +DoDKjvbdEvZPpMjF +EPDLKvbdSwjlNzjx +EPCjjvbdbKkeoNcA +DoCkKvbdMfcQMotk +DnbkKvbdyTNiNRbH +DncLKvbdFWYpQMjF +EPCkKvbdEvYopMjF +DncKjvbdeKJrWUzn +EOcKjvbdpssfrSLU +EObjjvbdKCjDRJbx +DnbkKvbdeUAUATMv +EPDLKvbdjKGIJlxS +DnbkKvbdpssfqrLU +EPDKjvbdqZPHgQdY +EPDLKvbdeAURNXif +DoCjjvbdypoMhiwA +EPDLKvbdGYtuAdXb +EObkKvbdRaceLiYk +DoCjjvbdXsMBNTnx +EOcLKvbdKCjCqKCx +DoCjjvbdYSlAmUPY +EPDLKvbdpstGrSKt +EPDKjvbdhtyeXRuC +EObjjvbdtlYXBUBX +EObjjvbdRMxByNtz +EObjjvbdhanbeWqR +EOcKjvbdpyPIHQcx +EPDLKvbdrRtjnLBN +DoDKjvbdNQYQvNgT +DnbjjvbdbsDKsdJa +DnbjjvbdDxYMTssl +EPDLKvbdnCKWxOmu +DncKjvbdILazmwQk +DoDKjvbdhgJcYuiu +DoCjjvbdlYrrSyHU +EOcKjvbdVUNUFkvK +EObjjvbdRyjHrbvA +DoDLKvbdDnbkKvbd +EOcKjvbdaNKbStmH +DnbkKvbdjblLRGtg +DncKjvbdxUleQyLn +EPDKjvbdLGFhBaQu +EObkKvbdqmZiyLgi +DoCjjvbdJuuGEFGi +EPDKjvbdqmZixlIJ +DoCjjvbdXnRAYVVt +EOcLKvbdWIYVxGxz +EPCkKvbdxZgfGYEr +EPDKjvbdfNGWfmKL +EPDKjvbdbrbjscjB +DoDKjvbdsPunjCvG +DoDKjvbdziuQQDsU +DoDLKvbdbhlijfWx +EPCkKvbdhgKCyWKV +EPDLKvbdGLEsCgmV +EOcKjvbdmIcspuSB +EPDKjvbdIwsbILqQ +DoDLKvbdpedEsvBI +DncLKvbdsPunjDVf +DncLKvbdIxTbHkqQ +DncLKvbdcSbkTdJa +DncKjvbdUWLpJsaR +DnbkKvbdsQVnjCvG +EPDKjvbdyXiJapZk +EPCkKvbdrzLosAgn +DncLKvbdNsTugEuQ +DoDLKvbdrykoraHn +EObjjvbduaDySoFI +DncKjvbdZHWdAOri +EPCjjvbdlqxtysEJ +DnbkKvbdOSsvHEtp +DoDKjvbdRotGjGDw +DoDKjvbdYfvdAOsJ +DoCkKvbdBhjajiGK +EObjjvbdCgLegAzc +DoDLKvbdhtyeWrVC +EOcKjvbdzitoocrt +EOcKjvbdNVTSKmAX +EPCjjvbdVYgsyjnn +EObkKvbdliEUQuRa +DoCkKvbdqFceUWAh +EPDKjvbdIsZAsMxM +DnbkKvbdUVlPjUBR +DoDKjvbdbUafwjsh +EObjjvbdQlxCZOUz +DoCkKvbdQvnEDLhD +EOcKjvbdUVlQKUBR +EPDKjvbdehKvRnQg +DoDLKvbdxmsIYTIc +EObjjvbdsCGNLfkZ +EObjjvbdmSYtzSdJ +DoCjjvbdiMEcnVDZ +EPCjjvbdypnlhiwA +DoCjjvbdRyihTDWA +DoCjjvbdZoOJEdzK +DoCjjvbdJpzEoGOF +DoCkKvbdYpmEiMeR +EPCkKvbdbhljKfWx +EPDLKvbdqYnggQcx +EOcLKvbdwjwEHzyf +EPCjjvbdLFegbAqV +DoCjjvbdMoxQvNgT +EPCjjvbdZsiIyETO +DoDLKvbdZQmFImEq +DnbjjvbdYkrDtOMN +EPCjjvbdjggMGGOL +DncLKvbdDwwlTstM +EOcKjvbdCWzciFQW +DoCkKvbdyYIiaozL +DnbkKvbdNsTufeVQ +DoDKjvbdjlakydfo +EObjjvbdUGznLvue +DoCjjvbdeFOqawDK +DoCjjvbdZnmiFEyj +EOcKjvbdVBCQrprZ +EOcLKvbdrovOjCvG +DncKjvbdrovPKCuf +EOcLKvbdlYrqryHU +EObkKvbdcyyPxZQb +EObjjvbdnBivwnnV +EObjjvbdjJehJlwr +DnbkKvbdOFDtJIjd +DnbjjvbdVAaqSqSZ +EObkKvbdrXPkbiZR +DoCjjvbdzaAPGfal +DncKjvbdZQldhmEq +EObjjvbdmoyxvLZC +DnbkKvbdmpZxujyC +DoCjjvbdvwLaWBWV +DncLKvbdiVZdvquC +DnbjjvbderBWzlDP +EPCjjvbdjbkjpfuH +DncLKvbdrafNLfkZ +DncKjvbdrWokbhxq +EPCkKvbdsZkosBHn +EOcKjvbdidjfuPAO +DnbjjvbdNGcPmQUk +EPCjjvbdrJAKFNOe +DnbjjvbdTukoitBR +DnbkKvbdySmhlrCH +EObkKvbdrXPkcIxq +EOcLKvbdFejSOItR +EObkKvbdmgExMnGy +EPDKjvbdqrVLOLBN +DoDKjvbdLAkHNCYR +EObkKvbdVrOXbEkc +DnbjjvbdEXwlUTsl +EPCkKvbdyXhjBpZk +EObkKvbdiifHjMxS +EOcKjvbdEKHiuxKA +EObkKvbdZLqdTmlN +EObkKvbdWRnXaeLc +DnbjjvbdWSNwaeMD +DnbjjvbdfNGWgNKL +DoDKjvbdoAKztIDn +DncLKvbdmaivxOmu +DnbjjvbdZLqcsnMN +EObjjvbdcTDKscia +EPCjjvbdOTTufeUp +DoDKjvbdGdLVjBjK +DncKjvbdcJNKLFvx +EOcLKvbdTYKkmzjx +EOcKjvbdZRMeImEq +DoDLKvbdKQyePFnF +DnbkKvbdNrtWGduQ +EPCjjvbdatbHXjtI +EPCjjvbdvwMAuaVu +EPDLKvbdnQZxvLZC +EObjjvbdtlYXAsaX +DnbkKvbduDDVWvPP +EPDLKvbdqTtGrSKt +EObjjvbdxnSgwsJD +EObjjvbdbKkenmcA +EPCkKvbdFaOqYizm +EOcKjvbdLGGHbBRV +DoDLKvbdRzJhTCvA +EPCjjvbdiMFDmtcZ +DnbjjvbdWWhwvEEg +EPCjjvbdJmAEZgVB +DoCjjvbdmuVZjirG +DoCjjvbdliEURUqa +DoDLKvbdnCKWwnnV +EPDLKvbdhgJbyViu +DnbkKvbdjggMFfNk +EObkKvbdEuxopMie +EPDKjvbdssRsYydc +DncLKvbdliDsqVRa +EOcLKvbdLBKflbYR +DncKjvbdzoPpeClY +DncKjvbdqFdEsvBI +DoCjjvbdZMRctOMN +DncKjvbdDnbkLWcE +EObkKvbdMfcQNPuL +DoDKjvbdUWMPjTaR +DnbjjvbdxmsHwsIc +EObkKvbdrDdhonWB +EPCkKvbdhgJcYvJu +DoCkKvbdlYsSSyHU +EPCjjvbdNdcsiJLE +DoDKjvbdhlEcmuCy +EObjjvbdJTZAsNXl +EPCjjvbdznpQeClY +DncLKvbdDxYMTssl +DoCjjvbdkVwNcbXw +EOcLKvbdMgDPlpUk +EObkKvbdXsMAlsnx +DnbkKvbdiBncEvqR +EPCjjvbdeFPSCWcK +DoDKjvbdmuUzKjSG +EPDKjvbdqrUkNjaN +DoDKjvbdhyuFlQnG +EOcKjvbdDigivYKA +DoDLKvbdJYUCHkqQ +DncKjvbdACqwiyiQ +EPDKjvbdEYXkstUM +DoDLKvbdKDKCpicY +DncLKvbdCDoaVjNG +EObkKvbdxZhFexFS +EPCkKvbdKDJcQjCx +DoDLKvbdEPCkKwCd +EPCkKvbdTfzmkwVe +DnbjjvbduWOYJqTA +DoCjjvbdcJMijfXY +EPCkKvbdmaiwYPOV +EOcKjvbddjJrVtzn +EObkKvbdpstHSRjt +EOcKjvbdyXiKCQZk +DnbkKvbdIsYaSmYM +DnbjjvbdwtmFQxlO +DnbkKvbdYpleJMdq +DoCjjvbdkNBkzFGo +EOcKjvbdbsCkUEKB +DoDKjvbdYlRctOMN +DnbkKvbdjuwOECXw +EPDKjvbdWRnXaeMD +DncLKvbdkDLkQgVH +DoDLKvbdFeiqnJTq +EOcKjvbdzHYlAMeX +EPCjjvbdJbjCpjDY +EPDLKvbdzitopDsU +DnbkKvbdziuPpDrt +DncLKvbdySnImSCH +DnbjjvbdySnImRbH +DoCjjvbdKjaIWAJy +DnbjjvbdTqRPUthN +DoCjjvbdURQntuIN +EObjjvbdQlxCYmtz +EPDKjvbdMtsSLNAX +EObjjvbdJbjDQicY +DoDKjvbdEPCkKwDE +EObkKvbdKQydoGNe +DoDLKvbdVwJXuceH +EObjjvbdnUtykJrG +DncLKvbdwMvANEEm +EPDKjvbdpyPHgQdY +DnbjjvbdUVkpKUBR +EOcLKvbdhfjCyVjV +EPDKjvbddoFTKstS +EPCkKvbdANHyTXZx +EPCkKvbdUxhTyjoO +EObjjvbdkVwNdBxX +EPDKjvbdDoCjjvbd +DnbkKvbdWWhwudEg +DnbkKvbdyTNiMrCH +DoDLKvbdelewGljL +DncLKvbdUGznMWue +DncKjvbdwygfFwdr +EPCkKvbdJqZePFnF +DnbjjvbdNsTugEuQ +DoDKjvbdQcbaPqDr +DncLKvbdfMevgNJk +DncLKvbdlrZVZrdJ +DoCjjvbdFjeTCglu +DnbjjvbdYqNFImEq +DoCjjvbdsCGMkfkZ +DncLKvbdhuZdwSUb +DoCkKvbdrXPkbiZR +DoCjjvbdZRMdiMdq +DoDKjvbdemFvgMjL +DoCjjvbdygZMANEw +EOcKjvbdZRMeIldq +EObkKvbdiHJcZWKV +DncKjvbdCJKbKiFj +EObjjvbdzROlhjXA +DnbjjvbdDoDLKvbd +EPDLKvbdVYgtZjnn +EObkKvbdDoCjjwDE +DnbkKvbdrouoJbuf +DoCkKvbdyTOImRag +EPDKjvbdBcpBVilf +DoCjjvbdCWzdJFQW +EPCkKvbdbrbjscjB +EOcLKvbdwkWdHzzG +EPDKjvbdnGeXlnGy +EPCkKvbdznpREcLx +EPCkKvbdZMRcsnLm +EOcKjvbdJSyArmXl +DnbkKvbdZMSDtNkm +EPDKjvbdAMgySvzY +DoDLKvbdyYJJbPzL +DoCkKvbdLAjgMaxR +DoDLKvbdWIXuxGxz +DoCjjvbdqwQLbiYq +DnbkKvbdpyPIHQcx +EOcKjvbdfNGXHNJk +DncKjvbdqYnhHQdY +DncKjvbdeEnrBvcK +EPDKjvbdZjTHpGaf +DoDLKvbduoTzqLPU +DnbkKvbdIjEAJofd +DnbkKvbdxnSgxTJD +DoDLKvbdXsLaMsnx +DnbjjvbdaRfDHsek +DoCkKvbduLwwAtBX +DnbkKvbdrpWPJcVf +DoDKjvbdrbFlkgLZ +DoCkKvbdlqxtyrdJ +EObkKvbdRyihSbvA +EObkKvbdWRnYCFLc +DoCkKvbdOEcshhjd +DnbkKvbdZjTHpHBf +DnbjjvbdcyyPwxpb +DncLKvbdkVvmdCXw +DncLKvbdcScKtEJa +DnbjjvbdrSVLOLBN +EObkKvbdiGjDYvKV +EPCkKvbdEJgjVwjA +DnbkKvbdRosgKFdX +EPDLKvbdcScKtDia +DoCjjvbdtbcVXVno +DncKjvbdhgJbyViu +EPCjjvbdjJehKNYS +EObkKvbdyOTIYTJD +DnbkKvbdRaceMJYk +DoCkKvbdqiAKEmOe +DoDLKvbdEKHiuwjA +EObkKvbdxUldpxkn +EObkKvbdFejRmhtR +DncLKvbdSBcdlIyL +EPCkKvbdxZhFexFS +EObjjvbdwjwEHzzG +EPCjjvbdmRxtzSdJ +EPDLKvbdEvYooljF +DoCkKvbdmgFXlmfy +DoCjjvbdtkxXBTaX +EObkKvbdmgExMnHZ +DncLKvbdjvXODaww +DoCkKvbdSCEFMIyL +EPDKjvbdVYhTykOn +DoDLKvbdNsUVgFUp +DncKjvbdRXOEClID +DoDKjvbdnVVZkKSG +DoDKjvbdWWhxVcdg +EPCkKvbdwuNFQxlO +DncLKvbdKeegbBRV +DncLKvbdUWLpJsaR +EOcLKvbdNxOuzcmt +EObjjvbddwzUUSFz +DoCjjvbdJXtBhMQp +DoCkKvbdLGFgbBRV +EOcLKvbdcJMjKewY +DnbjjvbdxUmEqYkn +DnbkKvbdjbkjqGtg +EPCkKvbdIHGzYwwg +DnbjjvbdrpWOjCvG +DoDKjvbdZMRctNkm +DnbkKvbddZyPwxqC +DoCjjvbdtcDVWuno +DoCkKvbdJcKDRJcY +EOcLKvbdmbKWwnnV +EPDKjvbdcasNSAUN +EPCkKvbdUaBpsQqy +EObkKvbdJutedFHJ +DoDLKvbdBhjakJFj +DnbkKvbdnUuZjiqf +EPDKjvbdpxoHgQcx +DnbjjvbdZjTHofbG +EObkKvbdkxsSSxgU +DnbjjvbdWRmwbElD +DoCkKvbdRkZFuGjs +EPCkKvbdwNWANDdm +EObjjvbdTkvPBVni +DoDKjvbddndrkTtS +DncLKvbdZtJIxdSn +EOcLKvbduaDyTOeI +EOcKjvbdxZgfGXdr +EOcLKvbdkySrTZGt +EPDKjvbdVwJXucdg +EPDLKvbdatagYLUI +DoCjjvbddZxpYZQb +EPDKjvbdtunXjRTA +DoDLKvbdWSOYBeMD +DoCjjvbdHlBznXRL +EPDLKvbdcyxpXxpb +DnbjjvbdAMhYsWzY +EObjjvbdraemLgKy +EPDKjvbdJpzFOenF +DoCjjvbdZnnIeEyj +DoCjjvbdrWpLbiZR +EOcKjvbdLqwMytpz +DncKjvbdKQzEoFme +EPDKjvbdZRMeJMeR +DncKjvbdEuxpPlie +EOcLKvbdFWYpPlie +EOcLKvbdjblKpgUg +EOcLKvbdiBnbdwQq +DoDLKvbdOTTufeVQ +EPDKjvbdpyOggQdY +DnbkKvbdGBOqYizm +EObjjvbdRjxfUfkT +EPCjjvbdUMVoAuoJ +DoDLKvbdVwJXvEEg +EObkKvbdnCKXXoOV +DoDKjvbdNPxRVmgT +DncLKvbdZsiIxdSn +EPDKjvbdjlalZeHP +DoDLKvbdeFPSBvbj +DoDKjvbdVqnXbFMD +DncKjvbdHffyyYYH +EOcLKvbdBhjbLJFj +EPDKjvbdJvVGEFHJ +EOcKjvbdgQBzvdYI +EPDLKvbdpyOggRDx +EObjjvbdKQyeOfNe +EPCjjvbdtcCtwVno +EPCjjvbdQvmdClHc +DnbkKvbdyXiKBoyk +DncKjvbdqTsgSSLU +EObjjvbdyNrgxShc +DnbjjvbdRkZFuGjs +EObjjvbdYfvdAOri +DoDKjvbdkMbMZeGo +EPDLKvbdCIjbLIej +DoDKjvbdHffyxwwg +EPCkKvbdGdLVibJj +DoCkKvbdaaVdepQX +DnbkKvbdSQUGifDw +EPCkKvbdqYngfpdY +DnbkKvbdxUleQyLn +DoCjjvbdqlyixkgi +EPCkKvbdjgfkfGNk +EObjjvbdeFOqavbj +DoDLKvbdYkrDtNlN +DoCkKvbdjhGlFenL +EPCjjvbdijFhJmXr +EObjjvbdnGeYMmfy +EOcLKvbdbhmJjfXY +EOcLKvbdLBKfmCYR +DncLKvbdJSxaSmXl +EPCjjvbdsQVnicWG +DoDKjvbdjhHLfFnL +EObkKvbdjuwOEBww +DoCjjvbdiBncEvpq +EOcLKvbduLxWaUAw +DncLKvbdhuZdwRtb +EOcKjvbdjvWnECXw +EObkKvbdZeYGzghb +DoDLKvbdNQYQumgT +DoDKjvbdJpydoFnF +EPCkKvbdRjyFuGkT +DnbjjvbdraelkgKy +EObjjvbdfNGXHMjL +DoDLKvbduWNwiqTA +DncKjvbdnVUzLJrG +DoDLKvbdehKvSOQg +EPDLKvbdwtmFRYkn +DoDKjvbdKfFgaaQu +DncKjvbdCTBDTfXS +EObjjvbdDoCjjwCd +EPCjjvbdYTMAmUOx +EOcKjvbdiMFDnVCy +EObkKvbdjlalZeHP +DnbjjvbdCJLCLIfK +DoDLKvbdZMRdUNkm +DnbjjvbdURRPVUgm +EObjjvbdJcJbpibx +EObkKvbdrWpMDJZR +EObjjvbdjuwNdBxX +EPCjjvbdbBVdfQQX +EPCjjvbdKRZeOfOF +DoCkKvbdKDKCqKCx +DoCjjvbdkVvmdBxX +EPDKjvbdvAdYroEh +EOcLKvbdtcCuXWPP +EPCjjvbdczZQXxpb +DncKjvbdUxhUZkPO +EObjjvbdlrYtysEJ +DncLKvbdcScLUDia +EPDKjvbdBsAbsevr +DoDLKvbdqTtGqrLU +DoDKjvbdSCEFLiYk +EPCjjvbdRWmccLgc +DncLKvbdNQYQunGs +EObkKvbdmbKXYPNu +EPCjjvbdfMewGmKL +EObjjvbdzROmIiwA +DnbkKvbdliETptqa +EPDKjvbdHlBznWpk +DoCkKvbdUaBpsQqy +DoCkKvbdWSOYCFMD +DoDLKvbdxmrhYTIc +DncLKvbdLAkGlbYR +DncKjvbdlhctRUqa +DoCjjvbduDCtwVno +DnbkKvbdIjEAKQHE +DnbjjvbdiLddNuCy +EPDKjvbdEXwktUTl +EPCjjvbdyNrgwsJD +EObkKvbdnPzYujxb +EPDKjvbdznoqEcMY +EPDKjvbdZRNEhleR +DoCjjvbdGQATXHFy +EPCjjvbdyqPNIiwA +EOcKjvbdkxrrTYgU +EOcKjvbdcImKLFvx +DoCkKvbduoTzpkPU +EPCjjvbdJXtCIMQp +EOcKjvbdrpVoJbvG +DncLKvbdqZPIHRDx +DnbjjvbdTAFJHand +EOcKjvbdtcCuWuno +DncLKvbdfIKurNqH +DncKjvbdLrWmZtpz +DoDLKvbdMtsRjmAX +EObjjvbdLGGHbBRV +EObkKvbdCWzchePv +EOcKjvbdZxcjODMS +EObkKvbdzaAPGgBl +DoDLKvbdKVtecdgJ +DnbjjvbdHDjvJbJj +EPCjjvbdLiCLqYAS +EPDLKvbdFVxpPmKF +DoDLKvbdZisIPgBf +DncLKvbdTppoUtgm +DnbjjvbdpyPIGpdY +DoDLKvbdEztRElCi +DncLKvbdHgGzZYYH +DnbjjvbdZLqctOMN +DnbkKvbdqTtGqqkU +DnbjjvbdiMEcnVCy +EPDKjvbdvBDxrneI +DoDKjvbdemGXHNJk +DoDKjvbdhficYvKV +EObjjvbdegkWSOQg +DoDLKvbdOFDtIiKd +EPCjjvbdBdQAuimG +DoCjjvbdpyPHgREY +DncKjvbdJXsbHkpp +DoDKjvbdRbEElIxk +DoDKjvbdsQWPJcWG +EObkKvbdsCGNLfkZ +EOcLKvbdzaAPGgCM +EObkKvbdzjUoodSt +DnbkKvbdemFvgMjL +DnbkKvbdWWhxVcdg +DncLKvbdxrmiMqag +EPCkKvbdMSWlytpz +EObjjvbdwNWAMdFN +EPDLKvbdlrYtzTEJ +DnbjjvbdVqnYBeLc +DncKjvbdnHEwmOGy +DnbjjvbdtbbuWvPP +DncKjvbdmIcspuSB +EObkKvbdEOcKkXCd +EOcKjvbdDncKkXCd +EPDLKvbduaDxrndh +DoCjjvbdOFDshhkE +DnbkKvbdRaceLhyL +EPCkKvbdZshhyDrn +DoCjjvbdCSaDTfWr +EOcKjvbdqUTfrSLU +EPDLKvbdtTRryZdc +DoDLKvbdkyTRsZGt +EPDKjvbdyqPNIjXA +DoCkKvbdNUrrKmAX +DoCjjvbdSCDeMIxk +EObkKvbdkMbLzEgP +DncKjvbdEvZPpMie +DoCkKvbdyYIibQZk +EObkKvbdNPxQumfs +EOcLKvbdDncKjvbd +EPCkKvbdozmcjxPA +EPDKjvbdCIkCLIfK +DncKjvbdcyxoxZRC +DoCkKvbdeOdrkUUS +DoCjjvbdhzVFlQnG +EObjjvbdOFETiJLE +DncKjvbdhyuGLqNf +EObkKvbdRWmdClID +DoCjjvbdFpATWgFy +DnbkKvbdlqxtysDi +EObjjvbdqmZjYkhJ +DoDKjvbdZyDjODMS +DoCjjvbdEJhJvYKA +EOcKjvbdqTsgRrLU +EOcKjvbdZsiIxcrn +EObkKvbdIHGzZYYH +EPDKjvbdHgGyxxXg +EObkKvbdxmrgwriD +EPCkKvbdxrnJNSBg +DnbkKvbdjhGkefOL +EPCjjvbdKQydoGNe +EOcKjvbdqvpMDJZR +EObjjvbdQdDBQQdS +DoDKjvbdSKxfVHKs +DoDKjvbdbLLeoODA +DoDLKvbdBsAcUGWr +DoCjjvbdRzKHrbvA +EObjjvbdfMfXGljL +EObkKvbddeOrCWbj +DoDKjvbddjJrVtzn +DoDLKvbdhtydvqtb +DnbjjvbdRNXayOUz +EPDLKvbdRjyFtgKs +EObkKvbdsPuoKCvG +EPCkKvbdYqNEiNFR +DncKjvbdUxgsyjnn +EPCjjvbdZRMdhldq +DoDLKvbdEJhKWXjA +DoCkKvbdQwODblID +EPCkKvbdssRrxzFD +DnbjjvbdZxdKOCkr +EObjjvbduCcUwVno +EOcKjvbdmuUzLKRf +EPCjjvbdfpBzvcwh +DnbjjvbdMowpvNfs +EPDKjvbdGLErcHmV +EPDLKvbdZoOIeEyj +DncLKvbdSLZGUgKs +DncLKvbdlqyUzTEJ +EPCjjvbddePRawDK +DncKjvbdHEKvKCJj +DoDKjvbdeEnqavcK +DoDLKvbdtSrTYzFD +EPDLKvbdxUmFQxlO +DnbjjvbdLLBIWAJy +EOcLKvbdMowqWNfs +EPDKjvbdptUGrSKt +DoDLKvbdHEKvKCKK +EPCjjvbdJcJbpjDY +DnbjjvbdMuTRkNAX +DnbkKvbdEzspdlDJ +DncLKvbdVUMsekvK +EPDKjvbdOTUVgEtp +DncKjvbdAMgySwZx +DoCkKvbdwtmFRYkn +EObjjvbdIjEAKPgE +EPDKjvbdRpTfjGEX +DncKjvbdFjeSbglu +EObkKvbdjFLGtoAO +DoCkKvbduWOYJqTA +EPCkKvbdVAapsQrZ +DnbjjvbdVwJXudEg +DoDLKvbdUtMsfLvK +EPCjjvbdHELVjBij +DncKjvbdRWnECkhD +EPDLKvbdZsiJZDsO +DncLKvbdnPzZWLYb +EPCjjvbdznoqEcMY +EOcKjvbdzoQQeDMY +DnbjjvbdznpQdbkx +EPDKjvbdeYZtTrFz +DoCkKvbdkySrTZHU +DncKjvbdCSaDUGXS +DoCkKvbdcJNJjfXY +EOcLKvbdCEQAvJlf +EPDKjvbdyzdmqhJI +DncLKvbdNPwpvNgT +DoDKjvbdqmZixkgi +EOcKjvbdVYhUZkPO +EObkKvbdhgJbxvJu +DoDKjvbdUQqPUuHm +DncLKvbdqvolChyR +EPCkKvbdEXxMTssl +DnbkKvbdHgGzYwxH +DoDLKvbdIidAJpGd +DnbkKvbdZLqdUOMN +DnbkKvbdGckViaij +DoCkKvbdFVxopNJe +EOcLKvbdRbEFMIyL +EObkKvbdLAjflawq +EObjjvbdziuPodTU +EPDLKvbdQwNdCkhD +EPCjjvbdZxdJmcLr +EPDLKvbdxrmhlqag +DoCkKvbdSPsgJfDw +EPCjjvbdkDLjpgUg +DnbjjvbdtbcUwWOo +DnbkKvbdWIXuxHYz +EObjjvbdEvYpQMie +DoDLKvbdIHGzZXxH +EPDLKvbdVYgszKoO +DncKjvbdhancEvpq +EPCjjvbdcJNKKewY +EPDKjvbdWWhwvEEg +EOcLKvbdvAdYsOdh +EObkKvbdcyyPwxqC +EObjjvbdSPtGifDw +EOcLKvbdkMalZeHP +EPDKjvbdYlRctNlN +DoDLKvbdKWVGEFGi +DncLKvbdMgColouL +DncLKvbdhbPCeXRR +DncLKvbdDwxMTstM +DoDKjvbdvAcySndh +EObkKvbdXGYytAPT +DoCjjvbdmuVZjjRf +EOcLKvbdDGlFgAzc +DoDKjvbdiBncFXRR +DoDKjvbdkaMnmALA +DncKjvbdVBCQrqSZ +DoCkKvbdVviYWEFH +EObkKvbdAMhZSwZx +DoDLKvbdeAUQlwjG +DoDLKvbdZxcjODMS +EOcLKvbdrpWPKDVf +EPCkKvbdWRnYCFLc +DnbkKvbdKeehBaRV +DoDKjvbdMSXMzUpz +EOcKjvbdRkZGVGjs +DoDLKvbdFkFScIMu +DoCjjvbdZjTHogBf +DnbkKvbdnBivwnmu +EOcKjvbdCTAcTevr +EOcKjvbdVviXvDeH +DoDLKvbdliDsptqa +EPDLKvbdZirgpGaf +EPCjjvbdaRfChUFk +EPCjjvbdkClKqGtg +DoCjjvbdKQyeOfOF +EPCkKvbdqvpLbiYq +DnbjjvbdCTBDTfXS +DoCjjvbdOEctIhkE +EObjjvbdbVCHXkUI +DncKjvbdxnTIXrhc +DnbjjvbdezvYdhsw +EPCjjvbdDwwkstUM +EPCkKvbdaaVdepQX +DoDLKvbdjlbMZeHP +DoDLKvbdqAiFAXHd +EPDLKvbdGLEsCglu +EPCjjvbdZyDinClS +EPCkKvbdSLYeuGkT +EPDKjvbdwyhGFweS +EOcLKvbdjJfIKNYS +DoCjjvbddeOrCXCj +DoDKjvbdkxrqsZHU +EOcKjvbdGYuVBEYC +DncKjvbdHkazmvqL +DnbkKvbdZsiIxdSn +EObkKvbdhanbeXQq +EOcLKvbdMpXqWNfs +DnbkKvbdEztQdkcJ +EPCjjvbdDjHjWXjA +EOcKjvbdNQYQvNgT +EPCkKvbdNHCpNPtk +DoCjjvbdbsCkUDjB +EObkKvbdOStWGeUp +EOcKjvbdVqnYBdlD +DoCkKvbdvlvANDeN +DoDKjvbdnQZyWKyC +EOcLKvbdkyTRsYft +EOcKjvbdnVUyjiqf +EPCjjvbdXnRAXtut +EPDKjvbddZxpXxpb +EPDLKvbdfHjvSOQg +DncKjvbdXsMBNTnx +DncKjvbdEARiMzXX +EPCjjvbdOStVgEuQ +DnbjjvbdHELWKCKK +EOcLKvbdehLWSOQg +DncLKvbdYkqctOLm +DoDLKvbdxsOJMqbH +DoCjjvbdzGyMANFX +DoCjjvbdSCEElJZL +DoDKjvbdRkYeuHLT +EOcKjvbdXsLaMsnx +DnbjjvbdePFSkUUS +DncKjvbdGZUuAdXb +EOcLKvbdlZSqsZGt +DncKjvbdiCPCdwRR +EObjjvbdjvXOEBxX +EPDLKvbdRXOEDMHc +EPCkKvbdZisIQHCG +EPDKjvbdjKGIKNYS +DncLKvbdWWiYVdEg +DnbjjvbdaMkBruNH +EOcLKvbdOFEThiKd +DoCkKvbdVZHszLPO +DoDKjvbdiHJcYvJu +EPCkKvbdwuNFRZLn +EObkKvbdJqZdoGNe +EOcKjvbddndsLUUS +EOcLKvbdBraCtGWr +DncLKvbdxrnJNRbH +DoDLKvbdCWzciFPv +EPCkKvbdtlXvaUAw +DoCjjvbdMfbomQUk +DoCjjvbdfoazwDxI +DoCkKvbdauCHXkUI +DnbjjvbdaogHELzd +EPCjjvbdTulPisaR +EPCkKvbdOSsvHEtp +DoDLKvbdTkuoBVni +EPDKjvbdVBBqTRSZ +DnbjjvbdEJgivYKA +DncKjvbdJXtBgkqQ +DnbkKvbdbsCjsdJa +EPCjjvbdhlEcnUby +EObjjvbdssSSyZdc +EObkKvbdhgKCyWJu +EObkKvbddeOqbWcK +DoCkKvbdqvpLcJYq +EPDKjvbdxZgefXeS +EOcLKvbdkVwOEBww +EPDKjvbdemFvfljL +EPCjjvbdFkErcIMu +EOcKjvbdZyEKNcMS +EPDKjvbdqlzJxlHi +EPCjjvbdmbJwXnmu +EOcLKvbdcTDLTcia +DoCkKvbdyzdmqhJI +DnbjjvbdGdLWKBij +DoDKjvbduaDxsPEh +DoDKjvbdZshhxdTO +DncKjvbdptUGqrKt +EPCjjvbdJvVFceGi +EOcKjvbdddoRawDK +DoCkKvbdfMfXHMik +EObjjvbdVAbRSpqy +EObkKvbddZyPxYpb +DnbkKvbdVYgszKnn +DoCkKvbdZMRdUNkm +EObjjvbdTvMPitBR +EObkKvbdIxTaglQp +EObkKvbdGGKSNiUR +DoCkKvbdGBOpyJzm +EPCjjvbdqrUjmjaN +DncKjvbdIMBzmvpk +EPCjjvbdcyxoxYpb +EOcKjvbdmIcsqUrB +DoCkKvbdqvolChyR +EPCjjvbdkHgMGGOL +EPDLKvbdpaIeAWgd +DncLKvbdqvokcIxq +EOcKjvbdZsiJYcrn +EObkKvbdyYJKBpZk +DoCkKvbdKDKDQicY +EObkKvbdlhdTptqa +EObkKvbdyXhjBpZk +EObkKvbdKNAEZfta +EOcLKvbdRyihTCvA +DncLKvbdtcCtwVno +DnbjjvbdVZITykOn +DoCjjvbdJSyArlwl +EPDKjvbdDxYLtUUM +EPDKjvbdvlvANEFN +DoDKjvbdrykpTAgn +DnbjjvbdeYZtUSFz +DoDKjvbdzjVQQETU +EObjjvbdiHJbyVjV +DoCjjvbdcScLTcjB +DncLKvbdhaoDEwQq +DnbkKvbdQlwbZNtz +EPCjjvbdEARiMzXX +EPCjjvbdGFjSOIsq +DoDKjvbdrXPlChxq +DoDLKvbdYqMeImEq +DoDKjvbdOFETiJKd +EPCjjvbdCTBDUFvr +DoCkKvbdZoOIdeZj +DncLKvbdHgHZyYXg +EOcLKvbdCSaCsevr +DoCjjvbdsQWOjCuf +DoDKjvbdKWUfDeGi +EOcKjvbdzitpPcrt +EPDKjvbdZyDimcMS +EPCjjvbdBcpAuilf +EOcKjvbdqwQMCiYq +EOcLKvbdsrrTZZdc +EObjjvbdSQUHKGEX +DoDLKvbdcyxoxZRC +EObkKvbdWXJYWEFH +DnbkKvbdhgKDYuiu +DoDKjvbdrSVLOKaN +EPCjjvbdMoxQumgT +EPDKjvbdcbTMrATm +EPDKjvbdznopdcMY +DnbjjvbdzdzOzdyp +EObjjvbdGYuVBEXb +EPDKjvbdiZtekpnG +DoDLKvbdvvlAuaVu +DoDKjvbdEYXkstTl +EPCjjvbdauCHYKsh +DoCjjvbdDjIJuwjA +EObjjvbdkNCLzFGo +EPDLKvbdiGicZWKV +EPCkKvbdtlXvaTaX +DoCkKvbdpyOggQcx +EObjjvbdtTSSyZdc +DoDLKvbdiZtelROG +EOcLKvbdWRnYCFMD +EPDLKvbdNddUIhjd +DncLKvbdEObjjvbd +EPDLKvbdVUNTelVj +EPCjjvbdVhXvYGxz +DoCkKvbdfRaWzkbo +DoCjjvbdRjyGVHKs +DoCjjvbdSKxfUfkT +EOcKjvbdaRecITek +DoCkKvbdEJhKVwjA +DoDLKvbdwXLaWBVu +EPDLKvbdLYqJrztf +DncKjvbdUMVoAuoJ +DnbjjvbdvmWAMcdm +EObjjvbdpssfqrKt +DnbjjvbdhlEcnVDZ +EOcKjvbdNsUWGeVQ +EObjjvbdVUNTekuj +DnbkKvbdVYgsykOn +EObkKvbdpssgSRjt +DncKjvbdVZITzLOn +DoDKjvbdGGJrNiTq +DoDLKvbdACqwizJQ +DoDKjvbdIryArmXl +DoCkKvbdZMRdTmlN +DnbkKvbdrovPKDVf +EObkKvbdrounjDWG +DnbjjvbdCSaDTevr +DnbjjvbdUyITyjnn +DnbkKvbdKRZeOfOF +DoCkKvbdDigiuxKA +EOcKjvbdxsNhlrCH +EOcLKvbdDjHiuxKA +DncKjvbdXmqAXtvU +DnbjjvbdqFdFTvAh +EObkKvbdxrmhmSBg +DoCjjvbdIidAKPfd +EOcKjvbdKQydoGOF +DnbjjvbdlqyUzSdJ +EPDKjvbdtvOYKQsA +EPCkKvbdcIljLFvx +DoCjjvbdYqNEhldq +EPDKjvbdczYpYZRC +DoDLKvbdiBoCeXQq +EOcLKvbdiCPDFXRR +EPDLKvbdZisHofaf +EPDKjvbdmIdURVSB +EPDKjvbdZRNFIldq +DoDKjvbdJpydoFme +DoDLKvbdWWhwudEg +DncLKvbdDnbjjwDE +DncKjvbdqTsfqqkU +DncKjvbdKDKDRKDY +DoDKjvbdTulQJsaR +DoCjjvbdSBdFMIyL +DncLKvbdqTtHSSKt +EOcKjvbdBcoaVjMf +EObjjvbdiiehKNXr +EObjjvbdCWzciFQW +EPDLKvbdWSNwadlD +EPDKjvbdKVuGEFHJ +DoCkKvbdZMRdUNlN +EPDKjvbdZRMdiMdq +EPCkKvbdxUmEpyMO +DoDLKvbdRkYfVHKs +EObjjvbdIwtCIMQp +EPDKjvbdmJDsqUqa +EPDKjvbdrDeJPmvB +EOcKjvbdTvMPisaR +DncKjvbdMtsRjmAX +DnbjjvbdlqyUysDi +EPDKjvbdQwNdClID +DncLKvbdRjxfVGjs +EObkKvbdauBfxKtI +DoDLKvbdiZtfLpnG +DoDKjvbdhancFXRR +DoDKjvbdREDBQQdS +EObjjvbdrzMQTBIO +EOcKjvbdcImKKfXY +DoDLKvbdijGIKNXr +DncLKvbdgGMZmfgA +EPCjjvbdZnmheFZj +EPDKjvbdmuVZjiqf +EObjjvbdeFPRawDK +EPDLKvbdrNZiyLhJ +EOcKjvbdlhdURUrB +EPDLKvbdGGJrNhtR +EOcKjvbdiGibyWKV +EOcKjvbdQlwbZNtz +DncLKvbdnVUzKiqf +EOcKjvbdbsDKscjB +EPDLKvbdDnbjjvcE +DoCkKvbdySmhmRag +DncKjvbdkyTSTYft +DoDLKvbdEYXkstUM +EOcKjvbdiHJbyVjV +EOcKjvbdsQVnicWG +DoCkKvbdoznDkYPA +EObkKvbdURQoVVHm +EPDLKvbdFfKSNiTq +DnbjjvbdVgxVwgYz +DnbkKvbdmfeYNOHZ +DoDKjvbdyqPNIiwA +EObjjvbdFVyQPlie +EOcLKvbdGdKvKBij +EPCjjvbdDwxMUTtM +DoCkKvbdKVtfEEfi +DoCkKvbddjKRvUzn +EObkKvbdliEURVSB +EPDLKvbdWSNwaeMD +EOcLKvbdJqZdoFnF +DnbjjvbdKxqJrzuG +DnbjjvbdmuUyjjSG +EPDLKvbdADRxKZhp +EPCkKvbdiCPDEwRR +EObjjvbdTXkMNzkY +DnbjjvbdMgDPlouL +EPCjjvbdyzeNqghh +EOcKjvbdmuUyjjSG +EPDKjvbdDoDLKvcE +EPDLKvbdNxPVzdNt +DoDKjvbdBhjbKhfK +DnbjjvbdZLrETmlN +DoCkKvbdHffyxwwg +EOcKjvbdYSlAmUPY +EPCjjvbdtTSTYzFD +DoCjjvbdFjeTCgmV +EObjjvbdNwnuzcnU +DoDLKvbdSPsfiecw +DoDKjvbdKVtedFGi +EObjjvbdUaCQsRRy +EObkKvbdbsDLUDjB +EObkKvbdEOcKjvcE +EPCjjvbdyNsIYShc +EOcLKvbdbVCGxKsh +DoDKjvbdlZSqsYft +DoCjjvbdUslselWK +DncLKvbdbUbHXkUI +DnbkKvbdYkqcsmkm +DncKjvbdXsMAmUOx +DoDKjvbdJuuFcdgJ +EOcLKvbdGLFTChNV +DoCkKvbdaaWEfQQX +DncKjvbdVqnXbFMD +EOcKjvbdZyEJnClS +DoCkKvbdNdctJIjd +DoDLKvbdmaiwYOmu +EPCkKvbdmbJvxPOV +DncLKvbdTqRPUuIN +EPDLKvbdGGKSNiUR +EPCjjvbdIwtCIMQp +EOcKjvbdHDjvJajK +EOcLKvbdZyEJnDMS +DnbkKvbdrWpMDJZR +EOcLKvbdbUagXjtI +EOcLKvbdLGFgbBRV +EOcKjvbdqvpMDIxq +EPDKjvbdOAJSsjSA +DncKjvbdsrqsYyeD +DnbjjvbdtkwvaUBX +DnbjjvbdGQASwGfZ +EObkKvbdURROtuIN +EObkKvbdiUydwRtb +EOcLKvbdqlyixkhJ +EPCkKvbduaEYroFI +DoCkKvbdnUtyjiqf +DoCkKvbdssSTYzFD +DncLKvbdeATqMwjG +DnbkKvbdqlyjYlHi +DncLKvbdTAEhhCOd +EOcLKvbdpxoIHQdY +EPDKjvbdEXxLsstM +DncLKvbdbLLfPNcA +DoDLKvbdCWzdIeQW +DnbjjvbdWSNwbElD +DoDKjvbdGFjSOJUR +DoCjjvbdmttzKjRf +EPCjjvbdqmZjZMHi +DncLKvbddwzUTqez +EObkKvbdrEFIpOVa +DnbjjvbduMYWaTaX +EPDKjvbdTAEiIBoE +EOcKjvbdVrNwaeMD +DoCjjvbdSwkMNzjx +DoDKjvbdZoNheEyj +EObjjvbdFpASvgGZ +DnbkKvbdvBDxsPEh +DoDKjvbdIHGzYxYH +EOcLKvbdhanbeXQq +EObkKvbdACqxJyhp +DoDLKvbdgQBzwDxI +EObjjvbdOYOuzdNt +DnbjjvbdRWmdDMHc +EPCkKvbdePFTLUUS +DnbkKvbdHlBznWpk +EPCkKvbdqlyixlIJ +DnbjjvbdIHHZyYXg +EObjjvbdBcoaVimG +EOcLKvbdZnnIddzK +DnbjjvbdBiLBjhfK +EPDLKvbdeOeTKtTr +EObkKvbdYlRcsnLm +DoDKjvbdnHExNOGy +DoCkKvbdnCJwXoNu +EOcKjvbdwWlBWBWV +DnbjjvbdGYuVAdXb +EObkKvbdLGGHbBQu +EPCkKvbdEJgjVxKA +EObkKvbdlqyVZrdJ +EObkKvbdaNLBsUmH +EPCkKvbdGQASwHGZ +DncLKvbdnBjWwnnV +DnbjjvbdUslsekuj +DncLKvbdeATqNYJf +EOcLKvbdIwtCHlQp +EOcLKvbdGLErcIMu +DnbkKvbdjvXOECXw +EPCkKvbdfSAvzkbo +DnbjjvbdsCGNMHKy +DoDLKvbdURQnuVHm +EObjjvbdQvmdCkgc +EPCjjvbdSPsgKFcw +EPDLKvbdYpmEhleR +EPCjjvbdFjdsDHlu +EPDLKvbdqdFIpOWB +EObjjvbdnQZyVkZC +EPCjjvbdQdCaQRES +DnbjjvbdADRwiyiQ +DnbjjvbdiiehKNYS +DoCkKvbdHkaznWqL +EObjjvbdmoyxujxb +EOcLKvbdxxIibQZk +EObjjvbdsPuoKCvG +EObjjvbdjcMKpftg +EOcKjvbdZisHofbG +DncLKvbdUGznLwWF +DoDLKvbdFfJqnJUR +DnbjjvbdsBelkgLZ +DoCkKvbdrbGNLfkZ +DncKjvbdeYZssqez +EPCkKvbdyNsHwsIc +DnbkKvbdrafMkfjy +EPCjjvbdZyEJnDMS +DnbjjvbdFpASwGey +DnbkKvbdLGGIBaQu +DncLKvbddiiqutzn +DncKjvbdWIXuwfxz +DoCjjvbdNPxRVnHT +DncKjvbdwygefXeS +EPDLKvbdmJEUQtrB +EPCjjvbdQwOECkhD +DoDLKvbdNGbpMotk +DncLKvbdRyjIScWA +DncLKvbdVrOXaeMD +DncLKvbdQmYBxnUz +DnbjjvbdVBCRSqSZ +EPCkKvbdRosfifEX +EPDLKvbdlYrqrxgU +EPDLKvbdKVuGDeHJ +DncLKvbdDncLLWcE +EOcLKvbdfNGXGmKL +EOcLKvbdQvmdDMHc +EOcLKvbdEARiMyvw +DoCjjvbdnHFXlnGy +EOcKjvbdhtyeXRtb +DncKjvbdMgDQNQVL +EObjjvbdpedFUWBI +EPDKjvbdkHfkfFnL +DoDKjvbdrXQMChyR +EObkKvbdREDAoqES +DoDKjvbdBdQAvKMf +DoCkKvbdjvWnDaxX +DnbkKvbdePEsKstS +EPDKjvbdyOTHwsJD +DnbkKvbdrSVKnKaN +EPCkKvbdZirgpHBf +DoCkKvbdsQVnjDVf +DnbjjvbdGLEsCgmV +EPDLKvbdelewHMjL +EObjjvbdjlbMZeGo +DoDLKvbdxrmhlrCH +DoCkKvbdczZQXyQb +EObjjvbdRDcBQRDr +DoCjjvbdxLXEHzyf +DoCkKvbdkySrTZGt +DoCjjvbdDoDKjwCd +EObkKvbdKWVGEEfi +DoDKjvbdTqQoUuIN +EObjjvbdZRNEiMeR +DoDKjvbdxUmEpyMO +EPDLKvbdxxJJaozL +EObkKvbdraemLfkZ +EPCjjvbdbiNKLFvx +DnbjjvbdZjSgpHCG +EObjjvbdqBIeAXHd +EObjjvbdVUNUGMWK +EPDKjvbdliDsqUqa +EOcLKvbdxZgfGYFS +DnbjjvbdYpmFJMdq +EPCkKvbdcTCjtEKB +DncLKvbdVUMtFlVj +EPDKjvbdcIlijevx +DoCjjvbdpstHSSKt +EOcKjvbdLAjgMaxR +DoDKjvbdHkaznXQk +EPDLKvbdrovPJcVf +EObjjvbdjblLRHVH +EPCkKvbdfSAvzlCo +EPDLKvbdkHfkefOL +DoCjjvbdbiNKKfXY +EPDLKvbdjJfHilwr +EOcKjvbdxVMeQxkn +DncKjvbdqlzJyMIJ +DoDLKvbdffMZnGgA +EPDLKvbdrpWPJcVf +DnbkKvbdNsTvGeVQ +DncKjvbdZshiZETO +DoCjjvbdWRnXaeLc +EPDLKvbdUaCRTQqy +EOcKjvbdKDKDQjCx +EPCkKvbdLKaIWAJy +DoDKjvbdjblKpftg +EPDKjvbdfHkWSNqH +EObjjvbdSCEEkiZL +EPDKjvbdcyxpYZQb +EPDLKvbdVUMtFkuj +DnbjjvbdVBCQrprZ +EObjjvbddoEsLUUS +DnbkKvbdiHKDZVjV +EOcKjvbdpyPHgRDx +EObjjvbdYpleJNFR +DncLKvbdrDdhpOWB +DncLKvbdcbSmSAUN +DncLKvbdQwODcLgc +EPCjjvbdKVuFcdgJ +EPDLKvbdJvUecdfi +EObkKvbddjJqvUzn +EPCkKvbdLrXNZuQz +DnbkKvbdDihJuxKA +DoCjjvbdegkWSORH +DncKjvbdFyVUaEYC +DoDLKvbdNHDPlpVL +DoDLKvbddneTKtUS +DoCjjvbdEARhlywX +DncKjvbdmbJwYPOV +DnbjjvbddeOrBvbj +EPDKjvbdAMhZTXZx +DnbjjvbdULuoBVoJ +DoCkKvbdMfbomQVL +EObjjvbdyTNhlqbH +EPDLKvbdcyxowxpb +DoCkKvbdEPDLLXCd +DncLKvbdSCEFLiZL +DnbjjvbdBiLCKiFj +EPCjjvbdmgExNNgZ +EOcLKvbdsPvPKDVf +DoCkKvbdbKkfOmcA +DncLKvbdIxTaglRQ +DnbkKvbdFVyQQNJe +EPDLKvbdbsCjtEKB +EPDKjvbdakMFnnDA +EObjjvbdWWiYVcdg +DnbkKvbdfSAvzkcP +EOcLKvbdbKkennDA +EPCjjvbdTppoVUhN +EPDLKvbdemGWgMjL +DnbjjvbdJvUedFHJ +DoDLKvbdqvokbiZR +EPCjjvbdZMRctOMN +DoCjjvbdNPwpunGs +DoCkKvbdZtJIyDrn +EPCjjvbdFejRnIsq +EPDLKvbdZshhxdTO +DncLKvbdxZhGGXeS +DoDLKvbdKyRKSztf +EPDKjvbdCflFgAzc +EPDKjvbdOEdThiKd +DoDLKvbdTAFIgaoE +EObjjvbdEARiNZvw +EOcLKvbdjhHLefOL +DncKjvbdbVCHXjtI +EPDKjvbdeFPRawCj +DoDLKvbdtcCuWuoP +DoDLKvbdUVkpJtAq +EPCjjvbdaSFcHsfL +EPDKjvbdPxmAGrrK +EPCkKvbdDjHjWXjA +DnbkKvbdpssfqrKt +DoDKjvbdePEsKtTr +EObkKvbdDwxMUTtM +DnbkKvbdZRMdiNEq +EPCjjvbdhuZdvquC +DoCjjvbdGLEsChMu +EPDKjvbdRDbaQQdS +EOcKjvbdEJhJvYKA +DncKjvbdkxsSSxft +EObjjvbdKRZdnfOF +EOcLKvbdZQmFIleR +DnbkKvbdjcLjpfuH +DnbkKvbdYzbfSKWZ +EPDLKvbdbUafxLTh +EPCjjvbdJuuFcdgJ +DoCkKvbdJcKCqJcY +DoCjjvbdSKyGVGkT +DoCjjvbdemFvflik +DoCjjvbdvBEYsPEh +EOcKjvbdCWzdJEov +DncLKvbdqTsgSSKt +DnbkKvbdUMVoBWOi +EPCkKvbdOEcsiIjd +DncLKvbdaSFbhUFk +DoCkKvbdhtzEwRuC +DoCkKvbdiCOcEvqR +DoCkKvbdfILVqnRH +DnbkKvbdCJLCKhej +EPCkKvbdakLeoODA +DnbkKvbdUaCRTQrZ +DoDKjvbdRacdkhyL +EPCjjvbdYNqAXtut +DncKjvbdwzHfFwdr +DncLKvbdNrsvGeUp +EPDKjvbdDoCkKvbd +EPCjjvbdrafNLfkZ +EObjjvbdmajXXoOV +DncLKvbdVAbRTQrZ +EObkKvbdkySrTZHU +DoDKjvbdZeXfzghb +EPDLKvbdiCOcFWpq +EOcKjvbdUQpnuUhN +DncLKvbdijGIKMwr +DncKjvbdHgHZxwwg +DncLKvbdVTmUFlWK +DoDKjvbdeYZtUSFz +EPDKjvbdHffyyYXg +DncKjvbdXsLaMtOx +DncKjvbdzitoocrt +DoDKjvbdhtyeWquC +EPDKjvbdEuyPpNKF +DnbkKvbdtvOYKRTA +DncKjvbdZnnJFEzK +EPCkKvbdqZPIGpcx +DnbkKvbdVgxWYGxz +EPCjjvbdOStWHEuQ +EObkKvbdNddTiIjd +DoDKjvbdwXMBWAuu +EPDLKvbdsPvPKDVf +DncLKvbdQvnDbkhD +DncKjvbdEKHjWYKA +EPCkKvbdCgMFgAzc +EOcLKvbdQvnDbkgc +EPCjjvbdDoCkLWbd +DnbkKvbdKCibpicY +EOcLKvbdhfibyViu +EOcLKvbdzQnliJwA +DncKjvbdEASImZwX +EPDLKvbdFkFTChNV +DnbjjvbdEuxoomKF +EOcKjvbdYqMeJMeR +DnbjjvbdgQBzvdYI +DoCjjvbdkxrrSxft +DnbjjvbdjuwNdCYX +EOcLKvbdfpBzwEXh +DoCkKvbdnHFYMmgZ +EOcKjvbdjlbMZeHP +DoCkKvbdmttzKjSG +EPDLKvbdzjUopDsU +EPDLKvbdsZlPraIO +EOcLKvbdLBLHMbYR +EPDLKvbdtbcVXVno +DoDLKvbdaaVeGQQX +EPCjjvbdWSOYCEkc +EObjjvbdxUmFQyMO +DoDLKvbdRbDdkiZL +DoCjjvbdhlFDnVCy +EPDKjvbdcTDKscia +EPCkKvbdjlbMZeGo +DncLKvbdCIkCKiGK +DoCjjvbdrbFmMGkZ +EObkKvbdQccAoqDr +DnbjjvbdTqRPVUgm +EPCkKvbdNrsufeUp +EOcLKvbdrMyjZLhJ +EPDLKvbdiifHimXr +DnbkKvbdpstHSRjt +EOcKjvbdZtIhxdSn +DnbkKvbdbhmKLGXY +DnbkKvbdkxsSSxft +DoCjjvbdTAFIhBnd +EObkKvbdUtMtGLvK +EPCjjvbdpstGrSLU +DncKjvbdxLXDgzyf +EOcKjvbdSCDdlIxk +EObkKvbdOFEUIiLE +DnbkKvbdjggLefNk +DncKjvbdliEUQtqa +EOcLKvbdFjdsDHlu +DncLKvbdeEnqavcK +EOcLKvbdnPyyVjyC +DoDKjvbdliDsptrB +DoCkKvbdrXQLbiZR +DncLKvbdFkErbhNV +DoDKjvbdTqROtthN +DoCkKvbdYSlAmUOx +DnbkKvbdKVuGDdgJ +EOcKjvbdvwLaWAvV +DoDLKvbdEObjjvbd +DnbkKvbdwXLaWBVu +DnbkKvbdmtuZjiqf +DoDKjvbdegkWRnRH +DoCkKvbdeXzUUSFz +DncLKvbdfNGXGmJk +DoCjjvbdEztQdlCi +EPCkKvbdEuyQPljF +EPCjjvbdrEEiQNvB +DnbkKvbdLqwNZtpz +EObkKvbdKeegbBQu +EObkKvbdvBEZSoFI +DoDLKvbdrXQLbhyR +DnbkKvbdbKlGPODA +DncLKvbdnCKXYOnV +EOcKjvbdjcMKpfuH +DoCkKvbdQdCaQRES +EPCkKvbdDncKjwCd +DoDLKvbdYlSDtNkm +EObkKvbdmbKXXnmu +EPCkKvbdjgfkfGOL +DnbkKvbdZyDjNcMS +EOcLKvbdkNCLyeHP +DncLKvbdVUMtGLuj +EOcKjvbdKVtedFGi +EPCjjvbdKRZeOenF +DoCjjvbdUQqPUthN +EPDKjvbdkMbLydgP +EObjjvbdVqmxBdlD +EPDKjvbdjAQGaPgK +DoCkKvbdTlVnaWPJ +EPCjjvbdwjvdHzzG +EObjjvbdBsBCtGWr +EPCjjvbdwuNEqZMO +DncLKvbdbrcKtEKB +EPCkKvbdFyVVAcxC +EPCkKvbdaSGCgsfL +EPDKjvbdrylQTBIO +DncKjvbdfSBWzlCo +EObjjvbdfRaWzlCo +DnbkKvbdsPvOjDWG +EPCjjvbdcbSlrAUN +EObkKvbdrWpLbhxq +EPCjjvbdhgKDZVjV +EOcKjvbdhlFDnUby +DoCkKvbdddoSBvcK +DoCkKvbdpssfrRkU +DoDLKvbdJutfEFGi +EObkKvbdEPDKkWcE +EOcKjvbdcJNJjevx +EPCjjvbdcTDKscia +DncKjvbdYlRcsmlN +EPDLKvbdkHgMFfNk +DoCkKvbdjbkjqGuH +EPDKjvbdTvMPjUAq +DnbkKvbdQYmAGsRj +EPCkKvbdKeegbApu +EPDKjvbdiLdcmtcZ +DoCkKvbdNeDshhjd +EOcLKvbdxnShXsIc +EPDLKvbdyOShXrhc +EObkKvbdbPgHELzd +DoCjjvbdDoCkKwDE +EOcLKvbdmbJvxPOV +DnbjjvbdkNBlZeHP +DnbkKvbdRXNdDMID +DncLKvbdXnRAYUvU +EObkKvbdBcpAuilf +EPDKjvbdSLYeuGkT +DoCjjvbdRaceLiYk +DncLKvbdZoNiFEzK +EOcLKvbdGLEsDIMu +DnbjjvbdnUuZkJqf +DoCkKvbdlqyUyrci +DoCkKvbdLGGHaaRV +DnbkKvbdmoyyWLYb +DncKjvbdMpYRWOGs +DnbjjvbdkyTRsYft +EObkKvbdjKFhJmXr +DnbjjvbdxLWcgzzG +DoCkKvbdxnShXrhc +DnbjjvbdRbEEkiZL +EOcLKvbdWWiXudEg +DoDLKvbdDjIKVxKA +DoDKjvbdgFkzNgHA +EPDLKvbdvvlAuaVu +EPDLKvbdauBfwkTh +DncLKvbdmIctQtrB +EPDKjvbdCDpBWJmG +DoDKjvbdvAcxsPEh +EOcKjvbdrJAKFNOe +EOcLKvbdbsDKscia +DncLKvbdAMhYsWzY +DncKjvbdddnrCXDK +EOcLKvbdkHflGGOL +DoDKjvbdbUafxKsh +DnbkKvbdNdctIiLE +EOcLKvbdvBDyTPEh +DoCjjvbdFejSOJUR +DnbkKvbdUQpntuHm +EObjjvbdTpqOttgm +DoDLKvbdddoSCXCj +DncLKvbdbVCHXkUI +EPCjjvbdKNAEZgVB +EPDKjvbdFjdsDIMu +DnbjjvbdpaIeAXHd +EOcLKvbdrDdhpOWB +EPDKjvbdIxUBhLpp +EPDKjvbdhkddOVCy +EPCkKvbdTkuoAuni +EPDLKvbdnPyxujxb +EObjjvbdfSBWzlCo +EPDKjvbdMuSrKmAX +EPDLKvbdmozYvKyC +DnbkKvbdZirhPfaf +EPCjjvbdNQXqWOHT +DncKjvbdZsiIyESn +DnbkKvbdURQnuUgm +DoCjjvbdkIHMFfOL +EPDKjvbdKfGHaaRV +DncLKvbdtcDUwVoP +EOcLKvbdxrnImRbH +EPDLKvbdozmdLYPA +DoDKjvbdUVkojUBR +DnbjjvbdqUUHRrLU +DoDLKvbdEARhmZvw +EOcLKvbdZHWdAOri +DoCjjvbdVUMtGLuj +EOcLKvbdmfeYNNfy +EPDKjvbdZirgogCG +DnbjjvbdEJhKVwjA +DnbkKvbdkVvmdBxX +DnbjjvbdvBEYsOeI +EPCkKvbdDoCjjwDE +DoCjjvbdRXNdClID +EPDKjvbdkxrrTZGt +EOcLKvbdZdxGzhJC +DoDLKvbdxnSgxSiD +DoDKjvbdIryAsMxM +DnbkKvbdTYKlNzjx +DncLKvbdIGfzZYXg +DncLKvbdQvnEClHc +DnbkKvbdqUTfrRkU +DoDKjvbdRDcAopdS +DoDKjvbdTfznMXWF +EOcLKvbdauCHYKtI +EObkKvbdNrsvHEtp +DoDLKvbdDihJvXjA +DnbjjvbdliDtRVRa +DncKjvbdgFlZmfgA +DncLKvbdmJDsptqa +DncKjvbdfoazvdXh +EOcKjvbdJXtBgkpp +EPCkKvbdqUUGrSKt +EPDKjvbdrMzJyLgi +EPCjjvbdiGjDYuiu +EOcLKvbdkWXNcaww +EOcLKvbdxxIjBoyk +DnbkKvbdePErjssr +DnbjjvbdIryArmYM +EOcLKvbdRMwayNtz +EOcLKvbdRkZGUgKs +DoDKjvbdZLrEUOMN +DnbkKvbdDHMFgAzc +DnbkKvbdwXMBVaVu +DnbjjvbddeOrCXDK +EPDLKvbdwuMeQyLn +EPCjjvbdBhjbLIej +EPDKjvbdaNLCSuMg +EPCjjvbdBhkCKhej +EPCkKvbdptUGrSKt +EObkKvbdVTmTfLvK +DoCkKvbdDoDKkXDE +DnbjjvbdfoazvdYI +DnbkKvbdatbHYKtI +DnbkKvbdVUMtGLuj +EPDKjvbdeEoRavbj +DoCkKvbdJpzFPGNe +DnbjjvbdNHDQNQUk +DncKjvbdYNqAXuWU +EPCkKvbdZnnIddzK +EObkKvbdYlRdTnMN +EPDKjvbdEzspdkcJ +DoDLKvbdCIkBjhfK +EObjjvbdTkuoAvOi +DoCkKvbdhkdcnUby +EPCjjvbdHfgZyYXg +DncLKvbdbsCkTdKB +DoCjjvbdLqwMzVQz +DoDLKvbdRkYfUgLT +EOcLKvbdbQHHELzd +EPCkKvbdbVCGxLTh +EObjjvbdmSYuZsEJ +DoDKjvbdssRsYyeD +EPDKjvbdLrWlytpz +DncKjvbdJTZBSlxM +DnbkKvbdxrnJMrBg +EPCjjvbdxZgfFxFS +EObkKvbdUQpnuVIN +EObkKvbdzjUpQESt +EObjjvbduaDxsPFI +DoDLKvbdkyTRsYft +DoDKjvbdyTOImRbH +EObkKvbdegkWRnQg +DoCjjvbdaSFbgsek +DoDKjvbdrylPsAhO +DoCjjvbdgGMZnGgA +EPCkKvbdlqyUzSdJ +DncKjvbdwNWAMdFN +EPDKjvbdTlWPAuoJ +EOcLKvbdUMWPAuoJ +DnbjjvbddZxowxqC +EPCkKvbdEuyQPlie +DoDKjvbdVAaqSqSZ +EPDLKvbdwtldpxlO +EOcLKvbdrRtkNkBN +DncKjvbdJqZeOenF +DncKjvbdfHkWSNqH +DoCkKvbdnUuZjirG +EOcKjvbdsCFmMGkZ +DoDLKvbdwzIFfYEr +EOcLKvbdqqtjmjaN +DoCjjvbdrbGNLgKy +EPDKjvbdNHComQUk +DnbkKvbdIMBznWqL +EPCjjvbdEKHivXjA +EPDLKvbdVhYWYGxz +EPDLKvbdZxcjNblS +DnbjjvbdJpzEoFme +EPDKjvbderBWzkcP +DoDLKvbdpssgRrKt +EObkKvbdtbbtvuoP +EOcLKvbdqGDeUWAh +DoDKjvbdlZSrTYft +EOcKjvbdFfKRmhtR +DnbkKvbdNPxRVnGs +EPDLKvbdZshhxcsO +EPCjjvbdMoxQvNgT +EPCjjvbdKaKfmBxR +EPDLKvbdSwjkmzjx +DoCkKvbdjbkkRGtg +DoDKjvbdfoazwDxI +DoDKjvbdqwQLbhxq +EPCkKvbdZtIhyETO +DncLKvbdmpZxukYb +EOcKjvbdMoxQumgT +DoCjjvbdLYqJrzuG +EObjjvbdnGeXlmfy +EPDLKvbdyzeOSHhh +EOcLKvbdiZuGMQmf +EPCkKvbdWSNwadkc +DncKjvbdhfibyVjV +EOcKjvbdQmXbZOUz +DoCjjvbdSKxeuGkT +DnbjjvbdbrbkUDjB +EPDLKvbdJcKCqJbx +DnbjjvbdjSziTLJz +EOcKjvbdZxdKNcMS +DoCkKvbdelfWfmJk +DoCjjvbdFjeScHlu +EPDLKvbdnCJvwnnV +EPDKjvbdNrsufduQ +DnbkKvbdjcLjqGuH +EObjjvbdmbKXYOnV +DoCjjvbdRacdkiYk +EObkKvbdaaVdfQQX +DoCkKvbdJpydnfOF +DoCkKvbduCbtwVoP +DoDKjvbdpxnhHRDx +EOcKjvbdmJEUQtqa +EPDLKvbdRkZGVGjs +EPDKjvbdEObjkXCd +EObjjvbdCTAbtGWr +DoCkKvbdqTsfrSKt +DncLKvbdaMkBsUmH +DncLKvbdqlyixlIJ +EPCkKvbdvwMAuaVu +DncKjvbdiUzEwRuC +DoDKjvbdiUzFWrVC +DnbkKvbdkDMKpfuH +EObkKvbdZnnJFEzK +EObkKvbdWWhwudEg +DoCjjvbdypoNIiwA +DoCjjvbdShyiqABM +DnbjjvbdOFEThhkE +DnbjjvbdRXNcbkgc +DoCkKvbdqUTfrSKt +EPDLKvbdfNGWgMjL +EPDLKvbdGFirOJUR +EOcKjvbdSCEFMJYk +EOcKjvbdmpZxukYb +EPDLKvbdrafNLgKy +DnbkKvbdmJDsqUrB +DnbjjvbdjKFgimXr +EOcLKvbdVYgtZjoO +EObkKvbdTvMPjUBR +EOcLKvbdSxKkmzjx +DoDKjvbdnPzYvKxb +EPCjjvbdaRfDITek +EObkKvbdjKGIJmXr +DoCjjvbdliEURVSB +EObkKvbdFaOqYizm +EOcLKvbdqGEEsuaI +DoCjjvbdZQleJNEq +DoCjjvbdbKlFnnDA +DnbjjvbdWIXuwfxz +EPDLKvbdNGcPmPuL +DoCjjvbdBsBDTevr +DnbkKvbdczYoxYpb +EObjjvbdJutedEfi +DncLKvbdGFirNhsq +EPDKjvbdUaCQrqRy +EPCjjvbdQwNdDMID +EPDLKvbdtSrSyZeD +DnbkKvbdNHDQMpUk +DoDKjvbdZirgofaf +EObkKvbdrpWOibuf +DoCkKvbdwygfFxEr +EPCjjvbdSwjlNzjx +DnbkKvbdjKGHjMxS +DncLKvbdijFhKNXr +EOcKjvbdddoRavbj +EPDLKvbdmIdTpuSB +DncLKvbdiiehJmYS +EObkKvbdjcLkQgUg +DoDKjvbdsQVoJbuf +EObjjvbdhzUfMQmf +DnbkKvbdcImKKfWx +EObkKvbdbQHHELzd +DnbjjvbdWWiXuceH +EPDKjvbdjJegjNXr +EPCjjvbdZyEKNblS +DoDKjvbdLqvlzVQz +EPDLKvbdZRNEhmFR +DnbkKvbdGcjuibJj +EOcLKvbdGAnpxizm +EPCjjvbdkVvnDaww +EOcKjvbdHffzZXwg +DoCkKvbdKeehCAqV +EPCjjvbdHEKuiajK +EOcKjvbdUtMselWK +EPDKjvbdEXwlTstM +EPDKjvbdsrrSxzFD +EOcKjvbdEztQeMDJ +EPCkKvbddoFSjstS +DoCkKvbdSCEElIyL +DncKjvbdFVxpQNJe +DnbjjvbdXmqAYUut +DoCjjvbdiZtfLpmf +DoDKjvbdwygeexEr +EOcLKvbdiUyeXSUb +DncKjvbdsZkoraIO +EOcLKvbdACrYJyhp +EOcLKvbdTlVoBVoJ +EPCkKvbdqZPHfqDx +DnbkKvbdmJDsptqa +DncKjvbdhkeDnUcZ +EPDKjvbdURQoUtgm +EPDKjvbdjAQHAogK +EObjjvbdCIkCKhfK +EOcKjvbdYzbfRjWZ +DnbkKvbdWRnYCEkc +DncKjvbdyzeORgiI +EObjjvbdEPCkLWbd +DoDLKvbdNHComPuL +DnbkKvbdaRebhUFk +DnbkKvbdhlEcmtby +EOcLKvbdliETqUrB +EPDKjvbdIxTbHkqQ +DncLKvbdCEPaVjNG +EOcLKvbdIjEAJogE +DoCkKvbdsZkpSaHn +EPDLKvbdEXxLtTtM +DncKjvbdwXMAvAuu +EPDKjvbdakMGPODA +EPCkKvbdauBfxKsh +EOcKjvbdCJKakJFj +EPCkKvbdyXhjBozL +DoDLKvbdkWWnDbYX +DncKjvbdEPCjkXDE +DoDKjvbdlqxtzTDi +EPCjjvbdyTOJNSBg +DoCkKvbdnGeYMmgZ +EPCkKvbdaSFbhUFk +EObjjvbdnCKWxPNu +DoCjjvbdrWpLbhyR +EPDLKvbdmRxtyrci +DnbjjvbdSBdElJZL +DnbkKvbdrXQLbiYq +DoDLKvbdWHwuwfxz +DoCjjvbdZRNFJNEq +DncKjvbdUVkpJsaR +DoCjjvbdbiMijfXY +EPDKjvbdVTmTekvK +DoCjjvbdeXytTrFz +DoDLKvbdyYJKCQZk +DoDLKvbdczZQYZQb +EObjjvbdRadFMJZL +DncLKvbdkVvnECYX +DncKjvbduaDySneI +DnbjjvbdwuNFQyMO +DncLKvbdsrqrxzEc +DoDLKvbdcSbjtEKB +EPCjjvbdZtJIyETO +DoDLKvbdJvUfDdgJ +DnbjjvbdhbPDFWqR +DncKjvbdcyyQYYpb +DoDKjvbdWSNwbFMD +DoCjjvbdmajXXoNu +EPCkKvbdxZgeexEr +EOcKjvbdxsOIlrBg +DoDKjvbdZyEJmbkr +DncLKvbdTkunaVni +EOcLKvbdUQpoUthN +DoDLKvbdyNsHxTJD +DncKjvbdEztRElCi +DnbkKvbdXnRAYVVt +DnbjjvbdqAheAWgd +DnbkKvbdCJLBkIfK +EPDKjvbdUGzmkwWF +EPCkKvbdSiZiqABM +EPDLKvbdidkGtoAO +EOcLKvbdYlSDsnLm +EPDKjvbdMSWmZtpz +DoDKjvbdlhdURVRa +EOcLKvbdOYOuzdOU +DncLKvbdrafMlGkZ +EObjjvbdrylPraHn +DnbjjvbdDncLKwCd +DoCkKvbdoznELXoA +DoCkKvbdmttykJrG +DoDLKvbdBvzciEov +EPCjjvbdeXzUUSFz +DoDKjvbdtunYKQsA +EObjjvbdqceJQNvB +EOcLKvbdqTtGqqkU +DoCkKvbdiGjDYujV +EPCkKvbdRWnEDLhD +EOcLKvbdcSbjtDia +DncLKvbdTqROuVHm +EOcKjvbdiifIKMxS +EObkKvbdlYrqsZGt +DoDKjvbdSBdFLhxk +DnbkKvbdVUNUFkuj +DoCjjvbdrzLpSaIO +DoDKjvbdzGxlANFX +DoDLKvbdfHjuqmpg +EPDKjvbdZRMeIldq +DncKjvbdMfcPlpVL +DncKjvbdxKwDgzzG +EOcLKvbdYzbfRjVy +EObkKvbdWSNwbElD +DoCkKvbdeFOrCXCj +EObjjvbdbKlGOmcA +EOcKjvbdDxXktUTl +EPCjjvbdvBDySneI +EPDKjvbdLFehCBRV +DoDLKvbdiZuFlROG +EPDKjvbdDoDLKvbd +DoCjjvbdQwNdCkhD +DoCjjvbdCJLBkIfK +DnbjjvbdlqyUzSci +DncLKvbdNHCpMpUk +EOcKjvbdiMFEOVCy +DoCkKvbdnGeYNOGy +DnbkKvbdZoOIddzK +EOcKjvbdFpATWffZ +DoDKjvbdeOeTKtTr +DnbjjvbdGGKSNhsq +EOcKjvbdyXiKCPyk +DoCjjvbdeAURNYKG +DoDKjvbdpssfrRjt +EPDKjvbdnVVZjjRf +EOcKjvbdiZuGMQmf +EOcLKvbdNHDPlotk +DnbjjvbduCbtwVoP +EOcKjvbdxUleQxlO +DoDKjvbdnHFYMnGy +DnbjjvbdUVlPitAq +EPCkKvbdjAPgAofj +DoCkKvbdTlVoAuoJ +EPCkKvbdmSYtyrdJ +EPDKjvbdBsAcTevr +EPCkKvbdUyITzKnn +DnbjjvbdbQHGdLzd +EOcLKvbdezuyFIsw +DoDLKvbdEXwlTtUM +EOcKjvbdKyRJrztf +DnbjjvbdtTSSxzEc +DnbjjvbdHDjujBij +DoCjjvbdsQVnicWG +EObkKvbdZsiJYcrn +EPDLKvbdUtNUFkuj +DoDKjvbdNPwpumfs +EOcKjvbdSBcdlJZL +EPDLKvbdmfeXlmfy +DncKjvbdIsZAsNXl +DncLKvbdmJDsptrB +DncKjvbdGYuUaEXb +DncLKvbdyYJJbPzL +DnbkKvbdrpVnicWG +EPCjjvbdTqQoVUgm +DoDLKvbdFVyPpMjF +EObkKvbdZnnIeEyj +EObkKvbdbUagYKtI +DoCkKvbdqGDdtWBI +EPDLKvbdFVxpQNKF +DncLKvbdkWXNdCYX +EPDKjvbddwystRez +EOcKjvbdaNKasUlg +DnbkKvbdNdctIhjd +EPCkKvbdatagYKsh +DoCkKvbdfNFvgMik +EObjjvbdJYTbIMQp +DoCjjvbdEYYMTtTl +DncKjvbdWRmxCElD +EPCkKvbdbsCjsdKB +EOcLKvbdFVxpQMie +EObkKvbdpaJFAWgd +EPDLKvbdijGHimXr +EPCjjvbdlhctQtqa +EObjjvbdFVxoolie +DncKjvbdrJAKEmOe +DnbkKvbdzQnmIiwA +EPCkKvbdkHfkeemk +DnbjjvbdLGGHaaQu +DnbkKvbdOSsugEtp +DnbkKvbdZtIiYcrn +DoCjjvbdQZNAGsSK +EObjjvbdNPxRWOGs +DoCkKvbdVUMsfLuj +DnbjjvbdmJETqUqa +EPDLKvbdBsAcUFvr +EOcLKvbdIsZArlwl +EPCjjvbdNddTiJKd +DoDKjvbdyXhiaozL +DncLKvbdjmCLzEfo +EOcLKvbdRadElJYk +DncLKvbdjbkkQfuH +EObkKvbdXFxzUAOs +DncLKvbdxZhGFwdr +DoCjjvbdNsTugEuQ +EObjjvbdRbDdlIyL +DoCkKvbdePEsLUUS +DoCjjvbdOStVgFVQ +EPDLKvbdUtMtGLuj +EObjjvbdFjdrbhMu +EOcKjvbddeOrBwCj +DnbjjvbdxUmFRYkn +DnbjjvbdCEQBVimG +EOcLKvbdvAdZTPEh +EPCkKvbdGcjvJaij +EPCjjvbdOFETiIjd +EOcLKvbdemGWgNKL +DoCkKvbdqTsfrRkU +DncLKvbdbrcKsdKB +EPDLKvbdTAFIhBoE +DoCjjvbdKCjCqJbx +DnbjjvbdNsUWHFUp +EPDKjvbdkWWmcaxX +EPDLKvbdbKlFoNcA +DoCjjvbdkIGkefNk +EPCkKvbdXFyZtAPT +EPDKjvbdpxnhGpcx +DoDLKvbdhanbeWqR +EOcKjvbdliEUQtqa +EObjjvbdbBVeFpPw +EObkKvbdQdDApQdS +EPDLKvbdnQZyVkZC +EObjjvbdhbOcEwQq +DnbjjvbdBdPaWKMf +DoCjjvbdCTAbtGWr +EPCjjvbdEvYpQMie +EObjjvbdDxYLtUTl +EObkKvbdCTBDTfXS +EPCjjvbdmpZxvKyC +EPCkKvbdRzKITDWA +EObkKvbdemGXGmJk +EOcLKvbdIryAsNXl +DoDKjvbdkWXNcaww +EObkKvbddCTNSAUN +DncKjvbdvBDxroEh +DncLKvbdiCPDEwRR +EObjjvbdRkZGVHLT +DoCjjvbdFkFSbhNV +EPDLKvbdwjvdHzzG +DoDLKvbdqquKmkBN +EOcKjvbdsQVoJcVf +EPCjjvbdYlSEUOMN +EObkKvbdjKGIKMxS +DncLKvbdRpUGifDw +EObkKvbdEuxooljF +EPDLKvbdzitpQETU +EOcKjvbdTvLpKUAq +DoCjjvbdrSVKmkAm +EOcLKvbdEvZQPmJe +EPCkKvbdfelZnHHA +EOcLKvbdjhGlGGNk +DncKjvbdCEPaWJmG +DncLKvbdrpVnjDWG +DoDLKvbdeOeTKtUS +DoCkKvbdtbbuXVno +EObkKvbdYpleJMeR +DnbjjvbdiCPDEvqR +DoDLKvbdUslsekuj +DnbkKvbdGBPQyJzm +EPCkKvbdtbcUwVoP +DoDKjvbddxZssrFz +DncLKvbdkIGlGFmk +EPCkKvbdhuZdwRtb +EObkKvbdehLWSOQg +DoCkKvbdatafwjsh +DoDKjvbdhfjCyViu +DoCjjvbdFyUuAcxC +EObkKvbdUMWPAvPJ +EPDLKvbdxxIjBoyk +DnbjjvbdMRvlytpz +EPCkKvbdDxYLtUTl +DnbjjvbdiVZeXSUb +DoCjjvbdffMZmgHA +EPDLKvbdnPyyVkYb +EPCkKvbdZtIhyETO +DncKjvbdRECaPqDr +EPDKjvbdVrNxBeMD +DnbkKvbdKVuFdFGi +EOcLKvbdrzLosAgn +EPDKjvbdLLAgvAKZ +EOcLKvbdLYpirztf +DncKjvbdnGeXlnHZ +EOcLKvbdQdDAopdS +DnbkKvbdptTfrRkU +DoCjjvbdqGEFUVaI +DncLKvbdrDeIomvB +DoDLKvbdyOTHxSiD +EOcLKvbdRpTfjGDw +DoDLKvbdzitpPdTU +DnbjjvbdUxhTykOn +EOcKjvbdGFjSNhtR +EObkKvbdidkGuPAO +EObjjvbdVAapsQrZ +EPDLKvbdQccAopdS +EObjjvbdmozYukZC +EOcKjvbdGFjSOIsq +EPCkKvbdyzeNrHiI +DncLKvbdEOcKjvcE +DncLKvbdLFfIBaQu +DoDKjvbdtlXwBUBX +DoCjjvbdeOeTLTsr +DncKjvbdiZuGLpnG +DoCkKvbdWRnYBdkc +DncLKvbduCbtvvOo +DnbkKvbdGGKRnIsq +EOcLKvbdVTmUFkuj +EOcKjvbdFkEsDHlu +DoDKjvbdQwNcbkgc +DncLKvbdWRmwbFLc +DnbjjvbdHlBzmwRL +EPDKjvbdDncKjwCd +EObkKvbdGBPRYizm +EOcKjvbdqrVLNjaN +EObjjvbdqFceUVaI +DoCkKvbdZQmFImFR +EPDLKvbdmIctRVSB +EObkKvbdjAQHBPfj +EObjjvbdrEFIonWB +DnbjjvbdsPuoKCuf +DoDKjvbdtbbuXWPP +EPDLKvbdOStWGduQ +DoCkKvbdUQqPUuIN +EPDLKvbdwyhFewdr +EObkKvbdShyiqAAl +EPDLKvbdGZUuBEXb +EPCkKvbdHffyyXwg +EObjjvbdGBOpyJzm +EObkKvbdZirgpGaf +EObkKvbdRjxfUfkT +EPDKjvbdZHWdAPSi +DnbjjvbdVrOYBdkc +DoCjjvbdGGKSNhsq +EOcKjvbdJqZeOenF +EOcLKvbddBsNSAUN +DncKjvbdZtJJYcsO +EPDKjvbdBraDTevr +DoCkKvbdRDcApQdS +EObjjvbdGGJrNiTq +DoCjjvbdGLFTCgmV +DoCjjvbdtlXwBUAw +DncLKvbdQwNdClHc +DoDLKvbdygYlAMeX +EPDLKvbdTvMQKTaR +EPCjjvbdiMFDnVDZ +DoCjjvbdiBoDFXRR +EObkKvbdUQqOuUgm +EOcKjvbdaMkBsVNH +EObkKvbdwuNEqZMO +EObjjvbdLAkGlbXq +EObkKvbdkCkkQgUg +DncLKvbdVqnYCFLc +EPCkKvbdxVMeRZLn +DncLKvbdRXOEClHc +EObjjvbdvwMAvBWV +EObjjvbdIwsahLpp +EObjjvbdKDKCpicY +DoDKjvbdlrZUzTEJ +EOcLKvbdyYIjBpZk +DncLKvbdxsNhlqag +EPDKjvbdgPazvdXh +EPDLKvbdbKlGPNcA +DoCjjvbdqUUHSRjt +DnbkKvbdNeDsiJKd +DnbjjvbdqGEFTvAh +DoDKjvbdnUtykKRf +EPDKjvbdZtJJZDrn +DoCjjvbdmRxtysEJ +EOcKjvbdQmXbYnUz +EPDKjvbdjmCLzFGo +DncKjvbdsBfMkfkZ +EPCkKvbdFVxpPlie +DnbkKvbdZLrEUOMN +DoCkKvbdEOcKkXDE +EObkKvbdvBEYsPEh +EPDKjvbdcJMjLGXY +EOcLKvbdOYPVzcnU +DnbkKvbdsQWOjDWG +EOcLKvbdfHjvRnRH +DoDLKvbdmbKXYPOV +DncKjvbdrpWPJcVf +EOcKjvbdURROuUgm +DnbkKvbdrovOicWG +EObjjvbdLYpirzuG +DnbjjvbdGQASvgGZ +DnbkKvbdYzcFqjVy +DncKjvbdBsBCtFvr +DoDLKvbdYgXEAOri +EOcLKvbdqTsfqqjt +DncKjvbdPIAYZAYa +EOcLKvbdypnliJwA +DnbkKvbdhyuGLqNf +EOcLKvbdjhGkfGOL +DncKjvbdjblLRGuH +EPCjjvbdxwhibPyk +EOcKjvbdBhkCLIfK +DnbjjvbdJTZArlxM +DoCkKvbdRjxetgKs +EObkKvbdiUyeWrVC +EOcKjvbdwXLaWAuu +EPDLKvbdssSTZZdc +EObkKvbdcSbjtDia +DncKjvbdgGMZnHHA +DoCkKvbdatafwkUI +DncLKvbdnCKWxPNu +EObjjvbdyOShXrhc +EPCjjvbdpyPHfqEY +DoDKjvbdbUbGxKsh +EOcKjvbdypoNJKXA +EObkKvbdyTOJMrBg +DoDLKvbdiZtfLpmf +EPCkKvbdLGFgbBQu +EOcLKvbdCJLBkJFj +DnbkKvbdUxgszLPO +DoDKjvbdUQqPVVHm +EPCjjvbdijGIKNYS +EPDKjvbdCJKajhej +EPDLKvbduoTzqLPU +DnbjjvbdJTZBTMwl +EOcLKvbdLAjfmBwq +DoDLKvbdQwOECkhD +DoCjjvbdQYmAHTSK +DoDKjvbdEuyQQMjF +DoDKjvbdZdwfzhIb +EOcKjvbdyTOJNRag +DoDLKvbdbBVdfQPw +DoCkKvbdbVBfxLUI +DncKjvbdcIljKevx +EOcLKvbdhgKDZViu +EObjjvbdOTUWHEtp +DncKjvbdZRMeIldq +DnbjjvbdkHgMGGNk +EOcLKvbdZMSETmlN +EPCkKvbdjcMKpfuH +EPDLKvbdiBncFXQq +EObjjvbdJcKCqKDY +DoDKjvbdQwOEClID +EPCkKvbdRpUHJecw +DoDKjvbdZjSgogBf +DoCkKvbdEObkKvbd +DoDLKvbdDwwktUTl +DoCkKvbdSKyGVHKs +DnbkKvbdZMSETnMN +DncLKvbdiZuGLpmf +EObjjvbdjcLjpgVH +EOcLKvbdYzcFqjVy +EPCjjvbdQvnDcLhD +DoCkKvbdDihJvYKA +EPDLKvbdJqZeOenF +EOcKjvbdWXJXvDdg +DoCjjvbdznpQeCkx +EPCjjvbdjJehJmXr +DoDKjvbdmSYuZsDi +DoDKjvbdFVyPolie +DnbjjvbdULvPAvOi +DncKjvbdwzIGFwdr +DnbkKvbdOEcsiJKd +EPCkKvbdEJhJuwjA +EObkKvbdYSkaNUOx +EObkKvbddoFSkTtS +DoDLKvbdFkFTDHlu +DoCjjvbddwzTtRez +EOcLKvbdDwwlUTtM +DoDKjvbdHDjvJaij +EObkKvbdyTOIlrBg +EOcLKvbdtSqsYzFD +EObkKvbduVmwjQsA +EPDKjvbdbiMjKfXY +DncLKvbdsQWPKDWG +DncLKvbdRbEElIyL +DnbjjvbdGKeTDHlu +EPCkKvbdrpWOjDWG +EObjjvbdVwJYWEFH +EPCjjvbdvBDySoFI +EPCkKvbdZMSDsmkm +EObkKvbdqYnhHREY +EObjjvbdyqPMiJwA +DncLKvbdCTBCtGXS +EPCkKvbdfekynGgA +EPCkKvbdvvkaWBVu +DoCjjvbdGZUuAdYC +DoDKjvbdpyOgfqDx +EPCjjvbdePFTKstS +EOcLKvbdVviXudFH +EPCkKvbddZyQYZQb +DnbkKvbdUaCQrqRy +EPDLKvbdQwNdDMID +DncKjvbdUaCRTQrZ +DnbjjvbdHDkWJbKK +EOcKjvbdOTTvGduQ +DnbjjvbdssRrxzEc +EObjjvbdezuxdiTw +EOcLKvbdGLFTCgmV +EPDLKvbdUxgtZkOn +EOcLKvbdbrbjscia +DnbjjvbdjJfHimXr +EOcKjvbdjcMLQgUg +DoDKjvbdlYrqrxft +EPDKjvbdGYttaEXb +EOcLKvbdhbPDEwQq +EOcKjvbdvAcxroEh +DoDKjvbdVgxVxHYz +DoCkKvbdTqQnuVIN +DoCjjvbdrXQMCiZR +EOcKjvbdMSWlytpz +DoCjjvbdBiLCLJFj +EObkKvbdUyHtZkPO +DoDLKvbdGcjujCJj +EPCjjvbdfkGzbfAE +DoCjjvbdDoCjjwDE +DnbkKvbdqGDdsvAh +DoDLKvbdjvXNdBww +EOcKjvbdANHySvyx +DoCjjvbdeJjRvUzn +DncKjvbdqUTgRqkU +DncLKvbdEvZQPljF +DnbjjvbdSPsgKFdX +EOcKjvbdGLFScHmV +EPCjjvbdqUTgRqkU +EPCkKvbdNxOuzdOU +DoCkKvbdpfEEtWBI +EOcLKvbdDwwlTtTl +EPCjjvbdSZjITDWA +DncKjvbdQwNcblID +DnbjjvbdijGIKMwr +DnbjjvbdYpldiMdq +DncLKvbdemGXHNKL +EPCkKvbdEKHjWYKA +DoDLKvbdwXMBWAvV +DnbjjvbdQwOEClHc +DnbkKvbdbUbHYKtI +DncLKvbdCSaCtFvr +DncLKvbdEuyPpNJe +EPDKjvbdFVyPolie +DncKjvbddneSkTtS +EOcKjvbdZtJIxcsO +EOcKjvbdiGicZWJu +DncLKvbdOFDtIiLE +DoDLKvbdOSsufduQ +DnbkKvbdMfcPmQVL +EObjjvbdiUzEwSVC +DoCkKvbdCIkBkJFj +DncLKvbdYkrETmlN +EObjjvbdqZOggREY +EPCkKvbdHDkViajK +DnbkKvbdbsDLTdKB +EPDLKvbdlqxtzTDi +DncKjvbdLGFgbAqV +EObjjvbdoAKztHcn +EPDLKvbdRXODblID +DoCjjvbdIHGzYwxH +EObkKvbdNPwqVnHT +EOcKjvbdxrnImRag +EOcLKvbdiLddNuCy +DoCkKvbdkMakzEfo +EObkKvbdnPyxukYb +EPCjjvbdZdwfzgiC +EPCkKvbdnHEwmNfy +EObjjvbdySmiNRag +EOcKjvbdzeZnzdyp +EPCjjvbdJvVFdEgJ +EOcKjvbdZQldiMeR +EOcKjvbdFyVVAdYC +DncKjvbdJXsahMRQ +DnbjjvbdfNGXGljL +EOcLKvbdwWlAvAvV +DncLKvbdkIHLefNk +DncLKvbdliDtQtrB +DoCkKvbdxZgefXdr +DncKjvbdCWzchdpW +EPCkKvbdpyPHfpdY +EOcKjvbdhbOcFWqR +DnbjjvbdzjUpPdSt +DoDLKvbdZMRdUOLm +DncLKvbdVwJXucdg +EPCjjvbdWXIxVcdg +DnbkKvbdMpXpvOHT +DncLKvbdRkZGVHKs +DoDKjvbdmpZyWKxb +DoCjjvbdegkWRmpg +DncLKvbdyzeOSHhh +EPDLKvbdRECaPpdS +EPDKjvbdqvpLcJZR +DoCjjvbdRDbaPqDr +EObjjvbdRECaPqDr +EOcLKvbdsBfNLgLZ +DncKjvbdZyEKOCkr +DnbkKvbdSPsgJfEX +EPDKjvbdZRMdiMeR +EPDLKvbdDwwktTsl +EPDLKvbdLhbLpxAS +EPDKjvbdZirgpHBf +DoCkKvbdmtuZkJqf +DnbjjvbdwWkaWAuu +DnbjjvbdRDcBPqES +DnbkKvbdyzeNqgiI +EObjjvbdYkrEUOLm +DoCkKvbdmtuZkKRf +DoCkKvbdNdctIhkE +DnbjjvbdhytfLqOG +EOcLKvbddZyPwxpb +EPCjjvbdYzbeqivZ +EOcKjvbdwygfGXeS +EOcLKvbdRosfifEX +EPCkKvbdznopdbkx +EObkKvbdVBBqSqSZ +EObjjvbdQlxCZNtz +EPCkKvbdhlFDmtby +DoDLKvbdCDpAvJmG +EPDKjvbddeOrCXDK +EOcLKvbdrovOjDWG +DnbkKvbdIGfyyYYH +EObkKvbdmbKWwnmu +EOcLKvbdkDLjqGuH +EPDLKvbdqrUkNjaN +EPDKjvbduDDVXWPP +EObjjvbdZnnJFEzK +DnbjjvbdaRfCgtGL +DoCkKvbdGKdsDHlu +DncKjvbdqlyiyMHi +DoDLKvbdSLYetgLT +DnbkKvbdZQleJNEq +EOcLKvbdZLrETnMN +DnbjjvbdiUydwRuC +EObjjvbdnPzYvLYb +EPCjjvbdGYuUaEYC +EObjjvbdACqwiyiQ +DncKjvbdIHGzZYXg +DncKjvbdxrnIlqag +DnbjjvbdySmhlqag +DoCjjvbdSCEFMJZL +EObjjvbdSKxfUfjs +DnbjjvbdnUtyjjRf +DncLKvbdkyTRsZGt +DoDLKvbdWRnXbElD +EOcKjvbdjvXNcbYX +EOcKjvbddjKSWUzn +DoDKjvbdvBDxrneI +EOcLKvbddndsKtTr +DoDLKvbdZjTHpGbG +DnbkKvbdpfDdsuaI +EPCkKvbdfMfWgNJk +DoCkKvbdjJegjNXr +DoDKjvbdcTDLTdKB +EPDLKvbdwzHfFxEr +DncKjvbdfMfWgMik +DnbkKvbdrbFllGkZ +EPCkKvbdCIkCLJGK +EObjjvbduDDUvvOo +EOcKjvbdDxYMUTsl +EOcLKvbdsPvOibuf +DncKjvbdUsltGLvK +EPCjjvbdyOShYTIc +DoDKjvbduaEZSoEh +DncKjvbdLrXMzUpz +DoCkKvbdNsTufeUp +EObkKvbdLGGIBaQu +EPCjjvbdmSZVZsEJ +DncLKvbdQdDAoqDr +DoCkKvbdKCicRJbx +EPCkKvbdxwhibQZk +DoDKjvbdTvMQJsaR +DoCkKvbdYzcGSJuy +DnbkKvbdwyhGFwdr +DoCjjvbdEOcLKwDE +DoCkKvbdGGKRmhtR +EOcLKvbdrzMQTAgn +DoDLKvbdJvVFceHJ +DnbkKvbdfMfWfmJk +EPCkKvbdmajWwnmu +EPCjjvbdxrmiMqag +EOcKjvbdqUTfqqkU +EObkKvbdoAKztHcn +EObkKvbdkyTSTZHU +EPCjjvbdiCOcEwRR +DnbkKvbdGZUtaDwb +EPCjjvbdYORAXuWU +DoCkKvbdULvPAuoJ +DnbjjvbdcSbjscjB +DoDKjvbdLrXMytpz +DncKjvbdIryBTNYM +DoCjjvbdZyDinCkr +EPDLKvbdZoOJFEyj +DncLKvbdajkfOmcA +EPDLKvbdRNYCYmtz +DoCkKvbddePRawDK +EOcKjvbdbUbHYKtI +EPCjjvbdbrbjscjB +EPDKjvbdKDJcRKCx +EObjjvbdqcdiQOVa +EPDKjvbdZjTIPgBf +DnbjjvbdrSUjmjaN +DnbjjvbdEXxLsstM +EPCkKvbdFjeSbglu +DnbkKvbdLqwMytpz +DoDKjvbdUGznMXVe +EObkKvbdpstHRrLU +DoDKjvbdYTLaNUPY +DnbkKvbdGKdrbhNV +EObjjvbdRMxCZNtz +DncLKvbdDihJuwjA +EPCjjvbdOFDtJIkE +DnbkKvbdliEUQuSB +DoDKjvbdkCkkQftg +EPCkKvbdGZVVAcwb +EObjjvbdkyTSSxgU +EPDKjvbdIryBSlxM +EOcKjvbdWIXvXfxz +DoDLKvbdhfjCyWKV +DoDKjvbdNQXpumfs +DncKjvbdiMEcnVCy +EPDLKvbdxVMeRZLn +EPCkKvbdDoDKjwDE +DnbkKvbdSCEFLiZL +DoCjjvbdqYoHgQcx +EObjjvbdxZhFexFS +EOcLKvbdkDMLRGuH +EPCkKvbdVwJXvDdg +DoCjjvbdjhHLefOL +EOcLKvbdiCOcFWpq +DnbjjvbdrovOjCvG +DncLKvbdRzKHsCvA +EPCkKvbdDoDLKwDE +EOcKjvbdrNZjZLhJ +EObjjvbdTAFIhBoE +DncKjvbdlqyVZsDi +DncLKvbdjggMFenL +EPDLKvbdUsltGMWK +DoCjjvbdkyTRsZGt +EOcLKvbdrzMPsBHn +EPCkKvbddZxpYYpb +DncLKvbdGKdsCgmV +DnbkKvbdvAdYsPEh +DoDLKvbdqUUGrSKt +EPCjjvbdxnTHxTIc +EOcKjvbdZisIQGaf +DncLKvbdBhjbLJFj +DoCkKvbdJSyBTNYM +DnbjjvbdmfdwlmgZ +EOcLKvbdJcJcRJbx +DncLKvbdmoyyWLYb +EObjjvbdSKxfUfkT +EObjjvbdlAlnmALA +DoDLKvbdTlVnaVoJ +EOcKjvbdnCKWwnnV +EPCjjvbdjbkkRGtg +EPCjjvbdULuoBVoJ +EPDKjvbdwMvAMceN +DnbkKvbdznopdcLx +EPCkKvbdeuzwoizs +EPCjjvbdpssfrRjt +EOcKjvbdiGibyWJu +DnbkKvbdYSlBNToY +EPDKjvbdkVwNcbYX +DoCjjvbdsPuoJcVf +DnbkKvbdrbGNLgLZ +DnbkKvbdRbEFMJYk +EObjjvbdqceIonVa +DnbkKvbdTpqPUuHm +EOcLKvbdVviXvEEg +EOcLKvbdvAcxrndh +DnbjjvbdTYKkmzkY +EOcLKvbduDCuXVno +EPCkKvbdEvYpPlie +DncLKvbdaSGCgtFk +DoCjjvbdpfDdtWBI +DncLKvbdHDkWJbJj +DncLKvbdqZOgfpdY +EPCkKvbdFxuVBEXb +DoDKjvbdnBivwnnV +EPCkKvbdRWmcbkhD +EObjjvbdfIKvSOQg +DnbkKvbdcIlikGWx +EOcKjvbdQdDBQQdS +EPCjjvbdnPzZWKyC +DnbkKvbdZxcimbkr +DncLKvbdLFfHaaRV +DoCjjvbdYSlBNToY +DnbjjvbdKCicRKDY +EPCkKvbddneSjtUS +EObjjvbdmIctRUqa +DncKjvbdYqMdiNFR +DnbjjvbduaDyTPFI +EPCkKvbdePEsLTtS +EPCkKvbdbUagYKsh +DoDLKvbdssSSxzFD +EObkKvbdMuSrLNAX +EPDLKvbdddnqbWbj +DnbkKvbdvAcySneI +EPDKjvbdatbGxLUI +EOcLKvbddePRbWbj +DoDLKvbdijGIKNYS +EPCjjvbdNrsugEtp +EOcLKvbdxZhGGYEr +DnbkKvbdTkvPAvPJ +DoCjjvbdFyUuAcwb +DnbjjvbdJTZBTMxM +EPDLKvbdaMkCStmH +EPDLKvbdjKGHimYS +DnbkKvbdelewGlik +EObjjvbdkHgMGGOL +EObkKvbdURRPUuHm +EOcLKvbdjKFhKNYS +EPDLKvbdhyuFkpnG +EOcLKvbdRosgJecw +DoCjjvbdczYoxYqC +DncLKvbdzaAPGgCM +EPDKjvbdiUzEwSUb +DoCjjvbdKQzEneme +EObjjvbdatagXkTh +DoCjjvbdwtldqYkn +EOcKjvbdUxgszLOn +EPCkKvbdUaBprprZ +EOcLKvbdYNqAYVVt +EObjjvbdbUafwkTh +EPDLKvbdcIljLGWx +DnbjjvbdNHDPlotk +EOcLKvbdkIHMFfOL +EPDKjvbddePSCXDK +EOcLKvbdbUafxLTh +DoDKjvbdQlwaxmtz +DoCkKvbdbQHHELzd +EPDLKvbdhficZWKV +DoDKjvbdqrVLOLAm +DoCjjvbduDDUvvPP +EPCjjvbdCEQAuilf +EOcLKvbdEASIlywX +DncLKvbdRNXayNtz +EOcKjvbdVrOXaeMD +EPCjjvbdFWYopNKF +DnbkKvbdSQTfjFcw +DoDLKvbdJTZAsMwl +DoCjjvbdiCPDEvpq +DncKjvbdVwIwuceH +EPDLKvbdJvVFcdfi +EPCjjvbdcbSlrATm +DnbjjvbdqBJFAXIE +EPCkKvbdTAFJHbOd +EPCjjvbdcTCkUEKB +EPCkKvbdxwhibPzL +EPCkKvbdRpTfifEX +EPDLKvbdvAdYsOeI +DncKjvbdpxngfpdY +EPCjjvbdEXwksstM +DnbkKvbdNrsufeUp +DnbkKvbdJKEAJogE +DoCkKvbdNsUWGduQ +DoCkKvbdbrcLTcjB +EOcKjvbdiHJcZViu +EObkKvbdEztQdkcJ +DoCjjvbdliETptqa +EOcLKvbdOEdUIhjd +DoCkKvbdSKxfVGkT +EPCjjvbdIsZAsMxM +EOcKjvbdZsiIyDsO +DncLKvbduDCtwWOo +DnbkKvbdEztQdlCi +DnbjjvbdLZQjSztf +DoDLKvbdXmqAXuVt +EPCjjvbdxsOJNSCH +DoDLKvbdRadElJZL +EOcLKvbdWRnXbEkc +DncKjvbdSCEFLiYk +EPDLKvbdidkHVPAO +DoCjjvbdkClKqGtg +EPDKjvbduLxXBUAw +DncLKvbdqUTfqqkU +EObjjvbdcImKKevx +DoDLKvbdMgCpMpVL +DnbjjvbdtTRsYydc +DnbkKvbdKefHbBQu +EOcKjvbduoTzpjnt +DoCjjvbdjuwNcaww +DncKjvbdTkvPBVni +EPDLKvbdapGfdLzd +EPDKjvbdvAdZTPEh +EPCkKvbdwXLaVaWV +EOcKjvbdZoNhddyj +DncKjvbdqceIonVa +DnbjjvbdIwsbHkqQ +DoDKjvbdjFKfuPAO +EOcLKvbdbhmJkFvx +DncKjvbdDxYMUUTl +DnbjjvbdMfbpNQVL +DoDLKvbdZeXfzhIb +EOcLKvbdVAbRSpqy +DncLKvbdZxcjOCkr +EOcKjvbdyTNiNSCH +EObkKvbdiLddOUcZ +DoCjjvbddwystRez +DoDKjvbdUsmTelWK +EPDLKvbdEPCjkWcE +DoDKjvbdIwsaglQp +EObkKvbdGcjvJbKK +DoCkKvbdRzJgrbvA +EObkKvbdkxsSSxft +DncLKvbdfHjvSNpg +DnbkKvbdxsNiMqag +DoDLKvbdcImKKevx +EOcLKvbdJutfDdgJ +DoDLKvbdhancEwRR +EObkKvbdnPzYvKyC +DoDKjvbdNHDPlouL +EPCkKvbdKaKgMbXq +EOcLKvbdqUTgSRkU +EPCkKvbdZjSgpHBf +DncLKvbdHffzYxXg +DoCkKvbdFkErbhMu +EObjjvbdhancEwQq +EPDKjvbdJYUCHkpp +EPDKjvbdtkwwBUAw +EOcLKvbdiZuGMRNf +EObkKvbdrJAKElne +DnbjjvbdIHHZxwwg +EPDKjvbdkHgMGGNk +DoCjjvbdeOeSjtUS +DoDLKvbdJbicQjCx +DncKjvbdnGeXlnGy +EPDKjvbdKVtecdfi +EOcKjvbdULuoBVni +DnbkKvbdmJDtRVRa +DncLKvbdJTZAsMxM +EPDKjvbdVgxVxHYz +EPCjjvbdVBCRSqSZ +EPCjjvbdJqZdnfOF +DncKjvbdqdEiQOVa +DnbkKvbdZLqdTnLm +EOcKjvbdzHZMANFX +DncKjvbdVrNxBdkc +DnbjjvbdKkAgvAKZ +DnbjjvbdmbKWxOnV +DoDKjvbdYqMeImEq +EObjjvbdbUagYKtI +DncKjvbdQZNAHSqj +DoDLKvbdfoazvcwh +DnbkKvbdVvhwvDdg +DoDKjvbdURQoUthN +EPDLKvbdvBDyTOeI +DnbjjvbdrRuKmkBN +DnbkKvbdRbDdlIxk +EObjjvbdSCDdkhyL +DoDKjvbdSBceMJYk +DoDLKvbdwyhGGYFS +EPDKjvbdQvmcblID +DoDLKvbdaaWFGQQX +DoDKjvbdEASImZvw +EPDLKvbdnQZyWLYb +EPDKjvbdbrcLUEJa +EOcLKvbdKCicQjDY +EPCjjvbdVBCQsQqy +EPCkKvbdkaNPNALA +DncLKvbdaNKartmH +DoDLKvbdCTAbtFvr +EObjjvbddZxowxpb +EObkKvbdTpqOuUgm +DncLKvbdZQleJNFR +DnbjjvbdUVlPisaR +EObjjvbdBsBCtFvr +EPCjjvbdJutecdgJ +EOcKjvbdfNFvgNKL +DncKjvbddneSjtUS +DoDKjvbdjcMKqGtg +EOcLKvbdGdLWKCKK +EOcKjvbdRDcBPpdS +DoCkKvbdauCGwkTh +EPCjjvbdaNLCStmH +EOcKjvbdelfWgMjL +DoDLKvbdtSrSxyeD +EPCjjvbdemGXGmKL +EOcLKvbduDCuXWOo +DncKjvbdauBfxLUI +DnbjjvbdIHGyyXwg +EPCjjvbdEvYooljF +EObjjvbddneTLUTr +DoCjjvbdySmiNRag +DoDKjvbdqUUHSRjt +EObjjvbdczYpXxpb +EObkKvbdaMkBrtlg +EPDLKvbdnUuZkKRf +DoDKjvbdcScKsdJa +EPCjjvbdsrrTYydc +EObjjvbdZoNiFEyj +EPDLKvbdmttyjirG +EOcLKvbdYqMeIleR +DoDKjvbdKWUfEFGi +EOcLKvbdcyxoxYqC +EObkKvbdNeETiJLE +EPCkKvbdUMWOaVoJ +EPCjjvbdWSOXbElD +EPCkKvbdNHCpNPuL +EObkKvbdEuyQQNJe +DoCkKvbdmgExNOGy +EOcKjvbdZtJJYcsO +EOcLKvbdMpXqVnGs +EObjjvbdbsDLTcjB +EPCjjvbddoFTLUTr +EOcLKvbdaNKbTVNH +DoCjjvbdJcKCpicY +DoDLKvbdsBfMlGjy +EPDKjvbdqiAJdlne +EObkKvbdKefHaaRV +DoDLKvbdbiNJjewY +EPCkKvbdVTltFlWK +DoDLKvbdbBWFGPpX +DncLKvbdVZITzKoO +EPCjjvbdnUtzLKSG +EPCkKvbdBraDTevr +EPDLKvbdTkunaWPJ +EObjjvbdZRNFJNEq +DnbkKvbdxUldqYkn +EPDLKvbdtvOYJpsA +EOcLKvbdJvUfEEgJ +DoDKjvbdlYrqsZGt +DncKjvbdePFSjstS +EPDLKvbdqquLOLAm +DoCkKvbdSPtHKFdX +DoCjjvbdZyDjNcMS +EPDKjvbdTlVnaWPJ +EPCjjvbdZirgpHCG +EObkKvbdNQYQvNfs +DncKjvbdqqtjnLBN +DoDKjvbdjJehJmYS +DncLKvbdrNZixlHi +EPDLKvbdMfcPlpVL +EPCjjvbdUWMQJtBR +DoCkKvbdfMfWfljL +DnbjjvbdaRfDHtFk +DncLKvbdiMFDnVDZ +DoCkKvbdXrkaNToY +DoCjjvbdZLqdUNlN +EObkKvbdRjxetfkT +EOcLKvbdmgFXmOGy +EPDKjvbdUQpntuHm +DoDKjvbdpstHRrKt +DncLKvbdHkazmwRL +EObjjvbdpfEFUWAh +DoDKjvbdZyEJnDMS +EObkKvbdiBoCeXQq +DoCkKvbdeATplxKG +DncLKvbdWRmwadkc +EPDKjvbdUQqPUthN +DoCjjvbdnBjXXnmu +EPDLKvbdZjTIPfbG +EPCkKvbdWHwuxGxz +DncKjvbdYpmFJMdq +DoDKjvbdhbPDFXRR +DnbkKvbdBdQBVimG +DoCjjvbdmIctRUqa +EPDKjvbdZyDjNbkr +EOcLKvbdQYmAHSrK +DnbjjvbdqYoHgQcx +DncKjvbdqiAKFMoF +DncKjvbdOTUWHEuQ +DoCjjvbdVTmTfLuj +DoCkKvbdddoRbWcK +EPDKjvbdIsYaTNYM +EObkKvbdRosfiedX +EOcKjvbdcTDLUEKB +EOcLKvbdmozYujxb +DnbjjvbdZirgogBf +EPCjjvbdKWUeceHJ +DnbjjvbdZoOJEdzK +EPDKjvbdEJhKVwjA +DoCkKvbdfpBzvcxI +DoDKjvbdlrYtysDi +DoDLKvbdZjSgofbG +DoCjjvbdUtMtGMVj +EPCjjvbdGGKRmiTq +EPCkKvbdQvnDcMID +DnbkKvbdKCjCqJbx +EPCkKvbdYpleImEq +DoDLKvbdjKFgjNXr +DoDLKvbdZshhxcrn +EPDLKvbdnVVZjjRf +EOcKjvbdqdFIpNua +DnbjjvbdVwIxVdEg +DoCkKvbduaEZSneI +DnbkKvbdznoqFClY +DoCjjvbdoAKzsgcn +EOcKjvbdSLZGVGkT +DncKjvbdiCObeWqR +EPCjjvbdWRnXbEkc +EObjjvbdRotGiecw +EObkKvbdKDKDQibx +DnbjjvbdlYsRsYft +EOcKjvbdUaBqSprZ +DoCjjvbdhkdcmuDZ +EOcKjvbdjgflFfNk +DoCjjvbdGKdrcINV +EOcLKvbdEJgjVxKA +EObkKvbdSxKkmzkY +DnbjjvbdsZkosBIO +DoCjjvbdBvzchePv +EObkKvbdGYtuBEXb +EPDKjvbdiLeENtby +EPCkKvbdRNXbYnUz +EObjjvbdfHkWRnQg +EObkKvbduDDVXWOo +DoCkKvbdJbjCqJbx +EPDLKvbdpedFTvBI +DncLKvbdjJegjMwr +EPCjjvbdUxgszLPO +EObkKvbdxmrhXsJD +EOcKjvbdJSxaSmXl +EPDLKvbdfNFwGmJk +EPDKjvbdsrrTYydc +DncKjvbdhgKDZVjV +EPCkKvbdZMRctNkm +DoDKjvbdezuyEhtX +EPCkKvbdEXwlUTsl +EPDLKvbdeAUQlxKG +DoDKjvbdZnmiEdyj +EObkKvbdrzMPraIO +EPCjjvbdxxIibPyk +EPCkKvbdKfFgbBRV +DoDKjvbdyzeORhIh +DnbkKvbdbAvFGPpX +DncKjvbdZoOJEdyj +DnbkKvbdrJAJdmOe +DoDKjvbdKVuFdEfi +EOcKjvbdqdFJQNvB +EPDLKvbdOEctIhkE +EPDLKvbdvBEYsOeI +DncKjvbdHELVjBjK +DncLKvbdZshhyDsO +EPDKjvbdGdKuibJj +DoCkKvbdEYXkstUM +DnbjjvbdJpyeOfNe +EPDKjvbdzoPpdbkx +DoCkKvbdMSXMytpz +DncLKvbdqZOggQcx +DoDKjvbdmuUyjirG +DnbkKvbdNVSqkNAX +DncLKvbdRotHJfEX +EOcKjvbdZyEJnCkr +EPDLKvbdyYJKBpZk +DnbkKvbdxmrgxTJD +DnbkKvbdhaoDFWqR +DncKjvbdbhmJjevx +EObjjvbdSKyGVGjs +DnbjjvbdSKxfVHKs +DnbjjvbdqdFIomua +DnbkKvbdkHflGGOL +DoDLKvbdqGDeUVaI +EObjjvbdjmBlZeHP +EPCkKvbdmttykJrG +DncLKvbdRXOEDLgc +DoDLKvbdhaoDFWqR +DoDKjvbdvvkaWAuu +DoCkKvbdbhmKKfWx +EObjjvbdSBdFMJZL +DnbjjvbdnUuZjjSG +EPDLKvbdliDtQuSB +EOcLKvbdsCFmMGjy +DnbjjvbdtunXjQsA +EObkKvbdkCkjqHUg +EObjjvbdDoCkKvbd +DnbkKvbdiZuFlROG +EOcKjvbdRNYCZNtz +EOcLKvbdxUmEpxlO +EPCkKvbddePSBwDK +EOcLKvbdauBfxKsh +DoCjjvbdtkwwBTaX +EObjjvbdmgEwmNfy +DnbjjvbdOStWHEuQ +EPCkKvbdGLFTChNV +EPCkKvbdKDJbpjDY +DoDLKvbdnPzZVjxb +DoCjjvbdFVyPomJe +DncLKvbdACqwizIp +EPCkKvbdZirhQGaf +DncKjvbdtTRsZZeD +EObkKvbdLBLHMbYR +EOcLKvbdrNZjZLgi +EObjjvbdTXkLmzkY +EPCkKvbdBsAbsfXS +EOcKjvbdeATpmXif +DoCkKvbdMSWmZuQz +DncLKvbdVTmTfMVj +DoDLKvbdZxdKODMS +EPDKjvbdZjShPgCG +EPDLKvbdxVMdpxkn +EPDLKvbdcSbjsdKB +EPDLKvbdiifIJlwr +DoDKjvbdKQydoFnF +EObkKvbdegkWRmpg +EObkKvbdiBncFXQq +DoDLKvbdNdctJJLE +EOcKjvbdUyHszKnn +EOcLKvbdSQUHKFcw +EObkKvbdUaBqSprZ +DoCkKvbdSCDeLiZL +EPCkKvbdKDKCpjCx +EPDLKvbdwygfFweS +DoDKjvbdiVZeWqtb +DoCjjvbdMRwMyuQz +DoCjjvbdsCGNLfkZ +DoCkKvbdmRxuZsEJ +EPCkKvbdkDMLRGtg +EObkKvbdGdKuibJj +EPCkKvbdePFTLUTr +EOcKjvbdXrlAlsoY +DoDLKvbdZjTHogBf +DnbjjvbdZirhQGaf +EPCkKvbdFVxooljF +DoCkKvbdbKkeoNcA +DoDKjvbdqYngfqEY +EPDLKvbdrWokcJYq +DoCkKvbdMowqVnHT +EPCkKvbdqqtjnKaN +DoDLKvbdiCPDFWqR +DoDLKvbdeJiqutzn +EObkKvbdqcdiPmvB +EPCjjvbdMgComQUk +DoDLKvbduVnYKQsA +DnbjjvbdjhHLfFmk +EOcKjvbdVvhwvEEg +DnbkKvbdZtIhyESn +DncLKvbdznopeClY +EPCkKvbdwtldqZLn +EOcKjvbdeEnrBwDK +DoCkKvbdkxrqsZHU +DoDKjvbdijGHimYS +DncLKvbdfNGWgMjL +EOcKjvbdmbKWxOnV +EPCkKvbdhtzEvrVC +DoDLKvbdhfibyWJu +DoCkKvbdXrkaMsoY +DoCkKvbdzoPpdbkx +EPDLKvbdSLYeuGjs +EOcLKvbdqlyixlIJ +EObjjvbdnVVZjiqf +EOcLKvbdyNrhXriD +DoCjjvbdRjyFtgLT +EOcLKvbdkyTRryHU +EPCjjvbdrykpTBIO +EObjjvbdlqxtzSdJ +EObjjvbdcarmSATm +EOcKjvbdXsLaNToY +EOcKjvbdlqxtysDi +EOcLKvbdaMkCStmH +DncKjvbdbAvFGPow +EPDLKvbdTulQKTaR +DncKjvbdXGYzUAOs +DncKjvbdezuxeItX +DnbkKvbdrykpTBIO +DoCkKvbdxnShXsIc +DoDLKvbdEPCjkXCd +DnbkKvbdIxUBgkpp +DnbkKvbdBiKbKhfK +DoDKjvbdKNADygVB +EObjjvbdADRxKZiQ +EPCjjvbdMfcQMotk +EObjjvbdSBcdkhxk +EPDKjvbdNrtVgFVQ +EPDKjvbdZMRdTnLm +EObkKvbdehKvRnQg +DoCkKvbdliETptqa +DoDLKvbdEXwktUUM +EObjjvbdBiLBjiFj +EOcLKvbdRkYeuGjs +EOcKjvbdmttzKjRf +EObkKvbdxrmhmRbH +DnbkKvbdyXiJaoyk +EObkKvbdxmrgwsIc +DoDLKvbdiZtfMQmf +DnbkKvbdpxoHfpcx +EObjjvbduaEZTOdh +EObkKvbdqqtkNkAm +DoDKjvbdxmrgxTIc +DncLKvbdMgColpVL +EPCkKvbdZnnJEeZj +EPCjjvbdVYgszKoO +EPCkKvbdBcpAuilf +EObkKvbdlhdUQuSB +EObkKvbdMIbLpxAS +EPCjjvbdnVUyjirG +DoDKjvbdKRZeOenF +DnbjjvbduCbuXWPP +DnbjjvbdssRsYydc +EPCkKvbdlhctQtqa +DoCkKvbdsQVoJcVf +EObjjvbdegkWSNpg +DoDLKvbdOAJTUKSA +DoDLKvbdliEURVSB +DoDKjvbdxsNhlqbH +DnbjjvbdOSsvGdtp +EPDKjvbdaaVeGPow +EObjjvbdNeETiIjd +DnbkKvbdJKEAJpHE +EPCjjvbdANIYsWzY +DoCjjvbdjvWmdCXw +EPDKjvbdrouoJcVf +DnbjjvbdiUzFWquC +DnbjjvbdFxtuBEYC +DnbjjvbdRkYfVHLT +EObjjvbdQwNccMID +DoCjjvbdXsMAmTnx +DoCjjvbdjJfIKMxS +EOcLKvbdbiMikGXY +DoCjjvbdQdDAoqES +EPCkKvbdVwIxVcdg +EOcLKvbdCEQAvKMf +EPDLKvbdzROmJKXA +EPDLKvbdZLrDsnLm +DncKjvbdjggMGFmk +DnbkKvbdddnrBvcK +DnbjjvbdpecdsvBI +EPCkKvbdijFgjNYS +EOcLKvbdUaBqTQqy +DncKjvbdkHgMFfNk +EObkKvbdZGvdAPSi +DnbjjvbdqUTgSRjt +DoDLKvbdqvpLcIyR +DncLKvbdLqvlytpz +DnbkKvbdKDJbpjCx +DoCjjvbdlqyUyrci +DnbkKvbdUQqPUuIN +EObkKvbdTlVnaVni +EOcLKvbdNdcshiLE +EObkKvbdkDMLRHUg +DncKjvbdIxTbILpp +EPCkKvbdePFTKssr +DnbjjvbddeOrCWcK +DnbkKvbdatbGxLTh +EObkKvbdqlzKZLgi +EPCjjvbdOTUVgFUp +EOcLKvbdpfEFTvAh +DncLKvbdZnnIdeZj +EObkKvbdZxdKODLr +DoDKjvbdjggLfGNk +EPCjjvbdRDcAopdS +DncKjvbdlZTRryHU +DncKjvbdZshiYdSn +EPDKjvbdatbHYLTh +EPDKjvbdLAjfmCXq +EPDKjvbdOFEUIiLE +DncKjvbdxVNFQxlO +DoCjjvbdrafNLfkZ +DoCjjvbdGFiqnJTq +EPCkKvbdUsmUFlWK +EObkKvbdLBLHMbXq +EPCkKvbdtlYWaUBX +EPCjjvbdSPsfjGEX +EObjjvbdIjEAJogE +DoDLKvbdNHCpNQUk +DncLKvbdYkqdUNkm +DoCjjvbdqquKmkBN +DnbjjvbdEuyQQMjF +EOcKjvbdURRPUthN +EObjjvbdmoyxvLYb +EObkKvbdGYtuAdYC +DnbjjvbdZeYGzhJC +DoDLKvbdCgLfHAzc +DoDLKvbdhuZeXSUb +DoCkKvbdjlbMZdgP +DoCkKvbdemGWgMjL +EPCkKvbdxxJJaoyk +EPDLKvbdqGEEsuaI +EObkKvbdEKHjVwjA +EOcKjvbdiBoDFWpq +EPCkKvbdffLzNfgA +EObjjvbdDoCjkXDE +EPDKjvbdhficZWJu +DoCjjvbdWWiYVdFH +EPCkKvbdKQzFOenF +DoCkKvbdmbJvxPOV +DnbkKvbdtAHQhAAr +EPDLKvbdmSYtzSci +EPDLKvbddeOqavcK +DoCjjvbdCEQBVjMf +EPDLKvbdlYrqsYft +DnbkKvbdJSyBTNXl +EPCjjvbdcbSmSATm +DoDKjvbdfNFwGmJk +DoCkKvbdGLErbhNV +EObkKvbdiZuFlQnG +DnbjjvbdxUmEpxlO +EPDKjvbdUWMPitBR +EPDKjvbdrafNLfjy +EPDLKvbdrWolDJZR +EObjjvbdhbPDFXQq +DncLKvbdqrUkNjaN +DnbkKvbdBiLCKhej +DoDKjvbdSCEFMIxk +DoDLKvbdffLzNgHA +EPCkKvbdZLqcsmkm +DnbkKvbdZMSEUOMN +DnbjjvbdzaAPHHCM +DnbjjvbdCIkBjhfK +DoCkKvbdZirgpHBf +DnbjjvbdIwtBhLpp +EObkKvbdeOeTLUTr +EObkKvbdUxgszLPO +EObkKvbdhzVGLqOG +DnbjjvbdOTTufdtp +EOcKjvbdZRNEhleR +EPCjjvbdKyRKSzuG +DoCkKvbdZtJJYcsO +EOcLKvbdemGXGmKL +EPDKjvbdJXsahMQp +DoDLKvbdhbObeWqR +EObjjvbdFVxpPljF +EOcKjvbdaNLBruMg +DoCjjvbdpyPIGpcx +EOcLKvbdZMRcsmkm +EOcLKvbdnGeXmNgZ +DoDLKvbdjlalZeGo +DoDLKvbdaSGDHtGL +EPCkKvbdCTAbsewS +EPCjjvbdZjSgofbG +DnbjjvbdJutecdfi +EPCkKvbdIryBSmYM +DoCjjvbdfekzOHHA +DnbkKvbdREDAoqES +EPCjjvbdtTSTYzEc +EPCkKvbdmoyyVkYb +EObkKvbdmfdxMnGy +DoCkKvbdwuNFQxkn +DncKjvbdsBelkfjy +EPDLKvbdQvmdDLhD +EPDKjvbdBhkCLJFj +DoCkKvbdeJiqutzn +EOcLKvbdqTsfrSKt +DoDLKvbdakLfOmcA +DncKjvbdKaLHMawq +EPCkKvbdznopdcMY +DoDKjvbdZtJIyDsO +DoDLKvbdsQVnjCvG +DncKjvbduDDUvuno +DoCkKvbdJYUCHlQp +DnbkKvbdnBiwYPNu +EObjjvbdlYrqryHU +EPCjjvbdqcdiPnWB +DoCjjvbdUQpoUthN +EPDKjvbdsZlQTAhO +EOcKjvbdtbbtwWOo +EPDLKvbdJuuGDdgJ +EOcKjvbdjggMGGOL +EPDLKvbdHffyxwxH +EOcLKvbdSCEElIxk +EObkKvbdIwsbHkqQ +EPDLKvbdjbkjqHUg +DnbjjvbdnQZxujxb +EPDKjvbddePRbWbj +DoCkKvbdhtydwRuC +DoDKjvbdCDoaWKMf +EOcKjvbdRjyGVGjs +EObjjvbddCTNSATm +EOcKjvbdZLrETmlN +EPDKjvbdlrZUysDi +EOcLKvbdwtmFRZMO +EPCjjvbdtTRrxydc +EObjjvbdeFPSBvcK +DoCkKvbdwuNFRZLn +DnbjjvbdhytfLpmf +EPCkKvbdrykpTAgn +EObkKvbdRDcApRDr +DoCjjvbdZnnIeFZj +EOcLKvbdePErkUTr +DoDLKvbdrbGNLgLZ +EObjjvbdVZIUZjoO +DncLKvbdzHYlAMeX +DnbkKvbdbsDLTcia +EPCjjvbdOSsufdtp +DncKjvbdpstHSSLU +DncKjvbduDDVWuoP +EPDKjvbdiMEdNuCy +EOcKjvbdtbcVWuno +DoDKjvbdqUTgRqjt +DncLKvbdZyDjNcLr +DoDLKvbdRWmdDLgc +DncKjvbdZLqdUOMN +DoDKjvbdijGIJlwr +EObjjvbduMYXBUAw +DoCkKvbdHDkWJajK +DoCjjvbdRpTfifEX +DoCjjvbdUyHszKnn +EPDKjvbdqZPIGpdY +EPDKjvbdRWmdCkhD +EObkKvbdsrrSyZdc +EOcKjvbdYlSDtNlN +DncKjvbdbKkennDA +EPCkKvbdiZuGMQmf +EPCkKvbdEztQeLbi +EPCkKvbdaRebgsfL +DoCkKvbdBcpAuilf +EOcKjvbdyNsIYShc +EPCjjvbdcIlijewY +DoCjjvbdmbKXXoOV +DncLKvbduDCtwWPP +EPDKjvbdnCJwXoOV +EPCjjvbdjcLkQgUg +DnbkKvbdtcCtwVno +DncKjvbdGFjRmiUR +DncLKvbdrWpLcJYq +DncLKvbdKWVGDdfi +EPCkKvbdnUuZkJrG +EPCjjvbdiCPCeWqR +DncKjvbdEYYMUUTl +EObjjvbdrpWOicWG +DoDKjvbdFejSOIsq +DnbjjvbdqiAJdmOe +EOcKjvbdUyITzKnn +DoDKjvbdfMfWgMjL +DnbkKvbdXrkaMtOx +DoCkKvbdKefIBaRV +EPCjjvbdyTNhlqbH +EPCjjvbdtlXwBUAw +EOcKjvbdRosfjFdX +DoCjjvbdYpldiMeR +DnbjjvbdwzIFexFS +DncKjvbdSCDeLhyL +DncLKvbdrzLpSaHn +DncKjvbduCcVWuoP +DoDLKvbdatagXkTh +DnbkKvbdsCGMlGkZ +EPCkKvbdkWXNdBww +DncKjvbdJcKCpjCx +EOcKjvbdNxPVzdNt +EPCkKvbdKRZeOfOF +DncLKvbdcIljLGXY +EPDLKvbdVhXuwfxz +DoCjjvbdaoffckzd +EOcKjvbdLhbLpxAS +DnbjjvbdnHExMmgZ +EObjjvbdbhljKfXY +DnbjjvbdkDLkRGuH +EPDLKvbdfHkWSORH +EObjjvbdzoPqFClY +DncKjvbdznopdbkx +EObjjvbdnUtzLKRf +EPCkKvbdZQldiMeR +DoDKjvbdFjeScHmV +EPDKjvbdEOcLKwCd +EPDKjvbdyqOmJKXA +EOcKjvbdSQTfiecw +DoDLKvbdDoDLLXDE +DoDKjvbdhlEcmuDZ +EObjjvbdfHkWRmqH +DnbkKvbdIGfzYwwg +DncLKvbdUWMPjUAq +EPDKjvbdkHflGGOL +DnbkKvbdnPzZVjyC +EPDLKvbdSBceLiYk +DncLKvbdUtMsfLvK +DnbkKvbdbrcLTdJa +EObkKvbdIwtCHkqQ +EPDKjvbdtbcVWvPP +EObkKvbdtbcVWuoP +DoDKjvbdKVtfEFGi +EPCjjvbdMRvlytpz +DoDLKvbdwuMeRYlO +EOcKjvbdlhdTqVRa +EPDKjvbdiGjCyVjV +DnbjjvbdrDeJQNua +DoDKjvbdrbFmMHKy +EOcKjvbdfHjurNpg +DnbkKvbdZRNFJMeR +EOcKjvbdqFdEsvBI +DnbjjvbdZirgogCG +DoDLKvbdDncKjwDE +DoCkKvbdjhGlFfOL +EObjjvbdmaivxOnV +EObkKvbdKkAhWAJy +EOcKjvbdNrtWHEuQ +DnbkKvbdFkFTChMu +EObkKvbdeOdrjstS +EOcKjvbdIwsbHlQp +DoCkKvbdeATpmXif +EOcLKvbdKaKgMaxR +EObkKvbdUGznLvvF +DnbkKvbdbLMGPODA +EObjjvbdTkvOaVoJ +EOcKjvbdsQVoKDVf +EPDKjvbdznopdcLx +DoDLKvbdpfDdsvAh +DncKjvbdrDdhpNua +EOcLKvbdhficZVjV +DncKjvbdFxuVBEYC +EPDKjvbdzjVQQETU +EObkKvbdKRZePGNe +EObjjvbdDncLLXDE +EOcLKvbdYkqctNkm +DoDKjvbdtvOYKRTA +DoCkKvbdmajWxPNu +DncKjvbdIjEAJofd +EPCkKvbdiCPDFWqR +EOcLKvbdIHHZxwwg +EOcKjvbdYpmEiNFR +EOcLKvbdQmYCZNtz +EOcLKvbdVYhTykPO +EPCkKvbdJKEAKPfd +DoCjjvbdRkYfUfjs +EPDLKvbdlZTSTZGt +DoDLKvbdNGbpNQVL +DoCjjvbdvAdZTOdh +EPCjjvbdliDsqUqa +EPDKjvbdSPsfiecw +EOcKjvbdYlRcsmkm +DnbkKvbdwXMAvBVu +EPCkKvbdRjxfVGjs +EOcLKvbdCIkCKiFj +DoCkKvbddxZssrFz +EOcKjvbdREDApRES +EOcLKvbdTpqPVVIN +EObjjvbdaaWEeoow +EOcKjvbddeOrCXCj +EOcLKvbdAMgySvyx +EPDLKvbdNPwqVnHT +EObkKvbdwuMeRYlO +DoCkKvbdTkuoAuoJ +EPDKjvbdmJDspuRa +EPCjjvbdNHCpNQVL +DncKjvbdGcjvKBij +EOcKjvbdbQHHELzd +EPDKjvbdPxmAGrqj +EPCjjvbdRbDdkiYk +EPDLKvbdTAFJHand +DoDKjvbdqmZjZMHi +EObjjvbdtSrTYzFD +DncLKvbdhlEcmtby +EObjjvbdmJEUQuSB +DncKjvbddndsKstS +EPDLKvbdmgFYNOGy +DnbjjvbdSCEElIyL +DncKjvbdmaivxOmu +DoDKjvbdFVyPomKF +DnbkKvbdMpXqWOHT +EObjjvbdKefICBRV +EObjjvbdqGDdtWBI +DnbkKvbdCJLCLIfK +EObkKvbdLqwNZtpz +DoDLKvbdiifHjMwr +DoCkKvbdddoRawDK +DncKjvbdbrcKscjB +DnbjjvbdrSVLNkAm +DnbjjvbdffLynHHA +EObkKvbdTAFJHbPE +DncKjvbdDncKkWcE +EOcLKvbdrouoKDVf +EOcLKvbdZisIPfbG +EOcLKvbdiGicYuiu +DoDLKvbdVgxWXfxz +DoCkKvbdffMZmgHA +EObjjvbdWfZZtAPT +EPDLKvbdEzsqElCi +DoCkKvbdYSlAlsoY +EPDLKvbdFWYpPmKF +DoDKjvbdkNCMZdfo +EPDLKvbdehLWSOQg +DnbjjvbdxxJKCPyk +EOcLKvbdMfcQMpVL +EOcLKvbdnVVZkKRf +EObjjvbdczYoxZQb +EPCkKvbdSQUGiedX +DoDKjvbdeuzwpJzs +DoDLKvbdqZPHfqDx +DoCjjvbdKeehCBQu +DnbkKvbdADSYJyiQ +DoCjjvbdFkFTDHlu +EPDKjvbdZoOJEdzK +EPCjjvbdZjTIQGbG +DncKjvbdZHWdAOri +EPCjjvbdeXystRez +EObkKvbdIxTagkpp +EObjjvbdxZgfFxEr +DoDLKvbdjhHLfGNk +EObkKvbdTfznMWue +DoDLKvbdOSsufeVQ +DncKjvbdVUNTelWK +EPCjjvbdZQmFImEq +DnbjjvbdkClLQftg +DnbjjvbdRXNdDLhD +DncKjvbdTqQoVUgm +EPCjjvbdNQYRVmgT +DoDLKvbdnUuZjiqf +DoDKjvbdbsCjsdJa +EOcKjvbdFkEsDINV +DoDKjvbdyOTHxSiD +EOcKjvbdkMbMZdgP +DnbkKvbdeEnqavcK +DoCkKvbdxZhFfYEr +DncKjvbdNPxQunGs +EOcLKvbdOYOuzdNt +DncKjvbdJbicRKDY +DncKjvbdjAQHAofj +EOcKjvbdWWiYVcdg +DnbjjvbdjFKftoAO +EPCkKvbdTXkLmzjx +EPCkKvbdWSNxBeMD +DoCkKvbduMXwBTaX +DoDLKvbdLBKfmBxR +DoCjjvbdEObjjwDE +EPDKjvbdTlVnaVoJ +DoDLKvbdhgJcZViu +EObjjvbdatbHXjtI +EOcLKvbdZeXfzgiC +EPCkKvbdeFPRbXCj +EPCkKvbdZQleJMdq +DnbjjvbdUWLojUAq +EPCjjvbdFaOpyJzm +DnbkKvbdANIYrwZx +EPCkKvbdbBWEeopX +DoDLKvbdczYpYYpb +EPCkKvbdbVBfxLTh +DoDKjvbdLBKflawq +DoCkKvbdyOSgxSiD +EPDKjvbdkDLkQgVH +EObkKvbdjmBlZdfo +EPDKjvbduoTzqLOt +EOcLKvbdaRebhUFk +EPDKjvbdatbGwjtI +EOcLKvbdCIjbLIfK +DncKjvbdkIGkeemk +DncKjvbdxVMeRZMO +EOcKjvbdRXODcMHc +DnbjjvbdqquLOLAm +DoDKjvbdDHLfHAzc +DoCkKvbdnVVZkKRf +DoDLKvbdGcjvJbKK +DoCjjvbdzoQRFDLx +DoDLKvbdmuUzLKRf +EPDLKvbdtumwiqTA +EOcKjvbdmJDsptrB +EPCjjvbdIGgZxwwg +EPDLKvbdxLXDgzzG +DnbkKvbdQwNdCkhD +DnbjjvbdcasNSAUN +EPCkKvbdTulQKTaR +EOcKjvbdhgJbyVjV +DoDLKvbdKVteceHJ +DnbjjvbdHgGzYwxH +EPCjjvbdxnSgxTJD +EPDKjvbdyYJKCPzL +EOcKjvbdOFDtJJKd +EObkKvbdRadEkhxk +DoCkKvbdiifHjNXr +DoCjjvbdnUtyjirG +EObkKvbdJpydoGNe +DoDKjvbdZLqctOLm +DnbkKvbdsBfMkfkZ +EOcLKvbdOStWGeVQ +EPDLKvbdijGIJmYS +DoDLKvbdxxJJbQZk +DncKjvbdHbLydzAD +EOcLKvbdyTNiMqag +EPDKjvbdMgComQVL +DoDLKvbdzitoocsU +EPDKjvbdsBfMkfjy +DoCkKvbdFyUtaEYC +DoDLKvbdJKEAJpGd +DoCkKvbdygZMAMeX +EPCkKvbdJqZdoFnF +DnbkKvbdiBnbdvqR +EOcLKvbdSQUGjFdX +DnbkKvbdmSYtzTEJ +DoCjjvbdehKvSOQg +EOcLKvbdGckVibJj +DncKjvbdhficYvJu +EPDKjvbdwuMeRYkn +EOcLKvbdFejSNiUR +EPCjjvbdOFEUJJLE +DnbkKvbdXsLaMtOx +EPDKjvbddZyPxYpb +EPCkKvbdhzVFkqNf +DoDKjvbdOEdUIiLE +EPCkKvbdnGeXmOHZ +EObkKvbdiMEdNuCy +DoDLKvbddoFTLTtS +EObkKvbdIxTbHlQp +DncLKvbdZRMdhmEq +DoDLKvbdZnmheEyj +EPDKjvbdKeegbApu +DncLKvbdNVTSLNAX +EOcKjvbdKDJbqKCx +EPCjjvbdFfKSOIsq +EPCjjvbdxnShYSiD +EOcLKvbdOStWHFVQ +DncLKvbdsPvOicWG +DnbjjvbdxnTHwsJD +DoDKjvbdLAkGmBwq +DoCkKvbdwMvAMceN +EOcLKvbdmRyVZsDi +EPCkKvbdmpZyWKyC +DoDLKvbdrykpTBIO +DoCjjvbdVgwvYHYz +EPDLKvbdTvMPjUBR +EOcLKvbdgFkzOGgA +DnbkKvbdVBBpsRRy +DnbjjvbdRzKISbvA +EObjjvbdxnTIXsJD +EObjjvbdZoOJEdyj +EPCjjvbdHDjuibKK +EPCjjvbdezuxdiUX +EOcKjvbdYTMAmToY +EObjjvbdJYTbILpp +DoDKjvbdkClLRHUg +EPDKjvbdTkvPAvPJ +EObkKvbdeAURNXjG +DncLKvbdTukpKUBR +DoCjjvbdcTDKsdJa +DoDKjvbdBsAcUGXS +EObjjvbdDoCjjvcE +EOcKjvbdtlYWaTaX +DnbjjvbdRDbaPpcr +EPCjjvbdrylPsAgn +DoCkKvbdOhAYZAYa +DnbjjvbdiUydwSVC +DoCjjvbdwzIFfYFS +DoCkKvbdZshiZDrn +DoCkKvbdZoOIddyj +DncKjvbdpssgSSKt +EPCjjvbdrSUkNkBN +EPDKjvbdjJfIJlxS +EOcLKvbdxVNFRYkn +DoDKjvbdWWhwvEFH +DncLKvbdRDcBQQcr +DnbkKvbdliETpuRa +EPCjjvbdZRMdiMeR +DnbkKvbdiMEdOVCy +EPCjjvbdznpREbkx +DoCkKvbdwzIFexFS +DnbjjvbdmSYuZrdJ +DoDLKvbdCWzchdov +EPDLKvbdpfEFTvAh +EPDLKvbdyOTIYTIc +DncKjvbdNQXqVnHT +DoDLKvbdCgMFgAzc +EOcKjvbdIwtBgkpp +EPDKjvbdRjyGUfjs +EObjjvbdACqwjZiQ +DoDKjvbdpstGrSKt +DnbkKvbdnGdwmOHZ +DncKjvbdiZtfLpnG +DoDLKvbdaSGCgtFk +DoCkKvbdFfJqnIsq +EPCkKvbdkNCLzEgP +EOcKjvbdFeirOJTq +EOcLKvbdUtNUGMWK +EObkKvbdSQUHJfEX +EPCkKvbdqquKmkBN +DnbjjvbdbhmKKfXY +DoCkKvbdIsYaTNXl +DoCjjvbdZoNheFZj +EOcLKvbdBhjbLIfK +EOcKjvbdatafwjsh +DoCjjvbdkxrrSyHU +EPDLKvbdSCEElIxk +EOcKjvbdfMevfmKL +EPCjjvbdMJBlRYAS +DoCjjvbdSxKkmzkY +DnbkKvbdkNCLydgP +EObkKvbdkxsSTZHU +DoCjjvbdRpUGiedX +EOcKjvbdjblLRGuH +EObkKvbdyTNiMrCH +DnbjjvbdZeXfzhJC +DoDKjvbdZxdJmblS +DncKjvbdOStWHEuQ +DoCkKvbdyNsHwsIc +EPDKjvbdkxrqryHU +EObjjvbdZLqctNlN +DoDLKvbdxnSgxShc +EPDLKvbdnBjWwoNu +DoDKjvbdkIHMGGOL +EObjjvbdqUUGrRkU +DncLKvbdRjyGVHKs +EPDKjvbdhfjCyWJu +EPCkKvbdHELVjBjK +DncKjvbdgQBzvcwh +DoDLKvbdVAaqSpqy +DoCkKvbdySnJNSBg +DoDLKvbdpeceUWAh +DncLKvbdaRebgsfL +EOcKjvbdZLqctNlN +EObjjvbdtbbtvvPP +DoCkKvbdZMSDtNlN +EOcKjvbdsBelkfjy +EPDLKvbdTpqPVVIN +DnbjjvbdBiKbKhfK +DnbjjvbdOFEUIiKd +EPCkKvbdSiZjRAAl +EObkKvbdwjwDgzyf +EPCjjvbdhlEdNtby +EPCjjvbdhtydwSUb +EOcKjvbdnQZyVjyC +DoDKjvbdRzKIScWA +EOcLKvbdLBLHNCXq +DoDLKvbdssSTYzFD +EObjjvbdEvYpPlie +DncLKvbdhficYvKV +EPCjjvbdnUuZkJqf +DnbjjvbdXnRAXtut +EPDKjvbddijRutzn +EOcLKvbdEvYpPljF +DoCjjvbdTulQKUAq +EObkKvbdxmsIYShc +EPDLKvbdkyTRryHU +EObjjvbdCEQAvKNG +EObjjvbdGYuVBEYC +EPDKjvbdvAdYsOeI +EObjjvbdRpUHKGEX +EPCkKvbdKDJcQjDY +DoDLKvbdunszqKoU +DoCjjvbdJvUfEEfi +DncLKvbdrpWPJcWG +DoCkKvbdajkfPNcA +DnbjjvbdFpATXHFy +EObkKvbdFfJrOJTq +DncLKvbdZnnJFEyj +DoCjjvbdOEctIiKd +EPDLKvbdVhXuxGxz +EPDKjvbdySmhlrCH +EOcKjvbdiGjDZWJu +DncKjvbddZyQYZRC +DncLKvbdziuPpETU +DncLKvbdJTYaTNXl +EPCjjvbdNddThiKd +DnbkKvbdbAudepPw +EOcKjvbdMowpunHT +DoDLKvbdmbKXYPNu +DoDLKvbdezvZEiTw +DnbjjvbdrMyixkgi +DnbkKvbdKWVGEFGi +DoCjjvbdkDLjpftg +DnbjjvbdJqZePFme +EObkKvbdDwxLsssl +EPCjjvbdmoyyWLYb +EPCkKvbdFjdrcHmV +DoCkKvbdDwxLtTsl +EOcLKvbdoAKztHdO +EPDLKvbdTkuoAuoJ +DncLKvbdURRPVVHm +EPCkKvbdKCicRJcY +DoCkKvbduDCuXWOo +DoCjjvbdRXNdDMID +DoDKjvbdBcpBWJlf +DoCjjvbdTqROttgm +DncKjvbdRadFMIxk +DoDLKvbdCSaDTewS +EOcKjvbdQlxCYmtz +DncLKvbdeOeSkUTr +DnbkKvbdTqQntthN +DnbjjvbdhbObdvpq +EPDLKvbdMowqVmgT +DncKjvbdANIZTWzY +EPDLKvbdiVZeXRtb +DncLKvbdYNqAXtvU +EOcKjvbdfIKurNpg +DoCkKvbdFpATWfey +EPCjjvbdHkazmwRL +DoDKjvbdJvUfDdgJ +EPCkKvbdSBdElIxk +DoCkKvbdbsCjtEJa +DoDLKvbdvBEYsOdh +EOcLKvbdGGJqmhsq +EOcLKvbdJSyBSlxM +DncLKvbdnQZxukZC +EOcLKvbdySnIlrCH +DoCjjvbdIjEAKPgE +DoDLKvbdhlEcnVDZ +EPDKjvbdZeYGzghb +EPDKjvbdbKlGOnDA +EPDKjvbdkMbMZdgP +EOcLKvbdDoCkKwCd +DnbjjvbdLBLGlbXq +EPDLKvbdZxcinCkr +DoCkKvbdqTsfrRjt +DoCkKvbdADSYJzIp +DoDKjvbdbUagYKsh +EObjjvbdjAQHAofj +EOcKjvbdDoDKkXDE +EPDKjvbdSZigsCvA +EPCkKvbdKRZePGOF +EPCjjvbdKaKgNCXq +EObkKvbdxxJKBoyk +EOcKjvbdxmrgwsIc +DnbkKvbdmozYvKyC +DoCkKvbdqquLOLAm +EObkKvbdDncLLXCd +EPDLKvbdjcMKpftg +EPCjjvbdwkXDgzzG +DoDLKvbdHffyxwwg +DoCkKvbdvAdZSneI +EOcLKvbdrovOjDVf +EOcLKvbdsPuoJbuf +DoDLKvbdySnJNSBg +EObkKvbdXsMAltOx +DncLKvbdFfKSOJTq +EPCkKvbdddnrCWcK +DoCjjvbdySmhlrBg +DnbjjvbdNxPVzcnU +DncKjvbdhtzEvrVC +DoCjjvbdQwODblHc +DoDLKvbdjcLjpgVH +EOcLKvbdbKlGOmcA +EPDKjvbdfMfWflik +DncKjvbdmbJwXnmu +EOcLKvbdTkuoAvOi +DnbjjvbdsZkoraIO +DoDKjvbdZMSEUOLm +EOcLKvbdsCFmLfkZ +DncKjvbdUxhTyjnn +EPDKjvbdRosfjGEX +EOcLKvbdmuUzKirG +EPCkKvbdGGJrOItR +EObjjvbdEXwktUUM +DnbkKvbdiifHimXr +EPDKjvbdmJDspuSB +EObjjvbdwyhGFwdr +DncKjvbdatafwkUI +EPDLKvbdYNqAXtut +DoDLKvbdEPCkLWcE +EOcLKvbdqceJQOWB +EPDKjvbdySnJNSBg +DnbjjvbdyzdnSIIh +DoDKjvbdrDdiQNvB +DoCkKvbdYkqdTnLm +DoCkKvbdlZTSTYgU +EPDKjvbdMpXqWNfs +EObkKvbdJbicQjDY +DoDLKvbdGAoRYizm +DncKjvbdmgExNOHZ +DoCjjvbdznoqFDLx +EOcKjvbdieLGtoAO +DoCjjvbdMfbpMotk +EObkKvbdyzdnSHiI +EObkKvbdcSbjscia +DoDKjvbdNGcQNQUk +EPDKjvbdNGbpMpVL +DoDLKvbdUQqPVUgm +DnbjjvbdVvhwuceH +EPDKjvbdDxXkstTl +EPCjjvbdPyNAHTRj +EPDLKvbdeOdsLTtS +DoDKjvbdTAEiICPE +DoDKjvbdZisIQGaf +EObkKvbdxVMdpxkn +EPCkKvbdnUtzKjRf +EOcKjvbdhtydvrVC +DoDKjvbdbrcLTcia +EPDLKvbdbhlikFvx +EPDKjvbdANIZSwZx +EPDKjvbdtbbuXWOo +EObjjvbdliDtQtqa +DncLKvbdGLFScIMu +DnbkKvbdfMfXGljL +EObkKvbdCTBDTewS +EPDKjvbdSiZiqAAl +EOcKjvbdFfKSNhsq +EPCjjvbdyYJKBpZk +DncKjvbdAMgyTWyx +DnbkKvbdpaJFAXIE +EOcKjvbdEYYMUUTl +EPCjjvbdeFOrBvcK +DoDLKvbdptUHSRkU +DoCkKvbdOYPVzcnU +DnbjjvbdijFhKMxS +DnbkKvbdEKHivXjA +DncLKvbdsPvOicVf +DoCjjvbdmbJvxOmu +EOcKjvbdDxYMUUTl +DoDKjvbdZtIhxdTO +DncKjvbdTlVoAuoJ +DoDKjvbdFyUuBDwb +EObkKvbdQYmAGsSK +DnbkKvbduLwwAsaX +EPDKjvbdegkWRmpg +EPDLKvbdRDcAoqDr +DoCjjvbdFWZPolie +DoCkKvbdbhmJkGWx +DncLKvbdrWpMDJYq +DnbjjvbdaaWEeoow +DoDLKvbdzHYlANFX +DoCkKvbdjFLHUoAO +DnbjjvbdZyEKNbkr +DoDKjvbdLrXMyuQz +EPDLKvbdwNWAMdFN +DoCkKvbdkWXODaxX +EOcKjvbdraelkgKy +EOcLKvbdmSZVZsDi +EPCjjvbdkMbLzEfo +EObjjvbdaSFbgtFk +EObkKvbdmIctRUqa +DncKjvbdhtydvquC +EPDKjvbdZoOJEeZj +DoDLKvbdyXiJaozL +EOcLKvbdVwIxWEFH +DnbkKvbdYpmFJMdq +EPDLKvbdjKGIKMwr +EPCkKvbdFpASwHGZ +DncKjvbdKQzEnfNe +DoDLKvbdkVwODaxX +EPCjjvbdzaAOffal +EObjjvbdnHEwlnGy +DncLKvbdLqwMyuQz +EPCkKvbdWRnXaeMD +DoCkKvbdcbSlrAUN +EPDKjvbdMJBlRYAS +EOcLKvbdZxcimbkr +DncLKvbdCDpBVimG +DoDKjvbdGdKvKBjK +EPDLKvbdziuPodSt +DnbkKvbdbrbjtEKB +EOcLKvbdmIcsptqa +EPDKjvbdMRwMyuQz +DoDLKvbdfHkVrNqH +DnbkKvbdLZRKSzuG +EPDKjvbdTfzmkwWF +EOcLKvbdSKxeuHLT +EPDLKvbdkHgLfGNk +DoDLKvbdVhXuxHYz +EOcKjvbdkHgMGGOL +DoDKjvbdEARhmZvw +EPDLKvbdjKFgimXr +EObkKvbdSQUGiecw +EPCjjvbdjKFhJlxS +DoDKjvbdDxXlTtUM +EPDLKvbdelfWgMik +EOcKjvbdtcDVXWOo +DoDKjvbdiZuFlRNf +DoCkKvbdsBellHKy +EPCkKvbdjlbLyeGo +EOcKjvbdhfibxujV +EObjjvbdhyuGMROG +DoDLKvbdgQBzvdYI +DoDKjvbdeATpmXjG +EPDLKvbdjKFgilxS +DoDKjvbdrpWPJbuf +DncLKvbdDncLKvcE +DoCkKvbdkVvmdCXw +DncLKvbdGcjujCJj +DncLKvbdpxngfpcx +DnbjjvbdiCPCdwQq +EPDLKvbdijFhJlwr +DncKjvbdhgJbxvKV +EPCjjvbdZxcjNbkr +DncKjvbdZQleJMdq +DncLKvbdyfxlAMeX +EPCjjvbdFfJrNiUR +EPDLKvbdzjVQPdSt +DoDLKvbdjAQHBPfj +EObjjvbdZoOJFEzK +EObkKvbdFpATWgGZ +EPDKjvbdvAcxrneI +DoDLKvbdxrnJMrCH +DoCkKvbdjmCLydfo +EPCkKvbdegjuqmqH +DoCkKvbdSBdFLiZL +EObkKvbdbAvFFopX +DncLKvbdGQASwGey +DnbkKvbdQccAopdS +EPCkKvbdZshiYdSn +EPCjjvbdHDjujCKK +EObjjvbduDDVWuno +DoCjjvbdzjVQQDsU +EOcLKvbdeFOqavcK +DoDLKvbdyXhibPzL +DoDLKvbdrzMPsAgn +EObkKvbdUtNTfMWK +EOcLKvbdLqwNZuQz +EPDKjvbdqBJFAXHd +DoCkKvbdnUuZkKSG +DoCjjvbdZHXEAOsJ +DncKjvbdQdDBPpcr +DnbkKvbdCIkBkIej +DnbkKvbdMgDPmQUk +DnbkKvbdxxIjCPyk +DnbjjvbdZsiIxdSn +DoCkKvbdADRxJzJQ +EObjjvbdkxsSTZHU +DncKjvbdWXIxVdEg +DnbjjvbdLrWmZtpz +EPDKjvbdhzUelQnG +DoDLKvbdSBceLhxk +EObjjvbdWIXvYGxz +EPDKjvbdEYXktUUM +EObkKvbdhlFENtby +EPDLKvbdNwnuzcmt +EOcKjvbdaaWEfPpX +DncLKvbdddoSCWcK +EPDKjvbdmaiwXnnV +DoDLKvbdMgDQMpUk +DoDLKvbdjFKfuPAO +DncLKvbdnGeYMmfy +DncLKvbdrSUjmkAm +EOcLKvbdfHkWRnQg +DnbjjvbdnCKWxPNu +DnbjjvbdraemLgKy +EObkKvbdWWiYWDdg +DoCkKvbdKfFgaaQu +EPCkKvbdaSFcIUGL +EOcKjvbdkxrqryHU +DncKjvbdRDbaQQcr +DncLKvbdbVBgXjtI +DoCjjvbdqZPHfqDx +DnbkKvbdcyxowxpb +EPCkKvbdWXIxWDeH +DoCkKvbdyXiKBozL +DnbkKvbdlZSrTYft +EObjjvbdGdKujBij +DnbjjvbdtcDVXWPP +DoDKjvbdZnmhddyj +EObkKvbdTukoisaR +EObkKvbdzoPqFCkx +DncLKvbdLhalQxAS +EPCkKvbdVwIwudFH +DoDKjvbdjKGIKNYS +DoDLKvbdjhHLeenL +EPDKjvbdJTZBSlxM +DoCjjvbdFaOqZJzm +DoDLKvbdnBjXXnnV +DoCjjvbdeFPSCXDK +EPCjjvbdbAvFGPow +DnbkKvbdVwIwvEFH +EObjjvbdqUTfrSLU +DncKjvbdqlyixkhJ +DoDKjvbdSLZFuGjs +DncLKvbdsCGNLfkZ +EPDLKvbdaofgDkzd +DoCkKvbddiirWUzn +EOcKjvbduCcVWuno +DnbkKvbdSPsfjGDw +DoCkKvbdFWYpQMie +DoDLKvbdRECaQRES +EPDLKvbdhfibyVjV +DnbjjvbdqTsgSSLU +EObkKvbdrXQMChyR +DncLKvbdNrtVfduQ +EObjjvbdiUzEvqtb +DncKjvbdUaCQsRRy +EPCjjvbdRbEEkiYk +DncKjvbdUtNUGMVj +EPCjjvbdzHYlAMeX +EPCkKvbdeEoRbXCj +DoDLKvbdcScLUDia +DoDLKvbdtbbuWuno +EOcKjvbdbUafwkTh +DoCjjvbdtcDVXWOo +EOcKjvbdHgGyxxYH +EOcLKvbdWSOXbEkc +DoCkKvbdKeehCBRV +DncLKvbdMgComQVL +DoDKjvbdUMVoBVoJ +DoCjjvbdzoQRFCkx +DoCkKvbdUWMQJsaR +DnbjjvbdkNCLydgP +EOcKjvbdmozYvKyC +DnbkKvbdmgExMnGy +DncKjvbdznpQeDMY +DoDKjvbdZxcjNbkr +EOcKjvbdqdEiQNua +EPDLKvbdfHkVrNpg +DnbkKvbdXsMBMsoY +EObkKvbdcJNKLGXY +EPDLKvbdVqmwbEkc +EPCkKvbdJcJbpibx +EObjjvbdYNqAXtvU +EObkKvbdjAQHApGj +EPDKjvbdrbFmMHLZ +DnbkKvbdPIAXyAYa +DoDKjvbdSLZGVHLT +DoCkKvbdDnbkLWcE +DncKjvbdzoPpeDMY +EPDKjvbdQwNdDLhD +EPDKjvbdhfjCxuiu +DoCjjvbdajkenmcA +EPDKjvbdtTSTYyeD +DoCjjvbdijFhKMwr +DoDLKvbdpfDeTuaI +EPCjjvbdJXtCHlQp +EOcKjvbdjbkkRGuH +EObkKvbdVTlselWK +DoCkKvbdauCHXkTh +DnbjjvbdSLZGVGjs +DoDLKvbdehLWRmqH +DncKjvbdSBdFLhyL +DoDLKvbdmajXYPOV +EOcKjvbdpeceTvAh +EPCjjvbdNdctIhkE +EOcLKvbduWNwjQsA +DoCjjvbdtvOYKRTA +DncKjvbdqiAJeNOe +DnbjjvbdUtNUGLvK +EPDKjvbdMgColotk +EOcKjvbdQlxCZNtz +DoDKjvbdmfdwmNfy +EPDKjvbdrovPKDVf +DnbjjvbdDjIJuwjA +EPCjjvbdsBfNMHLZ +DoCjjvbdJbjDRJcY +EPDLKvbdZRMeJNEq +EPCkKvbdRkYfVGkT +DncLKvbdRbDeLiYk +EPCjjvbdqiAJdloF +DoCjjvbdFyVUaDwb +DoCjjvbdMRvmZtpz +DoDLKvbdGQATWffZ +EPCjjvbdwtmFQyMO +EOcKjvbdTIzKRAAl +DoCkKvbdsQVnicVf +DoDLKvbdFfKRmhtR +EOcKjvbdsCFmLfjy +DoDKjvbdddnqbXDK +DoDKjvbdYgWdAOri +DoCkKvbdmuUyjjSG +EObkKvbdhficYvJu +DoCkKvbdQlxCZNtz +EPCkKvbdGZVUaEXb +DncLKvbdEXxMTtTl +DoDKjvbdGFirNiUR +EPCjjvbdpssgRrLU +EObkKvbdVZHsykOn +DncKjvbdyTOJMrBg +EOcKjvbdRacdlIyL +EObkKvbdiCOcFWqR +DoDLKvbdRjxfVGkT +EOcLKvbdiBncFXQq +DncLKvbdnQZxukYb +DoDKjvbdpaIeAWgd +DncKjvbdVqnYCEkc +DnbjjvbdZRMdhmEq +EPCjjvbdhgKDYuiu +EOcLKvbdCIkBjhfK +EPCkKvbdZnmhdeZj +EOcKjvbdTppnuUhN +EOcLKvbdbVBfxKsh +EPDKjvbdFVxpQNKF +DnbjjvbdjvWnDaxX +EObjjvbdANIYrwZx +EObjjvbdauCHXjtI +EObkKvbdZirgpGaf +EObjjvbduoTzqLPU +DoDLKvbdxZhFeweS +DoCjjvbdILaznWqL +DncLKvbdaMkBrtlg +EObjjvbdNrtVgFUp +DnbkKvbdRzKHsCvA +DoCkKvbdiZuFkpnG +DnbkKvbdEztRElDJ +EPCjjvbdRECaQQdS +EPCjjvbdqqtkNkAm +EObkKvbdyNrhXriD +DoDLKvbdegkWRmqH +DncKjvbdNQXqWNfs +DoDLKvbdRadFLhxk +EPDKjvbdxUmFQyLn +EPCjjvbdxxJKBoyk +EObkKvbdnVUzLJqf +DnbjjvbdSQUGiedX +DncLKvbdrpVnjCvG +DoDKjvbdZirgpGbG +DncKjvbdOAJTUJrA +DnbjjvbdUyHsyjoO +EPDKjvbdfpBzvdXh +EPCjjvbdyTNhlqag +DncKjvbdLBKflaxR +DoCjjvbdVwJXvEEg +EOcKjvbdVqnXadlD +DoDKjvbdyNrgxSiD +EObjjvbdnVVZjjRf +DnbjjvbdFeiqmiTq +EObkKvbdFVxpQMie +DnbkKvbdIBkydzAD +EPCkKvbdZjTHofaf +DncLKvbdnPzYukZC +EObkKvbdLYqKSzuG +Dnbjjvbdxmrgwrhc +EObkKvbdTkuoBWOi +EObkKvbdIrxaSlxM +EOcLKvbdJqZeOfOF +DoCjjvbdBhjbKiFj +EPCkKvbdrDeJPnVa +EPCkKvbdNwoVzcnU +EOcLKvbdXmqAYVWU +EPCkKvbdZeYGzhJC +EOcKjvbdNddUIhjd +DoDKjvbdjggLeemk +EObkKvbdxZgefXeS +EOcKjvbdgFkzOGgA +EObkKvbdNdcsiIkE +EPDKjvbdbiMikFwY +EPDKjvbdelfWfmJk +EOcKjvbdHELWJajK +DoDLKvbdZRMeIldq +EOcLKvbdRXNccMHc +EPCkKvbdQlxCZNtz +DoCkKvbdyTOJMqag +EPDLKvbdCTAcTevr +EOcKjvbdrpVnicWG +DnbkKvbdZLrETmkm +EOcLKvbdRpTfifEX +DnbjjvbdQcbaPqDr +DoCkKvbdEuxpQNKF +EPCjjvbdNeEThiKd +EPDKjvbdVYgtZjoO +DoCjjvbdZRMdhleR +DoCjjvbdZsiIyDrn +EPDLKvbdaSGCgtGL +EPDLKvbdqTtGqrKt +DoCkKvbdnVUzKjSG +EPCjjvbdzQoMiJwA +EPDKjvbdXrlBMtOx +DoCjjvbdNHColpVL +EObkKvbdXnRAXuVt +EObjjvbdMJCMQxAS +EObkKvbdIrxaTMxM +DnbjjvbdbAudfQQX +DnbkKvbdnCKXYOmu +DoDKjvbdEXxMUUTl +EObkKvbdyXhiaozL +EObjjvbdEJhKVwjA +EOcKjvbdpfEFTuaI +EOcKjvbdbVCHYLTh +DncLKvbdyqOliJwA +EOcKjvbdkxrqsZHU +DncKjvbdDjHjVwjA +EPCkKvbdkDMLQfuH +EPCjjvbdUVlPjUBR +DoDLKvbdjJfHimXr +DoCkKvbdEuxooljF +DoDLKvbdYzcGRjWZ +DoDKjvbdwyhGGYFS +DnbkKvbdsrrSxyeD +EPCkKvbdxmrhXrhc +EPDKjvbdDjHivXjA +EObkKvbdfMfXGlik +EPDLKvbdGdKvKBij +DoCkKvbdbLMGOmcA +EPCkKvbdRXNdDLgc +EPCjjvbdZsiIxcrn +DoDKjvbdpyPIGqEY +EPDKjvbdlZTRryHU +DoDKjvbdUslsekvK +DncKjvbdKfFhCBQu +DncLKvbdSCDeMIyL +EPDKjvbdJcJcRJcY +DoDLKvbdraellHLZ +EPCjjvbduDCtwWPP +DnbkKvbdBdPaWJlf +EPCkKvbdqFceUVaI +DnbkKvbdcyxoxYqC +DnbkKvbdlYsSTYft +EObjjvbdZHXEAOsJ +EObjjvbdURROtuHm +EPCjjvbdZLrDsnMN +EPCjjvbdfIKvRmpg +EPDLKvbdwWlBVaVu +EObkKvbdZMSDsmkm +EPDKjvbdKNAEZfuB +DnbjjvbdhyuGMROG +EObjjvbdJuuGDdgJ +EPDLKvbdgQBzwDxI +EObjjvbdjvXNdCXw +EPCjjvbdlZSrSyGt +DoDKjvbdXsLaMsnx +DoDLKvbdTlVoAuoJ +DnbkKvbdptUGrSLU +EObkKvbdEztRFMCi +EOcLKvbdTkvOaVoJ +EObkKvbdDoCjjwCd +EPCkKvbdTfznLwVe +EObkKvbdRjyGUfjs +EPDKjvbdVviXvEFH +DnbjjvbdKkBIWAKZ +EOcLKvbdqFdFUVaI +EOcLKvbdBhjakJFj +DncKjvbdauBgYKsh +DnbjjvbdxKvdHzyf +DoCjjvbdxVMdqYlO +EPCjjvbdEPDLLXDE +EPDLKvbdVvhwucdg +DncKjvbdaRfDITfL +EPDKjvbdfpBzvcxI +DoCkKvbdGLFTDHmV +DoDLKvbdcTDKtDjB +DnbkKvbdZRMeIldq +EObjjvbdRjyGVGkT +EPCjjvbdlhctRVRa +DnbjjvbdyXhibPzL +DnbjjvbdFpASvgFy +DnbjjvbdKCicRJcY +DnbkKvbdPxmAGrrK +EPCjjvbdpstHSSKt +EObkKvbdiZtelQnG +DoDLKvbdKkAgvAJy +EObjjvbdsPvPKCuf +EOcLKvbdhyuGLqOG +EPDLKvbdyOSgxShc +EObkKvbdmJDsptqa +EPCjjvbdbVCHYKtI +DoCkKvbdCJLBkIfK +EPDKjvbdTqQnuUgm +EOcLKvbdypnmIjXA +DoDLKvbdiLddOUby +DoCkKvbdaSFbgtGL +EPDLKvbdraellGjy +EObkKvbdWRmwbEkc +EPCjjvbdDoDLKvcE +DnbjjvbdjEjfuPAO +DnbjjvbdqvokbiYq +DnbkKvbdVZITzLOn +EPDKjvbdUWLpJtAq +EObkKvbdwtmFQyMO +DoDLKvbdFWZQPmKF +EPDKjvbdLBKgMawq +DncLKvbdANIYsWyx +EObkKvbdqvolDJYq +EOcKjvbdQlwbZOUz +EPCkKvbdlqyUzTEJ +EPCkKvbdSLYfUgKs +DoCjjvbdRotHJfEX +EOcKjvbdrXQMCiZR +DncLKvbdaofgELzd +DoDKjvbdehKvSNqH +EPCkKvbdzaAOfgBl +DoCkKvbdVUMsfMVj +DoDLKvbdUGznLwVe +EPDLKvbdDoDKjwDE +DoCjjvbdANHxsXZx +EPCkKvbdJpydnenF +EPCjjvbdtTRsZZeD +DoDLKvbdnQZyWLZC +EPCkKvbdKNADyfta +EPCkKvbdUVlPjTaR +DncLKvbdeOeSjstS +DncKjvbdXrlAmUOx +DoCkKvbdxnTIXrhc +EPDLKvbdZjTIQGaf +DoCjjvbdPxmAGrrK +EPDKjvbdLZQirztf +DoDLKvbdkHflGFnL +DoCjjvbdiMFEOUby +DnbjjvbdhaoDFXQq +EPCkKvbdyzeNqhIh +EPDKjvbdbUbGwkUI +DoCkKvbdEXxLsstM +DoDLKvbdaRebhUGL +EObjjvbdMfbpNQUk +DoDLKvbdCEQAuilf +EObjjvbdMowpunHT +DoDLKvbdzHYlAMeX +DoCkKvbdegkVqnQg +DnbkKvbdwWlAuaVu +DncKjvbdFfJqnItR +EObjjvbdZjTHpHBf +EPCkKvbdbsDKtEJa +EOcLKvbdZtIiZESn +DoDLKvbdpxoIHRDx +EPDLKvbdTpqOtuIN +DnbjjvbdmoyxvKxb +DncKjvbdqGEEtWBI +EPCkKvbdQwNdClHc +DoCkKvbdHELViajK +EPDLKvbdCJLBkIfK +EPDLKvbdvwMBWBVu +EPDKjvbdxrmiNRag +EOcKjvbdxVMeQyLn +DoCkKvbdraelkgLZ +EPCjjvbddndsLUUS +DoCjjvbdhgKDYvKV +EPDKjvbdBiKbKiFj +DncKjvbdKkBIWAKZ +DnbjjvbdjlakzEgP +EObjjvbdNrtWGeUp +EPDKjvbdidkGuPAO +DnbkKvbdjAQHBPgK +DoCkKvbdUxgtZkPO +DoDLKvbdDoCkLXDE +DoDLKvbdkVvmcaxX +EPCkKvbdmfeXmOHZ +DoCjjvbdHDkWJajK +DoDLKvbdkHgMGFnL +EObjjvbdBdQAuilf +EPDKjvbdxUleQxlO +DoDKjvbdJbjDRJcY +EPDKjvbdXsMAltOx +EOcKjvbdIrxaSmXl +DoDLKvbdyYJJbQZk +DoDLKvbdQlwaxnUz +EObkKvbdqvpMDIyR +DoCkKvbdhzVGLpnG +DncKjvbdJKEAJofd +EOcLKvbdZLrETnLm +DncKjvbdQvnDcMID +EPDLKvbdiLddOUby +EOcKjvbdeJiqvUzn +DnbjjvbdsBemMGkZ +EPCkKvbddtAUASmW +EPCjjvbdiLeEOVCy +EPDKjvbdkxrrSyHU +DoCjjvbdURQoVUhN +EOcKjvbdtkwwBUBX +EOcKjvbddeOqawCj +EOcKjvbdbAvEfPow +EPCkKvbdzROmIjXA +EObjjvbdKDKCpibx +EPDKjvbdIGfyyYXg +EOcLKvbdeOdsKssr +EOcKjvbdsBelkgKy +DoDKjvbdJYUCIMRQ +EOcLKvbdjcMLQgVH +EOcLKvbdJTYaSmXl +DoDLKvbdNddUJIkE +DoDLKvbdFjdsChNV +DnbjjvbdmttyjjSG +EPDLKvbdVgwuxHYz +EOcLKvbdsCGMkfjy +EOcKjvbdKWVGDeHJ +EPDLKvbdjJegjMwr +DoCkKvbdNHDQMotk +DoDLKvbdjmBkydgP +DnbkKvbdSLZFtfjs +EPDKjvbdjbkjpfuH +EObjjvbdkVwNdBww +DncKjvbdFxtuBEYC +EPCkKvbdrMzJxkhJ +DoDLKvbdptUGrSKt +EOcKjvbdhzUelQnG +EObkKvbdsQVoKCuf +DoCkKvbdzitpPcsU +DoCkKvbdySnJMqag +DncKjvbdZRMeImFR +EObkKvbdYzcFrKVy +DoDKjvbdrNZjZMIJ +EPCkKvbdEvYoolie +EOcLKvbdLBKgNCXq +DnbkKvbdrpVnjDWG +EObkKvbdLLBHvAJy +DoCkKvbdqmZixkgi +DoCjjvbdhytfLpmf +DnbkKvbdVZHsyjoO +EObkKvbdWWhxWEEg +EObkKvbdhfjDZWJu +DoCjjvbdZoOIddzK +DoCjjvbdCDoaWJmG +DoCkKvbdzitoocrt +EOcLKvbdOSsvGduQ +EOcLKvbdVqnXbElD +EPDKjvbdgFlZnHHA +EOcKjvbdUsltFkvK +EPCkKvbdePFSkTsr +EPCkKvbdssSTYzFD +EOcLKvbdVTlselWK +DncKjvbdZRMeJMdq +EOcKjvbdYSlAlsnx +DncLKvbdSZihTDWA +DnbjjvbdvvlBWAuu +EOcLKvbdEvZPoljF +EPDKjvbdHELWJbJj +DoDKjvbdDjHiuxKA +DncLKvbdrMyjYkgi +EOcLKvbdRbDdlIxk +DoDLKvbdFVyQQMie +EOcLKvbdZxdJmcMS +EPDKjvbdFejRmiUR +EPCjjvbdnPyxujxb +DoCkKvbdjKGIKNXr +DoCjjvbdYSlBNUPY +DoDLKvbdZshiZDsO +EPDLKvbdkyTRsYft +DncKjvbdJbicQicY +DoCkKvbdXGZZtAOs +DnbkKvbdZjSgpGbG +DncKjvbdWSOYBeMD +DoDLKvbdKNADyfta +DoDLKvbdLBKgMbYR +EObjjvbdNddThhkE +EPCjjvbdQdCaPqES +DnbkKvbdvBDySoFI +EPCkKvbdDoDLLWcE +DncLKvbdaSGDHtGL +EObkKvbdKNADzGta +DncLKvbdTAFJHaoE +EOcLKvbdTAFJIBoE +DoDLKvbdUtNTelWK +EPCkKvbdKefICApu +EObkKvbdySmhlqbH +EPDLKvbduaEYroFI +DnbjjvbdSKxfVHLT +EObkKvbdhkdcnVDZ +DnbkKvbdCSaDTevr +DoCkKvbdiBoCeXQq +DncLKvbdZjShQGaf +EPCkKvbdIwsagkqQ +DnbkKvbdnCKWwoNu +DncKjvbdelfWgNJk +EOcLKvbdSPtHKFcw +EObjjvbdZRNEhleR +DoCkKvbdbLMGPNcA +DoCkKvbdRkZFtfjs +EOcLKvbdySmhmSBg +DoCkKvbdWHxVwgYz +EObjjvbdURQntuHm +EPDKjvbdySnJMqbH +EOcLKvbdOStWHEtp +EPCjjvbdeOeTKstS +DncLKvbdssRsZZdc +EObjjvbdrovPKCuf +EPDKjvbdiZuFkqOG +DncLKvbdsBfNLfjy +EOcLKvbdCDpAujNG +EPDKjvbdOSsugFUp +DoDLKvbdNQYRVmfs +EOcLKvbdTAEiHaoE +DoCjjvbdEPDKjwDE +EPCkKvbdqUUGqqkU +EPDKjvbdtbcVXVoP +DnbjjvbdhbOcEvqR +EOcKjvbdCTAcUGWr +EPCkKvbdQdDApQcr +DnbjjvbdTfznLwWF +DnbkKvbdCDoaVjMf +EPCjjvbdBsBDUFvr +EPCkKvbdWWiXuceH +DoCjjvbdJcJcRJbx +DoDLKvbdsCGMlHKy +EPCjjvbdSBceLhyL +DoDKjvbdHffzZYYH +EPCkKvbdvAdZTOeI +DnbkKvbdxwhjBpZk +DncKjvbdOFDtIhjd +DoCjjvbdmpZxujxb +EOcKjvbdIryAsMwl +EPCkKvbdTqQnuUhN +DncKjvbdOSsvHEtp +EPDLKvbdZoOIdeZj +DnbkKvbdKeegbAqV +EPCjjvbdqFceUWAh +DnbkKvbdCWzchdpW +EPCkKvbdzQnlhiwA +DoDLKvbdqdEiQNua +DncKjvbdddoRawCj +EPDLKvbdlYrrSxft +DnbkKvbdRWnECkgc +DncKjvbdGYuUaEYC +EPDLKvbdZsiIxcrn +DoCjjvbdJbibqJbx +EPDKjvbdGYtuBDxC +DnbjjvbdCEQAvKMf +EObjjvbdvAcyTPEh +DoCkKvbdxwhjBozL +DoDKjvbdNsTugFVQ +DoDKjvbdkHgLeemk +EOcLKvbdwWlBVaWV +EOcLKvbdrNZjYkgi +DnbkKvbdJYUBglRQ +DnbkKvbdjvWmdCXw +EObjjvbdmajXYPOV +DncKjvbdDihJuxKA +EPCjjvbdwzIGGYFS +DoDKjvbdMpYQvOHT +DncLKvbdbhljLFwY +EObjjvbdelevgMik +DnbjjvbddePSCWbj +DnbjjvbdKQydnenF +DnbkKvbdZQmEhmFR +DoDKjvbdjKFgimYS +EObjjvbdANIZSvyx +DoCjjvbdfHkWRnRH +EObkKvbddiiqutzn +EOcKjvbdqYnhHQdY +DoDKjvbdKCjDQjCx +DoDLKvbdjgflFfNk +EOcLKvbdtTRrxzEc +DnbkKvbduLwwBUAw +DncLKvbdkWXOEBxX +EPDKjvbdNxPVzcnU +EPCjjvbdUMVnaWOi +EObkKvbdZQmFImEq +DncLKvbdQvmdDMID +EObjjvbdGFjSNhsq +EOcLKvbdbAvFFpQX +DoCjjvbdkCkjqGuH +EPCkKvbdbLLeoNcA +DoDLKvbdemFwGmJk +EOcKjvbdVUMtFlWK +EPDLKvbdWXJXucdg +DncLKvbdqcdhpNua +DncLKvbdGYuUaDxC +EPCkKvbdGZUtaDwb +EOcLKvbdjuwODaxX +EOcKjvbdSKyFuHKs +EOcLKvbdNQYQvOHT +EPCkKvbdNGcQNPuL +EOcLKvbdPIAYZAZB +EObjjvbdMfcPlpVL +EPCjjvbdLAjflbXq +EPCjjvbdySmhmRbH +EPDKjvbdxsNhmSBg +EOcKjvbdZMSDsmkm +DoCjjvbdbAudfQQX +DoCjjvbdePErjtTr +DncKjvbdtkxXBUBX +DoCkKvbdqvokbiYq +DnbjjvbdMfbpMouL +DnbjjvbdijFhKNXr +DoDKjvbdhgJcZVjV +EPDKjvbdIHGzZYYH +DnbjjvbdNsTufeVQ +DnbjjvbdqlyixlIJ +EPDLKvbdmaivxPOV +DnbkKvbdmJDsptrB +DnbjjvbdQYmAGsSK +EOcKjvbdZjTIQHCG +EPDKjvbdqGDeTuaI +EOcLKvbdADSYJzIp +DncLKvbdeuzwoizs +EObjjvbdFyUuBEXb +DncLKvbdnUtykJqf +EPCjjvbdelfXGmKL +EOcKjvbdKCjDQjDY +DncKjvbdaaVeGPow +DncKjvbdqvolDJYq +DoCjjvbdDnbjkWbd +DoCjjvbdjlakyeHP +DoCkKvbdLZRJrztf +DncKjvbdZisIQHCG +EPDLKvbdZyDjNbkr +DnbkKvbdLAjfmBwq +EOcKjvbdtSqryZeD +EOcLKvbdIMBzmvqL +EObjjvbdiVZdvqtb +DoDLKvbdMgDPmQVL +EPDLKvbdMgCpNPtk +EObjjvbdKVuGDeHJ +EOcLKvbdjJehJlxS +EPCkKvbdhlEcmuDZ +DoDKjvbdHfgZyXwg +EPCjjvbdShyiqABM +EPDLKvbdMgColouL +EPDLKvbdVqmwadkc +EPCjjvbdnCKWwnmu +DncKjvbdRpUGjGEX +DoDKjvbdkWWnECYX +DnbjjvbdkMalZeGo +EOcKjvbdxUleRYkn +EObkKvbdFxtuBDxC +EObjjvbdnGdwlnGy +EObkKvbduaEYsOeI +EPCkKvbdyTOJMrBg +EObjjvbdDHMFgAzc +DnbjjvbdEOcKkXCd +EPDLKvbdBhjbLIfK +EPCkKvbdZtJJZETO +EOcLKvbdIwsagkqQ +DoCkKvbdZyDjNbkr +DnbjjvbdBsAbsfWr +DoCjjvbdeOeSjssr +EObkKvbdVUNUGMWK +DncLKvbdfMfWfmKL +DoCjjvbduaEZTOdh +DoCkKvbdZisIPgBf +DnbjjvbdVZHtZjoO +DoCjjvbdCWzchePv +EObjjvbdJmAEZfuB +EObjjvbdvvkaVaWV +DoCjjvbdiiegjNXr +DnbjjvbdcScLUEJa +DncLKvbdJXsbHlQp +EPCjjvbdrpWOjDVf +DoDLKvbdDnbjjwDE +DnbjjvbdxnShYSiD +DoCjjvbdqGEFUWBI +DoDKjvbdtSrTYzEc +EObkKvbdEPDLLWcE +DoDKjvbdKQzEnfOF +EPDLKvbdIwtBhMRQ +DoCjjvbdTvLojUBR +EPDLKvbdZyDimbkr +EPDLKvbdptTfrSKt +DncLKvbdkMbLyeHP +EOcKjvbdKfFhBaQu +EObjjvbdeEoRbXDK +EOcKjvbdHDjvJbJj +EObkKvbdEztQeLcJ +DncKjvbdUtMsfLuj +DnbjjvbdRXOECkgc +DncKjvbdLAjfmBxR +EOcLKvbdsPvPJcVf +EPCjjvbdygYlAMdw +DnbjjvbdmuVZkKRf +EPCkKvbdSZigrcWA +DncLKvbdcJMikGWx +EOcKjvbdGLErcHlu +DoDKjvbdKNADygUa +EPDLKvbdMfbolpUk +DoDLKvbdUxhTyjoO +EPCkKvbdMtrqjmAX +EPDLKvbdLBLGmBxR +DoCjjvbdrzMQTAgn +EPDLKvbdUxhTykPO +DnbkKvbdnVUzLJqf +DoCkKvbdLYpirztf +EPDLKvbdFejSOItR +DncLKvbdvlvANDeN +DncLKvbdwtleRYkn +EObkKvbdcJNKLFvx +EPCjjvbdYSkaNTnx +EOcLKvbdSxKlNzjx +DnbjjvbdHbMZdzAD +EPCjjvbdXnRAXuVt +DoDKjvbdQmYBxnUz +DoCkKvbdWSOYCEkc +DnbkKvbdemGXGlik +EObjjvbdNeDsiJLE +DoCkKvbdbiMijfXY +EPCjjvbdmIdTptrB +DoCjjvbdEztQeMDJ +DncLKvbdCIjbLIfK +EPCjjvbdhkeENuDZ +DoCkKvbdAMgxsWzY +DoCjjvbdiZtelQnG +EOcKjvbdWXJXuceH +EOcLKvbdZRMeJMeR +EPCkKvbdiVZdvquC +DoDLKvbdkVvmdCXw +EObjjvbdnHExMmgZ +EPDKjvbdHgHZyYYH +EPDKjvbdRbEFMJYk +EPCkKvbdvBEZSndh +DnbkKvbdcScLTdJa +DoDLKvbdcJMijfXY +DnbjjvbddndrjstS +EPDLKvbdbiNJjevx +DnbkKvbdOSsvGduQ +DoDKjvbdMowpvNfs +DoCkKvbdZjSgpGaf +DnbkKvbdddnqawDK +DoDLKvbdKaLGmCYR +DoCjjvbdmuVZkKSG +EOcKjvbdZQldiMdq +EObjjvbdRNXayOUz +DncLKvbdeuzxQJzs +DncLKvbdEOcKkXCd +DncKjvbdhtyeXSUb +DnbjjvbdEObjkXDE +DncLKvbdKQyePGNe +EOcLKvbdHgGzZXwg +EObkKvbdrMzJxlIJ +EObkKvbdRXNdClHc +DoDLKvbdwzIFexEr +EPDKjvbdJYUCIMQp +DnbkKvbdhbOcFWqR +EOcKjvbdnGdxMmgZ +EObjjvbddeOqawCj +EPCjjvbdqTsgSSKt +DncKjvbdJXtBhLqQ +DoDLKvbdatagYKsh +EOcKjvbdjEkHUoAO +DncKjvbdLFfICBRV +DnbkKvbdKQydoFme +EPDKjvbdhlFEOVCy +EPCkKvbdZxdJmblS +EPDKjvbdJbjCqKCx +DncKjvbdwNWANDdm +EPDLKvbdpyPHfqDx +EPCjjvbdOTTufeVQ +EPCkKvbdtbbtvvOo +DoCjjvbdbBWEfQQX +EObjjvbdKNAEZgVB +DnbjjvbdJXtBgkqQ +EPCjjvbdGYtuBEXb +DoDLKvbdZjShQGaf +DoDLKvbdQmYCYnUz +EOcLKvbdpedFTvAh +EObjjvbdKQydoGNe +EPCkKvbdKDJcRKDY +EObkKvbdrafMkfkZ +EObkKvbdiCObdwRR +EPCjjvbddBsMrAUN +DoDKjvbdWIXvXgYz +DoDKjvbdkClKpftg +EOcKjvbdkCkjpftg +EOcLKvbdVrOYBeLc +EObkKvbdmoyxukZC +EPCjjvbddZyQXyRC +DoCkKvbdhbPCdvqR +DoCkKvbdJvUeceGi +EOcLKvbdVqnXaeMD +DoCkKvbdWWhxVceH +EPDKjvbdiGjDZVjV +EObjjvbdGAnpxizm +DoCjjvbdiZuFlQnG +EOcKjvbdTqRPVVIN +EPCjjvbdqdEhomvB +DoCkKvbdLAkHMaxR +EPDLKvbdOEdThiKd +DnbkKvbdkxrrTZGt +EOcLKvbdEPDLLXCd +DoDLKvbdTIzKRAAl +EPDLKvbdSCDeLiZL +EPCkKvbdpyOgfpdY +EPCjjvbdtkwwBTaX +EPDKjvbdiBoCeWqR +DoCjjvbdhgJbxujV +DoDLKvbdqdEhpNvB +EOcKjvbdkCkjqGuH +EPCjjvbdhbObeXQq +EOcKjvbdxsOImRbH +DoCjjvbdKWVFceHJ +DoDKjvbdBiKbKiGK +EPDKjvbdnGeXmNgZ +EPDKjvbdiifHjNYS +EOcKjvbdauBgXjsh +DnbkKvbdUtMsfLvK +DncKjvbdNrtVgEuQ +EPDLKvbdUsmUGLvK +EOcLKvbdNGcQMpVL +EPCkKvbdqmZjZLhJ +EObkKvbdFfKSOJUR +DncKjvbdhaoCeXRR +DoCkKvbdmfdwlnGy +EPCjjvbdjbkjqGuH +DoDKjvbdlqyVZsEJ +DnbjjvbdWWiYVcdg +EOcKjvbdeATqMwjG +EOcKjvbdqUTgSSKt +DncKjvbdqwQMDJZR +EPCkKvbdsQVoJbuf +DoCjjvbdVTmUFlVj +DoDKjvbdmajWxPOV +EOcKjvbdUQpoUthN +DoDKjvbdwMvAMdEm +EPDLKvbdDnbkLXDE +DncLKvbdFfKSNiTq +DncKjvbdIryBSlwl +DoDKjvbdmgEwlmfy +DncKjvbdqwPkbhyR +DncLKvbdNeETiJKd +EObjjvbdDoCjkXCd +EObkKvbdjgflFfNk +DncLKvbdxsNhlrCH +DoCjjvbdeFOrCWbj +EObjjvbdkNBkzFHP +DoCjjvbdxrmiNSCH +EOcLKvbdVwJXvDeH +EPCkKvbdZRMdhmEq +EObjjvbdjSzhsKiz +DoCkKvbdqdEiQOVa +EOcLKvbdpaJFAWhE +EPDLKvbdRkYfVGjs +DncKjvbdMpXqWNgT +EOcLKvbdVYhUZkPO +DoCjjvbdUxhTyjnn +DoCkKvbdOYOuzcmt +DoDKjvbdZLqdUNlN +DoDLKvbdJSyBTMxM +DoDLKvbdYORAXtut +DncKjvbdHffzYxXg +DncLKvbdmpZyVjyC +EOcKjvbdmfeXlnGy +DoDLKvbdkHfkeenL +DoDLKvbdJTZBSmYM +EObkKvbdrMzKZMHi +DncLKvbdiLeDmuCy +DoDKjvbdjvXNcbYX +DnbkKvbdrJAJeMne +DoDLKvbdvlvAMdFN +EPCjjvbdZLrDsmlN +DnbjjvbdaaVdfPpX +EObkKvbdrbFlkfjy +DoDKjvbdGLErbhNV +DoCjjvbdCIkCKhfK +DnbjjvbdeEoSBwDK +DncLKvbdirziSjiz +EPDKjvbdwzIGGYEr +DncKjvbdbVCGwkTh +EObkKvbdakMFnmcA +DnbkKvbdRpUHKFdX +DoDLKvbdMSWlytpz +DncLKvbdpssgRrKt +EPCjjvbdZRMeImEq +DoCjjvbdqrVKmjaN +EObjjvbdjAQGaPfj +DoDLKvbdyqOmJJwA +DnbjjvbdQccApRES +DoDLKvbdIsYaSmXl +EPCjjvbdrovPKDWG +EPDLKvbdqdEhpOVa +DoCkKvbdVviYVdEg +DoCjjvbdqZPIGqEY +EPCkKvbdOTTvGeVQ +DoCkKvbdDncLLXCd +EObkKvbdvBEYsOeI +DoCjjvbdYORAYVVt +EOcLKvbdhgKCxuiu +DoDKjvbdddoRbWcK +EObkKvbdmoyyWKyC +EOcLKvbdyYJJbQZk +DnbjjvbdUyIUZkPO +DncKjvbdFyUuBDxC +DoCjjvbdnQZyVjyC +DoDLKvbdatbHYKsh +DoCjjvbdczYowxpb +DncLKvbdIsZAsMxM +EPDKjvbdGKeTChMu +DoCkKvbdptTgSRjt +EPDKjvbdMtrqjmAX +DncLKvbdKQzEoFme +EObjjvbdFxtuAcxC +DncKjvbdkDLkRHVH +EPCkKvbdunszqKnt +DoCkKvbdezuxeJTw +EObkKvbdzjVQQDsU +EPDLKvbdjKGIKMxS +DoCjjvbdcyyQXxqC +EObkKvbdhtydwRtb +DnbjjvbdfNGXHNKL +DoDKjvbdmoyxujxb +DncLKvbdmuVZkJqf +EObkKvbdZyDjNbkr +DnbkKvbdyXhiaozL +EObkKvbdKWUfDeHJ +DoCkKvbddoFTLUUS +DnbjjvbdJvUfEFHJ +EObjjvbdsrqrxzFD +EObjjvbdmgFYMmfy +DnbjjvbdbrcLTcjB +EPDKjvbdZtIiZETO +DncKjvbdSLZGVHLT +EObjjvbdhtzFXSVC +EOcKjvbdvAcxsPEh +EOcKjvbdbrbjsdKB +DoDKjvbdezuxdiTw +DoDKjvbdhkdcnVDZ +DoCkKvbdNddUJIkE +DnbjjvbdsCGMlGjy +EOcKjvbdssSSxydc +DoCjjvbdSPtHJfDw +DoDLKvbdmRyVZrdJ +EOcLKvbdBdQBVjNG +EPCjjvbdtvOXipsA +EOcLKvbdDwwlUUUM +EObkKvbdhkeENuDZ +EOcKjvbdwygfGYEr +DncKjvbdbsCkUEJa +DnbkKvbdvlvAMceN +EPDKjvbdTvMPitAq +EPDLKvbdMowpvOHT +EOcKjvbdNQXpvNgT +DncKjvbdYzcFqiuy +EObjjvbdqUUGrRjt +EOcKjvbdUaBqTRSZ +DnbjjvbdrafMkfjy +DncLKvbdmgFXmNfy +DncKjvbdNrtVfdtp +EOcKjvbdVZITyjoO +EPDKjvbdTukpJtBR +DoDLKvbdyOTHxTIc +DnbjjvbdsBfNLfkZ +EPCjjvbdmJDtRVSB +EObjjvbdmJDtRUrB +DnbjjvbdiVZeWrVC +DncKjvbdBiKajhfK +DnbkKvbdziuQPcsU +EOcKjvbdGFiqnJTq +DoCjjvbdAMhZTXZx +DncLKvbdDjHiuwjA +DnbkKvbdBdQBVjNG +EPCjjvbdqlzKYkgi +DncLKvbdLLBIWAJy +DncLKvbdbhljKfXY +DncKjvbdaogHELzd +DnbkKvbdjEkGtoAO +DnbjjvbdGdKvJbKK +EPDLKvbdqrUjnKaN +EObjjvbdnVUykKSG +EPDKjvbdVrNwbFMD +DoDKjvbdvlvAMdEm +EPCjjvbdaaWEeopX +EPDLKvbdULuoBVoJ +EPDLKvbdzjUpPcsU +EPDKjvbdZnnJEdyj +EPDKjvbdtlXwAsaX +EPCjjvbdjJfHimXr +EPCkKvbdxwiKBpZk +DoCkKvbdLiBlQxAS +EObkKvbdXFxytAOs +EObjjvbdnQZxukYb +DncKjvbdZxcjNcMS +DnbkKvbdQcbaQQcr +EObkKvbdVgxVwgYz +DoDLKvbddoEsLUUS +EOcKjvbdTppnttgm +DoDKjvbdBhkBjhej +EPCkKvbdlhcsqVRa +DoDKjvbdZshiYcsO +DoDKjvbdtcDUvvPP +DnbkKvbdRkZFuGjs +DoCkKvbdaaVeFopX +EObkKvbdYORAXtut +DncLKvbdqwPlDJYq +DoDLKvbdbBWEepPw +DnbkKvbdVvhxWDdg +EObkKvbdfHkVqmpg +DncKjvbdaMjartmH +EPCkKvbdBhjbLIej +DoCjjvbdCIjbKiFj +DoDKjvbdkIHLefOL +EOcKjvbdrbGMlGkZ +DncLKvbdPxmAGsRj +EOcKjvbdZxdKODMS +DncKjvbdkDLjqHUg +EOcLKvbdjEkHUoAO +DoDLKvbdrovOjDVf +DncLKvbdZshiZESn +DncKjvbdUyIUZjnn +EPDLKvbdxmrhYSiD +DoCjjvbdaNKasUlg +DnbkKvbdYqMeJMdq +DncKjvbdZoOIeEyj +EOcKjvbdemGXGlik +EObjjvbdyzdnRhIh +DncKjvbdHEKvJbJj +EObkKvbdSCDdlIxk +EPCjjvbdGAoQxizm +DoCjjvbdaNKasVMg +EObkKvbdePErkTtS +EPCjjvbdlhdUQuSB +EPDKjvbdNQXpvOGs +DoCkKvbdXnRAYUut +EObkKvbdcTCkUEKB +DncLKvbdmRyUzSdJ +EPDLKvbdrSVLNkAm +DoCkKvbdJvUecdgJ +DoDLKvbdRDbaQRDr +EPDKjvbdYlSETmlN +EPCkKvbdbUagYKtI +EPCjjvbdssRrxzFD +EPCjjvbdRMwbYmtz +DnbjjvbdxrmhmRag +DoDKjvbdTvLpJtAq +EPDKjvbdVBBprprZ +DnbkKvbdRkYeuGkT +EOcKjvbdmbKWwoOV +EOcKjvbdZeYGzghb +EPCjjvbdFeirOJUR +DoCkKvbdZsiIxcrn +EPDKjvbdDnbkKvcE +DoDLKvbdsrrTZZeD +DncKjvbdJbjCpicY +DnbjjvbdcyxpXxpb +EPCjjvbdrXQLbhxq +DncKjvbdzROmJJwA +DoDKjvbdqdFIpNvB +EPDKjvbdkHfkfGNk +DoDKjvbdFjdsDINV +DoDKjvbdUyITyjoO +EOcLKvbdiUzEwRtb +EPCkKvbdmfeYMmgZ +DncLKvbdHgGyyXxH +EObkKvbdMuTSLNAX +DncKjvbdtbcUwWOo +DoCjjvbdVwIxWEFH +EOcKjvbdhgJcZWKV +DoCjjvbdsCFllHLZ +EPDKjvbdGcjvJbKK +EOcLKvbdnGeYNNfy +DncKjvbdZnnIeFZj +DoDKjvbdxUldqZLn +EOcKjvbdrovOibvG +DoDKjvbdUWLpKTaR +DncKjvbdePFTKtTr +EPDLKvbdFxtuAdYC +DoDLKvbdfIKvRnQg +EPDLKvbdypnmIjXA +DncKjvbdbUagYLUI +EPDKjvbdnVUyjiqf +EObkKvbdKWVGDeGi +EObkKvbdaNKbSuMg +DoDKjvbdNVSqkNAX +EObkKvbdhbPDFWqR +DoDLKvbdLGFhBaRV +EOcKjvbdbrcLUDjB +EObjjvbdZHXEAPTJ +EPCjjvbdCSaDTevr +DncLKvbdgQBzvcxI +EObjjvbdidjfuPAO +DoDLKvbdzjUoodTU +DncKjvbdGLEsChNV +EPCjjvbdNeDshiLE +EObjjvbdGGKRnIsq +EObkKvbdeYZtTqez +EOcKjvbdQwODblHc +DoCkKvbdkClLRHVH +EPCkKvbdxUldqYkn +EPCkKvbdvBDxsPFI +DnbkKvbdqvpLcIyR +DncKjvbdqmZixkhJ +DoDLKvbdkVwNdCYX +EObkKvbdUxgsykPO +EPCkKvbdjcLjpgUg +DnbjjvbdbUagYKtI +EObjjvbdDjHjWXjA +EObjjvbdrykpSaIO +EObjjvbdrbGMlGjy +DncLKvbdVYhUZjnn +DoDLKvbdjlakydfo +DnbkKvbdVTmUGMVj +EObjjvbdZjTIQHCG +EOcLKvbdZxcjNcLr +DoCkKvbdqTsgSRjt +DnbjjvbdCIkBkJFj +EPCkKvbdaogHELzd +EPCjjvbdNPxQunGs +EObjjvbdxZhFfXeS +DoDKjvbdjblKqHUg +EObkKvbdNPxRWNgT +DoDKjvbdkaNOmALA +EPDLKvbdxsOImSCH +EOcLKvbdZshhyETO +EPDLKvbdIHHZyYYH +DoDKjvbdliEURVRa +EObjjvbdiVZeXRtb +EOcKjvbdiHJcYvJu +EOcKjvbdIsYaTNXl +DoCkKvbdtlXvaTaX +EOcKjvbdNQYRVnHT +DoDKjvbddjJqvUzn +DoDKjvbdULuoBVoJ +DoDLKvbdUslselVj +EPCkKvbddePSCWbj +EPDKjvbdNeDtIiKd +EOcKjvbdiUzFXSUb +DoCkKvbdmRyVZsEJ +EPCjjvbduLwwAtBX +EPDLKvbdxZgfGXdr +DnbkKvbdBcpAujNG +DnbjjvbdZtJIyDrn +EObjjvbdmbJvwnmu +EPCjjvbdXnRAYVWU +EOcLKvbdyOShXsJD +DoCjjvbdptUGqqkU +DnbkKvbdFpASwHGZ +DnbkKvbdwtleRYlO +EPCkKvbdnHFYMmfy +EPDKjvbdKCjDQjDY +EObkKvbdeqaWzlDP +DoCkKvbdbLMGPODA +DoCjjvbdpyPIGqDx +EOcKjvbdbhmKLFwY +DoDLKvbdEOcKjwCd +EPCkKvbdePFTKtUS +EPCkKvbdtvNwipsA +EPCkKvbdzoQQdblY +EOcLKvbdKjaHvAJy +EPDKjvbdvPTzpkOt +EPDKjvbdMJCLpxAS +EObkKvbdWWhwvEEg +DnbkKvbdcJNJjevx +DoCkKvbdNQXpunGs +EPDKjvbdWSNxBdlD +EPDKjvbdwyhFeweS +DncKjvbdddnrCWcK +EObjjvbdeKJrVtzn +EObjjvbdrykosBIO +EPDKjvbdiiehKMxS +DncKjvbdrWpMCiZR +DoCjjvbddoFSjssr +DoCjjvbdbhmKKfWx +EObjjvbdmajWwoNu +EOcLKvbdDxYLstUM +EPCjjvbdddoRawDK +DncKjvbdmuUzKjSG +DoDKjvbdLFegbBRV +EPCkKvbdySnJMqbH +DnbjjvbdLLAgvAKZ +EPCjjvbdraemMHLZ +EObjjvbdnUtzLKSG +EPDKjvbdkDMLQgVH +DoDKjvbdkHgMGGOL +DoCjjvbdxsNiNSCH +EObkKvbdNQXpvOHT +EObkKvbdQwNdDLgc +DnbjjvbdegkWRnRH +DnbkKvbdGZUuAcwb +DncLKvbdiMEcmuCy +DoDLKvbdFfJqnJTq +DoDKjvbdZnnJFEzK +EOcLKvbdTqRPUtgm +EOcLKvbdRjyFuHLT +EOcKjvbdhtzEwRtb +EObjjvbdTXjkmzjx +DoDKjvbdqdFJQOVa +DoCkKvbdGckViajK +DncLKvbdDxXlUTsl +EOcLKvbdeUAUASlv +DnbkKvbdzjUpQETU +DnbkKvbdtcCuWuoP +DncLKvbdauBgXkUI +DoCjjvbdUVlPitBR +DnbkKvbdFfJrOItR +DoDLKvbdxnSgwsJD +EPCkKvbdXsMBNToY +DncLKvbdCTAcUFwS +DoDKjvbdhgJbxvJu +DoDLKvbdhkeDnUby +EObkKvbdEvZPpNKF +EPCjjvbdiHJcZWJu +EObjjvbdIHHZyYXg +DoCkKvbdegkVqmqH +DoCjjvbdxVNFRZMO +DoDLKvbdUQpntuIN +DoDKjvbdEJhJuwjA +DoDKjvbdkHflGGNk +DnbkKvbdmttykKRf +DncLKvbdZxdJmblS +DnbjjvbdZQmEhmEq +DoCjjvbdJcJcQjDY +DoDKjvbdBhkCLIej +DoDLKvbdmIcspuRa +DnbjjvbdqiAKElne +DoCjjvbdJpzEoFnF +EOcKjvbdyOShYTJD +DoCkKvbdmuVZjiqf +DoDLKvbdSCDeLhyL +EOcKjvbdJvUedFGi +EObkKvbdehLWRnRH +EPDKjvbdxmrhXriD +DoDLKvbdOTUWGeVQ +EPCjjvbdzRPMhiwA +EPDKjvbdKRZePGOF +DoCkKvbdrDeIomvB +EPDKjvbdkVvmdBww +DoDKjvbdIGfzYwwg +EPDLKvbdFVyPpNKF +DoDKjvbdhytfLqNf +DnbjjvbdMfbomQUk +EOcLKvbdtcDVXWOo +DoDKjvbdqwPlDJYq +EOcLKvbdZshiZETO +EOcLKvbdeEnrCXCj +EOcKjvbdZLrDsnLm +EPCjjvbdLYqKSzuG +DncLKvbdMtsRjmAX +DoCjjvbdJTZArlxM +EPCkKvbdlZSrTZGt +DncKjvbdRyjITCvA +DoCjjvbdEuxpPmKF +DnbkKvbdTYKkmzjx +DoDLKvbduDDVXWPP +DncLKvbdjAPfaPgK +DncLKvbdrEFJPnVa +EPCjjvbdrXQMChyR +DnbkKvbdznpQeDLx +DoCkKvbdjgflFfOL +EObjjvbdjlalZdgP +DoCjjvbdtbcUvvOo +DoCkKvbdrEFIonWB +EObjjvbdwXMAvAuu +DncLKvbdePFSkUTr +EPCkKvbdTppoUuIN +EPDKjvbdIxUCHlQp +DnbkKvbdBiLBjiGK +DoDKjvbdliDspuRa +EObjjvbdFkFTDIMu +EPCjjvbdsQVnjDVf +EPCjjvbdKefIBaRV +DoDKjvbdIryAsNYM +DoCkKvbdsrqrxzEc +EPCjjvbdLqwNZuQz +EOcLKvbdcIlikGXY +DoCjjvbdADSXizIp +DoCkKvbduaEZTOeI +DncKjvbdvBDyTPEh +EPCkKvbdRkZFuHKs +DoDLKvbdSLZFuGkT +EOcLKvbdfekzOHHA +EOcLKvbdkaMoNALA +DncLKvbdkNCMZeGo +EObjjvbdNsUVfduQ +EPCjjvbdZoNiEeZj +DoDLKvbdLYpirzuG +EPDKjvbdmoyxujyC +DoCkKvbdaMjbSuNH +EPDLKvbdxxIjCPzL +DnbkKvbdVAaqSprZ +DoCjjvbduVmxJqTA +DoCkKvbdRkZGVHLT +DoDKjvbdEuyQPljF +DnbkKvbdptUHSRkU +DncLKvbduLxWaUAw +EObjjvbdaaVdfQQX +EPDLKvbdWWiYVdFH +EOcLKvbdfelZmgHA +DoCjjvbdADRxKZiQ +EOcKjvbdfHkWSORH +EObkKvbdTAEiIBoE +DncKjvbdEKIKVxKA +DoCkKvbdkDMKpgVH +DnbkKvbdCWzciEpW +EObjjvbdxZgefXeS +EOcLKvbdsZkpTBIO +DoDLKvbdrJAKFMne +EPDKjvbdkWXNdBww +DnbkKvbdRbEFLhyL +DncLKvbdWXJYWDeH +EOcLKvbdijFgjMwr +DoDLKvbdnHExMnGy +EObkKvbdZeYGzhJC +DnbjjvbdEvZPpMie +EObjjvbdYpldiMdq +DoCjjvbdfRaWzlCo +EPCjjvbdGYtuBDxC +EOcLKvbdQYmAGrrK +EPCkKvbdlhcspuSB +DoDLKvbdezvZFIsw +EOcKjvbdlYsSTZHU +DnbkKvbdmfeXmOGy +DncLKvbdKDKDQicY +DncKjvbdZjTIQHCG +DnbkKvbdgFkzOHHA +DnbkKvbdaNLBsVNH +DoCjjvbdBsBCtGWr +DncKjvbdqdFIomvB +DnbkKvbdkNBlZdfo +DnbkKvbdSQTgKGDw +DoCkKvbddoFTLTsr +DoDKjvbdEYYLtTtM +EOcKjvbdVwJYWEEg +DoDLKvbdyOSgwrhc +DoCkKvbdZMRdUOLm +DoDLKvbdYSlBMtOx +EPCkKvbdkxsRsYft +DnbkKvbdrzLpTAgn +DncKjvbdRjxfUgKs +DnbkKvbdqquLNkAm +DoDLKvbdRMxCYnUz +EPCjjvbdZoOIdeZj +EObkKvbdrpWOicVf +EPDLKvbdkCkjqHVH +EOcKjvbdmSZUzSci +EObjjvbdRjxfUgLT +EObjjvbdNddThhjd +DoCjjvbdKVuFcdfi +EPDKjvbdzjVPodTU +DncKjvbdJTYaSmXl +DncKjvbddZyQXyQb +EPCjjvbdCIkCKiFj +EPDKjvbdTkunaWOi +EObjjvbdfIKuqnRH +DoCjjvbdZRMdiMeR +DnbjjvbdMpXpunHT +DoDLKvbdZRNEhmFR +EObjjvbdaoffdLzd +DoDLKvbdvAdYsOdh +DnbjjvbdSLZGUgLT +DoCjjvbdSCDdkiZL +DoDLKvbdelewHNKL +DoCjjvbdRXNdDMHc +EObjjvbdkWWnDaww +EObjjvbdcyxoxZRC +DncKjvbdelfWfljL +EObjjvbdZnnJEdzK +EOcKjvbdkHflGFnL +DoCkKvbdhbPCdwRR +EPDLKvbdHDkWKCKK +DnbkKvbdRadEkiYk +EOcLKvbdFWYopNJe +DoDLKvbdqTsfrSKt +EObjjvbdxnSgxTJD +EPDLKvbdxZhFewdr +EPCkKvbdTvLojTaR +EObjjvbdfIKuqnQg +EPCjjvbdDxXlTssl +EObjjvbdQvmccLhD +EObkKvbdRNXayOUz +EPCjjvbdatbGxLTh +EOcKjvbdOSsvGeVQ +EPDKjvbdePFTKstS +DnbjjvbdlYsRsZHU +DnbjjvbdZisIQGaf +DoCkKvbdsrqsYzEc +EObjjvbdfILVqnRH +DnbkKvbdZHWdAPTJ +DoDLKvbdEPCkLXCd +EObjjvbdEXwktTsl +DncLKvbdFVyQPlie +DncKjvbdNsUWHEtp +EOcKjvbdyqOmJKXA +EOcKjvbdADSYJyhp +EPDKjvbdUyIUZjoO +EOcKjvbdmJEURVSB +DnbjjvbdIwtBgkpp +EPCjjvbdZQmEhldq +EPCkKvbdDjHiuxKA +DoDKjvbdrEEiQOVa +DncKjvbdKDKDQjCx +DncKjvbdZRNFJMeR +DncLKvbdwygeeweS +DncLKvbdnUuZkKSG +DoDKjvbdvwMAvBWV +DoCjjvbdBhkCLIfK +DnbjjvbdoznDkXoA +EOcKjvbdjgflFemk +EObkKvbdKVtfDdgJ +DnbjjvbdXrkaNUPY +DncKjvbdhlEdNtby +EPDKjvbdemGWfmJk +DoDLKvbdlhctQtrB +EObjjvbdnVVZkJqf +EObjjvbdwuNEpyMO +DoCjjvbdTpqOuVHm +EObjjvbdbLLennDA +DoDLKvbdiGjDZWKV +EPDLKvbdFjeTDHlu +DoDLKvbdDxYLstUM +EPDLKvbdiUzFXSVC +DncKjvbdJYTbHkpp +DoCkKvbdZshhxdSn +EPDKjvbdxrnIlqag +EOcLKvbdiHJcYvJu +DnbjjvbdkVwNcaxX +EObjjvbdpyPIGpcx +EPCkKvbdauCGxLUI +EObkKvbdWRnXadkc +DnbkKvbdVUNUGLvK +EObkKvbdDxYLsssl +DnbkKvbdCJKbKhfK +DncLKvbdbhmKKfXY +EOcLKvbdZoOIeFZj +DoDLKvbdkNCLzFHP +EObkKvbdpxnggQdY +EObkKvbdYqNFJNEq +EPCjjvbdyzdnSHhh +EOcKjvbdczZQYZQb +DncKjvbdZyDimblS +DncLKvbdyOTIXrhc +EObjjvbdhzUelQnG +EObjjvbdFjeTChNV +DoCjjvbdwMvANEEm +DoDLKvbdRXOEDMID +DncKjvbdiHJcYvJu +EOcLKvbdhtzFWrVC +DncKjvbdVYgsykPO +DoCjjvbdGGKRmiUR +EPDLKvbdQmXbYnUz +DnbkKvbdkIGlFemk +DoCjjvbdSPsgJfDw +DncKjvbdzjVQPcrt +EPDKjvbdmfdxNNfy +EPDKjvbdZyDimblS +DoDKjvbdANIZSvzY +DoCkKvbdJqZdoGOF +EOcKjvbdcJMijewY +DncLKvbdNQXqWNfs +DncLKvbdkNBlZeGo +DoCjjvbdHffzZYXg +DoDKjvbdjhHMGGOL +DnbkKvbdiCObdvpq +DoDLKvbdYlRctNkm +EObkKvbdiUzEwRuC +DncLKvbdMfbomPuL +EPCkKvbdlZSrSyGt +DncLKvbdvAcxroFI +DoCjjvbdNGcQNQUk +DncKjvbdWSNxBeLc +EPCkKvbdqvokcIyR +DncLKvbddZyQXxqC +DoCkKvbdvPTzqLPU +DncLKvbdZxcjNblS +EPCjjvbdkMbLzFHP +EPCkKvbdlYrqsYgU +DnbjjvbdWSOXbFMD +DnbkKvbdWeyZtAPT +EPCkKvbdEKHivYKA +DoCkKvbdkNBkyeGo +DoDLKvbdiBoDEvqR +DoDLKvbdRkYfVGjs +EOcKjvbddneSkUTr +EObjjvbdFejRnItR +DncLKvbdLAjgMbXq +DnbkKvbdUGznLwVe +DoDKjvbdLqwNZtpz +EPDKjvbdUxhTyjnn +EPDLKvbdkNBkyeHP +DoCjjvbdgFkzNgHA +EObjjvbdunszpjnt +EPCkKvbdtAHQhABS +DnbjjvbdbKkfOnDA +DoCjjvbdVviYWEFH +DoCjjvbdGZUuAdXb +EObjjvbdhlFDmuCy +DncLKvbdyfyMAMdw +EObjjvbdFyUtaDxC +DnbkKvbdeEoSCXDK +EOcKjvbdbVCGwjtI +EOcLKvbdTAEhgand +EObkKvbdRpUHJecw +DnbjjvbdZsiJZDrn +DncLKvbdtSqrxyeD +DoDKjvbdJSxaSmYM +EPCkKvbdjuvnECYX +DoDLKvbdrMyjYkgi +DnbkKvbdjJegjNXr +DoDLKvbduaDxsOdh +DoDLKvbdmIcsptrB +EObkKvbdFkFTDHmV +DnbjjvbdYORAYVVt +DncLKvbdddoRbWcK +EPDLKvbdLrWmZuQz +DoDLKvbdliETpuRa +DoCjjvbdbrcKsdKB +DoCkKvbdHkazmvpk +EPCjjvbdUaBpsRRy +EObkKvbdKfFhBaQu +DoCkKvbdKQydnfNe +EOcLKvbdDjIKVxKA +DncKjvbdpeceUWBI +DncLKvbdKaLHNBxR +EPDLKvbdptTfrRkU +EPDKjvbddndsLTtS +EObjjvbdMpXpvOHT +DnbkKvbdaMjaruNH +DoCkKvbdpecdtVaI +DncLKvbdRpTfjGEX +EObkKvbdCSaCsevr +DoCkKvbdnHEwmNgZ +EObjjvbdfHjuqmqH +DoDKjvbdKWVGDeGi +DoDLKvbdWHxVxHYz +DnbjjvbdXsLaMsnx +EPDLKvbdDjHiuwjA +DnbjjvbdaaWFGQQX +DnbjjvbdsrrTZZdc +DoCjjvbddneTKtUS +DoDKjvbdcJMjLFvx +DoDKjvbdaNKbTUlg +DnbjjvbdkHflFfOL +EObjjvbdJpzFOeme +DoCjjvbdrounibuf +DoCjjvbdHgHZxwxH +EOcLKvbdSKxeuGkT +EOcLKvbdzQoNJJwA +EObjjvbdZnnJEdzK +DoDLKvbdJuuFcdfi +DncKjvbdIryBSmYM +EObkKvbdyYJJaozL +EObjjvbdFkEsDHmV +DnbkKvbdfMfXHMjL +DnbkKvbdLGGIBaRV +EOcLKvbdRXNdDMHc +DoDKjvbdegjvRnRH +DnbkKvbdKeegaaQu +DnbjjvbdkMakzEgP +DoDKjvbdcTDKtEKB +DncLKvbdhaoDEvqR +DncLKvbdmgEwmNfy +EPDKjvbdCIjbLIfK +DncLKvbdJvUedEgJ +DoCjjvbdFVxpPljF +EOcLKvbdJYUCIMRQ +EPDKjvbddwyssrFz +DoDKjvbdiMEdOUcZ +DoDKjvbdZQleIldq +EPCkKvbdnQZyVkYb +DoCjjvbdNGbpNPuL +DoCkKvbdOStVgFVQ +EOcKjvbdGBPQxizm +DnbjjvbdOXoVzcnU +DncKjvbdyqPNIiwA +DoDLKvbdkIGlGGNk +EPDKjvbdbiNKLFvx +DoCkKvbdCTBCsfWr +DoDKjvbdShyjRABM +EPCjjvbdxwhjBozL +DoCkKvbdqUUHSSLU +DoDKjvbdbBVdfPow +DoCkKvbdqYnggRDx +DoCkKvbdtkwwAsaX +EPDLKvbdZMSDsnMN +EPDLKvbdZjTIQGbG +EPCjjvbdzoPpdblY +EPDKjvbdVviYWEFH +DnbjjvbdUsltGLuj +DoCkKvbdQdDAopcr +EPDKjvbdZxcjNbkr +EPCjjvbdZisHpGbG +EPDKjvbdEuxpPmKF +EOcKjvbdQwNccLgc +EPCjjvbdEYYLstUM +EObkKvbdZRNEhmEq +DoDKjvbdaRfDIUGL +DncKjvbduaDxsOeI +EObkKvbdmaiwYPOV +EOcKjvbdKDJbqJbx +DoDKjvbdQvnEDLgc +DnbkKvbdtlXvaTaX +EPDKjvbdzQoNIiwA +EOcLKvbdNeDsiIjd +DnbkKvbdBdQAvJlf +DoCkKvbdhzVGMROG +EPDLKvbdUaCQsRRy +EOcLKvbdZisHogCG +DoCkKvbdlqxtzTDi +DoCjjvbdRkZGUgKs +EObkKvbdZnmhdeZj +EOcLKvbdZjTHogBf +DncLKvbdhytfLqNf +EPCkKvbdnPyxvKxb +DncLKvbdjcMKqHVH +EPCkKvbduWNwjRTA +DnbkKvbdwygfGXeS +EObjjvbdTlWOaVoJ +EPCjjvbdUtNUGLvK +EObkKvbdKkAgvAKZ +EObkKvbdaMkCTUmH +EPDKjvbdOFDshhjd +EPDLKvbdhzUfLpmf +EPCkKvbdkySrTYgU +EOcLKvbdFfKSNhsq +DncKjvbdOAJTUKSA +EPDLKvbdrDeJPmvB +EPCkKvbdKRZdnfNe +EPCjjvbdRDcAoqDr +EOcKjvbdNHDQNPtk +EOcLKvbdVTmTfMVj +EOcKjvbdrXQMChyR +DoCjjvbdZQmFJNEq +EPCkKvbdWRmwadkc +EObkKvbdSCDeLhyL +DncKjvbdyNsHxTJD +EPDKjvbdtSrTYydc +DoDLKvbdiGjCxuiu +DoCkKvbdrNZjZLgi +EPDLKvbdJmADzGuB +DncLKvbdtcCuWuno +DnbjjvbdDxXktTtM +EPCjjvbddZyPxZQb +EPDLKvbdlqxtysDi +DoDLKvbdbAueGPpX +EObjjvbdVviXvDdg +EPDKjvbdBdQAvKMf +DnbkKvbdPxmAHSqj +DoDLKvbdUsltFlWK +DncKjvbdVhYWYHYz +DoDKjvbddwzTtSFz +DncLKvbdIGfzYwwg +EPCjjvbdmJDsqUrB +EPCkKvbdGQASwGey +EOcLKvbdTlWOaVoJ +DncLKvbdLFehCBRV +DnbjjvbdTkvOaVoJ +EPCkKvbdwXMAvBWV +EObjjvbdpxnhGqDx +EOcLKvbdsrqryZeD +DoDLKvbduVnXjQsA +DncLKvbdRotHKFdX +EOcKjvbdnUtyjirG +EOcKjvbdCJLCLJFj +EOcLKvbdSCEFLiYk +DoDLKvbdjcMLQgVH +DoCkKvbdLBLGlaxR +EObkKvbdZQldiNFR +EOcLKvbduMXwAsaX +DncKjvbdxrnIlrBg +EObkKvbdehKvRnRH +DoDLKvbdRosfiecw +DoCkKvbdFjdrcINV +EPCjjvbdkWWmdBxX +DnbjjvbdFkFTDHlu +DoCjjvbdTAEhgaoE +DoDKjvbdANIZTWyx +EObkKvbdJSyAsNYM +EPDLKvbdqTtHRqkU +EPDKjvbdbBVeFoow +EPCkKvbdYSkaMsoY +DncLKvbdDnbkKwDE +DncKjvbdMSWlzUpz +DncKjvbdauCHXjsh +DoCjjvbdTvMQKUBR +DoDLKvbdrRuLOLAm +EOcKjvbdatbGxKtI +DncLKvbdNGcQMotk +EPDKjvbdiCObeWqR +DoDKjvbduDDUwVno +DncLKvbdYlRcsmkm +DncKjvbdbAueFoow +EObkKvbdYTMBNToY +DncKjvbdvAdYsPEh +EObjjvbdBdQBWKMf +DnbkKvbduCbuWuno +EOcLKvbdKWVGEFHJ +EObkKvbdcyyQXxqC +DnbkKvbdaMjasUmH +EPCkKvbdmgEwlmfy +DoDLKvbdrDdiQOVa +DoDKjvbdUyIUZjnn +DnbkKvbdnBjXYOnV +EOcKjvbdRpTgJfDw +DncKjvbdjcLjqGuH +DnbkKvbdZjTIQHCG +EOcKjvbduVnYKRTA +DnbkKvbdGckWJbKK +EObjjvbdZyEJnDMS +DncKjvbdNsUWGduQ +EObjjvbdKQzEoFme +EOcKjvbdVUMtGLvK +EPDKjvbdrJAKFMoF +DoCkKvbdNrsvHFVQ +DncLKvbdSKyGUfjs +DoCkKvbdVvhxWEFH +DncLKvbdFejRnIsq +EObjjvbdVYhUZkOn +DoCjjvbdxUmEpxkn +DoDLKvbdBiLCKhej +DoDKjvbdIjEAJofd +EOcKjvbdwzHfFwdr +DncKjvbdFjeTDHlu +DnbjjvbdbiMjKewY +DnbjjvbdaNLCTUlg +EObjjvbdDwxMUUTl +DoCkKvbdmttykKSG +EPDKjvbdiUyeXSVC +EPDLKvbdWIYVwfxz +EPDLKvbdemFvgMik +DoCkKvbdUyHszKoO +EObkKvbdTXkMNzjx +DoDKjvbdSQTgKFdX +DnbjjvbdLiBkpxAS +EPCkKvbdRosgKGEX +DoCkKvbdmfdwmNgZ +DncLKvbdiHJbyViu +DncLKvbdxrnJMqbH +EOcKjvbdhlFENtcZ +DoCjjvbdbKkennDA +DnbkKvbdGckWKBjK +DnbjjvbdUyIUZkOn +EPDKjvbdeEnrCXDK +EOcKjvbdsBfMkgKy +DncKjvbdxsNiNSBg +EPDKjvbdkNCLzEgP +EPDKjvbdSKyGVGjs +DoDKjvbdrWolChyR +DncLKvbdWSNwaeLc +EOcKjvbdJYTbHkqQ +DnbjjvbdZshiZDsO +DoDKjvbdSKxfUfjs +EPCkKvbdptTgRrKt +EPCjjvbdREDApQdS +DncLKvbdtvOXjRTA +EPDKjvbdemGXGljL +EObjjvbdBdQAvJmG +EPDLKvbdhuZdwRuC +DncLKvbdjvWnDaxX +EPDLKvbdFVxopMie +EPCkKvbdajkeoNcA +EPCjjvbdSPsfifEX +DnbkKvbdBsAcTfWr +EPCjjvbdEOcLLWcE +DoCjjvbdZLrDsmlN +EPCkKvbdxnSgxTIc +EObjjvbdGQATXGey +EObkKvbdbsDLUEKB +DoCjjvbdrSVKmjaN +EPCkKvbddneTLUUS +DoCkKvbdxmrgwsJD +EPDKjvbdGYuVAdXb +DncLKvbdauBfxLTh +EPDLKvbdrMzKZLgi +EObkKvbdUsltGLvK +DnbjjvbdDxXlTstM +EObkKvbdsBfNLgLZ +DncKjvbdidjgUoAO +EPDLKvbdJJdAKQHE +EOcKjvbdbBWFFpQX +EPCjjvbdSZihTDWA +EPCkKvbdhgKCxuiu +DncKjvbddneTLUTr +DoDKjvbdczZPxZRC +DnbjjvbdlYrrTYft +DoDKjvbdWXJXvEEg +EPDLKvbdbhmJkFvx +EPCjjvbdDxYLtTsl +EPDKjvbdqdFIonVa +EObjjvbdCIjbLIej +DnbjjvbdmbKXXnmu +EPDKjvbdlZTSTYft +EPDKjvbdwXMBVaWV +DnbjjvbdSPtGjGEX +DoDKjvbdrMzKYlHi +EPCkKvbdiVZdwSVC +DnbjjvbdptUHSSKt +DncLKvbdcSbjscjB +DoDKjvbdSPsfiecw +EOcKjvbdegkVqnQg +EObkKvbdjuvmcbXw +DncKjvbdCJLCKhfK +EObjjvbdVqnYBeMD +DoCjjvbdKCjCqJcY +DncLKvbdZRMdhmEq +EOcKjvbdrRtkOKaN +DoDLKvbdRpTfiedX +DoCjjvbdRMwbZOUz +DoCjjvbdrXQMDIxq +EObjjvbdsrqsZZdc +DnbjjvbdfjfzbfAE +DoCkKvbdJSyBTMxM +EPDKjvbdnCJvwoNu +DoCjjvbdmbJvwoNu +DnbkKvbdFWZQPljF +DncLKvbdxnSgwriD +DnbjjvbdVvhwucdg +DoCjjvbdjgfkfFnL +DncLKvbdzRPMiKXA +EOcLKvbdqZPHgREY +EPCkKvbdrylPsAgn +EPCkKvbdVZITykPO +DoCjjvbdhkeEOVDZ +EOcKjvbdUVkpJtAq +EOcKjvbddCTMrAUN +EPDKjvbdZeXfzghb +EPCjjvbdiMFDmuDZ +EPCjjvbdJKEAJpHE +EOcLKvbdajkeoODA +DnbjjvbdZRNEhmFR +EOcLKvbdNHCpNQVL +EObjjvbdmRxtzSci +DoCjjvbdzRPMhjXA +DnbkKvbdnGdwmNfy +EObkKvbdvAcxsOeI +DoDLKvbdBsAcTevr +DoCkKvbdozmdKxPA +DnbkKvbdTlVoBVoJ +EPCkKvbdqwQLcIxq +DncLKvbdbiMjLGWx +DoDLKvbdfHkWRnRH +EOcKjvbdbVCGxKsh +DoCjjvbdTqRPUthN +DoCkKvbdbQGgELzd +EOcLKvbdQZNAHSrK +DoDLKvbdZyDjNbkr +EPCjjvbdqiAJdmOe +EObkKvbdKaLHNBxR +DncKjvbdyXhjBozL +EObjjvbdDjIKWYKA +EOcKjvbdLFegaaQu +EPDKjvbdZjTIPgCG +EOcLKvbdfHjuqnQg +DnbjjvbdlhcsqVRa +DoCjjvbdMuSqkNAX +DncLKvbdCIkBkIej +DncKjvbdUaCQsQqy +EObjjvbdRbDdkhyL +EOcKjvbdpssfrRkU +EOcKjvbdLGFhBaQu +EPCkKvbdqqtjnLBN +EOcLKvbdWRmwbEkc +EObjjvbdpedFTuaI +DoCkKvbdJJdAJofd +DoDLKvbdwNWANEEm +EPCkKvbdYgWdAOri +DoDLKvbdvAcyTOeI +DnbkKvbdbhmJjfWx +EOcLKvbdypnliKXA +EOcKjvbdZyEJnClS +DoCjjvbdZoNhdeZj +EPCkKvbdkDLkRGtg +EObjjvbdNsUWGdtp +DnbjjvbdZQldhmFR +EOcKjvbdYpmEhldq +EPCkKvbdZQmEiMeR +DnbjjvbdhytfLpnG +EObjjvbdmtuZkJrG +EObjjvbdGLEsDINV +EPCjjvbdVhXvYHYz +DoDLKvbdKefICAqV +DncKjvbdUtMsfLvK +EOcLKvbduaEZTOeI +EPDKjvbdddoSBwDK +DoCkKvbdffLymgHA +DnbkKvbdbAueGQQX +DnbkKvbdbrcLTcia +EPCjjvbdRbEElJYk +DoCkKvbdGFirNiTq +DoDKjvbdNdctIhkE +EPDLKvbdQccAoqES +DnbkKvbdFfKRnJUR +DnbjjvbdFfJrNiUR +EPDLKvbdCfkegAzc +EPCjjvbdRXNccMHc +DoCkKvbdZjShPgBf +EOcKjvbdSLZGUfkT +DoDLKvbdBcpAujMf +EOcLKvbduWNwiqTA +DoDLKvbdpyOgfqEY +EOcKjvbdcScKtEJa +EObjjvbdnCJwXoNu +DnbkKvbdjFLGtoAO +DoCjjvbdXrlBMsnx +EPDKjvbdhgJcZWJu +DoCjjvbdiBoDEvpq +EPDKjvbdczYoxYqC +DoDLKvbdjFLHVPAO +DnbjjvbdbPgGdLzd +DoDKjvbdWIYWYGxz +DncKjvbdhytfLpnG +EObjjvbdfHjuqnQg +DnbjjvbdmgExMmgZ +EOcLKvbdhgKDYuiu +EPDKjvbdmJEURVRa +DoDLKvbdJpyePGNe +DoDLKvbdlhdUQuRa +EObkKvbdmuUzLKSG +DnbjjvbdxwhjBozL +EPDLKvbdVZIUZjnn +EPDLKvbdJpydnfOF +EPCkKvbdqqtjmjaN +EPCkKvbdZoOJFFZj +DnbjjvbdmttzKjRf +EPDLKvbduWOXjQsA +EOcLKvbdwtleRYkn +DoCjjvbdLYpjSzuG +EObjjvbdIsYaSmYM +DnbjjvbdyzeORhJI +EOcLKvbdkWWnECXw +EPDKjvbdVviYVcdg +DoDKjvbdBcoaVjMf +DoCkKvbdiMEcmuDZ +EObjjvbdLKaHvAKZ +DncLKvbdJTZArlwl +EOcLKvbdhaoCeWpq +DncLKvbdrWpLcJZR +EObkKvbdHkaznWpk +DnbjjvbdzjVPocrt +EOcKjvbdyqPMhiwA +DoCkKvbdpstHRqkU +DnbkKvbdRkYfVHKs +DoDLKvbdVgwvYGxz +EOcKjvbdFfKSNiUR +DnbkKvbdqquLOLBN +DncKjvbdOAJTTjSA +DoDKjvbddneSkUTr +EObkKvbdlqyUysEJ +DoDKjvbdbhmKKevx +EOcLKvbdiCObdwQq +EPCkKvbdFejSNiTq +EObkKvbdwygfGYEr +EPDLKvbdsQWPKDVf +DncKjvbdjbkjpfuH +EPDKjvbdRkZFuGjs +EPDKjvbdwyhFfXdr +DncKjvbdcIlikFvx +DoCkKvbdiUydwSVC +DncKjvbdiUzFXSVC +EOcKjvbdjKFgimYS +EPDKjvbdjvXODaww +EPCkKvbdRbDdlJZL +EObkKvbdrEEhpNvB +EObjjvbdrpVoKDWG +DoCjjvbdNxPVzcnU +EPDKjvbdVgwvYHYz +DnbjjvbdmuUyjirG +EObjjvbdrSVLNkBN +DncKjvbdUWLojUBR +EOcLKvbdwygefXeS +EObkKvbdhaoDEvqR +EOcLKvbdGGKRmiUR +EOcKjvbdeEnqawDK +EPDLKvbdGGJqnItR +DoDLKvbddeOrBvbj +DnbkKvbdiVZeWquC +DncLKvbdJcJcQjDY +EPDLKvbdkDMLQgUg +EObjjvbdemFvflik +EObkKvbdwzHeewdr +DoCjjvbdHDjuiajK +DoCkKvbdrEEiPnVa +EOcLKvbdypnmJKXA +DoDLKvbdmgFXmOHZ +EObkKvbdUsmUFkuj +EPDLKvbdcScKtDjB +EPCkKvbdUyITzLOn +DncKjvbdZnnIddyj +EPCkKvbdaaVeGPow +DoCjjvbdSQTfifDw +DoDKjvbdDoDKkXCd +DncLKvbdhtzEwRuC +EObkKvbdMpXqVnGs +DoDKjvbdDncLLXCd +DoCkKvbdtcDUwVoP +DoDKjvbdtSqryZdc +EPDKjvbdbBWFGPpX +EPCjjvbdmRxtyrdJ +DoDLKvbdGckVjCJj +EObjjvbdzoPpeCkx +DnbjjvbdKWVFceHJ +EPCjjvbdSKyGVHLT +DoDLKvbdelevgNKL +DoCjjvbdTXjlNzkY +DoDLKvbdpstHSSLU +EPDKjvbdhgKCxuiu +EObkKvbdZQleJMeR +EPCjjvbdKVuGDdfi +DncKjvbdUGzmkvvF +DncKjvbdxrnJMqbH +EPCjjvbdKVuGDdgJ +EObjjvbdptTgRqjt +EObjjvbdCDpAujMf +EPDKjvbdczZQXyRC +DncLKvbdqYngfpdY +EOcLKvbdqBIeAXIE +EPDLKvbdZLrETmlN +EPDKjvbdNeEThhjd +EOcLKvbdmbKWxOnV +DoCkKvbdCDoaWKNG +EOcLKvbdEOcKkWbd +EPCkKvbdNQXpvOGs +EPDLKvbdFyUtaDxC +EPDKjvbdbLMGOnDA +DoDLKvbdJcJcQjDY +EPDLKvbdOTUWHFUp +DoCjjvbdmgFXlnGy +EOcLKvbdRDbaQRES +DoDLKvbdcyxowxpb +EPDLKvbdliEURVSB +EOcKjvbdXnRAXuWU +DoCkKvbdDnbjjwDE +DoCkKvbdKVuGEEfi +EObkKvbdyOTHxShc +EPDKjvbdySnIlqbH +DoDLKvbdHELWJbJj +DnbjjvbdyOTHxShc +DnbjjvbdczZQXxpb +EPDLKvbdZLrDsmkm +EPCjjvbdfNGWflik +EPDKjvbdmbKWwnmu +DncKjvbdrDdiPnWB +EObjjvbdHDjvKCKK +DnbkKvbdUVkojTaR +EObjjvbdptTfrSKt +EPDKjvbdFxttaEXb +DoCkKvbdjvXNcbYX +DoCkKvbdSLYfUgKs +EOcKjvbdHakzEzAD +DncLKvbdiCObdwQq +EPDLKvbdZLqdUNlN +DoDLKvbdhkeDnVCy +EPCkKvbdemFvgNKL +EObjjvbdliDtQuRa +EObkKvbdwuMdpxkn +EObkKvbdirzhrkJz +EPCjjvbdJYTahLqQ +DncLKvbdIHGyxwwg +EPCjjvbdSQUHKGEX +DoCjjvbdZshiYcsO +EOcLKvbdPyNAHSrK +EPCjjvbdbsCjscia +EObjjvbdUWLojUBR +DoDLKvbdKeehBaQu +EObjjvbdjuwODaww +DoDLKvbdtkxXAsaX +DncLKvbddneSkTtS +DnbjjvbdZtJIxcsO +DnbjjvbdJTYaTNXl +EPCjjvbdGKeTDHlu +DoDLKvbdKQydoGNe +DoDKjvbdVrOXaeLc +EPCkKvbdzHYlAMeX +DoDLKvbdBvzchdov +EObkKvbdapGgELzd +DoDKjvbdaMkBsUlg +DnbjjvbdVUNTelWK +EObjjvbdiHJcZWKV +DncLKvbdZoNheEyj +DncKjvbdDHMFgAzc +DnbkKvbdFpATXGey +EPDKjvbdMpXqWOHT +EPCjjvbdmSZVZrdJ +EPDKjvbdcIljKfXY +DoCkKvbdjcLkRGuH +DoDLKvbdGYuVBEXb +EObkKvbdWXIxWDeH +DncKjvbdQlxCZOUz +DnbjjvbdYNqAXtut +EPDLKvbdGdKvJbJj +DoDLKvbdGLFSbglu +EPCkKvbdRjxfVGkT +DoCkKvbduCbuXWOo +DoCjjvbduCbtvuno +EObkKvbdjAQGaQGj +DoDLKvbdqBJFAXHd +EOcKjvbdkClKpgVH +EOcLKvbdiMFDmtby +EPDLKvbdjvXNcbXw +EPCkKvbdxUmFRYkn +DoDKjvbdHgGyyYXg +DoCjjvbdRzJhScWA +DnbkKvbdlZTRsYgU +DnbkKvbdFVxpQNJe +EPCkKvbdZyEJmcMS +EObjjvbdZQldhmFR +EObjjvbdYSlBMtPY +DncLKvbdvBDxsOdh +DoDLKvbdvAdYrndh +DoCjjvbdZyEJmcLr +DnbkKvbdKaLGmCXq +DnbkKvbdZQmFImEq +EOcKjvbdqvolDIxq +DnbkKvbdVqnYBdkc +DoCkKvbdnPyxvLZC +EOcLKvbdmJEURUqa +DoDLKvbdfHkVrNpg +DoCjjvbdznopdblY +DoCkKvbdjvWmdCXw +EOcKjvbdunszpjnt +EObkKvbdzoPqFDMY +EObjjvbdDxXktTtM +EObjjvbdBcoaVjMf +DncKjvbdtcDVWuno +EObjjvbdpyOggQdY +DnbkKvbdwWkaWAuu +EPCjjvbdajkeoODA +EOcKjvbdKNAEZfta +EOcKjvbdZisIQHCG +DncLKvbdEXwksstM +DoDKjvbdtbbuXVoP +DncLKvbdDxYMTstM +DoCkKvbdcyyPwxpb +EPCkKvbdxmrgwsJD +DoDKjvbdYSkaNUOx +EOcLKvbdxwhjCPyk +DncKjvbdUsmTekuj +DnbkKvbdkVwOECXw +EObkKvbdnBjXYOnV +DncKjvbdcasNSATm +EPDKjvbdTAFIhCOd +DnbkKvbdkWWnECYX +DnbkKvbdFjeSbgmV +DoCjjvbdJzoewdAN +DnbkKvbdZeXfzhIb +DncKjvbdMJCLqYAS +DoCkKvbdGLFTCglu +DoDLKvbdMuSrLNAX +EOcKjvbdqceIomvB +DoDLKvbdegkVqnRH +DoDKjvbdKfGICBQu +EOcKjvbdEvYopNKF +DnbjjvbdlrZVZsEJ +DoDLKvbdqqtjmjaN +DncLKvbdQmXaxmtz +EPDKjvbdCDoaVjNG +EPCkKvbdqquLNjaN +DnbjjvbdKRZdoFnF +DoCkKvbdkVwOECYX +DncKjvbdGQATXGfZ +DncLKvbdCDpAujMf +EOcKjvbdDxXlUUTl +EPCjjvbdYkrEUNlN +DnbjjvbdZtJIyETO +DoCjjvbdXsMAltPY +EOcLKvbdxxIjCPzL +DoDLKvbdSLZFuHLT +DncKjvbdFVyQQMjF +DoCjjvbdFaOpyJzm +EPCjjvbdrJAJdmPF +EOcLKvbdMuSqjmAX +DncLKvbdEJgiuxKA +EPDKjvbdBdQAuimG +DnbjjvbdWXIxVdFH +DnbkKvbdHDkVjBjK +EPDKjvbdnHEwlmgZ +EPCkKvbdBiKbKhfK +EPDKjvbdhyuGLpnG +DoCkKvbdZsiJZDsO +DnbjjvbddBrlrAUN +DoCkKvbdYqMeIldq +DncLKvbdZLqdUNkm +EOcLKvbdMuSrKmAX +DoCkKvbdDxXksstM +EOcKjvbdqdEiPmua +DoCjjvbdOEdUJIjd +DoCkKvbdEObkLWbd +EObkKvbdfekynHHA +EPCkKvbdrEFIpNvB +DnbkKvbdnBjXXoOV +EPCjjvbdmgEwmOGy +DncKjvbdKCjDQjCx +EPDKjvbdJqZdoGOF +DncKjvbdUsmTfLuj +DoDLKvbdjcMKpgUg +EPDLKvbdSQUGjGDw +DnbjjvbdRacdlJYk +DncKjvbdYgXEAOsJ +EPCjjvbdhficZWKV +DoDKjvbdGAnpxizm +EPCkKvbdRbDeLhyL +DoDKjvbdiBncEwQq +DoCkKvbdxZgfFxFS +DoCjjvbdqvpMChyR +EObjjvbdbUbGxKtI +DoCkKvbdEObkKvcE +DnbjjvbdKQzEnfNe +DoCjjvbdRWnDblID +DnbkKvbdkxrqsYgU +DncLKvbdqwPlCiYq +EPDKjvbdSZjHsDWA +DncLKvbdEPCjjvbd +EOcLKvbdpyPIGpcx +DncLKvbdbVCGwkTh +DnbkKvbdnPzZWKxb +EObkKvbdGKeTDIMu +EOcKjvbdiifIKNYS +DncLKvbdnQZxvKxb +EPDLKvbdGFjSNiUR +DnbjjvbdRNXaxnUz +EPCjjvbdOTTvGduQ +EObkKvbdUtMselVj +DoCjjvbdnUuZkKSG +EPDKjvbdQmXaxnUz +EPCkKvbdNeDtIhjd +DncLKvbdNxOuzdOU +DncKjvbdJJdAJpGd +DoDKjvbdwuNEqYkn +DncKjvbdZMSDtOLm +DnbjjvbdNeDsiJLE +EPCjjvbdJpzEoGOF +EPCjjvbdkDLkRGtg +DoCjjvbdUWLpJtAq +EPDKjvbdfMfWfljL +EPCkKvbdrMzJyMIJ +DoCjjvbdJKEAJofd +DnbjjvbdnBiwXoNu +DoCjjvbdDihJvYKA +DnbkKvbdSZigsDWA +DoCjjvbdFejRmhsq +DnbkKvbdaMkCTVNH +EObkKvbdczZPxZRC +EPDKjvbdVZIUZjnn +DoDKjvbdkySrTZGt +DoDLKvbdsPvPKDVf +DoCkKvbdwWlBVaVu +EPDKjvbdANIZSvyx +EPCkKvbdnHFYNNgZ +DnbkKvbdNdcsiIkE +EPDLKvbdDoCkLWbd +EPDKjvbdQccBPqDr +EObkKvbdSPsfifEX +EOcKjvbdelfXHNJk +EObkKvbdFfKRmiUR +EOcLKvbdKCibqKDY +EPDLKvbdUWLpJsaR +EPCkKvbdKfFhCBQu +EOcKjvbdmuUzLJrG +EOcLKvbdBdQBVjMf +EOcKjvbdfpBzvcwh +EOcKjvbdmRyUzSci +EOcKjvbdFVxpPlie +DnbjjvbdDwwlUUUM +DncKjvbdUyHsyjoO +DoCkKvbdUslselVj +DncLKvbdmuUykJqf +DncLKvbdLFfHbApu +DncLKvbdhyuFlROG +EPDKjvbdxnTIYTJD +EPDKjvbdTulPjUAq +DoCjjvbdCDoaWJlf +DoCkKvbdbLMGOnDA +EPDKjvbdOStVfdtp +EPCkKvbdZRMeImFR +DoDLKvbdiVZeXRuC +EPDKjvbdRosfiedX +DoCjjvbdnGeYMnGy +DoCjjvbdiiehKNYS +DncKjvbdbhmKKfXY +EOcLKvbdnBjXXoNu +EPDKjvbduLwwAtAw +EOcLKvbdygYlAMeX +DoCkKvbdNsTvHEtp +EPCjjvbdsrrTYzFD +EPCkKvbdBdQAuimG +DncKjvbdmfeYMnHZ +EOcKjvbdxZhFexEr +DncLKvbdZshhyETO +EObkKvbdOFEUJJLE +DoDLKvbduDCtvuoP +EOcKjvbdGZVVBEYC +EObjjvbdZRMeJNEq +DnbkKvbdkxsRsYft +DnbkKvbdsBfNLfjy +EOcLKvbdNPxQvOHT +DnbjjvbdpstHRqkU +EOcLKvbdZQleJNFR +EPCjjvbdxVNEpxkn +DoCkKvbdwtmEqZLn +DoCkKvbdGAoQxizm +DoDLKvbdVqmwaeLc +DoDKjvbdKfGHaaQu +DoCjjvbdcJNKLGWx +EPDLKvbdrzMPsBHn +DncKjvbdfoazwDxI +EPDKjvbdZyEJnClS +DnbjjvbdwMvANDeN +EObjjvbdZshiZETO +EPDKjvbdUslselVj +DoDKjvbdwtmEpyLn +DncLKvbdJTYaTMxM +EPDKjvbdvBDxsOeI +DoDKjvbdxrmhmSCH +EPDLKvbdjJegjNYS +EOcKjvbdJvUedEgJ +DnbkKvbdVZITyjoO +DoDKjvbddePSCWbj +DncKjvbdWIXvXgYz +EPDKjvbdZQmFJMeR +DnbjjvbdqdEiPnWB +DoDLKvbdUVkojTaR +DoDLKvbdFVxpPmJe +EPCjjvbdxmsHwsIc +EPDLKvbdiiehJlxS +EPDLKvbdCTAbsewS +EPCjjvbdzoPpdbkx +DnbkKvbdijGHilxS +EPDLKvbdOYOuzdNt +EOcLKvbdTppoUuIN +DnbkKvbdcScLUDia +EOcLKvbdePFTLUTr +EOcLKvbdhgKCxvKV +EPCkKvbdrJAKFNOe +EOcKjvbdVwJXucdg +EPCkKvbdNddUJJKd +DncLKvbdJYUCHlQp +EObjjvbdkVvnDaxX +EPCjjvbdNeDsiJLE +EPDKjvbdyzeNqhJI +EPCjjvbdmIdTqUrB +EPDKjvbdZoOJFEyj +DoDKjvbduaDxsOeI +EPCkKvbdKjaIWAKZ +DncLKvbdKaLHMbYR +EOcKjvbdrafMlHKy +EPCjjvbdhtzEvqtb +EPCkKvbdddoSCXDK +EOcKjvbdzjUpPdTU +EPCjjvbdLZRJrzuG +EOcKjvbdaMjaruMg +DoCkKvbdyOSgwsJD +EPCjjvbdKDKCqJcY +EObkKvbdvAcxrneI +EObjjvbdwuMeQxkn +DncLKvbdmSZUysDi +DnbkKvbdcIlijfWx +DoDKjvbddndrjtTr +EOcKjvbdwtmEqYlO +EOcKjvbdYzcFqivZ +DnbkKvbdCDpBWJmG +EOcKjvbdaSGCgsfL +EObjjvbdIwtBhLqQ +DnbkKvbdyzdmrIIh +EPDLKvbdWexzUAOs +DncLKvbdRXNdCkgc +EOcKjvbdkVwNdBww +DncLKvbdIGfzYxYH +DoCkKvbdbAvFGPow +DoCkKvbdQlxBxnUz +DncKjvbdqrUkOKaN +EPDLKvbdZisIQGaf +DoDKjvbdsQWPJbvG +DncLKvbdjhHMFfNk +EObkKvbdwNWAMdFN +DoCkKvbdeKKRutzn +EObkKvbdJpyeOfNe +EOcKjvbdQmXayNtz +DncKjvbdnHExNNgZ +EPCjjvbdULuoBVni +DoCjjvbdqquLNjaN +EPDKjvbdyzdnSIJI +DnbkKvbdQvnDcLgc +DoCkKvbdtcDUvvOo +DnbjjvbdnGeXmNfy +DoDKjvbdxsNhmRbH +DoDKjvbdtTSSyZeD +DoDKjvbdRadFMJZL +EOcKjvbdUaCQrpqy +DoDLKvbdEJgivXjA +EOcLKvbdGFjSOItR +EPDLKvbdaSGDIUGL +DnbjjvbdJYTagkqQ +EOcLKvbdZLrDsmlN +EOcLKvbdEJgiuwjA +DoDKjvbdxUleRYlO +DnbjjvbdQwODcLhD +EObkKvbdOTUVgEtp +EObkKvbdRMwaxnUz +EObjjvbdrEFJPmua +EOcLKvbdiUzEvquC +DoDKjvbdMpYQumfs +EPCkKvbdhancEvqR +DncKjvbdkNCMZdfo +DncLKvbdZHWdAOri +EObjjvbdlrYuZrci +EObjjvbdgLGzbfAE +EObjjvbdcTCkUEJa +EPDLKvbdVAbRTRRy +DoCjjvbdYqNEiMeR +DncKjvbdBvzchdpW +DnbkKvbdtSqryZdc +EPCjjvbdwygeeweS +DoCkKvbdqlzJyLhJ +EOcLKvbdtbbtvvOo +DoDKjvbdrSVKnLAm +DnbkKvbdfMevgNKL +EObjjvbdRacdkhyL +EPCkKvbdFpASvgGZ +EPDLKvbdZoOJFEyj +EPCjjvbdzjUpPcrt +EOcKjvbdcbSlrATm +EOcKjvbdqwPkbhxq +DnbjjvbdHELVibKK +EPDKjvbdZQldiMeR +DnbjjvbdpstGqrKt +DoDKjvbdGFjRmiUR +EPCkKvbdssRsZZdc +DnbkKvbdlqxuZsDi +DncKjvbdEXwlUTtM +DnbjjvbdyzdnRhIh +EPCjjvbdkCkkRGtg +EOcLKvbdLrWlytpz +EPCkKvbdCEQAvKNG +DncLKvbdVwIxWDeH +EObkKvbduMYXBTaX +DoCkKvbdRyihTDWA +DnbjjvbdkaMoNALA +DnbjjvbdaMjartlg +DoCkKvbdNVTSKmAX +DoDLKvbddwystRez +EPCjjvbdcImJjevx +DoCkKvbdeAUQlwjG +DoDKjvbdZxcjNblS +DncLKvbdkIGlFenL +DoCjjvbdfHjurNqH +DoCkKvbdiBoDFXRR +EPDLKvbdvBDyTPFI +DnbkKvbdUxhUZkPO +EObjjvbdqZOhHQdY +EOcKjvbdSCDeLiZL +DncKjvbdozmckYPA +DncKjvbdgGLymgHA +DncKjvbdILaznWpk +EPCjjvbdqUTgSSKt +DoCkKvbdrovOjCuf +EOcLKvbdKfGIBaQu +EPDKjvbdCIjajiFj +EPCkKvbdmoyxujyC +EObkKvbdySnJMrCH +EOcLKvbdHDjujBij +EObjjvbdrMyiyMHi +DoCkKvbdiifHimXr +DnbkKvbdbsCkTcia +DnbkKvbdMfbpNPtk +EOcLKvbddoErkUTr +DncLKvbdqZOhGqDx +DnbjjvbdDncKkXCd +DoCjjvbdSCEElIxk +EPCkKvbdbUbHXjsh +DnbkKvbdCTAcUGWr +EPDLKvbdZtIiZESn +DnbjjvbdrDeJPnVa +DoCkKvbdZisIQHCG +DncLKvbdgFkzOHHA +EPCkKvbdmfdxMmfy +DncLKvbdMIbMRYAS +EOcKjvbdaogGckzd +EOcLKvbdLAkHMawq +DncLKvbdxwiJbQZk +DncLKvbdauBgYLUI +DnbkKvbdnQZxvKyC +EOcKjvbdFkEsChNV +DoDLKvbdpstGrRjt +EPDLKvbdlYrrSxgU +DnbjjvbdZQmFIldq +DoCjjvbdbhmKLFvx +EObkKvbdsBellGjy +DncLKvbduCcUwWOo +EObkKvbdJuuGEEfi +DoCkKvbdIwtCHkqQ +EPCkKvbdaMkBruMg +DncLKvbdEARiMyvw +EObjjvbdmgExNOGy +DoCjjvbdpfDdsuaI +EPDLKvbdEzspdlCi +EPDKjvbdqdFJQNua +DnbkKvbdnBjWxOnV +EPDLKvbdZisHogBf +EPCkKvbdjcMKpftg +DnbkKvbdauCGwjsh +DoDKjvbdlYrrTZHU +EOcLKvbdzjVPpDrt +DoCkKvbdQdDApQdS +DoDKjvbdehLWRmpg +EPDLKvbduoTzpkPU +DoCkKvbdliDspuRa +DoDKjvbdEXxLsssl +EObjjvbdZsiJYcrn +DoCkKvbdaaWFGPpX +DoCkKvbdrafNMHLZ +DoCjjvbdmgEwlnHZ +EPCkKvbdFkEsCgmV +DncKjvbdqmZjYlHi +DoCkKvbdfILWSORH +DoDLKvbdnCKXYOnV +DnbkKvbdHgGyyYYH +DoDLKvbdEKHjVxKA +EPDKjvbdbAueGPow +DnbkKvbdFyUuBDwb +EPDKjvbduCcUvvOo +EObkKvbdauBfxKsh +EObjjvbdZjTIPgBf +EObkKvbdNGbolpVL +EOcKjvbdeFOqbWbj +DoCjjvbdvwMAvBVu +DnbkKvbdzRPMhjXA +DncKjvbdFkErcIMu +EPCjjvbdhlFEOUcZ +DoCkKvbdJbjCpicY +EPCkKvbdZGwEAOri +DnbkKvbdNQYQunHT +DoCkKvbdkIHMFfOL +EObkKvbdHELVjBij +DoDLKvbdZQldhleR +DoDLKvbdVTmTelVj +DnbjjvbdJTZArlwl +DnbkKvbdCDpAvKMf +DoCjjvbdDxYLtUTl +DoDLKvbdwkWcgzyf +EPDLKvbdLBKgNCYR +DoDLKvbdZMSEUNkm +EOcLKvbdxUmEpxkn +EOcKjvbdGLFTDHlu +EOcLKvbdyYJKCPyk +DoCjjvbdDnbjjvcE +DoDLKvbdatbHXjtI +EObjjvbdbiMjLGWx +EPDKjvbdTYKlNzjx +EOcKjvbduDDUvvPP +EObkKvbdliETpuSB +DnbjjvbdrWolDIxq +EObjjvbdqZOggQcx +EOcLKvbdyXiKBoyk +DnbjjvbdqmZiyMIJ +EPCjjvbdULuoAuoJ +DoDLKvbdYzcGRivZ +DnbjjvbdtkwwBTaX +DnbjjvbdJbicQicY +DoCkKvbdTukojTaR +EPCkKvbdHbLydzAD +EObjjvbdVTltGLvK +EPCjjvbdUsmUFkuj +EPDLKvbdTqROuVIN +DncLKvbdYkrETnLm +DoCkKvbdeFPSBwDK +DnbjjvbdNGcPmPtk +DnbjjvbdWHwuxHYz +DoDLKvbdNUsRjmAX +EOcKjvbdZjTHpHBf +DncKjvbdWXIwvDeH +EOcLKvbdrJAKEloF +DoCjjvbdFeirOJUR +EOcKjvbdWWhwvEEg +DncKjvbdKeehBaQu +DnbjjvbdZLrDsmlN +EOcLKvbdZnnIeFZj +DoCkKvbdjKGHjMwr +EObkKvbdmIctQtqa +DoCjjvbdkClKpfuH +DnbjjvbdcTDKscia +DnbjjvbdADSYKZiQ +EObkKvbdygZMANFX +EPCjjvbdaMkCTUlg +DoDKjvbdzjVPodTU +EPCkKvbdIxTagkpp +EPCjjvbdZjSgpHBf +EOcLKvbdiCOcEvpq +EOcLKvbdsQWOibvG +DoDKjvbdEuxoomJe +DoDKjvbdmuVZkKSG +DoCjjvbdSZjITDWA +DoCkKvbdCJLBkJGK +EPCkKvbdliDsqVSB +DoCjjvbduaDxrneI +EOcLKvbdtvNxJpsA +EOcKjvbdEuyPoljF +DnbjjvbdwWlAuaWV +DncLKvbduMXvaTaX +EObjjvbddxZstSFz +EPDLKvbdmttykKSG +EPCjjvbdfIKvRnRH +DoDLKvbdjgfkeemk +DoCkKvbdHELVjBjK +EObjjvbdaRecIUGL +DnbkKvbdmSYuZrci +DoDLKvbdKfGHaaQu +EOcLKvbdIwsahLpp +EOcLKvbdEuyPomKF +DoCkKvbdsQWPJcVf +DnbjjvbdbPgHDkzd +DoDKjvbdZMSETnMN +DoDKjvbdJSyBTMwl +EPCkKvbdSCDeMIxk +DoDLKvbdtkwwBTaX +DoCjjvbdtbcVWuoP +EPCjjvbdozmdKxPA +DoCjjvbdtkwwBUBX +DoDLKvbdQdDBPpcr +DoCjjvbdJbjCpjDY +EPCjjvbdCTBDTfWr +EPDKjvbdYNqAYUut +DoDKjvbdURRPVUgm +EOcLKvbdNPwqVmfs +DoDKjvbdsCGMkgLZ +DoDLKvbdZtIiYcsO +EObjjvbdhficZWJu +EPCjjvbdTqRPUuIN +EPCjjvbdyOShXsIc +EOcLKvbdliETqVRa +DncKjvbdYqMdhmEq +DoCkKvbdKfGHbBQu +DnbkKvbdqBIeAXIE +EPDLKvbdQZNAHTRj +EObkKvbdRosgJecw +EPCjjvbdKQzEnfOF +DoDKjvbdzRPMiKXA +DnbkKvbdGcjvJbJj +DoCjjvbdbAvEeoow +DncKjvbdFVyQPmKF +EPDLKvbdRzKIScWA +EPCkKvbdKkAhWAJy +EPCkKvbdJqZdnenF +DoCkKvbdVUMtGMWK +DncKjvbdBiLBjiGK +DnbkKvbdjvWnDbYX +DnbkKvbdwuNEqYkn +DoDKjvbdegjurORH +EObjjvbdpeceTvAh +DoCkKvbdAMgySwZx +EPCkKvbdlZSqsZGt +EPDLKvbdbrbkTdKB +EPDKjvbdhzUekpnG +DncLKvbddeOqbWbj +EPCjjvbdsPunibvG +EOcLKvbdVwIxVdEg +DoCjjvbdkIHLefNk +DnbkKvbdxmrhXrhc +EPCkKvbdziuPocrt +EOcLKvbdNUsSLNAX +DncKjvbdhkddNtcZ +DoCjjvbdMpYRWNgT +EObjjvbddZxoxYqC +EOcLKvbdNVTRjmAX +EPDKjvbdZjTIQHCG +DnbkKvbdHEKvJbKK +EOcKjvbdiGibxvJu +DnbjjvbdsCGNMGjy +DoCjjvbdBhkBjhfK +EPCkKvbdSCDdkhyL +DnbjjvbdNPwpvNfs +EOcLKvbdJTZBTNYM +DncKjvbdqGEFTvBI +EObkKvbddneSjtTr +DncLKvbdqdFJPmua +EPDKjvbdrbFmMGkZ +DoCjjvbdhXZAzzAJ +EOcKjvbdkxsSSxgU +EPDKjvbdrEEhonVa +DnbkKvbdYzcGSKVy +DoCjjvbdzROmJJwA +EPDLKvbdOEdUJJKd +EPCjjvbdqquKmkAm +EOcLKvbdZyEKODLr +DnbkKvbdIsZAsMxM +DnbjjvbdZjTHofaf +DoCjjvbdrSUkOLAm +EPCjjvbdBsAbsewS +EObkKvbdUsltGLuj +EPCkKvbdANHyTWyx +EObkKvbdsBemMGjy +EObjjvbdMoxRVmfs +EPCkKvbdNGbolouL +EPDLKvbdjKGHimXr +DncKjvbdUMWPAuni +EOcLKvbdOEdUIhkE +EPCkKvbdjKGHimXr +EPCkKvbdhuZdwSVC +DoCjjvbdCIkBjiFj +EPCkKvbdxZhGFxFS +EObjjvbdOFDtJJKd +DoCkKvbdfNGWgNKL +EPDLKvbdcarmSATm +DoDKjvbdkNCMZeHP +DoDLKvbdkMakyeGo +DnbjjvbdiHJcYvKV +DnbjjvbdWWhxVcdg +EPDKjvbdVUNTelVj +DoDKjvbdZGvdAPTJ +DoCjjvbdDncLLXCd +EPDKjvbduDCuWuno +DoCkKvbdPyNAHTSK +DncKjvbdqwPlDIyR +EOcKjvbdYzbfSJvZ +DnbkKvbdRotGifDw +DoDLKvbdRDcBQRDr +DoDKjvbdEARiNZvw +DncKjvbdJSxaTNYM +EPDKjvbdVwJXvDeH +EOcKjvbdQwOECkhD +DoCjjvbdEPCkLWbd +EPDKjvbdVBBpsRSZ +EOcKjvbdddoSBwCj +EOcKjvbdFkFScINV +EObjjvbdpstGrSLU +EPDLKvbdhaoDFXRR +EPDKjvbdKfGICApu +EObkKvbdBsAcTevr +EObkKvbdhkeDmtby +DoCkKvbdqYngfpdY +EOcKjvbdsPvPKCvG +DoDLKvbduVmwiqTA +EOcKjvbdidkGtoAO +EPCkKvbdyzeORgiI +DoCkKvbdmJDsqUqa +DncLKvbdiGibyVjV +DncKjvbdhtzEwSVC +EOcLKvbdZRMdiNFR +EOcKjvbdrafMkgKy +DoDKjvbdZGwEAOsJ +EOcLKvbdjmCMZeHP +DncLKvbdjKFgimYS +EPCjjvbddZxpYZRC +DncKjvbdjmBkzEgP +EObkKvbdkIHLeemk +EPDKjvbdjAQGaQGj +DncLKvbdSPtHJfDw +DoCkKvbdGKdsChNV +EPCjjvbdrouoJbuf +EPDKjvbdlhcsqUqa +DoCjjvbdwXMBWAvV +DnbkKvbdhkdcmtby +EOcLKvbdFkEsDHmV +EOcLKvbdCIkBjhej +DoCkKvbdiLeDnVDZ +DoDLKvbdDxXlTssl +DnbjjvbdNrtVfduQ +EPCkKvbdHDkWJajK +EPCjjvbdTulQKUBR +DoDKjvbdJYUBhLpp +DncKjvbdiCOcFXRR +DoCkKvbdxsNiMrBg +EObkKvbdQlxByNtz +EPCjjvbdBhkBjiFj +EPCjjvbdNeDsiIjd +DncLKvbdBsAcTfXS +DncLKvbdDwwlUTsl +EOcKjvbdUQqPVUgm +DncKjvbdmttzKirG +EPCjjvbdKWUfEFHJ +EPCjjvbdGKdrcINV +EPDLKvbdkxrrTYgU +DoCkKvbdQdCaQQcr +DnbkKvbdvAdYroFI +EObkKvbdFxttaDwb +DnbkKvbdQdDBPqES +DncKjvbdkVwODbXw +DoCkKvbdrounicVf +EPCjjvbdBcoaVjMf +DncKjvbdcImKKevx +DoCjjvbdxLWdHzyf +EOcLKvbdcbTNSATm +EPDKjvbdRacdlJZL +EPDLKvbdZQleIleR +EPCkKvbdTfznLwWF +EObkKvbdsCFmLgKy +DoDKjvbdyqOlhiwA +EOcKjvbdtcCtwVoP +DnbjjvbdRWmdCkgc +EOcKjvbdqUTfqrKt +DnbkKvbdRyjHsDWA +DoDLKvbdYqMdiNEq +EOcKjvbdhbPCeXRR +EOcKjvbdVrNwbFLc +EObkKvbdZLqcsmkm +DoDKjvbdRWmdDMID +EPCjjvbdkWXNcbYX +DncLKvbdZyDinClS +EOcLKvbdqUTfqqjt +DncLKvbdUtNTelWK +EPDKjvbdkWWmdCXw +DoDKjvbdezuxdhtX +DoCkKvbdaSGCgtGL +EPDKjvbdVwJYWDdg +DoDLKvbdWSOYCFMD +EObkKvbdxwiJaozL +DoCjjvbdTpqOuVIN +DoCkKvbdrzLpSaHn +DnbkKvbdJutecdfi +DnbkKvbdhgKDZVjV +DncKjvbdCJKajiGK +EPCkKvbdbrcLTcia +DncKjvbdxxIibPzL +DoDLKvbdNUsRkNAX +DoCkKvbdZRMeJMdq +DnbjjvbdxsOJMqbH +DncKjvbdqAheAWhE +DoCkKvbdZnnIddyj +DoCjjvbdrpWOibuf +DoCjjvbdDxXlUUTl +EPDKjvbdZirgofbG +DnbjjvbdDnbkKvbd +EOcLKvbdoznDkXoA +DnbjjvbdozmdKxPA +DnbkKvbdfHkVqmqH +DoDLKvbdkDMLRGtg +EPDKjvbdDxXlUTtM +DoDLKvbdZLrETmkm +DoCjjvbdLAkGlbYR +DncLKvbddndsLUUS +DoCjjvbdaRfDIUFk +DnbjjvbdjJfHjNXr +DncLKvbdeFPRbXDK +DoCkKvbdJYTbIMRQ +DnbkKvbdptUGrRjt +EOcKjvbdkMbLzEfo +DoCjjvbdezuxeJUX +DoCjjvbdZMRctOLm +DoDLKvbdWWiXudEg +DnbkKvbdiiehKNXr +DoCkKvbdXrkaNUOx +EPDLKvbdZjTIQGbG +EObjjvbdeOeTLTtS +EPDKjvbdBraCsewS +EPDLKvbdLBKflaxR +DncKjvbdRzJhScWA +EPDLKvbdGKdrbhMu +DoDKjvbdFeiqmiUR +DnbjjvbdFWYooljF +DnbkKvbdUWLoisaR +EPDKjvbdfRaWzkbo +EPDLKvbdKQzEnfNe +DoDLKvbdnUtyjiqf +DnbjjvbdyNrgxSiD +EOcKjvbdjlakzFHP +DoCkKvbdjvXODaxX +DnbkKvbdLFfHaaRV +EPCkKvbdwuMeRYlO +EPDLKvbdtSqrxzEc +DncKjvbddwytTqez +EOcKjvbdZLqcsnMN +DoCjjvbdkxsSTZHU +EPDKjvbdiZtekqNf +EObkKvbdnCKWwnmu +EObjjvbdauBgYKsh +EPDKjvbdrSVKmkBN +EObkKvbdxrnImSBg +DncKjvbdZnnJEeZj +DoDKjvbdZjTIQHBf +DncLKvbdmIctRVRa +DoCjjvbdziuQQDsU +EPDKjvbdZRNFJNEq +EOcKjvbdTqRPUthN +EPCkKvbdePFSjssr +EPDLKvbdfIKuqmqH +DoDKjvbddZyQYYpb +DoDLKvbdWRmwaeMD +DoDLKvbdOYOuzcmt +DoDLKvbdxsNiNRbH +EPCkKvbdNeEThiLE +EPCkKvbdNPxQunHT +EPCjjvbduCbtvuoP +EOcLKvbdjgfkeemk +EObjjvbdjlbLydfo +DoDLKvbdxmsIXrhc +DoCkKvbdlrZVZsDi +DoDKjvbdEztRElCi +EObjjvbdBsAbsfWr +DoDLKvbdZHWdAOsJ +DnbjjvbdSCDdkhxk +EObjjvbdeFOqbWcK +EPDLKvbdZtJJZESn +EPCkKvbdKfFhBaQu +DoCkKvbdMpYQvNfs +EObjjvbdrpWOjCvG +EPDLKvbdJSxaTMxM +EPCjjvbdOSsvGduQ +DoDLKvbdtumxKRTA +EPDKjvbdBcpBWKMf +DnbkKvbdtbbuWvPP +DoDLKvbdKWUfDdfi +EPDKjvbdOStVgFVQ +EObkKvbdZnmheFZj +DoDLKvbdQwODcMID +DoDKjvbdVrNxBeMD +DoCkKvbdaSFbgsek +DoCjjvbdTvMQKTaR +DoCkKvbdZsiIxdSn +EObkKvbdakMFnnDA +DoDLKvbdJutedFHJ +EOcLKvbdhzVFlQnG +EObjjvbdzjUpQDsU +EPCkKvbdzoQQeCkx +DncKjvbdZjShPgCG +DnbjjvbdMgCpMpVL +DnbkKvbdNGbpNPuL +EObkKvbdKfFhBaRV +DnbjjvbdKQzFPFnF +EPDKjvbdCIkBkJGK +EObkKvbdmajXXnnV +DoCkKvbdNwnuzcnU +EObjjvbdauCGwkTh +DnbkKvbdbiNKKfXY +DnbjjvbdQmYCYnUz +DoDKjvbdiLddNtcZ +EOcKjvbdeEoSBwDK +DoDKjvbdcTCkUDia +DnbkKvbdZRNEhmEq +EPCkKvbdHfgZxxXg +EObjjvbdbsDLUDjB +EPDKjvbdhbPDFWqR +DncLKvbdKNADyfuB +EObkKvbdEztREkcJ +DncLKvbdbLMFnnDA +EObkKvbdZjShPgBf +DncLKvbdbVCHXkTh +DnbkKvbdqTtHSRkU +EObkKvbdfSBWzlDP +DnbkKvbdGKeTDIMu +EOcLKvbdGcjvJbJj +EPCkKvbdMowqWOHT +DncKjvbdYpmFIleR +EPDKjvbdZxcjNblS +DncLKvbdNrtVgEuQ +EOcKjvbdqrVKnLBN +DnbkKvbdatbHXkUI +DoCkKvbdEPDKkWbd +EPDLKvbdmIdURVRa +DoCkKvbdMoxRWNgT +EObjjvbdLBKflbXq +DoCkKvbdSwjkmzkY +DoDKjvbdJbicQicY +EObkKvbdNQYQumgT +DoDKjvbdxxJKCPzL +DncLKvbdnGdxNNgZ +DoCkKvbddijSVtzn +EPDKjvbdrJAJdmOe +DnbjjvbdzoQQeDLx +DoCjjvbdZRMeIldq +DnbjjvbdkHgMGGOL +DoCjjvbdaSGChTfL +EOcLKvbdCJLCKiFj +DoCkKvbdVhXvYHYz +EPCjjvbdcSbjscia +EOcKjvbdxZgeewdr +EPDLKvbdYkqdUNlN +DnbkKvbdREDApQdS +DnbjjvbdmozZVkYb +EPDKjvbdaRecITfL +DncLKvbdZyEJmbkr +EOcKjvbdZnnIdeZj +DncLKvbdeXzTsrFz +DoCjjvbdZRMdhmEq +EOcLKvbdGGJqmhtR +EPDKjvbdIidAJpHE +DncKjvbdMRwNZtpz +DncLKvbdnBiwXoOV +DoDLKvbdqYnhGqEY +EOcKjvbdWexytAOs +EOcKjvbdiZuFlQnG +EObkKvbdVAaqTRRy +EPCkKvbdTAEhgaoE +DoDKjvbdMoxQvNfs +EPDKjvbddjJqvUzn +EObkKvbdBiKajhfK +EPDLKvbdZLqcsmlN +DoCjjvbdgPazwDwh +EPCkKvbdwkWcgzzG +EPDKjvbdlYsSSyGt +EObjjvbdZLrDsmkm +DncLKvbdbsCkUDia +EObkKvbdkxrrSyGt +DnbkKvbdnBivxOnV +DoDLKvbdZirhPgCG +EObjjvbdfMevfmKL +EPDKjvbdSQTgJecw +DoDLKvbdUWMPitAq +DoDKjvbdwtleRZMO +EObjjvbdKRZdoGNe +DoCjjvbdauBgYKsh +DoDKjvbdXrlAlsnx +DncKjvbdUMVnaVni +DncKjvbdiHKDYvKV +DnbkKvbdySnJNSCH +EPCjjvbdfNGWgNKL +EOcLKvbdnQZxujxb +EObjjvbdVgwvXgYz +EOcLKvbdjKGHimYS +DnbkKvbdhanbeXQq +DncLKvbdhzUfLpmf +DoDLKvbdczZPxZRC +EPDKjvbdRNYBxnUz +EOcLKvbdlrZVZrdJ +DncKjvbdtcDUwWOo +EPCkKvbdQvmdDLhD +EPCjjvbdfMfWfljL +DoCjjvbdZyEKNbkr +EOcKjvbdgPazvcxI +DncKjvbdfNGXHMjL +DncLKvbdEKHjWXjA +EObkKvbdZjSgogCG +EPCjjvbdxnSgxShc +EPCjjvbdqrVKmkBN +EPCjjvbdbBVdepQX +DoCkKvbdrXQLbhxq +DoCjjvbdbVBfxLTh +EPCkKvbdHlBznWqL +EPDKjvbdTAEhgaoE +DnbjjvbdCfkfHAzc +DnbkKvbdptTfqqjt +EPDLKvbdWIXuwgYz +EObjjvbdrJAJeNPF +DncLKvbdKDKDRJcY +DnbkKvbdrDeIpNvB +DncLKvbdVwIwudFH +DncKjvbdICMZdzAD +EPCkKvbdsQVnjDVf +EPDKjvbdiZuGMRNf +DoDLKvbdIGfyyXwg +EPDLKvbdYORAXtut +DoCjjvbdhzVGMQnG +EPDLKvbdQwNcbkgc +EObjjvbdsBemLgLZ +DoDLKvbdZtIiYdSn +DoCjjvbdelevfljL +DoCkKvbdcyxowxqC +EPDLKvbdZMRdUNlN +EOcLKvbddZyPwyRC +EPCjjvbdZLrDsnLm +EPCkKvbdgPazwEYI +DoDKjvbdqFdEsvBI +EOcKjvbdVviXvDdg +EPCjjvbdCWzdIdov +DncKjvbdrSVKnLBN +EObkKvbdiLddNtcZ +EPDLKvbdrDdiPmvB +EPDKjvbdKDKDRKCx +DoDKjvbdtSqsZZeD +DoDLKvbdwuNFRYlO +DoCjjvbduLwvaTaX +EObjjvbdtkxXBUBX +EOcLKvbdSQTgJfEX +EObjjvbddneTKtUS +DoDLKvbdAMhYsXZx +EOcLKvbdczZPwxqC +EPDLKvbdjbkjqGtg +EOcLKvbdFkEsChMu +EObjjvbdbsCkUDia +EObkKvbdEzsqElDJ +EPDLKvbdGZUuBEYC +DoCkKvbdzROmJJwA +EPDKjvbduMXwAsaX +EPCjjvbdqwQMDJZR +DoDKjvbdqUUHSRkU +DoCkKvbdwtleQxkn +DnbkKvbdQvnEClHc +EPDKjvbdjvXNcaww +DoCjjvbdjggMFenL +EPDLKvbdJYUBhLpp +DnbkKvbdkNCLyeGo +DoCjjvbdDoCkLWcE +EOcKjvbdYqMeJNFR +EPCjjvbdRDcApQdS +EObjjvbdjblKpgVH +EPDKjvbdqqtjnKaN +DoDLKvbdwtmFRYlO +DoCjjvbdnHEwmNgZ +DncLKvbdaMjasVNH +DncKjvbdnUtzLKSG +DoDLKvbdkySrSyGt +EPCjjvbdyNsIXriD +DoCkKvbdRadFMIyL +EOcKjvbdqvokbhxq +EPCjjvbdYkrEUOLm +EPDKjvbdrpWPKCvG +DncKjvbdxUldpyLn +EObjjvbdrbFmMHKy +DoCjjvbdZHWdAPTJ +DncKjvbdEPDLKwDE +DnbjjvbdZHWdAPTJ +DoDLKvbdNrsvHFUp +DncLKvbdCTBDUFvr +EPDLKvbduDDUvuno +DoDLKvbddwystSFz +DnbkKvbdmbJvwoNu +EPCjjvbdcbTNSAUN +DnbjjvbdnVUzKjRf +EOcLKvbdYlRdUOMN +DoCjjvbdTAFIgand +DnbkKvbdpeceUVaI +DoDLKvbdlZSrTYft +EPCjjvbddePRbXDK +EOcLKvbdJqZdnfNe +EPCkKvbdRaceLhyL +EPDKjvbdLAkGlaxR +EPCjjvbdqGDdsvAh +DnbjjvbdxZgefYEr +EObkKvbdKWVGEFGi +EPCjjvbdSQUHKFdX +EPDKjvbdDxYLsssl +EPCjjvbdfHjvSNqH +EPCkKvbdQwODbkhD +EOcKjvbdZnmiFEyj +EPCkKvbdqwQMChyR +EOcLKvbdZyDimcLr +EObjjvbdjAQGaQGj +EPCkKvbdZtJJYdTO +EObjjvbdjFKgUoAO +DnbkKvbdcScLUEKB +EPDKjvbdjcMLRGuH +EObjjvbdqlzKZLgi +EOcKjvbdFfJrNiUR +EObkKvbdKaKgNBxR +EOcKjvbdHDjujBij +EObkKvbdFejSOJUR +DncLKvbdMIalRYAS +EOcKjvbdVTlsekvK +DoCjjvbdUQqOtthN +DnbjjvbdVYgtZkOn +DnbkKvbdrovOicVf +DncKjvbdKfGIBaQu +DnbjjvbdjuvnDaxX +EPDLKvbdHakzEzAD +EPDLKvbdyzdnRhIh +DoCjjvbdZGvdAPTJ +DoDLKvbdqvolChyR +DncLKvbdjlbLyeHP +EPCkKvbdmIdTptrB +EPCkKvbdQcbaPqES +DoDLKvbdddoSBwCj +DnbjjvbdjvWnECXw +DnbjjvbdZisHofbG +EOcKjvbdZQldhldq +DnbkKvbdfekymfgA +DnbjjvbdLBKgMbYR +EPCjjvbdEARiMzWw +EObjjvbdtSrTYzEc +EPDKjvbdZoOIddyj +DnbkKvbdcSbjtEKB +EObjjvbddndsKssr +DoCjjvbdxnSgxShc +EPCjjvbdOTUVfdtp +DoCkKvbdUtMselWK +DnbjjvbdJpydoGNe +DoCkKvbdGQASwGey +DnbjjvbdnGdxMnGy +EPDKjvbdHDkVibKK +DoCjjvbdtbbuXWOo +EPDKjvbdKWVGEEgJ +EObkKvbdGLEsCgmV +DoCkKvbdbrbjtEKB +EPDLKvbdRzJgrcWA +EPCkKvbdaRecITfL +EObjjvbdrbGMlHKy +DnbkKvbdZdwfzgiC +EPDKjvbdVwJXudFH +DoCjjvbdiZtekqOG +EObkKvbdqrUkOKaN +EObkKvbdySnImRbH +EObjjvbddoFTKstS +EOcKjvbdyOTHxTJD +DncKjvbdFVxoolie +DoCkKvbdFejRnIsq +EPDLKvbdptUGrRkU +EOcKjvbdajlGOnDA +EPDKjvbdrRtkOKaN +EOcKjvbdzoQQeDLx +EPCjjvbdrafMlGkZ +EPCjjvbdmpZyWKyC +DoCkKvbddBrlrAUN +DnbkKvbdMgDPlpVL +DnbjjvbdUxhTzKoO +DoCkKvbdSCDdlIyL +EPDKjvbdmbJvxPOV +EPCkKvbdNGcQMpUk +EPCjjvbdVqmxCFLc +DoDKjvbdrDdhonWB +EOcLKvbdYTLaNToY +DoCkKvbdkIGlFemk +EPDKjvbdNrsvHFVQ +EPDLKvbdrzLoraHn +EObkKvbdraelkgLZ +DoDLKvbdBdQAujMf +DncKjvbdwzIGGYFS +EOcKjvbdZeXfzhIb +DoDKjvbdbAueGPpX +DoCjjvbdZtJJYcrn +DoDKjvbdyqPNJKXA +DoCkKvbdTAFIhCPE +DoDLKvbdjblLQgVH +DoCjjvbdZtJJZDsO +EOcLKvbdrNZixkhJ +DoCjjvbdzoPpdblY +DnbkKvbdqcdhpNvB +DncKjvbdYpldhleR +DoCjjvbdmRyUysEJ +DoCjjvbdJXtBgkqQ +EOcKjvbdVwJYWDeH +DoDLKvbdZLqdUOLm +EPDKjvbdEXwlUUTl +EObkKvbdoznDkYPA +EPCkKvbdEASJNZvw +EPCjjvbdFjdsCglu +DoCkKvbdTlWPBWOi +DnbjjvbdcTCjsdKB +EObkKvbdkySrTYft +EPCkKvbdLrXMytpz +DncKjvbdZQmEhleR +EOcLKvbdHkaznWpk +DnbkKvbdHfgZyXxH +EObkKvbdpecdtWAh +DnbkKvbdRadElJYk +EPCjjvbdTXkMNzjx +DoCjjvbdmSYtzTEJ +EPCkKvbdZsiJZDsO +DncKjvbddoErkTtS +DoCkKvbdZRMdiMeR +EObkKvbdTfzmkvvF +DncKjvbdpxnhHQcx +EPDLKvbdaMjbStlg +DoCjjvbdkHfkefOL +DoCjjvbdqqtkOLAm +DnbjjvbdyzeNqgiI +EOcKjvbdiLeDnUby +DncKjvbdyYIjCPyk +EOcKjvbdpfEFUVaI +EPCjjvbdZirgpHBf +DnbkKvbdKWUecdgJ +EOcLKvbdiHKCxvJu +EPDKjvbdcTCkUEKB +EOcLKvbdaMkBsVNH +EPDLKvbdJutfEFGi +EPCkKvbdFaOqZJzm +EObjjvbdhaoCdvqR +EPCkKvbddZxpXxqC +DnbjjvbdZxcinDLr +DoDLKvbdpssfqrKt +DoCjjvbdqTsgRrLU +EPDLKvbdEYXlUTtM +EObjjvbduVmwjQsA +EOcLKvbdNPxQunHT +DnbjjvbdBhjajiGK +DoCkKvbdUGznMXVe +EPDKjvbdVwIwvEFH +EObkKvbdRMwayNtz +DoDLKvbdQZNAGrrK +EObjjvbdKWUedFGi +DoDLKvbdaNKartlg +DncKjvbduWOXipsA +EObjjvbduVmxKRTA +DoDKjvbdygZMAMdw +DoDLKvbdqTsfrRkU +DoCjjvbdEvYpQMjF +EObkKvbdNPxQunGs +EObkKvbdsZlPsAgn +DnbkKvbdZnnIddzK +EPCkKvbdNQXqWOHT +DnbkKvbdGLFSbhMu +DoDKjvbdrzMPraIO +DnbkKvbdZirgofaf +EPDKjvbdijFhJlxS +DncKjvbdWRmxBeLc +DnbkKvbduDDUvuoP +DoDKjvbdiZuGMQmf +EObkKvbdelfXGljL +EPDLKvbdfNFvfljL +DncKjvbdGKdrcINV +EObjjvbdFfJqnIsq +EOcLKvbdILaznWqL +DncLKvbdJutedFHJ +EOcLKvbdIwtBhLpp +EPDLKvbdsrrSyZdc +EPDKjvbdczZQXxpb +DncLKvbdDoCjjvcE +EPCjjvbdpxoIHREY +DoCkKvbdxxJJbPzL +EPCkKvbdVZIUZkPO +EPDLKvbdULuoBWPJ +EPCkKvbdfMfWfmJk +DnbjjvbdZtIiZETO +DoCjjvbdiMEcnUby +DoCkKvbdcyyPxZQb +DoCkKvbdZirgofaf +EObkKvbdozmdLYPA +DoDKjvbdYkrEUNkm +DoCkKvbdLqwMzVQz +EObjjvbdLFfICBRV +EObjjvbdjJehKNYS +DoCjjvbdEJgiuwjA +EPCkKvbdyqPNIiwA +EPDKjvbdNdcsiIjd +EPCjjvbdauBgXjsh +DnbkKvbdyzeORgiI +EPCkKvbdsCGNLgLZ +EObkKvbdtbbtwVno +EObjjvbdwuMdqZLn +EObjjvbdSQTfiedX +EPCjjvbdmttyjjSG +DncLKvbdnHFYMnGy +DncKjvbdxmsIXrhc +EPDKjvbdQYmAGsRj +EObjjvbdfoazvdYI +DoDLKvbdhaoDEvpq +EObjjvbdDihKVwjA +DoCjjvbdZMSDtNlN +DnbjjvbdhlFDnVDZ +EPCjjvbdiCPCdwRR +DncLKvbdULuoBVoJ +DoDLKvbdyYJKBpZk +DoDLKvbdRbDdlIyL +EOcKjvbdYSlAlsoY +DoCkKvbdySmhlqbH +EOcKjvbduWNxKRTA +DnbkKvbdFjeTDIMu +DoDLKvbdzaAPGgCM +EPCkKvbdBhkCLJGK +DnbkKvbdYpmFJNFR +EPCjjvbdQccBQQdS +EOcKjvbdqGDdtVaI +EOcLKvbdILazmvqL +EPDLKvbdajkennDA +DoDKjvbdxVMdqZLn +EPDKjvbdNPxQunGs +EObjjvbdhytfMROG +EPDKjvbdEXxLtTtM +EPDKjvbdZnnIdeZj +DoDKjvbdGKeTChNV +DncLKvbdjmCMZeGo +DnbkKvbdQwNdClHc +DncKjvbdXrlBMtOx +DoCkKvbdzaAOgHBl +DncLKvbdcIlijewY +EObjjvbdrbFllHKy +EOcKjvbdmbJwXnmu +EObkKvbdssSSxydc +DoDKjvbdSQTgKGEX +DnbjjvbdUyHtZkPO +EPCjjvbdFyUuAdYC +DoCkKvbdqFcdsvBI +EOcLKvbdqwQLbhyR +DoCkKvbdbsCkUEKB +EPCjjvbdIjEAKQHE +DnbkKvbdaNKbTUmH +EObkKvbdnCKWxPOV +EOcLKvbdZxcinClS +EObjjvbdhlFDnVDZ +DncLKvbdpyPHfpdY +EOcKjvbdTlVoAuoJ +EOcKjvbdmbKXXoOV +DoCkKvbdxsOImSBg +DncKjvbdZHXEAPTJ +DoDLKvbdDjIKVwjA +DoDLKvbdnCJvwoNu +EPCjjvbdZeYGzghb +EPDKjvbdHffzYxXg +EObjjvbdirzhrkJz +DoCjjvbdZnnJFFZj +EPDKjvbdeATqMwif +DoDKjvbdbVCHXjsh +DoCjjvbdGckVjCKK +EOcLKvbdyYJJbPzL +DoCjjvbdiCPDFWpq +EOcLKvbdIwtCILqQ +DoDLKvbdKQzFOfOF +EOcKjvbdNPwqWNgT +EObjjvbdZLqcsmkm +EPDLKvbdnPyxvKxb +DoDLKvbdKjaHvAKZ +EObjjvbdjKFgjNYS +DnbkKvbdLAkGmCXq +DoDLKvbdeEoSBwCj +DnbjjvbdHlBznXRL +DnbjjvbdKfGHbBRV +DnbkKvbdZQldiMdq +EOcLKvbdnBivwnnV +DncKjvbdsQVoKDWG +EObkKvbdypnlhiwA +EObkKvbdrykpTAgn +DoCjjvbdaMkBsUmH +EPDLKvbdRDcBPqES +DoCjjvbdpxngfpdY +EOcKjvbdEztRFLbi +EOcLKvbdcbTNSAUN +DoCkKvbdjcLjpfuH +EPCkKvbdjSzhsKiz +EPCkKvbdoAKztIDn +EPCjjvbdMgDQNPuL +DoDLKvbdKNAEZgVB +EPCjjvbdZsiJZDsO +EOcLKvbdkCkkQfuH +DoCjjvbdnGeXmNfy +DnbjjvbdrpVoJbuf +DoCkKvbduCbuWuoP +EObjjvbdSwkMNzkY +DoCkKvbdrNZiyMHi +DnbjjvbduDCtvuoP +DoDLKvbdMuSqjmAX +EObkKvbdsQVnicVf +EPCjjvbdmfeYNNgZ +DncLKvbdmIdURUqa +EPCkKvbdGBPQyJzm +EPCjjvbdZRNFImEq +DncKjvbdNddUJJLE +EObkKvbdaSFbgsek +DncKjvbdDoCkKwDE +DoCjjvbdtkxWaUBX +DncLKvbdfNGXHMjL +EPCkKvbdqTtHSSKt +DnbkKvbdxmrhXsJD +DnbjjvbdmttykKSG +EObjjvbdqcdhomua +DoCkKvbdVTlsfMVj +DnbkKvbdRECaPpcr +DnbkKvbdijFhKNYS +EObkKvbdIwsbIMRQ +EPDLKvbdJbibqJbx +EPDKjvbdxxJKCPyk +EOcKjvbdjuvnECYX +DnbkKvbdKRZePFme +DnbkKvbdMpYRVnGs +EOcKjvbdfMevgNKL +DoCkKvbdmfeXmOHZ +DncLKvbdFpATXGey +DoDKjvbdJXtCIMQp +EObjjvbdZshiZDsO +EPDLKvbdaRfDHsfL +DncKjvbdMIakqYAS +EObjjvbdSLZGUfjs +DoDKjvbdBcoaWJmG +DoDKjvbdEuxpPlie +EObjjvbdJcJbqKCx +DoCjjvbdxwhiapZk +DnbkKvbdsBemLfkZ +DoDLKvbdHgGyxwxH +EOcKjvbdQdDApRDr +EPDLKvbdKWUfDeHJ +DnbjjvbdjvXODbYX +DoDLKvbdHELWJbKK +DncLKvbdgFkynHHA +EPCkKvbdPxmAHSqj +DoDLKvbdYkqdTnLm +EPCkKvbdJYUCILpp +EOcKjvbdxwhjBpZk +DoCjjvbdiMFENtcZ +DoCjjvbdnCJvwoOV +DoDKjvbdSKxetgKs +EOcKjvbdWRmxCFMD +EOcLKvbdpedFTvBI +EObkKvbdbAvEfPow +EObkKvbdZnmiEeZj +DnbkKvbdtTSSyZeD +EPCkKvbdPxmAGsRj +EPCkKvbdVTmUGLvK +EObkKvbdJmADyfta +EOcKjvbdwWlBVaWV +DoDLKvbdjcMKqGtg +EOcLKvbdGGJrNiTq +DnbkKvbdgPazvdYI +EPCkKvbdGLEsDHmV +DnbjjvbdqceIomua +DncLKvbdjbkjpgUg +DoCjjvbdSxLLmzkY +EPDLKvbdjKGHilxS +EPDKjvbdmbJvwoNu +EPDKjvbdjmBkyeHP +EPDLKvbdzROliJwA +DnbjjvbdUaBprprZ +DoDKjvbdtbbtwWPP +DnbjjvbdURQoVVHm +DoCjjvbdjbkjqGuH +DoCjjvbdRbEFLhyL +DncKjvbdBcpAujMf +DoCkKvbdPxmAGrqj +EPDLKvbdZRMeImFR +EOcLKvbdcScKscia +EObjjvbdeXytTrFz +EPCjjvbdKfGICBQu +DncKjvbdijGIKMwr +EObjjvbdZLqctOLm +EObkKvbdSLZFuGjs +DnbjjvbdZMRcsnMN +EPCkKvbdWSOYBeMD +EObjjvbdRacdlJYk +DnbjjvbdFyVUaEXb +EObjjvbdRbEFLiYk +EObjjvbdZjTIQGaf +EPCkKvbdNsTugEtp +DoCkKvbdEASIlyvw +DoCjjvbdsrrSxzFD +DoDLKvbdQwOEDMID +EPDKjvbdaaVeGQPw +DoCjjvbdFejRnItR +EObkKvbdRacdlIyL +DnbjjvbdGGJqnIsq +DoDLKvbdGYtuBDxC +DncKjvbdbLMGPODA +EObjjvbdqYoIGpcx +DncKjvbdrykosAgn +EPCjjvbdJbjDQjCx +EObjjvbdkySqsYft +EPDKjvbdxwhjBpZk +DncKjvbdauBfwkTh +EPCkKvbdtSrSxydc +DoDKjvbdMRvmZuQz +DncLKvbdnUtyjiqf +DoDKjvbdSLYetgKs +DoDLKvbdJbjCqJcY +EPDLKvbdShyiqAAl +EPDLKvbdSQUHJfDw +EOcLKvbdijFhJmYS +EPDLKvbdvwMBWAvV +EObjjvbdeXytUSFz +EObjjvbdWXJXuceH +EPCkKvbdrDeIomvB +DncKjvbdczZQXyRC +DnbjjvbdQlxCZOUz +EPCjjvbdQccApRDr +DoCkKvbdqiAJdloF +DoCjjvbdDwwktTtM +EPCjjvbdRpUGjGEX +DnbkKvbdWfYytAPT +EPCjjvbdUMVoBVni +EObkKvbdxnShYTIc +EObjjvbdVAaqSprZ +DncLKvbdKVtfDdgJ +DoCjjvbdliEUQtqa +DnbjjvbdiGjCyWKV +DnbjjvbdqrVLOLBN +EObkKvbdUaCRSqSZ +EObkKvbdTkvPAuni +DoCjjvbdIGgZyXwg +DoDLKvbdssRsYzEc +DnbjjvbdZLqdTmkm +EPCjjvbdUtNTfLvK +DncKjvbdfMewGmJk +EOcLKvbdCTBDTfWr +EPDKjvbdFpASwGey +EPCjjvbdZLrETmkm +EPDLKvbdyXhjCQZk +DnbkKvbdeATqMxJf +DoCjjvbdjJfHilwr +EPDKjvbdzitopESt +EPDKjvbdEuxopMjF +DoCkKvbdvBEYroFI +DnbkKvbdrNZiyMIJ +EPCjjvbdxVMdpyMO +DnbkKvbdQlxCZOUz +DnbkKvbdqmZiyLhJ +DncLKvbdXnRAXuWU +EObkKvbdRadElJYk +DncKjvbdLiBkqYAS +DnbjjvbdmRyUysDi +DoDKjvbdKCicQjDY +EOcLKvbdRkZGVGjs +DoDKjvbdtSrSyZdc +EOcKjvbdRyjISbvA +EPCjjvbdHffyyYYH +EOcKjvbdaogHDkzd +EPCjjvbdidkGuPAO +EOcKjvbdCDpAujMf +DoCkKvbduVnXjQsA +DnbjjvbdTulQJtAq +DncKjvbdqTsgRrLU +DoCkKvbdzdynzdyp +EObkKvbdemGXHNKL +EOcKjvbdJXtCHlRQ +EPDKjvbdegkWRnQg +DoCjjvbdyXiKCPyk +EPDLKvbdlZTRsZHU +DoCjjvbdfNFvgNKL +DnbjjvbdbVBgYLTh +DncKjvbdcJMikFvx +EPDLKvbdUMVnaVoJ +DoCkKvbdgQBzvcxI +DoCjjvbdZtIhxdSn +EPCjjvbdRWnEDMID +EObkKvbdjlakydfo +DncLKvbdrpWOicVf +EOcKjvbdhgKDYuiu +DoDKjvbdmIdTqUqa +EPCjjvbdwtleQxkn +EObkKvbdcJNKKfWx +DncLKvbdNsUWGdtp +DoDKjvbdWSOXbEkc +EPCkKvbdpyOhHREY +DoDKjvbdkyTSTYft +EPCjjvbdFjdrbgmV +DncLKvbdrounjDWG +DoDKjvbdVTmTfLvK +EPDLKvbdSCDeLiYk +DoCkKvbdrXPlDIxq +DncLKvbdKVuGDeHJ +DnbjjvbdrWokcIxq +EObjjvbdKVuGEEfi +EPDLKvbdrbGMlGjy +EPDKjvbdlqxtzSci +EOcLKvbdwygeeweS +EObjjvbdjKGIKNYS +EObkKvbdVrOXbElD +DnbjjvbdrMzKZLgi +EPCkKvbdMpXqWNfs +EPDLKvbdrSUkOLAm +EPDKjvbdZisIPfbG +EPDLKvbdRDbaQRES +DncKjvbdVTmUGLvK +EOcKjvbdYzcGRjWZ +EObjjvbdMuSrLNAX +DncKjvbdjgflGFnL +DncLKvbdWIXvXfxz +DoDLKvbdNHComPtk +EOcLKvbdSBceLhyL +DoCkKvbdZRMeImFR +EPDLKvbdiifIKMwr +DoCkKvbdvBDxsOeI +EPDLKvbdxmsHxShc +EOcKjvbdcyyPxZRC +DoCkKvbdsBfNMHKy +DoDLKvbdaRebhTfL +DncLKvbdypoNJKXA +EObkKvbdzRPNJKXA +DnbkKvbdTvLoitBR +EOcKjvbdWHwuxGxz +EObjjvbdZHWdAPTJ +DnbjjvbdySnJMqag +EPCkKvbdtTRsYzFD +EPDLKvbdhytelQnG +EPCkKvbdTppntuHm +DnbjjvbdZeYGzhIb +EPCjjvbdIwsaglQp +DoCkKvbdpstGrRkU +EObjjvbdCJLBjiFj +EOcLKvbdePErjstS +EPDKjvbdpxnhGqDx +DnbjjvbdZyEKOClS +DoCjjvbdpyOhHREY +DncLKvbdNGcPmPuL +DoDLKvbdQwNccLgc +EPDKjvbdmbJvxPNu +DnbkKvbdQwOEDMHc +DoDKjvbdXrlAltOx +EPCkKvbdGQASvgGZ +EOcLKvbdmttykKSG +EOcLKvbdGLFSbgmV +DncLKvbduCbuWvOo +EPDKjvbdSQTfiecw +DoCkKvbdYkqctNkm +DoDLKvbdlZSqsZHU +DoDLKvbdqGEEtVaI +EObjjvbdhytekpmf +DoDKjvbdmuUzKiqf +EObjjvbdrMyiyLhJ +DoDLKvbdEARhlzWw +EObjjvbdaRfCgsek +EPDKjvbdaNKaruNH +EOcLKvbdJqZeOenF +DnbjjvbdTfzmlXVe +DoCjjvbdzQoNIjXA +EObkKvbdMpYQvNfs +DncLKvbdVrOYCElD +DoCjjvbdijGIJlwr +DoDLKvbdrXQMDIyR +EPDLKvbdEYYMUTtM +DncKjvbdkHgMFenL +DnbjjvbdqdFIpOWB +EObkKvbdqFceTvAh +EObjjvbdyOSgxSiD +EOcKjvbdDnbkKvcE +DoDLKvbdYqMeImFR +EObkKvbdwtleRZMO +EPCkKvbdrWolCiYq +EObjjvbdrXPkcJYq +DoCkKvbdtlXvaUBX +EOcLKvbdeYZssrFz +DoDLKvbdnGeYMnHZ +EObkKvbdYTLaMtOx +DoDLKvbdJcJcRKDY +EPDKjvbdeKJrVtzn +DoCkKvbdrSUkNjaN +DncKjvbdeATqNXjG +EObkKvbdqlzJyLhJ +EObjjvbdDjIJvXjA +EObjjvbdzGyMAMdw +DoDLKvbdFfJrNiTq +EOcLKvbdBhkCKiGK +EObjjvbdpssgSRjt +DncKjvbdKaLGlbXq +EOcLKvbdlYrqrxgU +EPCjjvbdVqmxBeLc +EPDLKvbdZQmFJNFR +DoCkKvbdkCkkQfuH +DncKjvbdauCGwjsh +DoCjjvbdEASIlywX +DncKjvbdLAjgNBxR +DncKjvbdCDpBVimG +EOcLKvbdqlzJxkhJ +EPDLKvbdtvNxKRTA +DnbkKvbdGLFScINV +DoCkKvbdQvmdCkhD +EPDKjvbdFjdrbhNV +EPCkKvbdZLrETnLm +EPDLKvbdTvLoisaR +EPDLKvbdsrrTZZdc +EPCkKvbdZMRcsmlN +DncLKvbdxnTHxTIc +EOcKjvbdzROliJwA +EOcKjvbdsQVnjDVf +EObkKvbdqGDdsvBI +DncKjvbdwtleQxkn +EObjjvbdTqRPUuHm +DnbjjvbdVwIwvEFH +EPCjjvbdZshhxcsO +DoCkKvbdKCibqJbx +EOcKjvbdUVlQKTaR +EObkKvbdVTmUFlWK +EOcLKvbdmIctRVRa +DoDKjvbdPIAYZAYa +DoCkKvbdjvWnDbXw +DnbjjvbdtvNwjRTA +EObjjvbdNHComQUk +EOcKjvbdySnImRbH +DoCjjvbdDjIKVxKA +DncLKvbdKefHbApu +EObjjvbdehLWRmpg +EOcLKvbdJTZAsMwl +DoDKjvbdZirgpHCG +EObkKvbdozmcjxPA +EObkKvbdsZkosAgn +EPCjjvbdSxKlNzjx +DoCjjvbdfILVrNpg +EPCjjvbdGGKRnJTq +DnbjjvbdpssgSSLU +DoDKjvbdrDdiPmvB +EPCkKvbdZtJJYcsO +DoDLKvbdNdctIhkE +EPCjjvbdcImJkFvx +EOcLKvbdGLErbhNV +DoCkKvbdnQZxukYb +EPCkKvbdWSNxBeLc +EPCkKvbdsPvOjDWG +EOcLKvbdeFOqavbj +EPCjjvbdjAQHApHK +EPDKjvbdwXMBVaVu +DncLKvbdMowqWNfs +DoCkKvbdRbEFMJYk +DoCkKvbdrNZjZLhJ +DoCjjvbduDCtwWPP +EObjjvbdNeEUJIjd +DnbkKvbdlYsRsYgU +DoCjjvbdUxgsyjnn +EObkKvbdbLMGPODA +DoCkKvbddneTKtUS +EOcKjvbdvvkaWAuu +EPDKjvbdVUNUFkuj +EObjjvbdKDKDQjCx +EPDKjvbdnUuZjiqf +DoCkKvbdsCFmMGkZ +DncKjvbdrpVnjDWG +DnbjjvbdiZtfMQmf +DoCkKvbdwWkaVaVu +DoCjjvbdSCDeLiZL +DncKjvbdEYYLtTsl +EPDLKvbdOSsufeVQ +EOcLKvbdWSOXadlD +EPDLKvbdpaJFAXHd +DncKjvbdSCDdkhyL +DoCjjvbdIMBzmvqL +DnbkKvbdVUMsfLvK +DoCkKvbdlhctQuSB +DncKjvbdJuuGEFGi +EPCjjvbdJSyAsMwl +EOcKjvbdUtMtGMVj +EPCkKvbdHDkWKCKK +DncLKvbdySnImRag +EPCjjvbdwMvAMcdm +DnbkKvbdelevfmJk +EPDKjvbdYORAYUvU +EPCkKvbdVwIxWDeH +EObjjvbdtvOXipsA +DncLKvbdhlEdOUcZ +EOcLKvbdTlVoAuoJ +EPCkKvbdNQXpunHT +EOcLKvbdWXJXvDdg +DnbkKvbdZoOJFEzK +EObkKvbdmbKWwoOV +DnbjjvbdiHKDYvKV +DncKjvbdfSBWzlDP +DoCkKvbdLBKflawq +EObkKvbdUsmUFkvK +EObjjvbdLqwNZtpz +DoCkKvbdsBfNLfjy +DncLKvbdjvWmcbYX +EObkKvbdaMkBruMg +EPCkKvbdHkazmvqL +DnbjjvbdRyjHrbvA +EPCkKvbdNQXpvOHT +EObjjvbdOYPVzcnU +DoCjjvbdaSGCgtFk +DoDKjvbdxmsHxSiD +EObjjvbdZirgogCG +EOcLKvbdmuVZkKSG +DncLKvbdUyHszKnn +DnbkKvbdxmsHxTJD +EPCkKvbdVrOYBdkc +EOcLKvbdhkdcmuDZ +DncKjvbdwuMdpyLn +EObkKvbdxVMdpxlO +EPDKjvbdmbKWwoOV +DoCjjvbdhkeDmtby +DncLKvbdLFehCBQu +DoCkKvbdYSkaNUOx +DnbkKvbdmaivxPNu +EPDKjvbdfNFvgNKL +EPDKjvbdhlEdOUcZ +EPDLKvbdTukpKUAq +DncKjvbdUVlQKTaR +DnbkKvbdYgWdAPSi +DoDKjvbdIwsbHkpp +EOcKjvbdlZTSTYgU +DoCkKvbdNHColpVL +EPCjjvbdxrmhmRag +EObkKvbdUxgsyjnn +DoCjjvbdsQVoJbvG +DoCkKvbdBdQBVjMf +EObkKvbdIHHZxxXg +EOcKjvbdJuuFdEgJ +DoDLKvbdwyhGGXeS +DnbkKvbdSKyFuGkT +DoDKjvbdiGibxvKV +DncKjvbdnBjXXoNu +DnbkKvbdFpATWffZ +EPCjjvbduDCtvvOo +EObjjvbdIsZArlxM +DncKjvbdEvYopMjF +EObjjvbdwuMdqYkn +DoCjjvbdwyhFfYEr +EPCjjvbdqUTfrSLU +EOcLKvbdzGxlANEw +EPCjjvbdEOcKjwCd +EPCkKvbdOSsvGeUp +DncKjvbdhlEcnUcZ +EPCkKvbdUVkoitAq +DnbjjvbdOAJTTjSA +DncKjvbdqmZiyLhJ +EObjjvbdpstGqrLU +EPDLKvbdFxuVAcwb +DoCkKvbdauBgYKsh +DnbjjvbdZMRcsmkm +EOcLKvbdqrVLNkBN +DoDKjvbdNQYRWNgT +DoCjjvbdCTBCtFvr +DncKjvbdZyEKNcMS +EPCkKvbdVviYVdFH +DoDKjvbdePErjtUS +EObkKvbdwtmFRZLn +DncKjvbdpedEsvAh +EPCkKvbdzoQRFClY +DoDKjvbdIxTbIMQp +DoDLKvbdxsOImSCH +EPCjjvbdYfwEAOri +EOcKjvbdnPyyWLZC +EOcKjvbdhlFEOVCy +DoCjjvbdwyhFfXdr +DnbkKvbdZQmEhleR +DnbjjvbdbAudepPw +DnbjjvbdMpXqVmgT +DncLKvbdNeEUIhjd +EObkKvbdMfbomQUk +DoCkKvbdqvpMDJYq +DoDLKvbdfekzNfgA +EOcLKvbderAvzlCo +EOcLKvbdiZtelQnG +EPDLKvbdRXNdClHc +EPDKjvbdNrsufeUp +DncKjvbdZQldiMeR +EObkKvbdiLdcmtby +DncLKvbdZQmEhleR +DncLKvbdZRNEiMdq +DncLKvbdWRmwadlD +EPDLKvbdGLEsDHlu +DncLKvbdZjTIPgCG +EObjjvbdxnTIXsIc +EPCjjvbdliETptqa +EOcKjvbdlrZUyrci +DoDKjvbdbKlFnnDA +DnbjjvbdwXLaWBWV +DoCkKvbduaEZSoFI +EPCjjvbdRyjHrbvA +EPCjjvbdLhakpxAS +DoCkKvbdmaiwXoNu +EOcKjvbdyNrhYShc +EObjjvbdsCFllGjy +DnbkKvbdZshhxdTO +DoDKjvbdZjShPfaf +EOcKjvbdmajWwnmu +EObjjvbdJvUfEFHJ +EPCkKvbdOEcsiIkE +EPCkKvbdkNBlZeGo +DoCjjvbdVviXudFH +DnbkKvbdjJfHjMxS +DoDLKvbdGBPRZJzm +EOcKjvbdiCObdvqR +DnbjjvbdVwJYWDeH +DncKjvbdGAoQxizm +EObjjvbdxmsIYSiD +DncLKvbdqqtkOLAm +EObjjvbdvvlAvBWV +DncKjvbdvAdZTPFI +EOcKjvbdjAQHAogK +EObkKvbdpxoIHRDx +EPCkKvbdffLynGgA +EPDLKvbdTvLpKUAq +EOcKjvbdmttzKjSG +DoCkKvbdqwQMChyR +DoDKjvbdrzMPsAgn +DoDLKvbdyYJKCPyk +DoCkKvbdRbEEkhxk +EPCkKvbdBdQAuilf +EPDLKvbdRaceMIyL +EOcKjvbdraelkfjy +EOcLKvbdEASIlzWw +DnbkKvbdOSsvGeUp +DnbjjvbdmuVZkJrG +DnbkKvbdVwIwvDeH +DoDKjvbdwWlAvBVu +DncKjvbdSKyFuGjs +DoCkKvbdOXnuzcmt +DncKjvbdrXPlDJZR +EPDLKvbdsBfNMGjy +EPDLKvbdiifHilwr +DnbkKvbdjvWmcbYX +DoDLKvbdZnmhddyj +EPCkKvbdemFvfmKL +EPDLKvbdNxPVzcnU +DnbjjvbdRkYfUgLT +EPCkKvbdZRMdhldq +EObjjvbdYqMdhmFR +DncLKvbdJvVGDeGi +EPDKjvbdUtMsfLuj +DoDLKvbdZyEJnClS +DnbkKvbdjcMKqGtg +EPCjjvbdDnbjkXDE +DnbjjvbdLGGICAqV +EPDKjvbdWIXvYGxz +EOcLKvbdBiLCKhfK +DnbkKvbddwzUURez +EOcLKvbdZQldiMdq +DncLKvbdKVtfEFGi +DoCkKvbdvAcxsPEh +DncLKvbdjvWmcbXw +EObkKvbdqiAJeNOe +EOcLKvbdUMWPBWPJ +EPCjjvbdOFDshhjd +EOcLKvbdVrNxBeMD +EPDKjvbdiGicZWKV +EObkKvbdtTRrxzFD +DoCjjvbdjJfHilxS +DoCjjvbdelfXGmKL +EPCjjvbdIrxaTMwl +EOcLKvbdRECaPpcr +DnbkKvbdiLeDmtby +EPDLKvbdGcjvKCJj +EOcKjvbdWWiXuceH +DoCkKvbdpstHRrLU +EPDLKvbdkHgLeemk +EPCkKvbdzGxlANEw +EObkKvbdjKGHjMwr +EPCkKvbdiUzEvquC +EOcLKvbdwXMBWBVu +EObkKvbdeKKRvUzn +DncLKvbdSBceLhxk +DoDLKvbdJbibqJbx +DncKjvbdeAUQlxJf +EPDKjvbdbUafwkUI +DoCkKvbdxnTIXriD +EPDLKvbdRacdlJYk +EOcLKvbdmgFXlnGy +EOcKjvbdHELWJaij +EPDLKvbdLhbMQxAS +DnbkKvbdhbPDFXRR +EOcKjvbdqwQMDIxq +DncKjvbdeOdrkTsr +EObjjvbdyOSgwriD +EPCkKvbdjmCLyeHP +DnbjjvbdZisHpGbG +EOcKjvbdIHGzZXwg +DncLKvbdwWkaWAvV +DoDKjvbdffLzOHHA +EPCjjvbdqZPIHREY +DoCkKvbdDjHivYKA +DoDLKvbdYNqAYVWU +EPCkKvbdzjUpPcrt +DncLKvbdlqyVZrdJ +DncLKvbdDoDLLXDE +DoCjjvbdcSbjtDia +DoDKjvbdDxXlUTsl +DncLKvbdJYTahLpp +EObkKvbdNQXqVnHT +EObjjvbdijGIJlxS +EObjjvbdOStVfdtp +EPCkKvbderBWzlCo +EObjjvbdKQzEnenF +EPCjjvbdmtuZkKRf +EPCkKvbdEJhJuxKA +EPCjjvbdgGLymfgA +EObjjvbdRbDeLhxk +EOcKjvbdrSUkNkAm +DoDLKvbdEOcLLXDE +EObjjvbdBhjbKiFj +DoDLKvbdBdQAuimG +DnbjjvbdDwwkstTl +DoDLKvbdVwJYVdEg +EOcKjvbdACqwizJQ +EObjjvbdZsiIyETO +EObkKvbdGLFSbhMu +EOcLKvbdFkFTChNV +DnbjjvbdVBCRSprZ +DoCjjvbdssRsYydc +DoCkKvbdUMWOaWOi +DoDKjvbdYSlBMsnx +EObkKvbdNsTvHFVQ +EPDKjvbdZisIPfaf +EOcLKvbdpssfqqjt +EPCkKvbdNHCpMpVL +EPDKjvbdczZPwxpb +EPCjjvbdnBivxPOV +DoDKjvbdUtNTelVj +EPDKjvbdjhHMFfNk +EObjjvbdEuyPolie +EPDLKvbdKQydneme +EPCkKvbdQvnECkgc +EPDLKvbdatbGxLTh +DoDLKvbdNPxQvOGs +DoDLKvbdySnImSCH +EObkKvbdvBEZTOeI +DoCjjvbdatagXkUI +DnbjjvbdmbKXXnnV +EOcLKvbdmbKXXoNu +EPCkKvbdNsUWGduQ +DncLKvbdpssgSRjt +EPDLKvbdiUzFXSUb +EObkKvbdyzeORgiI +EOcLKvbdKDKDQibx +DoCjjvbdmJDtQuSB +DncLKvbdaNKaruMg +DnbkKvbdOEctJJKd +EObjjvbdkVvnECXw +EObkKvbdKaLHMbXq +DoCjjvbdYzcFqiuy +DoCkKvbdvwLaWAvV +EPDLKvbdnBiwXoNu +EOcLKvbdLBKgNBwq +EPCkKvbdCJLBjiFj +EObjjvbdptUGqrLU +DoCkKvbdWXJYWEFH +EOcLKvbdNeEThiLE +EPCjjvbdtAHQhAAr +EOcKjvbdUGzmlXVe +DnbkKvbdrylPsBIO +EPCjjvbdICLzEzAD +EPDKjvbdrpVoKCuf +EPCjjvbdRkZFuGjs +Dnbjjvbdznopdbkx +DoDLKvbdmgFYNNfy +EObjjvbdptUHRrKt +DoCkKvbdhfjDZWJu +DncLKvbdLGFgbBRV +EPCjjvbdZnnIeEyj +DoDKjvbdmtuZjirG +EPCkKvbdmbJvwoOV +DncLKvbdJpydoFme +EPDKjvbdFyUtaEXb +DnbkKvbdqFcdtWAh +DnbjjvbdWRnXaeMD +EOcKjvbdCIkBkJGK +EOcKjvbdJTZBSlxM +DnbjjvbdziuPocsU +DnbjjvbdhzUelQmf +EPCjjvbdUaBqSprZ +DncLKvbdxZgefXdr +EObjjvbdKVuFdEgJ +EPCjjvbdAMgyTWzY +DnbjjvbdiHJbxuiu +DoDLKvbdUtNTekuj +EPCjjvbdUQpnttgm +DoDLKvbdVAbRTRSZ +DncKjvbdkxsSTYgU +DnbkKvbdMfbomQUk +DoCjjvbdTAEiHbOd +DoCjjvbdczZPxYpb +DnbkKvbdUVkojUBR +DncKjvbdddnqavbj +DoDLKvbdxwhiapZk +DoDKjvbdZirhPfaf +DoDKjvbdTukoitAq +DoCjjvbdrJAKFMne +EObkKvbdZQmEhmFR +DoCjjvbdHgHZyXxH +DncLKvbdNHCpNPuL +DoCkKvbdfIKvRmpg +DoCjjvbdNsUWHEtp +DoCjjvbdpfDdtWAh +DoDLKvbdBhkCKiGK +EObjjvbdtSqsYydc +EPDLKvbdQccBPqES +EOcLKvbduMXvaUAw +EOcLKvbdZMRctNkm +EObjjvbdRadFMIxk +DncLKvbdjhGlFfOL +DoCjjvbdhtzEvqtb +DnbjjvbdUtNUGMWK +EPCjjvbdaaWEfQQX +DncKjvbdunszpkOt +DoDKjvbdEJgjWYKA +DoCkKvbdQYmAGsRj +DoCjjvbdmozYujyC +DnbkKvbduVnYKRTA +DnbkKvbdZxcjNblS +EPDKjvbdzRPNIiwA +EObkKvbdzitopESt +EObjjvbdfILVrNpg +DoCjjvbdNGcPmPuL +DnbjjvbdEYXlUUTl +DnbjjvbdraellHKy +DoDKjvbdZQmEhmFR +DoCkKvbdZnnIdeZj +DnbjjvbdjcMKpgVH +EObkKvbdTfznLvue +EOcKjvbdFkErcIMu +DncKjvbdGdKvKBjK +DoCjjvbdVvhwvEFH +EPCkKvbdmJEUQuSB +DncKjvbdIsZBSlxM +DnbkKvbdmbJvxPNu +DoDKjvbdTqRPVUhN +DoDLKvbdwygefXdr +DnbjjvbdLGGHbBRV +DncLKvbddijSVtzn +EObkKvbdZnnJFFZj +EOcKjvbdCTBCsfXS +DoDLKvbdmttzKjSG +EOcKjvbdyNsIXsIc +EOcKjvbdbVBgXjtI +EOcLKvbdGFjRnJUR +DnbkKvbdYTMBMtOx +EPCkKvbdNGcQMouL +DoDKjvbdJcKDQibx +DoDLKvbdrpWOicWG +EOcKjvbdRaceMIyL +EPDLKvbdWWiYWDeH +EPDLKvbdczZQXxqC +DoDKjvbdLBKgMaxR +DnbjjvbdZjShQHBf +DoCkKvbdKaLGlbXq +DnbkKvbdGdKujCJj +EObkKvbdIBkydzAD +DnbkKvbdqUTgSRkU +EOcLKvbdBiKbKhfK +DoDKjvbdVwIwvEEg +EPDKjvbdIjEAKQHE +DoCkKvbdEPCkLWcE +DoDLKvbdrDeJQNua +EOcLKvbdNddUIhjd +EPCkKvbdYNqAXtvU +EObkKvbdUaCRSqRy +EPCjjvbdqqtjmjaN +EPDLKvbdhbOcFWpq +DoDKjvbdULvPBVni +DoDKjvbdGGJrOJTq +DoCkKvbdqceIpNvB +EOcKjvbddePSCXCj +EPCjjvbdVUNTekuj +DnbjjvbdLGGHbApu +DoCkKvbdcTDLTcia +DnbkKvbdNsUWGeVQ +EObjjvbdZLqcsmlN +EObkKvbdxrnJMrCH +DnbjjvbdqvolChxq +EPCjjvbdaNKbSuNH +DnbkKvbdlYrrTYft +EPCjjvbdwtldpyMO +DnbkKvbdNddThiKd +EPCkKvbdjJfIJlwr +EPCjjvbdJpzEoFme +DnbkKvbdiMEcmuDZ +EOcKjvbdkVvmdBww +EOcLKvbdAMgxrwZx +EObjjvbdatbGwjtI +EOcKjvbdTAEhhCOd +DnbjjvbdfNFwHNJk +EObjjvbdVBBqSpqy +EPCjjvbduaEZSndh +EPDLKvbdpstGqqkU +DnbkKvbdIwtCHlQp +DncKjvbdrbGNMGkZ +EOcKjvbdILaznWqL +DoCjjvbdTXjkmzkY +DoCjjvbdIGfyyXxH +EOcKjvbdjKFhKNXr +EPDKjvbdRDcApRES +EObjjvbdmfdxNNfy +EObjjvbdDihKWYKA +DoCjjvbdzaAOffal +EPDLKvbdQccBQQcr +EPCjjvbdTlWPAvOi +DnbjjvbdqUTfrSLU +EObjjvbdVAbRTRRy +DoCkKvbdnCKWxPOV +EOcKjvbdFjdrbhNV +DnbjjvbdrzLpTAhO +DoCjjvbdDxYMUUUM +DnbjjvbdmoyxujyC +DnbjjvbdUVkoitAq +EObjjvbdrEEhpOWB +DncKjvbdRjyGVGjs +DoCkKvbdJJdAKPgE +DoDKjvbdKDJbqKCx +EPDLKvbdcTDLUDia +DoCkKvbdePEsKssr +EPCjjvbdJbjCqJbx +DoDLKvbddBrmSATm +EOcLKvbdlhcsqVRa +EOcLKvbdKfGICBRV +EPDLKvbdrovPJbvG +DoCjjvbdbAvFGQQX +EPDLKvbdlZTSSxft +DnbjjvbdLqvmZuQz +DncLKvbdZshiYdSn +EOcLKvbduMXvaTaX +EObjjvbdZtJJYcrn +EOcLKvbdczZPwxpb +EPDKjvbdatafwjtI +EObkKvbdsQVnicWG +DnbjjvbdrWokcIyR +DncLKvbdJuteceGi +EOcLKvbdADRwiyiQ +EPDKjvbdCIkBjiFj +EPDKjvbdrNZjYkgi +DnbkKvbdSLYeuHLT +DoDKjvbdkNBkzEfo +DnbkKvbdcyxowyQb +EPDKjvbdYkrETnMN +DoDKjvbdwWlAvAvV +EPCkKvbdczZPxZQb +EPCkKvbdKCibpjCx +EOcKjvbdhytfLqOG +DnbjjvbdxmsHwriD +EPDKjvbdmfeYMmgZ +DoCkKvbdNQXpvNfs +DncLKvbdirziSkJz +EOcKjvbdHffzYxYH +EOcKjvbdWXIxWDdg +DncLKvbdVvhwuceH +DoDLKvbdFxtuBDxC +DncLKvbdJcKCqJbx +DoCkKvbdxLWcgzyf +DnbjjvbdCJLBjiGK +EPCjjvbdcasMrATm +DoDLKvbdLFfICAqV +EPDKjvbdqmZjZMHi +DncKjvbdczZPwxqC +EObkKvbdrWpMDJYq +EPCjjvbdLFehCBQu +EPCkKvbdRzJgsDWA +DoDKjvbdIsZArlxM +DncLKvbdqFcdsuaI +DncLKvbdULvPBVni +EOcLKvbdWXJXuceH +EPDLKvbdaNLCTVMg +EObkKvbdUxhUZjnn +DncLKvbdeATplxKG +DoCjjvbdmSYtzSci +EOcLKvbdkMbLzEfo +EPCjjvbdrpVoJcWG +EPCjjvbdXrlAlsoY +DoDLKvbdUxhTzKnn +EPCjjvbdOEdUJJLE +EObjjvbdKDJcRKCx +EPDKjvbdcyxpXxqC +DnbkKvbdZxdKODMS +DncLKvbdcImJjfWx +DnbjjvbdpfEFTuaI +DnbkKvbdZoNheEyj +EOcKjvbdjFKfuPAO +DnbkKvbdFVyQQNKF +DnbkKvbdDjHiuwjA +EPCkKvbdMgDPlotk +EPDKjvbdxnShXsIc +DoDLKvbdOTUVfduQ +DncKjvbdFejRnIsq +DncKjvbdSQUHJfEX +DncLKvbdRXOEDMHc +DoCkKvbdsZkosAgn +DoDKjvbdUsmUGLuj +EPDKjvbdiifIJmYS +DoDLKvbdZQmEhmFR +EObjjvbdeUAUASlv +DoDLKvbdUsltFlVj +DoCjjvbdSiZjRABM +EOcLKvbdegkVrORH +DoDKjvbdYlRdTnLm +DncKjvbdzitopESt +DnbkKvbdhbPDEwQq +DncKjvbdSKxetgLT +DncKjvbdZQmEiNFR +EPDLKvbdUyITzLPO +DnbjjvbdznpQdblY +EObkKvbdbLMFoODA +EPDLKvbdBhjbLJFj +DoDKjvbdNwoVzdOU +DncKjvbdvBDxsPEh +DnbkKvbdSBceLiZL +EPCkKvbdOhAXyAZB +EObjjvbdZisIQGbG +EOcLKvbdAMgxrvyx +EPDKjvbdCDpAvKMf +DoDKjvbdxVMdpxlO +EOcKjvbdJbicRJbx +DoCkKvbdTppnuVIN +EObjjvbdZjTIPfbG +DoCkKvbdpyOhHQcx +DoCjjvbdfHjvSOQg +DoCjjvbdzoPpdcMY +EPDKjvbdmfeYNNfy +EPCjjvbdXGYzUAPT +DoDLKvbdypnmJKXA +DnbkKvbdBsAcUFwS +DoDLKvbdQYmAGsRj +EObjjvbdUxhTyjnn +DoCkKvbdrouoKCvG +DoDLKvbdhtydwSUb +EPCkKvbddwytUSFz +EOcKjvbdrbFmLgLZ +EObkKvbdbPffckzd +EObjjvbdDxXlTtUM +DnbkKvbdqGEFTvAh +EPCjjvbdDoCkKwDE +EOcLKvbdVviYWDeH +EPCjjvbdWSOYCFLc +DncKjvbdmbKWxPNu +DoCkKvbdZshhxdTO +DoDKjvbdwtldqYkn +DoDLKvbdYSlBMsoY +EPDKjvbdRkZFuHKs +DnbkKvbdeYZstRez +DoCjjvbdrNZixlIJ +DoCjjvbdmgFXlmgZ +EPCkKvbdYlRcsmlN +DoCjjvbdOFETiJKd +EPDLKvbdBhkCLJFj +EPCjjvbdmuVZkJrG +DnbkKvbdFjeTChMu +DoCjjvbdJTZBSlwl +DnbkKvbdozmdLYPA +EObjjvbdtbbtvuoP +DncKjvbdqUTfrSKt +DncKjvbdyTOImSBg +DnbjjvbdcTCkTdKB +EOcKjvbdKaKgNCXq +EPDKjvbdZoOIeEyj +DoDKjvbdYqMeIleR +DncKjvbdnPzZWLZC +EPDLKvbdZirhPfbG +DnbkKvbdGQATXGey +EOcKjvbdZsiJYcsO +DnbkKvbdrWpMDJYq +DoCkKvbdMuTSLNAX +EObjjvbdpxnhHRDx +EOcKjvbdzitpQESt +EPCjjvbdhuZeXSUb +DoCjjvbdNeDtJIkE +DoCkKvbdCEQBWKMf +EPCkKvbdHEKvKCJj +EPCjjvbdatbHYLTh +EObkKvbdLGGICBRV +DncKjvbdRjxeuGjs +DoDKjvbdnHFYNOHZ +EObkKvbdIryAsNYM +EObjjvbdmfdwlnGy +EOcLKvbdNeDsiIkE +DnbjjvbdJTYaSlxM +DoCkKvbdRadEkiYk +DncLKvbdjKFgjNYS +EObkKvbdZjShQGaf +EOcKjvbdKfFgaaQu +DoDKjvbdhgJbyVjV +DoCkKvbdwuNFRZMO +DncLKvbdfekzNfgA +DncKjvbduCcVWuno +EPDLKvbdVrNxBdkc +DnbkKvbdRkYeuHLT +DoDLKvbdwuNEpxlO +DoCjjvbdQccAoqDr +EOcKjvbdUGzmkvvF +DncKjvbdEJhKWYKA +EOcLKvbdssSSxyeD +DoCjjvbdVviXvEEg +DnbjjvbdEuxopNKF +EObkKvbdLAkGlbXq +DoCkKvbdZsiJZESn +DoCkKvbdhkeEOUby +DnbkKvbdbhlikGXY +EObkKvbdLBLGmCYR +EPCjjvbdxUleQyLn +DncLKvbdrbGNMGjy +DoCkKvbdddoSBwDK +EPDLKvbdkyTRsYgU +EPDKjvbdehLVqmqH +EPDLKvbdrbFmMHKy +DncLKvbdmbJvwoOV +EOcLKvbdVUNUFkvK +EPDLKvbdrpWPJbvG +DncKjvbdGAnpxizm +EOcKjvbdyzeNqghh +DoDLKvbdhbPDFWpq +DoDLKvbdfVzxQJzs +DoDLKvbdUMWPBVoJ +EOcLKvbdRpTfjFdX +EPCkKvbdpfDeUWBI +EObjjvbdmuUyjirG +EObjjvbdtbbtwWOo +EObkKvbdrylPsAgn +EOcLKvbdmSYtysEJ +DncKjvbdSCDeMJYk +DoCjjvbdTppoUthN +EPDKjvbdVTmUFkuj +EObjjvbdIsZAsNXl +EOcKjvbdSBcdlJYk +DnbkKvbdZQleIleR +DnbjjvbdddoSBvcK +EOcLKvbdNHComPuL +DncKjvbdiCPCdvqR +EOcKjvbdliDspuSB +EObkKvbdzoPpeCkx +DnbjjvbdcJMijevx +DoDKjvbddZxpYZQb +DoDKjvbdkySrSxft +DoDKjvbdyXhiapZk +EPCkKvbdOAIrsirA +EObkKvbdUaBqSqSZ +EPCkKvbdZtJIyESn +DnbkKvbdTvLoitAq +EPCjjvbdyzeNrIJI +EOcKjvbdiCPDEwRR +EPCkKvbdnCJvwoNu +EPCkKvbdIGfzZYXg +DoCkKvbdkySqrxft +DoCjjvbdZdxGzgiC +DncKjvbdzitpPcsU +DncLKvbdbVCHXjsh +EPCkKvbdlhcsqVSB +EPCjjvbdGYtuAcxC +EOcLKvbdjAQGaQHK +EObjjvbdjlakzFGo +EOcLKvbdvwMAvAuu +EPCjjvbdTqQoVUhN +EPCkKvbdeEnrBwCj +DoCkKvbdsCGMkgKy +DnbjjvbdhkeDnVDZ +EPCjjvbdOFDshiLE +DnbjjvbdDwwlUTsl +EPCkKvbdKWUedEgJ +EPDLKvbdsQVnicWG +EPCkKvbdjgflFfOL +EObkKvbdQYmAHTSK +EObkKvbdSPsgJecw +EObjjvbdjAQGaPgK +DoDLKvbdDxXlUUUM +DoCjjvbdegjuqnQg +DnbkKvbddwzTsqez +DncKjvbdxxJJbPyk +EOcKjvbdGKeTChMu +DoCkKvbdeFPSCWcK +EObkKvbddeOrBwDK +EPCkKvbdaNLBsUmH +DoDLKvbdRpTgJedX +EPCkKvbdkySrSxgU +EPCkKvbdVYhTzKoO +EPCjjvbdxxIjCPyk +EPDLKvbdVrOXadkc +EOcLKvbdEOcKjwDE +DncLKvbdmfeYMnGy +EPCkKvbdVAaprprZ +EPCjjvbdFWYpQMjF +DoCkKvbdqrUjmkAm +DoCjjvbdQvmdDLhD +EPDLKvbdeATqNYKG +DnbkKvbdLGGHaaQu +EObjjvbdezvZEhtX +DnbkKvbdjuwNdBww +DncKjvbdJTZAsMwl +EPDKjvbdkxrrTYgU +EPDKjvbdbAudfQQX +DoCkKvbdVUNUGMVj +EPDLKvbdaNLBsUlg +EPDLKvbdDwxLtUUM +EPCjjvbdMgColpUk +EPDLKvbdaogGdLzd +EPDKjvbdzGxlANFX +EPCkKvbdUQqOuUgm +DoDKjvbdEPDKkXCd +EPDKjvbdbsCkTcia +EObjjvbdTAEhhBnd +EPCkKvbdhzVFkpmf +DnbkKvbdaSFcHtGL +DoCjjvbdGBOpxizm +DncLKvbdGYttaEYC +DoDKjvbdqYoHfpdY +EOcKjvbdrouoKCuf +EOcKjvbdiCPDFWqR +DnbjjvbdVAaprqRy +EPCjjvbdePFSjtUS +DnbkKvbdLGGICBRV +EPDLKvbdkMalZeHP +DoDLKvbdJutfEFHJ +DoDKjvbdVBCRSqSZ +EObjjvbdvvlBWBWV +EOcLKvbdFVxpPmJe +DoDLKvbdKfGHaaRV +DnbjjvbdBvzdIdpW +DncKjvbdNsUWHFUp +EPDLKvbdrSVLNjaN +EPDKjvbdgGMZnGgA +DnbkKvbdSBceMIyL +EOcLKvbdSBdFLiYk +EOcLKvbdRyigrcWA +EPDKjvbdaMkBruNH +DncKjvbdUaCRSpqy +DnbjjvbdIMBzmvpk +DnbkKvbdbVCGxKtI +DncLKvbdliDtQuSB +EObkKvbdHDkVjBjK +DncKjvbdmSYtyrci +DnbkKvbdxVMdpxlO +EPCjjvbdRpTfjGDw +EPCkKvbdhancEvpq +EPDLKvbdNsTvHEuQ +DoDKjvbdfekymfgA +EObkKvbdUWLojUBR +EPCjjvbdJXtBgkpp +DoCjjvbdEPCkLXCd +EPCjjvbdZxcjNcLr +DoCjjvbdZsiJYcrn +EPCkKvbdZtIiZDrn +EObkKvbduLxWaUBX +EObkKvbdZdxGzghb +EOcKjvbdkClLRHVH +EOcLKvbdFjdsDINV +DncKjvbdNeEUIiKd +EPCkKvbdYpmFJNFR +EPDKjvbdlhcsptqa +DoDLKvbdnCKWwoOV +EObkKvbdDnbkLXCd +EObkKvbdQwOECkhD +EOcKjvbdUaCRSpqy +EPCjjvbdBcoaVjNG +DnbjjvbdxmrhXsJD +EObjjvbdcImKKewY +DnbkKvbdpyOgfpdY +DnbjjvbdpyOggRDx +EObjjvbdEOcKjwDE +DnbkKvbduCcUwVoP +EOcKjvbdhgKCxuiu +DoDKjvbdiZtelQmf +DoDKjvbdnBjXYOnV +EPDLKvbdczZPwxpb +EPCjjvbdADRwizJQ +EObjjvbdfVzwpJzs +DnbjjvbdxxIiapZk +EPCjjvbdjcLkQfuH +EPCjjvbdcyyQYYqC +DoCkKvbdEuyPpNJe +DncLKvbdcJNJkGWx +DoDKjvbdZoOIdeZj +DoCjjvbdWHxVwgYz +DnbjjvbdeEoRbWbj +DncKjvbdZMSDsnLm +EOcLKvbdbiNKLFvx +DnbkKvbdjcLjqHVH +DnbjjvbdEYXktTtM +EPCjjvbdCSaCsfWr +EOcLKvbdBdQAuimG +EObkKvbdqdFIpOWB +DncLKvbdelevgNKL +EObkKvbdZMRdUNkm +EPCkKvbdrDdiQOVa +DoDLKvbdCWzdJFQW +EObjjvbdxUleQyMO +DncKjvbdBsAcTfXS +EOcKjvbdRMxBxmtz +EOcKjvbdSKyFuGkT +EPCkKvbdEuxooljF +DncLKvbdYgWdAPSi +DoCkKvbdiHJcYvKV +EPCkKvbdZQldiNFR +DncKjvbdjAPgAofj +EObjjvbdkVvmdBxX +DoDLKvbdsBfMlHLZ +DoDLKvbduWNxKQsA +EObjjvbdOTTugEtp +DoCjjvbdIxUBgkqQ +EOcKjvbdqFceUWAh +DnbjjvbdTkunaVoJ +EPDKjvbdiZtfLqOG +DoCjjvbdcImJkGXY +DncLKvbdpstGrSLU +DncLKvbdRpTfjGDw +DnbkKvbdznpREblY +DnbjjvbdqdEhomvB +DncLKvbdIwtBhMRQ +DoDKjvbdhtzFWqtb +EOcKjvbdiBncEwQq +EPDKjvbdZQleJMdq +EOcLKvbdLAkGlaxR +DoCkKvbdZsiIyDsO +EObkKvbdeOdsKssr +DnbjjvbdJcKCpjDY +EPDLKvbdSBdElIyL +EPCkKvbdyOTHwrhc +EPDLKvbdGLEsDIMu +EPCjjvbdmJETqVRa +DncKjvbdKDJbqJbx +EOcKjvbdbsCkTdKB +EOcKjvbduDCuXVno +EOcKjvbdrXPlDIxq +EOcKjvbdqlyixkhJ +EObjjvbdRkYfUgLT +EPDLKvbdLAkGmCXq +DnbjjvbdHgGzYxXg +DncKjvbdpstHSSKt +DoCkKvbdqvolCiYq +DoCkKvbdmgFYNOHZ +DnbkKvbdqGDeTvBI +DoDLKvbdyzeNrHhh +DnbkKvbdwzHefXeS +DoDKjvbdbiMjLGXY +DnbkKvbdTulQKTaR +DnbjjvbdsPunicVf +DncKjvbdqvpLcIyR +DncLKvbdOFEThhkE +EOcKjvbdZshhxdSn +DncKjvbdpyPHfpdY +DoDLKvbdNGcPmQUk +DoCkKvbdVgwvXfxz +DoCjjvbdCgLegAzc +DnbjjvbdauCGxLTh +DoDKjvbdqFceTvBI +DoCjjvbduMYXAsaX +EPCkKvbdrSVKmkAm +EObkKvbdOYOuzcnU +DncKjvbdYkqctNlN +DncKjvbdSZjHrcWA +DoCjjvbdrEFJQNua +EPCjjvbdRosfjFcw +EObkKvbdZoNiFEyj +EPDKjvbdVgwvXfxz +DoDLKvbdhbPCdvqR +DncKjvbdqvokcIyR +DnbjjvbdpssfqqkU +DncLKvbdzoPpdbkx +DnbjjvbduaDySoFI +EOcKjvbdEASImZwX +DncKjvbdbrcKtDjB +DoCjjvbdQccBQQdS +DoCkKvbdDigjVwjA +DnbkKvbdbVBfwkUI +EOcKjvbdIsYaSlxM +DoDLKvbdKVtedEgJ +EPCjjvbdIryArlxM +DncKjvbdpeceTuaI +EObkKvbdZshiYdSn +DncLKvbdZtIhyESn +DnbjjvbdOYOuzcnU +DoDKjvbdUxhTyjoO +EObjjvbdTppoVVHm +DncKjvbdrWolCiYq +DoDLKvbdNVSrKmAX +EObkKvbdiGicZWKV +DoDKjvbduVmwipsA +EPCjjvbdNPwqVnHT +EObjjvbdelewGmJk +EOcLKvbdgGLzNgHA +DoDKjvbdcJNJjfWx +DoCkKvbdyOTHwriD +EObjjvbdEzspeLcJ +DnbjjvbdjhHLeenL +DncKjvbdOStWHFVQ +EOcLKvbdsZlPsBHn +EPDLKvbdtcCuWuno +DnbkKvbdULunaVni +EPDKjvbdJqZdnfNe +EOcKjvbdqwPkcIxq +EObjjvbdrJAJeNOe +DnbjjvbdRECaPpdS +EPCjjvbdpfEEsvBI +EPDLKvbdIsZArmYM +EPDLKvbdJYUCILpp +EOcLKvbdYlSDtNlN +EPCjjvbdJYTbHkpp +EPDKjvbdYzbfSJvZ +EPCjjvbdRaceMJYk +EObjjvbdZisHofaf +DnbkKvbdRbEElIyL +EOcLKvbdijFhKNXr +EOcKjvbdRXNdDMID +DncLKvbdbiNKLGXY +DoDLKvbdlZSrSyHU +EObkKvbdqZPIHRDx +DoDKjvbdnPzYujxb +EObkKvbdnHEwlmfy +EObkKvbdCWzdIePv +EObkKvbdqlyiyLgi +EPCjjvbdkySqryHU +EObkKvbdcImKKevx +DncKjvbdEASJMzWw +DncKjvbdRkYfUfkT +EPCjjvbdqYoIGpcx +DncKjvbdGckWKBjK +EPCjjvbdYTLaNUOx +EPDKjvbdwtleRZMO +EObkKvbdGFiqnJUR +DncLKvbdlhdURVRa +EObjjvbdqlzJxkhJ +DncLKvbdFaPQyJzm +EPCkKvbdpssgRrLU +EObjjvbdiCOcFXRR +DncKjvbdqTtGqrLU +EPCjjvbdsCFlkgLZ +EOcKjvbduWOXiqTA +EOcKjvbdkClKqGuH +EPCjjvbdMowpvOGs +EPCkKvbdxrmhmRag +DoCjjvbdiUzFXRuC +EOcLKvbdUMWPAvOi +DoDLKvbdmfdwlmgZ +EPCjjvbdehKurNpg +EOcLKvbdBsAcTevr +EPCjjvbdZjTIPgBf +EObjjvbdPIAXyAZB +EPCjjvbdCDoaVjNG +DncKjvbdrpVnicVf +DoDKjvbdlZTSSxgU +DncKjvbdGZVVAdYC +EPDLKvbdsCGMkfjy +EPCjjvbdSPsfjFdX +DoCjjvbdJXsbIMQp +DncKjvbdzeZnzdyp +DnbkKvbdlYsRsYft +DncKjvbdbiMjLFwY +EPDKjvbdyOShYSiD +DoCkKvbdOTTufduQ +EPDLKvbdVwJYVcdg +DoCkKvbdGFiqnJTq +EOcLKvbdUslselWK +EObjjvbdkxsSSyHU +EOcLKvbdxsNhmSBg +DnbjjvbdqqtkOLAm +DnbjjvbdeFPRawDK +DnbkKvbdLZQirzuG +EPCkKvbdFWYpPlie +EObkKvbdrWpMCiYq +EOcKjvbdiiehKNXr +EPDKjvbdEvYopNJe +EPCkKvbdxrmhmSCH +DoCkKvbdptUHSRkU +EOcKjvbdKCjDRJcY +DoDLKvbdrMzKYkgi +DoCjjvbdZLrDtNkm +DoCkKvbdqYnggQcx +DnbkKvbdrovOibvG +DncKjvbdADRwizIp +EOcLKvbdZisHpHCG +EPCjjvbdZRNFImFR +EPDKjvbdVwIxVceH +EOcKjvbdrDeJQNua +EPCkKvbdIxTaglQp +DncKjvbdGFiqmiUR +EPCjjvbdVwJXvEEg +DnbkKvbdwuMeRZMO +EPCkKvbdZRNFImFR +EPCkKvbdnHEwlmgZ +EPDKjvbdLYqKSzuG +DoDKjvbdZsiJYdTO +DoDLKvbdShyjRAAl +DoDKjvbdRadFLiYk +DnbkKvbdjbkjpgUg +EObkKvbdUaBpsRRy +EOcKjvbdehKuqnRH +EObkKvbdDwxMUTsl +EOcKjvbdptUHSSKt +EPDKjvbdHEKuibJj +EOcKjvbdxxIjBpZk +EObkKvbdelewGmJk +DncLKvbdTvLpKUAq +EPCjjvbdGLErbhNV +DncLKvbdfHjvRmqH +DnbjjvbdkMakyeHP +EPDKjvbdJcKCpjDY +DoCkKvbdRECaPpcr +EOcLKvbdmgFYMmgZ +EObjjvbdZRMdiMeR +DoCjjvbdYzcFqivZ +DoCkKvbdeOeTKtTr +EPCkKvbdXFxytAPT +DncLKvbdZnnJEdzK +DncLKvbdhtyeWrUb +EOcKjvbdEJgivXjA +EPDLKvbdssSTYyeD +EPDLKvbdLBLGmCXq +DnbkKvbdKeegbApu +DoDLKvbdJYUBhLqQ +EPDKjvbdwNWANDdm +DoCjjvbdKfGIBaRV +DoCjjvbdbhljLFwY +DncLKvbdmgFXmNgZ +DoDKjvbdZRMeJNFR +DoCkKvbdWeyZtAOs +DoCkKvbdbiNKLFvx +EPDKjvbdUsmTfMVj +EPCkKvbdijFgjMwr +DnbkKvbdbsCjtDia +DnbjjvbdZQleJNFR +DoDLKvbdNQXqWNfs +EOcLKvbdULunaVoJ +DncLKvbdrEEhpOVa +DncLKvbdRyigsCvA +DoCkKvbdVwJYWEEg +DncLKvbdjKGIKMwr +EObkKvbdrEFIpNvB +DoCjjvbdGLEsDINV +EOcLKvbdJSyArlxM +EPCjjvbdTJZiqABM +DncLKvbdCTAbsewS +DnbjjvbdZjTIPfaf +EPCjjvbdbPfgELzd +DnbjjvbdLBLHMbXq +EPCjjvbdqiAKFMoF +DnbkKvbdIBlZdzAD +EPDLKvbdyTNiNRag +DoDLKvbdZjSgogCG +EPCjjvbdjAPgAofj +EPCjjvbdxmrgxTJD +EObjjvbdSPsgKGEX +EObkKvbdRWnDblHc +DnbjjvbdZQmFImFR +DoCjjvbdjuwODaww +EOcLKvbdVviXvEFH +EPCjjvbdcImJkGXY +EPDKjvbdVAbQrqSZ +DoCjjvbdWWiXudFH +EPDKjvbdapGfdLzd +EObkKvbdQwOEDMID +EPCjjvbdKDKCqKCx +DncKjvbdJvUfEEgJ +EObkKvbdDoDLKvcE +EOcKjvbdqwPkbhyR +EObjjvbdyTOJNSCH +EObkKvbdZsiIxdTO +DoCjjvbdaSFbhTfL +EOcKjvbdUslsekvK +DoDKjvbdehLWSORH +EPCkKvbdBsBDTfWr +DoCkKvbdMfbpNQVL +DoCkKvbdezvZFJUX +EObjjvbdJYUBhMRQ +DncKjvbdlhcsptqa +DoCkKvbdiZtfMQnG +EObkKvbdZRMdhleR +EPDLKvbdkySrSxgU +DoCkKvbdYlSDsmkm +DnbkKvbdkNBkzEfo +EPDLKvbdyYJKCPzL +EOcKjvbdqwPkbiZR +DncLKvbdqdFJQOWB +DoDKjvbdFyUtaDxC +DnbjjvbdZyDinDMS +EOcKjvbdqrVKnKaN +DoCjjvbdMgDPlotk +EPCjjvbdUVlPitBR +DoDLKvbdbsCkTcjB +EPCjjvbdnGdwlnGy +DnbkKvbdapGfdLzd +EPDKjvbddndsKtTr +DncLKvbdsrrTZZeD +EObkKvbdqdFJQOWB +DncKjvbdRadFLhxk +DnbkKvbdfILWSORH +DnbkKvbdqZOggQcx +EPDKjvbdCDpAujMf +EObjjvbdxsOImSBg +DoDKjvbdrSUjmjaN +EObkKvbdrMyjYkhJ +EObkKvbdANHySvzY +EObkKvbdgGLynGgA +DoDLKvbdNdcshiKd +EObjjvbdePErkTtS +EPCkKvbdSCEFLhxk +DoDKjvbdIxUBhLqQ +EPCkKvbdVvhxWDdg +EOcLKvbdKfGHbBQu +DoCjjvbdajlFoNcA +DoCkKvbdQdDAopdS +DoDKjvbdSBceMJZL +DoDKjvbdOStWGdtp +DoCjjvbdGdLWKBij +DnbkKvbdvOszpjnt +DncLKvbdUVlPjTaR +DoDLKvbdliDsptrB +EOcKjvbdZisHpHCG +DoDKjvbdkVwODaxX +DoDLKvbdfVzwpJzs +DnbkKvbdDjIKWYKA +EObkKvbdrJAJdmPF +EObjjvbdeATpmYJf +DnbkKvbdQmYByOUz +EPDLKvbdxmrhXsJD +EPDLKvbdCJLBjiGK +DoCkKvbdYpmFJMeR +DoDKjvbdXnRAXuWU +DoDKjvbdiMFDmtby +DnbkKvbddZyQYZQb +DncLKvbdZtIiYdSn +EObjjvbdwMvANDdm +EPDLKvbdIwsbHkqQ +DncKjvbdURQntthN +EObkKvbdTqROttgm +EPCjjvbdTkvOaVni +EOcLKvbdfNFwHNKL +EObkKvbdjgflFfOL +EObjjvbdUQqOuUhN +DncLKvbdegjurNqH +EPDLKvbdxUmEqZMO +DoDKjvbdGcjvKBjK +DoDKjvbdVTltFkuj +DnbkKvbdLYqKSztf +DoDKjvbdUyHtZkOn +EPDLKvbdvAcyTOdh +DncKjvbdqFcdsvAh +DncLKvbdrbFmMHKy +EOcKjvbdYlRdTnLm +DoCjjvbdEASJMzXX +EObkKvbdMoxQvNfs +EOcKjvbdiHJcYujV +DnbjjvbdvAcyTPEh +DoDLKvbdGQASwGfZ +EObkKvbdMoxRVnHT +EObkKvbdhgJcYvJu +DnbjjvbduWOXipsA +DoDLKvbdQcbaQQdS +EObkKvbdUsltFkvK +EPDKjvbdKyQirzuG +EPCjjvbdmJDtQuSB +EObkKvbdXrkaMsoY +EOcKjvbdrEFIpOVa +EPDKjvbdVqmwadkc +EOcKjvbdqYoIGqDx +EObkKvbdtbbtwWOo +EPCkKvbdSKxfUfkT +EPCkKvbdmJDsqUrB +DncKjvbdhaoCeWpq +EObjjvbdFxuVAdYC +EPCkKvbdqFcdsvBI +EPDLKvbdOTUWGeVQ +EPCkKvbdlhdUQtrB +DoDKjvbdCJLCLJGK +EPDKjvbdMgCpMotk +DnbjjvbdrbFlkgLZ +DoDKjvbdqBJFAWhE +EPCjjvbdpyPHfqDx +EOcKjvbdTlVoBVni +EPCjjvbdrRtkNkBN +EPCkKvbdWWhwuceH +EPDKjvbdcImKKewY +EOcKjvbdYSlBNToY +EObkKvbdZRMeIldq +EPDLKvbdMoxRWNgT +EObjjvbdMIbMQxAS +EPCjjvbdQdDBQQdS +EObkKvbddZyPwxqC +EOcLKvbdACrXiyiQ +EPDLKvbdcSbkUEJa +DncLKvbdTkunaWPJ +DnbjjvbdvBEYrndh +EObjjvbdmIctQuRa +DncKjvbdiUydvqtb +DoCjjvbdhkdcnUby +EOcKjvbdePFTLTsr +EOcLKvbdiHJbxujV +EObjjvbdZsiJZESn +EOcKjvbdpxoHfqEY +EPDKjvbdFyUuBDwb +DoDLKvbdBiLBkJGK +EPCkKvbdliDtQuRa +DoDKjvbdhbOcEwQq +DncLKvbdRosgJfDw +EObjjvbdrzMQSaIO +EObkKvbdUsmTfMVj +EOcKjvbdWXIxWEFH +EPCjjvbdcTCjtDjB +EObkKvbdbBVeGQPw +EOcLKvbdaSGDHtFk +DoDLKvbdqFdFUVaI +EPCkKvbdxxIjBozL +DncLKvbdNddUIiLE +EObjjvbduMYWaUAw +EPCkKvbdWWiXvDdg +EObjjvbdJXsbILqQ +DnbkKvbdDnbjjwCd +DnbkKvbdxUldqZMO +DoCjjvbdKyRKSztf +DncLKvbdLFehBaQu +EPDLKvbdjvXNdBww +EOcLKvbduaEZTPFI +DoCkKvbdfMevfmKL +EPCkKvbdpxoIGqEY +EPCkKvbdKWUecdgJ +EObkKvbdmbJwYOmu +EPCkKvbdIsZArmYM +DnbjjvbdxLXDgzyf +DncLKvbdEvYopMjF +DncLKvbdmJETqVRa +DnbkKvbdrouoKDWG +EPDLKvbdbVCGwkTh +DoDKjvbdZirhPgCG +EPDKjvbdTvMQKUAq +DnbkKvbdLrWlzVQz +EOcLKvbdrEEiPmua +DnbjjvbdczZQXyRC +DncKjvbdnUtzKjSG +EPCjjvbdkNCLzFHP +DncKjvbdZyEKNbkr +EObkKvbdJuuFdEgJ +DncLKvbduCbuXWPP +EPCjjvbdyNrhXriD +DnbkKvbdIxTaglQp +EPCjjvbdJvVFceHJ +EPCkKvbdVBBprqSZ +EOcKjvbdkxrqsYgU +EPCjjvbdGLFSbhMu +EObjjvbdnPzZWLYb +EObkKvbdjblLRGuH +DoDLKvbduaDyTPFI +EPCjjvbdiifIJmXr +EObkKvbdYkqctOMN +EPCkKvbdelfXHMjL +EPDLKvbdeFOrCWbj +EObjjvbdeUAUATNW +EPCjjvbdWRmxBeMD +DoCjjvbdZxcinDMS +EOcLKvbdWRmwbElD +DoDLKvbdpssfrSLU +DncLKvbdQccApRES +DoDKjvbdGdKujBij +DoDKjvbdZLqdTmlN +DoCjjvbdbiNKLGXY +DoCjjvbdVZITzKoO +DoCkKvbdsPuoKCvG +EPDKjvbdNGbomQVL +DnbkKvbdkIHMGFnL +EPDKjvbdvPTzpjoU +EOcKjvbdczZPxZQb +DncKjvbdliEURUrB +DnbkKvbdGZUtaDxC +EPCjjvbdrMyjZLhJ +EPCjjvbdTulPjTaR +DoCkKvbdZeYGzhJC +DncLKvbdwygefYEr +DnbjjvbdehLVrOQg +DnbjjvbdZxcjNblS +DoCjjvbdSLYetgKs +EPCkKvbdVAbQrpqy +EPCjjvbdtTSTZZdc +DnbkKvbdSCEFMIyL +DoDKjvbdrDeJPmvB +EOcLKvbduDDVXVno +DoDLKvbdZdxGzhIb +EObkKvbdhgJbxujV +DncLKvbdlYsRsZHU +DoDLKvbdhzUelQmf +EObkKvbdWWhwvDeH +EPCjjvbdjgfkfFmk +EObkKvbdzaAPHGal +DoDLKvbdEPDLLXDE +DoCjjvbdTukpKTaR +EOcKjvbdhaoCeWpq +EPDKjvbdwjvdHzzG +EPDLKvbdJTZBTNYM +DoDLKvbdRECaPqDr +DncKjvbdjhGkfGNk +EObkKvbdjhGkfFmk +DncLKvbdqlyixkhJ +EObkKvbdjEkHUoAO +EPCkKvbdcasMrAUN +EObjjvbdhzUfLqOG +DoCkKvbdEvYopNKF +EPCjjvbdjuwODaxX +DncLKvbddiirWUzn +EObkKvbdOStVfduQ +DnbjjvbdypnmIjXA +DnbjjvbdRWnEClHc +EOcLKvbdbhljLFvx +EPDLKvbdJXsaglRQ +EObkKvbdhzUfLqOG +EObkKvbdnPyxujyC +DoDKjvbdBiKajiFj +DoDKjvbdZjTHpHBf +EPCjjvbdaSFcITek +EObjjvbdYzcFqiuy +DncLKvbdqdFIpNvB +DoDKjvbdLYqJrzuG +DoDLKvbdVwJXucdg +DnbjjvbdhbObdvqR +DoCkKvbdCEQBWJlf +DoDLKvbdSCDdlJYk +EPDLKvbdZyEJnCkr +DoDKjvbdvAcyTOeI +DoDKjvbdkIHLfFmk +EPCjjvbduaEYroFI +DnbkKvbdjblKpgUg +EOcKjvbdwygefYFS +EOcKjvbdliDsqUqa +DnbjjvbdjcMLRGtg +EObkKvbdRbEElJYk +EPCkKvbdqrUkNjaN +EOcLKvbdRotGifDw +DnbkKvbdUsmUGLuj +DoCjjvbdeKJqvUzn +EPDKjvbdQwNdClHc +EOcLKvbdcScLTcjB +DoCjjvbdvBDxroEh +DoDLKvbdIxUBglQp +EPDLKvbdfVzxQJzs +DncLKvbdqlzKYlIJ +DoDKjvbdaNLCSuMg +EOcKjvbdwjwDgzyf +EPDKjvbdIxTaglRQ +DoDKjvbdVTltGLuj +DoCkKvbdiMFENuDZ +EOcLKvbdZyEJnDMS +DnbkKvbdiBoCeXRR +EPCkKvbdbiMijewY +EOcKjvbdmttzLJqf +DncKjvbdYTLaMtOx +EPCjjvbdfIKuqmqH +DoCjjvbdBdQBVjNG +EObkKvbdieLGuPAO +EPDLKvbdsZlQSaIO +DnbkKvbdEztQeMDJ +EPCjjvbdIjEAJpHE +EOcLKvbdfILWRmpg +EPCjjvbdZyDinDLr +DncKjvbdLGGIBaRV +DncLKvbdmozZWLZC +DoCkKvbdlZSrSxft +EOcLKvbdFjdrcINV +EOcKjvbdQvnDblHc +DoCkKvbdqUUHRqkU +EPDKjvbdnBjWwnmu +DoCjjvbdZxcjNbkr +DncKjvbdZisIQHCG +DoCkKvbdJcJcRJbx +EPDLKvbdlhdUQtqa +DnbkKvbdrzLpSaHn +DoDKjvbdziuPpDrt +EPDKjvbdEYXlTtUM +EObkKvbdqdFIpOVa +DncKjvbdpxnhHQdY +DnbkKvbdLhakqYAS +EPCkKvbdrRtkNkBN +EObkKvbdqrVKmjaN +EOcKjvbdxUldqZMO +EOcKjvbdrbFllHKy +DoCkKvbdySmhlrBg +EPCkKvbdkxrqsYgU +EPCkKvbdZLqcsnMN +DncKjvbdFpATXHFy +EPDLKvbdZRMdiMeR +EPDLKvbdRNXbYmtz +DoCkKvbdpyPIGqEY +DoDLKvbdKaKfmCYR +EPDLKvbdrylPsBIO +EObjjvbdUQqOuVHm +EPCkKvbdezvZFItX +EOcKjvbdZirhQHCG +DoDKjvbdePFSjssr +EOcKjvbdCTAcTfXS +EOcKjvbdkxsRsYft +EPDLKvbdQwODcMHc +DoDKjvbdwuNFRZMO +EPCjjvbdEuyPomKF +DoCkKvbdpxnhGpcx +DncKjvbdiVZeWrUb +EOcKjvbdrEEiPmvB +EOcLKvbdZxdJnDLr +EObjjvbdUtNUFkvK +DoDLKvbdZQmFIldq +EObjjvbdnCJvwnmu +EPCkKvbdRWmccLgc +DnbkKvbdnUtykJqf +DnbkKvbdVBBqSpqy +EPCkKvbdZoOIddyj +DnbkKvbdZQldiNFR +DncLKvbdmRyVZsDi +DoCjjvbdcasMrATm +EOcLKvbdtbbtvuno +DoDLKvbdZtJJYdSn +DnbkKvbdGKeTDHlu +DoCkKvbdZjTHpGbG +EOcKjvbdHDjvKCKK +EObjjvbdddnqbXCj +EObkKvbdlZTSTYgU +EPCjjvbdqqtjmkBN +EObjjvbdtAGqIAAr +EObkKvbdrRtjmjaN +DnbjjvbdMRwMytpz +EPCkKvbdsQWPJbuf +DoDKjvbdqFceUWBI +DoCkKvbdnBjWxPNu +DoDLKvbdiUzFXRuC +EObkKvbdQccBPqES +DnbjjvbdOFDtIiLE +EPDKjvbdYlRcsnMN +DncKjvbdFfJrNhsq +DoCkKvbdsCFmMHKy +EPDLKvbdYkrETnMN +DoCjjvbdYNqAXuWU +EPDKjvbdrovPKDWG +DoDLKvbdbKlGOmcA +DoCkKvbdOStWHFVQ +EObjjvbdhbObeXQq +EPCjjvbdeEnrBwDK +DoDLKvbdrbFmMGkZ +DncKjvbdxZhGGYFS +EPDKjvbdbrbkTdKB +EPDKjvbdraellGkZ +EPCkKvbdssSTZZeD +EPDKjvbdDjHiuxKA +DoCjjvbdzoPqFDMY +EPCjjvbdlAlnmALA +DoDKjvbdmtuZjjRf +DoDKjvbdFpASvfey +DoCkKvbdjlakyeGo +DoDKjvbdxnSgxTIc +EPCjjvbdxZhFfXeS +EPCkKvbdqcdiPnVa +EOcLKvbdmfeYMnHZ +DoDLKvbduCbuWvOo +DoDKjvbdmIcsqUqa +EPDKjvbdzoQQdblY +DoDLKvbdRNXayOUz +DnbjjvbdrJAKFNOe +DnbjjvbdZLrEUOMN +EOcKjvbdwygeexEr +EPCkKvbdbVBfwjtI +EObkKvbdKDKDRJbx +DoCkKvbdGckWKBij +EOcKjvbdzjVQPdSt +EPDLKvbdqlzKYkhJ +DnbjjvbdajkennDA +DoDLKvbdRzJgsCvA +EObjjvbdehKuqmqH +DncKjvbdajlFnnDA +DnbjjvbdjEkHUoAO +DoCjjvbdFVyPomKF +DoCkKvbdJcJbpjCx +DnbkKvbdRaceLiZL +EPDKjvbdeEnrBwDK +DoDLKvbdxKvdHzyf +DoCkKvbdSPtHKFcw +EObkKvbdjhHMGGOL +EOcLKvbdGGJqnItR +DoCjjvbdnGdxNNgZ +DoDKjvbdbKkfOmcA +DnbjjvbdelewHNKL +EPCkKvbdcSbjsdJa +EPCkKvbdTAEhgbOd +DncLKvbdUslselVj +DnbjjvbdVrOYBeMD +EObjjvbdEzspeMDJ +EPCjjvbdcTDLTcjB +EPDLKvbdsPvPJbuf +EOcKjvbdqGEFUWBI +EPDKjvbdVgxWYGxz +EOcLKvbdSPtGjGDw +EObkKvbdGckVibJj +DoDLKvbdeEoSCWcK +EPCkKvbdQvmdClID +DncLKvbdhytelROG +EPCkKvbdeXzTtSFz +EPCkKvbdrXQMDIxq +EObkKvbdtlXvaUAw +DnbkKvbdiMFDmtcZ +EPDLKvbdJqZeOfNe +EPDLKvbdmIdUQtrB +DoDKjvbdVTltGLvK +DncLKvbdZRNEhleR +EPDKjvbdjlakydfo +DnbjjvbdFpASvfey +EPCkKvbdkySrTYft +EOcLKvbdVUMtGMVj +EPDLKvbdmRyUysDi +EPCkKvbdGKeScHlu +EObjjvbdczZPwyRC +EPDLKvbdVYhUZkOn +DncLKvbdJbibqKDY +EPDLKvbdfekzNfgA +EObkKvbdKQydoGOF +EObkKvbdVgwvXfxz +DncLKvbdQdDApQcr +DncLKvbdGFjRnJUR +DncKjvbdjgflFemk +DoDKjvbdlhctRVSB +DncLKvbdZLqctOLm +DncKjvbdfSAvzlCo +EPDKjvbdZRMeIleR +EObjjvbdZRMeJMdq +EOcKjvbdMuTSKmAX +DncKjvbdqYngfpdY +DnbkKvbdxrmiMqbH +EObjjvbdbPgGckzd +DoCkKvbdpstGqqkU +DncLKvbdmJDsqVSB +EPDLKvbdtunYKQsA +EObkKvbdDnbkKwCd +EPDLKvbdEXwkstUM +DoDKjvbdrRtkNkBN +DncLKvbdIwtCIMQp +EPDLKvbdZQmEhmEq +DnbkKvbdxmrhYTIc +DoCjjvbdCSaDUGWr +EPCkKvbdatagXkUI +DncLKvbdEPDKkWcE +DncKjvbdZjShPgBf +EPDKjvbdHDkVjCJj +DoCjjvbdsrrTYzEc +EObjjvbdhlEcnUby +DnbjjvbdemFvfmKL +EObkKvbdlhcsqUqa +DoCkKvbdZtIiYdTO +EObkKvbdEXwlTssl +DoDKjvbdhaoCdvqR +EObkKvbdliEURUrB +DoDLKvbdEYXkstTl +DncKjvbdFkEsDINV +DoDKjvbdFkErcHmV +DoDLKvbdKCjCpjDY +EPCjjvbdjJegjMxS +DnbkKvbdnCKWwnmu +DnbjjvbdqwQLbiYq +DoDLKvbdSZigsDWA +EObjjvbduVnYKRTA +EOcKjvbdTlWOaVoJ +DnbjjvbdSCDeMJYk +DnbkKvbdQvmdClID +EPCkKvbdziuQPdTU +EOcLKvbdhficZWJu +EOcKjvbdZLqdTmkm +DoDKjvbdcImKKevx +EOcLKvbdGFirOJUR +EObkKvbdREDApRES +DoDKjvbdHELWKBij +EOcKjvbdrSVLNkBN +EOcKjvbdBdQBWJlf +DoCjjvbdFpATXHGZ +DnbjjvbdqZOhGpdY +EPDLKvbdCSaDUGWr +DoDLKvbdrpWPJcWG +DnbjjvbdZsiJYdTO +EPDKjvbdJvVGEFGi +EPCkKvbdmIctRVSB +DncKjvbdBiLCKhfK +DoCkKvbdZisIQGbG +DoCjjvbduWNwjQsA +EOcLKvbdiHKCyVjV +EPCjjvbdlZSrTZGt +EObjjvbdNPxRWNgT +DncKjvbdeAURNXif +DncLKvbdOStWGeVQ +DoCjjvbdJvUeceGi +DoDKjvbdXsMBMsnx +EPDKjvbdGLFSbhMu +EPDLKvbdEvZPolie +EOcKjvbdrRtjnLBN +EPDKjvbdyOTHxTJD +EPDKjvbdmajWwnmu +EPCjjvbdrNZjZLhJ +DncKjvbdajlFoODA +DoDKjvbdrEFIpOVa +DnbkKvbdpedEtWBI +DncKjvbdqwQMChyR +DnbjjvbdnCKWwnnV +DoCjjvbdNUsRkNAX +EOcLKvbdULvPBWPJ +DncLKvbdjlalZdfo +EPDKjvbdjJfHjNYS +DoDKjvbdPxmAHTSK +DnbkKvbdmIctQtqa +EObjjvbdnHFXmNfy +EPCkKvbdqlzJyLhJ +DnbjjvbdVqnYCElD +EPDKjvbdqTsgRqkU +EPCjjvbdADSYKZhp +EPDLKvbdEvZPoljF +DoCkKvbdLFfICBRV +EOcLKvbdZRNFJNFR +EPDKjvbdpedFUWBI +EPDKjvbdVwJYVceH +DoCjjvbdGYtuBDwb +DoCjjvbdVYgtZjoO +DncKjvbdQccApQcr +EOcLKvbdWWiYWDdg +DncKjvbdyTOJNSBg +DnbjjvbdbAueFpQX +DnbkKvbdiUydwSUb +DoDKjvbdKVtfDeHJ +DoDKjvbdEObjkXCd +EOcKjvbdqlyjYlHi +EOcKjvbdfRaWzlCo +EObjjvbdRWmcblID +DoDLKvbdCDpAvKMf +DncLKvbdmuVZjjSG +EPDLKvbdkaMnmALA +EPCkKvbdcSbkTdKB +DnbjjvbdZtJIyESn +EPCkKvbdQvmccMHc +DncLKvbdfHjvRmpg +DoCjjvbdVvhwvEEg +EPCjjvbdXrkaNTnx +DnbkKvbdGFirNiUR +EObkKvbdZLrDsnLm +EObkKvbdySnJNRbH +DncKjvbdaMkBsUmH +EPCkKvbdqGEFUWBI +EObjjvbdmajXYOnV +DnbkKvbdHELWKBjK +EPDKjvbdWSOYCFLc +DncLKvbdehKurNqH +EPDLKvbdSZjIScWA +DncKjvbdZQldiNEq +DncLKvbdVwIwvEEg +DnbjjvbdauCGxKsh +DnbkKvbdKefHbApu +DoCkKvbdssSTYyeD +DnbjjvbdSPsgJfEX +DoCkKvbdeKKRvUzn +DoDLKvbdiMEcnVCy +DoDLKvbdoAKzsgcn +DoDKjvbdDoDKjvbd +DncKjvbdFWYopMie +EPDLKvbdRNXaxmtz +EOcLKvbdKefHaaRV +EPDKjvbderAvzkbo +EObjjvbdzoQREcMY +DnbkKvbdijFgjMwr +EObjjvbdhbObdvqR +EPCkKvbdySmiMqbH +EObkKvbdyzeOSIIh +DnbkKvbdjcLkRHUg +DoDLKvbdJpydoGNe +DoDKjvbdwXMBWBWV +EObkKvbdsBfMkgKy +DnbkKvbdYkqdTnMN +EPCjjvbdEPDLLWbd +EObkKvbdDwxLtUUM +DncKjvbdNrtVgFUp +EPDKjvbdZQleJNFR +EPDKjvbdJKEAKPfd +DnbjjvbdhgKCxvJu +EObkKvbdLAkHMbXq +EPDKjvbdhancEvqR +DoCjjvbdNsUWHEuQ +DnbkKvbdZjTHofaf +EPCjjvbdrDdiQOVa +EPDKjvbdkMbLzEgP +EPCkKvbdZoOJFEyj +EPCkKvbdADRxJyhp +EObjjvbdaSGCgsfL +DnbjjvbdJbjDQibx +EPCjjvbdpfEEtWBI +EOcLKvbdZxdJmblS +EPCkKvbdRpTgKGEX +DoCjjvbdzRPNIiwA +EObkKvbdzoPpeClY +EObjjvbdeFOrBwDK +DoCkKvbdOTTvHEtp +DnbjjvbdGQATWgFy +EPCjjvbdEvZQQNJe +EObkKvbdjvWnECYX +DoDLKvbdyTOIlqag +DnbkKvbdEASJNZvw +EOcKjvbdsZkosBHn +DoDLKvbdtSqsYyeD +DncKjvbdqlyixkgi +EPCjjvbdTppnuVHm +DncKjvbdatbHYKsh +DoCkKvbduVmwjQsA +EPCkKvbdvAcxsOeI +EObkKvbdRjyFuHLT +EObjjvbdTukoitAq +EOcLKvbdkySqrxft +EObjjvbdQccBPpdS +DoDKjvbdffLzNfgA +DoDKjvbdiCOcEvqR +DncKjvbdIBkzEzAD +EObjjvbdVZHsyjoO +EOcLKvbdZoNheEzK +DnbkKvbdsZkpTAhO +DnbjjvbdqFdEtVaI +DnbkKvbdIGfzZXwg +EPDLKvbdlrZVZsEJ +EObjjvbdBcpAvJmG +DnbjjvbdtSqsYzFD +EPDLKvbdJJdAJogE +DncKjvbdxVMdpyMO +EPCjjvbdQwOEDLhD +DoCjjvbdmgFXmNgZ +DoDLKvbdjEkGuPAO +EPCjjvbdACrXjZiQ +DoCjjvbdZMRdTmlN +DncLKvbdiLeDnVDZ +EObjjvbdVAaprpqy +DoDLKvbdRjyFuGjs +DnbjjvbdVAbQrprZ +EObkKvbdSZjHrcWA +EPDKjvbdVrOYBeMD +EPDLKvbdDwxMUTsl +EPDKjvbdRadElIxk +DnbjjvbdmozZWKyC +DoDLKvbdptTgRrKt +EPCjjvbdatagXkUI +DncLKvbdZLqcsnMN +DoDLKvbdfNFwGmJk +EObkKvbdqTsfrSKt +DncLKvbdZjTHpGbG +DoCjjvbduWNwipsA +EPDKjvbdauCGwkTh +DncLKvbdKVuGEFGi +EObjjvbdZirhPfaf +DoDKjvbdxKvcgzyf +DnbkKvbdxsNhlrCH +DoCkKvbdBsBDUGWr +DncKjvbdfMfXHNJk +DnbjjvbdOSsugFVQ +DncKjvbdZisIPfaf +DnbjjvbdZHXEAOsJ +DnbjjvbdLZRJrzuG +EObkKvbdwuNFQxlO +DncKjvbddxZtURez +EPCkKvbdxrmiNSCH +DoDKjvbdiUydwSVC +EObjjvbdiifIJlwr +DncLKvbdssSSxyeD +EPDKjvbdOEcsiJLE +EOcKjvbdySnIlrBg +EPCkKvbddZyQYZRC +DnbjjvbdWXJXudEg +DoDLKvbdKaLHNCXq +DoDKjvbdGGKRmiTq +DnbkKvbdlrYtyrdJ +EPDKjvbdhtzEvrVC +EObkKvbddZyQYYqC +DoDLKvbdhaoCdwRR +EPCkKvbdxLWdHzyf +DoDKjvbdySmhmRbH +DnbkKvbdZLqcsmlN +EObjjvbdZtJIxdTO +DoDKjvbdDwwksssl +EPDKjvbdFyVVAdXb +DoCkKvbdUtNUFkvK +EPDLKvbdxmsIXsIc +EPDLKvbdUsmUFkuj +EOcKjvbdGKdsDHlu +EOcKjvbdACqwjZiQ +EPDKjvbdFpASwHGZ +DoCkKvbdGZUtaDxC +DncKjvbdmSZVZsEJ +DoCjjvbdJbicRKCx +DncLKvbdTvMQJsaR +DoCjjvbdNeDtJJKd +EPCjjvbdnPzYvKxb +DoDLKvbdyTNhlrCH +EPDKjvbdRosgJecw +EObkKvbdTAEiICOd +EOcKjvbdapHHDkzd +DoCkKvbdjlakzFGo +DncLKvbdrpWPJbuf +DnbjjvbdNQXqVnHT +EOcLKvbdkNCLzFHP +EObjjvbdTukpKTaR +EOcLKvbdEuxpPlie +EPCkKvbdJuuFdFHJ +EPDKjvbdGGJqmiTq +DnbjjvbdOAIrtJrA +DnbjjvbdelfWgNKL +EObkKvbdhbOcEwRR +DncLKvbdqiAKFNPF +DncKjvbdVqnYCFMD +DoDLKvbdWHxWXgYz +EOcLKvbdNVTSKmAX +EPDKjvbduaDySndh +DnbkKvbdiifIJlxS +EPDKjvbdeATpmYJf +DncLKvbduCcVWuoP +EPCjjvbdhficYvJu +DncKjvbdehLVqnQg +EPCkKvbdrDeJPmua +DoCjjvbdTfzmlWue +DncKjvbdZoNiFEyj +DoDLKvbdxmsHxSiD +EObkKvbdVwJYVdFH +EPCjjvbduMXwBUBX +DnbkKvbdTqROuVIN +EPCjjvbdGKeTCglu +EPDLKvbdcyyPwxpb +EPDLKvbdQmXayOUz +EPDLKvbdZyDinCkr +EPDLKvbdZoNheEyj +DncLKvbdmfdxMnGy +DnbkKvbdkClLRGuH +DncLKvbdJXsbIMQp +DnbjjvbdjJegilxS +DoCkKvbdnPyxukZC +EPDKjvbdZMRcsnLm +DoCkKvbdHffzYxYH +DnbkKvbdbsDLTcjB +DoDLKvbdSwjlNzjx +DncKjvbdkaMnmALA +DncLKvbdqmZjZLhJ +DoDKjvbdqrUkNkBN +DncLKvbdmfeXmOGy +EPCjjvbdZMRdTmlN +DnbkKvbdypnlhjXA +EPDLKvbdyOTHxTJD +EObjjvbdMRwMzVQz +EPCjjvbdSCDeMIxk +EObjjvbdOXnuzdOU +EPDKjvbdOStWHFVQ +DoDLKvbdrzLpTAgn +DnbkKvbdULuoAvPJ +EPDKjvbdZxdKODMS +EOcKjvbdbAvEfPpX +DncKjvbdyOSgwriD +EPDLKvbdrJAJdmPF +EPDLKvbdauCGxKtI +DncLKvbdqrVLOLAm +EPDKjvbdkHgLfFmk +DncKjvbdUaCRSqSZ +DnbkKvbdbQGgELzd +EOcKjvbdcJMijfXY +EPCkKvbdeOeTLUTr +EOcKjvbdQmYByNtz +EPDLKvbdFxuVBDwb +EOcKjvbdGGJrNiUR +DoDKjvbddndsLTtS +EOcLKvbddZyPxYqC +EPCkKvbdSKxfVHLT +EOcKjvbdSCDdkiYk +DnbjjvbdtvNwjQsA +EOcKjvbdJXsbILqQ +EObjjvbdjcLkRHVH +EObjjvbdkCkkQgUg +DoCjjvbdTqQnttgm +EPCkKvbdEuyPoljF +DoCkKvbdTqQnuUgm +DoDLKvbdLrWlzVQz +EPCjjvbdRjyGVGkT +DoDLKvbdHEKvKBjK +DoCjjvbdnCJvxOnV +EObkKvbdptUGrRkU +EPDKjvbdQwNcblID +DoCjjvbdIidAKPgE +DoCjjvbdTYLMNzkY +DnbjjvbdEztRFMCi +EObkKvbdBhkCLJGK +EPDLKvbdZisHpGbG +EPDLKvbddePRbXDK +EObkKvbdUQpntuIN +EObjjvbdEPCjjvcE +DncKjvbdbiNJjewY +EPDLKvbdVrOYCElD +EPCkKvbdSBdElIyL +DoDLKvbdzjVQQETU +DoCjjvbdCDpAvKNG +EObkKvbdNHComPuL +EOcKjvbdGdKvJaij +DnbkKvbdqmZjYkgi +DncKjvbdQvnEClID +DncLKvbdWWiXudFH +DoDLKvbdCEQBWJlf +DncKjvbdMpXqWOGs +EPDKjvbdVBCRSqRy +EPDLKvbdqUTgSRjt +EOcLKvbdJXtCHkqQ +EObkKvbdBiLBkJFj +EOcLKvbdVvhwvEEg +EOcKjvbdCTBCsewS +EOcKjvbdyNsHwriD +DoDKjvbdwzHfFxEr +DnbjjvbdypoMiJwA +DoCjjvbdJbicQjCx +EOcLKvbdVUMsekuj +EOcKjvbdCEQBWJlf +EObjjvbdIjEAKQGd +DoCjjvbdDjIJvXjA +DoDLKvbdFyUuAdYC +DncLKvbdRotGiedX +DoCjjvbdBhkBjhej +EOcKjvbdBhkCKhfK +EPCkKvbdLFfHbBRV +DoCkKvbdNUrrLNAX +EOcKjvbdZoOIeEzK +EPCjjvbdkMbMZeHP +DoCjjvbdkVwNdBxX +EPCkKvbdNddThiKd +DnbjjvbdjcLkQftg +DnbkKvbdFkErcHmV +DnbjjvbdqGEEtWAh +DncKjvbdmSYuZsEJ +DoCjjvbdUsmTfMWK +DoCkKvbdVUMtFkvK +EOcKjvbdKfGICBRV +DnbkKvbdMSWlzUpz +EOcLKvbdVBBprpqy +EPCjjvbdnHEwmNgZ +DoCkKvbdeEoRawDK +DnbkKvbdpssgSSLU +DncKjvbdOSsugFUp +DnbkKvbdwzHfGYFS +DoCjjvbdTAEiHbPE +EObkKvbdKaLGmCXq +DnbkKvbdCWzciFQW +DncLKvbdnVVZjiqf +EPCjjvbdOStWHEtp +DoDKjvbdkIGkfFmk +DoDKjvbdZjTIPfbG +EOcKjvbdXsMAlsnx +DnbjjvbdILazmwRL +EOcKjvbdrDdiPmvB +EPDKjvbdiUzEwRuC +EOcKjvbdqAheAXHd +EPCjjvbdRyigsCvA +DoCjjvbdpyOggQcx +EPCkKvbdZyDjNblS +DncLKvbdFejSNiTq +EPDKjvbdzRPNIjXA +DncLKvbdaMkBsVMg +EObkKvbdLYqJrzuG +DncKjvbdsBfNMHLZ +EPDKjvbdjgflFfOL +DoDKjvbdCTAcUGWr +DnbjjvbdSLZGVGkT +DoCkKvbdZQmEhldq +EPDKjvbdUsmTfMWK +DoCjjvbdKefICBRV +EPCjjvbdZMSDsnMN +EObkKvbdwzIGGXdr +EObjjvbdrRtjnLAm +EPDKjvbdXrlAmTnx +EPCjjvbdZtJJZETO +DnbjjvbdieLGtoAO +DnbkKvbdnCJvxPOV +EPDKjvbdjKFgjNYS +DoCkKvbdlhcspuRa +EPDKjvbdbAvEfQPw +EOcLKvbdiGjDYuiu +DncKjvbdnQZxvLZC +DoDLKvbdaogHDkzd +DnbjjvbdMfcQMouL +DncKjvbdKaKgMbYR +DncKjvbdrbGNMHKy +DoCkKvbddoFSjtUS +EPDLKvbdNddTiIjd +EPDKjvbdhgKDZViu +EPDLKvbdkMbLzEfo +DoDKjvbdjmCMZdfo +DoDKjvbdSCDeLhyL +DoCkKvbdQwODcMID +DnbkKvbdgGLymgHA +EPDKjvbdWIYVwfxz +DnbkKvbdZLqdUNkm +DoCkKvbdYlSETmkm +DnbkKvbdLqvlyuQz +DnbkKvbdZRMdiMdq +EOcLKvbddePSCXCj +EPDLKvbdRacdkiYk +DnbjjvbdZisIQGbG +EObjjvbdrpVnibvG +DncLKvbdIxUCHlRQ +EPCkKvbdhuZeXRtb +DnbjjvbdQwODblID +DoDKjvbdezuyEhsw +DncKjvbdiLddNtcZ +EPCkKvbdiLeENtby +DnbjjvbdxKvcgzzG +EPDLKvbdRXNdClID +DncLKvbdEKHjVwjA +EOcLKvbdzoPqFCkx +DoDLKvbdliEURUqa +DoCjjvbdyOTIYTJD +DncLKvbdIHGyyXwg +EPCjjvbdShyjRABM +DoCkKvbdnPyyWLYb +EObjjvbdsPvPJcVf +EPDKjvbdTXjlNzjx +DoDKjvbddneTLUUS +EOcKjvbdmuUyjiqf +DncKjvbdZoOIddzK +DoCjjvbdpyOhGqEY +DoCkKvbdwjwDgzyf +DnbkKvbdxZgeexEr +EOcLKvbdHDjvKCKK +DoCkKvbdpxnhHQdY +DoDLKvbdLrWlzUpz +EPDKjvbdatbHXkTh +DoDLKvbdZyDinDLr +EPCjjvbdGGJqnJTq +DoDKjvbddneTLTsr +DncLKvbdyzdmqhJI +EObkKvbdRjxfVGkT +EPDKjvbdOAJTTirA +EPCjjvbdZoNiFEzK +DnbjjvbdOhAXyAYa +DnbjjvbdACqwizIp +DoDLKvbdcImJjevx +EPDLKvbdxmrhYTIc +DoDLKvbdjcLkRGuH +EPCkKvbdxVNEpxlO +EPCkKvbdKCibqJbx +DoCkKvbdjJfIKMxS +DoDLKvbdVYhUZjoO +EPDLKvbdrJAKEmPF +EOcLKvbdRDbaQRDr +DoCkKvbduWOXiqTA +DoCjjvbdZyDjNcLr +EObjjvbdbBWEeoow +EPDLKvbdUQpnttgm +EOcKjvbdlBNOmALA +DnbjjvbdSPsfiecw +DnbjjvbdwzIGGYFS +EOcKjvbdLGFgaaRV +EOcKjvbdrXQLcJYq +DnbkKvbdmbKXYPOV +DoCkKvbdZisHogCG +EPCkKvbdFVyPpMjF +EOcKjvbdYkrDsmkm +DoDKjvbdxUmEqYlO +EPDKjvbdKNAEZgUa +DoDLKvbdqZPIGpcx +DoCjjvbdMgComPtk +EObjjvbdUyHszKoO +DoCkKvbdeEnqavcK +EPDKjvbdqYoIGqEY +DoDLKvbdCDoaWJmG +EPDLKvbdlZSrTZHU +EPCkKvbdZxcinDMS +DoCkKvbdgFkzNfgA +EOcKjvbdYNqAXtvU +EObjjvbdwygefYEr +EPCkKvbdbBVdfQQX +DnbkKvbdqrVLOLAm +EOcKjvbdFjeTDINV +DnbjjvbdnHFYMnGy +EPCjjvbdrbFllHKy +EPCjjvbdZLrDtOMN +EPDLKvbdcJNKKfWx +DoCjjvbdraemMHLZ +DoDKjvbdeJjSWUzn +EPCkKvbdZnmiEdyj +DnbjjvbdwtleQxlO +DnbkKvbdDwwlUTtM +DoDKjvbdrWpMDJZR +EOcKjvbdegkVrORH +EPCkKvbdiCOcFWqR +DnbkKvbdBsBDTevr +DoCjjvbdjcLjpfuH +DnbjjvbdZxdKODLr +DoCjjvbdqceIpOVa +DoDLKvbdVvhxVceH +EObkKvbdsrqryZdc +DnbkKvbdMSWlytpz +DoDLKvbdqTsfqrKt +EPCjjvbdjKGIKNYS +EOcLKvbdiGibxvKV +EPCjjvbdKDKCpibx +EPDKjvbdQdDBPqDr +DncKjvbdozmdLYPA +DoCkKvbdTvLojUAq +DnbkKvbdbhmKLFwY +EPDKjvbdCIjbLIej +DncKjvbdkHfkeenL +DoDKjvbdtAGqIABS +EPCjjvbdRosfjFdX +EOcKjvbdraemLgLZ +DnbkKvbdxmrgxTIc +DoCkKvbdOAJStJrA +EPCjjvbdqYngfpdY +EPDLKvbdBvzdJEov +DoDKjvbdrDeIpOWB +EObjjvbdqUTfrSKt +EOcKjvbdxnShXsIc +DoDKjvbdEzsqFLcJ +EObjjvbdDxYMUUUM +EOcKjvbdjKFhKNYS +EOcKjvbdjgflGFmk +DoCkKvbdGGKRnItR +EPCkKvbdREDApRDr +EOcLKvbdNQYRWOHT +EPCjjvbdxmrgwriD +DncLKvbdbsCjsdJa +EOcKjvbdypoNIiwA +DncKjvbdZoOJFEyj +DoCjjvbdrbGMkgKy +EPDKjvbdyTNiNSBg +DoCjjvbdczZPwyQb +DoDKjvbdWfZZtAOs +EPDKjvbdznoqFClY +DncKjvbdTlVoBVoJ +EPCkKvbdIxUBhMRQ +DoCkKvbdZQmEiNEq +DoDKjvbdnVUykKRf +DnbjjvbdUtMtFlWK +EObjjvbdOTUVfeUp +DoCjjvbdZMSEUOMN +DoCjjvbdwjwDgzzG +DoDKjvbdYqNEiNFR +DoDLKvbdqiAKEmOe +EPDLKvbdfNGXHNJk +DnbjjvbdCEQBVjMf +EObkKvbdqUUGrRjt +DnbkKvbdjmCLyeHP +DnbjjvbdcJMikFwY +EPCjjvbdjuwNdBxX +DoCkKvbdeqaWzkbo +DncKjvbdTkvOaVoJ +DoDKjvbdZoOIeEzK +DoDLKvbdKDKDRKDY +DncLKvbdqwQMDJYq +EObkKvbdKeegbBRV +EPDKjvbdegjuqnRH +DoDKjvbdxwhjBpZk +EObjjvbdziuQPdSt +EPCjjvbdZyEKOCkr +EPCjjvbdRWmdCkhD +EOcLKvbdQcbaQRES +DncLKvbdIrxaTNYM +DnbjjvbdGFiqmiTq +DoCjjvbdZeXfzghb +DoCjjvbdSLZFuGkT +EPDKjvbdIryBSmYM +EOcLKvbdRyjHsCvA +EPDKjvbdzoPqFCkx +EPDLKvbdFeirOIsq +EObkKvbdLiBkpxAS +DoCjjvbdmuUyjirG +EOcKjvbdpfDeTuaI +DncLKvbdtSqsYyeD +EOcLKvbdAMhYrwZx +EOcKjvbdJSyAsNYM +DncLKvbddneTLTsr +EPDLKvbdANIYsWyx +EObkKvbdRXODblHc +DoCkKvbdYzcGRjWZ +DoDLKvbdkHgLfFnL +DoCkKvbdpyPIGqDx +EObkKvbdwuNEpxkn +DoDLKvbdJSxaTNYM +DoDLKvbdRNXbZOUz +DnbjjvbdNHDPlpUk +EObjjvbdKQzFPFnF +EOcKjvbdwkWdHzzG +EObkKvbdiCPCdvpq +EPCkKvbdwzHfFwdr +DoDLKvbdwuMeQxkn +DoDLKvbdmoyxujyC +DncLKvbdyYJKBoyk +EOcKjvbdhgJbxujV +EOcKjvbdvAcySndh +EPCjjvbdOYPVzcmt +DncKjvbderBWzlCo +DncLKvbdEuxoolie +DoDLKvbdUsmTelVj +DoCkKvbdcImKKfXY +EPCkKvbdKDJcRJcY +DoDLKvbdfILWSOQg +DoDLKvbdtcDVWuno +DoDKjvbdegjvSNpg +DncKjvbdjvXOEBxX +DncKjvbdvOszpjoU +EOcLKvbdkIGkfFnL +EPDKjvbdZxcinCkr +EOcKjvbdNxPVzcnU +DnbkKvbdNrsvHEtp +DnbjjvbdwygefXeS +EObkKvbdnHEwmOGy +EObkKvbdZRNFIleR +DoCjjvbdNHColotk +EPDKjvbdTkuoBVni +EObkKvbdkHgLfGNk +DoCkKvbdVvhxWEEg +EOcLKvbdtbcVWvOo +DoDKjvbdULvOaWOi +EObkKvbdNdcsiJLE +DoDLKvbdOYPVzdNt +DoCkKvbdNeDsiJLE +EOcLKvbdXGYytAOs +EOcKjvbdcIljLGWx +DoDKjvbdIMBzmwQk +EPDKjvbdbrcKscjB +DoCjjvbdqdEhpOWB +DnbjjvbdzoPqFClY +DnbjjvbdKDKCqJcY +EPDLKvbdZRNEhldq +DncLKvbddZyQXyRC +DncLKvbdRzKHrcWA +EObkKvbdTAFIgbPE +EObjjvbdwtmFRYkn +DoDLKvbdCTAbtFwS +EObjjvbdJzpFwdAN +DoCjjvbdCTAbsevr +EObjjvbdyzdmrIIh +DnbkKvbdANIZTXZx +EPCkKvbdVwJXvDeH +DncKjvbdmfdwlnHZ +DoCjjvbdZirhPfaf +EPCkKvbdiHJcYvJu +DnbjjvbdRMxCYmtz +EPDLKvbdZHWdAPSi +DnbjjvbdWSNxBdkc +DoDKjvbdNxPVzdNt +EObjjvbddePRawDK +DncKjvbdaSGCgtGL +DncKjvbddoFSjstS +DnbjjvbdOFETiJLE +DoDLKvbdeAUQmYJf +EObjjvbdZshiZESn +EPCjjvbdVwIwvEFH +DnbkKvbdKDKDQjDY +EPDLKvbdRbEFMJZL +DoDKjvbdiZuGLpnG +DoCjjvbdqGEEtWAh +DnbjjvbdnBiwYPNu +DnbjjvbdtlXwBTaX +DoCjjvbdqYoHfqEY +EPCkKvbdIsZArmXl +DoDLKvbdmfeYNNgZ +DoCkKvbdrafNLgKy +DnbkKvbdYfwEAOsJ +DoDLKvbdrEFIonWB +EPCjjvbdRXODcMID +EPCjjvbdZisIPfbG +DncKjvbdoAKzshEO +EOcLKvbdNQXqVmfs +DnbkKvbddoEsKssr +EPDKjvbdNeETiJLE +EPCkKvbdVgwvXfxz +EOcKjvbdIsZBTNXl +EObkKvbdFeirOJUR +EPCjjvbdVAbRSpqy +DnbjjvbdeXyssqez +EPDLKvbdZGwEAOri +DoCkKvbdVAaqSqRy +DoDLKvbdiVZeWrVC +EPDKjvbdGYuUaDwb +DncLKvbdLrXMyuQz +EPDKjvbdGZUtaEXb +EOcLKvbdzoQRFDLx +EPCkKvbdTAFJICOd +EPDKjvbdNPxRVmfs +DoCjjvbdauBfxKsh +DncLKvbdMIbLpxAS +DoCkKvbdmgEwmNfy +DoDLKvbdhanbdvqR +DoCkKvbdSLYfUfjs +DoCjjvbdTvMQJsaR +DnbkKvbdlhcspuRa +DnbjjvbdJSyBSlxM +EPCjjvbdSLZFuHLT +DoCkKvbdYTLaNUPY +EObjjvbdFeiqnJUR +EPDKjvbdYlRctNkm +EOcKjvbdHDjvJaij +DnbkKvbdnCJvwnnV +DoCjjvbdNHDPlouL +DncLKvbdWXIxWDdg +DoCkKvbdJSyAsMwl +EObkKvbdxmrhXriD +DnbkKvbdJzpGYEAN +EOcLKvbdddnqawDK +EOcLKvbdhyuFkpnG +DnbkKvbdtAHQhABS +DoCjjvbdjhGlFemk +DncLKvbdjJehJmXr +EPDLKvbdHffyyXwg +DoCkKvbdRbEFLiZL +DoCjjvbddePSBwCj +EPDKjvbdeOeTKtUS +DnbjjvbdrDeIomvB +DnbjjvbdVZIUZjoO +EPDKjvbdxmsIYTIc +EPCjjvbdDnbkLXDE +DnbkKvbdYlSDtNlN +EObkKvbdeFPSBvbj +EPCkKvbdkDMKpgUg +DoCkKvbdbKlGPODA +EObjjvbdGdLVjCKK +EPCkKvbdkCkjqGuH +EOcLKvbdqYngfpcx +EPDLKvbdeKJqvUzn +DoCkKvbdkIHMGGOL +DncKjvbdDoDKkXDE +EPCkKvbdsCGNMHLZ +EOcKjvbdyzeNqhJI +DnbjjvbdqwQLbhxq +EObjjvbdaaWEepPw +EObjjvbdDxXktUTl +DnbjjvbddwzTtRez +DnbjjvbdKQyeOfNe +EPDKjvbdbBVdepPw +DncLKvbdfSAvzkbo +DoDKjvbdqYoIHQcx +DoCkKvbdeEnrBwCj +DncKjvbdehLVqnRH +EPDLKvbdhfjDYuiu +EPCkKvbdvmWANEEm +EPCkKvbdZRNEiNFR +EOcLKvbdCSaCtGXS +DoDKjvbdbhljKevx +DoDKjvbdbBVdepQX +DncLKvbdqTsfrSKt +EPDKjvbdjEjgVPAO +DoCjjvbdFeiqmiTq +EObjjvbdcImJkGXY +EObjjvbdJbjCqJcY +DnbkKvbdjcLjpftg +EPDLKvbdWXJYWEEg +DoDKjvbdznpREbkx +EObjjvbdfILVqmqH +DnbkKvbdxwiKCQZk +EPDLKvbdOEdUJIjd +DnbkKvbdsCFmLgKy +DncKjvbdijFhKMxS +EPCjjvbdzitpQDrt +EPCkKvbdZQleImEq +DoDKjvbdZxdKNcLr +DncKjvbdGdLVjCKK +EOcKjvbdhzUfLpnG +DncLKvbdwzHfGYEr +EObjjvbdEObjjvcE +EOcLKvbdfHkVqmpg +DnbjjvbdXnRAXuVt +EOcLKvbdeFOrBwDK +EPCjjvbdzitoocsU +EPDKjvbdZxdJmblS +EObjjvbdFjeScHlu +DoDKjvbdjhGkfFmk +EOcLKvbduDDVXWPP +EPDLKvbdJYUCHkpp +EPCkKvbdkClKpgVH +EObkKvbdJcKCqJbx +DncKjvbdEXwlUTsl +EObkKvbdxwiJbPzL +DncLKvbdHDjujCKK +DnbkKvbdEuyQQMie +EPCkKvbdUaBpsRSZ +EPCkKvbddoFTKstS +EPCjjvbduaEYsOeI +DoDLKvbdcTDKscjB +DncLKvbdNdcshiKd +DnbjjvbdWSOYCEkc +EOcKjvbdZnmiEdzK +EPDKjvbdUQpnttgm +DoCjjvbdnGdwmOGy +DoCkKvbdZyDjNblS +EOcKjvbdShyjRAAl +DncKjvbdTkvOaWPJ +DoDKjvbdOEcsiJKd +DncKjvbdbVBfxKtI +EPCkKvbdrafNLfjy +DoDKjvbduaEZTOeI +DncLKvbdGGKSNhtR +EPCjjvbdnBjWxOmu +EObkKvbdKefICBRV +DncKjvbdZoNheFZj +DnbkKvbdEOcKkWbd +EPDKjvbdNGcPmQUk +EObkKvbdaMjbStlg +DnbkKvbdJYTbIMRQ +DncLKvbdJXsahLpp +DncKjvbddeOrBvbj +DoDLKvbdJSyAsMwl +EPCkKvbdZdwfzhJC +DoCjjvbduDDVWuno +DnbjjvbdEztQdkbi +EOcLKvbdUyHsykOn +EObjjvbdDjHivYKA +DoDLKvbdnUtzLKSG +DncLKvbdSLZFuGkT +DoDKjvbdlYrrTZGt +EOcLKvbdqUUGqrKt +EPDLKvbdEPCjjvcE +EPDKjvbddxZtTrFz +EObkKvbdlYrqrxgU +DoCjjvbdauCGwjtI +DnbjjvbdQZNAHTRj +DoDKjvbdMoxRVmfs +DncLKvbdOTTvGeUp +DncKjvbdcJNKKewY +DoDKjvbdmuVZjjSG +EPDKjvbdUWLpKUAq +EOcLKvbdSLZGVGjs +EObjjvbdCIjakJGK +EPDLKvbdZnmhddyj +EOcKjvbdLBKgMaxR +EOcLKvbdDjHjVwjA +DnbkKvbdYlRcsnLm +DoCjjvbdrRuKnKaN +EPCkKvbdptUHSSLU +DncLKvbdYpmEiNFR +EObkKvbdMIalQxAS +DnbjjvbdJuteceHJ +DncLKvbdFWYpPlie +EPCkKvbdmgFYMmgZ +DoCjjvbdmbJvxOnV +DncKjvbdIGfzZYXg +EPDLKvbdqTtGqrLU +EPCjjvbdWRmwbElD +EPDLKvbdGLErcIMu +EPDLKvbdwygefYEr +EPDKjvbdrSUkOLBN +DoCkKvbdNQYQumfs +DoCkKvbdRjyGVGjs +EPDKjvbdmajXXoOV +DncKjvbdIGgZxwwg +DnbkKvbdxwiJapZk +DoDKjvbdYqMdhleR +EOcLKvbdZtJIxdSn +EPDLKvbdTIzKRABM +EPDKjvbdCEPaWJlf +EOcLKvbdjgflFfOL +EPCjjvbdZjShQGbG +DoDLKvbdHDjvJbKK +EOcLKvbdBiKbLIfK +DncLKvbdiHJbxujV +EObkKvbdKeehBaQu +EPDLKvbdYSlBMsnx +EObkKvbdmJDsptrB +DoDKjvbdTkuoAvPJ +EPDKjvbdZyEJnDLr +EPCkKvbdZoNhddyj +EPDKjvbdVZHsykOn +DnbkKvbdjJegjNYS +DoDLKvbdtcCtwVno +EOcKjvbdkIHLefOL +EOcKjvbdYkqdTnLm +DnbkKvbdiZuGMQmf +DoCjjvbdZLrDsnLm +DoCjjvbdDwwktTsl +EObjjvbdRzKHrbvA +DoDKjvbdQlwaxnUz +EObkKvbdyTOImRag +EPCjjvbdQmYByOUz +EObjjvbdbrbkUDjB +DoDLKvbdGYtuAcwb +DncLKvbdePFSjssr +DoDKjvbdRbDdlIxk +DoDKjvbdwzIGGXeS +EPCjjvbdOTUVgEuQ +EPCkKvbdemGWfmJk +EOcLKvbdZQmEhmEq +DoCjjvbdZRMeJNFR +DoCjjvbdvBEZSoEh +DncLKvbdhlFDnVDZ +DoCjjvbdJJdAKPfd +EObjjvbdyYJKCQZk +EObjjvbdRzKITCvA +EPCjjvbdUMVnaWPJ +DoCjjvbdNddThhjd +EOcKjvbdNPwpvOHT +DnbjjvbdZisHpHCG +EObkKvbdGLFScINV +EOcLKvbdbsDLTdJa +EObjjvbdbhlijfWx +DoDLKvbdVZHszLPO +EObjjvbdZnnJFEyj +DoDKjvbdeOeSkTtS +DoDLKvbdkCkjpgUg +EPCjjvbdFejRnJUR +DoCjjvbdZsiIyDrn +DoDLKvbdtunYJqTA +DnbkKvbdoznELXoA +DoCjjvbdZtIiYcsO +EOcLKvbdGGKSOJUR +DoCjjvbdUMWPAuni +DnbkKvbdEPDKkWbd +EPCkKvbdUxhTzLPO +DoDKjvbdGdKvKBij +DncKjvbdmSZUzSci +EPCjjvbdZjShQGaf +DncLKvbdWRmxCElD +EPDLKvbdqvpMDIyR +DncKjvbdCJKakIfK +EPDKjvbdHELWJbKK +DoDKjvbdjlbLzFGo +EPCjjvbdTkvPBWOi +DoCkKvbdJvVGEFGi +EOcLKvbdUyHszLPO +EObjjvbdVBBpsQqy +DnbkKvbdZdxGzhIb +DnbjjvbdsPvOicVf +DoDKjvbdtcCtwWPP +EOcLKvbdwtmFRYkn +EPDKjvbdegjvSNqH +DoDKjvbdIxUBglQp +EOcLKvbdBcpAvKNG +DnbjjvbdwXMAvAvV +DnbkKvbddoEsLUUS +DncKjvbdCIkCKiGK +DoDKjvbdlZTSTYft +EPCjjvbddoEsKtTr +EObjjvbdFfJrOJTq +EPDLKvbdliDsqVSB +DncLKvbdbUagXjtI +EObkKvbdIsYaSlxM +EPCjjvbdHkaznXRL +DnbkKvbdxUmFQyMO +DoCjjvbdWWiXvDdg +EPCjjvbdSQUHKFcw +EPDLKvbdjKGIJlwr +EOcKjvbdXFxytAOs +DncKjvbdmbKWwoNu +EObjjvbdiZuFkpmf +DoCjjvbdFyVVBDwb +DnbjjvbdeqaWzlDP +EPCjjvbdRyjHsDWA +DnbkKvbdqlzJyMHi +DnbkKvbdZRNFImFR +DoCkKvbdYfwEAPSi +DoCjjvbdOAIrsjSA +EPCkKvbdaNLCTVMg +DnbjjvbdqceIomvB +DnbjjvbdsCFlkgLZ +DoDLKvbdmIdURUqa +EOcKjvbdZshhxcrn +DoDKjvbdZjTIPgCG +DncKjvbdemGWfmJk +DnbjjvbdACqxKZiQ +EObkKvbdkVvnEBxX +DncLKvbdUtNTfMWK +EPDLKvbduaDxsPFI +EObkKvbdgQBzvcxI +EObkKvbdSZihTDWA +EOcLKvbdqYnggREY +EPDKjvbdqiAJdmPF +EOcLKvbdiGjDZVjV +EOcLKvbdGZVVAdXb +DoDKjvbdhfjCxuiu +DnbkKvbduMYXBTaX +DoCkKvbdjSziTKiz +DoDKjvbdqlzKZMIJ +DnbjjvbdkVwOEBxX +DoCjjvbddtAUASmW +DoDLKvbdzjVQQESt +EOcLKvbdkySrSyHU +DncLKvbdNGbolotk +DnbjjvbddeOrBwCj +DoDLKvbdiLdcmuDZ +DoDKjvbdSPsfjFdX +DoCkKvbdbUafxKtI +DnbkKvbdcJNJkFvx +EObjjvbdFejSNiUR +EPDKjvbdQmYCYmtz +DncKjvbdfVzwpJzs +EPDKjvbdWRmwbEkc +DncLKvbdFkEsDIMu +DoCjjvbdQccBPqES +EObkKvbdKCibpjCx +EOcKjvbdLBLHNBwq +DoCkKvbdUMWOaVoJ +DoCjjvbdrbFmMGjy +EOcLKvbdJvVFdEgJ +EPCkKvbdjhHMGFnL +DncKjvbdNxOuzcmt +EPDKjvbdEXxLstUM +DoDKjvbdwygfGXeS +EObkKvbdyTNiMrBg +DncKjvbdlZSrSxgU +EPDKjvbdJXtCHlQp +EPCkKvbddndsLTsr +EObjjvbdNdcshhkE +DncLKvbdSCDeLhyL +DncLKvbdNsTvHEuQ +EOcKjvbdACqxKZiQ +DoCjjvbdptTgRqjt +EPDKjvbdOEdTiJLE +DoDKjvbdrpVoKCvG +DnbjjvbdFjeSbhNV +EPCjjvbdNGbolouL +EPDLKvbdrEFIonVa +DnbkKvbdOFDsiIjd +DoCkKvbdTqQoUuIN +EPDKjvbdeOdsKtTr +DncKjvbdyNrhXsIc +EPDKjvbdnQZxujyC +EPCkKvbdYqMdhmFR +DncLKvbddeOrBvbj +DoCjjvbdLGFgbApu +DoCjjvbdemFwHMik +DoCkKvbdRXOEClHc +DoCkKvbdZQmEiNFR +EPCjjvbdEASIlzXX +DnbkKvbdrWokbiZR +EObkKvbdHELWKBij +DnbkKvbdbUagXkUI +EOcKjvbdbsDLUDia +EOcLKvbdUWLojUAq +DnbjjvbdQvmccMID +DoDKjvbdZxcjODMS +EPDKjvbdTulPjUBR +DncLKvbdjSzhsKiz +EOcKjvbdTAFJICOd +DnbkKvbdKNADzHVB +DoCjjvbdliDtRVSB +EObjjvbdWXIxVceH +EPCjjvbdfHkWRnQg +EObkKvbdjAQGaPgK +EObkKvbdkClLRGuH +DncLKvbdZnnIdeZj +EObjjvbdlYsRsYgU +DoDLKvbdpyPHgQcx +DnbjjvbdnPyyWKyC +EObjjvbdQwNcblID +DnbjjvbdCJKajhfK +EPDKjvbdiHKCyWKV +EObjjvbdeEoRavbj +EOcKjvbdmaivwnnV +EOcKjvbdwNWANDeN +EPDKjvbdTAFIhCPE +DoCjjvbdZQleJMeR +EPDKjvbdmtuZjiqf +DnbkKvbdEPCkLXCd +EObkKvbdqGEEsvBI +EOcKjvbdmIdTqVSB +EObjjvbdJTZBSlwl +EPCjjvbdqlzKZMIJ +EPDKjvbduCbtwWOo +EPDLKvbdnPzYukYb +EPDKjvbdeFPSBvbj +EPDLKvbdHEKvKCJj +EPDKjvbdVUNUGLuj +EOcLKvbdJuuGEEgJ +EOcKjvbdzQnmJKXA +EOcLKvbdrbGMkfjy +DnbjjvbdUsltFkuj +DnbkKvbdDxYMUUUM +DnbjjvbdUQpoUuHm +EPDKjvbdRbDdlJZL +DncLKvbdmgFXlmfy +EPCjjvbdJbibqJcY +DoCjjvbdEPDLLWcE +DoDLKvbdMJCMRYAS +DoCkKvbdQZNAGsSK +EObjjvbdiCPDFXQq +EOcLKvbdVwJXvEEg +DoDLKvbdsrqsYzFD +DncLKvbdjuvnDbXw +EPDKjvbdhgKCyWKV +DoDLKvbdNdctIiKd +EObkKvbduaEYrneI +DoCkKvbdNVSrKmAX +DncKjvbdXnRAXtvU +DoDKjvbdhkddNtcZ +DoCkKvbdiBnbdwQq +DnbkKvbdLBLGlawq +DoDKjvbdygZMANEw +DnbkKvbdZsiIxcsO +EObjjvbdiBoDEwRR +DoCjjvbdHbLzEzAD +EPCkKvbdjbkkQgVH +EOcLKvbdsBemLgLZ +EOcLKvbdptUGrRkU +EPCjjvbdznpQdbkx +DoDKjvbdGYtuAdXb +EOcKjvbdzjUpQETU +EOcLKvbdypoNIjXA +DnbkKvbdSQUHJfDw +EPCkKvbdbsCjtEKB +DoDLKvbdajlFoODA +DoDKjvbdelevfmKL +DnbkKvbdCTAbsfWr +DoDKjvbdjhGlGGNk +DoCkKvbddCTMrATm +EPDLKvbdaMjbSuMg +DoCkKvbdKaLHNCYR +DncLKvbdGGKSNiTq +DoCjjvbdLZRJrztf +EPDLKvbdjlakyeGo +EObkKvbdwuMdpyLn +DnbkKvbdegjuqnQg +EPDKjvbdtTSTYydc +EObkKvbdZyDjOClS +DnbkKvbdqGEEtWAh +EOcLKvbdKQydoFnF +EPDLKvbdqUTgSSKt +DnbjjvbdMJCMQxAS +EPCkKvbdiMFDnUby +EOcKjvbdfpBzwEXh +DoCkKvbdSBceMIxk +EObjjvbdfMevgMik +EPCjjvbdjAQHAofj +EPCjjvbdZLrETnMN +EObkKvbdDoDLLXCd +DncLKvbdSZjHsDWA +DnbjjvbdOStVgFVQ +EObkKvbdbhlijfXY +DnbkKvbdjEjftoAO +DoCjjvbdeEnrCXDK +EOcLKvbdZyEKNcMS +EPDKjvbdWSNwadkc +EPCjjvbdkDLjqHUg +DoCkKvbdSCEFLiYk +DncKjvbdtkwwBTaX +EPDKjvbdCTAbsevr +DncLKvbdmfdwlnGy +DncLKvbdTukpJtBR +DoCjjvbdlYrrTZGt +EOcKjvbdnCKWwoOV +DncKjvbdMgColpVL +EPDLKvbddwytURez +DoCkKvbdakLenmcA +EPCkKvbdQvmdCkhD +DncLKvbdEARhlzWw +EOcLKvbdrXQMDJYq +EObkKvbdmJETptrB +EOcKjvbdAMgxsXZx +EPDKjvbdULvPBVni +DoDKjvbdqGEFTvAh +DoDKjvbdGLFTChMu +DoCjjvbdLBKgNCXq +DoCjjvbdOEcsiJLE +EObjjvbdSLZFuHKs +DoCjjvbdtkxXAsaX +DnbjjvbdNGbpNQVL +EOcLKvbdiLeEOUby +EObjjvbdDoCjjwDE +EPCkKvbdxrnJMrCH +EPDKjvbdJTZBTMwl +DncKjvbdBcpBWJlf +DncLKvbdGKdsDHmV +DncLKvbdDwwlUUTl +EPDLKvbdbQHHELzd +EPDLKvbdYlSEUOLm +EObjjvbdhtyeXSUb +EPCjjvbdACqxKZiQ +EObjjvbdrDdiPmua +EPCkKvbdcyxpYYqC +EPDKjvbdrXQLbiZR +DncKjvbdjmBlZeHP +DncKjvbdlYrrTYft +EObkKvbdaaWFFpPw +DncKjvbdwyhGFwdr +EPCkKvbduLxXAtBX +EObjjvbdhancEvpq +DncLKvbdbiMjKevx +DncKjvbdTIyjRABM +DoCkKvbdcImKLFvx +DnbkKvbdZjSgpHBf +EPCkKvbdGdKvJbJj +EOcLKvbdSCDeMIyL +EOcKjvbdZxdJnClS +EOcLKvbdHDkVibJj +DoDKjvbdezuxeJTw +EOcKjvbdqFceUVaI +EPDKjvbdWIYWXfxz +DoDKjvbdNQXqWOHT +DnbkKvbdOStWHEtp +EPDKjvbdLAkGmBxR +EPDKjvbdDxXksssl +EPCkKvbdTqRPVUgm +DoDLKvbdrDdhomvB +DncLKvbdptUGrSKt +EOcKjvbdiBnbeWqR +DoDKjvbdezvYeJUX +DnbkKvbdOAJStJrA +DnbjjvbdtcCuWvPP +DnbjjvbdIjEAKPgE +EObkKvbdWWiXvEEg +DnbkKvbdSBdFMJYk +EOcKjvbdQdCaQQcr +EPDLKvbdLZRKSzuG +DoCkKvbdpfEFTuaI +DnbkKvbdVBBqSqRy +DncLKvbdMoxRVnGs +EOcLKvbduoTzqKnt +DoCjjvbdxxJKCPyk +DncLKvbdVvhwvEFH +EPDLKvbdOYPVzcnU +EOcLKvbdBdPaWJlf +DnbkKvbdJSyAsMwl +DoCkKvbdYTLaMsnx +EOcKjvbdUWLpJsaR +DoCjjvbdhbOcEwRR +DncKjvbdKfGHbAqV +DoCjjvbdlZTSSyGt +DncLKvbdatbGxLTh +EPDLKvbdiGicYvKV +EOcLKvbdTIyjRAAl +EPDKjvbdZsiIyDsO +DnbjjvbdZLqcsmlN +EOcLKvbdeOeTLTtS +DncKjvbdQdCaPqDr +EPCjjvbdUGznLvvF +EObkKvbdrDdhpNvB +EPDLKvbdRadFLhxk +DnbjjvbdhytelQmf +EPDKjvbdFkFSbhNV +DoDKjvbdaSGDHsek +EObkKvbdzHYlAMdw +DnbjjvbdliDsptrB +EPCkKvbdYlSDtNlN +DoDKjvbdnPyxujxb +EObjjvbdRkYfVGjs +EPCjjvbdRaceMJZL +EOcLKvbdnUuZkJrG +DncKjvbdOYOuzdNt +DoCkKvbdJbjDQicY +DnbjjvbdRyjHsCvA +EOcLKvbdUGzmlXVe +EPCjjvbdMoxRWOGs +DncKjvbdlrZUzTEJ +DoCjjvbdJYUBgkpp +EOcLKvbdACrXizJQ +EPDKjvbdsCGMkfkZ +DncKjvbdqYnhGqEY +DncLKvbdjgflFemk +DncKjvbdrzMQTAgn +DoCjjvbdlZTSSxgU +EPDLKvbdKCibqKCx +EOcLKvbdmJDtQuSB +DncLKvbdQcbaPqES +DoCjjvbdOXoVzdNt +EObkKvbdbsCjsdKB +EPDKjvbdySmiMqbH +DoCjjvbdrMzKZLhJ +DncKjvbdtAGqIAAr +EPCjjvbdEXxMTtUM +EOcKjvbdVrOYBdkc +DoDKjvbdzROlhiwA +DncKjvbdqTtHRrLU +DnbkKvbdiUzEwSUb +DoCkKvbdZLqcsnMN +DnbjjvbdUaBqTRRy +DoDKjvbdRosgKGEX +EObkKvbdShzKRABM +DoDLKvbdqZOhHRDx +EPDLKvbdiUzFWqtb +DoCkKvbdZyEJmbkr +DncKjvbdREDBPpdS +EPCjjvbdMSWmZtpz +EPDLKvbdTAEiHaoE +DoDKjvbdNeETiIjd +EOcLKvbdqdFJPmua +DoCkKvbdRpTfjFcw +DncLKvbdznoqEcMY +DoCkKvbdFfJqmiUR +EOcLKvbdSPsfifEX +DnbjjvbdtunYJpsA +EPDKjvbdqcdiQOVa +DnbkKvbdeXyssrFz +EPDLKvbdQYmAGrqj +EObjjvbdegjuqmpg +EOcLKvbdbLLenmcA +EOcLKvbdpyPHgREY +DoDKjvbdZRMdhmEq +DncLKvbddZxoxZRC +EOcKjvbdKxpjSztf +EPDKjvbdKkBHvAJy +EObkKvbdnBiwYOnV +EObkKvbdrWolDJYq +DoCkKvbdZyEJmbkr +DoDKjvbdkDMLRHUg +EPCjjvbdQwNccMID +DncKjvbdSZihSbvA +DncLKvbdnHFXmNgZ +DncKjvbdGKeSbhMu +DncLKvbdULvPAuoJ +EOcLKvbdYqNFJMeR +DoDLKvbdMfcPmQVL +EPDKjvbdFpATWgGZ +EObjjvbdeqaWzkbo +EOcKjvbdZoNhddzK +EObjjvbdFeiqmiTq +DoDKjvbdauBfwjsh +EOcLKvbdBraDUFvr +DoDLKvbdyYIjCPzL +DnbjjvbdmRxuZsEJ +EObjjvbdMfcQMpUk +EOcKjvbdyNsIXrhc +EPDKjvbdREDBPpcr +EPCjjvbdRkYeuGkT +EPCkKvbdtAHRIAAr +DnbkKvbdxUmFQxkn +EObkKvbdtTSTZZdc +EOcKjvbdmIdUQtqa +EOcKjvbdXrkaNUPY +DoDKjvbdCWzdIePv +DoDKjvbdbBVdfQPw +EPCjjvbdZyEJmblS +DncKjvbdlZTRrxft +EPDLKvbdIxUCIMQp +DnbjjvbdKyRKSztf +EOcKjvbdNeEUIhjd +EOcLKvbdjKGIJmXr +DoDLKvbdCEPaVimG +EPCkKvbdOFDsiIkE +EOcLKvbdehKvSORH +DoDKjvbdwWkaWAuu +EPDKjvbdpxoHfpcx +EPDKjvbdJbjCqJbx +DncKjvbdZtJJZETO +EPDLKvbdsZkpTBHn +EPCkKvbdTlWPAuoJ +DoCjjvbdjggMFfOL +DoDKjvbdfMewGlik +EPDLKvbdnBivwoOV +DoCjjvbdwuNEpxkn +DnbkKvbdiifIKNYS +EOcKjvbdKVuFdFGi +EPCjjvbdZdxGzgiC +EOcLKvbduaDxsPEh +EPCkKvbdRotHJfEX +DncLKvbdCIjajhej +DoCkKvbdcImJjfWx +EOcLKvbdKVtecdgJ +DoCjjvbdeFOrBwCj +EPDKjvbdqvpLcIxq +EObjjvbdEARiMyvw +DncKjvbdbUafxLTh +DncLKvbdLAkGmCYR +DoDKjvbdxVMdqYkn +EPDKjvbdWWiYWDdg +EObkKvbdKDJbpjCx +DoCkKvbdnPyxvKyC +DoCkKvbdZsiJYcsO +EObkKvbdJpzFOeme +EOcLKvbdOSsufeUp +DoDLKvbdTfznMWvF +EPDLKvbdfNFwGlik +EPDLKvbdCDpAuilf +EPDKjvbdbiMikGWx +DoCkKvbdrbGMkfjy +DoCjjvbdWIXuxHYz +EPDKjvbdGFiqnIsq +EPDLKvbdNGbpMpVL +EOcLKvbdtSrTYyeD +DoDKjvbdjJfHjNXr +EPCkKvbdzitpPcrt +DoDLKvbdxmrgxSiD +EPDLKvbdcJNKLFvx +EPDLKvbdsrrSxydc +DnbkKvbdqceIonWB +EPCkKvbdZnnIddzK +DoCjjvbdLYpirztf +EPCjjvbdLrWlzUpz +DnbjjvbdRkZGVGjs +EObjjvbdnBivxOmu +DoCjjvbdmIdUQuSB +EObkKvbdtcCtvuoP +DnbjjvbdANIYrvzY +DncKjvbdmaivwoNu +EOcLKvbdrouoJcWG +DoDLKvbdTppoVVIN +DoDLKvbdVUMtFkuj +DncLKvbdznpQdblY +DncKjvbdEPCkLXDE +EOcLKvbdfHkVqmqH +EPDKjvbdapGgDkzd +EPCjjvbdSPsfifDw +DoDLKvbdGKeTDINV +EObjjvbdyqPNIjXA +EPCjjvbdatbGwkUI +DoCjjvbdCTAcTewS +DnbjjvbdxnTIXsJD +EOcKjvbdbKlFnnDA +DncKjvbdjJegjNXr +EObjjvbdMuTRkNAX +EObkKvbdUxgsykOn +DoCkKvbdRaceMIxk +EPDLKvbdJbibpibx +DoDKjvbdEztQdlCi +EPDKjvbdcyyPwyRC +DncKjvbdjlbMZdfo +EPCkKvbdRXNdClID +DncLKvbdtbbuXVoP +DoDKjvbdieLHVPAO +DoDKjvbdFVxopMie +EObjjvbdzoPpdblY +EPCjjvbdmIdUQuSB +EPCkKvbdYkrEUNkm +DoCkKvbdVwIxVdEg +DoCjjvbdOSsvGdtp +EPCjjvbdmSYtysDi +EObkKvbdWWiYVceH +DoDKjvbdrNZixkgi +EPDKjvbdbVCHYKsh +DnbkKvbdjKFgimXr +EPDKjvbdNsUWHFUp +EObkKvbdeAUQlwjG +EOcKjvbdTAEiICPE +DoCkKvbdZLqdUNkm +EOcKjvbdZisHogCG +EPCkKvbdKVtfEEgJ +EObjjvbdaSGDIUGL +EPDKjvbdZRNFIleR +DoDKjvbdyXiJaoyk +EObkKvbdRkYfVHKs +DnbkKvbdLAkHNCXq +DncKjvbdJpyePFnF +EPCkKvbdkHgMFenL +DoDLKvbdOFDtIhkE +DoCkKvbdtTSTZZdc +EOcLKvbdkClKpfuH +DoCjjvbdBcpBVjNG +DnbkKvbdfMfXHNJk +DoDKjvbdBsBCtFvr +DoCjjvbdHgGzYwwg +DncLKvbdSwjkmzkY +DoCkKvbdDihJuwjA +EPDKjvbdQccBPpdS +EPDKjvbdehLVqnQg +DoCjjvbdmozZVkZC +DoDLKvbdaNKasVNH +EObkKvbdrRtkOLBN +DoDKjvbdehLWRnRH +EObkKvbdSCEEkiYk +DoCjjvbdRXOEDMID +EOcKjvbdFejRmiUR +EOcLKvbdFkEsChNV +DncKjvbdWWhwuceH +EPCkKvbdNwoVzdOU +EOcKjvbdePFSkUTr +DoDKjvbdMRwMzUpz +EObjjvbdLrXMzUpz +EPDKjvbdZxdJnDLr +EOcLKvbdrRtkNjaN +EPCkKvbdTvLoitBR +DncKjvbdKeehCApu +EPDLKvbdemFvfljL +DncLKvbdeFOqawCj +DoDKjvbdZyEJnCkr +DoCjjvbdlZTRsZHU +DnbkKvbdRbDdlJZL +DnbjjvbdYqMdiNFR +EObjjvbdSQTfjFdX +DoCjjvbdgFlZnGgA +DoDLKvbdwtldqYkn +EObkKvbdjggLfFmk +DncLKvbdMgCpNPtk +DncKjvbdmpZyWKxb +EPDKjvbdVqnYBeMD +DoDKjvbdULuoBWOi +DncLKvbdezvZEiTw +EPCkKvbdjblLRHUg +EPCjjvbdBiKakJGK +DncKjvbdTukpJtAq +DoCkKvbdkWWnEBxX +EPCjjvbdnPzYvLZC +EOcLKvbdWHxVxGxz +DncLKvbdNsUWHEtp +EObkKvbdHDkWKBij +EObkKvbdVAbQsQrZ +DnbkKvbdKCibqKDY +EObjjvbdLYqKSztf +DoCkKvbdZLrDtOMN +EOcKjvbdemFvgNJk +DncLKvbdiCOcEvpq +DnbkKvbdEXxLtTtM +EObkKvbdFjdrbglu +EObkKvbdmttykJrG +DoCjjvbdePFTLUTr +DoCkKvbdWRmwadlD +DoDLKvbdVqmxCElD +EPCkKvbdnBiwXoOV +DnbjjvbdEvZQPmKF +EObkKvbdSKyGVGkT +EPCjjvbdauBgXkTh +EPCjjvbdVrNxBeLc +EObjjvbdOEcshiLE +DoDLKvbdbLMGPNcA +DnbkKvbddZxpYYqC +DoCkKvbdlZTSTZHU +EObkKvbdtlXwBTaX +EObkKvbdHffyxwxH +EPDKjvbdrpWOicVf +DncKjvbdkVvmdBww +EPDKjvbduaDySoFI +EObkKvbdsZkosBHn +DoDLKvbdTAFJICOd +DnbjjvbdpstHRrLU +DncKjvbdUQqOtuIN +EPDKjvbdVUMtFlWK +DoDLKvbdrouoKDVf +DoCjjvbdmRyUysDi +EPDKjvbdgFkzNgHA +DnbjjvbdZshiZDsO +DnbjjvbdIMBzmwRL +EObjjvbdZshhxdTO +EOcLKvbdZGwEAOri +EPCkKvbdkHflFfOL +DoCkKvbdKDJcQibx +EOcLKvbdFkEsCgmV +EPCjjvbdJutfEEgJ +DoCkKvbdOXnuzdNt +EPDLKvbduLwwAtAw +DoDKjvbdqvpLbiZR +EPCjjvbdGYuVBEXb +EOcLKvbdCJKajhfK +DnbjjvbdkMbLyeGo +EPCkKvbdijGIKMwr +DoDLKvbdJzpGXdAN +DoDKjvbdNwnuzdOU +EOcLKvbdtSqsYyeD +EOcLKvbdmRxuZrdJ +EPDKjvbdhlEcmtcZ +DoCkKvbdbiNJjevx +DoDKjvbdGckVibJj +DoDLKvbdGLFSbhMu +EPDKjvbdEObjkWbd +EObkKvbdBhkBjiGK +EPDKjvbdtAGqIAAr +DoCkKvbdWRmwadkc +EObjjvbdQdDAoqDr +EOcLKvbdwNWANDeN +EPCjjvbdMowqVmgT +EPDLKvbdegkWSNpg +EPDLKvbdjAQHAogK +DoDLKvbdvwLaVaWV +EPCjjvbdLGFgbBQu +DoCjjvbdxsOJMrCH +EObkKvbdFkFTChMu +EObjjvbdbLLenmcA +EPDLKvbdiCObeXRR +EPCjjvbdhbObdvpq +EObkKvbdVZIUZkOn +EPDLKvbdfVzxPizs +EPDKjvbdnPyyVjyC +DncLKvbdRzKITCvA +EOcLKvbdUtMsfLuj +DncKjvbdVBBpsRRy +DnbkKvbdzeZnzdzQ +EOcLKvbdUtNTfMVj +EObjjvbdqcdiQOWB +DoCkKvbdNddTiIjd +DncLKvbdrykosBHn +EPDKjvbdWRnYBeLc +DncLKvbdrXQLcIxq +EPCkKvbdUWLpKTaR +DoCkKvbdZRNFJMeR +EPDLKvbdunszpjoU +DoDKjvbdzitpPdSt +EObkKvbdvBDxrneI +DoDLKvbdVviXvDeH +EPCkKvbdDihJuxKA +EPCkKvbdNPxQunGs +DoCjjvbdmuUzKjRf +DnbkKvbdbPffdLzd +DoDLKvbdXrlBNTnx +DoDKjvbdZQmEhmFR +EObjjvbdmttzLKRf +DoCkKvbddijRvUzn +EPDLKvbdHffyyYXg +EPCkKvbdcTDKtEJa +EPCkKvbdpecdtWAh +DncKjvbdRjxeuGkT +EPCjjvbdqdEhpOVa +EPCjjvbdelfXGmJk +EObkKvbdWWhwudFH +EPDKjvbdhbObeXQq +DoCkKvbdffLynHHA +DnbjjvbdpaJFAXIE +DoDKjvbdqZPIGpcx +DoDLKvbdmaivxPOV +DncKjvbdqFdEsvAh +EPCjjvbdrpWOibvG +EPCkKvbdyfyMAMdw +DoDLKvbdhuZdvqtb +DncLKvbdWRnYBeMD +DncLKvbdDncLKvbd +EObkKvbdhzUfLpnG +EOcLKvbddoFSkTtS +EPDKjvbdbKlFoODA +DoCkKvbdRWmccLhD +EObjjvbdeAUQlxJf +DncLKvbdKVuGEEfi +EObkKvbdVvhwvEEg +EPDLKvbdhaoDEvqR +EPDKjvbdpfEFTvBI +EPCkKvbdyzeNrIJI +DoDLKvbdGckViaij +EObjjvbdnHExNNfy +EObkKvbdZLqdUOLm +DoDLKvbdDxXktTsl +EObkKvbdFVxpPmKF +DoDKjvbdNdctJJLE +DnbkKvbdTXkMNzjx +DncKjvbdbrbkUEKB +DoCkKvbdGKeSbhNV +EPDKjvbdYSkaMtOx +EPCjjvbdiGicYujV +EObjjvbdnHFXmOGy +DoDKjvbdZyDjNblS +EOcLKvbdGYtuBEXb +DnbjjvbdqGDeUWAh +DnbkKvbdTppnuVHm +EOcLKvbdPyNAGsRj +EPCkKvbdIrxaSlxM +DncKjvbdCfkfHAzc +DnbkKvbdIHHZxxXg +EPCjjvbdjKFhKMxS +EOcKjvbdehKvRnRH +EObjjvbdxVMdpyMO +DnbjjvbdSLYetgKs +EObkKvbdRjyGUfkT +DoCjjvbdwyhFeweS +DncLKvbdrJAKElne +EPCjjvbdiGjCxvKV +EPCjjvbdCIjajiFj +DoDLKvbdunszqLPU +DnbjjvbdySmhlrCH +DnbkKvbdnBjWxPNu +DoDKjvbdlhdTqUrB +DoCjjvbdGdKvJajK +EObjjvbdkySqryHU +EPCjjvbdYkqdTmkm +EObkKvbdDnbjkXDE +EPDKjvbdKDKCqKDY +EOcLKvbdeYZstSFz +EPDKjvbdZyDjNbkr +DncLKvbdPyNAGrrK +DoCkKvbdTlVoAuni +DncKjvbdEPCkKvbd +EPCkKvbdcTCkTcjB +DnbkKvbdcJNKLGXY +DnbjjvbdRkYfVHKs +DoDLKvbdaaWEfQQX +EPDKjvbdmbJvwnmu +EOcLKvbdZyDimcMS +DoDLKvbdYkrEUNkm +DoDKjvbdmaivwnmu +DoDLKvbdqYoIHQcx +EPDKjvbdLrWlyuQz +DncLKvbdkCkkQgVH +EObjjvbdrXPlChyR +DoCjjvbdJTYaTMwl +EPCkKvbdNsTvHFVQ +DnbjjvbdeEnqavcK +EPCjjvbdVvhwuceH +EPCkKvbdbLMFoODA +EPDLKvbdCIkCLIfK +DoDLKvbdbLLennDA +DncLKvbdyNrhYTIc +EPDLKvbdNHCpNQUk +DnbkKvbddndsLUTr +DncKjvbdaogHDkzd +EPDLKvbdZjSgpGbG +DnbjjvbdaSGDIUGL +EPCkKvbdjhGlFfNk +EPDLKvbdbKkenmcA +EOcKjvbdIHHZyXxH +DoCjjvbdiUydwRtb +EPDLKvbdauBgYKtI +EPDLKvbdZMSDsmlN +DoDKjvbddneSjtTr +EPCjjvbdJbibqJbx +DnbjjvbdGYtuAcwb +DoDLKvbdsQVoJbvG +DoCkKvbdxmrhXsIc +DoCjjvbdyNsHwsJD +DoCkKvbdKWVFceGi +DoDLKvbdsBfNMGkZ +DnbkKvbdJzoewdAN +EPDKjvbdwzHefYFS +DnbjjvbdBiKbKhej +EOcKjvbdjuvmdCXw +EOcKjvbdbhmKKevx +DoCjjvbdehLWRmpg +EPCjjvbdACrYJzJQ +EOcKjvbdhuZeXSUb +DoCkKvbdJcJbqJcY +EPDKjvbdYqMeJNEq +DncLKvbdmJDtRUqa +EPDKjvbdnBjWxOnV +DoDLKvbdOEctJIkE +DoCjjvbdDxYLtTtM +EOcLKvbdZnnJFFZj +EOcKjvbdKRZeOfNe +DoCjjvbdTukpJtAq +DoDKjvbdhyuGLpnG +DoDKjvbdhtzFWrUb +DnbkKvbdQccBQRDr +EPCjjvbdTukojUBR +EPDKjvbdeKKRvUzn +EOcLKvbdeXzTtSFz +DncKjvbdyTOJNSCH +EObkKvbdjmBkydfo +EPCjjvbdelevflik +DoDKjvbdZtJIxcrn +DoDKjvbdqiAJeNOe +DoCjjvbdddnqavbj +DoCjjvbdZLrDtOMN +EPDKjvbdZyEKNcLr +EObkKvbdMgDPmQVL +EPCjjvbdxrmiMrBg +EObjjvbdZGvdAPSi +EPCkKvbdvvkaWBWV +DncKjvbdfMewHNJk +DoCjjvbdlrYtyrdJ +DncLKvbdiLeDnVCy +DnbjjvbdvwLaWBWV +EOcLKvbdVBCRSprZ +DoDLKvbdYzbfSKVy +DnbkKvbdXrlBNUPY +EObjjvbdKfFhCAqV +DoCkKvbdVTmTekvK +EPDLKvbdaSGChTfL +DncLKvbdauCGwjsh +EObjjvbdBcpBWJlf +DnbjjvbdZjTIQHCG +DoCkKvbdDjHiuxKA +EObkKvbdZxdKNblS +DoDLKvbdptTfrRjt +DoDLKvbdJbjCqKDY +EOcKjvbdEJhKWYKA +DnbkKvbdssSSyZeD +EOcLKvbdZshhyESn +EPDKjvbdRjxfUgKs +DncKjvbdwygefYEr +EPCkKvbdiLeEOVCy +DnbkKvbdTvLojTaR +DoCkKvbdzdzOzdyp +EPDKjvbdVUNUGMWK +EObjjvbdqdEhonVa +EPDKjvbdKefHbAqV +DncKjvbdtSqsYzFD +DoDLKvbdZjTIPgBf +EPCkKvbdRjyFuHLT +EOcKjvbdUtMsfLvK +DoCjjvbdnHEwlnGy +DnbjjvbdURQnttgm +DoCkKvbdFfJrOIsq +DoDLKvbdjKGIKMwr +EOcKjvbdTAEiIBnd +EPDLKvbdFxttaEXb +DoDKjvbdJTZAsNYM +EPCkKvbdFejSNhtR +EPDKjvbdwkXEHzyf +DnbjjvbdbUafxLTh +DoCkKvbdZQleJNEq +EPCjjvbdmpZyVkZC +DnbjjvbdmJEUQuRa +EObkKvbdrEFIpNua +EOcLKvbdJpzEnfNe +DnbjjvbdyTNiMqag +EObjjvbdNQYQvOHT +EPDKjvbdGKdrbgmV +EOcLKvbdCJKakIej +DncLKvbdlhcsptrB +DnbjjvbdZirhPfaf +DncKjvbdZoNiFFZj +EOcLKvbdjuwNcaww +EOcKjvbdUyITzLPO +DnbjjvbdxVMdpyLn +EObjjvbdnCJwXnnV +EPCjjvbdIMBznWqL +EObkKvbdJpzFOenF +EObjjvbdlhdTpuRa +DncLKvbdSCDdkiZL +EObjjvbdZxcimcMS +EOcKjvbdxVMdqZLn +DoCkKvbdrJAKFMne +EObjjvbdXsMAmUPY +EObjjvbdeFOqbWbj +DncKjvbdCTBCsfWr +DoCjjvbdRyjHsCvA +EPDKjvbdziuQQDrt +EOcLKvbdziuPocrt +EPCkKvbdWWhwvEEg +EPCkKvbdeEoRavcK +EPCjjvbdSKyFuGkT +EPCjjvbdrEFIonWB +EObjjvbdrEFIpOVa +DncKjvbdzGyMANEw +EPDKjvbdrRtjmjaN +DoCkKvbdJbjDRKDY +EObkKvbdfNFvgNKL +DnbkKvbdZHWdAPTJ +EPCjjvbdCDoaWKMf +DncLKvbdJKEAKPgE +DnbjjvbdssSTYydc +EOcKjvbdIsYaTNYM +EPCkKvbdgPazvcxI +DoCjjvbdmozYvLYb +DnbkKvbdeATqNYKG +EObjjvbdIwsbIMQp +EPDLKvbdpssfrSKt +EPCkKvbdhzUfLpmf +EOcKjvbdNGcPlpUk +DncLKvbdhkeEOVDZ +EPDKjvbdLFfIBaRV +EPCkKvbdJuuGEFGi +EOcKjvbdRacdlJYk +EPCjjvbdmbKWxOmu +EPDLKvbdwtmFQxkn +DnbjjvbdgvyAzzAJ +EPDKjvbdNrsugFVQ +DncKjvbdmttzLKRf +DnbkKvbdZyEKNcLr +EObkKvbdxrmiNRag +DoDLKvbdiMFDnVCy +EObjjvbdWSNxBdlD +DnbkKvbdCTBDUFwS +DoDKjvbdYTLaMtPY +EOcLKvbdZtIiZDrn +EObjjvbdYzcGSJvZ +EObkKvbdCSaDUFvr +DoCjjvbdTppnuUgm +DoCkKvbdOTUVfduQ +EOcLKvbdfpBzwDwh +DncKjvbdGBPQyJzm +EPCjjvbdVZITyjnn +EObkKvbdVhXuxGxz +EObjjvbdiifHimXr +EPDKjvbdvwMAvAvV +EOcKjvbdkWXODbYX +DoDKjvbdmbKXXnnV +DoDLKvbdZsiJZDrn +DoCkKvbdlrZUzTDi +DoDKjvbdSQTfjGEX +EOcKjvbdqcdiPnWB +EOcLKvbdpssgSSKt +EPDLKvbdhkeENuCy +EPDKjvbdZQmEhmEq +DoDKjvbdZtJIxcrn +DncLKvbdhgJbxujV +DoCkKvbdDoDKkXCd +EObkKvbdZGvdAOsJ +EObkKvbdwjvdHzyf +EPCjjvbdUQpoUuHm +EPDKjvbdUGznMXVe +DnbjjvbduaEYroFI +DoDLKvbdehLWRnRH +DoDLKvbdgQBzwEYI +EObkKvbdbUagYKsh +EObjjvbdyqPMhiwA +EPDKjvbdvvkaWBWV +DnbkKvbdJTYaTNYM +DoDKjvbdZtIhxdSn +EOcLKvbduaEZTOdh +EObjjvbdkNCMZeGo +EPCjjvbdZLqdTnLm +DoCkKvbdUsltFkuj +DncKjvbdnPyyVkZC +DoDLKvbdwjvdHzzG +EPCkKvbdGKdsCgmV +DnbjjvbdiMFDmtby +EObjjvbddneSjtUS +DncLKvbdezvZFJUX +EPCjjvbdhbOcFWqR +DoCkKvbdaMjbTVMg +DoDLKvbdHDjvKCJj +EOcLKvbdpxoIHRDx +DoDKjvbdZshhxcrn +EOcLKvbdcJNKKewY +EObjjvbdTppntuHm +EPCjjvbdemGWfmJk +DoCkKvbdjcLkQftg +EObkKvbdQwODbkgc +EPDLKvbdCTAcUFwS +DnbjjvbdvOszpkPU +EOcKjvbdkClLRHUg +EOcLKvbdNHCpMpVL +EObjjvbdZMRcsnMN +DoCjjvbdpxnggQcx +EOcKjvbdyTOJNRbH +EPDKjvbdeKKRutzn +DncKjvbdrzLosAgn +EPDKjvbdYzcGRjWZ +EPDKjvbdQcbaPpdS +DnbkKvbdtkxXAsaX +DncKjvbdCDpAvKMf +EPDKjvbdHEKvKBjK +EOcKjvbdfpBzvdYI +DncLKvbdiifIJmYS +EPDLKvbddeOqbWbj +DnbkKvbdZyDinDMS +DoDLKvbdkNCLydgP +EOcLKvbddePSCWbj +DnbkKvbdZxcjNcMS +DoCjjvbdQwNccMID +EPDLKvbdiiehKMwr +EOcLKvbdCTBDUFwS +EPDLKvbdbLMGOnDA +EOcLKvbdUMWOaVni +DnbjjvbdyqPMhjXA +DncKjvbdCTAbsewS +DncKjvbdMpYQvOHT +EPDKjvbdTqRPVVIN +DoCjjvbdZxdJnClS +DoCjjvbdWSNwbElD +DnbkKvbdrWokcIxq +EObkKvbdWIYWXgYz +EPDKjvbdzitopDsU +EObjjvbdUVkojUBR +EPDLKvbdEObkLXCd +EOcKjvbdrbFmMHKy +DnbjjvbdehKuqmpg +EOcLKvbdZshiYcrn +DoCjjvbdZnnIdeZj +EOcLKvbdmttzLKRf +EObjjvbdGZUuBDwb +DoCjjvbdHDjvJaij +DnbjjvbdKQzFPGNe +DncKjvbdRbDeMJYk +DoCjjvbdezuyEhsw +DoDKjvbdwkWdHzzG +DncKjvbdEASJMyvw +DncLKvbdyfyMANEw +EPCjjvbdCSaDTfXS +EOcKjvbdCJKajiGK +EObjjvbdrJAKFNOe +DnbjjvbdFWZPoljF +DnbjjvbdmpZyVjyC +EPDKjvbdiifIKNYS +DncKjvbdGAnqYizm +EOcKjvbdiMFEOVDZ +DnbjjvbdJXtBglRQ +DoCkKvbdijGHilwr +DoCjjvbdDwxMUUUM +DoDLKvbdUMWPBVni +EPCjjvbdDwwksssl +DnbkKvbdNeDshhkE +EObkKvbdbAudfQQX +DnbkKvbdwuMdqZLn +DnbjjvbdijGHjNXr +EPCjjvbdOFETiIkE +DoCjjvbdxsOImSCH +DoCkKvbdLiBkqYAS +DncKjvbdFkFTDHmV +DoCjjvbddoErjstS +EObjjvbdyOTIXsIc +DncKjvbdeXzTtSFz +DoCjjvbdqdFIonWB +EPDLKvbdMpYRWNgT +DoDLKvbdfNGXHNJk +EPCjjvbdePErkTsr +DoCjjvbdNHCpNQVL +EObjjvbdsQVnjCuf +DnbjjvbdtcDUwWPP +DoCjjvbduaDySndh +EPDKjvbdqZPIGqDx +EObjjvbdijFgimYS +DncKjvbdZyEJmblS +DoDKjvbdirziSkJz +DncLKvbdeOeTKtTr +EOcKjvbdfpBzwEYI +DnbkKvbdezvZFItX +EPCjjvbdrRuLOKaN +DncLKvbdbrbjscjB +EObkKvbddBrlrAUN +EPDKjvbdZoOIdeZj +EOcKjvbdGYuUaEYC +EPCkKvbdNxPVzdNt +EOcLKvbdhlFDmuDZ +DncKjvbdKVtecdgJ +EPDLKvbdqlzJxkhJ +EOcKjvbdySmhlqbH +EPCkKvbdxsNiNRag +EPDKjvbdTYKkmzjx +EObkKvbdIryBTMxM +EPDLKvbdxnShXsIc +EPCjjvbdaSFbhUGL +EObjjvbdRDbaQQdS +EObkKvbdrbFmMGkZ +EPCkKvbdWXJXudEg +EOcLKvbdcJNKKfXY +DncKjvbdEuxpPljF +DncKjvbddCTNSATm +EOcLKvbdFVyQPmKF +EPCkKvbdpeceUWBI +DoDLKvbdVTmUGMWK +DoCjjvbdFyVVBEXb +EOcLKvbdTukpKTaR +DncLKvbdDHLegAzc +EPCjjvbddxZtTrFz +DncKjvbdssRsZZeD +DoDKjvbdeOeSjstS +DoDKjvbdQdDApQcr +DncLKvbdURQoUuIN +DnbkKvbdezuxdiUX +EPCjjvbdbPgHDkzd +EOcKjvbdFWZQQMjF +DoDKjvbdMfcQMotk +EPCjjvbdrWokbiYq +DoDKjvbdnGdwmOGy +EOcKjvbdnBjXYOmu +EOcLKvbdDoCjjvbd +DoDLKvbdsQVoJbuf +EObkKvbdZirhQHBf +EPCkKvbdIGgZxwwg +DncLKvbdrMzKZMIJ +DnbkKvbdkHflFemk +EObkKvbdfHkWSORH +DnbkKvbdwygfGYEr +EOcKjvbdxmrgxTJD +DnbjjvbdGdLViaij +DoDKjvbdmSYtysEJ +EObkKvbdfILVqmpg +DncLKvbdADSXizIp +DoCjjvbdznpQdbkx +DncLKvbdmbKWxOnV +EPCkKvbdJvUfEEfi +EOcLKvbdcScLTdJa +DnbjjvbdQcbaPpdS +EPDKjvbdDoDKjvcE +DncKjvbdhzUfMROG +DncKjvbdbrcKtDia +EOcLKvbdJpydoFme +DnbjjvbdxLWdHzyf +EPCjjvbdwuMeQyMO +EOcLKvbdiifHimXr +EOcLKvbdySmiNSCH +EPCjjvbdznopeCkx +EPDLKvbdZshhyESn +DoDLKvbdrDeJQNvB +DoDLKvbdILaznXQk +DoCjjvbdnUtzKiqf +DnbkKvbdjJehKMwr +EOcLKvbdDxXlUUUM +DoCkKvbdtSqsYyeD +DoDKjvbdxVMeQxlO +EPDLKvbdZjTHofaf +EObkKvbdZisHogBf +DnbkKvbdnBiwXoOV +DoCkKvbdYSkaMtPY +DncLKvbdHELVibKK +EPCkKvbdhlEcnVCy +EPCkKvbdZLqdTnMN +DoDKjvbdbsCkUEKB +EPCkKvbdMpYRVnHT +EOcLKvbdFWZQPljF +DoDLKvbdznoqEcLx +DnbkKvbdcImJjewY +EPCkKvbdvvlBVaWV +DoCkKvbdmIdTqUrB +DncKjvbdxZgeexFS +EOcLKvbdrouoJbvG +DoCkKvbdWRnYBdlD +DoCkKvbdBhjbLJFj +DnbjjvbdrouoKDWG +DoDKjvbdUxgsyjnn +DoDLKvbdakMFnnDA +EOcLKvbdZtJJYcsO +DncLKvbdrbFllHKy +EPCjjvbdmajXXnmu +DncLKvbdpyPHgQdY +EObjjvbdyNrgwsJD +EPCjjvbdaMjaruMg +DncLKvbdYfwEAPTJ +DoDKjvbdbiNKLFvx +DoCjjvbdajkfOnDA +EObjjvbdZoOJEeZj +EOcKjvbdqZOhGqEY +EOcKjvbdziuPodTU +DoDKjvbduLxWaUBX +EObkKvbdyXhjBoyk +DoDKjvbdTkunaWPJ +EObkKvbdBraCsfXS +DoDLKvbdTAEiICPE +DnbkKvbdDjHjVwjA +EOcKjvbdqlzKZLhJ +EObkKvbddneTLTsr +EObkKvbdWRmwaeMD +DoDLKvbdLBLHNBwq +DoDLKvbdUxhUZkPO +DncKjvbdYlSDsmkm +DoCkKvbdxZhGFwdr +EObjjvbdbsDKsdJa +EPCkKvbdGYuVAdYC +EObkKvbdRXNccLhD +DnbjjvbdFVxpQMjF +DoDLKvbdMgDQNPtk +EObkKvbdQvmccMHc +DncKjvbdMpXqVnHT +DoCjjvbddZxoxYqC +DncKjvbdnVUzKjRf +DoCjjvbdEuyQPmKF +DoDKjvbdLYqKSzuG +EPDLKvbdTAFJICOd +DoCjjvbdCJLCKiFj +EOcLKvbdFyVVAcwb +DoCjjvbdbQHHDkzd +DoCkKvbdNrsvGduQ +DnbjjvbdRWmcblID +DnbkKvbdQvnEDLgc +DnbjjvbdVZITzKnn +EPDLKvbdxxJJaoyk +EObkKvbddoEsLUTr +DncLKvbdZQldhldq +DoDLKvbddCSmSAUN +DoDLKvbdYpldhldq +DoDLKvbdDxXlUTsl +EPCkKvbdnGdxMmfy +DncKjvbdwWlBWAuu +EOcLKvbdkDMKpgUg +DoDLKvbdZshiYdSn +EPDLKvbdhfjCyWKV +EObjjvbdKRZeOeme +DoCkKvbdznopdcLx +EPCkKvbdZMSDsnMN +DnbkKvbdkWWmcbXw +EObjjvbdpxoHfqEY +DnbkKvbdtlYXAsaX +EPDLKvbdjvXNcaww +EPDLKvbduDDVXVoP +DoDKjvbdLGFgbBQu +EObjjvbdmuUzLKRf +EObjjvbdRaceMIyL +EPDLKvbdiHKCyVjV +DoCkKvbdxnTHwriD +EOcLKvbdZjTIPgCG +DncLKvbdBcpBVjNG +EPDLKvbdVwIxVceH +DoCkKvbdkIGkeemk +DnbkKvbdozmdKxPA +DoDKjvbdjuwNdCXw +DoCkKvbdeEoSCXCj +EPCkKvbdcScKtEJa +EPDLKvbdySnIlrBg +EPCjjvbdnQZyVkYb +DoDLKvbdqYnggREY +EObkKvbdBsBDUGXS +DnbkKvbdUWLoitAq +DoCkKvbdIGgZxxYH +DoDLKvbdvwLaWBVu +EObjjvbdmfeXlnHZ +EPDLKvbdRXNdDMID +EPCjjvbdZLrDsmkm +EOcKjvbdUQpoUuHm +DnbkKvbdEzsqFMDJ +EOcLKvbdQlwayOUz +EPDKjvbdyzdnRhJI +DoDLKvbdwzHfGXeS +EOcKjvbdTvMPitBR +EOcKjvbdJbicRJcY +DoDLKvbdFVxpQNJe +DoDLKvbduLxXBTaX +DoCjjvbdLYpirzuG +DnbjjvbdvwMAvBWV +EPCkKvbdBiKbKiFj +DncLKvbdIryArmYM +DncKjvbdySmiNRag +DncKjvbdeEoRbWbj +DoDLKvbdjuwOECXw +EPDLKvbdFWZPomJe +EObkKvbdjcMLRGtg +DncLKvbdQwNccMHc +EPDLKvbdzQoMiJwA +DoDKjvbdmSYtzSdJ +EOcLKvbdelfWgMjL +EOcLKvbdiMFENuCy +EPCkKvbdezvZEhsw +EPDLKvbdUVlPisaR +EPDKjvbdbKlGOmcA +EObkKvbdzGyMANEw +DoDKjvbdXFxzUAPT +EPDLKvbdqrUkNkAm +EOcKjvbdPxmAGsSK +EOcLKvbdyfyMAMeX +EObjjvbduDDUwVoP +DncLKvbdyYJJbQZk +DoDLKvbdxVNEqYkn +EPCjjvbdNPxRWOHT +EObkKvbdYqNEiNEq +EPDKjvbdXrlAlsoY +EPDLKvbdbrcKtEJa +EObjjvbdGdKvJbJj +DoCjjvbdrDeJPnVa +DoDKjvbdZLrETnMN +DoDKjvbdKVuGDeGi +DoCkKvbdZtJIyETO +EObjjvbdYSlAlsoY +DoDLKvbdCSaDUGWr +EObjjvbdmfeYNNgZ +DoDKjvbdtumwiqTA +DncKjvbdqFdEtWAh +EPCkKvbdauCHXjtI +DnbjjvbdvOszqKoU +EOcKjvbdxrnImSBg +DoCkKvbdjvWmdBww +EPCjjvbdmuUzKiqf +EObjjvbdNdcsiIjd +EOcLKvbdNPxRVnGs +EObkKvbdSPsgKFdX +EPDLKvbdVAbQsQqy +EPDKjvbdVZHsyjoO +DncKjvbdJzofXdAN +EObkKvbdFjeTChNV +DnbjjvbdjJegjNXr +DnbkKvbdZLrDsnLm +DnbjjvbdbAueGQQX +DncLKvbdQcbaQQdS +DnbjjvbdFjdrbglu +DncLKvbdAMgxsWyx +DnbjjvbdRpUHKGDw +DncLKvbdMfcPlpVL +EObjjvbdIwtBhMRQ +EPCkKvbdelfXGmKL +DoDLKvbdFkErbhMu +EPCjjvbdHffyyYXg +DoDKjvbdOEctJIkE +DoCkKvbdKkAgvAKZ +EObjjvbdzitopDsU +EPCjjvbdRpUHJfEX +DoCkKvbdZLrDtNkm +EPCkKvbdijGIKNXr +DoCjjvbdxUmEpxlO +DnbjjvbdIxTbIMRQ +EPCkKvbdMfbpMotk +DncLKvbdjlbLzFGo +EObkKvbdrRtkNjaN +DnbkKvbdRosgKFcw +EPDLKvbdpfDeUWAh +DnbkKvbdkxsRryHU +EPCkKvbdkVvmcbXw +EOcKjvbdhficZWJu +EPDKjvbdCEQBWKMf +DoCjjvbdUyITzKoO +DnbjjvbdaNKbStmH +EPDLKvbdFWYpQMie +EObjjvbdhytekqNf +EObjjvbdeXyssqez +DnbkKvbdLAjgNCYR +DncKjvbdSBdFLiZL +EPDKjvbdBhkBjiGK +DoDKjvbdmajWxOmu +DoCjjvbdrMzJyMHi +DoDKjvbdZLqctOMN +EOcKjvbdnPzYujxb +DncKjvbddoFTKstS +DncLKvbdjcMLRGuH +DoCkKvbdbUagYKtI +DncLKvbdVAaqTRSZ +EPCjjvbdOEdTiJLE +EPCjjvbdJvUfEFHJ +DnbjjvbdIryBTNYM +EPDKjvbdYpleJNEq +DncKjvbdZGwEAOri +DncLKvbdBdQAvJmG +DoCkKvbdmIdTqUqa +EPCkKvbdtcCuWuno +EPCjjvbdmuUyjjSG +DncLKvbdjAQHApHK +EPCjjvbdGdKujBjK +EPDKjvbdYkrETmlN +DncKjvbdYORAYUut +DnbkKvbdiHKCxvJu +EPCjjvbdkHgLfGOL +DoCjjvbdpssfqqkU +EPDKjvbdZnmheEzK +EPDLKvbdySmhlrCH +EPCkKvbdjJegilxS +DoCkKvbdqcdhpNua +EPDKjvbdIHHZyXxH +DnbjjvbdjmBkydgP +DoCjjvbdYkqcsnLm +EPCkKvbdZnmhdeZj +EPDLKvbdDjIJuwjA +EOcLKvbdnQZxvKyC +EPCkKvbdBhkCKiGK +DnbjjvbdYkrDsnMN +DncLKvbdyzeNqghh +DncLKvbdrRuKmjaN +EPCjjvbdssRsYzEc +DoDLKvbdZQleJNFR +EObjjvbdZQleJMeR +EPDKjvbdtvNxJqTA +EObjjvbdbBWFGPpX +EPDLKvbdajkeoODA +EPDLKvbdSZihTCvA +EObkKvbdZMRdTnMN +EPCkKvbdsCFmLgKy +EObjjvbdVvhxVceH +EPCkKvbdaaVeFpQX +DoCjjvbdZQmEhleR +EOcKjvbdhzUfLpmf +EPCkKvbdREDBQRDr +DncLKvbdemFwHNJk +EOcKjvbdGAnqYizm +DncLKvbdtTRsZZdc +DoDLKvbdGGKRmhtR +DoDLKvbdIidAJogE +DoCkKvbdxZhGFxEr +DncLKvbdpxoHgREY +DnbjjvbdQcbaQRES +EPDKjvbdjAPfaPgK +EPCkKvbdvwMAuaWV +EOcKjvbdZLrDsnMN +DncKjvbdyqOlhiwA +EObkKvbdRacdkiYk +DoDKjvbdUWMQJsaR +EPDKjvbdUGzmkvvF +DoCjjvbdhbPDFXRR +EObjjvbdXGZZtAPT +EPCjjvbdMoxRWNgT +EOcKjvbdGFiqmhtR +DoCkKvbdNPxRWNgT +EObkKvbdyNrgxTJD +EPDKjvbdrXPkcJYq +EOcLKvbdFjeTChMu +DncKjvbdjvXNcaww +DncKjvbdkMbMZdgP +EOcKjvbdDnbkLXDE +EObjjvbdbBWFGPow +DoCjjvbdAMhZSwZx +EPDLKvbdZRNEiMeR +DoDKjvbdqdEiQNvB +DoCkKvbddePRavbj +EPDKjvbdaMjbStlg +EObkKvbdHgGyxxYH +EOcKjvbdtkxXBUAw +DnbjjvbdmSZUysEJ +EObkKvbdrXQLbhxq +EObkKvbdVTlsfMWK +DoDKjvbdSLZGUfjs +DoCkKvbdFVyPpMjF +DoCjjvbdhgKCyViu +EPCkKvbdZMSDtOLm +EPCjjvbdySmhlqag +EPDKjvbdWRmwadlD +EPCjjvbdqZPHfpdY +DoDLKvbdXsMBMsoY +DncLKvbdelewHMjL +EObjjvbdYpleImEq +DoDKjvbdZirgogBf +EOcLKvbdrXPlChxq +EPCkKvbdFVxpQMie +DoCkKvbdrNZjZMHi +EOcKjvbdDjIJuxKA +DncLKvbdeOeSkTsr +DoCjjvbdZoNhddyj +DoDKjvbdkWXNcaxX +DoDLKvbdTpqOtthN +DnbjjvbdehKuqnQg +EPCjjvbdmgFXlmfy +DncLKvbdShyiqAAl +EOcKjvbdKaKgNBwq +EPDKjvbdEztREkbi +EOcKjvbdVviXvEFH +EPDKjvbdcIlikGWx +EPCkKvbdUWLojUAq +EPDLKvbdOStWHEtp +DoCjjvbdHlBzmwRL +DnbjjvbdWIYVxHYz +EPDLKvbdADSXjZhp +EPDKjvbdRzJgrcWA +EObkKvbdxrnIlqag +EObjjvbdRosgKFcw +DoDKjvbdkySrTYgU +DncKjvbdsrqrxydc +EPDLKvbdZyEKODLr +EPCjjvbdEXxMUUTl +EOcKjvbdtcCtwWOo +DncLKvbddndrkTtS +EPDKjvbdrafMkfjy +EPCjjvbdJcJbpibx +EObkKvbdFfJqnIsq +EPCkKvbdyNsHwriD +DoCjjvbdaRebgsfL +DnbjjvbduoTzpjnt +EPCjjvbdZGvdAOsJ +DoDKjvbdmozYujyC +EPDKjvbdZGvdAPSi +DnbjjvbdmSYtzTDi +DoCjjvbdRotGjFdX +EObkKvbdSBceLhxk +DoCjjvbddijRvUzn +EObkKvbdMgDQNPtk +DoCkKvbdFVxoomKF +DncKjvbdGcjujBjK +EPDKjvbdBcpAvJlf +DncLKvbdLBLHNCYR +EObkKvbdmIctQtrB +DoDLKvbdFpATXGey +EPCkKvbdbrbkUDjB +DncLKvbdcTCjtEJa +DncLKvbdBsAbsfXS +EPDKjvbdFpATXGfZ +DoDKjvbdwuMeQxlO +EObkKvbdqUUGqrKt +DncKjvbdZyEKODLr +EPDKjvbdjhHLefNk +EPCkKvbdrbFmMGjy +DoCkKvbdsQWOjCvG +DoCjjvbdLBLHMbXq +EObjjvbdrpVnicVf +EPCjjvbdVqmwaeMD +DncLKvbdRNYCYnUz +EObjjvbdRXNdCkhD +DncKjvbdIHHZyYXg +DnbjjvbdyTOJMrCH +DoDLKvbdUsmUFkuj +DncKjvbdQcbaPqES +DnbkKvbdmgFYNNgZ +EOcKjvbdkySrTYgU +DoCjjvbdHlBzmwQk +DnbjjvbdaSFcITek +EObjjvbdQdCaPqDr +DncKjvbdxVMdpyLn +EOcKjvbdiMEdOVCy +DoCjjvbdRosgJecw +DncLKvbdkDMLQftg +EPCkKvbdKDKCqKDY +DoCjjvbdjvWnDaww +EOcLKvbduVnYJpsA +DoDLKvbdWRnYBdlD +DoDKjvbdssSSxzFD +EPDLKvbdJYTaglRQ +EOcLKvbdhzUfLpmf +DoDLKvbdJutfDdgJ +EOcKjvbdxmrgwrhc +EObkKvbdwWkaVaVu +EOcKjvbdxrmiMrBg +DoDKjvbdRDcApRES +DoCjjvbddjJrVtzn +EOcKjvbdxVNEqYlO +DoCjjvbdJJdAJofd +DoDLKvbdemGWfmJk +EOcKjvbdnPyyWKyC +DoCjjvbdbrcLTcia +DoDKjvbdjuvmdCXw +DncLKvbdtkwvaUAw +EOcKjvbdHDkViaij +EObkKvbdRDbaPpcr +EOcLKvbdtSqryZeD +EOcKjvbdrRuLOKaN +EOcKjvbdczYowyRC +DnbkKvbdjcMLQfuH +DncKjvbdmbJwYOnV +EPDLKvbdZnmiFEzK +EPDKjvbdjbkkQgVH +EObkKvbdJTZArmYM +DncKjvbdSPsgJfEX +DncLKvbduMYXBUBX +EObkKvbdkIHMFfOL +EOcKjvbdYORAYVWU +DoCjjvbdyzdmqghh +DncLKvbdtumwiqTA +EPDKjvbdQmYCZOUz +DoCjjvbdtcCtvvPP +EObjjvbdVTmUGMVj +EObkKvbdBsAcUGXS +DoCjjvbdqYngfqDx +EPCkKvbdtkxXBTaX +DoDLKvbdACqwiyhp +DncKjvbdraelkgKy +EPDKjvbduLwvaUBX +DncKjvbdpssgSSLU +EPCjjvbdIxTbHlRQ +EPDKjvbdPyNAGrqj +DoDLKvbdnCJvxOnV +EObkKvbdZRNFJNEq +DoCjjvbdFxuVBEYC +EOcKjvbdVAbRSpqy +DnbjjvbdJbibqKDY +DoDLKvbdKCicQjCx +EPCjjvbdNrtVgFUp +EOcLKvbdZQleJNEq +DoDLKvbdaRebgsfL +DoCkKvbdCIjakIej +EOcLKvbdBraDUGWr +EPDLKvbdADRxKZiQ +DoCjjvbdHkazmvpk +EPDKjvbdUsltGLvK +EOcKjvbdTkvOaVoJ +DncLKvbdZnmiEdyj +DoDKjvbdZtJJYdSn +DoDLKvbdbiNJjfWx +DnbjjvbdIsZBTNYM +EPCkKvbdhbPDEvpq +DncKjvbdqlyjYlIJ +DoCkKvbdbsDLTcia +DoDKjvbdKCjCqKCx +DoDLKvbdnBiwYOmu +DnbkKvbdjKGIKMwr +EPCjjvbdHgGyxxYH +EOcLKvbdcyxpXxqC +DncLKvbdlZSrSyGt +EPCjjvbdTAFIhCPE +EObkKvbdZdwfzgiC +DoDLKvbdSLYfUgLT +DoCjjvbdRMwayNtz +DnbjjvbdCflGHAzc +DoCjjvbdrJAKFNOe +EPCjjvbdjblKpgUg +EPDLKvbdQccAoqDr +DnbjjvbdCJKbKhfK +EPDLKvbdiGibyWJu +EOcLKvbdyNsHxShc +EPDLKvbdmIcspuSB +DnbjjvbdnGdxNOHZ +DoCkKvbdhzVGMRNf +DoDLKvbdeFPRawDK +EObjjvbdsQWOjCvG +EObkKvbdhzUelQmf +EObkKvbdeJirWUzn +DncLKvbdxxIibPzL +EObkKvbdSBceMIxk +DoCkKvbdehKvRmqH +EObjjvbdRbDeLiZL +EObjjvbdGYtuAdYC +DnbjjvbdHDkVibKK +DoCjjvbdKQyeOfNe +DoCkKvbdmbJvxOmu +DoCkKvbdULvOaWPJ +DncLKvbdrWpMCiZR +EObjjvbdhytfLqNf +DoCjjvbdgPazvdXh +DoCjjvbdiHKDYuiu +EPDKjvbdRWnDbkhD +DncLKvbdrMzKZLhJ +EObkKvbdyXhiaoyk +EPCkKvbdjmCLydfo +DnbkKvbdDxYMUTsl +EPDKjvbdxmrgxSiD +DnbkKvbdmSYtyrci +EPCjjvbdqvokcIxq +DoDLKvbdXsMAmUPY +DncKjvbdDoDKkWcE +EPCkKvbdMgDPmQUk +DoDLKvbdKyQirztf +EPCjjvbdmajWwnmu +EOcLKvbddCSlrATm +EPDLKvbdrJAKElne +DoCkKvbdIsZBTMxM +DnbkKvbdffMZnGgA +EOcKjvbdJcKDQjDY +EObjjvbdxsOJMrCH +EObkKvbdEKHiuwjA +DncKjvbdunszpjnt +DoDLKvbdZjTIQHCG +DnbjjvbdsQVnibvG +DnbkKvbdGQATXHGZ +DnbkKvbdBsBDTfXS +DoCkKvbdBsAbsevr +DoCkKvbdRXNdDLhD +EPCjjvbdRadElJZL +DnbkKvbdxwhibPzL +EOcKjvbdCJLBjiFj +DncLKvbdZMSDsmkm +DoDKjvbduaEZSoFI +EPCjjvbdhgJbxujV +EOcLKvbdCJLBjhfK +DoCkKvbdZisHpHBf +DoCkKvbdqFdFUWBI +EPCkKvbdDGlFgAzc +DncKjvbdZxcjNblS +EPDLKvbdLqvmZuQz +DoDKjvbdxZhGFxFS +EObkKvbdZdxGzhIb +DoDLKvbdqwQMChyR +DoCkKvbdjlalZeGo +DncKjvbdZRNEhldq +EPCkKvbdZHXEAPSi +DoDKjvbdDoDLKwCd +DnbkKvbdmbJwYPNu +DncKjvbdMfcPlouL +DoCkKvbdQwODblHc +DoCjjvbdNQYQunGs +DnbjjvbdlqxtzSci +EOcLKvbdrDdhpNua +DncLKvbdKefICApu +EPDKjvbdatagXkUI +DoCjjvbdaofgDkzd +EObkKvbdIrxaTMwl +DncLKvbdSLYfVGkT +EPCkKvbdelevfmKL +DncKjvbdFfKSOIsq +EObjjvbdfILVqnQg +DncLKvbdZjShPgCG +DoCjjvbdrNZixlHi +DnbkKvbddoFTKstS +EOcKjvbdWSNwbFMD +EPDLKvbdpxngfqDx +EOcKjvbdIHGyxxYH +EOcLKvbdvwMAuaVu +EOcKjvbdkxrqryGt +DncLKvbdZjShQHBf +DnbjjvbdiUzEvquC +EObkKvbdpxoHfpcx +DoCkKvbdGAoRZJzm +EOcKjvbdehLVrOQg +EPDKjvbdkDMLRGuH +DnbkKvbdKCjDRKDY +EPCjjvbdLGFhBaRV +EPDLKvbdaMjbSuNH +DncKjvbdWfYzUAOs +DoCjjvbdsBelkfjy +DncLKvbdZnmheFZj +EOcLKvbdatagYLUI +EObkKvbdWXJXvEEg +DoDKjvbdZMRdTmlN +EPCjjvbdWXIwvEEg +DoCjjvbdkCkjqHUg +EPCjjvbdijFhJlxS +EPDKjvbdmSZUysEJ +DoDKjvbdMgDQMouL +EPCkKvbdrDdhomvB +EPCjjvbdRNXbYmtz +EPCkKvbdUtMtFlWK +DnbjjvbdGcjvJajK +EPDKjvbduaDyTOeI +DncLKvbdziuPocrt +DoCjjvbdcScKscjB +DncKjvbdmgExMmfy +EObjjvbdJcJcQibx +EPDKjvbdMpXpvNfs +EObkKvbdyqPNIjXA +EPCjjvbdCSaDUGWr +EOcKjvbdZnnJFEyj +EObkKvbdyOSgwriD +EPCjjvbdtkwwAtBX +DnbkKvbdDncLLXDE +EOcKjvbdZshhxcsO +DoCjjvbdxVMdpxlO +DncKjvbdLGGHaaQu +DoCkKvbdxUmFQyMO +EPDKjvbdpfEEsvAh +DoCkKvbdZRMdhldq +EPDLKvbdYzberJuy +EObjjvbdfHkWSOQg +EPDLKvbdRMxByNtz +DncLKvbdmoyyWLZC +EObkKvbdhtydvrVC +DoCkKvbdVhYWYGxz +EPDKjvbdbVCHXjsh +EPCkKvbdTlWPBVni +DncLKvbdFkEsCgmV +DnbkKvbdIsYaSlxM +DncKjvbdzaAOffbM +DncLKvbdaSFcHtGL +DoDLKvbdiGjDYuiu +EObjjvbdDigjVwjA +DncKjvbdqmZixlIJ +DnbkKvbdRjxfUgLT +EObkKvbdeAURNYKG +EPCjjvbdjvWnECXw +EPCjjvbdNQXqVmgT +DoDLKvbdxmsHxShc +EPCkKvbdqwPlChxq +DnbjjvbduLwwAsaX +DncKjvbduCbuWuno +DnbkKvbdJpydnenF +EPDLKvbdRXOEClID +DncKjvbdSKyFuGkT +DncKjvbdczZQYZRC +EPCkKvbdGZUtaDxC +EPCjjvbdOAJTUKSA +DnbkKvbdsZlQSaHn +DncKjvbduWNwiqTA +DoDLKvbdRNYCZOUz +DoCkKvbdVTmTfMVj +EOcLKvbdeATpmYJf +DncKjvbdbUbGxKsh +DnbkKvbdLZRKSztf +DncKjvbdcJMjLFwY +DnbkKvbdRadEkhyL +EPCkKvbdauBgXkTh +EObkKvbdrJAKFNOe +EOcKjvbdDnbjkXDE +DoDKjvbdrafMlGjy +EOcLKvbdliDtRVRa +EObjjvbdZjShQHCG +DnbjjvbdZnmiFEyj +EPDKjvbdbAueFpQX +EPCjjvbdVwJYVcdg +EObkKvbdijGIJmYS +DoCjjvbdJpyeOenF +DoDKjvbdYlSDsnMN +DncLKvbdehLVqmqH +DnbjjvbdTppnuVHm +EOcKjvbdSLYetgLT +EPCkKvbdZyEKOClS +DoDKjvbdHDjujBij +EPCkKvbdHkazmvpk +EObkKvbdkxrrTYft +EPCjjvbdOTUVfeVQ +DoCjjvbdYzbfSKWZ +DncKjvbdkxrrSxgU +EObjjvbdEOcKkXCd +EPDKjvbdcTCkTcia +DoDKjvbdatagXkTh +DoDLKvbdNHCpMpUk +DoDKjvbdhtzEvquC +EPCjjvbddePSBvbj +DoDLKvbddneTLUUS +DncLKvbdijFhKMwr +EPDLKvbdpxoIHRDx +DncLKvbdqquLOKaN +EPCkKvbdSCEEkiZL +DoDLKvbdvAdYroEh +DncLKvbdDwwksstM +EOcKjvbdKWVFcdgJ +EPDKjvbdZnmhdeZj +DoCjjvbdJSyBTMxM +DoDLKvbdtcDVXVoP +EOcLKvbdbAudfPow +EPCjjvbdpfDdtWAh +DncKjvbduCcUwWOo +DnbjjvbdGFirOItR +DnbjjvbdLBKgNBxR +DnbjjvbduVnYJpsA +DnbjjvbdjuvnDbXw +DoDKjvbdFkFTDINV +EOcKjvbdEvZQQMie +DoCkKvbdMfbolpUk +EPCjjvbdhbPCdwQq +DoDKjvbdZyEKNblS +EPCjjvbduCbtwWPP +DnbjjvbdgLGzbfAE +EObjjvbdqGDdsvAh +EPDLKvbdNGbolotk +DoCkKvbdSPsfifEX +DncLKvbdbVCGwjsh +EObkKvbdijGHjMwr +DnbjjvbdRosfifDw +DoCjjvbdQccApRDr +DoDKjvbdqTtHSSKt +EOcLKvbdsQWPJcVf +EObkKvbdeOdsLTsr +DncLKvbdcTDLUDjB +DoDKjvbdVgwvXfxz +EOcKjvbduoTzqKnt +EPCjjvbdYNqAYVWU +EObjjvbdemGXGmJk +DoCkKvbdVgxWXfxz +DoCjjvbdqlzKZLgi +EPDLKvbdLFfHaaQu +DnbkKvbdcSbkTcjB +EObjjvbdgGLzNgHA +EObjjvbdZjSgpGbG +DnbjjvbdGckVjBij +EOcLKvbdUMVnaWOi +EObkKvbdrylQSaHn +EPDLKvbdZHWdAOri +DoDKjvbdyfxlAMdw +DnbjjvbdZMSDsnLm +DoDKjvbdOTUVgEtp +DnbkKvbdJSxaSlwl +DncKjvbdkNCLzFGo +DoDKjvbdfMevgMik +DnbjjvbdMgDPlpVL +DncKjvbdqquLOLAm +DoCkKvbdfNFwGlik +DncLKvbdpxnhHRDx +DoDLKvbdZMRdTmlN +EPCkKvbdURRPVVHm +EPCkKvbdmgEwmOHZ +EOcLKvbdVAapsRSZ +DoCjjvbdczZPwxpb +EPDLKvbdWXIxWDdg +EPCkKvbdUVlQJtBR +EOcKjvbdelfWgNJk +EPDKjvbdUtMtFkuj +DnbjjvbdRkZFtfjs +EObkKvbdCJLCLJGK +DoDLKvbdKVuGEEgJ +DncKjvbdIxTbHkqQ +DncLKvbdMSWlzUpz +EPCkKvbdKefICAqV +EOcKjvbdtunXjRTA +DoDLKvbdZMSETmlN +EObkKvbdapHHELzd +EObkKvbdmRxtyrdJ +DoCjjvbdtTSSxzEc +EObjjvbddeOrBvbj +DncLKvbdJYUBgkpp +EPCjjvbduLxXBUAw +DnbjjvbdSLYetfjs +DncKjvbdzQnmIiwA +EPCjjvbdRpUGjFdX +EOcLKvbdddnqbWcK +EOcKjvbdWWhwucdg +EOcLKvbdCWzdJEov +EPDKjvbdTkuoAuni +DncLKvbdqUTgSSLU +DoDLKvbdNHDQMotk +DncLKvbdWXJXvEEg +EPCjjvbdaNKaruNH +EPDLKvbdraelkfjy +DncLKvbdLqvmZtpz +DnbjjvbdNddThhkE +DoDKjvbdzoQQdcLx +EPDKjvbdYpldiNFR +EObjjvbdZtJIyDsO +DoCkKvbdWWiYWDeH +DoCkKvbdeEoSBwDK +DoCjjvbdBsAcTevr +EObjjvbdqvpMChyR +EPCjjvbdsCGMlHKy +DnbkKvbduLwwAtAw +EObkKvbdMRwMyuQz +DncLKvbdwWlAuaWV +DncLKvbdHgHZxwxH +DncKjvbdBsAcTewS +DoDLKvbdJpyePFme +DncKjvbdVUNUFlWK +DncKjvbdEYXktTtM +DncLKvbdwMvANDeN +DnbkKvbdtSrTZZeD +EOcLKvbdJYUBhMRQ +DncKjvbdlYrrTZGt +DoDLKvbdliDsqUrB +EObjjvbdegjuqnQg +EObjjvbdlZSrTZHU +DncLKvbdfNGWfljL +DoDLKvbdLFegbBQu +DncLKvbdemGXGmKL +EPDKjvbdDwwksssl +DnbjjvbdxmsIYTJD +DoDLKvbdBsBCtGWr +DoCjjvbdIsYaTNYM +DncKjvbdJuuGEEgJ +EObkKvbdkySqsYgU +DnbkKvbdNPwqWNfs +EPDLKvbdmIdTptrB +DoDLKvbdyqOmIjXA +EPCjjvbdhkeEOUcZ +DoDKjvbdJqZePFme +EPDLKvbdfSAvzlCo +EObjjvbdbhljLFvx +EOcLKvbdaMkBsUmH +DoCjjvbdKyRKSzuG +EObjjvbdcSbjtEJa +EOcLKvbdkHflGFmk +DoDLKvbdemFwHMjL +EObjjvbdSLZGVHLT +DoCjjvbdJXtCILpp +EOcLKvbdaaVdfPow +EOcLKvbdFpATWgGZ +DoCjjvbdxZgeewdr +EObkKvbdeEnqawCj +EObjjvbdhytfMQmf +DnbjjvbdoznEKxPA +DnbjjvbdoAKzsgdO +DoCkKvbdYzbfRivZ +DoDLKvbdqqtkOKaN +DncLKvbdqvokcJYq +EPDKjvbdOStVfeUp +DoDKjvbdZxcinDLr +DoCkKvbdcyyQYYqC +EObkKvbdcIlikGWx +EOcLKvbdffLzNgHA +EPCjjvbdMtsRkNAX +EOcKjvbdpeceTvBI +EOcKjvbdZsiIxcsO +DncLKvbdJvVGDdgJ +DnbkKvbdZMRdTmlN +EPDLKvbdnCJwXnnV +EObkKvbdxUldqZLn +EPCjjvbdNddUJIkE +DoCjjvbdyYJJapZk +DnbjjvbdpxoHgQcx +EObjjvbdHDjvKBij +DncKjvbdUtNUFlWK +EPCkKvbdkVvmdBww +DnbjjvbdgGMZmgHA +DoDLKvbdmIdTqVSB +EOcLKvbdzitpPdTU +DncLKvbdkxrqrxgU +DoCjjvbdVBBpsRSZ +EOcLKvbdGFiqmiTq +EOcKjvbdxsOJMqag +DoCkKvbdHDkVjCJj +EPDKjvbdjSziTKiz +EOcKjvbdCTAbsewS +EPCkKvbdkWWnDbYX +DoDLKvbdJSxaTMxM +DoDLKvbdMoxRWNgT +DoDLKvbdmuVZkJrG +EPDKjvbdbUbHXjtI +DnbjjvbdkWWnEBxX +EOcLKvbdnPyxukZC +DnbjjvbdXrlBMtOx +DoDLKvbdJuuGEFGi +EPDKjvbdUaBprprZ +EObjjvbdsrqrxydc +EObjjvbduCbtwWOo +DoCkKvbdSLYeuHLT +DoDKjvbdKQyePFme +EOcKjvbdeYZssrFz +DoDKjvbdpxoHfpdY +EPCkKvbdcIljKfXY +EPDKjvbdDwwksstM +DnbkKvbdsQWOicVf +EPDLKvbdIidAKQHE +DoDLKvbdrDeJPnWB +EOcLKvbdZoNiEeZj +EObjjvbdptTgRrLU +EPDKjvbdmRyUzTEJ +DoDLKvbdFxtuBEYC +DnbkKvbdehLVqmqH +EPCjjvbdUtNUGLuj +DoDLKvbdxVNEqZLn +DncKjvbdySnImRbH +DoCjjvbdbLMGPNcA +EPCkKvbdzQoMiKXA +DnbkKvbdbiMijevx +EOcKjvbdSQTfiedX +DnbjjvbdZisIQHBf +EObkKvbdYpleIldq +DncLKvbdjmBlZeHP +DncKjvbdSCDdkhxk +DnbkKvbdrykpTAgn +EObkKvbdZQldiMeR +DnbjjvbdeYZssqez +EPDLKvbdlYrrSyHU +EOcLKvbdTpqOttgm +EOcKjvbdCJLCLIej +EPDKjvbdUQqOttgm +EObkKvbdGBOqZJzm +DncKjvbdqwQMDIyR +EPDKjvbdbBWFFoow +EOcLKvbdZMRctOLm +EPCkKvbdHEKuibKK +DnbjjvbdNddThiKd +DncKjvbdJuuFdEgJ +DncLKvbdRzJgsDWA +DncLKvbdRWmdCkhD +EPCjjvbdZRNFImEq +EOcLKvbdUaBqTRSZ +EObkKvbdWIXvYGxz +DoDKjvbdrRuKnKaN +DoCjjvbdYgXEAPTJ +DoCkKvbdwuMeQyMO +EPDLKvbdkHfkfFmk +DoDKjvbdTqQnuUhN +DoCkKvbdbKlFoODA +EObkKvbdrzLoraIO +DncLKvbdFxuVAdYC +DoCjjvbdZQldiMeR +EOcKjvbdJTZBTNXl +EPDKjvbdsQWPKCvG +EOcLKvbdeEoRawDK +EPDLKvbdtTSSxzEc +DncLKvbdliDsqUqa +DnbjjvbdZQleImEq +EPCjjvbdaSGDITek +DoDLKvbdRWnDbkhD +EPDLKvbdpedEsvAh +EPCkKvbdYpldhldq +DoCjjvbdZoOJEdyj +EOcLKvbdmoyxvKyC +EObjjvbdmSZVZsEJ +DoDLKvbdqUUGrSLU +EPDLKvbdmpZxujyC +EPCjjvbdCDpBVilf +EPCjjvbdFfJrNhsq +DoDKjvbdsZkosBIO +DnbjjvbdiBnbdvpq +DncKjvbdkDMKpftg +EPCkKvbdatbGxLTh +DoCjjvbdJTYaTNXl +DnbjjvbdhkdcnVCy +DncLKvbdyNrgxTIc +EPDLKvbdyNsHwriD +EPDLKvbdBdQBVilf +DoDLKvbdIsYaTNXl +DnbkKvbdkxsSTZHU +EPCjjvbdBsBDUGWr +EOcLKvbdgQBzwDxI +DnbjjvbdjblLQfuH +DnbkKvbdbVBgYKsh +DncLKvbdMgComPuL +EPDLKvbdqceIpOVa +DnbjjvbdqFceTvAh +EPCjjvbdFWYpQNJe +DoDLKvbdHDjujBjK +DncLKvbdIHGyyXxH +DnbjjvbdeFOqawCj +DoDKjvbdGQASwGfZ +DncLKvbdrWokbhyR +DncKjvbdSKyFtfkT +DoCkKvbdemFvfmKL +EPDKjvbdxsNhmRbH +EOcKjvbdsPunicVf +EObjjvbdrbGNMGjy +EPDLKvbdOXoVzcnU +EOcLKvbddZxpYYpb +DoDKjvbdVBBpsRRy +EPDKjvbdHDkWKCKK +DoCkKvbdSiZjRAAl +EPDKjvbdURQoVVHm +DoCkKvbdpyPHgQdY +EOcKjvbdGAoQxizm +DnbjjvbdMpXpvNfs +DncKjvbddndrjtUS +DnbkKvbdlhcsptqa +DoCkKvbdfNFvfmKL +EPCkKvbdHffyxxXg +DoCkKvbdYpleImFR +DoCkKvbdbBVdfPpX +DncLKvbdWSNxBdlD +EPDKjvbdSQTfjFcw +EPCjjvbdkxrqsYgU +EPDKjvbdrovOjCvG +DoCjjvbdaSGCgsek +DncLKvbdZGwEAOri +DoDLKvbdJmADzHUa +DoCjjvbdNdcshiKd +DoCkKvbddneTLTtS +EObkKvbdMoxQumfs +DncKjvbdVgxVwfxz +DoDKjvbdGcjuibKK +EObkKvbdTqQnuUhN +DncKjvbdURRPUuIN +EObkKvbdbrbjtEJa +DnbkKvbdKQyeOenF +EObjjvbdbKkfOnDA +EPDLKvbdlhdTptrB +EObjjvbdxnTHxTJD +EObjjvbdKCjCpjDY +DoDLKvbdMSWmZtpz +DoCkKvbdBsBCsfXS +DnbkKvbdfRaWzkcP +EPDKjvbdbAvFGQQX +DoCjjvbddoFSjtUS +DnbjjvbdypoNJJwA +EPDKjvbdzdzOzdyp +EObjjvbdJpzEoFme +DoCkKvbduCbuXWPP +EPCkKvbdFfJrOItR +DoDLKvbdkIGlFfOL +DnbjjvbdbAudfPpX +DoDLKvbdtAHRIABS +EOcLKvbduDCuWuno +DoDKjvbdkHgLfGNk +EOcLKvbdxZhFeweS +EObkKvbdUxgszKoO +EOcKjvbdiBoCeXRR +DnbkKvbdZeXfzhJC +EObkKvbdtcDUvvPP +EOcKjvbdMtrrLNAX +DnbkKvbdWXJYVceH +DnbkKvbdJbjCpibx +EPCkKvbdajlFnnDA +DnbjjvbduaEZTPEh +EOcKjvbdGcjuibJj +DncLKvbdKefHbAqV +DoDKjvbdUxgtZjnn +EPCjjvbdVZITzKnn +EPDKjvbdHkaznXRL +DnbkKvbdOEdTiIkE +DnbjjvbdiGjDYvJu +DoDKjvbdnUtykJrG +EPCkKvbdBdQBWKNG +EPDKjvbdsBemLfkZ +EPCjjvbdtumwiqTA +EOcKjvbdnCKXYPOV +DncLKvbdVwIxVdFH +DnbjjvbdWIYWYGxz +EObkKvbdFpATXHFy +DoCjjvbdauBgXjtI +DnbkKvbdTqROuVHm +DnbjjvbdlhcsqUqa +EPDLKvbdxZhGGXeS +DoDLKvbdZjTHogCG +EOcKjvbdbKlGOnDA +EObjjvbdLiBlRYAS +DncKjvbdxrnJMrCH +EOcLKvbdMJBlRYAS +EOcKjvbdUsmTekuj +DnbjjvbdEYYMTssl +EObkKvbdZMSEUNkm +DncLKvbdGGKSNhsq +DoDKjvbdGZVVAdXb +EPDKjvbdKRZdoFnF +EOcLKvbdEXwlUTtM +DoDKjvbdEztQeLcJ +DoCkKvbdJYUBglQp +DoCkKvbdJTZAsNXl +EObjjvbdvmWAMdEm +EPCjjvbdxZgefYFS +DncKjvbdtTRrxzEc +EOcLKvbdiGjDZWJu +DoCkKvbdYlRctOLm +DncKjvbdDxXlTtUM +EPCjjvbdcyxpYYqC +EOcLKvbdqGDeUWBI +DnbjjvbdnPyxvLZC +DoDLKvbdKefHbApu +DoCkKvbdjblKqHVH +EObkKvbdTfzmkvue +EOcKjvbdZnmiEdzK +EOcKjvbdDxXkstTl +EPDLKvbdBdQAujMf +DoDKjvbdGZVVBDwb +DoDLKvbdEvZPpMie +EPCjjvbdVwJXuceH +DoDLKvbdRjyFtgLT +DoCkKvbdXsLaNTnx +DnbjjvbdDHLfHAzc +DoCkKvbdVBCQrprZ +DoCkKvbdyNsIYShc +EPDKjvbdyXiJbPzL +DoCjjvbdUsltFlWK +EPCkKvbdcyyQYZRC +DnbkKvbdddnqbWbj +EPCkKvbdmuUyjjSG +EObkKvbdZyDinDLr +DnbjjvbdZtIiZESn +EPCjjvbdVBCRTRRy +EOcLKvbdCWzciFPv +EObkKvbdrEFJPnWB +DnbkKvbdqUUHSRkU +EPDLKvbdlqyUyrci +DoCjjvbdIMBznXQk +DoCjjvbdUxgsykOn +EPCjjvbdXsMBMsnx +DncKjvbdjuvmdBxX +EOcLKvbdkIGkeemk +DoCjjvbdjKGIKNYS +EPDLKvbdSLZGVGjs +EOcKjvbdMfcPmQUk +DoCjjvbdrNZjYlIJ +EOcLKvbdkyTSTZHU +EObjjvbdjAQGaQHK +EPDKjvbdMoxRVnHT +EObkKvbdeATpmXif +EObkKvbdFjdsDHmV +DncLKvbdbLLfOmcA +EPCkKvbdunszqLOt +DnbkKvbdnQZxvLZC +DncLKvbdZyDjNblS +DnbkKvbdptTfrSKt +DoDLKvbdzaAOgHCM +EPCjjvbdhbPCeXRR +DnbkKvbdmuVZkKSG +DoCkKvbdziuQQESt +DnbkKvbdhgKDZWKV +DnbjjvbdULuoBWPJ +DncLKvbdWXJXucdg +DoCjjvbdRacdlJYk +DoDLKvbdegjvSNqH +EOcLKvbdnUtzLKRf +EOcKjvbdFxtuBEXb +DoCkKvbdmIcsqUrB +EObjjvbdULvPAvPJ +EOcLKvbdSwkLmzkY +EPCkKvbdSZjITCvA +EPCkKvbdeOdrjtUS +EPCjjvbdIxUBhLpp +EObkKvbdqiAJeMoF +DnbkKvbdhlEcmtcZ +EOcLKvbdFejRnJTq +EOcKjvbdwXMAvBWV +DoDKjvbdmpZyWLZC +DoCjjvbdGLErbhNV +DoDLKvbdmaivwnmu +EOcLKvbdOXoVzcnU +DncLKvbdBhjbLJGK +EPDKjvbdZjTIQGaf +DoCkKvbdgPazwEYI +DncLKvbdGGKRmiUR +EObjjvbdfHkWRmpg +DnbkKvbdXrkaNUPY +EPCkKvbdzQoMhiwA +EOcKjvbdrpWOjDVf +DncKjvbdZtJJZDrn +EPDKjvbdqZOggRDx +DnbjjvbdhgJbyWKV +DoDKjvbdiVZdwRuC +DoDKjvbdIwtCHkpp +DoDKjvbdVAapsRRy +EPDLKvbdwjvcgzzG +DoDLKvbdRyihScWA +DoDLKvbdrRuKmkAm +DnbkKvbdqGDdsuaI +EPCkKvbdAMhYrwZx +DncKjvbdSPsfjGEX +DncKjvbdczYpXxpb +DoDLKvbdkIHMGFmk +EPCjjvbdkClKqHUg +EObkKvbdxVMdqZMO +DoDKjvbdBdQBVjMf +EObkKvbdZjTHpGbG +EPDKjvbdTfzmkvue +EPCkKvbdLAjfmCXq +DoCjjvbdLGGHbApu +EPDKjvbdEzsqEkcJ +DoDKjvbdwygfGYFS +DoDLKvbdhgJbyWKV +EPDLKvbdZshiZETO +EPDLKvbdKWUfDdfi +DnbkKvbdqYoHgQcx +DncKjvbdnGeYMmgZ +EPDKjvbdKCjDRKDY +DoCkKvbdJcKDQibx +EObkKvbdZoNiFFZj +EPCkKvbdUyHsykPO +EOcKjvbdtvNxKQsA +EObjjvbdatafwjtI +DoDLKvbdhzVFkpmf +EObkKvbdMgComQVL +EPCkKvbdSCEEkhxk +DoDLKvbdgFlZnGgA +EObjjvbdZMSETnLm +EObkKvbdtumxKQsA +EObjjvbdZoOIddyj +EOcLKvbdqZOggQcx +EOcLKvbdKfFhBaQu +DncLKvbdzGxlANEw +EObjjvbdehLWRnQg +EObkKvbdEPCjkWbd +EObkKvbdqYnhHRDx +EObkKvbdjvXODaww +DnbjjvbdqTsgSRkU +EOcKjvbdTqQoVVHm +DnbjjvbdQmYBxnUz +DnbjjvbdpyOhGqEY +EOcLKvbdLGGHbAqV +EObkKvbdZirgpHCG +EObkKvbdqYnhGpcx +DncLKvbdrbGNLgKy +EObkKvbdkySrSxgU +EOcLKvbdeAUQlwjG +DncKjvbdkVwNdCYX +DoCjjvbdJvVGDeHJ +EPCkKvbdEuyPpNKF +EOcKjvbdDjHivXjA +DnbjjvbdkNCLydfo +EPCjjvbdZjTHogBf +DoDKjvbdGKeTDINV +DnbkKvbdJXtBglQp +DnbjjvbdFejSOIsq +EOcKjvbdhytelRNf +DnbjjvbdbBVdeopX +DoCkKvbdFjdsDINV +DoDLKvbdjvXNcbXw +DnbkKvbdZdxGzhJC +EPDLKvbdjAPgBQGj +EObjjvbdJXsbHkqQ +EPDKjvbdiVZdwRtb +EObjjvbdGFjSNiTq +EPDKjvbdznpQdbkx +EPCjjvbdemFvgNKL +EPDKjvbdWXIxWEEg +DncLKvbdEObkKvcE +DnbjjvbdLAjfmCYR +EPDLKvbdEXwkstTl +EObjjvbdFfKSNhsq +DncKjvbdygZMANFX +EPCkKvbdYqNFIleR +DoCkKvbdSKyGUgLT +DncKjvbdBdQBVjNG +DnbkKvbdbUagYLTh +EOcKjvbdsPunjDWG +DncLKvbdrEFIonVa +DncKjvbdaSGChTfL +DoCkKvbdcJNKKfXY +EObkKvbdULuoBWOi +DncLKvbdKWVGEEgJ +EPCkKvbdqFdEsuaI +EPDKjvbdAMgySvyx +DncLKvbdiUzEwRuC +EObjjvbdZoNheEzK +DnbkKvbdZLrETnMN +EObjjvbdKWVFcdfi +DoDLKvbdcScLUEJa +EPCkKvbdIwsbIMRQ +EOcKjvbdsBemMHKy +EOcLKvbdzitoodSt +EPDKjvbdrMyjZLhJ +DnbjjvbdaRfCgsfL +DoCkKvbdKQzEnenF +EOcLKvbdUGznLvue +DncLKvbdZxcinCkr +DnbjjvbdEuyPpNKF +DncKjvbdGFirOIsq +EOcLKvbdVqmxBeMD +EOcLKvbdwuMeRZLn +DnbkKvbdBhkBkIej +EOcKjvbdNQXpumfs +EObkKvbdVBCRTRSZ +DoDLKvbdZeYGzhJC +DncLKvbdREDBPqES +DnbjjvbdvBEZSoFI +EPCjjvbdakLeoNcA +EPDLKvbdeFOqbWbj +EPDLKvbdiGicZWJu +EPCkKvbdEKHiuwjA +EPCjjvbdwkWcgzyf +DoDKjvbdmpZyVkZC +EPCkKvbdSZihSbvA +EPDKjvbdelevfmKL +DnbjjvbdeATplwif +DoCjjvbdGAnpxizm +EPDKjvbdTlWPBWOi +EOcKjvbdmSYtzTEJ +DncLKvbdnGeXmNfy +DoDKjvbdTIzJqAAl +EOcKjvbdqdEiPnVa +EOcKjvbdcTCkUEKB +DoCjjvbdEvYopMjF +DoDLKvbdwuMdpyMO +EPDKjvbdEuyQPlie +EOcLKvbdVUMsfMVj +EObjjvbdijFgilxS +DoDKjvbdnPyxujyC +EOcKjvbdTAFIgbPE +DnbkKvbdZxdJnDLr +DncLKvbdqdEiPmua +EOcKjvbdhgJcZVjV +DnbkKvbdRbEFLhxk +DoDKjvbdmaivwoNu +DoCkKvbdZQmFJMdq +DncLKvbdeYZtTqez +EObkKvbdqYoIGpdY +DnbjjvbdEASJMyvw +DoDKjvbdwzHfGYFS +DncKjvbdjvXOECYX +DncLKvbdbBVdepQX +DoDLKvbdrEFIomua +DnbjjvbdYgWdAOsJ +EOcKjvbdkMakydfo +EPCjjvbdegkWSNqH +EPDLKvbdYlSEUNkm +EPDLKvbdzRPMhjXA +DnbjjvbdmSZUyrci +EPDKjvbdiiehKNXr +EPDLKvbdwzIGGXdr +DncKjvbdSLYetfkT +EOcLKvbdURROtuHm +EPDLKvbdEYYLtUUM +EOcLKvbdaSGDIUFk +DnbkKvbdhfibyViu +DncKjvbdeFOqavcK +EPDLKvbdZtIhyETO +EOcKjvbdsPuoKDVf +DoDLKvbdBhkBjiGK +EPDLKvbdnQZyVkYb +DncLKvbdNsTugEtp +EPCjjvbdCDpBWJmG +DoCkKvbdmIdTqVRa +EOcKjvbdptUHRqjt +DnbjjvbdRpTfifDw +DncKjvbdaRebgtFk +EPDLKvbdEARiMyvw +EOcKjvbdyNsHxShc +DoCkKvbdxKwDgzyf +DncKjvbdwuNFQyLn +DncLKvbdegjvSORH +DncLKvbdOStWGdtp +EOcLKvbdcTCkTdKB +DncKjvbdRECaQRES +DoDLKvbdkIHMFemk +EPCkKvbdfjfzcGAE +DncKjvbdZLqdTnLm +EOcKjvbdIMBzmwRL +EOcKjvbdwzHeexFS +EPCjjvbdKVuFdFHJ +EPCjjvbdRXODcLgc +DoDLKvbdlrZVZrdJ +EPDKjvbdjKGIJmYS +EObkKvbdHEKujCJj +DncKjvbdNddTiIjd +DoDKjvbdZjSgpGaf +DoCjjvbdmfeXlnHZ +EPCjjvbdRosfifDw +DoCjjvbdZxcinDLr +DoCjjvbdNeDsiIjd +EPDKjvbdVgxVwgYz +DnbkKvbdqTtGrRjt +DnbkKvbdTqQntuIN +DncKjvbdBvzdJEpW +EPCjjvbdqUUHRrLU +DnbjjvbdqcdhonWB +DncKjvbdHDkWKBjK +DnbkKvbdxVMeQxlO +EObjjvbdkClKpgVH +EOcLKvbdCSaDUGXS +DncLKvbdUQqOttgm +DoCkKvbdZxcjOClS +EPDKjvbdVqmxCFMD +DnbjjvbdqmZixlHi +DnbjjvbdiUydvquC +DoCkKvbdOTTugFVQ +EOcKjvbdUQpoVVIN +DoCkKvbdNHDPlpVL +EOcLKvbdDncLKwCd +EOcLKvbddeOrCXCj +EObjjvbdqvolChyR +EOcLKvbdaofgELzd +DoDLKvbdrpVoKDWG +DncKjvbdaMjasUmH +EObjjvbdliETqUrB +DncLKvbdXsLaMtOx +EObkKvbdrykpTAhO +EPDKjvbdehKvRmpg +EObjjvbdUxhTzKnn +DncLKvbdTfznMXVe +EPDLKvbdqUTfqqkU +DoCjjvbdHELWKCKK +DoDLKvbdwuNFQyMO +DoCjjvbdffLynGgA +EOcLKvbdSLYetfkT +EPDKjvbdtTRryZeD +EPDKjvbdddoRbXDK +DoDKjvbdFVxooljF +DoDLKvbdxsNiNSCH +DoDLKvbdsCGNMGkZ +EOcLKvbdkHfkfFnL +EPCkKvbdqrUjnLAm +DnbkKvbdHELViajK +EOcKjvbdNHDQMouL +EPCkKvbdWWhxVdFH +DnbkKvbdUWMPitBR +DncLKvbdZoOJFFZj +DncKjvbdcIljKewY +DoDLKvbdVUNUGLvK +EObkKvbdNsTufdtp +DnbjjvbdGKdsCgmV +EObkKvbduDCtwWPP +EObjjvbdkMbMZeGo +EPCkKvbdJSyAsNXl +DnbjjvbdmbJwXnmu +EPCkKvbdRjxeuGkT +EObkKvbdaSFcITek +EPDLKvbdGYtuAdYC +DoDKjvbdFeirNiUR +EPCjjvbdhyuGMQmf +EObjjvbdDxYLstUM +EObkKvbdFfKRmhtR +DnbkKvbdyTNhmSCH +EPCjjvbdJSyAsNYM +EPCkKvbdEuxpQMie +DoDLKvbdkClLQgUg +DnbkKvbdssRrxzEc +EPDLKvbdRMwbZNtz +EPCkKvbdssSTYyeD +DoCkKvbdYqMeImEq +EOcLKvbdjuwOECXw +EOcKjvbdOTUWHFUp +EPCjjvbdliDtQtrB +EPDKjvbdZxdJmblS +DoDKjvbdbVCHXkTh +DoDKjvbdpstHSRjt +EOcLKvbdNPwpunGs +DoCkKvbdLAjgNCXq +DoCjjvbdDoDKjvbd +DoCkKvbdZirgpHBf +EPDLKvbdezuxdiTw +DoCkKvbdLrXMyuQz +DncLKvbdqlyjYkgi +DnbkKvbdLrWlzUpz +DoCjjvbdhytfLpnG +EObjjvbdxrmiNSBg +EPDLKvbdqquLNjaN +EObjjvbdiHKCyVjV +DncKjvbdjSziTKiz +EPCjjvbdCflGHAzc +EPCjjvbdZtJJZDrn +EPCjjvbdJKEAKQHE +EPDKjvbdIxTbHlRQ +EOcKjvbdZRMdhmEq +EOcLKvbdmttykJqf +DncLKvbdEzsqFMDJ +EPDKjvbdJuteceGi +EOcKjvbdemFvfmJk +DoCkKvbdkySqsZGt +EOcLKvbdlrZVZsDi +EOcLKvbdEXxLstTl +DnbkKvbdkNBlZeHP +DncLKvbdauCHYKsh +EPCkKvbdhuZeXSVC +EPCjjvbdOTTufdtp +DoDKjvbdDoCkKwCd +DoDLKvbdOAIrsirA +EPCjjvbdlAmPNALA +EOcLKvbdiBoCdwQq +DoCkKvbdnCJwYOnV +EOcLKvbdqwQLbhxq +DncLKvbdGYuVBEYC +EPCjjvbdcyyQXxqC +EPDKjvbdrEEiPmvB +DnbkKvbdJbibqJbx +DncLKvbdiGjCxuiu +EObjjvbdjKGIJmXr +EPCjjvbdFkEsDIMu +EPDKjvbdCWzchePv +EObjjvbdEObjjwDE +EPCkKvbdQdDApRDr +DoDLKvbdbAvEfQPw +DoDLKvbddtAUATNW +DnbjjvbdUxhUZkOn +DnbjjvbdwNWANEEm +EPCjjvbduDCuWuoP +DnbjjvbdjAQHApHK +DncLKvbdJzpFxEAN +DncKjvbdwtldpxlO +EObjjvbdBraCtGWr +EPDKjvbdJmADzGuB +DoDLKvbdRadEkiZL +DoCkKvbdAMhZTXZx +DoCjjvbdqGDeUVaI +DoCjjvbdVvhxWDdg +EOcKjvbdSBceMIyL +DnbkKvbdRkYfUfjs +EOcLKvbdFWYpQMjF +DoDLKvbdhlFENuCy +EObkKvbdiCObeWpq +DnbkKvbdHELWJaij +EObkKvbdCTAcTfWr +EPDKjvbdbrcLTdJa +DoDLKvbdDncKkXDE +DoCkKvbdmSYtzSdJ +EOcLKvbdVZHszLPO +DnbjjvbdhkdcmuCy +DnbkKvbdLrXNZuQz +EPDKjvbdZnmiFEzK +EPCkKvbdlrZVZsEJ +DnbjjvbdqmZixkhJ +DoDLKvbdcTCjsdKB +DoCkKvbdcyyPxYqC +DoDKjvbdssRrxydc +DoDKjvbdvPTzpjnt +EObjjvbdZLqctOMN +DoDLKvbdRNXbYnUz +DncKjvbdJYUBglRQ +EObkKvbdkIGlGFnL +DoDLKvbdiUzEwSUb +EPDKjvbdeEnrCWbj +DoDLKvbdRbDdkhxk +EObjjvbdYzcFqjWZ +EOcLKvbdjggLfFnL +DncLKvbdgQBzwEXh +DoCjjvbdQlxByNtz +DnbkKvbdoznDjwoA +DnbkKvbdVgwuxHYz +DoDLKvbdaaVdepQX +DoDKjvbdLZRKSztf +EPDKjvbdbUbHXkUI +EOcLKvbdjhGkfFmk +EObkKvbdeEoSBvcK +DncKjvbdUtMtGMVj +EPDLKvbdJTZAsMxM +DnbkKvbdOEdUJJKd +DoDKjvbdZHXEAPSi +EObkKvbduaDyTPFI +DnbjjvbdqAiFAWhE +EObjjvbdelevgNKL +DnbjjvbdTAEhgbPE +DoDKjvbdnPzZVkZC +DoDKjvbdQwNdDLhD +DnbjjvbdnBjWwoNu +EObkKvbdfMewGljL +DncKjvbdrpVnjCuf +EPDLKvbdLGFgbBRV +EObkKvbdkCkkRHUg +EObkKvbdTlVoAuoJ +EPDLKvbdrMyjZMHi +EOcLKvbdWHwuxHYz +EOcKjvbdLrXNZtpz +EObjjvbdbQHHDkzd +EOcLKvbdfILWRnRH +EPCjjvbdyfyMAMeX +DncLKvbdNHCpNQVL +EPCjjvbdFkEsDHlu +DncKjvbdGGJqmhtR +DnbkKvbdvAcxrndh +DoCjjvbdqGDeTvBI +DoCjjvbdJvUfDdgJ +DoCjjvbdUVlPisaR +DoCkKvbdqTsgSRkU +EObjjvbdjblKpftg +EObkKvbdtcDVXWPP +DnbkKvbdfHkVqnRH +DncLKvbdmoyxvLZC +EObjjvbdkHfkfFnL +EPDKjvbdwNWAMcdm +EPCjjvbdJpzFOfNe +DncKjvbdmbJvxOnV +DncKjvbdTqQnuUgm +EOcLKvbdTpqOuVHm +DoCjjvbdYlSETmkm +DoDKjvbdjEkGuPAO +DoCkKvbdwygefXdr +EObkKvbdrXPkcJYq +DoCjjvbdxUleQyMO +EOcLKvbdBsAcTfXS +EPDLKvbdLBLGlbXq +EObjjvbdmbJvwnnV +DnbjjvbdbVCGwjsh +DnbkKvbdxUmEpyMO +EPCkKvbdYSlBNTnx +DoDKjvbdeOeSkUTr +DncLKvbdqmZixlHi +EPCkKvbdNHCpNQVL +DoCkKvbdDigjWXjA +EObjjvbdrDeJQNvB +EOcLKvbdJuuGDeHJ +DoCkKvbdddnrCXCj +DoDKjvbdqTtGqrKt +DoDKjvbdeOeTKstS +EObjjvbdySmiNRbH +DnbjjvbdZshiYdTO +EObjjvbdnCKXXnmu +EPDKjvbdqiAKFMne +DoDKjvbdNeEUIiKd +DnbjjvbdzitpPdTU +EPCkKvbdzaAOffal +EOcKjvbdZtIiZDrn +DoCjjvbdtSrTYyeD +DoDLKvbdFVxopNJe +DoDLKvbdJJdAJpHE +DoDLKvbdHDjuiaij +EObkKvbdUWMQKUAq +EPDKjvbdTpqOuVIN +EOcLKvbdqvpMChyR +DoCkKvbdVviXudEg +DoCkKvbdGLErbgmV +EPCkKvbdZirhPfbG +DoCkKvbdWXJYVceH +DnbjjvbdhkeEOUcZ +DncKjvbdSPtHJedX +DncKjvbdFfKRnIsq +DncKjvbdWWhxVdEg +DoCkKvbdOStWHEuQ +DoDLKvbdEuyQPmKF +DncKjvbdrpVoKDWG +DoCjjvbdKVtfEEfi +DoCjjvbdWXIwudEg +EPDKjvbdSCDeMIyL +EPDKjvbdDoDKkXCd +DoCkKvbdJpzEnenF +EPDKjvbdaaWEfPow +DoCjjvbdVwJXucdg +EPCjjvbdauCHYKtI +EOcLKvbdNeDshhkE +DncLKvbdNGcQMpVL +EOcLKvbdIryBSmXl +DnbkKvbdTAFJICPE +EOcLKvbdrMzKYlHi +EOcKjvbdznopeDMY +EOcLKvbdMRvmZuQz +DncKjvbdeFOqbXCj +DncLKvbdbhlijfWx +EOcKjvbdqdEhpOWB +DoDLKvbdUWMQJsaR +DoDLKvbdptUGqrLU +EObjjvbdaSGChUFk +EPCjjvbdYTMAltOx +DncKjvbdEPCkLWbd +EOcKjvbdKCjDRKCx +EPDKjvbdZyDjNcMS +DncLKvbdFfKRnJUR +EPDKjvbdrNZiyLhJ +EOcKjvbdZeXfzgiC +EOcKjvbdbUbGwkTh +EPDLKvbdHfgZxwxH +DncLKvbdrovOjCuf +DnbjjvbdfNGWflik +DnbkKvbdZoNiFEyj +EPCjjvbddneTKtUS +EObjjvbdRbDdlIxk +EOcKjvbdKfFgbBRV +EPDKjvbdFyUuBDxC +EPCkKvbdiUzFXRtb +EPCjjvbdrJAJeNPF +DncLKvbdVAbRSqSZ +EObjjvbdaNKbTVMg +DoCkKvbdlhctQtqa +DoDKjvbdZshiZDrn +EPDLKvbdFkFSbglu +EPCjjvbdHffyxwxH +DncKjvbdTvLojTaR +DnbkKvbdauCHXkUI +DoDKjvbdGdKuiajK +EOcKjvbdkClKqHVH +EPDLKvbdnUtykKSG +DnbkKvbdBiKbKhej +DoDLKvbdHffzZXwg +EPCjjvbdbrbkTcjB +DoCkKvbdVwJYWDdg +DncLKvbdJJdAJogE +EPCkKvbdJvUfDdfi +DoDKjvbdZeYGzgiC +EObjjvbdZyEJnDMS +EOcLKvbdmSZVZsEJ +EPCkKvbdDnbjjvbd +EPCkKvbdJvVGDeGi +DoCjjvbdTXkLmzkY +DnbkKvbdLqwNZuQz +DncKjvbdZtIiYcsO +DoDKjvbdLYqKSztf +DnbkKvbdULuoBVni +EObkKvbdiBnbeWqR +EObjjvbdfILWRmqH +DncKjvbdezvYdhsw +DnbjjvbdJvUfEEfi +EPCkKvbdRpUHKGDw +EObkKvbdZGwEAPTJ +EOcLKvbdcTCkUEKB +EObjjvbdGAoQxizm +DnbjjvbdNwoVzcmt +DncLKvbdJbicRKDY +DnbkKvbdGZVVAcxC +EPCkKvbdRadFMJYk +DnbjjvbdxsNiNRag +DnbjjvbdiBncFXRR +EPCjjvbdySmiNRbH +DoDKjvbdeATqMxKG +DnbjjvbdtSrSyZdc +EOcKjvbdwtldpyLn +EPDKjvbdqwPkbiYq +EPDLKvbdzitpPcsU +DoDKjvbdDjHiuwjA +EPCkKvbdfMewGmKL +DncKjvbdlrYtyrci +EPCjjvbdZQldiMdq +EPDKjvbdJbjDQjCx +DncKjvbdqTsgRrKt +EPCkKvbdEvZQPljF +DoCkKvbdUsltGMWK +EOcLKvbdEJgivXjA +DnbkKvbdePFTLTtS +EPDKjvbdEYYLstTl +EPDKjvbdMfcPmPuL +DoDKjvbdBsAcTevr +EPDLKvbdwtleRZMO +EObjjvbdRotHJfDw +EOcKjvbdJuuFdFHJ +DnbjjvbdZoOIeFZj +DoDLKvbdsZlQSaHn +EPCjjvbddoFTLTtS +DncKjvbdbVBgXjsh +EPCkKvbdaMkBrtlg +EPDKjvbddiiqutzn +EObkKvbdiZuFkpnG +EPCkKvbdIxTaglRQ +EOcKjvbduaEYrndh +DnbjjvbdzQoMiJwA +DoCkKvbdsCGNMHKy +EObjjvbdMoxQunHT +DnbkKvbdxwiJbPzL +EOcLKvbdJbibpjCx +DncKjvbdIxTbHkpp +DoCkKvbdwuMeQxlO +EOcKjvbdKeehCBRV +EPCkKvbdZxdKNblS +EPCjjvbdLFegbBQu +DoCkKvbduLwwBUBX +DoDKjvbdjlbMZeHP +DoDLKvbdjAPfaPfj +EObjjvbdqGEFTvBI +EObjjvbdeAURNXif +EObjjvbdxmrgxTJD +EPCkKvbdqGDeUWAh +DncKjvbdqTsfqrKt +EObjjvbdjEjftoAO +EOcKjvbdNrtWHFUp +EObkKvbduCcUvvOo +EPCkKvbdvwMAvBWV +DncLKvbdtkwwBUBX +DoCjjvbdVZHsyjnn +EPDKjvbdQccBQQdS +DnbkKvbdjgfkeemk +EPDLKvbdFyVVBDxC +DncLKvbdrNZiyMIJ +EObjjvbdHfgZxwwg +DoDKjvbdqceIomvB +EPCkKvbdNGcPlouL +DoCkKvbdCIkBkIej +DoCjjvbdjKFhJmYS +EObkKvbdBsBDUGWr +EObkKvbdnQZxvKyC +DnbjjvbdhzVFkqOG +EPCjjvbdGLFScHlu +DoCjjvbdtlXwAtBX +DoDLKvbdUtMtFkvK +DoCkKvbdBvzchdov +DncLKvbdlZSrTZHU +EOcKjvbdZnnJEdyj +DncKjvbdYpleJMdq +EPDKjvbdiMEcmtcZ +EPCjjvbdfelZmgHA +DnbkKvbdLhalRYAS +DncKjvbdehLWRnRH +DnbjjvbdeKJqvUzn +EPCjjvbdqqtkOLBN +EOcLKvbdfRaWzlDP +DncLKvbdhtzFWquC +EObkKvbdJvVFdFGi +EObkKvbdMfcPlotk +DoCjjvbdtcCuWvPP +DnbjjvbdwtmFRZMO +DoDKjvbdsPvPKCvG +EPCjjvbdmfdwmOHZ +EPDLKvbdMgDPlouL +DoDKjvbdnGdwlnHZ +DoCkKvbdVwJXudFH +EObjjvbdQdCaQQcr +DnbkKvbdYSkaNUPY +DoCjjvbdULvPAuni +EPCjjvbdSZihScWA +DoCkKvbdBiLCKhej +DnbkKvbdhXZAzzAJ +EOcLKvbdQYmAGsRj +EOcLKvbdZtJIyDrn +DnbkKvbdNsTufduQ +EOcKjvbdEXxMUTsl +DoDLKvbdKyRJrzuG +DoDKjvbdrWpLbhxq +DnbjjvbdrDeIonWB +EPDKjvbdHELViaij +DoDLKvbdBdQBWJmG +DncLKvbdRjyGUfkT +EPDLKvbdYNqAYUut +EPDKjvbdRXNdClID +EPCkKvbdNwnuzdOU +EOcLKvbdjmBkydfo +DoCjjvbdrpWPKDVf +EPCkKvbdZyEKNbkr +EOcKjvbdQZNAHTRj +EOcKjvbdwtmEpxkn +DncLKvbdLhbMRYAS +DoCjjvbdsrrTZZdc +DncKjvbdxmrgxShc +EPCkKvbdmozZVkZC +EPCjjvbdbsDLTcia +DoDKjvbdGKeScIMu +EPCjjvbdrEFIpOWB +EOcKjvbdmpZxukZC +DoCkKvbdTkunaVni +DoCjjvbddneSkUUS +EPCjjvbdTlVoBWPJ +DoDKjvbdxsNhmSCH +EPCkKvbdVviXvDdg +DnbjjvbdwzHfFwdr +EPDKjvbdfMewHMjL +DoCjjvbdbsDKtDjB +EPDLKvbdUQpoVVIN +EObkKvbdrEFJPmua +EObkKvbdhlEcnUcZ +DoDKjvbdZRMeIleR +DnbjjvbdmajXYOnV +DoDKjvbdaRfDHtGL +DoCjjvbdbhljKewY +DoDLKvbdDwwksssl +DncLKvbdUMWOaVoJ +DncKjvbdWWiYWDdg +DoCjjvbdyXiJbQZk +DnbkKvbdHDkVibKK +EPCjjvbdtSrSxzEc +EOcLKvbdaSGChUFk +DnbkKvbdYSlBNUOx +EPDLKvbdJTZBSmYM +DoCjjvbdTkvOaWOi +DncKjvbdMowpvNfs +EPDKjvbdeEnqavcK +EOcLKvbdiifIJlxS +DnbkKvbdqceIpNua +EPDKjvbdrNZixkhJ +DncKjvbdiHKDZViu +DnbkKvbdrDdiPnWB +DncLKvbdLGFhCAqV +DoCjjvbdwuMdqYlO +EPCjjvbdePFTKssr +EObjjvbdVBCQrpqy +EObjjvbdbrcKsdKB +DnbkKvbdBvzciEpW +DoCjjvbdIHGyyXxH +EObjjvbdrzLpTAhO +EOcKjvbdemGWgNJk +EObkKvbdVZHtZjnn +EOcKjvbdiCObeXRR +EPCkKvbduoTzpkPU +DoCkKvbdrNZjYkgi +DnbkKvbdTAEhgand +EOcKjvbdhuZdwRuC +DoDLKvbdWWiXuceH +EPDKjvbdZoOIddzK +DncLKvbdVAbRSprZ +DnbjjvbdhgKDZWJu +DoCkKvbdVZITykOn +DoCkKvbdiGibyWKV +EPDLKvbdwyhGGYFS +DoDKjvbdiHKCxvJu +EPDLKvbdhyuGLpnG +EPDKjvbdOAJStKSA +EOcKjvbdzitpPdSt +DoCkKvbdzROlhjXA +DoDLKvbdtTSSxzEc +DoDKjvbdzoQRFCkx +DnbkKvbdxnSgxShc +DnbjjvbdiBoDFWqR +DoCjjvbdnBjWwoNu +DncLKvbdVYhTzKnn +DncLKvbdkIGkefNk +DnbkKvbdlqxuZsEJ +EOcLKvbdACrYJzIp +EPDKjvbdmaiwYOnV +EOcKjvbdYkrEUNlN +DoCjjvbdVUNTfLuj +DoDLKvbdfHkWSOQg +DnbkKvbdBraCsfXS +EOcKjvbdMJBkpxAS +DoDKjvbdcyyQXyQb +EObkKvbdeEnrCXDK +EObkKvbdFejSNiTq +DoCjjvbdEYXkstTl +EPDKjvbdyYIjBpZk +DncKjvbdiHJcZWKV +DncKjvbdQdDAoqDr +EObkKvbduDDUvvOo +EPCkKvbdzGyMANEw +DoDKjvbdQvnECkgc +DncKjvbdVviXudEg +DoDLKvbdQZNAHTSK +EPDKjvbdkCkjqHUg +EObjjvbdwyhFeweS +DoCjjvbdxwiJbQZk +EOcLKvbdEPDLLXDE +DncLKvbdVrNwbFLc +DoCkKvbdjAPgBPgK +EOcKjvbdpstGqqjt +EPDLKvbdHDkVjCKK +DncKjvbdirzhrjiz +DnbjjvbdxrnJNSBg +EPCkKvbdraelkgLZ +DncLKvbdptTgRqjt +DoCkKvbdIsYaTMxM +DoCjjvbdMpXqVnGs +DoDLKvbdUVkoitBR +DoCkKvbdjmCLyeHP +DoCjjvbdiVZeWquC +DoCjjvbdVUMtFlWK +EPDLKvbdxKvdHzzG +DoDKjvbdiMEdNuCy +EPDKjvbdwzIFfYEr +EObjjvbdJXsagkpp +EPCkKvbdxrmhmSBg +DoDKjvbdlqxuZsDi +EPDKjvbdsQVoJcVf +DnbjjvbdEYYLstUM +DncLKvbdkHgLfGNk +EPCjjvbdbsDKtDjB +DnbjjvbdJcKDQibx +DoCjjvbdyzdnSIIh +DnbkKvbdrpWOjCuf +EObjjvbdbAudeopX +DnbkKvbdYkqctNlN +EPDLKvbdfHkWRnRH +EPDLKvbdXmqAYUut +DncKjvbdFyVVBEXb +DnbkKvbdrDdhpNua +DncKjvbdeAURNXjG +DoCkKvbdOTUVgEuQ +EPCjjvbddwyssrFz +DoCjjvbdMpYRWNfs +DoCkKvbdjuvnDaww +DnbkKvbdVhXvXgYz +EObjjvbdTulQKTaR +EObjjvbdOAJTUJrA +EPDLKvbdsZkosBIO +DoCkKvbdhgJbxvKV +EPCjjvbdnBivxOnV +DncKjvbdxrnIlrCH +DncLKvbdzaAPHGbM +EPCkKvbduMXvaUBX +DnbkKvbdSBceMJZL +EObjjvbdJpzEoGOF +DnbkKvbdWexytAPT +DnbkKvbdkVwNcaxX +EOcLKvbdEYYLsstM +DoCkKvbdRosfiedX +EOcKjvbdwuMdpyMO +EObjjvbdUsmUFlWK +EObjjvbdjuwOECXw +DncKjvbdqlzJxkgi +DoCkKvbdiHJbxujV +EPDLKvbdakMFoNcA +EOcLKvbdmIcsqUqa +EPCkKvbdeKKSVtzn +EPCkKvbdvBEZTOeI +DncKjvbdpstHSRjt +EOcKjvbdKVuGEEfi +DoDLKvbdZQldiNFR +EPCjjvbdxnTIYShc +EOcKjvbdtunXjQsA +EPDKjvbdjcLkRHVH +DncKjvbdDoDLLXCd +DnbjjvbdZyEJnDMS +DoDLKvbdFkFTCgmV +EOcKjvbdhkddOUby +EPDLKvbdNeEUJIkE +DnbkKvbdyzeNqghh +EPDKjvbdFVxopMjF +EOcKjvbdGdLVibKK +DncKjvbdBdQAvJlf +DoDKjvbdbiNKLFwY +EPCkKvbdnGeYNNgZ +EPDLKvbdEYXlUTsl +DncLKvbdOEcsiIjd +DncKjvbdKaLHMbYR +DncKjvbdyTOIlrCH +EPCkKvbdMpXpumgT +EPCjjvbdtbbtwVno +DoDKjvbdrRtkOLAm +EObjjvbdbLLfPNcA +DncKjvbdjmCLydgP +DnbkKvbdTkuoBVoJ +DnbkKvbdSCDdlJYk +EObkKvbdCEPaVjNG +DoDLKvbdFaOpxizm +EPCjjvbdfMevgMjL +DoCkKvbdYzcGRjVy +DnbjjvbdKRZdoGNe +EPDLKvbdZisIQHCG +EOcLKvbdZMSEUOMN +DoCjjvbdiGibxuiu +EPDLKvbdZQmFJMeR +DoCkKvbdsBemLfjy +DncLKvbdzoPqEcMY +DncLKvbdMoxRWOGs +EOcLKvbdFeirOJUR +DoDLKvbdpyOgfpdY +DncLKvbdyzeOSIJI +DoDLKvbdRkZFuHKs +DnbkKvbdxVNEqZLn +DoCjjvbdMgDPmPuL +EPDKjvbdZQmEhmFR +DncKjvbdBraDUFwS +DoCkKvbdqqtjmkAm +EPDLKvbdLZQirzuG +DoDLKvbdlYsRryGt +EOcKjvbdKaLHNBxR +EOcKjvbdTqQoUthN +EObkKvbdhbObeXRR +EPDKjvbdJutfDeGi +DoDLKvbdRkZFuGkT +EOcKjvbdrbGNLgKy +DnbjjvbdmpZyWKyC +EPDKjvbdHELVjBij +EPCjjvbduDDUvuoP +EOcKjvbdrDeIonWB +DoCjjvbdnPyyWLZC +EPDKjvbddndrjtUS +EObjjvbdjuvnDbYX +EPDLKvbdCIkBjhfK +EObkKvbdZjTHogCG +EOcKjvbdjJehKNYS +DnbkKvbdSxLMNzkY +DoDLKvbdKDKDRJcY +EPCkKvbdmpZxvKxb +DnbjjvbdssSTYyeD +EObjjvbdHDkVibJj +DnbkKvbdSLZFtgLT +DoCjjvbdxnTIXriD +DnbkKvbdcSbjsdJa +DoCkKvbduoTzpjoU +DoCjjvbdXsLaNUOx +DoDLKvbdcScKtEJa +DnbkKvbdfpBzwDwh +EPDKjvbdjlakyeGo +DnbjjvbdYzcFqivZ +DncLKvbdCIkBjiGK +EPDLKvbdxZhFfYFS +EObjjvbdrEFJQNvB +DoDLKvbdjAPgBQHK +EOcLKvbdkDLjqHUg +DoCkKvbdiUzFWqtb +DoCkKvbdKVtfDdfi +DoDLKvbdwkXEHzyf +EObjjvbdqcdhpOWB +EPCkKvbdeEnrBvbj +DoCkKvbdCTAbsewS +DnbjjvbdNHCpMouL +DoDKjvbdSQUGiecw +DoDLKvbdelevfmKL +DoCkKvbdySnImSCH +DncKjvbdANIZSvzY +DncKjvbdrJAJeNPF +EPCjjvbdqTtGqqjt +EObjjvbdaRfDHsfL +EPCkKvbdrJAJeMne +EPDKjvbdiGjDYvJu +DoDKjvbdMgCpMpVL +DncKjvbdZjTIQHCG +EOcLKvbdJYTbILqQ +DoCkKvbdzoPqEbkx +EPDLKvbdvlvANDeN +DncLKvbdatafwjsh +DncLKvbdJuuFcdgJ +DncLKvbdwXMAvBWV +DoDLKvbdaMjbStmH +DoCkKvbdeOdsLTtS +DoDKjvbdbLLeoNcA +EPDKjvbdJKEAJpGd +DnbjjvbdZnnIeEyj +EOcLKvbdunszpjnt +EObkKvbdmoyyWKxb +EObkKvbdILazmvpk +EPDKjvbdQlwbYmtz +EPCjjvbderAvzkcP +EObkKvbdegjvSORH +EOcKjvbdsrqsYydc +EOcKjvbdfIKvSORH +DnbkKvbdFjdsDIMu +EPDKjvbdpstHRqjt +EOcLKvbdWRmxCElD +EOcLKvbdkHflGFnL +DoCjjvbdZjTHofbG +EObjjvbdeEoSBwCj +EPCkKvbdJSyBTNXl +DnbkKvbdUaCRTQqy +EPDKjvbdSLZFtfkT +DncKjvbdyNrgwsJD +DoDKjvbdezuxdiUX +DoDLKvbdACrXiyhp +DoDLKvbdxwiJaoyk +EOcKjvbdUxhTzLOn +DnbjjvbdnHFYNNfy +EOcLKvbdhanbeWqR +DoDKjvbdzHYlAMdw +DoCjjvbdKyRJrzuG +DncLKvbdliETpuRa +EObkKvbdczYpXyRC +DoDKjvbdFfKRnIsq +EPDKjvbdVAbQsRSZ +DncKjvbdezvZEiUX +DoCkKvbdZisHofbG +EPDKjvbdjKFgilxS +EOcLKvbduVmxKQsA +DnbjjvbdhuZeWrUb +EObkKvbdGYuUaDxC +DoDLKvbdaaWFGPpX +DnbkKvbdUQpoVUhN +EPCjjvbdZxdJmcMS +DncKjvbdhbPCdwRR +EObkKvbdZRMeJNFR +DnbjjvbdTlVoBWOi +DoCkKvbdatbHYKtI +EObkKvbdiHJbxvJu +DncKjvbdsQWOjCvG +DncLKvbdRosfjGEX +EObkKvbdREDBQRDr +EOcLKvbdeEnqawCj +EPDLKvbdGZVUaEXb +EPDLKvbdIryArmXl +EObjjvbdiiehJlwr +DoCkKvbdMJCMRYAS +DnbkKvbdlrYtzTDi +DoDLKvbdnGeXlmfy +DoCkKvbdSCDeMJZL +EObkKvbdLFegaaRV +DoDKjvbdGGKRmhsq +EObkKvbdiLdcnVDZ +DnbjjvbdGBOqZJzm +DnbjjvbdhfjCxvKV +EPCjjvbdlBNPNALA +EOcKjvbdtbbuXWPP +DncLKvbdEPCjjwDE +DoDLKvbdLqwNZtpz +EPDLKvbdbVCGwkUI +DncLKvbdZyDimcLr +DncLKvbdfILWSNpg +DoDKjvbdFVyPpNJe +DncKjvbdqiAJeMoF +EOcKjvbdqrVLOLAm +DoCjjvbdehKuqnQg +DoDLKvbdGLFTCglu +DoCjjvbdXrlBMtPY +DncKjvbdlYrrTYgU +EPCkKvbdWSNxCFMD +DncKjvbdUVkoitAq +DncLKvbdfHjvSORH +DoCkKvbdCEPaWKMf +EObkKvbdmbJvxPOV +EPDKjvbdwzHefXeS +EOcKjvbdvvlAvAuu +DncLKvbdpxngfqDx +DnbjjvbdIwtCIMQp +DncKjvbdHDjvKBjK +EOcKjvbdjmCLzFGo +DnbkKvbdZMRdTnMN +EObjjvbdEOcLLWbd +DoDLKvbdkNBlZdfo +EPCjjvbdemGXHNKL +EOcLKvbdkxrqryGt +EOcKjvbdsPvPKDWG +EOcKjvbdXsMAlsoY +DnbkKvbdmIcspuSB +DoCjjvbdUaBpsRRy +EOcLKvbdSPsfiedX +EOcKjvbdSCEEkiYk +DncKjvbdWXJXudEg +DncLKvbdRyigrbvA +DoDLKvbdUMVoAvOi +DnbjjvbdZtIhxcsO +EOcLKvbdJXsbHkpp +DnbkKvbdZtIhyETO +DncLKvbdHlBzmvpk +EObkKvbdzHZMAMeX +EPDKjvbdKCjCpjDY +EOcKjvbdjblKqHUg +DoDKjvbdGGJrNiUR +DoDLKvbdrEFIomvB +EPCkKvbdrovPKDVf +DoDKjvbdpxnhGpdY +EPDKjvbdemGWgNKL +EPDLKvbdTlWPAuoJ +EOcLKvbdhuZeWqtb +DnbkKvbdhyuGLpnG +EObjjvbdSBcdlJZL +DnbkKvbdeEnqbWcK +DnbjjvbdJKEAJofd +EObjjvbdbQGfckzd +EPCjjvbdRkYeuHLT +DoDLKvbdXrlBMtOx +EObkKvbdznoqFCkx +EPDLKvbdjggLfFnL +EPDKjvbdhuZdwSVC +EPCkKvbdeEoRbXDK +EPCkKvbdKaKgNCYR +DoDLKvbdWWhxWDdg +EPCjjvbdqUTfqqjt +EOcKjvbdcSbkTdJa +DncKjvbdauCHXjtI +DoCkKvbdQlwbZNtz +DnbjjvbdqvolCiYq +EOcLKvbdePFSjstS +EOcKjvbdhgKDZWKV +EObkKvbdCgLfHAzc +DncKjvbdnUuZkKSG +DnbjjvbdlhctRUrB +DoDKjvbdpyPHgREY +DoCkKvbdjJegimXr +EPDKjvbdfHkVrORH +EPDKjvbdyTOIlqbH +EPDKjvbdjKFhKNYS +EPDKjvbdFWZPpMie +EPCjjvbdIwsahLpp +EObkKvbdKfGIBaQu +DncKjvbdGFirOJTq +DnbjjvbdpedFUWBI +EPCkKvbdNeDshiKd +EObjjvbdBiLBjhej +EObjjvbdCJKbLJFj +DncKjvbdvwMAuaWV +DnbjjvbdZRMdhleR +DncKjvbdhgKCyViu +DoCkKvbdhficZWKV +DnbjjvbdwkWdHzyf +DncLKvbdVBBqSprZ +EOcLKvbdUsmTelVj +EOcLKvbdFxuVBEYC +DoDKjvbdKaLHMbYR +EPCkKvbdGdKuiaij +EPDKjvbdfIKvRnQg +DncKjvbdfekzNfgA +DoCkKvbdJbicRJbx +EOcKjvbdIwsagkpp +DncKjvbdOEctIiKd +DncKjvbdOTUVfduQ +EPCkKvbdFWZPomKF +EObjjvbdezvZFJUX +DoCjjvbdtSrTYzFD +DoCkKvbdbVCHYLTh +EPDLKvbdZMRdUOLm +DoDLKvbdNwoVzdNt +EPDLKvbdFaPRZJzm +DoCjjvbdxZhGFweS +EPCjjvbdZQmFImFR +DnbjjvbdsQWOibvG +DoCjjvbdSBdFMIxk +EPCkKvbdEObkKvcE +DoDKjvbdqFcdsvAh +EOcKjvbdezuyEhsw +DnbkKvbdVqnXaeMD +EObjjvbdnGeXlmgZ +DncLKvbdCIkBkIfK +EPDLKvbdpecdtWAh +EPDKjvbdsQVnjCvG +DoDKjvbdkDMLQfuH +EObjjvbdAMhZTWzY +EPCjjvbdiCObdvqR +DoDKjvbdUWLoisaR +DncLKvbdSPtHKGDw +EObjjvbdaNLBrtmH +EPDKjvbdUyHszKoO +DoDKjvbdQwNccLhD +EPDLKvbdnVUzKjRf +DoCkKvbdRyigrcWA +EOcLKvbdbiNKLGXY +DncKjvbdlhctRVSB +DoCkKvbdNPxRWNfs +EObjjvbdANHxsXZx +DnbjjvbdNrsvHEuQ +EPCjjvbdmbJvxPNu +EOcKjvbdJvVGEFGi +EPDKjvbdUWLoitAq +DoCkKvbdkDMKpfuH +EOcLKvbdfjfzbfAE +EOcLKvbdczZQYZRC +DoDLKvbdQwNcblHc +EObkKvbdOTTugEtp +DncKjvbdbUagYLTh +EPCjjvbdfNGWfmKL +EObjjvbdiVZdvrUb +DncLKvbdZyDinDMS +EPCkKvbdmaiwYOmu +EOcLKvbdqUUHSRkU +DncLKvbdDncKjvbd +DoCkKvbdVqmxCElD +EPCkKvbdaRfDIUFk +EOcKjvbdjKGIJlxS +DncLKvbdkxrrTZHU +DncKjvbdypnmIjXA +DoDLKvbdJpyeOfOF +DoDLKvbdwXMBVaVu +DoDKjvbdKfFhCAqV +DoCjjvbdIxTahLqQ +EOcLKvbdADSYKZiQ +DoCkKvbdMowpunHT +EOcKjvbdgKfzbfAE +EPDKjvbdhkddOVDZ +EPDLKvbdemFwHMik +EPCjjvbdUVlQKTaR +DncLKvbdRWnECkhD +DnbjjvbdkWXODbYX +DoCjjvbdZeYGzghb +DoCkKvbdSKyFtfkT +DoDLKvbdBhkCLJFj +DncKjvbdlhdTqVRa +EPDKjvbdqqtjmjaN +DoDLKvbdZjTHofbG +EPDLKvbdJmADzHVB +DoDLKvbdSBceLhyL +EObjjvbdqwPlCiYq +DncLKvbdYORAXtvU +EPDLKvbdZnnJEdyj +DoCjjvbduWNxKQsA +EPDKjvbdWSNxCElD +DoCkKvbdRjyFtgLT +DoCkKvbdeOeSkUUS +EOcKjvbdDihKVxKA +EObjjvbdffLymgHA +DoDLKvbdcScKsdKB +EPDLKvbdlYsSSyGt +DnbjjvbdGKeTDINV +DoDLKvbdCTBCtGXS +EObjjvbdEASIlyvw +EPDLKvbdfMfWfmKL +DoCkKvbdpstGqrLU +DncLKvbdtlXwAsaX +DoDKjvbdNrsvHEuQ +EObjjvbdCTBDTfXS +DoDKjvbdkMalZeHP +DoDLKvbdQccBPqDr +DnbkKvbdYqNEiNEq +DnbkKvbdvBDyTOeI +DnbjjvbdLAkGmBxR +EObkKvbdLiBlRYAS +EPCjjvbdTukpKUBR +EObkKvbdhuZeWqtb +DoDLKvbdZyEJmbkr +DnbjjvbdxrmiNSCH +EPCjjvbdKWVFdFHJ +EPCjjvbdRWmcblID +EPCkKvbdsQVoJcVf +EPCkKvbdGcjuibJj +DoCjjvbdJuteceHJ +DnbjjvbdLLAhWAJy +DncKjvbdULunaWOi +EOcLKvbdHlBznXQk +DoDKjvbdvBDxroEh +DoDKjvbdzaAPHGbM +DoDLKvbdUyITyjoO +DnbkKvbduaDxroFI +EObkKvbdAMhZSvzY +EObjjvbdDoDKkWbd +EObkKvbdGKdrbhNV +EPCkKvbdmgFXlnGy +EOcKjvbdzdzOzdzQ +EPCkKvbdKkBHvAJy +EOcKjvbdqAiFAWhE +DoCjjvbdQvmdClID +DncKjvbdMtsSKmAX +EObjjvbdziuPpETU +DoDKjvbddZyQYZQb +EPDLKvbdauBgXkTh +DnbkKvbdnCJvwnmu +DoCjjvbdxUmFQyMO +DncKjvbdXGYzUAPT +EPDLKvbdOAJTUKSA +DncKjvbddZyPwxqC +EOcKjvbdqlzKYlIJ +DnbjjvbdkVvnDaww +DnbjjvbdZdxGzhIb +DnbkKvbdDwxLtTsl +EObkKvbdGKdrcHmV +DncKjvbdTAFJHbOd +DoDKjvbdEObkKvcE +DnbkKvbdaNLCSuNH +DoDLKvbdDxYLtTtM +EObjjvbdVZIUZjnn +DoCkKvbdNsUVfduQ +EOcLKvbdGGKRmhtR +EPDKjvbdbKlFnmcA +DncKjvbdvvlAvBWV +DoCjjvbdliEUQtrB +DnbjjvbdjgfkfGNk +EPDKjvbdlYsSTYft +DoDLKvbdbKlGOnDA +EPDKjvbdjAPfaPfj +DnbkKvbdzGyMAMeX +DoCjjvbdZnmhddzK +EPCkKvbdIMBzmwQk +EObkKvbdjEkHVPAO +EPCkKvbdQccBPpdS +EPCjjvbdhgKCxvJu +DncLKvbdVgxVxHYz +EOcKjvbdxVNFQxkn +DoDKjvbdbLMGPNcA +DncLKvbdGckWJajK +DnbkKvbdrMyiyLgi +EOcLKvbdKefICApu +DoCjjvbdqFdEtWBI +EPCkKvbdYSlBNUPY +DoCjjvbdIwsbILpp +EPCjjvbdmgFYMnHZ +EObjjvbdQvmccMID +DncLKvbdURQntthN +EOcLKvbddxZtUSFz +EPCkKvbdhtzFWqtb +EOcKjvbdVBCRSpqy +DncKjvbdtbbtvvOo +EPCkKvbdczZQYZQb +DnbjjvbdQwODcLgc +EPDLKvbdtunXipsA +DncLKvbdBhjajhej +DoDKjvbdNrtVfduQ +EOcLKvbdKWUfDdfi +EObjjvbdpstHRrLU +DnbjjvbdznpRFClY +EPCjjvbdfNFvgMik +DoCjjvbdUsltGLvK +DnbjjvbdlqyVZsDi +DoCkKvbdNPwqWOHT +EOcLKvbdakLeoNcA +DoDKjvbdsCGNMGkZ +EPDKjvbdaRfDHsfL +DoDKjvbdZtIhyDrn +EPDLKvbdOStVgFUp +EPCkKvbdeATplxKG +DncLKvbdySmhlrBg +DoDKjvbdnCKWwoOV +DnbjjvbdDncKjvcE +EOcLKvbdwzIGGXdr +EObjjvbdmIdTqVSB +DnbjjvbdUGznLwVe +DncLKvbdTkvOaWPJ +DncKjvbdyOSgwsIc +DncKjvbdjmCLzFGo +DoDLKvbdpssfqqkU +EPDKjvbdmtuZjirG +EOcKjvbdOFEThhkE +DoDKjvbdIMBznWqL +EPCkKvbdJvVFcdfi +EPDKjvbdnBivxOmu +EObkKvbdTvLojTaR +DoCkKvbdMRwNZtpz +EObjjvbdEARhlzXX +DnbjjvbdcScLTcjB +DncKjvbdxmrhXrhc +DoDKjvbdEvZQQNKF +DncLKvbdGLErcHmV +DoDLKvbdFkFTChMu +DoCkKvbdOFETiIkE +EPDKjvbdnVUzLKRf +EPDKjvbdmuUzKjSG +EPCjjvbdwuNFQxkn +DncLKvbdeATpmXjG +EObjjvbdxUmEpxkn +EPDKjvbdcSbkTcjB +EPCjjvbdmbKXXoNu +EPDKjvbdSQUHKFdX +DoDKjvbdCTAbsewS +EOcLKvbdVwJYVdFH +DoDKjvbdZtIiYcsO +EPDKjvbdhkeENtcZ +EObkKvbdGBOpyJzm +EPCkKvbdRMxCYmtz +DoCjjvbdzjVPocsU +DoDLKvbdrDdiPnWB +EPCjjvbdFjdsDIMu +DoDLKvbdSLZGUgLT +EPDLKvbdKefHaaQu +DoDKjvbdKCibpicY +EOcLKvbdijGIJmYS +EObjjvbdelfWgNKL +DnbkKvbdbhmKKfWx +DoDKjvbdSQUHKGEX +EPCkKvbdnGdxMmgZ +DncLKvbdJJdAKPgE +EPDLKvbdmRyUyrdJ +EOcLKvbdhzUfLqOG +DoDKjvbdLAjgMaxR +DoDKjvbdRosfjGEX +EObkKvbdpssfqqjt +DnbkKvbdjAQHAofj +DncLKvbdidkHUoAO +DoCkKvbdCIjbLIej +DncLKvbdelfWfmKL +DoDLKvbdxUleQxkn +EPDLKvbdEvZQPljF +DncLKvbdJbjDQjCx +DncLKvbdyOTIXriD +DoDKjvbdTulPjUAq +DnbjjvbdJSyAsNYM +EOcLKvbdbBVeGQQX +EPCjjvbdbKkenmcA +EPCjjvbdiGjDZWJu +DncLKvbdcSbjsdJa +EObkKvbdZtJIyDsO +DoDLKvbdrafMkgLZ +DoCjjvbdiMFDmuDZ +DnbkKvbdnUtyjirG +EPDKjvbdfNFvflik +DoDLKvbdrWokcJZR +DncKjvbdWWhxWDdg +EPDLKvbdNeDtJJKd +EOcLKvbdqlzKYkhJ +DncKjvbdSQUHKGDw +DoCkKvbdkHflFfOL +EPCkKvbdRXNdDMID +DncLKvbdSLZFtfkT +EOcLKvbdZQldiMeR +DnbjjvbdSBdElJYk +DncLKvbdwWlBVaWV +DoCjjvbdhzUfLqOG +DoDLKvbdmJEUQuSB +DnbjjvbdULvPBVoJ +EPDLKvbdYkrDtOMN +EPDKjvbdHEKujBij +EObjjvbdJuuGDdfi +EObjjvbdzaAOgGbM +DncLKvbdkClLRHUg +EObkKvbdYTMAmToY +EObjjvbdxVMeQyLn +DoDKjvbdrEFJQNua +DncKjvbdYSlBNTnx +DnbjjvbdrSUkOLAm +EOcLKvbdrylQTBIO +DnbjjvbdrouoKDVf +DoDLKvbdwWkaVaVu +DoCkKvbdZQmFIleR +EPCjjvbdiLeENtby +DoCjjvbdrDeJQNua +EObjjvbdIGfzYxXg +DoCkKvbdySmiMqag +EOcKjvbdbVBgYLTh +DoDKjvbdLFehCApu +EPCkKvbdCDpAvJmG +EObkKvbdZLrDtOLm +EPCkKvbdZnnJEdyj +EPCjjvbdZjSgpGbG +EOcKjvbdWSOYBdkc +EPDKjvbdwtleQyLn +DnbkKvbdmJDtQuSB +EObkKvbdkWXODbXw +DncKjvbdezuyEiTw +EObjjvbdnBjWwnmu +EPDKjvbdZxdJmcMS +EPDKjvbdrbGNMHLZ +EObkKvbdEYXlTssl +DnbjjvbdyTOJNRag +DnbkKvbdGZVVAdYC +EPCjjvbdTYLMNzkY +DncLKvbdJcJcRKDY +EOcLKvbdYpmEhldq +DoCkKvbdjKFgjNYS +EPDLKvbdJbibqKCx +EPCjjvbdyTNiNSCH +DoDLKvbdGGKRmhsq +EPDLKvbdLAkGmCYR +EPDLKvbdCEPaWKMf +DoCkKvbdZsiIyDsO +EPCjjvbdjbkkRGuH +DnbkKvbdqYoHgREY +DoDLKvbdZMRctNkm +EObjjvbdDjIJvYKA +DncKjvbdVqnXbEkc +EPCkKvbdiHKCyViu +EOcKjvbdkHflGFmk +DoDKjvbdOFDsiIjd +EOcLKvbdVrOYCEkc +EPCjjvbdhtydvrUb +DoDLKvbdrNZjYlHi +EPDKjvbdVwIxWDeH +EObkKvbdhyuFlRNf +EPDLKvbdSKyFuHKs +DoCkKvbdBhjajiFj +DoDKjvbdhanbeWpq +DncKjvbdGGJqnJTq +EPDKjvbdZtJIyETO +EOcLKvbdANIZSvzY +DnbkKvbdptUHSSLU +DoDLKvbdRDcBPpdS +DoDKjvbdBcpAujNG +DnbjjvbdaaVdeopX +DnbjjvbdhtydvrUb +DoCkKvbdkWXNcaxX +DncLKvbdrNZjYkgi +EPCjjvbdBiKajiGK +EObkKvbdwkWcgzzG +EPCkKvbdRDcApQcr +DncLKvbdfekzNgHA +DoDKjvbdiBoCdwRR +EOcLKvbdIBlZdzAD +DnbkKvbdZLqcsnMN +DoDKjvbdatbGwkUI +EObjjvbdmgFXlmfy +EPDLKvbdxUmEqYkn +EPDLKvbdauBfxKsh +EObjjvbdsPvOjDVf +DnbkKvbdkVwNdBww +EPCkKvbdzaAPGfbM +EOcLKvbdRotGjGDw +EPCkKvbdqceJPmua +EPDLKvbdZyDinCkr +EObkKvbdCDoaWKMf +EOcKjvbdjmCLzEgP +EPDKjvbdHlBznXRL +DncKjvbdeOeTLTtS +EPCjjvbdGZUuBEXb +DnbkKvbdqTtHRqjt +EOcLKvbdFyUuAdXb +EPDLKvbdEARiMzWw +EOcKjvbdFeirNiUR +DoCkKvbdzjUoocsU +EOcLKvbdEztQdlCi +DncLKvbdKCjCpibx +EPCjjvbdxZhGFxFS +EObjjvbdwWkaWAvV +DnbkKvbdaaWFFoow +EOcKjvbdBsBDUGXS +EPDLKvbdmIdUQuRa +DncKjvbdVAbRTRRy +DoCkKvbdHffyxxYH +EObjjvbdDGkfHAzc +DoCkKvbdiCPDFXRR +EPCkKvbdVrNwbEkc +EPCkKvbdiGjDYvKV +DnbkKvbdIMBzmvpk +EPCkKvbdKxqJrztf +DncLKvbdmIctQuSB +EOcKjvbdaSFbhUGL +DoCjjvbdmbKWwnmu +DoCkKvbdiUyeWrVC +DncKjvbdGGKRmhsq +DoCjjvbdehLVqnQg +DncLKvbdTkunaVoJ +DnbjjvbdGZUtaDxC +EPCjjvbdtSrSyZeD +DoDLKvbdjbkkQfuH +EOcLKvbdOFDtJJLE +DnbjjvbdBdQAvJlf +DoCkKvbduDDVWvPP +EOcKjvbdZtJIyDsO +DncLKvbdQccBPpdS +DncLKvbdiUzEvquC +EPCjjvbdvvkaWAuu +DoDLKvbdZoOIeEzK +DnbkKvbdkCkkRGuH +EOcKjvbdRkZGVHLT +EObkKvbdtcCuXVno +EPCjjvbdMpYRVnGs +DoDKjvbdFfJrNiTq +DnbkKvbdZnmiFFZj +EPDLKvbdbhmKKfWx +DoDLKvbdDjHivXjA +DoDLKvbdiLeDnVDZ +EOcLKvbdUQqOtthN +EPDKjvbdZHXEAOri +EObkKvbdvAdYrndh +EObkKvbdQlwaxnUz +DoCjjvbdQwOEDLhD +EPDLKvbdqrVKnLBN +EObjjvbdwtmFQxkn +EPDLKvbdTfznMWvF +DnbkKvbdaMjasVNH +EPCjjvbdcyyQXxpb +DncKjvbdMfcQMpUk +DnbjjvbdZnmheEzK +DncLKvbdbrbkUDia +DncLKvbdiCOcFXRR +DoCjjvbdZxcimblS +EPDLKvbdRkYfVHKs +DncKjvbdDoDKjvbd +EOcKjvbdGAnpxizm +EOcKjvbdYpldhldq +DnbkKvbdQwOEDMID +DnbjjvbdcyxoxYpb +DoCjjvbdakMGOnDA +EPCjjvbdLAkGlawq +DncKjvbdJJdAKPfd +EOcLKvbdxrnImSBg +DoDLKvbdNddUJIjd +DncLKvbdfIKvRmpg +DoCjjvbdiZuGLqOG +EOcLKvbdeAURMwif +DncLKvbdiCPCeWpq +DoCjjvbdGcjvKBij +EPDKjvbdRDcBQQdS +EPCjjvbdUtMtGLvK +EPDKjvbdyXhjBoyk +DoDKjvbdqZOgfpcx +EObjjvbdYTMAmUPY +DoDLKvbdiCObeXQq +DncKjvbdmJDtRUqa +EObkKvbdSCEElIyL +EObkKvbdNGbpMouL +DoCkKvbdEzsqElCi +EObjjvbdOStWHFVQ +EPCjjvbdjmBlZdfo +EPDKjvbdiUyeWqtb +DnbjjvbdYSkaNUPY +DoCkKvbdTAEhhCPE +DoCjjvbdmttyjjSG +EOcKjvbdrMyjZMIJ +EPDKjvbdUsmTelVj +EPCkKvbdNsTugFUp +DnbkKvbdWRnYBeMD +DncLKvbdHgGzZXxH +EPDLKvbdZLrDsmlN +DncLKvbdcSbkUDjB +EObkKvbdziuPpDrt +DoCjjvbdZyEJmblS +EObkKvbdjggMFenL +DnbkKvbdmfeXmNfy +EObkKvbdiBncFXRR +EPDKjvbdADSXiyiQ +EObjjvbdLFfHbApu +EOcLKvbdRMwbZOUz +EPCkKvbdFVxoomJe +EOcLKvbdZnmiEdyj +DncLKvbdULunaVoJ +DncLKvbddndsKtTr +EPDKjvbdEztQeMDJ +EObkKvbdcScKscjB +EOcKjvbdFkErbglu +DoCkKvbdsBfMlGkZ +EPDLKvbdCSaCsfWr +EPCjjvbdVAapsRSZ +EOcLKvbdgFkzNfgA +EPDLKvbdjhHLefNk +EObjjvbdyNsIXsIc +DoCjjvbdqcdiPmvB +EOcKjvbdeXyssrFz +DnbjjvbdEOcKjwCd +DoDLKvbdGKdrbgmV +DncLKvbdKQzEoFnF +DoCkKvbdqvpMDJZR +EObkKvbdZyEKODMS +DncKjvbdBhjbKiFj +DncKjvbdfHkVrNqH +DncLKvbdeXyssrFz +EObjjvbdxmsHwriD +EPDKjvbdRyigsCvA +DoCkKvbdZoNiEeZj +EPCkKvbdhzUfLpnG +DncKjvbdVUNUFkuj +EPDKjvbdRXNdDMID +EObkKvbdlBMnmALA +EPDKjvbdffMZnHHA +EPCjjvbdEARhlyvw +EOcKjvbdVTltGLvK +EOcKjvbdJqZdoFme +EObkKvbdyOTHwsIc +DoDLKvbdCfkegAzc +DnbkKvbdZMRdTmkm +DnbkKvbdhkeEOUcZ +DoDKjvbdZnnIeEyj +DnbjjvbdrafNMGkZ +DoDLKvbdZtJIyESn +EOcLKvbdaRecITek +EPCjjvbdZoOJEdyj +DoDLKvbdxsNhlrBg +EPCjjvbdZxdKNcMS +DoCjjvbdCWzdJEov +EObkKvbdTppnttgm +DnbkKvbdjmCLydfo +EObkKvbdBsAbsewS +EObjjvbdjgflFemk +DnbjjvbdpstGrSKt +EOcLKvbdOTTvHFUp +DoCkKvbdczYowyRC +EObkKvbdTvMPjUAq +EOcKjvbdezvYeJUX +EPCkKvbdzHYlANEw +EPCkKvbdqcdiQOVa +DoCkKvbdsrrSxyeD +EObkKvbdOTUWGeUp +DoDKjvbdbUbHYLTh +DoCkKvbdHakydzAD +DoDKjvbddjJrWUzn +EPDKjvbdmaiwYPOV +DoCjjvbdtbcUwVno +EPDLKvbdrMyjYkgi +DoCjjvbdUQpoUtgm +DncKjvbdddoSBwDK +EPCkKvbdatbGwkTh +DncKjvbdmbJvxPNu +DnbjjvbdwzHeewdr +DncLKvbdzitpPcrt +EOcLKvbdrMyjYkgi +EOcLKvbdrEFIomvB +DoDLKvbdiifIJlxS +EOcLKvbdtvOYKQsA +DoCkKvbdxsNhlqag +DnbjjvbdyTOIlqag +DncLKvbdIGgZyYXg +EOcKjvbdUsmUGMWK +EObkKvbdhzUfMQnG +EPDLKvbdZxdJnCkr +DncKjvbdKWUeceGi +EOcLKvbdmbJvwnnV +DoDLKvbdDncKjvbd +EPCkKvbdZoNheEyj +DncLKvbdVqnXadlD +DncLKvbdtunXipsA +DncLKvbdjAPgBPfj +DoCkKvbdyqPNJKXA +DncKjvbdrpWPJbuf +EOcKjvbdqvpMDJYq +DnbjjvbdcTDLUDia +DnbkKvbdiGjCxvKV +EPDKjvbdauBfxKtI +DoCkKvbdLFfHbApu +DoDLKvbdHffyyXwg +EOcKjvbdIxUCHkqQ +DoDKjvbdzQoMiJwA +DoDKjvbdyYIjBoyk +EObkKvbdxnSgwriD +EObkKvbdIMBznWpk +EPDKjvbdYlSDtOMN +DoDKjvbdijGHjMxS +EOcKjvbdYkqcsnMN +DoCjjvbdmaiwYOmu +EPDKjvbdHELWKBjK +DoCjjvbdwtmFRYlO +EOcLKvbdFeiqnJTq +EPDKjvbdiBncEvqR +DoCkKvbdJXsbILpp +EObjjvbdULunaVni +DncKjvbdDwxLstUM +DoDKjvbdrWpMChyR +EObkKvbdYzcFqivZ +DncKjvbdEzspdlDJ +EPDKjvbdfMfXGmKL +DoCkKvbdCTAbtGWr +DoDLKvbdRkZGUgKs +EPCkKvbdFWZQQMie +DnbjjvbdxVNEqYkn +DoCjjvbdeFPRbWbj +EPCkKvbdZshhyESn +EObjjvbdqrVKnLAm +EPCjjvbdptUGqqjt +EOcLKvbdrEEhpOVa +DncKjvbdzQoNIjXA +DncLKvbdmgFXlnGy +DoDKjvbdZjShQHBf +DnbjjvbdjKGHjNXr +DoDLKvbdqFcdsvAh +EPCkKvbdOEdUIiLE +EPDLKvbdNeEUJJKd +EPCjjvbdzHZMANEw +DnbkKvbdqlzJyMIJ +DnbjjvbdelfXHMjL +EPCkKvbdANHyTWzY +DnbjjvbdREDBPpcr +DncLKvbdQmYCZOUz +EOcKjvbduoTzpjoU +DoCjjvbdqrUjmkBN +DnbjjvbdyfxlANFX +EOcLKvbdJmADygUa +EPDLKvbdyNrhYTIc +DoCjjvbdCTAbtFwS +DncLKvbdSwkLmzkY +DnbjjvbdjhHMFfNk +DoCkKvbdZeXfzhIb +DnbjjvbdbrbjtEJa +DoCkKvbdxrmhmRbH +DoDLKvbdrXQLbhxq +EObjjvbdTulQKUBR +EPCkKvbdMpYQumgT +DncKjvbderBWzlDP +DoCjjvbdiGjCxvJu +DoCjjvbdlZSqsZGt +EOcLKvbdZisIPfaf +DnbkKvbdHEKvKBij +DncLKvbdjSziSjiz +EPDKjvbdCEQBWJmG +EObkKvbdGGKRmiUR +EPDKjvbdMuTRkNAX +DnbjjvbdrXQLbiYq +EPCjjvbdOTUWGduQ +EPCjjvbdnBjXXoNu +DoDLKvbdcarmSAUN +DoCjjvbdNPwqWOGs +EObkKvbdUslsekvK +DnbjjvbdzaAPGfbM +DoCkKvbdGdLVjCJj +DoDLKvbdRjyFtfkT +DoDLKvbdGLFTDHlu +DnbkKvbdGFirOJUR +EPDLKvbddoFTLUUS +EObkKvbdkxrrTZGt +DncKjvbdxrnJMqag +EOcLKvbdCDpBWJmG +DoCjjvbdlqyUysDi +EPDKjvbdTfzmlXVe +DncKjvbdEuxpQMie +EOcKjvbdbLLfPNcA +DncKjvbdVgxWXgYz +DoDKjvbdrbFmLgKy +DoCjjvbdzaAPGfbM +DncLKvbdYSlAlsoY +DoDLKvbdZyEJnClS +EPDLKvbdEvYopMjF +DncKjvbdmtuZjiqf +DoCjjvbdCJKbLIfK +EOcLKvbdcIljLFvx +EObkKvbdrJAKFNPF +DoDKjvbdBiKbKhfK +EPDKjvbdWIYWYGxz +DoCkKvbdjAQGaQHK +DnbjjvbdjblLQftg +DncLKvbdbhlikGXY +EPDKjvbdZLrDsmkm +DoDLKvbdVTlsfMWK +DoCjjvbdliDsptqa +DnbkKvbdjuvmcbXw +DoCjjvbdbVCHXjtI +DoCkKvbdQvmdClID +DnbjjvbdLAkHNCXq +EPDKjvbdZtIhyETO +DnbkKvbdYkqdTmlN +DoDKjvbdMtrrKmAX +DncLKvbdJXtCIMQp +EPCkKvbdlhdTqUqa +EObjjvbdnHFYNNfy +EPDKjvbdxrmhlrBg +DncLKvbdiLeDmtcZ +DncKjvbdNrsufdtp +EObkKvbdlhcsptqa +EObjjvbdNeETiIkE +DnbkKvbdxsNhmRbH +DnbkKvbdADRxKZhp +DnbjjvbdTqROuUgm +EOcKjvbdpxoIGqDx +EOcLKvbdqBIeAWhE +DnbjjvbdCIkBjiFj +DncLKvbdTlWPBWPJ +DoCjjvbdEKHjVxKA +DnbkKvbdZRNFImEq +EObkKvbdJbicQjCx +DoDKjvbdNsTufeVQ +EObjjvbdDxYMUTsl +DoDLKvbdaSFcITfL +EPDKjvbdcTDLTcia +DoCkKvbdlhdTpuRa +EObjjvbdCJKbKiFj +DncKjvbdqAiFAWhE +EPDKjvbdUslsfLuj +EObjjvbdWWiXuceH +EPCjjvbdOEcshiLE +EPDLKvbdEJhJuxKA +DoCkKvbdKyRKSzuG +DncKjvbdHffzZXxH +EOcLKvbdSLZGUfkT +EObkKvbdHgHZxwxH +DnbkKvbdcSbjtEJa +EPDKjvbdZGwEAPTJ +DoDLKvbdeAURNXif +EPDLKvbdMpYQunGs +EObkKvbdNeDshiKd +DoDLKvbdzoQQdbkx +EPDKjvbdWHxWXfxz +EPCjjvbdCEPaVjNG +DoCjjvbdbhlikFvx +EOcLKvbdBvzdIdpW +DoCkKvbdNPwqWNfs +EPCjjvbdbhlijfWx +DncKjvbdqwQLbiZR +EObjjvbdkClLRGuH +DncKjvbdNHDQNQVL +DncKjvbdhkdcmuDZ +EOcKjvbdKWVFdFHJ +EPDLKvbdYTMBMtOx +EObkKvbdSKxfVGjs +DncKjvbdZoOJEdzK +EObjjvbdMpXqVmgT +EPDKjvbdhaoDFXRR +EPCjjvbdrpWPJcVf +EOcKjvbdczYpYZRC +DoDLKvbdLLAhWAJy +DoDKjvbdEObkLXDE +EPDKjvbdnVUykKRf +DnbkKvbdBvzdIdov +EOcKjvbdGFirOJUR +DoCjjvbdGGJrNiTq +EPDKjvbdqAheAWgd +DncKjvbdxmsIXriD +EObkKvbdVAbQsRRy +EPDKjvbdRXODbkhD +EObjjvbdVZHtZjoO +EOcKjvbdffMZmfgA +EOcLKvbdbiMjLGXY +DoDKjvbdUQpoVUhN +EPCkKvbdhfjCxuiu +DoCkKvbdziuPocsU +EObjjvbdBhkBkJFj +DnbjjvbdeAURNXif +DncKjvbdQlxByOUz +EPDLKvbdRbEEkhxk +EPCjjvbdrbFlkgKy +DoCjjvbdaSFbhUGL +EOcKjvbdsCGMkfkZ +DoCkKvbdJbicRJcY +DnbkKvbdqlzKYlHi +DoCjjvbdZyDimblS +EOcLKvbdsrqsZZdc +DoDKjvbdjggMGGNk +DnbkKvbdADSXiyiQ +DoCkKvbdehKurORH +EOcLKvbdrylPsAgn +EPCjjvbdRWmdClID +EPCjjvbdbsCjsdKB +EObjjvbdUQpoVVHm +DnbkKvbdiCObeXQq +DncLKvbdUQpoVUhN +DoCkKvbdKCicRKDY +DncKjvbdjlakzFGo +DnbkKvbdMgDQMpVL +DoDLKvbdWSNxBeMD +DnbkKvbdvBEZTOdh +EPCjjvbdsQWPKCuf +EObjjvbdZeYGzghb +DnbkKvbdxsNhmSCH +EPDLKvbdkySrTZGt +EObkKvbdrDdiQNvB +DncLKvbdHDjuiajK +DoCjjvbdURROtuIN +DncKjvbdKyRJrztf +EObjjvbdIGfyyYXg +DncLKvbdXsMBMtPY +EPCkKvbdaaVdfPpX +DncKjvbdiHJbyWJu +EOcKjvbdSKxfVGjs +DoDKjvbdxZgfFwdr +DnbkKvbdRNYCZNtz +EPCkKvbdCDoaWKNG +DoDKjvbdDjHjWYKA +EPDKjvbdyNsHwsIc +DoDKjvbdUtNTfLuj +DoDLKvbdGGKRnJTq +EPCkKvbdsBemMGjy +EPDKjvbdSQUHKFcw +DnbjjvbdkClKpfuH +EObjjvbdRyjHrcWA +EOcLKvbdSPsfjGEX +DoCjjvbdGckWKBij +EPCkKvbdGdKujBij +DnbjjvbdcJMijewY +EPDKjvbdkIGkefOL +EPCkKvbdrSVLNkBN +DnbkKvbdrpWPJbvG +DoDLKvbdZirgpHBf +EPCkKvbdHDjujBij +EPCkKvbdvBDySoEh +DoDLKvbdePEsKssr +DoDLKvbdZRMdhldq +EObjjvbdUQqPUtgm +DoDLKvbdMSXNZtpz +EObjjvbdVYhTzKnn +EOcKjvbdrNZixlIJ +DoDLKvbdTpqPVVIN +DnbkKvbdkCkjqHVH +DnbkKvbdkWWmcaxX +EOcLKvbdJSyBSlwl +EObkKvbdmRxtzTEJ +DncKjvbdptTgRqjt +EOcLKvbdqYoHfqEY +DoDKjvbdGZUtaDxC +EOcKjvbdKQydoGNe +EPDLKvbdssSTZZeD +EObjjvbdhkddOUcZ +DoDKjvbdGdKvJbKK +EOcKjvbdULvPAuoJ +DoCkKvbdrEFJPnWB +DnbjjvbdfNGWfmJk +EPCkKvbdkWXODaww +EOcKjvbdMtrrKmAX +DnbjjvbdEuyPpMie +EObjjvbdrSVKmkAm +EPDLKvbdhanbdvqR +DoCkKvbdkWWmdBww +DnbjjvbdxUleQyLn +EOcLKvbdpyPHfpdY +DncKjvbdpfDeTvBI +DoCkKvbdnVVZjirG +DnbkKvbdzjVPocsU +EPDLKvbdmfdwlmfy +DnbkKvbdSKyFuGjs +EObkKvbdVAaprpqy +EPCjjvbdUaBqTRRy +EObkKvbdZoNhddzK +DncKjvbdrNZiyLhJ +DncKjvbdaMkBruNH +DoDKjvbdZyDjNcMS +EPCjjvbdZjTIQHCG +EObkKvbdjJegilwr +EPDKjvbdHffzYxYH +EPDKjvbdaSGChTfL +DoDLKvbdcJMjLGWx +EOcLKvbdtlXvaTaX +DoCjjvbdGYuVAcxC +EOcLKvbdUsltGLvK +EPDLKvbdRNXayOUz +DoDLKvbdRadFLiYk +EOcKjvbdCTAbsfXS +EPCjjvbdGZVVAdYC +EPDLKvbdypnliJwA +EPCjjvbdSBdFLhxk +EOcLKvbdGLFSbhNV +DncKjvbdTppnuUhN +EObkKvbdezvYdiTw +DoCkKvbdIsZBSlxM +DncLKvbdRNYBxmtz +EPCkKvbdeFOqawCj +DnbjjvbdtSrTYzEc +DncKjvbdkDLkQgUg +DnbjjvbdEARhlzXX +EOcKjvbdWRmxBeMD +DoDLKvbdzQnliKXA +EPDKjvbdpfDdtWAh +DncLKvbdMgCpMpVL +DnbkKvbdiZtfLpmf +EPDLKvbdzQoNJJwA +EPCkKvbdaNKasUmH +EPDLKvbdRbDeLhyL +DoDLKvbdKRZeOeme +EOcKjvbdZxdJmcMS +DncLKvbdeKKSVtzn +EPDLKvbdRjxeuHLT +EObkKvbdNGcPmPtk +DoCkKvbdtcDVWvPP +EPCjjvbdcTDKscjB +DoDLKvbdbrcLTcia +EObjjvbdvlvAMcdm +EObjjvbdFxuVBDwb +EPCjjvbdhkdcmtby +EOcKjvbdRotHKFcw +DncLKvbdelfWgNKL +EObkKvbduCbuXVno +EPDKjvbdEYXlUUUM +EOcKjvbdbUbHXjsh +EOcLKvbdmgEwmOHZ +DoCjjvbdEXxLsssl +EPDLKvbdZLqdTmlN +EOcLKvbdbsCkUEJa +EOcKjvbdqvpLbhxq +EOcKjvbdfIKvRmpg +DncLKvbdGBOpxizm +DoDLKvbdnBiwXnmu +DoCjjvbdKWVFceGi +EOcLKvbdRbEEkiZL +EObjjvbdffMZmgHA +DoCjjvbdUMWPBWPJ +EObkKvbdkClKpftg +DoDLKvbdBhkBkIej +DoDKjvbdhgJbyWJu +DoCjjvbdEASIlzXX +EPDKjvbdGZUtaDxC +DnbjjvbdlYsRryHU +EOcKjvbdhgKCyWJu +EPCkKvbdsQWOibuf +DoCjjvbdRMwbYmtz +DoDKjvbdZxdJnClS +EPCjjvbdJTZBTNYM +DnbjjvbdiLeEOUby +EOcLKvbdjEjgUoAO +EPCkKvbdzitopDrt +EPCjjvbdtcCuWvPP +DncKjvbdZMRdUNlN +DoDLKvbddZxoxZRC +DoDKjvbdFVxoomKF +DoCkKvbdSLYeuGkT +DncLKvbdYSlBNTnx +EObkKvbdeuzwoizs +EPDKjvbdUQpoUuIN +DoDKjvbdmpZxujyC +EPCjjvbdDGlFgAzc +EPCjjvbdkCkkRGuH +DnbkKvbdvlvAMdFN +DoDLKvbdatbHXkUI +EPCjjvbdFWYoolie +DnbjjvbdrEFJPnWB +EObkKvbdpyOggQcx +EOcKjvbdqwQMChxq +EOcKjvbdqrVLNkAm +EOcKjvbderBWzlCo +DoDLKvbdRWmdDMHc +EOcLKvbdZoNhdeZj +DnbkKvbdunszpkPU +EPDKjvbdGAnpxizm +DoCkKvbdKCjCqKCx +EOcKjvbdZshhyDrn +DoDKjvbdddoSBvcK +DncKjvbdcScKtEJa +EOcLKvbdZjShQGbG +DncLKvbdDncKkXDE +EPDLKvbdrzMQTBHn +EPDLKvbdIxUBglRQ +EPDKjvbdcyxpXxpb +EObkKvbdMSXMytpz +EObkKvbdijGIKMwr +EObkKvbdzdzOzdyp +DnbjjvbdeATplwjG +DnbkKvbdcIlikFwY +DoDLKvbdsPunicVf +EPDKjvbdmozYvLZC +DoCkKvbdkyTSSxgU +DncLKvbdRWnDcLhD +DncKjvbdHELWJaij +DncKjvbdZQmFIleR +EOcKjvbdiCOcEvpq +EOcKjvbdbrbkUEKB +EOcLKvbdOFEThhjd +EObkKvbdbBVdepPw +EObkKvbdUxhTzKnn +EObkKvbdzoPpdblY +EOcLKvbdrbFllHLZ +DoDKjvbdjggMGGOL +DncLKvbdqceJQNua +DoDKjvbdiHJbxvJu +DoDLKvbdySnImSBg +EPCkKvbdtTRrxzFD +EOcLKvbdkVvnEBxX +DnbjjvbdtcCtvvOo +EPCkKvbdyzdmrHiI +DoDKjvbdFjdrbhMu +DoDLKvbdZyEKODLr +DoDKjvbdURQnuVHm +EPCkKvbdZyDimcMS +EOcLKvbdNQXpunHT +DnbjjvbdQlxCYmtz +DnbjjvbdCDoaVimG +EObjjvbdsPvOibvG +DnbjjvbdgGLynGgA +DncLKvbdCDoaWJmG +EObkKvbdnCKXXnnV +EOcLKvbdUxgtZkPO +DnbkKvbdiMFDmuDZ +DncKjvbdiGicZWKV +DoDKjvbdcScKtEJa +DoDKjvbdpssgRqkU +DncKjvbdsBfNLgKy +DoDLKvbdGYttaDwb +DncKjvbdjvWnDaxX +EPCjjvbdhgJcYuiu +DnbjjvbdxUldpxlO +DoDKjvbdUaCRSqSZ +DnbkKvbdNwoVzdNt +DoCkKvbdZnnIeEzK +EPDKjvbdNeEUJIkE +DnbjjvbdJbjDQjDY +EPDLKvbdKVuFceGi +EPCkKvbdKkBIWAJy +EObjjvbdrafMlHLZ +EOcLKvbdZLqctNkm +EObjjvbdMgComPtk +DncKjvbdjhHMGGOL +DnbkKvbdJYUCIMQp +DoCjjvbdhlEcnVCy +DoDLKvbdxsOJNSBg +EOcLKvbdRMxBxmtz +EOcLKvbdHDjujCJj +EObjjvbdZRMdhmFR +EPDLKvbdUQpoUthN +EPCkKvbdvlvANEFN +EObkKvbdSCEEkhxk +EPCjjvbdLBKfmCXq +EPDKjvbdOStVfduQ +EPCjjvbdGcjvJbKK +DnbjjvbdVBBprpqy +DoCjjvbdirziTLJz +DncLKvbdFWYpQNKF +DoDLKvbdjKGHjNYS +DncKjvbdZnmiEdzK +DoDKjvbdySmiMrBg +DncLKvbdeAURNYKG +EPDLKvbdemGWflik +DoDKjvbdaMkBrtmH +DoDKjvbdIxUBglRQ +DoDKjvbdOEcshhjd +EPCjjvbdpxnhGqDx +DncKjvbdYSlBNToY +DnbjjvbdGGKSOJUR +EOcLKvbdZjTHpGbG +EPCjjvbdIHGzZYXg +DncKjvbddndsLTsr +DnbjjvbdqAheAXIE +EOcKjvbdVhXvXfxz +DncKjvbdFyVVAdYC +DnbjjvbdJvVFceGi +EPCkKvbdoznDjwoA +EPDKjvbdvPTzqLPU +EObjjvbdiifIKMwr +EOcLKvbdlZTSSxgU +EObjjvbdQvnECkgc +DncLKvbdjgfkfGNk +DnbkKvbdCDoaWJmG +DnbkKvbdxnTHwriD +DncKjvbdoAKzshDn +DoDKjvbdvAdZSndh +DnbjjvbdRpTgKFcw +EOcLKvbdiiegilwr +EOcKjvbdGdLVjBjK +EObkKvbdGFjRmhtR +EPCjjvbdZsiJYdTO +EPCjjvbdJJdAKPfd +EPDLKvbdKfGHbBRV +DncLKvbdjhHMFenL +EObkKvbdbLMFnnDA +DoCjjvbdUWMPisaR +DnbkKvbdZjTHpHCG +EObkKvbdbsCkTcjB +EPCkKvbdSLYfUfkT +DoDKjvbdZeYGzhIb +DncKjvbdrovPJcVf +EPCjjvbdePFSjtTr +DncKjvbdJbibqJbx +EPDLKvbdDxYMUUTl +DnbkKvbdZHXEAPSi +DncKjvbdVTmUFlVj +EPDKjvbdzoQREcLx +EPDKjvbdKfFhCAqV +DoDKjvbduDDUwVoP +DoDKjvbdgFlZmfgA +EObjjvbdTAEiHbOd +DoCkKvbdMowqVmgT +DncKjvbduMXwBTaX +DncKjvbdeYZssrFz +DncLKvbdmfdxNNgZ +DncLKvbdxLXDgzzG +DoCjjvbdNsTvGduQ +EPDLKvbdTpqOtuHm +EObkKvbdZMRctOMN +EPCjjvbdHEKuibJj +EPCjjvbdBiKbLJGK +DoCjjvbdUtNUFkvK +EOcKjvbdVTltFkuj +DnbjjvbdczYpXxqC +EPDLKvbduWNxKQsA +EOcKjvbddZyQYYqC +DnbkKvbdyfyMAMdw +DncLKvbdDihKWXjA +EPCjjvbdoAKztIDn +DoCjjvbdcTDLUDjB +EPDKjvbdJcJcRKCx +DncKjvbdIxTahLqQ +DoDLKvbdTqROttgm +DoDKjvbdjblLQgUg +EOcLKvbdTppnuUhN +EPCjjvbdrMyjZLgi +EObjjvbdypnmIjXA +DoCkKvbdczYoxZRC +EObkKvbdFjeTDHmV +EPCjjvbdZxcimbkr +DoDKjvbdatbHXkUI +EPDKjvbdvmWAMdEm +DoCjjvbdqwQMCiYq +DoDKjvbduWNwjQsA +DncKjvbdACqwjZiQ +DoCjjvbdOTTvGduQ +EObkKvbdirzhsKiz +EObjjvbdOTTugFUp +EOcLKvbdKDJbqJcY +DoCjjvbdiUyeXRtb +EObjjvbdfMfXHNKL +EOcKjvbdjhHMFfNk +DncKjvbdRpUGjFcw +EPCjjvbdfILVqnRH +EOcKjvbdiHKCyWJu +DoDLKvbdnPzYvLYb +DnbkKvbdnGeYNOHZ +DoDKjvbdtvOXjQsA +EPCjjvbdmIctRVRa +EOcKjvbdpyOhGpcx +DnbkKvbdKQydoFnF +DoDKjvbdkVvnDaww +EObjjvbdbUbHXjsh +EOcKjvbdCJLCLIfK +EPDKjvbdZeYGzhJC +DncKjvbdcScLUDia +DoCkKvbdQmXbZOUz +EOcLKvbdRadFMIxk +DnbkKvbdziuPodSt +EOcKjvbdEXxMUUTl +DnbjjvbdegjvSOQg +EObkKvbdZtJJYdTO +EPDKjvbdVAbQsQrZ +DnbkKvbdkHflFfOL +EObkKvbdtcCuXWOo +DnbjjvbdcTDLUEJa +EPCjjvbdZjTIQHBf +EObjjvbdTAEhhCPE +EOcLKvbdbhlikFwY +DoDLKvbdEPDKkWbd +EOcKjvbdZtJJZESn +EPDKjvbdZMRdUNlN +EPCkKvbdhgJcZWJu +DncKjvbdUaBqSprZ +EOcLKvbdEJgiuxKA +EObjjvbdSPtHKFcw +DoCjjvbdFfKSOJUR +EObjjvbdVrOXaeMD +DoCjjvbdrXPkcIxq +DoDKjvbdZjTHofaf +EOcLKvbdVYgszLOn +DncKjvbdIwsagkpp +DncLKvbdTkvPBVni +EOcLKvbdUtNUFkuj +EObjjvbdZnmheEyj +EPDKjvbdyYIjBoyk +EPCkKvbdqlyiyMIJ +EPCjjvbdYzbeqjVy +EOcLKvbdUQqOuVIN +EObkKvbdZMSDtOMN +DncKjvbdVvhxWDdg +EOcLKvbdiZuFlRNf +EObjjvbdZtJJYcrn +EPCjjvbdmuUzKirG +DoDLKvbdVUMtGMVj +EPDLKvbdhWyAzzAJ +DoDLKvbdfIKvRmqH +DnbjjvbdqdFIpOVa +DnbkKvbdIwtCHkpp +EOcKjvbdeEnrBvcK +DnbkKvbdJuuFdFGi +DoDKjvbdeOeTKtUS +EObjjvbdKWUfDeGi +EPCjjvbdiHJbyViu +EOcKjvbdBraCsfWr +DoCjjvbdGYuVBEYC +DoCkKvbdnHEwmOHZ +EPDKjvbdZisIQGaf +EPCkKvbdmpZxvKyC +DoDLKvbdmSYuZrdJ +EObkKvbdKDJbqKCx +EOcLKvbdZsiJZETO +EPDKjvbdnCJvxOmu +DoCkKvbdjgflGGOL +DnbkKvbdRosfjFdX +EPCjjvbdRECaQQcr +DnbkKvbdNHComQVL +EPCjjvbdrJAKEmOe +DoDLKvbdqBJFAXIE +DncLKvbdGLFTDINV +EOcLKvbdhgJbxujV +DnbkKvbdjSzhsKiz +EOcKjvbdKWVGDdfi +DoDKjvbdZnnIeFZj +DnbjjvbdxxIiaoyk +EObkKvbdczYpYZQb +EPCjjvbdZxcjODMS +EObkKvbdiHJbxvKV +DoCjjvbdJzoexEAN +DoCjjvbdaRfChTek +DoDLKvbdxwhjCPyk +DoDLKvbdVqnYBeLc +DnbkKvbdRDcBPpdS +EObkKvbdYqNFImFR +EPDKjvbdsrrTYzFD +EOcKjvbdqcdhpOWB +EOcKjvbdaNLCTUmH +DoDKjvbdnPzYukZC +DncLKvbdKCjDRKCx +EObjjvbdFkEsDINV +EPDKjvbdMgDQMouL +DncLKvbdOXnuzdNt +EPCjjvbdpstGqrLU +EPCkKvbdRbDdkhyL +DnbkKvbdaogGdLzd +DncKjvbdjlbLydgP +DnbjjvbdUMVoAvPJ +EPCjjvbdJqZeOfOF +DoDLKvbdUsmTekvK +DoCjjvbdpyOgfpcx +DnbkKvbdJYUCIMRQ +DncLKvbdjJfHjMwr +DoCjjvbdRosgKGDw +DoCkKvbddZxpYYqC +DncKjvbdddnrBwCj +EPDKjvbdijGIJlxS +DoCjjvbdkWWnECYX +EObkKvbdqlzJxlIJ +EOcLKvbdzaAPHHBl +DoDKjvbdlZTSSyGt +DnbjjvbdatbHXkUI +EOcLKvbdNdcshiKd +DncKjvbdGdKujBjK +DnbjjvbdRWnDcMID +DoCjjvbdSxKlNzkY +EPDKjvbdHDkWJbJj +EPDLKvbdZxcjNcLr +EOcKjvbdLYqKSzuG +EPDLKvbdjuvmcaww +EPDKjvbdxmrhYTJD +EOcKjvbdZirhPfaf +DnbjjvbdfIKurNqH +EPCkKvbdYTLaNTnx +DoDLKvbddtAUASlv +EPCkKvbdZLrDtOLm +DnbjjvbdnGdxMnHZ +DoCjjvbdeFPSCXCj +DncLKvbdYORAYUvU +EPCjjvbdrXQMDJZR +EPCkKvbdRpTfjGDw +DoCjjvbdpssfrSKt +EPCkKvbdKWUedFHJ +DnbjjvbdVvhwvDdg +DncKjvbdLrWlzUpz +DncKjvbdwtmFQxkn +EObkKvbdmIdTqUqa +DnbkKvbdJutedFHJ +EOcKjvbdVZITykPO +DoDLKvbdhbPDFXQq +DnbjjvbdmuVZjirG +DncLKvbdieKgVPAO +DncKjvbdEuyPpNJe +DoDKjvbdiHJcYuiu +EPDKjvbdmgFYNNfy +DnbkKvbdOTUWGeUp +DoCjjvbdZRNFJNFR +EPDLKvbdYpmFJNEq +EObkKvbdRMxBxnUz +DncKjvbdNQYQvOHT +EOcLKvbdMoxRVnHT +DoDKjvbdpyOhGpcx +EObjjvbdRyjITDWA +EObjjvbdrykosAhO +EOcLKvbdhaoDFXRR +DoDLKvbdIryBSmYM +DnbjjvbdlZSrTYft +DncLKvbdegjurORH +EOcKjvbdJYUCHlRQ +EOcLKvbdREDApRES +EObjjvbdmgFYMnHZ +EPCkKvbdZyDimblS +DoCkKvbdiCPCdwQq +EObkKvbdbVBgYKtI +DoDLKvbdNddUJJLE +DoCjjvbdrpVnibuf +EPDLKvbdKaLGlbYR +DnbjjvbdTpqPVUhN +DoCjjvbdcyxoxYpb +EPDKjvbdhfibxvJu +EPCjjvbdJpydnfNe +DncLKvbduWOXipsA +DoDKjvbdrRtkNkAm +EObkKvbdNQXqVmgT +EObkKvbdCIkBkJFj +EPDLKvbdqUUHSRjt +EOcLKvbdeYZtTqez +EPCjjvbdqUUHRqkU +DncKjvbdkWXODaxX +EPCkKvbdaNKbTVNH +EPCjjvbdvAcxroEh +EOcKjvbdlZTSTZGt +EOcLKvbdLAkHNCYR +DoDLKvbdUtMselWK +EPCjjvbdnVUzKjRf +DoDLKvbdypoMiJwA +EObjjvbdKDKCqKDY +DoCjjvbdrWolDIxq +DoDKjvbdwyhFfXeS +EOcKjvbdnGeYMmgZ +DoDLKvbdREDAopcr +EPCjjvbdiUzFXRuC +DoDLKvbdZQldhmEq +EPCjjvbdtvNwipsA +EPDKjvbdbrcLUDia +DoDLKvbdegkVqnQg +DoCjjvbdznopdcMY +DoCjjvbdmfeXlmgZ +DncLKvbdXrlBMsnx +DoCjjvbdmgEwmOGy +DoCkKvbdjmCLydgP +DncLKvbdmJEUQuSB +DnbjjvbdRbDeLiYk +DnbkKvbdQdDBPqDr +EObkKvbdjKGHjMxS +DoCkKvbdyOTHxSiD +EPCjjvbdQwNdCkhD +EObjjvbdfNFwGljL +EObjjvbdVqmxCElD +EOcKjvbdeOeTKtTr +DoDKjvbdUaBqSpqy +DnbjjvbdmIdURUqa +DoCkKvbdUWMQJtBR +DnbjjvbdxnSgxSiD +DncKjvbdwXMBVaVu +DnbjjvbdvvkaVaWV +EObkKvbdmaiwXnmu +DoCjjvbdgQBzwEYI +EOcKjvbdFVxpPmJe +EObjjvbdKDJcQjCx +DoCkKvbdYlRdUOMN +EOcLKvbdZoOIddzK +DoCjjvbdffMZnHHA +DncKjvbdnQZxujxb +EPDLKvbdwXMBWBVu +DoCjjvbdLFfIBaQu +DncKjvbdGQASwHFy +DnbkKvbdauBfxKsh +EOcLKvbdraelkgKy +EObkKvbdnVUzLKSG +DoDKjvbdANHxrwZx +DncLKvbdqZPHfqEY +EObjjvbdvPTzpjoU +EObjjvbdrWpMDIyR +DnbkKvbdCDpBWKNG +DnbkKvbdyOSgwrhc +DnbkKvbdeKKSVtzn +DncKjvbdMowpumgT +EOcLKvbdOFDtIhjd +EPDKjvbdkDMLRGtg +EPDKjvbdiiehJlwr +EPDLKvbdBdQAvJlf +DoDLKvbdZyEKODMS +EObjjvbdJqZePFme +DnbkKvbdKxqKSztf +EObkKvbdmJEUQuSB +DnbkKvbdREDAopdS +EPDKjvbdwzHefYEr +EPDKjvbdnHExMnGy +EOcKjvbdmozZVjyC +EPDKjvbdZHWdAPTJ +DoDKjvbdjgfkfFnL +DncKjvbdczZPxYqC +DoDKjvbdEXwlUUTl +DncKjvbdhuZdvrVC +DnbkKvbdxKwDgzzG +EPCkKvbdsZlQSaIO +EOcKjvbdzRPMiKXA +DoDKjvbdqvolDIxq +DoDKjvbdQdCaPpcr +EPCjjvbdJmADyfuB +DnbjjvbdsCGNLgLZ +DoDKjvbdKfGICAqV +DoCkKvbdbiNJkGXY +DncKjvbdiGicYvKV +EPCjjvbdSxLLmzjx +DncKjvbdLAjflaxR +EPCkKvbdUyHsyjoO +DnbjjvbdcyxoxYqC +EObkKvbdxZgfGYFS +EPDLKvbdZoNiEeZj +DncLKvbdZtIhxcrn +EPDLKvbdIwtCILqQ +DncLKvbdQmXbYmtz +EOcLKvbdmuUzKiqf +EPDKjvbdsQVnibuf +EObjjvbdOSsugEtp +EOcLKvbdYlSETnLm +EObkKvbdUtNUGMWK +DoDLKvbdzeZnzeZp +DoDKjvbdqTtHRqkU +EObjjvbdmbJvxPNu +DoDLKvbdliDsqUqa +EPCjjvbdhanbdvpq +DoDKjvbdiifHilxS +DoDKjvbdmJDsptqa +DnbkKvbdDncKkWcE +EPCkKvbdaofgELzd +DncKjvbdijGIJmXr +EPCkKvbdRkYfUgLT +EObkKvbdHEKuibKK +DnbjjvbdVhXuwfxz +DoDLKvbdiMEcmuCy +DnbkKvbdJcJcQibx +DnbkKvbdmfeYNOGy +DoDKjvbdqUTgSSKt +EPDLKvbdePErjtUS +EObkKvbdaNKasUmH +EObkKvbdiifIJmYS +EOcKjvbdsPunjCvG +EObkKvbdbrcKtDjB +EPDKjvbdbhlikFwY +EPCjjvbdrpVnjDWG +EPCjjvbdaMkCStlg +DncKjvbdMpXqVnGs +EPDLKvbdZjShPfbG +EPDLKvbdfHkVrOQg +DoCkKvbdDnbjjvbd +DoCkKvbdkySqsYft +DoDLKvbdZRMeImEq +DoDLKvbdYpleIleR +DncKjvbdiHJbyViu +EObkKvbdrMyixkgi +EPDKjvbdqvokbiYq +EOcKjvbdzitoodTU +DnbjjvbdVYhTyjnn +EPDLKvbdyYJJbPzL +EObkKvbdeFPSCWcK +EPDKjvbdIsZArlxM +DnbjjvbdkIHLfGNk +DoDLKvbdehLVqmqH +EOcLKvbdvBEZTPFI +DncKjvbdnUuZjirG +EPCjjvbdakLfOnDA +DnbkKvbdEzsqEkcJ +DnbjjvbdVhXvXgYz +DoCjjvbdIryBTNYM +DncKjvbdZirgpHBf +DoDKjvbdEYYLsstM +DnbjjvbdZshhyETO +DoCjjvbdOTUVgFVQ +EObjjvbdZisHpGbG +DoDLKvbdkDLkRGtg +EObkKvbdegjvSNpg +DncLKvbdfIKvRnQg +DncLKvbdJKEAJpGd +DncKjvbdrRtkNkBN +EPCkKvbdjvWnDaxX +DoCjjvbdmfdwmNgZ +DnbjjvbdbrcLUEJa +DncLKvbdnQZxujxb +DoDKjvbdNsTugEuQ +EOcKjvbdUVlPisaR +EObkKvbdHDjujBij +EPDLKvbdSBdFMJYk +EPCkKvbdVvhxVdFH +DncKjvbdIsYaTNXl +EPDLKvbdIrxaSlxM +EPDKjvbdfoazwDwh +EPCkKvbddeOqbXDK +DoCjjvbdJpzEnfNe +DncKjvbdqiAKFNOe +EPDLKvbduDCtwWOo +DnbjjvbdZjShQGbG +EObjjvbdVAbQsRSZ +DncLKvbdtcCuWuoP +DoDKjvbdTvLoitAq +EOcLKvbdZQleIleR +DoCkKvbduLxXAtAw +DnbjjvbdqYoHfqDx +DoDKjvbdJYTbHkqQ +DncLKvbdGZUtaDxC +EObjjvbdqFdEtWAh +EPCkKvbdILaznWqL +EObkKvbdQwNdCkhD +EPCkKvbdmJDsqUqa +EOcKjvbdvBEYrneI +DoDKjvbdapGgELzd +DoCjjvbdwWlAvAvV +DoDLKvbdJbicQicY +EPDKjvbdaaVdepPw +DoCkKvbdsZkosAhO +DoCkKvbdNeETiJKd +EObkKvbdEObkLXCd +EPCjjvbduCbuXVno +DoCkKvbdrykpTBHn +DnbkKvbdrEFIpNua +DoCjjvbdlYrrSxft +DoDLKvbdqdFIpOVa +EObjjvbdrbFmMGjy +DnbkKvbdRpUHKGDw +EOcLKvbdzoPpdcMY +DoDLKvbdfILVqnQg +DoCkKvbdlZSqsZHU +DncKjvbdrzMQSaIO +DoCkKvbdhuZeWrUb +EObjjvbdfSAvzkbo +DoCkKvbdVZIUZjnn +EOcLKvbdhlEdOUcZ +DoDKjvbdbUagXkUI +DoCjjvbdqUTgRqjt +DoDLKvbdqTsfrRjt +DnbkKvbdrouoKCuf +EPDKjvbdmbKXXoNu +DoDLKvbdhbPDEwRR +DncLKvbduVnYKRTA +DoCjjvbdcJNKKfXY +EPCjjvbdeFOrCXDK +EPCkKvbdczYoxYpb +DnbkKvbdKfGHaaRV +DoCjjvbdMuTRjmAX +DoDKjvbdkMalZeGo +DnbkKvbdbhmKLFvx +EPDLKvbdjuwODbXw +DoDLKvbdUMVoBVoJ +DoCkKvbdRpTgJfDw +EOcLKvbdajlFoNcA +EPCjjvbdRMwaxnUz +EOcLKvbdJcJbpjDY +DoCjjvbdjhHLefNk +EOcLKvbdcasNSATm +DoDKjvbdyOTHwriD +EObjjvbdKQydnenF +EObjjvbdZirhPgBf +EPCjjvbdBiKbLIfK +EOcKjvbdNeDtIiKd +EOcKjvbdkDLjqGtg +DoDKjvbduDDVWuoP +DncLKvbdePErjtTr +EOcKjvbdJbicQjDY +EPDKjvbdrylQTBHn +DnbjjvbdkMbMZeGo +DncLKvbdtlYWaUAw +DoCjjvbdDwxMUTtM +EObkKvbdjblKqGtg +DoDKjvbdRMxCZNtz +EObkKvbdqYoIGqDx +EPDKjvbdmfeYNNgZ +EObjjvbdTAFIhCPE +DoCjjvbdjKGIKMxS +EOcLKvbdMpYRWOHT +EOcLKvbdMoxRVnGs +DncKjvbdhaoDEwQq +DnbkKvbdEXxMTtTl +EPCkKvbdMgCpMpVL +EObjjvbdRzKITDWA +EOcLKvbdrzLosBHn +EPCkKvbdBraCsfWr +DoCkKvbdaaVeGPow +EOcLKvbdIGgZyXxH +EPDKjvbdliETptqa +EOcLKvbdbKlGPODA +DnbjjvbdRadElJZL +EPDLKvbdjFLHVPAO +DnbkKvbdiBnbdwRR +EObkKvbdvBDyTOeI +DnbjjvbdUyHtZjnn +DnbkKvbdmgFYNOGy +DnbkKvbdGKdsDHlu +EPDLKvbdZRNEiMeR +DoCkKvbdbLLeoODA +EObkKvbdANIZSvzY +DoCkKvbdziuPpDrt +DnbjjvbdWHwvXgYz +EPDKjvbdsBfNLgLZ +DoCkKvbdWWiXudFH +EPDLKvbdwzIGGYEr +EOcLKvbdVTmUGMWK +EObjjvbdMSXMytpz +DncKjvbdZirhQGaf +EObjjvbdCJLBjiGK +EPCjjvbdZLrETnLm +EObjjvbdelevfljL +DncKjvbdGYuVBEYC +EPCkKvbdkCkjpgUg +DoCkKvbdbhljLFwY +DnbjjvbdeEoSBvbj +DncLKvbdvAcyTPFI +DnbkKvbdjblLQgVH +EPCjjvbdeEoSBvbj +DnbkKvbdaMjbStlg +EObjjvbdrDdhpOWB +EOcKjvbdbKlFoODA +EPDLKvbdZjTIQGaf +EObjjvbdEzsqEkcJ +DnbjjvbdZRNEiNEq +EObjjvbdqlzJxlIJ +DnbkKvbdkIHLfFmk +EObkKvbdMtrrKmAX +EPCkKvbdNQXpvNgT +EPCkKvbdbrcKtEKB +EObjjvbdSPtGjGEX +DoDKjvbdxwiJaoyk +DnbjjvbdVYhUZkPO +DoDLKvbdXrlBNUPY +DoDKjvbdZnmiEdzK +DoCjjvbdWWiXvDeH +DoDLKvbdyNsHwsIc +DoDKjvbdwyhFfYEr +EPDLKvbdNeDshhkE +EPDKjvbdBiLBkJFj +EOcKjvbdJqZdoGNe +EOcKjvbdbAvEepQX +DoCjjvbdaNLBsUlg +EPDLKvbdvBDxsOdh +DncKjvbdGFirNiTq +EPDLKvbdZnmiEeZj +DncLKvbdePFSjtTr +EOcKjvbdnGdwlnHZ +EOcLKvbduDDUvuno +EObjjvbdZQmFIldq +DoCkKvbdcyxpYYqC +EOcLKvbdMRvlzVQz +DoCjjvbdtcDUwVoP +EPCkKvbdrXQLbhxq +DoDKjvbdkVwODbXw +DnbjjvbdnCJwYOmu +DnbkKvbdqvpLbhxq +DoDKjvbdKDJcQjDY +DnbkKvbdvwMAvAuu +EPDKjvbdtvNxKRTA +DoDKjvbdYkqctOMN +DoDKjvbdtcCuWvOo +DoCjjvbdEObkLXDE +DoCkKvbdbrbjtDia +EObkKvbdDncKkXDE +DnbjjvbdxxJKBozL +EPCjjvbdbhlikGWx +DncKjvbdJXtCIMRQ +EOcLKvbdkVvmcaxX +DoCjjvbdqwPkbhyR +EObjjvbdySnImRbH +EObjjvbdZQleImFR +EObkKvbdmpZxujyC +EPCjjvbdhbPDEvpq +EObkKvbdpyPHgREY +DoDLKvbdwzIGGXeS +EObjjvbdaSGChUGL +DoDKjvbdrbFmMGkZ +EPCkKvbdxKwEHzyf +DnbkKvbdJXtBgkpp +EPCkKvbdlZTRrxft +EOcKjvbdFVyPpNKF +DoCkKvbdaRecHsek +DoDKjvbdFfKRnJUR +DoCjjvbdyOTIXrhc +DoDLKvbdyOSgxShc +DoDKjvbdEOcKjwCd +DoCjjvbdzoPpeClY +DoCkKvbdURRPVUhN +DoDLKvbdVqmxCFMD +EOcKjvbdNVSrKmAX +EOcKjvbdTvLpKTaR +EPDLKvbdCTAbtFwS +EPDLKvbdZyEKNblS +EOcLKvbdsCFllHLZ +EObkKvbdjlbMZeHP +EPDKjvbdMpXpunGs +EObjjvbdaNLCSuNH +DoDLKvbdkCkjqHUg +EPCjjvbdTYKlNzjx +DnbjjvbdNxOuzdOU +DoCkKvbdegjvRmpg +DoCjjvbdhfjCyWKV +DncLKvbdjggMFfNk +EOcKjvbduVmwjRTA +DnbkKvbdDjHiuxKA +EOcLKvbddePRavcK +DnbkKvbdwkWcgzyf +DnbkKvbdHlBznXQk +EPCkKvbdatafxKsh +EPCjjvbdcJMjKfXY +DoDKjvbdrDdiQOWB +DoDLKvbdVvhwvEEg +EObjjvbdwjvdHzzG +DncLKvbduMYXAtAw +DoDLKvbdZQmFJNEq +EPCjjvbdyOTIXriD +DoCkKvbdbiNKLGWx +DncKjvbdHEKvKBij +EPDLKvbdYlSDtNkm +DoDKjvbdTqROuVIN +EPCkKvbddeOqbXCj +EOcLKvbdCTBCsewS +EPCjjvbdnUtykJrG +DnbjjvbdlZTSSyGt +EPCjjvbdjmBkyeGo +DnbkKvbdVhXuwfxz +DncLKvbdePFTLTsr +EOcKjvbdemGWgMik +EObkKvbdhuZeWquC +EPCjjvbdEvYpQNKF +EOcKjvbdpaJFAXHd +DoDKjvbdJSyBSmYM +EOcLKvbdSCDdlIxk +DncKjvbdSLZGVGkT +DnbkKvbdrbFlkgKy +EObjjvbdJSyAsMwl +EOcKjvbdEOcKkXDE +EPCjjvbdMoxQumfs +EPDKjvbdUQpnuUgm +DncKjvbdaaWFFoow +DnbkKvbdakMGPODA +EObkKvbdrEEhomua +EOcKjvbdmozZWLYb +EObjjvbdVgwuxGxz +EOcLKvbdCJLCKhej +EPDLKvbdVUNUGLvK +EOcLKvbdLGGHbBRV +DoCkKvbdlqxtysEJ +EOcLKvbdcScLTdKB +DncKjvbdhtydwRtb +DoCjjvbdcTCjscia +DncLKvbdUslsekuj +DoDKjvbdwuNFRYkn +EOcLKvbdijGHjNYS +DoCjjvbdJSyBSmYM +DoDKjvbdEYXlUTtM +EPDKjvbdUyITzKoO +DnbkKvbdvBDyTPFI +DoDKjvbdYlRcsmkm +DoDKjvbddePRbXCj +EPCkKvbdVZHtZjoO +EPDLKvbdWXIxVceH +EPCjjvbduDDUwVoP +DncKjvbdQlxBxnUz +DoDLKvbdfpBzvdYI +DoCjjvbdMJBlRYAS +EPCkKvbdZisHofaf +DnbkKvbdkWXNdCXw +EOcKjvbdEYXkstTl +EOcKjvbdfekymgHA +EPDKjvbdelfWflik +EPCjjvbddCTNSAUN +EPDKjvbdpfDeUVaI +DncLKvbdiBnbeWqR +EObjjvbdEuyPoljF +EPCkKvbdRDcBQRES +DncKjvbdhfibxujV +EObkKvbdVqnYBeMD +EPDKjvbdJKEAKQGd +EOcLKvbdsQVoJbuf +EOcKjvbdqcdhonVa +EObjjvbdJcKCqJcY +EOcKjvbdpfEEsuaI +EPDLKvbdxnTIYShc +EOcLKvbdxVMdqYlO +EObjjvbdZyDimcMS +DncKjvbdiGjCxvKV +DoCkKvbdRbEEkiYk +DoCjjvbdWIYVxHYz +EPDLKvbdYzcFqjVy +DncLKvbdTYLLmzjx +DoDLKvbdwXLaVaWV +DoDLKvbdMRvlyuQz +DoCjjvbdajkeoNcA +EPCjjvbdjEkHUoAO +DoCjjvbdZoNiFFZj +DncLKvbdlZTRryHU +DoCjjvbdcTDLTdJa +EOcLKvbdlhctRVSB +EObjjvbduaEYroFI +DncKjvbdzjUpQDsU +DoDLKvbdyqPNIiwA +DnbjjvbdhkdcnUby +EObjjvbdVYgtZjoO +DnbjjvbdCJLCLJFj +EPCjjvbdzeZnzdyp +DnbjjvbdqlyjZMIJ +EOcLKvbdGAnpyJzm +DoDLKvbdNGcQMpVL +DncKjvbdADSXiyiQ +DoCjjvbdLBLHNCYR +DoCkKvbduVnXjRTA +DncKjvbdtSqsZZeD +EPDKjvbdpyOhGqEY +EObjjvbdEuyPomKF +EPDKjvbdyOSgxTIc +EPDKjvbdGFiqnJTq +EOcKjvbdyYJJbPzL +DncLKvbdADRwjZiQ +DncLKvbdCSaDUFwS +DoDLKvbdEzsqEkbi +EOcLKvbdssSTYyeD +DnbkKvbdSBdEkiZL +EObjjvbdFWZQPlie +EObkKvbdbBVeFpPw +DoDLKvbdBdQBVjMf +EPDLKvbdptUHRqjt +EPCkKvbdQwODcMID +DoDLKvbdelevgMik +DnbjjvbdVTmUFkuj +DnbkKvbdLYqJrzuG +DoCkKvbdCTAbsevr +DoCjjvbdJpyeOfOF +EPCkKvbdOStWHEtp +EOcLKvbdKVtfEEfi +DoCkKvbdmuUykJqf +DnbjjvbdQZNAHSrK +DnbjjvbdMgDPlpUk +DnbkKvbdCIkBjhfK +EObjjvbdBsBCsewS +EOcLKvbdYzbfRivZ +EOcLKvbdrzMQSaHn +EOcKjvbdRosfjFcw +EPDKjvbdANHyTXZx +EPCkKvbdliDsptqa +EOcLKvbdACrXizIp +EPCjjvbdLFfICApu +DoCjjvbdbAvEepPw +EOcKjvbdTpqPVVHm +DoCjjvbdsBemMGjy +EPCkKvbduaEZTPEh +DoCkKvbdOStWHEtp +EPCjjvbdbBVeGQPw +EObjjvbdOSsufeUp +DoCkKvbdjAQHBPgK +EPCjjvbdbBWEfPow +EPDKjvbdtSqsZZdc +EPCkKvbdegjuqmpg +DoDLKvbdRotGifDw +DoDKjvbdmJEUQtrB +DoCjjvbdcIljKewY +EObkKvbdbiMjKewY +EObjjvbdcScKsdJa +EPDKjvbdtSqsYyeD +DnbkKvbdrpWOjCvG +EPDLKvbdBiKbLIej +EPCkKvbdBdPaWJmG +EObjjvbdZRNEhmEq +EOcLKvbdiUzFWrUb +EPCkKvbdmIdUQtrB +EPCkKvbdbUafxLTh +EOcKjvbdnCKWxOmu +DoCkKvbdsZkosBIO +DnbkKvbdHDjujCJj +DoCjjvbdWSOYCFLc +EPDKjvbdmJETqVSB +DnbjjvbdrXPkcJYq +EObkKvbdMgDPlpVL +DnbjjvbdZisHpGaf +DoCjjvbdGGJqmiTq +EObkKvbdIHGyyYXg +EObkKvbdqTsgRrKt +EObjjvbdmJDtRVSB +DnbjjvbdddoSBvbj +EPDKjvbddePSBvbj +DnbjjvbdBcpAvJlf +DncKjvbdezvYeItX +DoDKjvbdmgEwmNfy +EObjjvbdDigivXjA +EOcLKvbdmJEURUrB +EOcLKvbdePFTLTtS +EPDKjvbdVTmUGMVj +EPDKjvbdnBivwnnV +EPCjjvbdZnmhddzK +DncKjvbdZeXfzgiC +DoDLKvbdEuyPpNJe +DoDLKvbdqdEhpNua +DoDKjvbdFWYpQMie +DoCkKvbdMfcQMpVL +EOcKjvbdmttykKSG +DnbjjvbdlhcspuSB +EPCjjvbdWSNwbFMD +EPDKjvbdRbEElIyL +EOcKjvbdyNsHwsIc +EPCjjvbdrylQTAgn +DncLKvbdADSYJyiQ +EOcKjvbdZjTIPgBf +EObjjvbdKDKDQibx +EObkKvbdKDJcRJcY +DoCkKvbdmSZUzSdJ +EPCjjvbdaNKartlg +DoDKjvbdIGgZyXwg +EObjjvbdauCHXjsh +EObkKvbdxUmEpyLn +EPCjjvbdNsTugEtp +EPDLKvbdZyDimblS +DoDKjvbdbUagYKtI +DncKjvbdliETpuSB +EOcKjvbdDihKWXjA +DncKjvbdZtIiZETO +EObjjvbdygZMAMeX +DoDKjvbdfNGWgMik +DoCjjvbdZMSEUNkm +EOcKjvbdsrqsZZdc +EPCkKvbdACqxJzJQ +EPDLKvbdNdcshiKd +DoDKjvbdyqOmIiwA +EOcKjvbdRMwbYmtz +EOcKjvbdYpmEhleR +DoDKjvbdjJfHimYS +DoCjjvbdrbFmMHLZ +DoCkKvbdBcpBWKNG +DoDKjvbdIxTbHkqQ +DoDKjvbdhuZdwSUb +EPDLKvbdJYUBglQp +EPCkKvbduCcUwVno +DnbkKvbdwuNEpyMO +DncKjvbdssSSxzEc +DoDLKvbdGdLWJbKK +EObjjvbdFjdsDIMu +DncLKvbdfkGzbfAE +EOcLKvbdrRtkOLBN +EPDLKvbdajkfOmcA +EPCjjvbdrMzJxkhJ +DncLKvbdqZOhHREY +DoDKjvbdmJEUQuSB +DnbkKvbdRDbaQRES +EPCjjvbdpyPHgREY +DnbjjvbdMIalQxAS +DncLKvbdiZuGMROG +DoDKjvbdgFkymfgA +DncLKvbdsCGMkgLZ +EObkKvbdRotHJecw +EPDKjvbdkClKpftg +EPCkKvbdRjyGUgLT +EOcKjvbdhuZdvqtb +EOcLKvbdmttzKjSG +EObjjvbdhlEdOVDZ +DoDLKvbdZisHpGaf +DnbkKvbdTqQntuHm +EPDLKvbdNdctIiLE +EObkKvbdWRnXbFLc +EPDLKvbdKVtfDdgJ +EPCkKvbdJSyBTMwl +DnbkKvbduWNxKQsA +DoCkKvbdqGEFUVaI +EPDKjvbdhkdcnVDZ +EPCjjvbdySnIlrBg +EOcLKvbdYlRctNlN +EObkKvbdvBDxroFI +DoDLKvbdxwiJbPzL +EPCjjvbdyNsHxTJD +DoCjjvbdhfjDYujV +DoDLKvbdcImKLFwY +DnbjjvbdqwQMChxq +DncLKvbdaaWEfQPw +DnbkKvbdUQqOuUhN +EOcLKvbdUaCRSqSZ +DnbjjvbdRMxByOUz +EPDKjvbdKCjCpjCx +DncLKvbdrMzJyMIJ +EPCjjvbdOEdThhjd +EPDKjvbdrSUkOKaN +EObkKvbdMowpunGs +DoCjjvbdhzVGLpmf +EOcLKvbdaMkBsVMg +DoCjjvbdkIGkfFnL +DnbkKvbdYpldiNFR +EPDLKvbdZxcjNcMS +EPDKjvbdGGKRnJUR +EPCjjvbdbiNKKfWx +EObjjvbdmRyUyrci +DncKjvbdLrXNZtpz +DncKjvbdZjTIPgCG +DnbkKvbdypoNIiwA +EPCjjvbdDihKVxKA +DncKjvbdyfxlANFX +DoDKjvbdiMFEOVCy +EPCkKvbdtcDUvvPP +DoCkKvbdEvYpQMie +DnbjjvbdZLrDtOLm +EPCjjvbdKQzFPGNe +EPDKjvbdGdLVjCJj +DoDKjvbdqYoHfqDx +DoDLKvbdFVxoomJe +DnbkKvbdKRZePFnF +DoCjjvbdFVyQQMjF +DnbkKvbdTulQJsaR +EObkKvbdkHgMFenL +DoDKjvbdVUMselVj +EPDLKvbdrDdhonVa +DncKjvbdkVvmcaxX +DoDLKvbdrRuKnLAm +EOcKjvbdJbibpjDY +EPDKjvbdXrlAmToY +DnbkKvbdZirhQGbG +DnbjjvbdjgfkfFnL +EOcKjvbdGFjSOJTq +DoDKjvbdSCDeMJYk +DoCkKvbdpecdtWAh +EObjjvbdzeZnzdyp +DoCjjvbdMJBlQxAS +EPDKjvbdnBivwnmu +DoDKjvbdRadElIyL +DoDLKvbdsZlPsBHn +EObjjvbdznopeDLx +EOcLKvbdCJKbKiFj +DncLKvbdmgExNNfy +DnbkKvbdnPzYvKxb +DncKjvbdrDdiPnVa +DoCjjvbdAMgxrwZx +DncLKvbdTfzmkwWF +DncKjvbdqiAJdloF +EPCkKvbdwuMeRZLn +DoCjjvbdVUNUFkuj +DoDLKvbdKQyePGNe +DncKjvbdLqvlzVQz +DoDKjvbdmgFYNNgZ +DnbjjvbddxZtTrFz +EObkKvbdqTsgSSKt +DnbkKvbdZxcimcMS +DoCjjvbdANHySvyx +DoDLKvbdZQmFJMdq +DoCkKvbdHDjujBij +EPDLKvbdsPuoJbuf +EPCjjvbdYpmEhmFR +DncLKvbdZjTHpGaf +EPDKjvbdEuyQQNKF +DoCkKvbdmbKWxPNu +DoCkKvbdRjyFtfjs +DoCkKvbdiifHjNYS +EPDKjvbdpyOhGpdY +DoDKjvbdUVlPitBR +DoCjjvbdEKIJuwjA +EPCjjvbdFkFTDHmV +EOcLKvbdySnJNSCH +DncLKvbdRpUHJedX +EPDKjvbdtvOYJpsA +DoDKjvbdKDKDQjCx +DoDLKvbdaMkCTUmH +EOcKjvbdMpYRVnGs +EOcKjvbdtSqsYzFD +DncLKvbdKaKgNCXq +DoCkKvbdsCFllGkZ +EObkKvbdNrsvGeUp +DoDKjvbdmaivxOnV +EOcLKvbdOEctIhjd +DoCkKvbdemGXGljL +DoDLKvbdjvWmdBxX +EPCkKvbdCIjbLIej +EPCjjvbdkHfkfFmk +DoDLKvbdwzIGFwdr +EOcKjvbddBrlrAUN +EPCkKvbdJutecdgJ +DoCjjvbdWRmwaeLc +DnbkKvbdiVZdwRuC +DnbjjvbdGLEsDHmV +EPCkKvbdxsOJNSCH +EPCjjvbdIwtBgkqQ +DncKjvbdbrbjtDjB +EPCkKvbdjhGkeemk +DncKjvbdWWiXvDeH +EPCjjvbdnUtzKiqf +DncKjvbdTukoitAq +DncLKvbdCIkBjhfK +DoCkKvbdhgKDZWJu +EPDKjvbdBhkBjiFj +DnbjjvbdMfbpNPtk +DoDKjvbdnBjWxPOV +DoCjjvbdEJhKWYKA +EOcKjvbdTpqOtuHm +DoCjjvbdwzIFfXdr +EOcKjvbdrpVoKDVf +EOcLKvbdEYYLtTsl +DoCkKvbdLFfICBQu +EOcKjvbdeXzTsrFz +EOcLKvbdSQUHKFdX +EOcLKvbdraemMHLZ +EPDKjvbdkIGlFemk +DncKjvbdOYOuzcnU +DoCkKvbdIwtCILpp +DncLKvbdZoNiEdzK +DoDKjvbdsrqsZZeD +EPDLKvbdzGyMANEw +DncLKvbdBraCsewS +EObkKvbdpyOgfpcx +DnbjjvbdxmrgxTIc +EOcLKvbdZjSgpHCG +EPCjjvbdrWpMDIxq +DncKjvbdZtJIyESn +EPCjjvbdJSxaSmXl +DoCjjvbdiMFEOVCy +DoCjjvbdDwwlTstM +DncLKvbdJYUCHkpp +EPDLKvbdsrrSxzFD +EObjjvbdkHgMFfNk +EPDKjvbdOStVgFUp +DnbjjvbdjhHMGGOL +DnbjjvbdZyEJmcLr +EPDKjvbdDihKWYKA +DncLKvbdRosfiecw +DoCjjvbdyTNhmSCH +DnbkKvbdFeirNhsq +DoDKjvbdrDeIpNvB +EObkKvbdVAaqTRSZ +EPDLKvbdLAkGlbXq +EOcKjvbdVAaprqRy +EPDLKvbdfIKvRnQg +EPCjjvbdUQpoVUgm +EObjjvbdxVNEpyMO +EOcKjvbdsCFllGkZ +DncKjvbdsBelkgLZ +DoDLKvbdvlvANDeN +DoCjjvbdnBivwoNu +EObjjvbdsCGMkgLZ +EObjjvbdsPvPJbvG +EPDLKvbdxrnImRbH +EPDLKvbdNPxRVnHT +DoDLKvbdMtrqkNAX +DoDKjvbdiGicZWJu +EPDKjvbdOFEUJJLE +EPDLKvbdoAKzshDn +DoDKjvbdehKvRnQg +EObjjvbdLLBIWAKZ +EPDKjvbdeOdsLUUS +DncKjvbdjvWmdBxX +DncLKvbdezuyFJTw +EPCkKvbdNPwpumgT +EPCjjvbdkxsRrxgU +EPDLKvbdptUHSSLU +EPDKjvbdeATqNXif +EPCkKvbdjlakzEgP +EObjjvbdyXiKCPzL +DoCjjvbdhlFDmuDZ +DncKjvbdauCGxLUI +EObjjvbdySmiNSBg +EOcLKvbdfNGWfljL +DncLKvbdVviYWDdg +EPCkKvbdkIHLefOL +EPDLKvbdRNYCZNtz +DoDLKvbdmfdxNOGy +DoDLKvbdcScKtDjB +EOcLKvbdEPDLKvcE +EPCjjvbdUaBprqSZ +EObkKvbdddnqbXDK +EPCkKvbdaaVeGQQX +DoDLKvbduoTzqKnt +DnbjjvbdqwPkbhxq +EObkKvbduaEZTOdh +EOcLKvbdKfFhBaRV +EOcKjvbdVYgtZjoO +EOcLKvbdrSVKnKaN +DnbkKvbdsCFmMGjy +DnbkKvbdSLYeuGkT +DoCkKvbdwWlAvAuu +EPCjjvbdRXOEClID +EPCkKvbdCIkCKiFj +EOcKjvbdGckViajK +DoCkKvbdznpRFCkx +DnbjjvbdxKwDgzyf +DncKjvbdVAaprprZ +DoDKjvbdOEctIhjd +EObjjvbdmIdTptqa +DnbjjvbdvwMAuaWV +EObkKvbdEYXksssl +EPCkKvbdiZtelQnG +EOcKjvbdqdEhpOVa +DnbjjvbdidjfuPAO +DnbkKvbdnBivxPNu +EObkKvbdrSVKmkBN +DnbkKvbdiCPDFWqR +DncKjvbdZisHofaf +DoCjjvbdJvVFcdfi +DoDLKvbdcyxpYYpb +DoCjjvbdrykpTBHn +EPDLKvbdqrUkOKaN +DoCkKvbdGQATWgFy +DncKjvbduaDxsPFI +EPCkKvbdYkqdTnLm +EObjjvbdQYmAGsRj +DnbkKvbdZyEKOCkr +DnbkKvbdOEdThhjd +EPDKjvbdiCOcFWpq +EOcKjvbdMfcQNPtk +EPDLKvbdLGFhBaRV +EPDLKvbdssSSyZeD +EPCkKvbdTAFJIBoE +EObkKvbdeFPRavbj +DnbkKvbdjKFhKNYS +DncLKvbdCJLBjiGK +DncLKvbdqlzJyLhJ +EOcLKvbdRyigsCvA +DoDKjvbdYqMdhldq +DnbjjvbdehKvSOQg +EObjjvbdMgColouL +DoCkKvbdehKuqnRH +DoDKjvbdQvmdCkhD +DoDKjvbdMSWlzVQz +EObkKvbdbhlikGXY +DoCjjvbdeAUQmYJf +EPCjjvbdZyEJmcMS +DoDKjvbdIGfzYxYH +DoDLKvbdHDjvJbJj +EOcKjvbdQwNdCkgc +EPCkKvbdRWnDcMHc +DnbjjvbdrMzJyMIJ +DncKjvbdlhctQuSB +DoDKjvbdbPgGdLzd +EObkKvbdijFhJmXr +DoCjjvbdbQGgDkzd +EPDLKvbdDihJvXjA +EObjjvbdaNKasUmH +DncKjvbdZyEKOClS +DnbjjvbdSLYfVHLT +DoDLKvbdwzHfFweS +EPCjjvbdfNFwHNJk +DoDLKvbdelewHNJk +EPCjjvbduaDxroEh +DoDKjvbddwytURez +DncKjvbdwtmEpyLn +EOcLKvbdCIkBkIej +EOcLKvbdiLddOUcZ +EPDKjvbdiUydwSVC +DncKjvbdrEEiQOVa +DnbkKvbdYzbeqivZ +DoCjjvbdkVwOECYX +DoDLKvbdZLqcsmkm +EObjjvbdVYgtZkPO +EOcLKvbdHffyxwwg +EPDKjvbdcIljLGWx +DnbkKvbdMpXpvNfs +EOcLKvbdFeirOJTq +DncLKvbdWWhxWEFH +DoCjjvbdZRMdhmEq +DnbkKvbdULvPBWPJ +EPDLKvbdZRMdiMdq +DnbjjvbdTYLMNzkY +DoCkKvbdZxcjNblS +DoCkKvbdKCibpicY +EPDLKvbddoFTKtUS +DncLKvbdcImKLGXY +EOcKjvbdKaLGmBwq +EPCkKvbdnHFYMnGy +EPDKjvbdUQqPUuIN +EPDKjvbdeAURNYJf +DoCkKvbdxwiKCQZk +DnbkKvbdKVuGDeGi +EPDKjvbdrovOicVf +DoDLKvbdrylQSaHn +EOcLKvbdySmhlrBg +EOcLKvbdNrsufeVQ +EOcKjvbdzoQREblY +EPCkKvbdzaAOgHCM +DoCjjvbdZLqdTmkm +EObkKvbdNGbpNQUk +EOcKjvbdZshiYdSn +EPDLKvbdDncLKvbd +EOcKjvbdqlzJyMHi +DoCkKvbdBhkCKiFj +EOcLKvbdRaceLhyL +EPDLKvbdxsNiNRbH +DoDKjvbdtcCtwWOo +DnbjjvbdmfdwlnGy +DncKjvbdREDBQQdS +DncLKvbdnPzYvKxb +EPCjjvbdjgfkefNk +DnbkKvbdnUtykJrG +EPDKjvbdSCEFLiYk +EOcLKvbdGcjuiajK +EPCjjvbdJYUCHlRQ +EPDLKvbdYpleIldq +EObkKvbdfMfWflik +DncLKvbdwuMdpyLn +DoDLKvbdEPDLLWcE +DoDLKvbdZLrDtOLm +DoCkKvbddZxoxYqC +DncLKvbdTulQKUAq +DncKjvbdqrUjnKaN +DoCkKvbdGFjRmiTq +EPCjjvbdpssfrRkU +EPDKjvbdrXQLbiYq +DoCkKvbdNQYQunHT +DoCkKvbdNrtWHEuQ +DncLKvbdjgflGGNk +DncKjvbdBsBCsewS +DoCkKvbdMpYRVmfs +DnbkKvbdKfFhBaQu +EObkKvbdGcjuiaij +EObkKvbdakMGOnDA +DnbkKvbdFyUuAcxC +DnbkKvbdtSrTZZdc +EPCjjvbdatafxLTh +EPCkKvbdUGzmlXVe +EObkKvbdZyDinClS +DncKjvbdyzdnSIJI +DnbkKvbdnPyxukZC +DoDKjvbdkDMLQgVH +EObjjvbdbVBfwjtI +EPDLKvbdzRPMhiwA +EObkKvbdhkeDmuCy +DnbkKvbdZQleImEq +EObjjvbdrDeJPnVa +EPDLKvbdaNLBsVMg +DnbkKvbdOEctIhjd +EOcKjvbdatagXkUI +DncKjvbdMowpunGs +EObkKvbdtvNwiqTA +DnbjjvbdyzdnSHiI +EObkKvbdbhlikFvx +EOcKjvbdaNKaruNH +DnbkKvbdiVZdvqtb +EObkKvbdVYgszKoO +DoCkKvbdjJfIKMwr +DncLKvbdezvZFJTw +EObkKvbdcyxoxYqC +EPDLKvbdFejSNiTq +DncKjvbdIwsbIMQp +DnbjjvbdTukpJsaR +EPDLKvbdIsZArlxM +EPDKjvbdTAEhgand +EOcLKvbdfNGXHMik +DoDKjvbdjcMLQgUg +DncKjvbdSLYfVHKs +DoCjjvbdnBjWwoOV +EPCjjvbdnBjWwnnV +EObkKvbdQvmccLgc +EPDKjvbdwuMeRYlO +DoDKjvbdNddUJIjd +DoCkKvbdqUTgSRkU +DoDLKvbdehLVqmpg +DoDLKvbdrovOjCvG +EObjjvbdzoPpdcMY +EPDLKvbdZRNFIleR +DnbkKvbdSLZGVGjs +DoCkKvbdySmiMrBg +DnbkKvbdwyhFfXeS +DoDLKvbdWHwvYHYz +DoCjjvbdIHHZyYYH +EObjjvbdJSyArmXl +DncKjvbdACqxJyiQ +DncLKvbdmpZxujyC +DoCjjvbdFkFScINV +EPDLKvbdCDpAujNG +DnbkKvbdhkeDnUby +DncLKvbdFWYopNJe +DoCjjvbdLAjfmCYR +EPCjjvbdxrmiMrCH +EObjjvbdcImJkGWx +DoCjjvbdFejRnJTq +EObkKvbdYTMAlsnx +EPCjjvbdsPvOibuf +EObjjvbdNeDshhjd +EOcLKvbdBiKbLIej +EObkKvbdauCGxLTh +EPDKjvbdbBWEepQX +EPCkKvbdVrNxBdlD +EObjjvbdMIalRYAS +EOcKjvbdJcKCpjCx +EOcLKvbdLqwNZtpz +DoCkKvbdZisHogBf +DnbjjvbdEPDKjvbd +DoDLKvbdFWZQQNJe +EObkKvbdHgGzYwxH +EOcKjvbdjbkkQfuH +DnbjjvbdtkxXAtBX +EPDLKvbdLAkHNCXq +EOcLKvbdWWhxVdFH +DncLKvbdCWzdIeQW +DoDLKvbdVvhwvDdg +EObjjvbdpfDeUWAh +EOcLKvbdqmZixkhJ +DncKjvbdyzdmrIJI +DncLKvbdRpTgJecw +DoDLKvbdGFjSOIsq +EOcKjvbdwuNFQyLn +DnbjjvbdIsZAsMwl +DncKjvbdptTgRqkU +DncKjvbdZQmEiNEq +DnbkKvbdauCHYLTh +EPDLKvbdyzdmrHhh +EPCjjvbdZoOJFEyj +EOcLKvbdUQqOttgm +DoCjjvbdRNYCZNtz +EPDKjvbdrRtkOLBN +DncLKvbdmajWxOmu +EPDLKvbdLBLHMbXq +DoDLKvbdCIjajhfK +EObjjvbdYkrDtOMN +EOcLKvbdUtNUGMVj +EObjjvbdaSFcHsek +DnbkKvbdXrkaMtPY +DoCkKvbdZQmFImFR +EOcLKvbdcJMijewY +EPDLKvbdGLErbhNV +DnbkKvbdiUydwSVC +EPDLKvbddndsKssr +DoDLKvbdxwhjCPzL +DoCkKvbdxVMeQxkn +DncKjvbdiBoCdwRR +EPDLKvbdnPyyVkZC +EPCjjvbdmuUzLKRf +DoDLKvbdSQUGiecw +DoDKjvbdRbDdlJZL +DncKjvbdqrVKnLAm +DoDKjvbdVBCQsQrZ +DoDKjvbdmbKWxPNu +EObjjvbdFVyQPmKF +DnbjjvbdiiehJlxS +EOcKjvbdIrxaSmYM +EOcKjvbdsZkosAgn +EOcLKvbdnCKWxPOV +EPDLKvbdKWUecdfi +DncLKvbdhgKDZWKV +EPDLKvbdySnImSCH +EObkKvbdJKEAKQGd +EOcLKvbdZMSETmkm +DoCjjvbdhgJcYujV +EOcLKvbdehLVqmpg +DoCkKvbdezuyFItX +DncLKvbdvBDxsOeI +EObkKvbdTulPisaR +DnbkKvbdajkfPODA +DoDKjvbdYkrEUOLm +EPCkKvbdfIKvSNpg +EPCkKvbdiBncEwQq +EOcKjvbdKWUecdgJ +EObkKvbdYlRcsmkm +EPCjjvbddwzUTqez +DnbjjvbdeYZstRez +EPDLKvbdxVNEqZLn +DncLKvbdFjeScINV +EObjjvbdxUleQxkn +DncKjvbdKWUfDdfi +DoDLKvbdssRrxzEc +EObjjvbdRpUGiedX +EOcLKvbdZQleJMdq +DnbkKvbdqdFIpNua +EPCjjvbdYzberKWZ +DoDKjvbdxxIjBoyk +EOcLKvbdEObkKwDE +DoDLKvbdqquLNjaN +DncKjvbdwuNFRZLn +DoCjjvbdqUTgRrKt +EObkKvbdVwIwvDeH +DnbkKvbdVwJYWEEg +DnbjjvbdYlSETnMN +DnbkKvbdqTsgRqjt +DoDKjvbdiGicZVjV +DnbjjvbdxnTHxTJD +EObkKvbdqUTfrSKt +DoCkKvbdFyVVBEXb +EOcKjvbdqGDdsvAh +EPCkKvbdTkunaVni +EObkKvbdMRvlzVQz +EPDKjvbdDncKkWbd +EObjjvbdqqtkNkBN +DncLKvbdfHkWRnRH +DnbjjvbdiLdcnUby +EOcKjvbdVYgsyjnn +EPCjjvbdUtNTfMWK +EPDKjvbdqYoHgREY +DncKjvbdGZUuAdYC +DnbjjvbdDnbjjwDE +EOcKjvbdTqQntthN +EOcLKvbdUyITzLPO +EOcLKvbdjblLRHVH +DoCkKvbdLGFhCBQu +DncLKvbdliEUQuSB +EObkKvbdRacdkiZL +EOcLKvbdaSFcHtFk +DoDKjvbdJYTahLpp +EPDLKvbdUQqOuVIN +EPCjjvbdqmZjYkhJ +DoCkKvbdRjyGUgKs +EObjjvbdyNrhYSiD +EPCkKvbdBhkCKiFj +EObjjvbdYlSDtOLm +DoCjjvbdTAFIhBoE +DncKjvbdNdctJIjd +DoDLKvbdGdKvJaij +EObjjvbdJpydnfNe +EPDLKvbdCDpAvKNG +DoDLKvbdeEoRavbj +DoCkKvbddoFSjssr +EPCjjvbdqYoHfqEY +EPCkKvbdFkFScHmV +EObjjvbdcyyQYZRC +DoDKjvbdyzdmrHhh +DoDKjvbdUWLojUAq +EObkKvbdiCPCdwRR +DoCkKvbdCTBDTevr +EOcKjvbdLAkGlbXq +EPDKjvbdcyyQXyRC +EPDLKvbdyNsHxSiD +EPDKjvbdqUTgRrKt +DoDKjvbdJuuFdEfi +DoDLKvbdEXwktTtM +EObkKvbdeJirVtzn +EObjjvbdYTMBMsnx +DnbkKvbdNQXpumfs +EPDLKvbdzitopDrt +DncLKvbdDxXlUUUM +EOcKjvbdADSXiyhp +DoCjjvbdqTsgSSKt +DoCkKvbdZtIhxdTO +EOcKjvbdUyHtZjnn +EPDLKvbdcSbkTdKB +DncLKvbdxZgfGYEr +DncKjvbdeATplxJf +DoDLKvbdnCJwXnmu +DnbkKvbdbKlFnnDA +DoCkKvbdrDeIpNua +EPCjjvbdmttzKirG +DoDKjvbdbrbkUDjB +DnbkKvbddZxoxZRC +EObkKvbdhgKDZWKV +DnbjjvbdGFiqmhtR +EPDKjvbdULvOaWPJ +EOcLKvbdygYlANFX +DnbjjvbdIHGzZYYH +EOcKjvbdhkeENuCy +EOcLKvbdNddTiJLE +EObjjvbdGFiqnJUR +EOcLKvbdjvWnEBxX +EPCjjvbdVBCRTRSZ +DncKjvbdVBCRTRSZ +EObkKvbdBdQAvJlf +EObkKvbdJYUCHkpp +EOcKjvbdGckVjCJj +EObkKvbdBsAcUGWr +DoDLKvbdIxUBhMQp +DoDKjvbdMgDQNPtk +EOcLKvbdHEKujCKK +DoCjjvbdLhalQxAS +EObkKvbdULuoBVoJ +EPDKjvbdhfjDZVjV +DoCkKvbdKDJbqJbx +DoCkKvbdbKlGPNcA +DncKjvbdrpVnicWG +EPDKjvbdvAdZSneI +DnbkKvbdFyVUaEYC +EOcKjvbdHDjuibJj +DnbjjvbdbiMjLFvx +EPCjjvbdUsltGLvK +DoCjjvbdkNBkzEgP +DncLKvbdFxtuBEYC +EOcKjvbdnBjWxPNu +DnbkKvbdqUTfrRjt +EPCjjvbdZHXEAPSi +DoCjjvbdxxJJapZk +DncKjvbdZyDimcLr +DnbjjvbdiBnbeWpq +EObjjvbdjbkkQftg +EObjjvbdqvokbhyR +EOcLKvbdeYZtTrFz +EPCkKvbdLqvmZtpz +DoDKjvbdNeDsiIjd +EPCkKvbdeXystRez +EOcKjvbdAMhZSvzY +EPCjjvbdSwkMNzkY +DoDKjvbdtlYXAtBX +EPCjjvbdBvzdIdov +DoDLKvbdVBBqSqRy +EOcLKvbdTvMQKUAq +EOcLKvbdxVMeQyMO +EPDLKvbdBsAbtGWr +DoCkKvbdKefHaaRV +DncLKvbdCTBDTewS +EPCjjvbdTIyjRAAl +DoDKjvbdkxsSSxft +EObjjvbdjvXOECXw +EPDKjvbdVTlsfLvK +EOcKjvbdjJfHjNXr +EObjjvbdfMfWflik +DnbkKvbdYqNFImEq +DoDLKvbdcJMikFvx +DoCkKvbdrXPlDIyR +EObjjvbdeOdsLTtS +DncLKvbdJSyArmXl +EObjjvbdkNBlZeHP +EObkKvbdfHkVqnRH +DncLKvbdKCjCqKDY +DoDLKvbdUyHsykOn +DncKjvbdWWiYWEEg +EPCkKvbdKWVFdEfi +EObkKvbdFpATWgFy +EOcKjvbdrzLpTAgn +EPCjjvbdhuZeWrVC +EPCkKvbdraellGjy +DncLKvbdGKeTCgmV +DoDLKvbdCEQAvJlf +DoDLKvbdJvUfEFGi +EOcKjvbdHDkVjCJj +EPCjjvbdZxdJnClS +DoCjjvbdcImJjewY +DoDLKvbdkDMLRHUg +DoDLKvbdqZOggREY +DoCkKvbdkMakyeHP +DoCkKvbdEvYpPmJe +DncLKvbdJJdAJpHE +DoDKjvbdEPCjkXCd +DnbjjvbdlAmOmALA +DoDLKvbdsBfNLgLZ +DncLKvbdKyQjSzuG +EPDLKvbdeAURMxJf +EPCjjvbdkHflGGOL +EOcKjvbdEuxpPlie +DncKjvbdcyyPxYqC +DoCkKvbdRDbaPqES +DncLKvbdaaVeFpQX +EOcLKvbdMuTSLNAX +EPCkKvbdbiMjKfWx +EOcKjvbdSCEEkiZL +DncKjvbdbhmJkGWx +DncKjvbdWXJYVcdg +EOcLKvbdvBDxrndh +DoCkKvbdCEQBVjNG +EPDLKvbdxUmFQyMO +DnbkKvbdznpRFCkx +DoCjjvbdKDJbpjDY +EOcLKvbdREDBQRDr +DoDLKvbdZtIhyETO +EObjjvbdKfGHbBQu +DnbjjvbdnUtzKirG +EPDLKvbdyNsHwsIc +DoCjjvbdIrxaSlxM +DoCkKvbdRjyFuHLT +EPCkKvbdJvUfDdgJ +DnbkKvbdgQBzvcwh +DnbkKvbdpyOgfqEY +DnbkKvbdmRxuZsEJ +EObkKvbdmRyUysDi +DnbjjvbdrzMPraIO +EPDLKvbdDxXksssl +EPDLKvbdqUUGrSKt +EPCjjvbdZisIPfbG +EPDLKvbdiGicZVjV +DnbjjvbdqcdiPnVa +DoDLKvbdGKdsCglu +EPCkKvbdYSlBNUOx +DoCkKvbdjmBkyeHP +EObjjvbdKDJcRKDY +EPDKjvbdiLdcmuCy +DoCjjvbdbAvEfQQX +EPDKjvbdegjvRmqH +EOcLKvbdrounibvG +DoCkKvbdliEUQtrB +DoCkKvbdrXPlChyR +DnbkKvbdcyxoxZRC +DoCkKvbdWIYWYHYz +DnbkKvbdmJETptrB +EObjjvbdbBVeGPpX +DoCkKvbdypnliKXA +EOcLKvbdatagXkTh +EPDKjvbdrounjDWG +EPDKjvbdUyHsyjnn +EPDKjvbddZxoxZRC +DnbjjvbdKCjCpjDY +DoCjjvbdKkBHvAJy +DnbjjvbdjbkkRGuH +DoCjjvbdrafNMGjy +DncKjvbdxnTHwsJD +DncKjvbdemFvfmJk +DnbjjvbdIwsbILqQ +EObjjvbdUMWPAvOi +EOcLKvbdGKdsChMu +DoCjjvbdWXIxWEEg +DoCjjvbdvPTzqKnt +DoDKjvbdILazmwRL +EPCkKvbdjlakzFHP +EPDLKvbdKDJbqKCx +EOcLKvbdHELWKBjK +DoCkKvbdOFDshhkE +EPDKjvbdBhkCKhej +DoDKjvbdNddTiJKd +EPCkKvbdVqmwadkc +EPCkKvbdFfKSOItR +EPCjjvbdZshiYcrn +DncLKvbdvAcxsOeI +EObkKvbdKVtfEFHJ +DncLKvbdXsMBNUPY +DoDLKvbdCTAbtGXS +DoDKjvbdRyjHsDWA +DoCjjvbdJcKDRJcY +EOcKjvbdEuxpPljF +DncLKvbduWNxKQsA +EOcLKvbdhuZeXSUb +EObjjvbdjvWnDaxX +EObjjvbdwWlAvAuu +EObkKvbdqquKnLBN +DoDLKvbddCSmSATm +DoCjjvbdwtmEpxlO +DnbjjvbdDoCkLWcE +DncLKvbdwyhGFxEr +EOcKjvbdrykosAgn +DnbjjvbdNeEUJJLE +DoDKjvbdjuwNdCYX +EPDKjvbdiGibyVjV +DnbjjvbdYqNEhmEq +EPDLKvbdxVNEpyLn +DoCjjvbdZeYGzgiC +DoCjjvbdZjTIQGbG +DnbkKvbdSPsfjGEX +EObjjvbdBsBDUGXS +DoCkKvbdsBfNMGkZ +EOcLKvbdLBLGmCXq +EPDKjvbdJTZBTNYM +DnbjjvbdJTZBSmYM +DoDLKvbdjKFgjNYS +DoDKjvbdqlzKYkhJ +EPCkKvbdkWXOECYX +EObkKvbdFkEsDINV +EObjjvbddndsKstS +DoCjjvbdauBfwjsh +DnbjjvbdFjeTCglu +EOcLKvbdfMfWflik +EObjjvbdlYsRryGt +EPCjjvbdtbcVWuoP +DnbjjvbdMgDPmQVL +DoDLKvbdjhHLefNk +EOcLKvbdUsmTfMWK +DoCkKvbdptTfqqjt +EObkKvbdrRuKmjaN +EPCjjvbdzoQQdcMY +DoDKjvbdrpVoKDVf +DoCkKvbdlZSrTYft +DoCjjvbdBhjajiFj +EOcLKvbdzoQQdbkx +EObkKvbdOhAYZAYa +EOcKjvbdjvXNdBww +DnbjjvbdEXwlTtTl +DoCkKvbdzjVPocsU +DoDLKvbdZQldiMeR +DncKjvbdYNqAYVVt +DnbjjvbdtvNxKRTA +EPCjjvbdqceIonWB +EOcKjvbdyXiKCPzL +DoCkKvbdfIKurNpg +DoDKjvbdFxuVAdYC +EOcLKvbdeOdrjssr +DncLKvbdxnShYTIc +EPDLKvbdoznEKwoA +DoDLKvbdptTfrRkU +DncLKvbdkWWnDaxX +EPCjjvbdKWVGDeHJ +EPCjjvbdtumwipsA +DoCkKvbdZxcinDMS +EObjjvbdCWzdIeQW +EPDKjvbdHgGzYwwg +EOcKjvbduDCtvvOo +DnbjjvbdqvokbiZR +DnbjjvbdmIcsptqa +DncLKvbdrJAJdmPF +EPCkKvbdKjaHvAJy +DoCkKvbdhuZdwSUb +EOcKjvbdnPzZVjyC +DoDKjvbdYSlAmUPY +EOcKjvbdffLzNgHA +DncLKvbdptUHRqjt +EPCjjvbdyTNiMqag +DoCjjvbdauBgXkTh +EPCjjvbdbiMikGXY +EOcLKvbdIHGzZXwg +DncKjvbdrXPkcIxq +DnbjjvbdOTTugEuQ +DnbkKvbdjcMKqHUg +DoDKjvbdffMZnHHA +DoCjjvbddijSWUzn +DncKjvbdBhkCKiGK +DncKjvbdJYTbHkqQ +DnbkKvbdqwPlCiZR +DoCkKvbdxUmFRYkn +DoDKjvbdmSZUzTDi +EPDLKvbdkyTSSxft +DoCjjvbdmajXYPOV +EPCkKvbdMowqVnHT +DncLKvbdTppoUuHm +EPDLKvbdgFkymfgA +EObjjvbdhgJcYujV +DncKjvbdtAGqIABS +DoDLKvbdqZOhGpdY +EObkKvbdjbkkRGuH +DoCjjvbdGLEsChNV +DnbjjvbdZoOIeEyj +DncLKvbdbrbjsdJa +EPCjjvbdGGJqmiTq +EPCkKvbdNPxRWNgT +EPCjjvbdJpydnfOF +EOcKjvbdcyxoxYpb +EPDKjvbdmozZWLYb +EObjjvbdVTmUFlVj +DoCjjvbdNrtWGduQ +DncKjvbdqUTfqqkU +DoDKjvbdTfznMWue +EOcLKvbdNsTugEuQ +DoDLKvbdjhHLfGOL +EObjjvbdZtJJYdSn +DoDKjvbdZjTHofbG +DncKjvbduCbtwVno +EPCkKvbdZtIhxcsO +EOcLKvbdnUuZkJqf +EObkKvbdiCPCeXQq +EOcKjvbdZtJIxcsO +EOcLKvbdZRNEhmFR +DnbkKvbdFjdsDINV +DncKjvbdsZlQSaIO +EObjjvbduLxXAtAw +DncKjvbddoFSjtTr +DoCkKvbdmbKXXoOV +DoDKjvbdOAIsTirA +DncLKvbdMfcQMpVL +EPDKjvbdsrqrxzFD +EOcLKvbdZRMdiMdq +EObkKvbdCTAbsfXS +EPDLKvbdtunYJpsA +EObkKvbdYSkaNToY +DoCkKvbdZMRdUOMN +EPCkKvbdIsYaSmYM +DncLKvbdVYgtZkPO +EObjjvbdaNLBsUmH +EOcLKvbdZyEKOCkr +DoDLKvbdOSsufdtp +DoDKjvbdhbPCdvqR +DnbkKvbdiZuFkpnG +DoDKjvbdHDjujCJj +EPDKjvbdCDpBVjMf +EObkKvbdeFOrBwDK +DoDLKvbdhgJbxvJu +EObjjvbdiZuFlQmf +EPDKjvbdeuzwpJzs +EPDKjvbdezuyEhsw +EPCkKvbdJYTbIMQp +DnbkKvbdkIHLeenL +DoCkKvbdAMgyTXZx +DnbkKvbdfIKvRnQg +EPDLKvbdJqZePFnF +DoCjjvbdRjxfVGkT +EOcLKvbdySmhlqbH +DnbjjvbdEYYMUTtM +DoDLKvbdhtydvquC +EObjjvbdZRMdiMdq +EPCjjvbdVZITzLOn +DoCkKvbdmuVZjjRf +DoCjjvbdzoQREbkx +DnbkKvbdkyTSSxgU +DoCjjvbdzRPNIjXA +EPDKjvbdnPyxvLZC +EOcKjvbdSZjHrbvA +EPCkKvbdShyjRABM +EObjjvbdYpmEiMeR +DoCjjvbdFaOqYizm +DncLKvbdEvZQQMjF +DncKjvbdNrtWGeVQ +DoDKjvbdqdFJPmvB +DnbjjvbdRXODblID +DoDLKvbdyzdnRhIh +EPCkKvbdcTCjsdKB +DncLKvbdJcKCqKCx +EObjjvbdmfdwmNgZ +EPDLKvbdqUTgSSLU +EObjjvbdZyEKODLr +EPDKjvbdTppoVVIN +DnbjjvbdFVyPpNJe +EPDKjvbdJYUBhLqQ +EPDLKvbdqceIpOWB +EPDLKvbdiBnbeXQq +DnbkKvbdGZVVBEYC +DncKjvbdGLFTDINV +EObjjvbdUGzmlXWF +EOcLKvbdxrmiMqbH +DoDLKvbdJpzEnenF +EObjjvbdEvYoomJe +DoDKjvbdJqZdoFme +EObjjvbdEuyPpMie +EOcKjvbdmtuZjjRf +EPDKjvbdjKGHilwr +EPCkKvbdpaIeAWgd +DoDKjvbdGZVUaDxC +DoCjjvbdFkErcHlu +EOcKjvbdrbFllGjy +DnbkKvbdMRwMzUpz +DoCkKvbdDxYLtTsl +EOcLKvbdLBKfmBxR +DoCjjvbdVwJYWDeH +DoCkKvbdZoOIdeZj +EPDLKvbdpfEFUWAh +EOcLKvbdKWVGDdfi +EObkKvbdtvNwipsA +DoCjjvbdwuNEqZMO +EObkKvbdfSBWzkbo +EPDLKvbdFxuVAdXb +DnbkKvbdRWnEClHc +EOcKjvbdkCkjqHUg +DoCjjvbdbsDKscia +EPDLKvbdzQoMiKXA +DnbkKvbdRDcApQcr +DoDKjvbdZtIiYcrn +DoDLKvbdqZPHgQdY +EObjjvbdyfxlAMeX +EObjjvbddjJrWUzn +EPDKjvbdjcMLQgVH +EOcLKvbdozmckXoA +EPDKjvbdcJMjLGWx +EPCkKvbdbhlijewY +EObjjvbdrEFJPnWB +EOcKjvbdmuVZjirG +DncKjvbdnBjXYOmu +DncLKvbdjcLjqHUg +EPDLKvbdlhdUQuRa +DoDKjvbdVwIwvEFH +EObkKvbdZMSDsnLm +DoDLKvbdzHZMAMdw +EOcKjvbdZMSDsnLm +DncKjvbdZshhyDsO +DncKjvbdCEPaWJlf +EOcKjvbdxxJKCQZk +EPCkKvbdezvZEiTw +EPDLKvbdypoMiKXA +EPCkKvbdnUuZjjRf +DnbkKvbdFfJqnJUR +DoCjjvbdTpqPUthN +DncKjvbdcyxoxYpb +EObkKvbdCSaCsfXS +DnbkKvbdRacdlIyL +DoCjjvbdTIzKRABM +EPCkKvbdatbGwjsh +EObjjvbdUsltGMWK +DoDLKvbdtvOXjQsA +DnbjjvbdYSlAmUPY +EOcKjvbdwuNEpxkn +EObkKvbdYqMdiMdq +EOcKjvbdnGeXlmgZ +DnbkKvbdqwQLcJYq +EObkKvbduVmxJqTA +EObjjvbdmoyyVkYb +DoDKjvbdBdPaWKMf +DncKjvbdVvhwvEFH +EObkKvbdauBfxLUI +EOcLKvbdMgDQNQUk +EOcKjvbdsQVnjCuf +EObkKvbdjuvnEBww +DoCkKvbdkWXODbXw +EPCkKvbdZyDjNblS +DoDKjvbdZLqdUNlN +DoDKjvbdbLMFoNcA +DoCkKvbdFVyQPmJe +EOcKjvbdhkdcmuCy +EPCkKvbdmtuZjiqf +DnbjjvbdRbEFLiYk +EPCkKvbdySnJMqag +EPDLKvbdhlFDnVCy +DoCjjvbdzoQREblY +EPCjjvbdvBEYroFI +EPCjjvbdJbjCqJcY +DnbkKvbdliEURUrB +DoDKjvbdOTUWGdtp +EOcLKvbdZnmhddzK +EPDKjvbdSBcdkiZL +DoCjjvbdZMRctOLm +DoDLKvbduCcUwVno +DoDLKvbdEzspeMDJ +EPCjjvbdULunaWOi +DoDLKvbdIwsaglQp +EObkKvbdJuuFdFGi +EPCkKvbdQccBQRDr +EPDKjvbdNrsugEtp +EPDLKvbdEXxLtUUM +DoDKjvbdVBCQsRRy +DncKjvbdeFPSCWcK +DoDLKvbdhficYvJu +DncKjvbdkClLRHVH +EOcLKvbduWNxKRTA +EObjjvbdNPwpumgT +DoCjjvbdjmCLzFGo +DncKjvbdZtIhxdSn +EObkKvbdKQyePFme +EPCjjvbdEuxpPljF +DoCkKvbdZtIhyDrn +EPDLKvbdJpzFOfNe +EPDKjvbduaEZTPFI +EPDLKvbdSQTgKFcw +EOcLKvbdBcpAujMf +EPCjjvbdfHkVrOQg +EPCjjvbdKaKflaxR +EObkKvbdZjTIQGaf +EOcLKvbdijGIKMwr +EPDLKvbdvBEZTOdh +DnbkKvbdZRNEhleR +DnbkKvbdijFgimXr +EObjjvbdEASIlywX +DoCjjvbdKaKgNCXq +EPDLKvbdTppoUuHm +EPCkKvbdwzHefYEr +EPCkKvbdhtyeWrUb +DnbkKvbdPyNAGsRj +EPDKjvbdmttzKiqf +DnbjjvbdRacdkhyL +EOcLKvbdeJjRvUzn +EObjjvbdNHCpNQVL +EPCjjvbdgLGzcGAE +DoCkKvbdidkGtoAO +DnbkKvbdKDJcRKCx +DnbjjvbdSQTgKGEX +EPDLKvbdyqPMiJwA +DnbkKvbdLrWlytpz +DnbjjvbdmgExNNgZ +EPCkKvbdlYsRrxgU +DnbjjvbdTkuoAvPJ +EOcKjvbdgFkymgHA +EPDLKvbdmaivxOnV +DnbjjvbdEztQeMDJ +EObjjvbdWfYzUAPT +DnbkKvbdiMEdNuDZ +DoDKjvbdgQBzwEXh +EOcLKvbdSBcdlIyL +DnbjjvbdrMzJxkhJ +DnbjjvbdddnrCXDK +DncLKvbdmbKXXnnV +DnbjjvbdYzbfSKWZ +EPCjjvbdUMWPBVoJ +EPDKjvbdBraDUGWr +DoCkKvbdFkFTDINV +DncKjvbdYkqdTmkm +DncKjvbdmpZyVjyC +DoCjjvbdZisIQHCG +DncLKvbdYqMeJMeR +EPDKjvbdZjTHpHBf +EOcLKvbdcJMikFwY +DoCkKvbdFpATXHGZ +DnbjjvbdVBBqSpqy +DoCkKvbddZyQXxpb +EOcLKvbdqlyiyMHi +EPDLKvbdfMfWgNJk +DoCjjvbdrNZjZLgi +EPCkKvbdeOdsKtTr +EPDKjvbdLrXMytpz +DncLKvbdQvnDcMHc +DoDLKvbdyYJJbPyk +DnbjjvbdrylPsBIO +DnbkKvbdTqROuUgm +DoCjjvbdcyyQYZRC +EObjjvbdbLMFnmcA +EObjjvbdbVCGxKsh +EObjjvbdelfWgMjL +EPDLKvbdnGdwmOGy +EPCkKvbdcTDLTdKB +DncLKvbdUxhTyjoO +EPCjjvbdwzHfFxEr +EPCjjvbdkxrqryHU +DncLKvbdDihJvYKA +EPCkKvbdRzJhScWA +EObjjvbdZHWdAOri +DoDLKvbdjbkkRGuH +DncKjvbdNVSrLNAX +DncKjvbdVqnYCElD +DnbjjvbdFWZPpMjF +DoCjjvbdZMRctNkm +EPCjjvbdRNXaxmtz +EOcLKvbdLZQjSztf +EObjjvbdePFSjssr +EOcKjvbdjbkkRHUg +EPDKjvbdcSbjtEJa +EObkKvbdKQzFPFme +DoCkKvbdnUtzKjRf +DncLKvbdeOeTKtUS +DoCjjvbdpstGqqjt +EOcKjvbdrpWPJcWG +EPCkKvbdwkXDgzyf +DncKjvbdnPyxvLYb +DoCkKvbdpxoIHRDx +DnbjjvbdLFegaaRV +EPCjjvbdrXQLcJYq +DncKjvbdWXJXvDdg +DnbjjvbdQdCaQRDr +EOcLKvbdWWiXuceH +DoCjjvbdbiNJkGXY +EPDKjvbdijGHjMxS +DoDLKvbdTfzmkwVe +EObkKvbdmSZUzTEJ +DnbjjvbdKefHaaRV +DncLKvbddoFSjstS +DncLKvbdSLYfUgKs +EPCkKvbdCIjbLJGK +DncKjvbdKNADzGuB +DoDKjvbdBcpBVjMf +DnbjjvbdpxoHfqEY +DoCjjvbdANHyTWyx +DoDKjvbdFjeSbgmV +DnbkKvbdxwiKCPzL +DncKjvbdqceIpNvB +DnbjjvbdLFfHbAqV +EPDLKvbdtTSTYydc +EPCjjvbdezvYdiTw +EObjjvbdWWiYVdFH +EOcLKvbdZyDjNbkr +EObkKvbdwzIFeweS +EPCjjvbdjmBkzFGo +EObjjvbdGAoRYizm +EObjjvbdjcMLQgVH +DoCjjvbddePRavbj +EOcKjvbdlhcspuSB +EPCjjvbdSCEFMJZL +EObkKvbdEYYLsssl +EObkKvbdpstGrSLU +DoDLKvbdIGgZxwwg +EObkKvbdWIYWYGxz +EPCjjvbdfILWSNqH +DnbkKvbdFWYpPljF +DoCjjvbdVAbRSqRy +EOcKjvbdeEoSCWcK +EOcKjvbdSBceMIxk +DoCjjvbdgFkzOGgA +EObkKvbdbPfgELzd +DnbjjvbdmtuZkJqf +EPCkKvbdYgWdAPSi +EObkKvbdmaiwXoOV +EOcKjvbdjuvnDbXw +DncLKvbdiBoCdvpq +DnbkKvbdZxcjNbkr +EPDKjvbdKfFgaaRV +DoDKjvbdNGcPlouL +EOcKjvbdHlBznXQk +EPCjjvbdKQydoFme +EPCjjvbdDxYLsssl +DoCjjvbdHbLydzAD +DnbkKvbdZisHofbG +DnbkKvbdvvkaWBWV +DncLKvbddxZtUSFz +EPCjjvbdBcpBWJlf +EObkKvbdVBBprpqy +DoCkKvbdaSFcITfL +DoCkKvbdZLqctOMN +EPDKjvbdFWYpQMie +DncKjvbdOEctJIjd +DoCkKvbdEuyQPmJe +DncLKvbdZGwEAOsJ +DncKjvbdlqyUzSci +EOcKjvbdKCibqKCx +DnbjjvbdEOcLKvbd +DncKjvbddneTLUUS +EPCjjvbdhbPDFWpq +DoCjjvbdeAUQmXjG +EPDKjvbdVwJYWDeH +DncKjvbdePFTKstS +DoCjjvbdjggMFemk +EPCjjvbdcScLUDjB +DoDKjvbdZjTIQGbG +EObjjvbdehKurNpg +DncLKvbdbsDLUEJa +EOcLKvbdEJgjWXjA +EPCkKvbdqquKnKaN +DnbjjvbdZjShQHCG +DoCjjvbdCEPaVilf +EObjjvbdzjUpQDrt +EOcLKvbdUVlPjUBR +DnbjjvbdeFPSCWbj +DoCkKvbdKxpirzuG +DncLKvbdrykpTAgn +DoDKjvbdemGXGljL +DncLKvbdTYKlNzkY +DncKjvbduaDyTOeI +EObkKvbdnBjWwoOV +EPCkKvbdGdLWKCJj +EPDKjvbdKeegaaQu +EObkKvbdxnShXrhc +DoCkKvbdsBemLgKy +EPCjjvbdrzLoraHn +EPDLKvbdrRuKmjaN +DncLKvbdmajWxPOV +DncKjvbdKVuGDeGi +EObjjvbdziuQPdTU +DnbkKvbdZxcinCkr +EPCkKvbdlqxtzTDi +EPCkKvbdyzeOSHiI +DnbkKvbdqmZiyMIJ +EOcLKvbdIwtBgkqQ +DncLKvbdfekzOHHA +EPCkKvbdKNADzGuB +EOcLKvbdUaBqSqRy +EPDKjvbdddnrBvbj +DncLKvbdmuVZjirG +EOcKjvbdbBWEepPw +DncLKvbdwjvdHzyf +EPDKjvbdmgFXlmgZ +EPCkKvbdtSqryZeD +EObkKvbdOFEUIhkE +EOcKjvbdiBncFXRR +DncLKvbdxZgeeweS +EPDLKvbdxwiKCPyk +EPDKjvbdHEKvJajK +DncKjvbdrafMlGjy +EOcLKvbdwWlBWBWV +DncLKvbdegjvRmqH +EObkKvbdehKvRmqH +DoDLKvbdUaBpsQrZ +EPDKjvbdRaceMJYk +DnbkKvbdZRNEhldq +DnbjjvbdKCibpjDY +DoDLKvbdKaLGmCXq +DncLKvbdKaKflbYR +DoCjjvbdZQleJNFR +EPCjjvbdZHWdAOsJ +EObkKvbdpxnggRDx +EPDKjvbdiUzFXSVC +DncKjvbdhfjDZWJu +DoCjjvbdYkrDtNlN +EOcLKvbdkVvmdBxX +DnbjjvbdFkFScHlu +DoCjjvbdlrYuZrci +EOcKjvbdrDdiPnWB +DoCjjvbdfoazvcwh +EPCkKvbdtkxWaUAw +EObjjvbdVYgsyjoO +EPCjjvbdssSTZZeD +DoCjjvbdbVBfwjsh +EPCjjvbdVgwuxGxz +EOcKjvbdZoNhdeZj +EPCkKvbdGYttaDwb +DncLKvbdvAcySoEh +DoDKjvbdIGfzZYYH +DoDKjvbdtcCtvvPP +EObjjvbdkxsRryHU +DnbkKvbdJSyBTMwl +DoCjjvbdsPuoJbuf +DnbjjvbdZxcimcMS +DoDKjvbdNGbpMouL +DnbjjvbdSZjHrbvA +DoCkKvbdmRxtysDi +EOcLKvbdZQmEiMeR +EPCjjvbdpfEEtVaI +EPCjjvbdtTRrxzEc +DoCkKvbdZdxGzghb +DncKjvbdrykpTBIO +EPCkKvbdxxIjCPyk +DncLKvbdCEQAujNG +EOcLKvbdrWokbhyR +EPDKjvbdjJehKMwr +DncLKvbdSxLMNzjx +DnbjjvbdZyDinDMS +EObjjvbdZirhQGaf +DncLKvbdkClKqHVH +EObkKvbdfIKvRmqH +DoDLKvbdQvmcblID +EPDKjvbdNsTufdtp +EObkKvbdZRMeIleR +DnbkKvbddwytTrFz +EObjjvbdZxdKODMS +EPCkKvbdSLZFtgKs +EPDKjvbdrovPJbuf +EPCjjvbdHgHZxxYH +EPCjjvbdddoSBvbj +DoDKjvbdegkVqmpg +DoDKjvbdCfkfHAzc +EObjjvbdtvNxJqTA +EPDKjvbdhtyeXSVC +EPDLKvbdUtMtGLvK +EPCjjvbdFaPRYizm +EPCkKvbdVZIUZkOn +EPDKjvbdFeiqnIsq +EObkKvbdddoRbWcK +EOcLKvbdaNLCSuMg +EObjjvbdFpATXGfZ +DncLKvbdrXPkcJYq +EPCjjvbdFjdrcHlu +EObkKvbdUQqPVUhN +DoDLKvbdpxoHfqDx +DncLKvbdypoNIjXA +EPCjjvbdmRxuZrdJ +EPDKjvbdqZPHgREY +EOcLKvbdZGwEAPTJ +DncLKvbdjuwNcbXw +DoCkKvbdTlWPBVoJ +DoCjjvbdRzKIScWA +EPDLKvbdZnnJFEzK +EPDLKvbdqvokbhyR +DnbkKvbdAMhZTWyx +EPCkKvbdqYoHgRDx +EPDKjvbdZtJJZETO +EObkKvbdWRmxBdlD +DnbkKvbdwWkaWBWV +DncKjvbdgKfzcGAE +DncLKvbdtbcUwVno +EOcLKvbdcImJjfWx +DncLKvbdSwjlNzjx +EObkKvbdjblLQftg +DncLKvbdQmYByNtz +DnbjjvbdhlFDmtby +DnbjjvbdcTDKsdJa +EPCkKvbdqUTgSRkU +EOcKjvbdZQleImEq +EOcLKvbdtTRrxzFD +EPCkKvbdUVkpKUAq +DncLKvbdmbJvwoNu +EPDKjvbdrJAKFMne +DncKjvbdpyOhGqEY +EOcLKvbdLrWlzVQz +DnbjjvbdvAdYsPFI +EPCkKvbdDoDKjvbd +DoDLKvbdelfWgMjL +EObkKvbdaMjbTUlg +EObjjvbduVmwjRTA +EPCjjvbdHffyxwwg +DnbkKvbdXrkaNToY +DoCjjvbdZshhyDrn +DoDKjvbdunszqKoU +EPCkKvbdmJDtRVSB +DnbkKvbdcImKLFwY +DoCjjvbdpedEtVaI +DnbjjvbduMXwAtBX +EPDLKvbdhbPDFWpq +EPCjjvbdrDdiQNua +DnbkKvbdKxpirzuG +EObkKvbdcTCjtEJa +DncLKvbdZQmFIldq +DoCkKvbdqUUGrRkU +DnbkKvbddZyQXyRC +DncLKvbdIryBTNXl +EPDKjvbduaDxrneI +DoCkKvbdZMSDsmlN +DoDKjvbdrovOjCvG +EOcLKvbdhyuFkpmf +DoDLKvbdddnrBwDK +DncKjvbdDwxLstTl +EPDLKvbddZxpXxpb +DoDKjvbdCSaDTewS +EPCkKvbdVqmxBeLc +DoCkKvbdZMSEUNkm +DnbkKvbdznopdcMY +EPCjjvbdqYoHgQcx +EPCkKvbdlhdUQuRa +EObjjvbdauBgYLUI +EObjjvbdySnJMrCH +EObjjvbdkIGlGGOL +DoCkKvbdwXMAvBWV +DnbjjvbdiCOcFXRR +EPCkKvbdIHGzZYXg +EPDKjvbdiMFDmuCy +EOcKjvbdtlXvaUBX +DoDLKvbdhfibxuiu +EPCkKvbdqwQMChxq +EObkKvbdRkYeuGjs +DoDKjvbdYkrEUNlN +EPDKjvbdZshiYcsO +DnbkKvbdQlxBxnUz +DncKjvbdSPtGifEX +DoDLKvbdmajXXoNu +EObjjvbdHbMZdzAD +EPCkKvbdZyEKNblS +EObkKvbdKfFgbBRV +EOcLKvbdOTUVgFVQ +DoCkKvbdfMevgMik +EPDKjvbdptTfrSKt +DnbkKvbdxZhFexFS +DncLKvbdUaBqTQrZ +DoCjjvbduDDUwWPP +DoDKjvbdNsUVfduQ +EObkKvbdvOszpjoU +EObkKvbdNsTvGdtp +EPDKjvbdxwhiapZk +DoDKjvbdiGjCxvJu +DoDLKvbdxxIibPyk +DncKjvbdvAdYroFI +EOcLKvbdLAkGmBwq +DncLKvbdIsYaTMxM +EPDLKvbdFejRmiUR +DoCkKvbdbrbjscia +DoDLKvbdiHJbyWJu +EOcKjvbdIwtBhMQp +EObkKvbdpfDdtVaI +EObjjvbdfMevfmJk +EObjjvbdptUHRrLU +EPDLKvbdYgXEAOri +EObkKvbdZoOJEeZj +DoDKjvbdqUUGqqjt +DnbjjvbdxnTHwriD +EPDKjvbdfHkWRmpg +EPDLKvbdePEsLUUS +EPCjjvbdEPCkLXDE +DoCjjvbdgQBzvdYI +DoCkKvbdZjSgogBf +EObkKvbdtunYKQsA +EPDKjvbdezvYdiTw +EPDLKvbdLBLGmCYR +EObkKvbdSLYfVHKs +EPDKjvbdfILWSNqH +EObjjvbdqlyixkhJ +DoCkKvbdjKFgjNXr +DoDLKvbdyzdmrHhh +DoDLKvbdYpleImEq +DoDKjvbdUxgtZkPO +EPDLKvbdJKEAKPgE +DoDKjvbdRXODblHc +DoCkKvbdmozYujxb +EOcKjvbdMgCpMouL +DncKjvbdZsiJZESn +EPCkKvbdzROmIiwA +DnbkKvbdEOcLKvbd +EPCjjvbdpxoIHRDx +DnbkKvbdEJgivXjA +DoDKjvbdfHjurOQg +EObjjvbdyYIjCPzL +DoCjjvbdvlvANEEm +DncLKvbdOXoVzdOU +EObkKvbdatagYKtI +DnbkKvbdGYtuAcwb +EObkKvbdegjuqnRH +DnbkKvbdtumxKQsA +DnbkKvbdIxTbILqQ +DncKjvbdIsZBTMxM +EPCjjvbdRjyFuHLT +EOcKjvbdJXtCIMQp +DoDKjvbdYkqdUOLm +EObjjvbdZsiIyESn +DnbkKvbdhtyeWrUb +EPCjjvbdEuyQPmKF +EOcLKvbdeFOrCWcK +DoDLKvbdEvYpPlie +DoCjjvbdZtJIyETO +EPCjjvbdrWokcJYq +DoDLKvbduaDySneI +DncLKvbdsPunjCuf +EObkKvbdpyOhGpcx +EObkKvbdliDsqUqa +DoDLKvbdhaoCeXQq +DncLKvbdaRfChUFk +EOcKjvbdYTMAlsoY +EPCkKvbdfkGzbfAE +EOcKjvbdURQnttgm +DoDLKvbdDoCjjvcE +DncLKvbdCJKbLJGK +EPDKjvbdhlFEOVDZ +DnbkKvbduCcVWvOo +EPCjjvbdQdDBPpcr +EObkKvbdbBVdeopX +DnbkKvbdWHwuwfxz +DoDLKvbdsrqrxzFD +DoDKjvbdCSaCsfXS +DoCkKvbdNPxQunGs +EPDLKvbdyzeNrHhh +EObjjvbdWXIwudFH +EPCjjvbdKWVFceHJ +EOcLKvbdqwPlCiZR +DncLKvbdyOTHwsJD +DncLKvbdxUleRZMO +DnbjjvbdZHWdAPTJ +DoDLKvbdePEsKstS +EPDKjvbdHDkVjBij +EObjjvbdSPtHJecw +EObjjvbdyTOJNRag +EOcKjvbdhfibxuiu +EOcKjvbdRDbaPqES +DnbjjvbdemGWflik +DoDKjvbdwjwEHzzG +EObjjvbdsCGNMGjy +DnbjjvbdssRsYyeD +DoDKjvbdJvVFceGi +EPCkKvbdLZQjSzuG +DoDLKvbdqUUHSSLU +EPCjjvbdaaWEeoow +EPCjjvbdDjHiuxKA +EPDKjvbdZQmFIleR +DoDKjvbdRDbaPpdS +EPCjjvbdZoOJFFZj +EObjjvbdQmYBxnUz +EPDKjvbdKCibqKDY +DoDLKvbdsCFmMGjy +DncKjvbdKaKgMaxR +DoCjjvbdrMzJxkhJ +EObkKvbdeKKRutzn +EPCkKvbdcTCjscjB +EPCkKvbdZsiIyDrn +EObjjvbdnBjXXoOV +DoDKjvbdBiKakIfK +EOcKjvbdRpTfjGEX +DoCkKvbdtSqrxydc +EObkKvbdHDkVjBij +DncLKvbdqTsgSSLU +DncLKvbdzdzOzdzQ +DoDLKvbdVrNwadlD +DncLKvbdSQUGifEX +DncLKvbdxxJKBoyk +EPCjjvbdrzLpSaIO +DnbkKvbdhtyeXRuC +DoDKjvbdyTOImSBg +EPDLKvbddZxpXxqC +DoCkKvbdZMSDsnLm +DncLKvbdEARhlzXX +EPDKjvbdkWXOECYX +EObkKvbdSLYetgLT +EPDKjvbdTfznLvvF +DoCjjvbdSZjHrcWA +DncKjvbdmJDsptqa +EOcLKvbdZxdJmblS +DnbjjvbdKWUfDeHJ +EPCkKvbdLiBkpxAS +EObkKvbdePFSkTtS +DoDKjvbdYzbfSKWZ +EPCjjvbdvAdYsPFI +EObkKvbdTAFJIBnd +DnbkKvbdsZkpSaHn +DoDLKvbdczZQYZRC +EPDKjvbdTvMQKTaR +DnbkKvbdyYJKCQZk +EPCkKvbdVAaqTQqy +EOcLKvbdbPfgDkzd +EObkKvbdePErjssr +EPDLKvbdyTOJNRag +EPDLKvbdyTNiNSBg +DoCjjvbdqvpMCiYq +DoDKjvbdRpUHKGEX +DoCjjvbdDoCkLWbd +DncLKvbddCTNSATm +DoCkKvbdcSbkUEJa +EPDLKvbdzjVPocrt +DnbkKvbdxVNFQyLn +DnbkKvbdSKyFtfkT +DoCkKvbdmpZxukZC +DncLKvbdGFjSOJTq +EOcKjvbdhkdcmtcZ +DoCjjvbdyzeORghh +EPCkKvbdRbDeMJZL +DoDLKvbdZMRctOMN +EObjjvbdAMgySvyx +EOcLKvbdTYLMNzkY +DnbjjvbdmuVZjjSG +DnbkKvbdZsiIyDrn +EPDLKvbdjEjfuPAO +DoCjjvbdkxrrSxgU +DncKjvbdSLYfUfkT +DnbjjvbdBcpAvJmG +DoDLKvbdSPsgKFcw +DoCkKvbdrXQMDIyR +EObkKvbdKVuFdEfi +DnbkKvbdrSVLOLBN +DoDKjvbdZnmhdeZj +DoDKjvbdNHDQNPuL +DoDKjvbdpyOggREY +DoCkKvbdQvmcblID +EPCkKvbdMfbomQVL +EPCjjvbdNVTRjmAX +EOcKjvbdbhlijevx +EObkKvbdWWiXvEFH +DncKjvbdlqyVZrdJ +DnbjjvbdrSUkNjaN +DncLKvbdmSZUzTDi +EObjjvbdZQmEhmEq +EOcKjvbdiLdcnVDZ +EObkKvbdySmhlqag +DnbjjvbdbUagYLTh +DncKjvbdBdQAvKNG +DncLKvbdyzdnRghh +EObkKvbdLZRKSztf +DoDLKvbdRXOEDMHc +DncKjvbdFkFSbgmV +EPCjjvbdZQldiMeR +EPDLKvbdFfJqmiTq +EOcLKvbdpssgRrKt +DnbjjvbdKRZeOeme +DnbkKvbdnPzYvLZC +DoDLKvbdUVlQJsaR +EPCjjvbdqFceTvAh +EPDKjvbdEARhlyvw +EPCjjvbdNGbolotk +DoCjjvbdVhYWXgYz +DoCjjvbdUtMtFkvK +DncKjvbdZQldhleR +DnbjjvbdCEPaWKMf +EObjjvbduWOXjQsA +EOcKjvbdIjEAKPfd +DoCjjvbdURRPUuIN +EObkKvbdbhmKKfWx +DoDKjvbdxrnJMrCH +EObjjvbdGFirNiTq +DoDLKvbdtSqsZZeD +EPDLKvbdKkAhWAJy +EPCkKvbdbVBgYKsh +DoCjjvbdKWVFdFGi +EPDKjvbdwXMAuaWV +DoCkKvbdRXNdCkhD +EPCjjvbdZRMdhmEq +DncLKvbdcJMijfWx +DnbkKvbdZRNEiNFR +EObjjvbdAMhYrvyx +EPDLKvbdijGIJmXr +DoCkKvbdbhmJjfXY +EOcLKvbdrzMQTBHn +DnbkKvbdKVtfEEfi +EPCkKvbdxVNFRZMO +EPDLKvbdjcMLQgUg +EObjjvbdjuwODbXw +EObkKvbdZeXfzhJC +EPCkKvbdUyITyjoO +EPCkKvbdGFjRnIsq +DnbjjvbdIwsbHlRQ +DncKjvbdtTSTYzEc +EPDKjvbdhfjCyWKV +DoCjjvbdhytelQnG +DoDKjvbdxnTHxTIc +EOcKjvbdUQqPUtgm +EPDLKvbdkNCMZdgP +DnbkKvbdGKeTDINV +EOcLKvbdZMRcsmlN +DnbjjvbdRXNdCkgc +DoCjjvbdRXNccMHc +EObkKvbdRjyFuGjs +EPDLKvbdmJDtRUrB +DoDLKvbdpyPIGpdY +EPCjjvbdkNCLzEgP +DoDLKvbdZoNiFEzK +DoDKjvbdKVuFcdfi +DoDKjvbdqZOggQdY +EPCkKvbdSQTgJecw +EOcKjvbdrRuKnLAm +EObkKvbdbUbHYLUI +EOcLKvbdyNrgwsJD +DoDKjvbdegkVqnQg +DnbkKvbdGBOpxizm +EObkKvbdJbjDQicY +DncLKvbdSLZFuGjs +DoCkKvbdGckVibJj +DoCkKvbdzeZnzdyp +EObjjvbdxxJKCQZk +EObjjvbdJpzFPGNe +EPCkKvbdUsltGLvK +DoDLKvbdziuQQDsU +DncLKvbdRzKIScWA +DoCkKvbdSLYfVGjs +EPCjjvbdhgKDYujV +DoDKjvbdtunXjQsA +EPDKjvbdqceJPnWB +DncKjvbdUQqOuUhN +EOcKjvbdJvVFceHJ +EPCkKvbdMfcPmQVL +EObkKvbdNrsufdtp +DncLKvbdUQpnuUhN +DncKjvbdYkqdUOMN +EObkKvbdqceJQNvB +EPDLKvbdCWzdJFPv +DncKjvbdauBfxLTh +DncKjvbdZnnJEdyj +DncLKvbdEvYpPlie +DoDLKvbdhaoCdvpq +EObkKvbdCEQBVimG +EOcKjvbdBiKbKhfK +DnbkKvbdeuzwpJzs +DncLKvbdhlEcnVDZ +EObkKvbdkCkjpftg +DncKjvbdZQldhmEq +DoDKjvbdFyVVBEXb +DncKjvbdZirgogCG +EPCkKvbdWXJXvEFH +DnbkKvbdOStVfduQ +DnbkKvbdNGbpMouL +EObkKvbdcIljKfXY +DoDLKvbdXrlBMsnx +EOcLKvbdfNFwGmJk +EObjjvbdUQqPUuHm +DnbjjvbdEXxLtUTl +EPDKjvbdLGFhCBQu +DncKjvbdTYLLmzkY +DoCkKvbdkaNPNALA +DoCjjvbdFxtuBDwb +EPDLKvbdGGJrNhsq +DoCkKvbdZyEJnDLr +EObkKvbdDxXlTssl +EPCkKvbdGKdrbglu +EOcLKvbdmoyyVjxb +DnbkKvbdRNYByNtz +EObjjvbdGFirOItR +DoCjjvbdxUmFRZLn +EPCkKvbdsQWPJcWG +EPCjjvbdegkWSORH +DncLKvbdYzcGRjVy +DoCkKvbdRXNcblHc +EObkKvbdwtldqYkn +DnbkKvbdZisHpGaf +EPCkKvbdGQASvfey +DnbjjvbdeFPRavbj +EOcLKvbdGZVVBEYC +EPCkKvbdKDKDQicY +EPCkKvbdUsmUFkuj +DoCkKvbdatbHXjtI +EObkKvbdlrYtyrdJ +DnbjjvbdjKGHilwr +EOcKjvbdjlakyeGo +DoDLKvbdnPzZVkZC +DnbjjvbdCIjbLJFj +DoCkKvbdegkWSORH +DoDLKvbdjvXODbYX +EPDKjvbdaaVeFoow +DncKjvbdwtmFRZLn +EObkKvbdkNCLzEfo +DncLKvbdrbGMlGkZ +EObjjvbdczZQXxqC +DoCkKvbduaEZTOdh +EObjjvbdZxcjNbkr +EOcKjvbdCJKbKiFj +DnbjjvbdjEkGuPAO +DnbjjvbdZshhyDsO +DoDLKvbdbsCkUDjB +DoCkKvbdNddUIhkE +EPDLKvbduVnYJpsA +DnbjjvbdQvmccMHc +DoDKjvbdDjIKWXjA +DoDLKvbdxZhGGYEr +EObkKvbdqquKmkBN +EObjjvbdLBLHMawq +DoDLKvbdrbFmLgLZ +EPDLKvbdddnrBwCj +DoCkKvbdbrcLUEKB +DoDKjvbdqlyjYlHi +DncKjvbdQwNdDMID +EObkKvbdBiLCKhej +EPCkKvbdSZigsDWA +DnbkKvbdwuNFRYlO +EPDLKvbduCbtvvOo +DnbjjvbdaaWFFpPw +EObkKvbdRECaQQdS +DncKjvbdyOShXsJD +EPCkKvbdFVyPomJe +DoDLKvbdcJMijevx +EObkKvbdSZigsCvA +EObjjvbdrNZjYlHi +DnbkKvbdKfFhBaRV +EPDLKvbdSLZFtgKs +EPDLKvbdrbGNMGjy +EPCjjvbddwzTtSFz +DoDLKvbdnGdxNNgZ +DncLKvbdTfzmlWue +EOcKjvbdbLLfOmcA +DoDLKvbdNGcQNPuL +DncLKvbdUaCQsQqy +EPCjjvbdCfkfHAzc +EPDKjvbdlrYuZsDi +EPDLKvbdmajXYPOV +EObjjvbduCcUvvOo +DoDLKvbdJXsahLqQ +EPCkKvbdOSsugEuQ +DnbkKvbduaDyTOeI +DncLKvbdYqNEhldq +EOcLKvbdeOdsKtUS +EOcKjvbdkHgLefOL +EPCkKvbdrpVoKCuf +EObjjvbdShzJqAAl +DnbjjvbdgPazwDxI +EPDLKvbdEztQdlDJ +DoDKjvbdYpmFImFR +DncLKvbdsBellHLZ +DoCjjvbdatbHYKsh +DoCjjvbdptTgRrLU +EOcLKvbdznpRFCkx +EPCjjvbdWWiYWEFH +EPCjjvbdRosgJedX +DnbjjvbdkIGkefOL +DnbjjvbdiZuGLqNf +EPCkKvbdANIZTWyx +EObjjvbdZQmFJMdq +EObkKvbdjvWmcbYX +DncLKvbdRbEFMJYk +EOcKjvbdpfDdtVaI +EPDKjvbdJqZePFnF +DnbjjvbdeFOqavcK +DoCjjvbdnHFXlnHZ +EPCjjvbdTvLpKTaR +EPDLKvbdVgxVxHYz +EObkKvbdZRNFJMdq +EPDLKvbdbUafwkUI +EObjjvbdKCjDQibx +EPDLKvbdrXPlChyR +DoCjjvbdxsNhlqbH +DoDKjvbdNGbomPtk +EPDLKvbdLBLGmBwq +DncLKvbdIsZBTNYM +EPDLKvbdOXnuzcmt +EPDKjvbdKDJcRJcY +EObkKvbdiBncFWqR +DncLKvbdlhcsqUrB +DncKjvbdrylQTAgn +DoDLKvbdTlWOaWOi +EPCkKvbdegjurNpg +EObjjvbdyTNhmSBg +EPCjjvbdQccBPpcr +EPDKjvbdeOeSkTtS +DoCjjvbdGYuVAdXb +EObjjvbdrzMPsAhO +DncLKvbdrEFJQOVa +EPCjjvbdbhmKKfWx +EPCkKvbdeYZssqez +DnbkKvbdURQntuHm +EPDLKvbdkDLkRHVH +EOcKjvbdlZSrSxft +EObkKvbdijGHimXr +EOcLKvbdpxnggQdY +DncKjvbdJKEAJpGd +EPCjjvbdMowpumfs +DoCkKvbdmSYtysDi +DoDLKvbdBsBDTfWr +EPDLKvbdrMzKZMHi +DnbkKvbdBraDUGWr +DnbjjvbdDxYMTtTl +DncKjvbdFyUuBEYC +EPCkKvbdVZITzKnn +DnbkKvbdTkvPBWPJ +EObkKvbdSQTfjFdX +DoCjjvbdZisIPgBf +EPCkKvbdLGFhCAqV +DoCjjvbdNGcQNPuL +DoCkKvbdqlzJyMIJ +EObjjvbdZtIiZDrn +DnbjjvbdeEoRawCj +DoDKjvbdUaBqSqRy +EOcLKvbdmfdwmOGy +DoDKjvbdptTfqrKt +DoDLKvbdvAcxsPEh +DoCkKvbdySmhmRbH +EOcLKvbdhfjDZWKV +EOcKjvbdHffzZXxH +DoDKjvbdLFfHaaQu +EPCjjvbdgFlZmfgA +EOcKjvbdtcCuXVno +DoDLKvbdZirgpGbG +EObjjvbdNsUWHEuQ +DoDLKvbdsBfNLgKy +DoDKjvbdGGKRnJUR +DoDLKvbdKkAhWAKZ +DnbjjvbdOFDtJJKd +EPCjjvbdMuSrKmAX +DnbjjvbdyXiKBpZk +DncLKvbdOFDtIhjd +DoDKjvbdNPxQumgT +DnbjjvbdrSVLOKaN +EPCjjvbdmJDtRVRa +EPCkKvbdZeXfzgiC +DoDKjvbdhaoCdwRR +DncKjvbdiBncFXRR +EPDLKvbdvBEYrndh +DnbjjvbdBiLBkIfK +EPDLKvbdhgJbyVjV +DncKjvbdzRPNIiwA +DnbjjvbdegjvRmpg +DncLKvbdyYIibQZk +EPCkKvbdxnTIXrhc +EPCkKvbdhkeEOUby +DnbkKvbdjJehKMxS +DoDKjvbdkVwODbYX +EPCkKvbdFWYpQNKF +EPCjjvbdXrkaMsnx +EPDKjvbdRjxetgLT +DoDKjvbdEztRFLbi +DnbkKvbdqdFJQNua +EPDLKvbdTqQntthN +DoDLKvbdYORAXtvU +DnbjjvbdEYXksstM +EPDKjvbdkMbMZdfo +DncLKvbdJKEAKQGd +EOcKjvbdFejSOJUR +DoCjjvbdYlRdTmkm +DoDKjvbdlYrqrxgU +EPDKjvbdKVuFdFGi +EOcLKvbdJqZeOfNe +DnbkKvbdzoPpdcLx +DoDKjvbddePSCXCj +DoDKjvbdEASIlywX +DoCjjvbdrEEiPmua +EPCkKvbdidkGuPAO +EObjjvbdKRZdnfNe +DncKjvbdhgJcZWJu +EPDLKvbdZxcimbkr +EPDKjvbdNeEUIiKd +EOcKjvbdvAdZSndh +DncLKvbdjggMGGNk +EObkKvbdOStVgFUp +EPCkKvbdRaceMIxk +DncKjvbdDwxMUUUM +DncKjvbdWeyZtAPT +EPCjjvbdEYXkstTl +EOcKjvbdxsOJNSBg +EPCkKvbdKQzFPFnF +EOcLKvbdJXtCHkpp +DoCjjvbdtlYXBUBX +EPCjjvbdwuNFRYkn +DoDLKvbdkDLjpfuH +EPDKjvbdxrmhlqbH +EOcLKvbdjmCLzEgP +DoCjjvbduaEYsPFI +EPCkKvbdCEPaWJmG +DncKjvbdwtmEpxlO +EPCkKvbdJbjCpjCx +DnbjjvbdhzVGMRNf +EPCkKvbdZxcinDMS +DoCkKvbdrNZiyLgi +EOcLKvbdIHGyyYYH +EObkKvbdYNqAXuWU +EPDKjvbdtvNwjRTA +EPCkKvbdcJMjLFvx +EPCjjvbdNrsvHEuQ +DoCjjvbdnGeYMmgZ +DoDLKvbdSLZGUfjs +EPDKjvbdtvOYKRTA +DoDKjvbdziuPpESt +DoCkKvbdMgDPlotk +DoCkKvbdeFOrCXDK +DnbkKvbdMgColpUk +EPCkKvbdKVuFdFGi +DoDLKvbduCcUvuoP +DoCkKvbdRDcAopdS +EPDLKvbdehKvSNpg +EOcKjvbdDoCjjvbd +DoCjjvbdOSsufdtp +EObjjvbdGQASwGfZ +DncLKvbdiHJcYujV +DncKjvbdRadFMJZL +EPDLKvbdZxcinDLr +EPDLKvbdhaoDFXQq +DoDKjvbdcJNJkGXY +DoDLKvbduaDySoEh +EOcKjvbdUxhUZkPO +DncLKvbdVYhTzKoO +DnbjjvbdehKvRnQg +DnbkKvbdOhAXyAYa +DncLKvbdxsNiNRag +DoDLKvbdTppoVUgm +EObkKvbdURROuVIN +EOcLKvbdNsTugFVQ +DoCkKvbdrXPlChxq +EPDKjvbdHDkWJajK +DoCkKvbdxnTHxTIc +EPDKjvbdEvZPoljF +EPDKjvbdrzMQTBIO +EPCjjvbdqZPHgQcx +DoCkKvbdVqmxCFMD +DncLKvbdSPsgKGEX +DoCkKvbdzjVPodSt +DoDKjvbdnUtyjiqf +DnbjjvbdIBkydzAD +DoDKjvbdcTDKscjB +EOcKjvbdiHKDYuiu +DncKjvbdBraDUFvr +DoCjjvbdQmYCZOUz +EPCkKvbdySnIlqbH +DnbkKvbdkDLjqGuH +DnbjjvbdVqnYCFMD +DncLKvbdGKeTCglu +DncKjvbdlZSqrxft +DncLKvbdrEEhpNvB +EOcLKvbdrDeJQNvB +EPCkKvbdQmXbYmtz +DoCkKvbdQlxCYnUz +EPCjjvbdEObkLWbd +EPDLKvbdehKuqmqH +EPCkKvbdkCkjpfuH +DncKjvbdRXNcblHc +EPCjjvbdsrqrxydc +EPDKjvbdddoSBvcK +EPCjjvbdADRxJzIp +EPDLKvbdvAcxsPEh +EPDKjvbdSLYfUgLT +DoCkKvbdsrrTYyeD +DoCkKvbdLFegbApu +EPCjjvbdyqOliJwA +EPDKjvbdqTtGrRjt +EPCkKvbdhbObdvqR +EPCjjvbdcScLUEJa +DoDLKvbdRWnDblID +EObkKvbdZLrETnLm +DoDKjvbdiBoDEvpq +DoDKjvbdMpXqVmfs +EPCjjvbdpxngfpcx +DncKjvbdsCGNLfjy +DncKjvbdRjyGVHLT +EPDKjvbdkHflGFmk +DoDKjvbdlhdUQuSB +EPCjjvbdKaLGlbXq +EPCkKvbdVhXvXgYz +EOcLKvbdKyQirztf +EOcLKvbdliDsqVRa +DncKjvbdJutfDdfi +DoDKjvbdEXwksssl +DncLKvbdxxIjCPyk +EObkKvbdKaKgMaxR +EPDKjvbdkCkjpgUg +EOcLKvbdZLqctNlN +EPDKjvbdNddThhjd +EOcKjvbdYlSDsmlN +EPDLKvbdmgExNOGy +DoDKjvbdePErjstS +DnbkKvbdZQleIldq +DncKjvbdpssfrRkU +EOcKjvbdDxYMTtTl +EPCjjvbdySmhmSBg +EPDKjvbdiiehJlxS +EOcLKvbdFkFTDINV +EPCjjvbdVqmxCFMD +DncLKvbdIsZAsMwl +DncKjvbdBraDTfXS +EPDKjvbdmuUykJqf +DnbkKvbdFyVUaEXb +EObjjvbdzROmJJwA +DncKjvbdEYXlUUTl +EPDKjvbdBhjbKhfK +DoCjjvbdJpzEneme +DncLKvbdVwIwuceH +EPDKjvbdhfjDYuiu +EOcLKvbdFpASwHGZ +EPDKjvbdZoOJEdyj +DoDKjvbdqdEiPnWB +DoDKjvbdnBjXYPNu +DoCjjvbdiHKCxuiu +EOcKjvbdGLFTChMu +EOcKjvbdiMEdNtby +DnbkKvbdGdKujBij +DncKjvbdKQydneme +DnbkKvbdziuPocsU +DoDKjvbdmfdxNNgZ +EObjjvbdDxXlUTtM +EObjjvbddePSBwCj +EOcKjvbdNPxQvOHT +DnbkKvbdZHWdAOsJ +EPDLKvbdyqPNIiwA +DoCkKvbdpyPHfqDx +EPDLKvbdUslsekuj +EPCjjvbdiZtfLpnG +DoCkKvbdmSZVZsDi +EPCjjvbdpyOhGpcx +EPDLKvbdzitoodSt +DoDKjvbdVYhUZkOn +EObkKvbdBsAbtGWr +EPDKjvbdvBEYsOdh +EObkKvbdGcjuibKK +DncKjvbdeATqNYKG +DoCjjvbdKNAEZgVB +DncLKvbdqUUHSRjt +EOcLKvbdGcjuibJj +DoDLKvbdnBivxPOV +DnbkKvbdKCjDRKCx +DnbkKvbdrykosAgn +EOcKjvbdUaBqTRRy +EPCjjvbdcSbkTcjB +DoDLKvbdIxTbILpp +DoCjjvbdHDjuibJj +DncKjvbduaDxroFI +DoDKjvbdpedEtWBI +EOcKjvbdXsLaNTnx +EPCjjvbdYORAYVWU +DoCjjvbdYpleIleR +DoDKjvbdCDpAujMf +EPCkKvbdpxoHfpcx +DoCkKvbdUWMPisaR +EPCjjvbdmuUzKjSG +EPDKjvbdkxsRsYgU +EPCkKvbdZxcjNblS +DnbkKvbdbPffckzd +EPDKjvbdUVkpJtBR +DoCkKvbdvlvANEFN +EObkKvbdShyjRAAl +EPDKjvbdxrmhmSCH +DoDKjvbdjvXNcaww +EPDKjvbdkDLjqGuH +EObkKvbdhfibxuiu +EPCjjvbdlqyUyrci +EPDLKvbdFVxopMjF +EOcKjvbdqdEiPnWB +DncKjvbdrXPlChxq +DoCkKvbdxVMeRYkn +EPCjjvbdlhdUQtqa +EObjjvbdRotHKFcw +EObkKvbdwjvcgzzG +EPDLKvbdBhkBjiFj +EObjjvbdlZTSTZGt +DoCkKvbdkIHMFemk +EObjjvbddndrkTsr +DoDLKvbdFVxpQNKF +EPCjjvbdZsiJZETO +EObjjvbdiMFEOUby +DoCkKvbdhlFEOUby +EPCkKvbdrWolDIyR +EObjjvbdmajWwoOV +DoCkKvbdypoMiJwA +DoDKjvbdCDpAvKMf +EPDLKvbdzjVQQDrt +EObjjvbdjlakydfo +EObkKvbdJpyeOeme +DoDLKvbdiHJcYvJu +EOcLKvbdbsDKtEKB +EOcLKvbdrpWOjDVf +EObjjvbdelfWfmKL +EObjjvbdxnSgwriD +DnbkKvbdqlyjZLhJ +EPCkKvbdQdDBPqDr +EPCkKvbdRkYfUfjs +EObjjvbdhtydwSVC +DnbjjvbdWWhwvDdg +DoDLKvbdypnliKXA +DncLKvbdhfibxvKV +DncLKvbdxrmiNSCH +DncKjvbdUaBqSqRy +DoDKjvbdZMSDsmkm +DncLKvbdFjeScHmV +EPDLKvbdQYmAHSrK +DoCkKvbdUVlQJsaR +DoDKjvbdGKdsDHmV +EPCkKvbdkHgLfGNk +EPDKjvbdCIkCLJFj +DoCkKvbdrpWOicVf +DncLKvbdqmZiyMIJ +EObkKvbdNGcQMpUk +EOcLKvbdhfibxuiu +DoCjjvbdjcLjqHVH +EPDLKvbdZxdJnDMS +DncLKvbdHDkViajK +EPDKjvbdhytelRNf +EPDKjvbdZRNFIleR +EObjjvbdNQYRWNgT +EPCjjvbdNdcsiIkE +DoCkKvbdajkfOnDA +EPCjjvbdRNYCZOUz +EPCkKvbdBcpAvKNG +DncKjvbdqTsfqrLU +EPCjjvbdsZlQSaHn +EOcKjvbdqdFIpNvB +DoCjjvbdtbcUwWPP +EObjjvbdEYYMTtTl +EOcLKvbdgGLzNfgA +DoDLKvbdzdynzeZp +DnbjjvbdajlGPNcA +EPCjjvbdEJhJuxKA +EPCjjvbdLLBIWAJy +DnbkKvbdwzIFewdr +DoCkKvbdBvzciEpW +DoDKjvbdaNKasVNH +EPDLKvbdVviXudEg +EPDKjvbdcbSmSAUN +EPDKjvbdqcdiQNua +EPCkKvbdbBVdfPpX +EOcLKvbdrEFIpOVa +DoDKjvbdDigivXjA +DoDKjvbdYSlBMtPY +DoDKjvbdrRtjnLAm +DoDKjvbdKeegbApu +DnbkKvbdHgHZyXxH +EPCkKvbddwzUTrFz +DnbjjvbduDCtwWPP +EOcLKvbdaRfDHsfL +EPCjjvbddeOqbWbj +DncLKvbdOFDsiJLE +EObkKvbdSBceMIyL +EOcLKvbdrylQSaIO +DncLKvbdJcJcQjCx +EPCkKvbdaRfCgsek +EOcKjvbdzitoocsU +DoDKjvbdyzdnSIJI +EObkKvbddndsLTsr +DoDLKvbdcTDKtEKB +EPCkKvbddZyQYYpb +EPDLKvbdCIjakJFj +DncLKvbdLrWlzVQz +EOcKjvbdxrnIlqag +DncLKvbddeOrCWcK +DoCkKvbdRaceLiZL +EPCkKvbddePSCXCj +DoDKjvbdJpzFOeme +DoCkKvbdiMFEOUby +DncKjvbdUQqPVVHm +EOcLKvbdcSbjscjB +DnbjjvbdvPTzpjoU +EPDKjvbdEPDLKvbd +DncKjvbdvBEYsPEh +DnbjjvbdIxTbIMQp +DoDLKvbdZLrETnMN +EPCkKvbdZxdJmbkr +EPCjjvbdIidAKQHE +DncKjvbdrSUjmjaN +DnbkKvbdkaNOmALA +DnbkKvbdiGjCyViu +EPCjjvbdYkrDsmlN +EOcKjvbdypoMhjXA +DoCkKvbdiGjDZViu +DoDLKvbdZxcinClS +DoCjjvbdqUUGrSLU +DnbkKvbdYTLaNUPY +EObkKvbdehKurNpg +EOcKjvbdmRyVZrdJ +EObkKvbdZirhPgBf +EOcKjvbdpyOggQcx +DnbkKvbdfoazwEXh +DnbkKvbdmuUzLJqf +EPDLKvbdYlRdUOLm +DncKjvbdRjyFuGjs +DoDLKvbdQdDAopdS +DoCkKvbdmSYtysEJ +EObjjvbdQdDApRDr +DoDKjvbdyOTHxShc +EPDKjvbdptUHSRkU +EOcKjvbdLGGHaaRV +EOcLKvbdaaWFFopX +DoCjjvbdlBMnmALA +DnbjjvbdZnnIdeZj +DoCjjvbdZMRdUNkm +DoDLKvbdRMxByNtz +EPCkKvbdJYTahMRQ +DncLKvbdpyPIHQdY +DoCkKvbdVBCRTRRy +EOcLKvbdZyEKODLr +EObkKvbdRadEkiYk +EOcKjvbdcyyQXyRC +DnbkKvbdVqnXadkc +EPCkKvbdGKeTDIMu +DnbkKvbdrRtjnKaN +EObkKvbdFVxooljF +DoDKjvbdDoCjjvcE +DnbkKvbddneTLTsr +EPDKjvbdGcjvKCKK +EObjjvbdgPazvdYI +DoDKjvbdSLYfVHKs +DoCkKvbdEPCjkWbd +DnbjjvbdmaivxPOV +EObjjvbdJJdAJogE +DoDKjvbdhkddNtby +DoCkKvbdiCPDEwQq +EOcKjvbdmajXYOmu +DnbkKvbdqYngfqEY +EOcKjvbdTppoUuIN +EPDKjvbdNddThhkE +DncKjvbdDnbkKvbd +DnbjjvbdZRNEiNFR +EPCjjvbdaaWFFopX +EPDLKvbdBhjbKhej +DoCkKvbdfpBzvcwh +DoDKjvbdmSZVZrdJ +EObkKvbdbAueGQQX +EOcKjvbdNQXqWOGs +EPCjjvbdvAcySndh +EOcLKvbdySnImRag +EObkKvbdSxLLmzkY +DnbjjvbdcJMjLGXY +EObkKvbdBsBDUFwS +DoCjjvbdqlyjZLhJ +EPCjjvbdliEURVRa +DoDKjvbdptTgRrLU +DncKjvbdiBoCdwQq +EOcKjvbdEOcLLXDE +EObjjvbdEYYLtTsl +EPDKjvbdVTmTekuj +DncLKvbdLFegbBQu +EPCjjvbdmttzLKRf +EPDLKvbdpfEFTuaI +DncKjvbdiiegjMwr +EObkKvbdxVNEqYlO +DoCjjvbdRWnDblHc +EPCjjvbdaSFbgtGL +DnbkKvbdozmcjwoA +DoDKjvbdPyNAHSrK +DncLKvbdVqnXbEkc +EPCkKvbdFWYpQNJe +EOcLKvbdlYsRsZHU +EOcLKvbdQvmcblID +EObjjvbdRkYetfkT +DoCjjvbdFjdsDINV +EPCjjvbdrafNMGkZ +EPDKjvbdczZQXxqC +EPDLKvbdDwxLtTsl +DoCjjvbdFpASvffZ +DoCjjvbdiMEdOVCy +DoCkKvbdelevfljL +DnbjjvbdaSFcHtFk +DncKjvbdBhkBkIfK +EObjjvbdGKdsDHmV +DncLKvbdhzUekqOG +EOcLKvbdZshiZDrn +DncLKvbdDjIJuwjA +EPCjjvbdpxoHfqEY +EPCjjvbdOAIrsjSA +EPDLKvbdEuyPolie +EPDKjvbdssRrxydc +EPDKjvbdjlakzEgP +DncKjvbdiUydwRuC +DoCkKvbdZMSDtNkm +EPDLKvbdbBVeGQPw +EObkKvbdNHDPlpVL +DoDLKvbdDjHiuxKA +EPDKjvbdatbGwkUI +DnbjjvbdeqaWzkbo +DoDKjvbdvvlBWAuu +EObjjvbdZirhQHBf +EPCkKvbdDncLKvcE +DnbjjvbdehKvSNpg +DncKjvbdVwIwudFH +DoCjjvbdNQYRVmgT +EOcKjvbdNrtWGeUp +DncKjvbdvvlAvAuu +DnbkKvbdjKGHimXr +EObjjvbdhkddNuDZ +EPCkKvbdNddThhkE +EPCjjvbdsPunjDVf +EPDKjvbdxZgfFwdr +DncKjvbdZyDjNblS +EPDKjvbdjcMLQfuH +DncKjvbdwtmFRZMO +DncKjvbdVhXuwgYz +DoCkKvbdVZITyjnn +EPCkKvbdNrtWHEtp +EPCjjvbdMfbomQUk +EObkKvbddwyssqez +EPCkKvbdhfjCyVjV +DoDKjvbdtvOYJpsA +DoDKjvbdiLdcnVCy +EObkKvbdLrWlzUpz +DoCkKvbdSPsgKFdX +EPCjjvbdkNCLyeGo +DncKjvbdCSaCtGWr +DnbjjvbdRkZFtgLT +DoCkKvbdVAaprprZ +DnbjjvbdyXhibQZk +DoCkKvbdsQVnibvG +EPCjjvbduaDyTPFI +DncLKvbdUaCRSpqy +DoDLKvbdnPzYukZC +DoDKjvbdRWnDcMHc +EOcKjvbdxVNFRZLn +EOcKjvbdRkZGUfkT +DnbkKvbdvmWAMdEm +EOcKjvbdmbKXYOmu +EPCkKvbdyXiKCPyk +DnbkKvbdkHgMFfOL +DncKjvbdVYgtZkPO +EPCkKvbdDnbkKwCd +EObkKvbdKfGHaaRV +EPCkKvbdqZOggQdY +EOcLKvbdTlVnaVoJ +DoCkKvbdhanbeWqR +DnbkKvbdypoMiJwA +DnbkKvbduMXvaUBX +DoDKjvbddiirWUzn +EObkKvbdqYoHgQcx +DnbjjvbdFyUuBDwb +DoCkKvbdKCicQjDY +EPDLKvbdezvYeJTw +EPCjjvbdSxKlNzkY +DoDKjvbdQmYByOUz +DnbjjvbdIGgZxxXg +EPDKjvbdqmZjZLgi +DncKjvbdmfeYMmgZ +DncLKvbdGdLVibKK +DoCkKvbdZGvdAOsJ +EObkKvbdjSzhrkJz +EPDLKvbddePRbWcK +EObjjvbdDxXkstUM +DoCjjvbdvlvANDeN +EOcKjvbdrDdiQOWB +DoCkKvbdmajXXoOV +DncKjvbdUtMsekvK +EOcLKvbdxxJKBoyk +EPDKjvbdqYnhGpcx +EObjjvbdatafwkTh +DncLKvbdajkenmcA +DnbjjvbdZQleImEq +EPCjjvbdDncLKwCd +EObjjvbdHELWKBij +EPDLKvbdxrmhmRag +DoCjjvbdwXMBWBVu +EObjjvbdsPvOjCvG +EOcLKvbdssSTZZdc +EPCkKvbddndrkUUS +EOcLKvbdNGbolotk +EObjjvbdZMSDtNlN +EObkKvbdZshiYcsO +DncKjvbdDwxLsstM +EOcLKvbdqZPIGqEY +EOcKjvbdZRNFImFR +EOcKjvbdrDeIonVa +DnbjjvbdYzberKWZ +EObjjvbdegjvRnQg +DoCkKvbduDDUwWOo +EPDKjvbdRotGjGEX +EOcKjvbdKQyeOeme +EPCjjvbdDwxMTtUM +EObjjvbdpedFTvAh +EPDLKvbdFxtuBDxC +DoCjjvbdlqxtzSdJ +DncKjvbdZLrDtOMN +EPCkKvbdGdKujBjK +DoCkKvbdezvYdiTw +DnbjjvbdrEEiQOVa +DncKjvbdOYPVzdOU +DnbjjvbdxwiKCPzL +EObkKvbdRpTgJecw +DoCkKvbdwtmEpxlO +EPDKjvbdqFceTuaI +DncKjvbdsPuoJcWG +DncLKvbdRyjHsCvA +EPCkKvbdyXiJaoyk +EPDLKvbdJvVFcdgJ +DncLKvbdrXPlChxq +EObjjvbdvBEZTOdh +DoDKjvbdqvokcJYq +EOcKjvbdlqxtzSci +EPDKjvbdFkErbglu +DoDKjvbdEPDLKvcE +EObkKvbdijFhJlxS +DoCjjvbdOFDtJJKd +DnbkKvbdyXhiapZk +DncKjvbdEXwlTtTl +DncLKvbdZyEKOCkr +DnbkKvbdqlyjYlIJ +EObkKvbdIGfyxwxH +DnbjjvbdyNrgxTIc +DnbkKvbdeOeSkTsr +EPCjjvbddZyPxZRC +DncLKvbdkDMKpgUg +EPDKjvbdfIKuqnQg +EPCkKvbdhlFENuDZ +DoDLKvbdiBoCdvqR +EPCkKvbdySnImRag +DnbjjvbdIxTahLqQ +DoDKjvbdZnmhddyj +EOcKjvbdgQBzwEXh +EPDLKvbdfILWSNqH +DncKjvbdjcMKqGtg +EObkKvbdKQzEnfNe +EPDKjvbdUQqPVVHm +EObjjvbdREDBPpcr +EObjjvbdnHExMnGy +DnbkKvbdvBDxrndh +DncKjvbdCEPaVimG +DnbkKvbdGBPQxizm +EPDKjvbdLqwMzVQz +DnbkKvbdEPDLLXDE +EPDKjvbdwWkaWBVu +EObkKvbdxrnImSCH +DncKjvbdsrqrxzEc +DnbkKvbdpfDeUWAh +EPDKjvbdjAQHApGj +DoCkKvbdaSGChTfL +DoDKjvbdiHJbxvKV +EPDLKvbdlhdURUqa +EPCjjvbdIwsahMRQ +EObjjvbdGYtuBEYC +DncLKvbdNeEThhkE +EObkKvbdBvzdIePv +EPCjjvbdbAueFpQX +EOcLKvbdjAQGaQGj +EPCjjvbdNHDQNPuL +DncLKvbddoFSkUUS +DncKjvbdACqxJzIp +DnbkKvbdxLWcgzyf +EPCkKvbdTlVnaWPJ +DoCkKvbdCJKbLIfK +DoCkKvbdDwxMUTtM +EPCkKvbdEPDLKwDE +EOcLKvbdTvMQKTaR +EOcLKvbdeXytTrFz +EPDKjvbdNUrrLNAX +DnbkKvbdZjShPgBf +EObjjvbdjAPfaQGj +EPCkKvbdYlRdUNlN +EPDKjvbdzjUoocsU +DoDLKvbdKDKCqJbx +EPCjjvbdQvnECkhD +DnbkKvbdGckVjBij +EObjjvbdXmqAXuVt +EPCjjvbdeFPRavcK +DoDKjvbdEYXlUTsl +DoCjjvbdXrlBNToY +DoDLKvbdrRuLNkAm +DncLKvbdDxXlUTtM +EOcKjvbdwuNEqZLn +EPDKjvbdEOcLLWbd +DoCkKvbdpfDdtVaI +EOcKjvbdmpZyVjyC +EOcKjvbdtSrSxzFD +EObkKvbdsBemLfjy +DoCjjvbdUGznMWue +DncLKvbdbAvEfPpX +DnbjjvbduCcUwVno +DoDLKvbdTppoUuIN +DncKjvbdYqMeImEq +DoCkKvbdrDdhomvB +EObjjvbdgFkzOGgA +EPDKjvbdSwjkmzjx +DoCjjvbdREDBPpcr +EObjjvbdYkrDtNlN +EObjjvbdZisHogCG +DncKjvbdUtMselWK +DoDKjvbdkHfkeemk +DncLKvbdSLYeuHLT +EOcLKvbdeFOrBwCj +EObjjvbdHDjvKCJj +DnbkKvbdkIGkeemk +DoCkKvbdZQmFJMeR +DoCkKvbdqTtGrSKt +DncLKvbdcIljKfWx +DnbjjvbdRjxfUgKs +DnbkKvbdhyuFlROG +EObkKvbdpxoHfpdY +DoDKjvbdhuZdwRtb +DnbkKvbdBdQAvKMf +DoCkKvbdVTlsekuj +EObkKvbdCJLBkIfK +EOcKjvbdmgFYNNgZ +EPDLKvbdxrnImRag +DoCjjvbdbKlGPODA +DoCjjvbdMoxRVmgT +EPDLKvbdKfGIBaRV +DoDKjvbdSCEElJZL +EPCkKvbdmRxtzSdJ +EPDKjvbdjKGIKNXr +DnbkKvbdlhdTptrB +EPDKjvbdBcoaVilf +EPDKjvbdRzKIScWA +EOcKjvbdnHFXmOGy +EPCjjvbdFfJrNhtR +DnbkKvbdzaAPHHCM +DnbkKvbdwXLaWBWV +DoDKjvbdKeegaaQu +EPCjjvbdRotHKFcw +EOcKjvbdnGeXmOGy +DoCjjvbdmIdTqVRa +DncLKvbdfNGWgMik +EPCkKvbdrovPJbuf +EObkKvbdEvYpPljF +DncLKvbdOYPVzdOU +EObjjvbdrzLosAhO +DnbjjvbdyzdnSIJI +EOcLKvbdIsZArmYM +DoDLKvbdvAdZTPEh +DoCkKvbdQvnDcMHc +EObjjvbduMYWaUBX +DncKjvbdUyHszLOn +EPCkKvbdbrbjscia +EObjjvbdTkunaVni +EObkKvbdeATpmYKG +EOcKjvbdqUTfqrLU +EPDLKvbdGYttaDxC +EPDKjvbdRNYByNtz +DncLKvbdADRwizJQ +DncLKvbdKfFgaaQu +EPDKjvbdxZhGGYFS +DncLKvbdwtmFRYlO +EOcLKvbdehLVrNqH +DnbkKvbdKxpirztf +DoCjjvbdZxdKNcLr +DoDLKvbdrbFmMGjy +DoDLKvbdqYnhHQcx +EPCjjvbdGKeTDIMu +EPCjjvbdZRNEhleR +DnbkKvbdfMfXGmJk +DnbjjvbdRjyGVHKs +EPDKjvbdZHXEAOri +EObjjvbdxnTIYTIc +DnbjjvbdTpqOttgm +EOcLKvbdWXIwuceH +EOcLKvbdzROmJKXA +EPCkKvbduCbtwWOo +DncLKvbdJTZBTMwl +EObkKvbdlqyUysDi +DnbjjvbdrpVoJcWG +DoCjjvbdHDjvKCKK +EObkKvbdVwJXvDeH +EPDKjvbdZsiJZDrn +DoCkKvbdhfjDYvJu +DoDLKvbdZyEJmcLr +DnbjjvbdmajXXoOV +DoCkKvbdelewGmKL +DoDLKvbdUtMsfMVj +EOcKjvbdegjuqmpg +DnbkKvbdZMRctNkm +DncKjvbdhlEdOUcZ +DoDLKvbdqAiFAXIE +EObjjvbddBsMrAUN +EPDKjvbdaSGDHtGL +DnbjjvbdbVCGwjtI +DncLKvbdzdzOzeZp +EPDKjvbdKQyePFnF +EPDLKvbdauBgXjtI +EPDLKvbdCSaCtGWr +DnbkKvbdbsCjtEKB +DoDKjvbdCWzdIeQW +EPCkKvbdRbDeLhxk +EObjjvbdOEctJIkE +DoCkKvbdSPtGiedX +DncKjvbddZyPxZRC +DnbjjvbdTukpKUBR +DoCjjvbdpstHRqkU +DncKjvbdNdctIhjd +EOcKjvbdUWMPjTaR +DoCkKvbdLGGHbApu +EObjjvbdmozZWLZC +EObjjvbdULvPAvOi +EPDLKvbdcJMikFvx +DncLKvbdjJfHjMxS +EPCjjvbdqYoIHREY +DoCjjvbdiifHjNXr +EObkKvbdZLrETnMN +DnbkKvbdtSqsYydc +EPDLKvbdCIkCLJFj +DoCkKvbdliDsqUrB +DnbkKvbdNPxQumgT +EPDKjvbdACrYJyiQ +EOcLKvbdYTMBMtOx +DoDLKvbdNGcQNPtk +DncKjvbdtbbtvuno +DncKjvbdZLrEUNlN +DoCkKvbdaogHELzd +DoCjjvbdgFlZmfgA +EPCjjvbdvPTzpkOt +DoCjjvbdjKGHjMxS +EPDLKvbdauBgXjsh +EOcLKvbdiBoCeWpq +EObkKvbdSPsfjGEX +DnbkKvbdzGxlAMeX +DoDLKvbdqFcdtWAh +EPCkKvbdOYOuzcmt +DoCjjvbdDwxLtUTl +DnbkKvbdOTUVgFUp +DnbkKvbdiGibyWJu +EPCjjvbdUyITzLOn +DoCkKvbdbLMFnnDA +DoCjjvbdDwxLsssl +DncLKvbdBiLBjhfK +EPDKjvbdNPwpvOGs +EObkKvbdzQnliKXA +DoCjjvbdeYZssqez +DoCjjvbdeATplxKG +EOcLKvbdRyjIScWA +EPDKjvbddeOqbWcK +EPDLKvbdACrXjZhp +DnbjjvbdmuVZkKSG +EPDKjvbdVqmwbFLc +EPCkKvbdCSaCtFwS +DnbjjvbdVZHszLPO +DoDKjvbdVrNxCFLc +EOcKjvbdegjuqnQg +EPCjjvbdZMSETmlN +EOcKjvbdHDjvKBjK +EPCkKvbdyOTIXsJD +DoDKjvbdnQZyWKxb +DncLKvbdxwhiaozL +DncLKvbdNdcshhkE +EPCjjvbdXnRAYUut +DoDLKvbdNsUWGeUp +DncKjvbdWHwuwfxz +DnbkKvbdRpUGifEX +DnbjjvbdEOcLKwCd +EPDKjvbduaEYsOeI +DnbkKvbdjhHLfFnL +DncLKvbdZoOJEeZj +EPCkKvbdEPCjjvcE +EObjjvbdxUldqYkn +EObkKvbdOEdThiLE +DnbkKvbdjcMKpgVH +EObjjvbdkIGkeenL +DncKjvbdZsiJZDrn +EPCkKvbdxnShXsIc +DoDKjvbdZnmiEdzK +DoCkKvbdVTmUGLvK +EOcLKvbduCcVXVno +EObjjvbdZQleJNFR +EObjjvbdFejRmhsq +EPDLKvbdaMkBruNH +DoCkKvbdNQXqWNgT +DoDKjvbdjuwNcbXw +EPCjjvbdSBceLiYk +DoCjjvbdMgColpVL +DoDLKvbdVZHtZkPO +DoDKjvbduMYXBUAw +EPDKjvbdNeDshiKd +DoDKjvbdTAFJICPE +EObjjvbdJvVFceGi +EObjjvbdNHCpMpUk +DnbkKvbdijGIKNYS +DoDLKvbdDncKkXCd +DncKjvbdkMakyeGo +EObkKvbdjKFgilwr +DoCkKvbdOhAXyAZB +DoCkKvbdUGznMWvF +EOcKjvbdRosfifEX +EPDLKvbdfNFvgMjL +EObkKvbdxxJJbPzL +EPCjjvbdQlxCYmtz +EOcLKvbdgPazwEXh +DoDLKvbdkySrTYft +DoDLKvbdhgKDYuiu +DoDKjvbdYkrETmkm +EObjjvbdNPwpunHT +EOcLKvbdYlRdUNlN +DnbkKvbdZLrDtOLm +EObjjvbdxrnJMrCH +EObjjvbdZnnIeFZj +DoCjjvbdzRPMhiwA +DncKjvbdssSSxyeD +EOcLKvbdjAPgAofj +DncKjvbdRosfifEX +DoDKjvbdEXwktUTl +DnbjjvbdWRmwadkc +EPDLKvbdeEoRavbj +DoDKjvbdXsMBNToY +DnbkKvbdVqmxCFLc +EOcKjvbdkVwOEBww +DoCjjvbdfNGXGmJk +EOcLKvbdmtuZjiqf +DoCkKvbdnPyyWKyC +EObjjvbdJpydoGNe +DnbkKvbdjJfHimYS +DoCkKvbdyXhjBozL +DoCjjvbdkIHLeenL +EOcLKvbdTAEiIBoE +DnbkKvbdvBDxsPFI +DncKjvbdlhdTpuRa +EObjjvbdFfJqmiUR +EPCjjvbderAvzkbo +DncLKvbdwygeexEr +EObjjvbdSBdElJZL +EOcKjvbdySmiMrBg +EPDKjvbdatbGwkTh +DncKjvbdnBivwnmu +EPDKjvbdFxuVAdYC +EPDLKvbdqlzJyMHi +EPDKjvbdZRMdhldq +DoCjjvbdNeDtIhkE +DoCkKvbdfMewGlik +EOcLKvbdhaoDEwQq +DnbjjvbdIwsagkqQ +DncKjvbdkIHMGFnL +DoDLKvbdGdKuibKK +DnbjjvbdTAEiICOd +DncLKvbdNeEThiKd +EObkKvbdYpmEiNFR +EPDLKvbdFkFTDHlu +DoCkKvbdkDLkRHUg +DnbkKvbdyYIjCPyk +DncLKvbdFVyQPmKF +DnbjjvbdZQldhldq +DoDKjvbdVqnYBdkc +EPDKjvbdSKxeuGkT +EPCjjvbdiZuGLqNf +DnbjjvbdJTZArmXl +DnbkKvbdyNrgwrhc +EOcLKvbdrNZiyLgi +DncKjvbdSBdFMJZL +EPCkKvbdfMfWfmKL +EPDLKvbdfMevfljL +DoCjjvbdmIcsqVRa +DoDLKvbdrEEhpOVa +EPDLKvbdZRMeImEq +DoDLKvbdyTNiMrBg +EPCjjvbdsQVnibvG +EOcKjvbdvBDxsPFI +DoDKjvbdqquKnKaN +DncLKvbdqGDeTuaI +EPCkKvbdZdxGzgiC +DoDKjvbdkDLkQftg +DoDKjvbdePEsKtUS +DoDKjvbdUxgtZjoO +DncLKvbdxUmFRYlO +DnbjjvbdwuMeRYkn +DoCkKvbdRWmdClID +EPDLKvbdCDpBWJlf +DncKjvbduaEYrneI +DnbjjvbdfHkVqmpg +EPDKjvbdKxpirzuG +DoDLKvbdZLqdUNkm +DoDLKvbdDwxMTstM +EOcKjvbdrzLosAhO +DnbjjvbdqZPHgQdY +EObkKvbdjggMFfNk +EPCjjvbdZMRcsmkm +EObjjvbdEJgiuxKA +DncLKvbdZtJJZDsO +EObkKvbdRjxeuGkT +DncKjvbdqdFJPmua +DoCkKvbdGYtuAcxC +DoCjjvbdZnmheEzK +DoCkKvbdKWUfEFGi +DoCkKvbdfMfXGmKL +DnbjjvbdjvWmcbXw +DnbkKvbdyzeORhJI +EPDLKvbdpstHRqjt +DoDKjvbdTukpKUAq +DoDKjvbdSPtGjFcw +DncKjvbdWSNxCFMD +DnbkKvbdjlalZdgP +EOcLKvbdkxsRsYgU +EObjjvbdLFfICApu +DoDKjvbdCEQBWKMf +DoDKjvbdbAvFFpQX +DoCkKvbdhgKCxvKV +DncLKvbdjcMLQgVH +EPCkKvbdzitpQDrt +EOcKjvbdNVTRjmAX +EPDKjvbdkxsRsZHU +DoDKjvbdKDJcRKCx +EPDKjvbdFjeScHmV +EPCkKvbdZjTIQHBf +DnbkKvbdlqyUyrdJ +DoDKjvbdehKurORH +EObjjvbdbKlFoODA +DoCkKvbdwtmFQyMO +DoCjjvbdXnRAYUut +DoDKjvbdxsOIlqbH +DncLKvbdyNsIXrhc +DoDLKvbdCEQAvKNG +DncKjvbdRotHJedX +EPDLKvbdVZHsyjoO +DnbjjvbdkCkkRHVH +DoDKjvbdRWmcblHc +DncLKvbdqvokbiYq +DoDLKvbdRkZGVHLT +EObjjvbduCbuXVno +DoCkKvbdEJgivYKA +DoDKjvbdkWWnDbYX +EPDKjvbdnGdxMmfy +DoDLKvbdIHGzYxYH +DoDKjvbduCbtwVno +EObkKvbdqlyjYkgi +EObjjvbdVwIwudEg +DnbjjvbdfRaWzkcP +EPCkKvbdEARhlzXX +DnbkKvbdfMevfmJk +DncLKvbdZyDjNcLr +EOcKjvbdtAHQhABS +DncKjvbdkClKqGtg +DoCkKvbdEObkLXCd +EObjjvbdFkFTDINV +EOcKjvbdEztQdkcJ +DoCkKvbdKaLHNBxR +EPDLKvbdhaoCdvqR +EObkKvbdrJAJdmOe +EObjjvbdrpVnjCuf +EPCkKvbdFjeTCglu +DoCjjvbdqdEiPnWB +EPDKjvbdGFirOJUR +EPCkKvbdJmADzHUa +EPCjjvbdWWhwucdg +DncLKvbdBhkBjiFj +DoCkKvbdSZihSbvA +DncKjvbdZtIiZETO +EPDLKvbdCTAcUGXS +DoDKjvbdVqmxCFLc +DncLKvbdmajWwoOV +EPDKjvbdVhYVxHYz +DoDLKvbddoFSjtTr +DoDLKvbdrzMQTAgn +DoCjjvbdUVlPjUBR +EPDLKvbdtvOXipsA +DoCjjvbdrouoKCvG +EObkKvbdOSsufdtp +EPDLKvbdIGfzZXxH +EObkKvbdbQGgDkzd +DoCkKvbdOFDtJIkE +EPCjjvbdiHJbyWJu +DnbjjvbdLAkHMaxR +EPCkKvbdJTZBTMwl +DncLKvbdSQTfjGEX +EOcLKvbdlrZVZrci +EObjjvbdkyTSTZHU +EPCjjvbdxUleQxkn +EPDLKvbdEKIKWYKA +DoCkKvbdZHWdAPSi +EPDLKvbdxVNFRZMO +EPDLKvbdcSbkTcjB +DoCkKvbdlYsSTZGt +EPDKjvbduaDxroFI +EObkKvbdNHDQMouL +DoDLKvbdxrnJMqbH +DnbjjvbdmfeXmOGy +DoDKjvbdidkGtoAO +DnbjjvbdGYtuBEXb +DnbjjvbdRECaQQdS +DoCkKvbdmajXXnnV +DncKjvbdZMSEUNlN +EPCkKvbdZtJIxcrn +DncLKvbdJpydneme +DncKjvbdVviYWEEg +DoDLKvbdyXhjBoyk +DoCjjvbdbhlikGXY +DnbkKvbdVviXudFH +EPCkKvbdYTMAlsnx +EPCjjvbdxZhFeweS +DoCjjvbdyNsIXriD +DoDKjvbdznoqEcMY +DnbjjvbdauCHXjtI +DncKjvbdIsZAsMwl +EPCkKvbdZMSDtOLm +DnbkKvbdJqZePFme +EPDKjvbdkHfkeenL +DoDLKvbdaNLCStmH +DncLKvbdIwsbHkqQ +EObkKvbdfHjvRnRH +EPCjjvbdlqyVZsDi +EObkKvbdEuxoolie +DoDKjvbdjAPgAofj +EOcLKvbdjcMLRHVH +DncKjvbdjKFgjNXr +EPCkKvbdmIctQuRa +DncLKvbdJpyePGOF +DncLKvbdNGbpMouL +EObkKvbdpfDdsuaI +EPCjjvbdyzeORhIh +DoDKjvbdrDdhpNua +DoCjjvbdFfKRmhtR +EPDLKvbdpfEEsuaI +EPDLKvbdqcdhpOVa +EPCjjvbdVYgsykPO +DoDLKvbdDncLLXCd +EObkKvbduaEYroEh +EOcLKvbdkNBlZeHP +EObjjvbdGcjvJajK +DncLKvbdrpVoJbuf +EObjjvbdEKIJuxKA +DncKjvbdZxcjODMS +DncLKvbdmgFXmOGy +DoCkKvbdUMVoAuoJ +DoDKjvbdqcdiQNua +DnbkKvbdbrcKtDia +DnbkKvbdKfFgbApu +DncKjvbdezvZEiTw +DnbkKvbdlqxtzSdJ +DoCjjvbdOTUWGeUp +EPCkKvbdJXtBhMQp +EOcLKvbdOAJTTjSA +EOcKjvbdfILVrNpg +EOcLKvbdnQZxvLZC +EPDKjvbdyYJJaoyk +DnbjjvbdkMakzFHP +DnbjjvbdjbkjpfuH +DoCkKvbdgGLymfgA +DoDLKvbdJYUBhLpp +EPCjjvbdJSyBTMxM +DnbjjvbdyTNiMrBg +DnbkKvbdqYoHfpdY +EOcKjvbdZyEKNcLr +DoCkKvbdZtIiYcsO +EPCkKvbdZQmFJNFR +DncKjvbdSPsgKFdX +DoCjjvbdvwMAuaWV +EPDKjvbdHfgZxxYH +EObkKvbdrSUjnKaN +DnbjjvbdKWVGEFGi +DncKjvbdsPvOjDWG +EPDKjvbdhzVFkqOG +DoDKjvbdssSSyZdc +DoDKjvbdYkqcsmlN +EPCjjvbdYpldiNFR +DncLKvbdemFwGlik +DoDLKvbdjuvmdBxX +DoDKjvbdCTBDTewS +DoCkKvbdKeehBaQu +EObkKvbdwyhFexEr +DoDKjvbdQvmccMID +DoDKjvbdVviYVceH +EPCkKvbdmRxtyrdJ +EPDLKvbdYqMeJNFR +EPCkKvbdRbDeMIxk +EPCkKvbdcJMjKfXY +DnbkKvbdVwIwvDdg +DnbjjvbdIwtCHkpp +DncLKvbdczYpYYqC +EPCkKvbdKaLGmBxR +DncKjvbduLwwAsaX +DncLKvbdssRrxzEc +EObjjvbdrXQMCiZR +DnbkKvbdZRNFImFR +EOcKjvbdACqwjZhp +DnbjjvbdbKlGOmcA +EObjjvbdGFirOJUR +EPDLKvbdqvokbiYq +EOcKjvbdJmAEZgUa +DoCkKvbdbhljKevx +EPCjjvbdbKlGPNcA +EOcKjvbdRMxByOUz +EOcKjvbdbsDLUEJa +EPCkKvbdRacdlJZL +EObkKvbdmuUyjjSG +EObkKvbdjKFgjNXr +DoDLKvbdlhctQuRa +DoCkKvbdjKFhKMxS +EObjjvbdpedEtVaI +EOcKjvbdIwtBhLpp +DnbjjvbdZHWdAPSi +EOcLKvbdiLdcmuCy +EOcLKvbdjcMLRGuH +EPCjjvbdRbDdkiZL +EOcKjvbdiHJbxvKV +EOcLKvbdaSGDHsfL +DoCkKvbdjKFhJlwr +DncKjvbdiBoCeWqR +EOcLKvbdegjvSNpg +EOcLKvbdrbGMlHLZ +DnbjjvbdBraDUGXS +DncLKvbdFeirOIsq +EPDLKvbdhytekpmf +EOcKjvbdIsYaTMwl +DnbkKvbdrSVLOKaN +DoCkKvbdTIyjRABM +EOcLKvbdsBfNMGkZ +EPDLKvbdUtNTfMWK +EObkKvbdRjxeuGjs +EObkKvbdTqQnuVIN +EObjjvbdhuZdwRuC +EOcLKvbdqTtHSSKt +DncKjvbdmpZxvLZC +DoDLKvbdlAloNALA +EPDKjvbdiLddOUby +EPDLKvbdwuMdpxlO +DncKjvbdNrsvHEuQ +EPCkKvbdyOSgxTJD +EOcLKvbdIryArlxM +EPDLKvbdZHXEAPSi +EPCjjvbdSCDdlIxk +EOcKjvbdySnJNSCH +DnbjjvbdijGIKNXr +EPDKjvbdVAaqTRSZ +EObjjvbdkxsSSxft +EPCkKvbdnUtzKiqf +EPCkKvbdlqxuZsEJ +EObjjvbdEXxMUUUM +EPCkKvbdLFfIBaQu +DnbjjvbdrRtkNjaN +DoCjjvbdNHCpMpUk +EPDKjvbdZjTIQGaf +EPCkKvbdHELWJbKK +DoDKjvbdJbibpjCx +DnbjjvbdJSyArmYM +EPCjjvbdfNFwGmJk +EOcLKvbdYTMBMsnx +DoDLKvbdyTOJMqbH +EObjjvbdEPDLLXDE +DncLKvbdkyTSTZGt +EObjjvbdGBPRYizm +DoCkKvbdVviXvDeH +DncKjvbdsQWOicVf +DoCkKvbdfHjvSNqH +DncKjvbdlZTSSxft +DncKjvbdFVyPolie +EPCjjvbdRXODblID +DoCjjvbdlhcsqVSB +DncLKvbdqYnhGqDx +EObjjvbdFeiqmiUR +DnbjjvbdKefHaaQu +DoDKjvbdRNXbYmtz +EOcKjvbdNwnuzcmt +DoDLKvbdXFxytAPT +EPDLKvbdOTUVfdtp +DoCjjvbdraelkfkZ +DncKjvbdXsMAltPY +DoDKjvbdVUMsfLuj +EPDLKvbdZisIPfbG +EPDKjvbddZxpYYqC +DnbkKvbdzjUopESt +DnbkKvbdVUMtGMVj +DncLKvbduCbtwWOo +EObkKvbdaaVeFpPw +DncKjvbdKNADzGta +DncKjvbdeEoSCXCj +EObjjvbdhancEvqR +EObkKvbdKCicQibx +DncLKvbdijGHjMwr +DoCkKvbdziuPpETU +DoCjjvbdiBnbeXRR +DoCkKvbdZQmEiMdq +EObkKvbdrMyjZMHi +EOcKjvbddoErkTtS +DoCkKvbdtkwvaUAw +EPDLKvbdTlVnaVoJ +DncKjvbdfHjurOQg +DoDLKvbdWWiXvEEg +EPCkKvbdqdEhpNua +EOcLKvbdYSkaMtPY +EPCkKvbdxmsHxTIc +DnbjjvbdJqZdnenF +EPDKjvbdWexzUAOs +EOcLKvbdrovPKCuf +DoDKjvbdkxsSSyGt +Dnbjjvbdzdynzdyp +EOcLKvbdHEKvJbJj +EObjjvbdOStWHEuQ +DnbjjvbdkyTRsZGt +DoCkKvbdcJNKKevx +DoDKjvbdSPtGifDw +EObkKvbdGdLVibKK +DnbjjvbdbBVdfPow +DncKjvbdhtyeXSVC +EPDLKvbdptTfrSLU +DncKjvbdjvXODaww +DncKjvbdqZOgfqDx +DncLKvbdTJZjRABM +EOcLKvbdTpqPVUhN +EOcKjvbdRWmdClID +DoCjjvbdqquLOLAm +DoCjjvbdFfJqmiUR +EOcKjvbddBsMrATm +EOcKjvbdYzcFrKVy +EPCjjvbdsZlQSaIO +EPCkKvbdkHfkeenL +EOcKjvbdiHJcYuiu +DoDKjvbdCEPaVilf +DoCjjvbddBrmSAUN +EPDLKvbdSPtGifDw +EOcLKvbdAMhYrvyx +DncLKvbdTIyjRAAl +EOcLKvbdZtIhyESn +DnbjjvbdVUNUFlWK +EOcKjvbdyXiJaoyk +EPCkKvbdDncLKvbd +EOcLKvbdKWVFcdgJ +EPDKjvbdnQZxvKyC +DncKjvbdjJehJlxS +DoDKjvbdRkYfVHKs +EPDLKvbdirzhsLJz +EObkKvbdVUMtFkuj +DnbjjvbdqwPkbiYq +EPCjjvbdIGfzZYXg +DoCkKvbdlYsRryGt +EObjjvbdpfDeUWBI +EOcKjvbdwtldpxkn +DoCkKvbdzitopETU +DoDKjvbdJuuGEEfi +DnbkKvbdnPzZVkZC +EOcKjvbdmfeYMnGy +EPDKjvbdkIGlGGNk +DncKjvbdezvZEhtX +EPDKjvbdqqtjmkAm +EPDLKvbdzRPNIiwA +DoCkKvbdGKeSbgmV +EPDLKvbdmJETqVSB +EPDKjvbdbVCGwkTh +DoCjjvbdBhkBkIej +EOcLKvbdbBWFFopX +DncLKvbdjggLfGOL +EPCkKvbdzQnmIiwA +EOcLKvbdhbPDFWpq +EPDLKvbdkClLQgVH +EObkKvbdrWpMChyR +DncKjvbdMfbpNPuL +DnbjjvbdNsUVfeVQ +EOcKjvbdaRfDHtFk +DoDKjvbdRbEFLhyL +EOcKjvbdmIcsqUqa +DncKjvbdFVyPpNJe +DoCjjvbdLAjgMaxR +EOcLKvbdypoNJKXA +DncLKvbdEztRFMCi +DoCkKvbduVmwiqTA +EObkKvbdUyHsykPO +DoCkKvbdhzUfLqNf +EPCjjvbdiUzEvqtb +EPDKjvbdpfDeTuaI +EPCkKvbdSwjkmzjx +DncLKvbdjKFgjMwr +EOcLKvbdRWnECkhD +EOcKjvbdZoOJFEyj +DnbkKvbdvvlAvAvV +DncKjvbdZLqcsmlN +DncKjvbdyqOliJwA +EPCkKvbdKWUedEfi +DoCkKvbdePEsLTtS +DnbkKvbdtcDVXVoP +EPCjjvbdKCjCpicY +EObkKvbdZdwfzhJC +EPDLKvbdBhjajiGK +EOcKjvbdJXsahMRQ +DoCkKvbdZxdKNcLr +EPDKjvbdnBjWwoOV +DncLKvbdapGgDkzd +EPDKjvbdjmCLzEgP +EPCkKvbdWRmwbFMD +DnbjjvbdBdQAujMf +EObkKvbdzjUpPcsU +DoDLKvbdwtmFQyMO +DoCkKvbdiMEcmtby +DncKjvbdSBcdkiYk +EPCkKvbdfSBWzkbo +EOcLKvbdxVMeRZLn +DnbjjvbdCSaDUGXS +DncKjvbdZtJIyETO +EPCkKvbdTkvOaVni +DnbkKvbdkySqsYft +EPCjjvbdxsOJMrCH +EPCjjvbdCWzdJEov +EPCjjvbdEARiMywX +EObkKvbdxsNiNSCH +DncLKvbdhbPDFWqR +EObkKvbdVUNUFlVj +EObjjvbdXrlBNToY +EOcLKvbdfHjvSOQg +EPCjjvbdwWkaWAuu +DncKjvbdbKlFnnDA +EPCkKvbdRkZFuGkT +EPCjjvbdMowpvNfs +DncLKvbdmtuZjjSG +DnbkKvbdiCPDEvqR +DncLKvbdbAudfPow +DnbjjvbdFjeSbhMu +DncKjvbdSQTfjGEX +EPDKjvbdbAueGQQX +DnbkKvbdjKGIJmXr +EOcKjvbdIryBTNYM +EPDLKvbdmgEwlnGy +EObjjvbdSBdEkhxk +DoCjjvbdfMfWgMjL +EPDLKvbdEObjjwCd +EObjjvbdhzUekqOG +EObjjvbdWSNwbElD +DoDKjvbdrNZjYkhJ +DoCkKvbdRkYfUgKs +EObjjvbdczYpYZRC +DoCkKvbdzoQQeDMY +DncKjvbdFxuVBEXb +DoDKjvbdSiZjRABM +DoDLKvbdYzbfRivZ +EPDLKvbdlqyUyrdJ +EOcLKvbdtbbuWvOo +DncKjvbdSKxfVGkT +DoCjjvbdEXxLtUTl +EOcLKvbdEPCjkWbd +EPDLKvbdEObkLXDE +EPCkKvbdxKvdHzzG +EPDKjvbdpfDdtVaI +DoCjjvbdbAueGPpX +DoCjjvbdZMRdUOLm +DoDLKvbdwtmFRYkn +DoCjjvbdNPwpumgT +DoCkKvbddijSWUzn +DoDKjvbdJXsbHkqQ +DnbjjvbdxZhFexEr +DoCjjvbdSQUHJedX +EPDLKvbdjmCMZdgP +DncLKvbdMfbomPtk +EOcLKvbdqTtHRqjt +EPCkKvbdqceIpNvB +DncLKvbdFxtuBDxC +EPCkKvbdxVNEpyLn +EOcKjvbdYzbeqivZ +DoCjjvbdNdcsiJLE +DoDKjvbdzjVQQDsU +EObjjvbdvBDySneI +DoDKjvbdBhjbKhej +EPDLKvbdWSOYBdlD +EOcKjvbdOYOuzcnU +EPCkKvbdkCkkQgVH +DnbkKvbdtlXwBTaX +DnbkKvbdTppoVUgm +DoCjjvbdQmXaxnUz +DncKjvbdkHfkfFmk +EPCjjvbdmgEwlnHZ +EPDLKvbdZdxGzhJC +EPCkKvbdmIdTqUqa +DoDKjvbdzGyMAMeX +DnbkKvbdTppnuUhN +DoCjjvbdSLYfUgLT +DnbkKvbdZsiJZETO +EObkKvbdNUrqjmAX +EObjjvbdZyDimcLr +DoCkKvbdRDbaQRDr +DnbjjvbdbAudfPow +EPDKjvbdZjTHpGaf +DoDKjvbdqwQLcIxq +DnbjjvbdZLqdTmkm +DoDKjvbdyXiKCPzL +EObjjvbdssSTYyeD +DoCjjvbdddoRawCj +DoCjjvbdkMbLydfo +DoCjjvbdVTmUFkvK +DoCjjvbdhyuFkpmf +EObkKvbdlYsSSyGt +EPCjjvbdtvNxKQsA +DoDKjvbdRpTgKFdX +EObjjvbdjbkkQgVH +DnbjjvbdaNLCStlg +EOcKjvbdDxYLsssl +DoCjjvbdfNFvgMjL +DncLKvbdrovPJcWG +DnbkKvbddoFSjssr +DnbjjvbdSQTgKGDw +DoCjjvbdQvnEDLhD +EOcKjvbdUxhUZkOn +EPCjjvbdEzsqFMDJ +DoDKjvbdGdKuiaij +EOcKjvbdxrnJMrCH +DnbjjvbdUWMQJtBR +EObkKvbdEKHivYKA +EPDLKvbdYSlAltOx +DnbjjvbdbVCHXjtI +DnbkKvbdtkwwAtBX +DoCjjvbdZQleJNEq +EPDKjvbdEPCjjvcE +EPCjjvbdCSaDUFwS +EPDKjvbdHELViajK +DoDLKvbdijFgjNXr +DncLKvbdjmCLydfo +EObkKvbddZyQXxqC +DnbkKvbdySnImSCH +EPCjjvbdqmZjYkgi +EPCjjvbdGFirNiTq +DoDKjvbdRXNdDMID +DncLKvbdMfcQNQUk +EOcLKvbdZdwfzghb +EPDLKvbdULuoBWOi +EObjjvbdFyVUaDwb +DoCjjvbdNQXpumfs +DnbkKvbdrWolDIxq +EPCkKvbdBvzdIeQW +DnbkKvbdfIKuqmpg +EOcKjvbdnBiwXoNu +EObjjvbdiHKDZWKV +EPCjjvbdZLqdTnLm +DoCjjvbdlYsSTYgU +EPDLKvbdsBfNMHKy +DnbkKvbdjuvmdCXw +EPDLKvbdRDcBQQdS +EOcKjvbdySmhmRbH +EPDLKvbdbrbjscia +EPDLKvbdkxrrTZGt +DoDKjvbdcJMjLGWx +EPDKjvbdKeegbBQu +DnbjjvbdvPTzqKoU +EOcLKvbdIidAKPgE +DoDLKvbdVrOYBdkc +EObjjvbdeFOqawDK +EOcLKvbdZRNEhmFR +EObjjvbdKfFgbBRV +DoCjjvbdiLeEOVCy +EPCkKvbdqmZjYkgi +EPDKjvbdHffyxxXg +EPDKjvbdZLrDsmlN +DnbjjvbdTkuoBVoJ +EOcKjvbduDDUvvOo +DoDKjvbdZdwfzhJC +EPCkKvbdfMfWgNKL +EPCjjvbdRXOECkgc +EOcKjvbdMowpvNfs +DoDLKvbdiBoCeWpq +EObkKvbdNwoVzdOU +EPDLKvbdDoDKjvbd +EObjjvbdLFehCBRV +EOcLKvbduCcVWuno +EOcKjvbdXsMBMtOx +DnbkKvbdcIljKewY +DoDLKvbdEzspdkcJ +DncKjvbdqcdhomua +EPDKjvbdiifHjNXr +EObkKvbdVqnXbFLc +EPCkKvbddwyssrFz +DncKjvbdrSVKmkAm +EPCjjvbdTlVoBVni +EObjjvbdOhAYZAYa +EPCjjvbdRadEkiZL +DoCkKvbdSCEEkiYk +EObjjvbdGZVVAcxC +DnbjjvbdZyEJnDMS +EOcKjvbdzitoodSt +EPDKjvbdXFxzUAPT +DnbjjvbdziuQQESt +EPCjjvbdEARhmZvw +DncLKvbdatbHXkTh +DncKjvbdbsCjtDjB +EPCjjvbdKWVGDdgJ +EPDKjvbdrafNLfkZ +EObkKvbdFkEsChMu +DnbkKvbdVgxWXfxz +EObjjvbdJbjDRJbx +EObkKvbdwyhFfYFS +EPCjjvbdMfbpNPtk +EObkKvbdbsDKtDia +EPCkKvbdkxsRsZHU +DnbkKvbdvAdZTOdh +DncKjvbdptUHRrLU +DncKjvbdvPTzqKnt +DncLKvbdTppoUthN +DnbkKvbdrbFlkgLZ +EPCjjvbdGdKvJajK +EPDLKvbdACqxKZiQ +DoCkKvbdbPffckzd +DoCkKvbdhbOcEvqR +DnbjjvbduCcVWvOo +DoCkKvbdmuUzLKRf +EPCjjvbdbUbHYLUI +DoDKjvbdbKkeoNcA +DoCjjvbdcScKtEJa +DoCjjvbdyzdnRgiI +EPCjjvbdkIGlFfOL +EOcLKvbdzjUpPcsU +DoDLKvbdJuuGEEgJ +DncLKvbdTqROtthN +EOcLKvbdpstGqqkU +EPCkKvbdtSrTYzEc +EPDKjvbdezvYdiUX +DoDKjvbdtTRrxzFD +DoCjjvbdrovOjDWG +DoDKjvbdUQpoUthN +EOcKjvbdKDJbpicY +DnbjjvbdaSGCgtFk +DoDKjvbdGZVVAcwb +DnbjjvbdEvYopNJe +EObjjvbdSQTgKFdX +EPDLKvbdrXPkbhyR +DoDLKvbdhyuGMROG +DoDKjvbdzoQRFClY +EPCkKvbdKWUeceHJ +EObkKvbdZnmiFFZj +DnbjjvbdtcDUwVoP +DoCkKvbdjlakyeHP +EPCkKvbdBvzdIdpW +EPCjjvbddePRawCj +DoDKjvbdmfeYNNfy +DnbkKvbdSLYetgKs +DncKjvbdFejRnJTq +EPDLKvbdIGfzZXwg +DncKjvbdJvVFdFHJ +EOcLKvbdIHHZyYYH +EPDLKvbdyXhiaoyk +DoCjjvbdADSYJzIp +EObjjvbdNPxQunHT +EPCkKvbdxnTHwrhc +DncKjvbdTppnuVHm +EObkKvbdjlbLydfo +DoDLKvbdVBBpsRRy +DnbjjvbdACqwiyhp +DoCkKvbdZRNFJNEq +EOcLKvbdaRfDHtFk +DoCkKvbdKfFgbBQu +DnbjjvbddCTNSAUN +EPDLKvbdTfznMXVe +EOcKjvbdeOeSkUTr +DnbkKvbdqdEiPnVa +EOcLKvbdsBemMHLZ +DoCkKvbdNPxQvOGs +EPDLKvbdOTTufeUp +DncKjvbdraelkfjy +DoDLKvbdZoOIeFZj +DnbkKvbdptTgRrLU +DncKjvbdACrXiyhp +EPDLKvbdIGgZxwxH +DnbjjvbdZnmiEeZj +DnbkKvbdWRmxCFLc +DoDLKvbdyYIiaozL +EPCjjvbdOTTvGeUp +EPCkKvbdNUsSKmAX +EPCjjvbdDigiuwjA +DoDKjvbdIrxaTMxM +DoDKjvbdZyDimcLr +EPCjjvbdjbkkRHVH +DoCjjvbdWXJYVceH +EOcLKvbdlZTSSyHU +DncLKvbdwuNEqYlO +EPCkKvbdrpWPJbuf +DncKjvbdtbcUwWPP +EOcKjvbdGKeScINV +DncKjvbdZeXfzhJC +DncKjvbdUQqPVVIN +DoDKjvbdxsNhmSBg +DoDKjvbdURROuVHm +DncKjvbdRMwbYmtz +DoDKjvbdZRMeImEq +EOcLKvbdWHwvXgYz +EPDLKvbdIwsahMQp +EOcKjvbdfHkVrNqH +EObjjvbddjKSWUzn +DncKjvbdxwiJbQZk +EPCkKvbdMSWlzVQz +DoDLKvbdUQpnuUhN +DncLKvbdiCPCdvqR +DoCjjvbdapHHELzd +DncKjvbdyOSgwrhc +DoCkKvbdDxYLtUTl +EObjjvbdyfyMAMdw +EObjjvbdHffzYxYH +DoDKjvbdYzcFrKWZ +EPDLKvbddZyPwyRC +EPCkKvbdLhalRYAS +DoCkKvbdGYtuBEXb +DoCjjvbdrylQTAgn +DoCjjvbdbBVeGPpX +EPDLKvbdYpmFImFR +DnbkKvbdJcKCpjDY +DncLKvbdYTLaNUPY +DnbkKvbdeOeSjtTr +DoCkKvbdEYYLtTtM +EPCkKvbdrzLoraIO +DoCjjvbdKWVGDdfi +DoDKjvbdBhjbLIfK +EPCkKvbdNQYQvOGs +EOcLKvbduLxXBTaX +EPDKjvbdANHySwZx +DnbkKvbdeOdsLTtS +DnbkKvbdUsmTfMWK +DoDLKvbdcImJkGXY +DncKjvbdsPunibuf +DnbjjvbdIGfyxxYH +DoDLKvbdvBDyTOeI +EPDLKvbdGKeScHmV +EOcLKvbdqFceUVaI +DncLKvbdqdEhpOWB +DoDLKvbdTulPitAq +DnbjjvbdWXIwudEg +EPDLKvbdcTDKtDjB +DoCjjvbdgFlZnHHA +DnbkKvbdwuNEqZLn +EObkKvbdmRxtzSci +EObjjvbdjvXNdCYX +DnbkKvbdqGDdsvBI +DncKjvbdqdEhomvB +DoCjjvbdrpVoKCvG +EObkKvbdWHwvYHYz +EOcKjvbdrykoraHn +EPCkKvbdsPuoKCuf +DncKjvbdZjSgofaf +DncKjvbdNeETiIjd +DoDLKvbddoFSkTsr +EPCkKvbdkWWnECXw +DnbkKvbdZRNFIldq +EObjjvbdzjVQPdTU +DnbjjvbdhytelRNf +EOcKjvbdNPxQunHT +DoCkKvbdmuVZkJrG +EPCjjvbdUVlQJtBR +DoDKjvbdzitpQESt +DoCjjvbdraemLfkZ +DoDLKvbdkNBlZeHP +EObkKvbdrbGNMHLZ +EPDLKvbdkIHLeemk +DoDKjvbdbAvEeopX +DoDKjvbdiGjCxujV +EPCkKvbdqlzJxkgi +DncLKvbdVZITzLPO +EOcLKvbdVZITykOn +EPCjjvbdjuvnDaww +DoDKjvbdkVwOECYX +EObjjvbdcyxpXyRC +DnbjjvbdULvPAuni +DnbkKvbdOTUWGdtp +EOcLKvbdKDJcRKCx +EPCkKvbdBsBDUFwS +DncLKvbdQdDAopcr +EObjjvbdcSbjtEKB +DnbjjvbdlAloNALA +DoCjjvbdADSXizJQ +EOcKjvbdrpWOibvG +EObjjvbdIGfzZXwg +EPDKjvbdptUHRrKt +DncLKvbdZdwfzhIb +DoCkKvbdQZNAGrrK +DoDKjvbduCbtvuoP +EPCjjvbdJuuFceGi +EPCkKvbdgGLymgHA +DnbjjvbdcyyPxYpb +EPCkKvbdhuZeWquC +EObkKvbdyTNiNRbH +DoCjjvbdVAaqSprZ +DncLKvbdoznDkYPA +EPCkKvbdiUydvquC +DncLKvbdhytfMROG +DoCkKvbdmbKXYPNu +DnbkKvbdMpYQunHT +EOcLKvbdHkaznXQk +DoDLKvbdTvMPisaR +DoCkKvbdIryBTNXl +DoDLKvbdZLrDsmkm +DncLKvbdlhctRVRa +EPCjjvbdYkqcsmkm +EPCjjvbdEXwlUTtM +EObkKvbdEvZPoljF +EPDLKvbdZRNEiNFR +DoCkKvbdANIZTXZx +DncKjvbdZoOIeFZj +DoDLKvbdeJirWUzn +DoCjjvbdRWmdDLgc +DoDKjvbdACrYKZhp +EPDKjvbdMowpunHT +EOcKjvbdYTLaNTnx +DnbjjvbdQvnEClHc +DnbkKvbdSBceLhyL +DoDKjvbdjgflGGOL +EOcKjvbdYpldiMdq +DoCjjvbdrovPKDWG +DoDKjvbdZisHofbG +DoDKjvbdEOcLKwDE +EPCjjvbdhfjDZWJu +DncKjvbdhfjCyWJu +EOcLKvbdtSqsYzEc +DoDLKvbdbQHHELzd +DoDKjvbdySnImRbH +EOcLKvbdVqmxCElD +DnbjjvbdNdcsiJKd +EPCkKvbdkNBkzEfo +DnbkKvbdJKEAKPfd +DncLKvbdiifIJlwr +DnbjjvbdhtzEvqtb +EObjjvbdwWlAvBWV +EPDLKvbdlhctQuSB +EOcLKvbdNddUIiKd +EPDKjvbdJSxaTMxM +EPDLKvbdVrOXaeMD +DoDLKvbdGcjvKBjK +DncLKvbdqvpLbiZR +EPCkKvbdjKFgilxS +DncLKvbdDoCjjvbd +DoCjjvbdqqtjnKaN +EOcKjvbdBvzdJEpW +DoCkKvbdcarlrATm +DoDLKvbdQdCaQQdS +DncKjvbdVqnXadkc +DoCjjvbdJvUecdgJ +DnbkKvbdVYhUZkPO +EPDKjvbdxZgfFxEr +EPCjjvbdsPunicWG +DnbkKvbdmSYtyrdJ +DnbjjvbdTulQJsaR +DncKjvbdsrrSxyeD +DnbkKvbdzQnmJJwA +DncKjvbdatafxLTh +EOcLKvbdmfeYNNgZ +EObkKvbdNxOuzcnU +EPDLKvbdDwwksstM +EPDLKvbdxnTIYTIc +EPDKjvbdHgGyyXxH +EOcKjvbdGAnpyJzm +DoCkKvbdUQqPVUhN +DncLKvbdYgWdAOri +DoDLKvbdygZMANFX +EPCkKvbdrJAJdlne +EPDLKvbdZnmheEyj +DnbjjvbdIxUCHkpp +DnbkKvbdjJehJlwr +DoDKjvbdhlEdNuDZ +EOcKjvbdeOeSkTsr +EOcLKvbdVqnYBdlD +DoDKjvbdeATqMwif +EPCjjvbdrXQLbhyR +DnbjjvbdFkErbhMu +DoCjjvbdpxnhHQcx +EOcLKvbdrWpMDIxq +EPDKjvbdVhYWYGxz +DoCkKvbdwzIGFxFS +DoCjjvbdEztQeLbi +DnbjjvbdlZTRrxgU +DncLKvbdSZihSbvA +DnbjjvbdrzLpTAgn +EPCjjvbdNrsugFVQ +DnbjjvbdxUleQxlO +DncKjvbdtkwwBUAw +DoCjjvbdbBVdeoow +EPDKjvbdEObjkXDE +DnbjjvbdhgJbxvKV +EPCkKvbdIwtCHlQp +DoCkKvbdxmsIXrhc +EObkKvbddePSCXDK +EOcKjvbdVrOXbEkc +EOcLKvbdFVyPomJe +DoDLKvbdREDBPqDr +DncLKvbdaNLCStmH +DncLKvbdbAudfQPw +DoDKjvbdRaceLiZL +DoCkKvbdJYUCIMRQ +DnbkKvbdYkrDtOMN +DnbjjvbdFkFTChNV +EOcLKvbdZRMeImFR +EObkKvbdUxgszLOn +EOcKjvbdFjdsChMu +EObkKvbdrafNLgLZ +EPDKjvbdelewGmJk +EOcKjvbdZMRctNlN +DoDLKvbdliEUQtqa +DncKjvbdqUUHSRjt +EPDKjvbduCbtwVno +DoCkKvbdaaVeFoow +EPDLKvbdkClKqGuH +DoDLKvbdCflFgAzc +DoDLKvbdTAEhgbPE +EObkKvbdmtuZjjRf +EObjjvbdKDKCqJbx +DncKjvbdrovOjDVf +DoCkKvbdhtzFWqtb +DncLKvbdEvYpQNKF +EOcLKvbdeFPRavcK +DoDLKvbdhlEcnUby +DoCkKvbdegjvSOQg +DncKjvbdhbPCeWpq +DnbjjvbdsrrTYyeD +DncLKvbdTlWPAvOi +EPCjjvbdwzHeexEr +DncLKvbdmJEUQuRa +DnbkKvbdkIHLeemk +EObkKvbdhtyeXSUb +EOcLKvbdHDkWKCJj +EOcLKvbdRbDdkhyL +EObkKvbdRosfifDw +EPCjjvbdOStVfduQ +DnbkKvbdiHJbxujV +DoCjjvbdsPuoJcWG +EPCkKvbdDxXktTtM +DoCjjvbdHDjujCJj +EObjjvbdUWLoisaR +EPDKjvbdqiAKEmOe +DoDLKvbdxmsIYShc +EPCkKvbdCJKbKiGK +DoDLKvbdRECaQRDr +EPDLKvbdYqNEiNEq +DnbkKvbdiMEcnVCy +DoCkKvbduCbtwVno +DoDKjvbdHbMZdzAD +DnbkKvbdemGXGmKL +DoDLKvbdgQBzwDwh +DoDKjvbdKQzEoGOF +DoDKjvbdWSNwaeMD +EPDKjvbdySmhlqbH +EObkKvbdDxYLtTtM +DnbjjvbdFxuVBEXb +EObjjvbdiBoCdwRR +EPCjjvbdGQATWgGZ +EPCkKvbdYpleJNEq +EOcLKvbdvPTzqKoU +DnbkKvbdZQmEhldq +DncKjvbdLBKgMawq +EPCkKvbdqFceTvAh +EPCjjvbdkIHMFenL +DoDKjvbdehLVqnRH +DoDKjvbdxwhibPyk +DnbkKvbdkMbMZeHP +EOcKjvbdsrrSyZeD +EOcLKvbdMowpunHT +EObjjvbdJqZdnfOF +DoCkKvbdezuxdhtX +DnbjjvbdaaWFFopX +DoCjjvbdqdFJQOVa +EPCjjvbdWWhwudFH +EPDKjvbdhtzFWrUb +EPCkKvbdWSNwaeMD +EObkKvbdcIlikFvx +EPCkKvbdauCGwkTh +EPCkKvbdbhmJkGWx +EPDKjvbdRosgJfEX +DnbkKvbdTvMQJtAq +DnbkKvbdsBfMlGkZ +DnbkKvbdVrNxCElD +DoDLKvbdmpZxukZC +EObkKvbdhlEcnVCy +EOcLKvbdwzIFfYFS +DnbkKvbdZtIhxdSn +DoDLKvbdjgfkfFmk +DoDLKvbdqTtHSRkU +EObjjvbdSCDeLiZL +DoDKjvbdeATplxJf +DnbkKvbdIBkzEzAD +EOcKjvbdFWZQPljF +DoCjjvbdRbDeMJYk +EPDLKvbdDoCkKvcE +DoCkKvbdZjShPfbG +DnbjjvbdNPxQvOGs +EPDLKvbdKyQirztf +DoDLKvbdJutecdfi +DoCjjvbdTppoUuHm +EPDLKvbdjEkGuPAO +DnbkKvbdVTmTekuj +DnbkKvbdZyEJmcMS +EOcKjvbdNddThhjd +DncLKvbdrDdhpNua +EOcKjvbdBiLBkJGK +DoCkKvbdrXPkbhxq +DnbjjvbdZQmEiMdq +DncLKvbdhzUfMROG +EPDKjvbduaEYroEh +DoCjjvbdJYUCHkqQ +DoCjjvbdwzHfFxEr +EPCjjvbdLiBkqYAS +DoDLKvbdxZgfFxEr +DoCkKvbdraemLgLZ +DoDLKvbdxxJJaozL +EPDLKvbdKeehBaRV +DoCkKvbdPIAYZAZB +EObjjvbdBvzdIdov +DoDKjvbdjblKqGuH +DoDKjvbdlhdURVSB +EPDKjvbdqvpMDJZR +DncKjvbdajkeoODA +EOcKjvbdkySqsZHU +DnbjjvbdJqZdnfOF +DncKjvbdZHWdAOsJ +DoCkKvbdaNLCStlg +DoDLKvbdVZHszKnn +DoCjjvbdtvOYJpsA +DoCjjvbdNPxQvNfs +DoDLKvbdZLqctOMN +EObjjvbdvwMAvAvV +DnbkKvbdEuxpPlie +DnbkKvbdAMhYsWyx +DoCkKvbdtumwjQsA +EPCjjvbdVAaprqRy +EObkKvbdlZSqsYgU +EObkKvbdBvzdIdov +DnbjjvbdyOShYTJD +EOcLKvbdZshhxdSn +EPDKjvbdUtMselWK +DoDLKvbdYqNEiMeR +DncLKvbddePSBwDK +DncLKvbdqYnggQcx +DnbkKvbdqceJQOVa +DoDLKvbdtSrTZZeD +EPCjjvbdANHyTWzY +DoDLKvbdcIlikFvx +DoDKjvbdxmsHwsIc +EObkKvbdYzbfRiuy +EPDKjvbdWHwuwfxz +EOcLKvbddndsLTsr +EObkKvbdwXMAuaVu +EPDLKvbdbVBfwjtI +EObjjvbdfMfXHMik +DoCkKvbdOXoVzdOU +DnbkKvbdnGeXlnHZ +EPCjjvbdGGJrOJTq +EPCkKvbdhanbeWqR +EOcLKvbdLhbLpxAS +EPDLKvbdbBVdepPw +EOcKjvbdWSNwadlD +DoCkKvbdaRfChTek +EPCkKvbdmbJvxOmu +DoCkKvbdCSaCsfXS +EObkKvbdbhljKewY +DncLKvbddZxowxpb +DnbjjvbdRDcBQQdS +DnbjjvbdKDJbqKDY +EObkKvbdWRmxCFLc +EPDLKvbdYlSETmkm +EOcLKvbdMIalRYAS +DoDKjvbdCEQAuimG +EPDKjvbdCTAcTewS +EPCjjvbdrRtkOKaN +DnbkKvbdtTRryZeD +DnbjjvbdMgColpVL +EOcKjvbdrDdhomua +EPDKjvbdRbDeMJZL +DnbkKvbdxnSgwrhc +DoDKjvbdVvhxVdFH +DncKjvbdLYqJrzuG +DncLKvbdZsiIyETO +EPDLKvbdieLHUoAO +EPDLKvbdNsUVgEuQ +EPDLKvbdoAKztHcn +DncKjvbdfNFvgNJk +DoCkKvbdqYoHgQcx +DncLKvbddwzUUSFz +DoCkKvbdIHGzZYXg +DncLKvbddZxpXxpb +DnbjjvbdhlFDnUcZ +EPCjjvbdSKxfUfjs +DoCkKvbdbAvFGPpX +EOcLKvbdVhXuwfxz +EPCkKvbddoEsKtTr +DncKjvbdhkeEOVDZ +EObjjvbdNUrqjmAX +EPDLKvbdUWLojTaR +DoDLKvbdWIYVwfxz +DnbkKvbdUtMsekvK +EOcKjvbdRpUHJecw +DoDKjvbdCJKbKiFj +EObjjvbdEuxoomJe +EPCjjvbdLrWlytpz +EObjjvbdMgDPlotk +DncLKvbdNrtWHFVQ +DoCjjvbdZeYGzgiC +EPCkKvbdKaKfmCYR +DoCjjvbdjlakzEfo +EPDKjvbdpeceTvBI +DnbkKvbdKDKCqJcY +DoDKjvbdMowqWNgT +EPDKjvbdRMxCYmtz +EObjjvbdrXQLbiYq +DncLKvbdZnmheFZj +EOcLKvbdiLeENtcZ +DncKjvbdzaAPGfal +EPCkKvbdeATqNYKG +EObjjvbdSCDdlIyL +DoCkKvbdVZHtZjnn +EPCjjvbdZtIhxdTO +EPDKjvbdTlVoAuoJ +EObjjvbdZRNFIleR +DoDLKvbdEPDLKwCd +DnbjjvbdfRaWzkbo +EPDLKvbddneSjstS +EObkKvbduCbtwWOo +EPCkKvbdmoyyWKyC +EPCjjvbdehLVrORH +DoDLKvbduCcUvuno +EObkKvbddZxowxqC +EObkKvbdKQydoFme +EPCkKvbdqqtkOKaN +DoDKjvbduaEYsOeI +EObkKvbdePEsLUTr +DoDLKvbdbsDLTcia +DncLKvbdDwwlTtUM +EOcKjvbdOEdUIhkE +DoDLKvbdtvOXjRTA +EObkKvbdeFPSCXCj +EPCkKvbdqlzJxlIJ +EOcKjvbdUMVoBVni +EPCkKvbdqqtkNkBN +DoDLKvbdiVZeWquC +DncKjvbdZLrDsmlN +EPCkKvbdzitopESt +EOcKjvbdnBjXYPOV +EObkKvbdehKurOQg +DoCjjvbdmJDsptrB +DnbkKvbdaNKbTVNH +DncLKvbdGQASvfey +EOcLKvbdtbcUwVno +EOcKjvbdqUUHSSLU +EOcLKvbdvwLaWBWV +EPCkKvbdRacdlIxk +DnbkKvbdxZgfGXeS +EOcLKvbdVAapsQqy +EOcLKvbdQvnECkhD +EPDKjvbdCWzchdpW +DoCjjvbdpedFUWBI +EPDKjvbdqvpMCiYq +EPDLKvbdEPDKjwCd +DncLKvbdGckWJaij +EObjjvbdgPazwEXh +DoCkKvbdUVlPitBR +DoCjjvbdMSXMzVQz +DnbkKvbdliEUQuRa +DoCkKvbdOStVgFUp +EPCjjvbdUtMtGMVj +DoCkKvbdKWVFdFHJ +EPCkKvbdUxhUZkOn +DnbkKvbdLBKflbYR +EPCkKvbdFkEsCglu +DnbkKvbdKCibpjCx +DnbkKvbdGLEsChNV +DoCjjvbdLGFhCApu +DncLKvbdeXzTsqez +DoCkKvbdxrmhlqbH +EPDLKvbdYlRdTmlN +EPCjjvbdqYnhHRDx +EPDKjvbdWfYzUAOs +EPCkKvbdMJCLpxAS +EObkKvbduCbtwVoP +DoCkKvbdmfdwlmfy +EPCjjvbdVBBprpqy +DoDLKvbdEKHivXjA +DoDLKvbdkWWnECYX +EOcKjvbdqUUHSRkU +DncKjvbdYlRcsnLm +EOcKjvbdelfWfmJk +EPDLKvbdZtIhxcsO +EOcLKvbdGKdrcINV +EPDLKvbdOAIsUKSA +DoCjjvbdXFxytAOs +EPCjjvbdUQpntuIN +EPDLKvbdTvLpJtBR +EPDKjvbdRyihSbvA +DnbjjvbdhyuFlROG +EObkKvbdZxcinClS +EOcKjvbdptTfqrKt +DoDLKvbdURRPUtgm +EObkKvbdaNKbTVNH +EOcLKvbdiZuFlQmf +EPDKjvbdePEsLUTr +EPCjjvbdFxuUaEYC +EPDLKvbdliETpuRa +EObjjvbdjKFhKNYS +DoCkKvbdwzHefXeS +DoDLKvbdFfJqmiUR +EObjjvbdcJMjKewY +EObjjvbdqdFIomua +DnbkKvbdFejRnJTq +DnbjjvbdEzsqFMCi +EPDLKvbdhzUelROG +EPDKjvbdLKaIWAKZ +DoCkKvbdGGJrOIsq +EOcKjvbdVUMtGMWK +EObkKvbdmpZyVkZC +DoDLKvbdJTYaSmXl +EObjjvbdmSZUyrci +EObkKvbdxnSgwsIc +EOcLKvbdhgJcYujV +DoDKjvbdUQpoVVHm +EPDKjvbdKWVFdEgJ +DoCkKvbdWXJXudEg +EObkKvbddxZtURez +DnbkKvbdZRMeJNEq +EOcKjvbdpxoIHRDx +EObkKvbdGGKSOJTq +EOcKjvbdkIHMFenL +EPDLKvbdTqQoUtgm +DnbjjvbdtvNxJpsA +DnbkKvbdFyUtaDxC +DnbkKvbdSLYeuHKs +DncLKvbdxrmhlrBg +DncLKvbdGdLWJajK +EPCkKvbdSPtHJfEX +EPCkKvbdeKJrVtzn +DoCjjvbdWRnXadlD +DncKjvbdhkdcmtby +DoDLKvbdVviYWEFH +EOcKjvbdTAFJICPE +EPCjjvbdCJKbLIej +DoDLKvbdyYJJaoyk +EPDKjvbdNsUVgFUp +EPCjjvbdrDdhomua +DoDKjvbdySnJNRag +EPCjjvbdyNrgxShc +DnbjjvbdADRxKZhp +DnbkKvbdaMkCStmH +EPDKjvbdfIKvRnRH +DnbkKvbdoAKztIEO +DnbjjvbdDjHjVwjA +EObkKvbdjuwODbYX +DoDLKvbdbhmKKfWx +EPDLKvbdKaLGlaxR +DoDLKvbdwzIGFxFS +EPCkKvbdGBOpxizm +EPDKjvbdRXODcMHc +EOcLKvbdYqNFJMdq +EOcKjvbdxUleQxkn +EPDKjvbdZirgpHCG +DncLKvbderAvzkbo +EPCkKvbdTvMPisaR +EPCkKvbdZtJIxdTO +EOcKjvbddePRavcK +DncLKvbdCDpAuimG +EPDLKvbdQdCaPqES +EObjjvbdZyEJmbkr +DoDLKvbdOEcsiIkE +EOcKjvbdrbFlkgLZ +EOcKjvbdRacdlJZL +EPCkKvbdKDKCqKCx +EPDKjvbdrDeIonVa +DncKjvbdOFEThhjd +DncLKvbdLAkHMbXq +EObkKvbdhytekpnG +DncLKvbdrSUkOLAm +DncLKvbdiCOcFWpq +DoCjjvbdrylPsAhO +EOcKjvbdxVNEpyLn +DnbkKvbdmbJvwnnV +DnbkKvbdVAbQsQrZ +EPCkKvbdCTBCtGXS +DncKjvbdTAEiHbPE +EObjjvbdFeiqnJTq +EPDLKvbdDxYMTtTl +DncLKvbdHDkVibKK +DnbkKvbddePSBvcK +DoCjjvbdauCGwkTh +EPDLKvbdWIYWYGxz +DoDLKvbdjcLjqHVH +DoDLKvbdTfznMXWF +DnbkKvbdkVwNcaww +EObjjvbdlYrrSxgU +DncKjvbdaNLCTUmH +EOcKjvbdznoqEblY +DncLKvbdjuwOEBww +DncKjvbdGQATXHGZ +EOcKjvbdiZuFkpmf +EPCjjvbdajlGOnDA +EPDKjvbdJcJbpjCx +DncKjvbdauBgXjtI +EPCkKvbdsZkpTAhO +EPCkKvbdOEdUIhjd +EOcKjvbdNsUWGduQ +DnbkKvbdVTltFlVj +EObjjvbdaNKasVNH +DnbjjvbdhancEvpq +EPDLKvbdZtIiZETO +DoDKjvbdFxuUaEYC +DoDLKvbdLGGHbAqV +DoDKjvbdqceIpOWB +DoDKjvbdvBEZTPEh +DoDKjvbdKefHbBQu +EPDLKvbdlZTSSyHU +DncKjvbdnPyyWKyC +EObjjvbdsZkpTBHn +DoCjjvbdaaVdepPw +EPDKjvbdtkwvaUAw +EObjjvbdEPCkKvbd +EPCjjvbdtkwvaUBX +DncKjvbdRbDeMIyL +EOcKjvbdxwhjBoyk +DoDLKvbdFxuVAcxC +DnbkKvbdxZgfFxFS +EOcKjvbdjhGkefNk +EOcKjvbdEPDKkWcE +EPDLKvbdQvnEDMID +EOcLKvbdqquKmjaN +DoCkKvbdZtJJZESn +EPDLKvbdTkvOaWPJ +DnbjjvbdcSbkUEJa +EObjjvbdQlxBxmtz +EOcLKvbdehKuqmpg +EObjjvbdpyOggQcx +DncLKvbdnVVZjjSG +EPCjjvbdyqOmIiwA +EPDLKvbddZxpXyRC +EObkKvbdRXODcMID +EOcKjvbdnHFXlmfy +EPDKjvbdznpQdcLx +EOcLKvbdqGDdtWBI +EPCjjvbdZoNhddzK +EOcKjvbdqTsgSSLU +EOcLKvbdRzJhTCvA +EOcKjvbdCIjbLIfK +DncKjvbdKQzEoGNe +EOcKjvbdACrXizJQ +EObjjvbdEzspdkcJ +EObkKvbdsZlQTAhO +EPDKjvbdfoazwEYI +DoDLKvbdjAQGaQGj +DoDLKvbdEzsqFMCi +EPDKjvbdyYJJapZk +DnbkKvbdIxUBglRQ +DoCjjvbdtTRsYyeD +EPDKjvbdGKdsDIMu +EOcLKvbdFyVVAcxC +DnbkKvbdZLrDtNkm +EPDLKvbdsrqrxydc +EPDKjvbdrpVnjCvG +DoDLKvbdmSYtzTEJ +EPDKjvbdajkfOmcA +EPDLKvbdssSSxzEc +EObjjvbdDxYMTssl +DnbkKvbdiMFEOVDZ +EOcLKvbdULvOaVni +EPDLKvbdlqyUzSdJ +EObjjvbdZoNheFZj +DncKjvbdcScLTdKB +EObkKvbdGLFTDINV +DncKjvbdcyyQYZRC +EOcKjvbdYqMeIldq +DoCkKvbdOEcshhkE +EObkKvbdirzhrjiz +EOcLKvbdxUmFRYlO +DoDKjvbdkyTRsZGt +DncKjvbdIryAsNYM +EObkKvbduWNxJpsA +DncKjvbdYkqcsnLm +DoDLKvbddZxpXyQb +DncKjvbdRotGiedX +DnbkKvbdKVtedEgJ +EOcKjvbdjvWnEBww +EObkKvbdFyVVAdXb +DoCkKvbdYlSEUNkm +EOcKjvbdcTDLTcia +EPCkKvbdzjUpQESt +DnbkKvbdqUTfqrLU +EPDKjvbdSQUHJfEX +DnbjjvbdiGjDYvKV +EObkKvbdhkdcnVCy +EPCjjvbdJuuFdFHJ +EObjjvbdYkqdTnMN +DoCkKvbdpssgSRkU +EObkKvbdUWLpKUBR +DoDKjvbdZsiJZESn +DnbkKvbdYqMdhmEq +DoCkKvbdjcLkRHVH +DnbkKvbdSPsgKGDw +DoDLKvbdKVtfEEfi +EPCjjvbdiGibyWKV +EPCjjvbdEYYLtUTl +EPCjjvbdFejSOIsq +DncLKvbdRECaQRES +EPCkKvbdEuyQQNKF +EObkKvbdxwhjCPzL +DncLKvbdiLeDnUby +EOcKjvbdEuxpQMie +EOcKjvbdIidAJogE +DoDKjvbdxsNhlqag +EOcKjvbdEzsqFLcJ +EObjjvbdYTMAmToY +DoDLKvbdwuNFQyLn +DoCkKvbdzitpQDrt +EOcLKvbdZtJIxdSn +DncLKvbdqZPHgRDx +EPDLKvbdMoxQvNfs +DncKjvbdmIctQuSB +DoCkKvbdFfKSNiUR +EPDLKvbdhtydvqtb +EObjjvbdxrnJNRag +DnbjjvbddoFTKssr +EPDKjvbdqlyjZLgi +DnbkKvbdyNsHwsJD +EOcLKvbdxnTHwsJD +EObjjvbdUQqOtuIN +DnbkKvbdwtleQyMO +DoDLKvbdrovPKDVf +EOcLKvbdFaPQxizm +EObjjvbdVAapsQqy +EOcKjvbdJvVFdFGi +DnbkKvbduDDVXVno +EObkKvbdZjTHpGbG +EObjjvbdZirgofaf +DncKjvbdAMgySvzY +DoDKjvbdGdLVibKK +DoDKjvbdWRmwbEkc +DncKjvbdXsMAlsnx +DoDLKvbdtcCuXVoP +DoDLKvbdqlyjYlIJ +EPCjjvbdHELVjCKK +DncLKvbdBdQAuilf +DoCjjvbdeFOrCXDK +DoCjjvbdRpTgJfDw +DoCkKvbdLAkHMbXq +EOcLKvbdaRebhUGL +DncLKvbdnQZyWLYb +EObjjvbdXsMBNUOx +DncKjvbdrSVKnKaN +EPCjjvbdAMhZSwZx +EOcLKvbdcScKtEKB +DncKjvbdKaLGlaxR +EOcKjvbdZRMeJNFR +EPCkKvbdwygeewdr +DnbkKvbdhancFXRR +EOcKjvbdOTUVfdtp +EPDLKvbdmbKXYOnV +DoDKjvbdGLFSbhNV +EPDLKvbdMfbomPtk +DnbkKvbdmIcsqVRa +DoDKjvbdwtmFRZLn +DoCkKvbddtAUATMv +DncKjvbdiBoDEvqR +EObkKvbdiHJcYujV +DnbjjvbdiCPDFWqR +EOcKjvbdyTNhlrCH +DoDKjvbdNQYRVmfs +EOcLKvbdFjdrbhMu +DoCjjvbdsrrSyZeD +EPCkKvbdXsMBMsoY +DoDKjvbdjhHLfFmk +EPCkKvbdyOTIYTIc +EOcLKvbdbhmKLGWx +DnbjjvbdxnTHwsIc +EOcLKvbdZoOJEeZj +EOcKjvbdjmBkzEfo +EPDKjvbdYORAXuWU +EPDKjvbdtkxXAsaX +DoDLKvbduaEYsPFI +EPCjjvbdypoNIiwA +DoDKjvbdVBCRTQrZ +DnbjjvbdlrYtyrdJ +DoCjjvbdhzUekpnG +EOcKjvbdcTCjsdJa +EObkKvbdbhlijfWx +EOcLKvbdYTLaMsoY +DnbjjvbdKVtedFGi +EOcLKvbdsPvPJbuf +DncLKvbdNrsvHEuQ +EObkKvbdmfeYMmfy +EPCjjvbdZjTHpHCG +DoDLKvbdpyOhGqDx +DoDKjvbdRkZGVGjs +DnbjjvbdRWnEDMHc +EPCkKvbdjlbMZdfo +DoCkKvbdyqOmIiwA +DoCkKvbddxZstSFz +DnbjjvbdKCibqJbx +DoCjjvbdqqtjnLBN +DnbjjvbdBhjbLJGK +DoDLKvbdrWokbhxq +EOcLKvbdJzpGXdAN +EPDKjvbdRMxCZNtz +DncKjvbdkClLRGuH +DncLKvbdIHHZxxXg +EPDKjvbdZshiYdSn +EPCkKvbdqcdhomvB +DoDKjvbdVTmUFkvK +EObkKvbdZisHogBf +DoCjjvbdRbDdkiYk +DnbkKvbdGGJrOJTq +DncLKvbdeFPRavcK +DnbjjvbdSPtHKGDw +DoDLKvbdJmADyfuB +EPCjjvbdKCibpicY +DoDLKvbdiGicZVjV +DoCkKvbdZLqdUNkm +EPDKjvbdVUNUFkvK +EPCjjvbdemFvflik +EPCkKvbdkxrqrxft +DnbkKvbdRbEElIxk +EPCjjvbdaaVdfQQX +DoDLKvbdySmhlqag +EPCjjvbdrRuKnKaN +DncLKvbdezuyEhtX +DnbkKvbdtbbuWuoP +DnbkKvbdZtIhxcrn +EObkKvbdcyxoxZQb +EOcKjvbdDxYLtTtM +EObjjvbdjggMFfOL +EPCkKvbdGckWJbKK +DnbjjvbdddnqavcK +EPDKjvbdYgWdAPTJ +DnbjjvbdbhlikGXY +DncKjvbdNPxRVmgT +EObkKvbdRpUHKGDw +EObkKvbdmfdwlmgZ +DoDLKvbdBvzdJFPv +DnbjjvbdZHXEAPSi +EPDKjvbdbQHGdLzd +EOcKjvbdCIjbLIej +DnbjjvbdOXnuzdNt +EObkKvbdrSUkNkBN +DoDLKvbdNeDsiJLE +EPCkKvbdiUyeXRtb +EObkKvbdbsDKsdJa +DncLKvbdbrcLTdJa +DncLKvbdSPsgJecw +EObjjvbdKNADzGta +EPDLKvbdFWZPomKF +EPCjjvbdRzKISbvA +EOcKjvbdvmWAMcdm +DncKjvbdwyhGGYEr +EPDLKvbdfHjuqnRH +EPCjjvbdRXOEDLhD +EPCkKvbdyOSgwsJD +DoDLKvbdnCKXYOmu +DnbjjvbdjmCLyeGo +DnbjjvbdTYKlNzjx +DoCjjvbdZisHpGbG +EObjjvbdUWMPisaR +EObjjvbdqFcdtWAh +EOcLKvbdYqNEhleR +DnbjjvbdlZSrSyGt +EPDLKvbdePEsLTsr +DncKjvbdSBcdlJYk +EPDKjvbdePEsLTsr +EPDKjvbdypnmIjXA +DnbjjvbdsQWPKCuf +EOcKjvbdZRNEhldq +EPCjjvbdYpmFImEq +EPCkKvbdKfFhBaRV +DncLKvbdezvZEhtX +DncKjvbdiCObdvpq +DnbjjvbdmJETqUrB +EOcLKvbdfpBzvcxI +DncKjvbdRbDdkhxk +EPCkKvbdmpZyVkZC +EPDLKvbdyNsIXrhc +DnbkKvbdyYJJaoyk +DncKjvbdwWlBVaWV +DoDKjvbdqwPlCiYq +DncLKvbdvvkaVaWV +DncKjvbdcJMjKewY +EObkKvbdbBWFFpPw +EPCjjvbdpyOhGqEY +EPDKjvbdCDpAujNG +EPDLKvbdCSaCtFvr +DoCjjvbdwygfFxEr +EOcLKvbdLFehBaQu +EPCjjvbdssSSxydc +EPCjjvbdHfgZyYYH +DnbkKvbdnBjWxOmu +DnbkKvbdcJNJjewY +EObjjvbdrzLoraIO +EOcKjvbdADRwjZiQ +EPCkKvbdOAJStJrA +DncLKvbdajkennDA +DoCjjvbdmbKWxPNu +EObkKvbdmbKXYPOV +DoCkKvbdKCjCpjDY +EPCkKvbdIjEAJogE +DoCkKvbdkHgLfGOL +DoCkKvbdJcJbqKCx +EPCkKvbdVUMtGMWK +DoDKjvbdNxOuzcmt +EPDLKvbdNQYRVnGs +DnbkKvbdzjUoocrt +DoDKjvbdDnbjjvcE +DoCkKvbdGBPRZJzm +DoCjjvbdtvNwjRTA +EPDLKvbdZQldhleR +DoDLKvbdUtMsfMWK +DnbkKvbdDxYLtTsl +DoCjjvbdmbJwYPOV +DoCjjvbdaNLCTVMg +DoCjjvbdWXIwvEFH +DoDKjvbddZxoxYpb +DncLKvbdijGHimXr +EPDKjvbdZQmEiMdq +DncKjvbdTulPisaR +DncLKvbdnGdxMnGy +EPCkKvbdlYsSSyHU +DoDKjvbdKRZePFme +DoCkKvbdZRNFJNEq +DncLKvbdkMbMZeGo +DoCkKvbdBiLBkIej +EObjjvbdWXIwvEFH +EOcLKvbdGGJqnJTq +DoDLKvbdRWmcblID +EObjjvbdxUleQxlO +DnbkKvbdREDBPpdS +DnbjjvbdiifHjMwr +EObjjvbdZLqctOMN +EPCjjvbdmRxtyrci +DoDLKvbdDxXlTtUM +DoDKjvbdxrmiNSBg +DoDKjvbdTppntthN +EObjjvbdnUtykKRf +DoCkKvbdRNYBxmtz +EOcLKvbdQYmAHTSK +EPCjjvbdZtIhxcsO +DoCjjvbdbsCjsdJa +EPDKjvbdsZkoraIO +DoDKjvbdEJhJvYKA +EOcLKvbdJSxaTMwl +DoDLKvbdANHxrvzY +EObkKvbdcTDKtDia +EPDKjvbdrWolDJZR +DoDKjvbdsQVnicVf +EPCjjvbdYSlAlsoY +EPCkKvbdJYUBhMRQ +DncLKvbdtlXwBUBX +EObjjvbdVrOYBeMD +EPCjjvbdcJNJkGWx +DncLKvbdjKGHjNXr +DncKjvbdRMwayOUz +EObjjvbdzdzOzdyp +DnbjjvbdNHColpVL +DoDLKvbdNddThiLE +EPDKjvbdFjdsCgmV +DnbjjvbdTJZjRABM +DncKjvbdOTTugFVQ +DncLKvbdVYgszLPO +DncKjvbdEARhlzWw +EPDLKvbdUGzmkvvF +DoDLKvbdmRyVZsEJ +EObjjvbdptUHRqjt +EOcKjvbdJpzFOeme +DnbkKvbdMgDPmPtk +EOcKjvbdhzUfMRNf +DoDLKvbdpyPHgQdY +DoCjjvbdZjShQHCG +EOcKjvbdOTTvGeVQ +EPCjjvbdRacdkiZL +DnbjjvbdzitoodTU +EOcKjvbdxxIjCPyk +EObjjvbdunszqLPU +EObjjvbdwjwDgzzG +DnbkKvbdUyHtZkOn +DnbjjvbdqvpMChyR +DnbjjvbdmIctRUrB +EObkKvbdNHCpMpUk +DoDKjvbdeFPSCXCj +EOcKjvbdtvOXjRTA +DncLKvbdZGvdAPSi +DoCjjvbdQcbaPpcr +DoDLKvbdVUMselVj +DnbjjvbdVgxWXgYz +DoDLKvbdjAQHBQHK +EOcKjvbdxxJKCPyk +DnbkKvbdQdDApQcr +DnbjjvbdqrUjmjaN +EOcKjvbdJzofYEAN +DoDLKvbdJvVGEFHJ +EObkKvbdJcJbpjDY +EPDLKvbdhanbdwRR +EObkKvbdiZtfLqOG +DoCjjvbdeOdsLTsr +DoCjjvbdSLZFuGjs +DoCjjvbdqTsfrRjt +EObjjvbdACqxKZhp +EPCjjvbdxZhFexEr +EPDKjvbdiBoCeXRR +DoDKjvbdqFcdtVaI +DnbkKvbdkClLQgVH +DnbkKvbdZQmEhldq +DnbjjvbdQYmAGrqj +DnbjjvbdiLddNuDZ +DoDLKvbdsQWOjDWG +EPDKjvbdVqnXaeLc +DnbjjvbdwNWANEFN +EPCkKvbdsBfNMHKy +EOcLKvbdKQzFOfOF +DoDKjvbdHELVibJj +EPDKjvbdcImJkFwY +DncKjvbdIwtBgkqQ +EObkKvbdANHySvyx +DoDLKvbdpxnhGqEY +EPCjjvbdrafNMHKy +DoDLKvbdSQTfiecw +DnbkKvbdiMEdOUcZ +EObjjvbdQmYCYnUz +EPDLKvbdWIYWXfxz +EPCjjvbdNeEThiLE +EObjjvbdHDkWJaij +DncKjvbdMgDQNPuL +DncKjvbdKWUedFGi +EPDLKvbdJYUCIMRQ +EOcLKvbdRacdkhyL +EPCkKvbdSBdEkhyL +EPCkKvbdMRwMzUpz +EPDLKvbdkxrqsYft +EObkKvbdRkYetgLT +EPCkKvbdNrsvHFVQ +DoCjjvbdqiAKFNOe +DoDKjvbddwystRez +EOcKjvbdrylQTBHn +EPDKjvbdDjHjWXjA +EObjjvbdCIkCLJGK +DnbjjvbdqwPlDJYq +EPCjjvbdnVUzLKRf +EOcLKvbdUxhUZjnn +DnbjjvbdRpUHJecw +DnbjjvbdjhGlFfNk +EObkKvbdJKEAKPgE +DoDLKvbdIidAKPgE +DncKjvbdCSaCtGXS +DoCjjvbdIidAKQHE +DnbkKvbdFjdsCgmV +DoCkKvbdGKeTCglu +EOcKjvbdEzspeMDJ +EOcLKvbdqUTgSSKt +DoCkKvbdnBivwnmu +DncLKvbdJcJcRKCx +EPCjjvbdVwJXucdg +DnbjjvbdKVuGEFHJ +DncLKvbdnVUzKjSG +DoCkKvbdqGDeTuaI +DnbkKvbdLFfICBQu +DnbkKvbdZjTIQGbG +DoDLKvbddBrlrATm +DncKjvbdYNqAXtut +DnbjjvbdURROtuHm +EObjjvbdxmrgxSiD +DoCkKvbdjJfHjMwr +DncLKvbdNwoVzdOU +EPDLKvbdyTNhlqbH +EObkKvbdiMEcnUby +DoDKjvbdJcKCqJbx +EPDLKvbdNrtVgEtp +DncKjvbdjEkGtoAO +DoDKjvbdNVSrKmAX +EOcLKvbdxmsIYTIc +EObkKvbdcTDKtDjB +EPDLKvbdxsOIlrCH +DnbkKvbdbrbjsdKB +DoCjjvbdpfEEtWAh +DoCkKvbdMowqVmfs +EPCkKvbdeATqMxJf +EObkKvbdjJehJmYS +EPDKjvbdxmrhYSiD +EObjjvbdjbkkQgUg +DoCjjvbdYlRdUNlN +DoDLKvbdiHKDZWJu +DoDKjvbdpedEsvAh +DoCkKvbdEuyPomJe +EPCkKvbdhtyeWrVC +DncLKvbdbAvEfQQX +DnbjjvbdTkvPBWPJ +DncKjvbdYlRdUOLm +DncLKvbdCIjajiGK +EPDKjvbdUtNTfLuj +DnbkKvbdKVuFdEgJ +DoDKjvbdfVzwoizs +EPCjjvbdySmiMrBg +EPCkKvbdrpWPJcVf +DoDKjvbdcImJjewY +DoCkKvbdkVvnECYX +DncKjvbdWRnYCEkc +DoDKjvbdCIkBjhfK +EObkKvbdmIdURVSB +DoCkKvbdTppoUuHm +EPDLKvbdUQqOtuHm +DnbkKvbdhgKDYvJu +DnbkKvbdkHgLfFmk +EPDLKvbdCDoaVjMf +EPCkKvbdehKvSNqH +DncKjvbdNeEUJJLE +DncKjvbdlhdTqVSB +EOcKjvbdEuxpPmJe +DncLKvbdqceIpNua +DnbjjvbdnVVZjjRf +DnbkKvbdKDJcRJbx +EObkKvbdnHEwlmgZ +EOcLKvbdFWZQQMjF +DoDKjvbdKWUedEgJ +DoDLKvbdmozZVkZC +DoCkKvbdZdxGzhJC +EObkKvbdGQATWffZ +EPCkKvbdJuuGDeHJ +DoCkKvbdiGibxvJu +DnbkKvbdBraDUGXS +EPDLKvbdiHKDYvKV +DnbjjvbdZxcjODMS +DnbkKvbdnGdwlmgZ +DoDKjvbdkxsRrxgU +EOcKjvbdrzMQTAgn +DncLKvbdjhHLfGOL +DnbjjvbdQvnEClID +DoDKjvbdqdEhomvB +DoDLKvbdGdKvKCJj +DnbjjvbdqvpLbiYq +EObjjvbdsPvOjCuf +DoDLKvbdVqnXbElD +EPDLKvbdeEoRbXCj +DoCkKvbdyYJKBoyk +DoDLKvbdlhdURUqa +EPDLKvbdYkqdTnMN +DoCkKvbdnGdwmNgZ +EObkKvbdGGKSOIsq +EObjjvbdLLAgvAJy +DnbjjvbdajlFnmcA +DoDLKvbdiifHimYS +EPCjjvbdnPzYukYb +EPDLKvbdVYhTyjnn +EOcLKvbdfNFwHNJk +DoCjjvbdbrbkTcia +DncLKvbdRkZGVHLT +EObkKvbdSQUHKFdX +EOcKjvbdSKxeuHKs +DncKjvbdFxuUaDwb +DoCkKvbdaSGDHtFk +EPDKjvbdZyDimcLr +EObjjvbdiGibxvJu +EPCkKvbdDwwktTsl +EPDKjvbdRadEkiZL +EPDKjvbdmgEwlmfy +DncLKvbdaogHDkzd +EOcLKvbdjuvmdCXw +EPDKjvbdqwPlCiYq +DoDKjvbdLBLHNBxR +EObjjvbdeFOrBvbj +EPDKjvbdFyVVAdYC +EPDLKvbdKNADygUa +DncKjvbdbVCGxLUI +DoCkKvbdJSyArmXl +EObkKvbdQvnDbkgc +EObjjvbdrEEiQOWB +EOcKjvbdZMSDtOLm +DoDKjvbdQvmccLhD +EPCkKvbdrzMQTBHn +EPDKjvbdMgCpNQUk +DoDKjvbdmbJwYPOV +EOcKjvbdgGLymgHA +EObjjvbdsrqsYzFD +EPDLKvbdrNZiyLgi +DnbkKvbdiiegimYS +DoDKjvbdqwQLcJYq +EObkKvbdaNLCSuNH +EPCkKvbdnUuZkJqf +EPCjjvbdSCEEkiZL +DncLKvbdVZHszKnn +DnbjjvbdUtMsfLuj +DoDKjvbdxmrgwriD +DoCkKvbdxxJKBpZk +EObkKvbdZMRdUNlN +EObkKvbdbPgHDkzd +EObkKvbdqqtjnLAm +EPDKjvbdURROuUhN +DoDKjvbdCWzdJFPv +DoDLKvbdMSXMytpz +DnbjjvbdqlyjZMHi +DoDKjvbdbsDLUDia +EOcLKvbduVnXiqTA +DoCjjvbdDxYLsssl +DoDLKvbdyqPMiJwA +EObkKvbdeOdsLUUS +EOcKjvbdEuyQQMjF +DoDKjvbdEztQeMDJ +EPCkKvbdGZVVBDxC +DnbkKvbdnGdxNNgZ +DoCkKvbdcIljLFvx +DoCjjvbdYqMdhmEq +EPDLKvbdgKfzbfAE +EPCjjvbdJcKDRJcY +EOcKjvbdOFDtJJLE +DncKjvbdiLdcmuDZ +EObkKvbdrWpLcJZR +DnbkKvbdVAaqTQrZ +DnbjjvbdFkFTChMu +DncKjvbdaaWEepQX +EPCkKvbdpedEsvAh +DncKjvbdjAQGaPfj +DoDKjvbdbUbHXkTh +DoDKjvbdRjyFtfkT +EOcLKvbdOTTvHEtp +DoCjjvbdRkYfVGjs +DncLKvbdzoQRFCkx +DncKjvbdrMzJyMHi +EOcKjvbdULvPBWOi +EOcLKvbdzdynzdzQ +EPCjjvbdtumxJpsA +DoDLKvbdwMvAMcdm +EOcLKvbdqceIonVa +EObjjvbdOEdUIiKd +EObjjvbdHELVjBij +EObjjvbdqcdiPmvB +DoCjjvbdJvVFdFGi +EPDKjvbdWRmwaeLc +EPDKjvbdZxdJnDMS +DoDKjvbdZxdJnDMS +EObjjvbdxUldpxkn +DnbkKvbdSLYetfjs +EPDLKvbdYqMeIldq +DoCjjvbdrMyjYlIJ +EObkKvbddxZtTqez +EPCkKvbdWSNxCElD +DoDKjvbdWWiYVcdg +DoDLKvbdqGDdsvAh +EOcLKvbdhzVFlRNf +EOcKjvbdaNLCSuNH +DnbkKvbdkHgMFfNk +DnbkKvbddePRbXDK +DncKjvbdNVTSKmAX +EObkKvbdhzUfLpmf +EOcKjvbdZMSDtNkm +EPDKjvbdTqROtuHm +DoCkKvbdddnqbXCj +DoDKjvbdliEURVSB +DncKjvbdtvNxKQsA +DnbjjvbdqceJQOVa +EPDKjvbdpyOggQcx +EOcKjvbdtcDUvuoP +EObjjvbdrWpMChxq +EPDKjvbdGYttaEYC +EObjjvbdiifIKNYS +DoCjjvbdZyEJmcMS +EPDLKvbdKQzFOfNe +DoCkKvbdqYoIGpdY +EPDLKvbdxwhibPzL +EPDKjvbdRadElJYk +DoDLKvbdtkwwAtAw +EPCjjvbdDjHjVxKA +EPDKjvbdrzLosBIO +EPCkKvbdBdPaVimG +DoCjjvbdrafMkfjy +EPDKjvbdNGcPmQVL +DoDLKvbdVviYVdFH +EPCjjvbdkVwODaxX +DncKjvbdkMbMZeGo +EOcLKvbdfkGzbfAE +DnbkKvbdpyOhHQdY +DoDKjvbdQdCaPqES +EObjjvbdEKHiuxKA +DnbjjvbdpxnhGpcx +DnbkKvbdkxsSSxgU +DnbjjvbdURQnuUgm +DoDLKvbdTukpJtBR +EPCkKvbdqAiFAWgd +DnbjjvbdgGLymfgA +EOcLKvbdyYIibQZk +DoDLKvbdWHxVxGxz +EPDLKvbdFyVVAdXb +DnbkKvbdrRuKnKaN +DoDLKvbdTpqOttgm +EPDKjvbdLhbLqYAS +DoCjjvbdHELVjCKK +DncLKvbdfSBWzlDP +DoCkKvbdRDcBPpdS +DoDLKvbdsQWPJcVf +EPCkKvbdySmiMrCH +EPCkKvbdbUbHXjtI +DoDLKvbdUtMsfLuj +EPCjjvbdEvZQPmKF +EObjjvbddeOqbXDK +EPDKjvbdkClKqGtg +DncKjvbdqiAJdmPF +EOcLKvbdlrZUyrci +EOcKjvbdbBVeFpPw +EOcLKvbdULvPBWOi +EPCkKvbdcJMjLFwY +DnbjjvbdZtIhxcsO +EPDLKvbdSPtHJfDw +EObkKvbdaNLBsUlg +DoDLKvbdqvpLcIxq +DoCkKvbdpxoIHQcx +EPCkKvbdlZTRsZGt +DoCjjvbderBWzkcP +EPDLKvbdZtJIxdSn +EOcLKvbdmoyyWKxb +DoDLKvbduaDxroEh +EPDLKvbddoErkTtS +DncKjvbdnPzYvKxb +EObjjvbdsZlPsAhO +EPDLKvbdjJfHjMxS +EOcLKvbdbsDLUDia +DncLKvbdMuTSLNAX +EPDLKvbdemGWfmKL +EObkKvbdKefHbBQu +EOcLKvbduVnXjRTA +DnbjjvbdGZVUaEYC +EOcKjvbdkNCMZeGo +EPCkKvbdGKeSbgmV +DoDKjvbdqrVLNjaN +DnbjjvbdEASIlzWw +DnbjjvbdeOdrkUUS +DncKjvbdDjIJvXjA +DoCjjvbdqGEFUWAh +EPCjjvbdQcbaQRES +DnbkKvbdhtydwSUb +DoCkKvbdMuTRjmAX +DnbjjvbdJutfEEfi +EPCjjvbdzGxlAMeX +DncLKvbdIHGyyYYH +DoDLKvbdxUmEqZLn +DnbkKvbdNHCpMotk +DnbjjvbdFyVVAcwb +EPCjjvbdShzJqABM +DnbjjvbdcyxoxZRC +EPCjjvbdqquKnLBN +DncLKvbdcIlikFwY +DoCkKvbdeOeSkTsr +EOcLKvbdYpldhldq +EPDLKvbdQYmAGsRj +DoCkKvbdzGyMAMeX +EPCkKvbdqrVKnLBN +EObkKvbdxUldpxlO +EPCjjvbdfIKuqnRH +EPDKjvbdFWYpQMjF +EPDLKvbdOFEUJJKd +EOcLKvbdHEKvKBij +DoDKjvbdjcMLRHUg +EPCkKvbdWXIwudEg +DncLKvbdgPazvcwh +DnbjjvbdnVUykJrG +EPCjjvbdxxJJbPyk +DncLKvbdjJehKMxS +DncKjvbdEzspdkbi +EPDKjvbdrpVnjDWG +DnbjjvbdVrOYCFLc +DoDLKvbdMfbpMotk +DncKjvbdbhljLGWx +DncKjvbdxrmhlrBg +EOcKjvbdbKlGPODA +DoDKjvbdJvUfEFHJ +EPCkKvbdySnIlqag +EPDKjvbdVAbQrpqy +DnbjjvbdrykosAhO +DnbkKvbdKfFhCBQu +DnbjjvbdEXwktTsl +DoDKjvbdDoDLLXCd +EObkKvbdvwMAvAvV +EObkKvbdXsLaNUOx +DnbkKvbdRDcBQRES +EOcLKvbdZisIPgCG +DoDKjvbdpfEEtWBI +DoDKjvbdfoazwDwh +EPCkKvbdFpASvffZ +EObjjvbdRWnDblHc +DoCkKvbdNxOuzdOU +DncLKvbdYlSDtOLm +EPCjjvbdjbkjqHVH +EPCkKvbdrMzJxkgi +EPDKjvbdCIkBjhfK +EPCkKvbdUslsekvK +EOcKjvbdFejRnJUR +EPDLKvbdNHColotk +EPCjjvbdUxgtZjnn +DoDKjvbdEOcLLXCd +EPCkKvbdkHflGFnL +EPCjjvbdwygfFxEr +DncKjvbdeOdrjtTr +DoDLKvbdqTtHRqjt +EPDLKvbdQwNdCkgc +EPCkKvbdhzVGLpnG +DoDKjvbdxwiKCPzL +EPCkKvbdZirhQGbG +DoCjjvbdqrUkOKaN +DoDLKvbdlrZUysEJ +DoCjjvbdqFdFUWAh +DnbjjvbdyYJKCPzL +DncKjvbdxUldpyMO +EPCjjvbdvAcyTOeI +EObjjvbdLFegaaRV +DncKjvbdemFvgNKL +EOcLKvbdjcLjqHVH +DoDKjvbdRMxCYnUz +EPDLKvbdRjxfUfkT +DoDLKvbdiMEdNuDZ +DoDLKvbdZRMdhmEq +DoDLKvbdqlyiyLgi +EObjjvbdiiehJmYS +DoCjjvbdwuMeRYlO +EPDKjvbdqquKmkAm +EOcKjvbdlrYtysDi +EPDLKvbdliETqUrB +EObjjvbdePErkTsr +DoDLKvbdfHjvRnQg +EObjjvbdRXOECkgc +EObkKvbdMpXqWOGs +DncKjvbdEJhJvYKA +DoCkKvbdVrOYBeMD +EPDKjvbdTkvPBWOi +EOcLKvbdjuvmcbYX +DncKjvbdMfcQMouL +EOcLKvbdMpXpvOHT +DoCjjvbdiLdcmtcZ +DnbkKvbdiHJcZWJu +EPDLKvbdTqQnuUgm +DncKjvbdLGFgbBQu +EPDKjvbdNdctIiLE +EPDKjvbdZxdKODLr +DoDKjvbdSZjITCvA +EPCjjvbdDwxMUTsl +EPCkKvbdySmhmRag +EOcLKvbdSPtHKGDw +DoDKjvbdmIctRUqa +DoDKjvbdaRfChTek +DncLKvbdyNrhXsIc +DncLKvbdJTZBSlxM +DoDKjvbdFeirOIsq +DnbjjvbdJutedFHJ +DnbkKvbdUsltGMWK +DnbkKvbdbhljLGWx +EPCjjvbdirziTLJz +EOcKjvbdnPzYvKyC +DoDKjvbdkDMLRGtg +DncLKvbdyzeNqhIh +EPCjjvbdYTMAmUPY +DoCkKvbdgGMZnHHA +DncLKvbdlZSqsYft +EOcLKvbdZjShQHCG +DnbjjvbdjhGlGGNk +DoDLKvbdkxsRryGt +DoCjjvbdZyDjNbkr +DnbkKvbdNeEUJIjd +EOcKjvbdxxJJbPyk +DoDLKvbdRbDeMIxk +EObjjvbdrDeJPnWB +EPCkKvbdrXPkbiYq +EPCjjvbdeFPRbWbj +DncLKvbdHffyxxYH +EPDKjvbdcyyQYZQb +DoCkKvbdNsTvGeUp +EPCkKvbdfpBzwDxI +EPCjjvbdqTtHRrLU +EPCkKvbdhgJbxvJu +EOcKjvbdkxsRryGt +EPCkKvbdZshhyETO +DnbkKvbdrWpLbiZR +EObkKvbdnHExMmfy +DnbkKvbdbUbGwkTh +DnbkKvbdnHExMnHZ +EObjjvbdZnmiFEyj +EObkKvbdSQUGjGDw +EPCkKvbdqTtGrRkU +EObjjvbdcImKLGXY +EObkKvbdShzJqAAl +DncLKvbdGGJqnIsq +DnbkKvbdehKuqmpg +DncLKvbddeOrCXDK +EOcLKvbdRMwbYmtz +DnbjjvbdgFlZmgHA +DnbkKvbdyOSgxTJD +EOcLKvbdQZNAGsSK +DoCkKvbdRMwayNtz +DncLKvbdezvYeItX +EOcLKvbdVAapsQrZ +DoCjjvbdcImKLFwY +DoDKjvbdTqQnttgm +DnbjjvbdOEdUJIkE +DoDKjvbdeYZssqez +DnbjjvbdZjSgpHCG +DoCkKvbdTvMPisaR +EOcKjvbdZjSgofaf +EPDLKvbdfVzwoizs +DnbjjvbdCSaCsewS +EPDLKvbdFVyPpMjF +EObkKvbddjJrVtzn +DnbjjvbdyOSgxTIc +EOcLKvbdrovPKDVf +DnbjjvbdxZhGGXeS +DncLKvbdbLLeoNcA +EOcKjvbdMfbomQUk +EPDLKvbdaRebhTfL +DoDLKvbdoAKztHcn +EOcLKvbdGckWJbJj +DncLKvbdqmZjYlHi +DncKjvbdZyDinDLr +DoCkKvbdxwhibPzL +DnbkKvbdZoOJFFZj +EPDLKvbdYpmEiMdq +DoCkKvbdiUzFWquC +DnbjjvbdsPvPJcVf +DncKjvbdDwxMTssl +EObkKvbdZQleJNEq +DoDLKvbdWSNxBdkc +DoCjjvbdcSbkTcia +EOcKjvbdqvolChyR +DnbjjvbdqlzJxlHi +DoCjjvbdlrZUzTEJ +EPCkKvbdGdLWJbJj +EObkKvbdzoPqFDLx +DncLKvbdANIYrwZx +EObjjvbdSPsgJfEX +DoCjjvbdbiNJjfWx +DnbkKvbdMfbpNQVL +EObkKvbddePRbXCj +EPDKjvbdShzKRAAl +DoDKjvbdnPyxukYb +EObjjvbdVZITzKoO +EPDLKvbdZyDinDMS +EPCjjvbdYpldhmFR +DoCkKvbdZjTIPfaf +EObjjvbdqdEiPmua +DnbkKvbdRadEkhxk +EPDLKvbdzjVPpDrt +DnbkKvbdaMkBsUlg +DncLKvbdMpXpunGs +DoDKjvbdUxgszLPO +EPCkKvbdiiegilxS +DoCjjvbdEOcKkWbd +EOcLKvbdcTDLUEJa +EPDLKvbdZtIiYcrn +DoDLKvbdmttyjirG +EPDLKvbdGdLVjBjK +DncLKvbdDigjVxKA +EPCkKvbdelfWflik +DoDKjvbdOTUVfdtp +DncKjvbdTlWOaVni +EPDKjvbdrpWOibvG +EPDKjvbdfRaWzlCo +DncKjvbdlrYuZrdJ +DoDKjvbdIsZBSlwl +EPDLKvbdqquLOKaN +DnbjjvbdJmAEZgUa +EPCkKvbdcImJkFvx +DncLKvbdkxrqsYft +EPCkKvbdUWLojTaR +DoDKjvbdnGeXlmfy +DoCkKvbdiMFDmuCy +EPDKjvbdauCHXjtI +DoCjjvbdBsAcUGXS +DoDKjvbdACrYJyhp +DoDKjvbdsZlPsBHn +DoDLKvbdjJegimXr +DoDKjvbdWXIwvDdg +DncKjvbdelewHNJk +EObkKvbdyTOJMrCH +DoCkKvbdNddUIiKd +DoCkKvbdRyjHrbvA +DoCjjvbdiGjCyWKV +DoDLKvbdhlFEOVDZ +EPCkKvbdQdDAoqDr +DoDKjvbdBiLBjhej +EOcKjvbdqlyjZLgi +DncLKvbdtSrTYzFD +DoCkKvbdrMyjYlHi +EObjjvbdhficYuiu +DoDKjvbdfekymgHA +EOcLKvbdiifHjNXr +EObjjvbdIwsaglQp +DoCjjvbdCIkBkIfK +EPDKjvbdaSFcHsfL +DoDLKvbdMgDPlpUk +EPDKjvbdqYnggQdY +DoDKjvbdaSFbgsek +DoCjjvbdiZtekqNf +EPDLKvbdkClKpftg +DoCkKvbduMYWaUAw +EObkKvbdtTSTYydc +DnbjjvbdptUGqrKt +EObjjvbdYlRctNlN +DncKjvbdMgDQNPtk +DncLKvbdILaznXQk +DoDLKvbdiCPDFWpq +DoCkKvbdiGicZWKV +DncKjvbdFjdrbglu +DncLKvbdKWUfDeGi +DoCjjvbdVhXuwgYz +DoDKjvbdhtzFWquC +EPCjjvbdRpTfiedX +DoCkKvbdKVuFdEfi +DoDLKvbdbBWEfPow +DoCkKvbdZyDjODLr +DncLKvbdeAUQmXif +DoCkKvbdIidAKQHE +EPCkKvbdTqROuVIN +DncKjvbdRXODcMID +DoDKjvbdkyTRsZHU +EPCjjvbdxnTIXrhc +EObjjvbdJzofXdAN +EOcKjvbdiBncFWpq +EObkKvbdYORAXuVt +DnbjjvbdiMEdNtby +EPDKjvbdVrOXbFMD +EPCkKvbdAMgxrwZx +DoCkKvbdtbbuXVoP +EPCjjvbdDoCkKwCd +DncLKvbdVBBpsRRy +DoDKjvbdemGWgMik +EObkKvbdeEnqbXDK +EPCjjvbdhanbdvqR +DnbkKvbdmaiwYOnV +DoCjjvbdcJMjLGXY +DnbkKvbdIryArlxM +EPCjjvbdtkwvaUAw +DnbkKvbdxZgefYFS +EPCkKvbderBWzlDP +EPCjjvbdNxPVzdOU +EPDKjvbdaSGDHsek +EOcKjvbdqcdhpOVa +EPCkKvbdxmsHxShc +DoDKjvbdDncKjwDE +DoCjjvbdYpmEhmFR +DncKjvbdaRfCgsfL +EObjjvbdegjurNpg +DnbkKvbdjhHMFenL +EPCjjvbdMfcPmQUk +EOcLKvbdACrYKZhp +DoDKjvbdffMZmgHA +DoCjjvbdaaVeGQQX +EOcKjvbdSCDdkiZL +EOcKjvbdqwPlCiYq +DoDKjvbdajlGPODA +DncLKvbdJYTbHkpp +DncLKvbdtcDVXWOo +EPCjjvbdEXxLtTsl +EPCjjvbdJuteceGi +DnbjjvbdDoCkLWbd +DoCkKvbduCbtwWOo +EPDLKvbdauBgYLTh +EPCjjvbdOXoVzcmt +DoCkKvbdRMxByOUz +DoCjjvbdqYoIGqDx +EPCjjvbdNGbpMpVL +DoCjjvbdJpzFOfNe +EOcKjvbdVAapsQrZ +DncKjvbdpxoIHQcx +EOcKjvbdRaceLiZL +DncLKvbdtcCuWvOo +EObjjvbdbBVeGPow +DnbjjvbdKyRKSzuG +EOcLKvbdFyVUaEYC +EPDKjvbdkCkkRHUg +EObkKvbdKaKfmBxR +DoDLKvbdbUbGwjsh +DnbjjvbdrovOjDVf +EPCjjvbdZsiIyDsO +EObjjvbdRDbaPqDr +EOcKjvbdnBivwnmu +EPCjjvbdYTMBMsoY +DoDLKvbdxKwEHzzG +EPCkKvbdqTsgRqkU +EPDKjvbdfMfWgNKL +DnbkKvbdznpREbkx +DncKjvbdJXtCHlRQ +EPDLKvbdGYuVBEXb +EPDKjvbdZLrEUOMN +EPDKjvbdtcCtvuoP +EObjjvbdXsLaNUPY +EPDLKvbdyOTIYSiD +EObjjvbdsrrTYyeD +EObjjvbdZisHpGaf +DoDLKvbdvOszqLOt +DncLKvbdaMjbSuNH +DncLKvbdYTMBMsoY +EPDKjvbdwzIGFxFS +EPDLKvbdmRyUyrci +DncLKvbdTkvPBWOi +EPCjjvbdNdcsiIjd +EPCkKvbdEzspdkbi +EObkKvbdrovOicVf +DoDKjvbdhbObeXQq +DncKjvbdZnnIeFZj +EObkKvbdRECaPpdS +EOcKjvbdnGeXlnHZ +EPCjjvbdauCGwjsh +EPCjjvbdczYpXyRC +EOcLKvbdDihJuxKA +EOcKjvbdkVwNcbXw +EObjjvbdbsCkTcia +DoCkKvbdfMewHNKL +DoCjjvbdxZgeexEr +EOcLKvbdiBoDEwQq +DnbkKvbdpstHSSKt +EOcKjvbdQvmdClHc +EPDKjvbdIxUBhLqQ +EObkKvbdZtJIyESn +EPCjjvbdtumwjQsA +DoCjjvbdNPxQunHT +EOcLKvbddndrkUTr +EObjjvbdCTBCsevr +EOcKjvbdiUzEwRuC +EPDKjvbdRyigrbvA +DoCjjvbdezvYeJTw +EOcLKvbdVgxVxGxz +DnbjjvbdZeXfzhIb +DncKjvbdxZgfFweS +DoCkKvbdKxqKSztf +DncLKvbdpyOggREY +EPDLKvbdXrlBNUOx +EPCkKvbdqwPkbiZR +EPDLKvbdbsCjscia +DoDKjvbdnGeYMmgZ +EOcLKvbdUsmTfLvK +DnbkKvbdjuwOEBxX +DnbjjvbdTAFJICPE +DncKjvbdEuxoomKF +EPDKjvbdeOdsLTsr +EObkKvbdZshiYdSn +DncKjvbdcTDKscjB +DncLKvbdvwMBWAvV +EOcKjvbdVwIwudFH +EPDLKvbdlZTSSxgU +EOcKjvbdMgColotk +EOcLKvbdZdxGzgiC +DnbjjvbdULuoBWOi +EObjjvbdiCObeXQq +EPDKjvbdNUsRkNAX +DoCjjvbdZxcjOClS +DncLKvbdiUzEwSVC +DoDLKvbdvlvAMceN +DoDLKvbdqcdhpOWB +EObkKvbdCSaDUGWr +DoCkKvbdssSTYydc +DoCkKvbdnGdxMmgZ +DoCkKvbdHELWJbKK +DoDKjvbdKefHbApu +EObkKvbdVqmwbFLc +DoCkKvbdUtNTekuj +EPDLKvbdTlWOaVni +DoCjjvbdDxXkstUM +EPCkKvbdpxoHfqEY +EPDKjvbdmSYtzTEJ +DoCjjvbdddnrCXDK +EPCkKvbdZjTHpGbG +DncLKvbdhzVGLqOG +EPCjjvbdZjSgogBf +EPDLKvbdkDLjqGuH +DncLKvbdxUmFRZLn +EPDLKvbdjhHMFfNk +EPCkKvbdZjTHpHBf +EObkKvbdegkVqnQg +EPDLKvbdGYttaEXb +EObjjvbdZdwfzhJC +DoCkKvbdGQASwHFy +EPDKjvbdkVvnDbXw +EObkKvbdJYTagkqQ +DoCjjvbdMSWlzVQz +DoCjjvbdnGeYMmfy +DoDLKvbdADRxKZiQ +EObkKvbdZLqdTmkm +EPCkKvbdFeirOItR +EPCkKvbdRjyGVGjs +DncLKvbdiMFDnUcZ +EObkKvbdVAaqSpqy +EPCkKvbdULunaVni +DnbkKvbdcImKKevx +DoCjjvbduaDyTPFI +EPDKjvbdKQydoFnF +EPCjjvbdozmcjwoA +DoDLKvbdZLqdUNlN +DoDKjvbdJXsbHkpp +DoCkKvbdelfXHNJk +EObjjvbdeFOqavcK +EPDLKvbdqlyjZMIJ +DoCjjvbdUtMsekvK +DoCkKvbdIxUBhMQp +EOcKjvbdemGWgMjL +DoCkKvbdwuMeQyLn +DncKjvbdkClKpgVH +DoDKjvbdfNFvflik +DncKjvbdhkdcmuCy +DoDLKvbdCJKakIfK +DnbkKvbdSQTgJfEX +DnbkKvbdkIGlGFmk +DoDKjvbdySmhlqbH +DoCjjvbdGdLVibJj +EPCjjvbdSLZGUfkT +EPDLKvbdSKxfVHKs +DoDKjvbdGLFSbhMu +DoCkKvbdqFcdtWAh +EOcLKvbdbVBfxLUI +DoDKjvbdcScKsdKB +DnbkKvbdVwJYWEFH +EPCjjvbdGQASwHFy +DnbjjvbdqUTfrRjt +EPDLKvbdEYYMTtUM +DoDLKvbdfNFwHNKL +EObkKvbdsQWPJbvG +EOcKjvbdIsYaSmYM +EPDKjvbdBdQAuilf +DnbkKvbdrounibvG +EObkKvbdiCPCdvqR +EOcLKvbdBsAbsfXS +DoCjjvbduDDVWuoP +EPCkKvbdbsCjtEJa +EOcKjvbdcTDLTdKB +DoCjjvbdXGYytAPT +DnbjjvbdePFTLTsr +EObkKvbddoErjssr +EPCkKvbdcTDKsdJa +EPDKjvbdjgflGFnL +EObjjvbddeOqbWcK +EObkKvbdACqwizJQ +EObjjvbdHgGyyXxH +DoCjjvbdqlzKZMHi +DnbjjvbdhfibxvJu +DoDKjvbdSCEFLiZL +EPCjjvbdSCEFLiYk +EObkKvbdiLdcmuDZ +EObkKvbdzGyMAMeX +EPDKjvbdVYhTzKoO +EPCkKvbdxrmiNRag +DoDLKvbdjKGHilxS +EOcKjvbdhWyAzzAJ +EPDLKvbdMfcQNQVL +DncKjvbdYkqdTmlN +DoDLKvbdjJfIJlwr +EOcLKvbdZeYGzghb +DncLKvbdJuuFceGi +EPCkKvbdhzUelRNf +DnbkKvbdBhkCKhej +DoDLKvbdhbObeXRR +DnbkKvbdzHZMAMdw +DoDKjvbdZxcjNblS +DoCjjvbdDwwksstM +DoCkKvbdUVkpJtAq +DoDLKvbdaaWEepPw +DncLKvbdGdKvJbKK +DoDLKvbdTulQJtBR +DoDKjvbdqceJPnVa +DnbkKvbdvAdZTOeI +EOcKjvbdVAbRSqRy +EPCkKvbdTqQnuVHm +DoCjjvbdwNWANDeN +DnbkKvbdZtIiYdSn +EPCjjvbdPIAXyAZB +EPCjjvbdZoOIeEzK +DoDLKvbdmJETqUrB +DoCjjvbdOFDtIiKd +DnbkKvbdqvolDIxq +DnbjjvbdmgFYNNfy +DncLKvbdieLHUoAO +EPCkKvbdDnbkLWcE +DoCjjvbdmJETpuSB +DncLKvbdiiegjNXr +EPDKjvbdZQldiMeR +EOcKjvbdZHXEAPTJ +EObkKvbdWHwvXfxz +DnbkKvbdxUleRZLn +DnbkKvbdtvNxKQsA +DoDKjvbdOStWHEuQ +DnbkKvbdsBellHLZ +DoDKjvbdsCFllGkZ +EPDKjvbdjhGlGGOL +DncKjvbdxxJKBoyk +DncKjvbdrXPkcJYq +DoCkKvbduVnXipsA +DoDKjvbdjKGHjMwr +DoDKjvbdbBWEfPpX +EOcKjvbdznoqEcMY +DoCkKvbdySnJMqbH +DoCjjvbdlrZVZsDi +EPDLKvbdKfFgbApu +DoDLKvbdZRMdiNFR +EObjjvbdpeceUWAh +EObkKvbdRotHKFcw +DncKjvbdiZuFkpmf +DoDKjvbdnGdwmNgZ +DoDKjvbdMoxRVnGs +DoDLKvbdiVZeXRtb +EOcKjvbdGAoRYizm +DoDKjvbdJJdAJpGd +DoDKjvbdwMvANEFN +DnbjjvbdaaWFFpQX +DnbjjvbdqlzKZMIJ +EPDLKvbdxnShXsJD +DncLKvbdMfcPlotk +DncLKvbdURRPVUhN +DnbkKvbdHgGzZXxH +EOcLKvbdYlRctOMN +DncKjvbdnHEwlnGy +DoDKjvbdlYsSTZGt +EOcKjvbdZxcjNcLr +EObjjvbdmttyjjSG +EObkKvbdffLynHHA +DnbkKvbdmpZxvLZC +DncLKvbdBhjakJGK +DoCkKvbdpstHSRkU +EPDLKvbdiLddOVCy +EOcKjvbdxUleQyLn +EPCkKvbdTukpKTaR +EOcLKvbdjvXOECYX +EObjjvbdRWnEDLgc +EObkKvbdbhljLGWx +EPCkKvbdZoOJEdyj +DnbkKvbdqrVKnLAm +DoDKjvbdVAbRTRRy +DnbkKvbdhfjDZWKV +EOcLKvbdkWXOECYX +DnbkKvbdYTLaMsnx +EObjjvbdZRNFImFR +DncLKvbdCWzdIdpW +EOcLKvbdpyPIGqDx +DoDLKvbdiCOcFWpq +EPCjjvbdhtzFXSUb +Dnbjjvbdlqxtyrci +DoCkKvbdiZtelROG +EPCkKvbdVUNUFkvK +DnbkKvbdNddUJJLE +DoCkKvbdNdctIhjd +DnbkKvbdcyyQYZQb +EObkKvbdQmYByNtz +DoDLKvbdVrNxBeMD +EPCjjvbdCTBCsevr +DncLKvbdtSrTYyeD +DnbjjvbdRyigsDWA +DncLKvbdJYUBglQp +DoDKjvbdSPsfiedX +DoCkKvbdADRxKZiQ +EPDLKvbdrEFJPmvB +DnbjjvbdvAcyTOdh +EOcKjvbdaMjasUmH +DoDKjvbdZjSgogBf +DnbkKvbdnGeXmOGy +DnbjjvbdMgComPuL +EPCkKvbdxKvcgzzG +DncKjvbdwtldpyMO +DoDKjvbdbhlikGXY +EPCkKvbdpyPIHREY +DoDLKvbdkClLRHUg +EPDKjvbdqFdFUWBI +EOcLKvbdkxrqrxgU +DoDLKvbdTvLoitAq +DoCjjvbdJuuFcdfi +EPCjjvbdrykpTAhO +EPCjjvbdiZuFkqNf +EObjjvbdEuxpQNKF +EPCjjvbdGGKSOJUR +EPCkKvbdcyxowxqC +DnbjjvbdjhGkeemk +EPDKjvbdijGIJmYS +DnbkKvbdypnliKXA +EOcKjvbdRadFLhyL +EPCjjvbdxwiKCPyk +DoCkKvbdfILVqnQg +DoDLKvbdkNCLzEgP +DoCkKvbdGKdrbglu +DnbkKvbdJcJcRJcY +DoDLKvbdIwsahMRQ +DnbkKvbdNddUIhjd +EPCkKvbdJuuGDdgJ +EPDLKvbdjKGHjMwr +EObkKvbdGdKvKCJj +DncKjvbdNUrqkNAX +DoDLKvbdTqQoVVHm +DoDKjvbdNddTiIkE +EPCkKvbduaEZTPFI +DnbjjvbdFWYopMie +EObjjvbdyXhiaozL +EPCjjvbdhaoDFWpq +DncKjvbdJJdAKQHE +DoDKjvbdegkVrOQg +DnbjjvbdwuMdqYlO +EPCkKvbdLKaHvAJy +DoDKjvbdRbEFLiYk +DoDKjvbdSxLMNzjx +DnbkKvbdGKdsChMu +DncKjvbdACrYJzJQ +DoCjjvbdbUafwkUI +DncKjvbdzjVPpDrt +DnbjjvbdFfKSOJTq +EPDKjvbdHffyyXxH +EOcLKvbdRkZFtgLT +EOcKjvbdXsMAmToY +EOcLKvbdNPwqWNfs +DoCjjvbdEuxpPljF +DncLKvbdjJfIJlxS +DoCjjvbdhgJbxuiu +EPCkKvbdrDdhpOWB +DnbkKvbdwWlBWAuu +EObjjvbdySmiMrCH +EPCjjvbduWOXjRTA +DncLKvbdRDbaPqES +EPCkKvbdjEkHVPAO +EPDLKvbddiiqvUzn +EPDKjvbdyYJKCPyk +DncKjvbdNeEThiKd +DncKjvbdrbGMlGkZ +EOcKjvbdOTTvHEuQ +EObjjvbdFyVUaEYC +EPCkKvbdbiMikFwY +EPDKjvbduaDxsPFI +DncLKvbdozmckYPA +DoDLKvbdVYgsykPO +DoCjjvbdQvnDbkgc +DncKjvbdZLrDtNkm +DoDKjvbdHfgZyYXg +DoDKjvbdauCGwkUI +DoDKjvbdmJDsqVSB +EOcKjvbdhgJbyWKV +EPCjjvbdrouoKDWG +DoDKjvbdQmYCYnUz +DoDLKvbdfHkVqmpg +DoCjjvbdZjShPfaf +DoCkKvbdIGfzYxYH +EPDKjvbdZRMeJNFR +EPCjjvbdRpTgKFdX +EPCkKvbdEYYMUUUM +DncLKvbdwuMdqZLn +EOcKjvbdmuVZkJqf +DncKjvbdhgJbyWJu +DnbjjvbdKVuFcdfi +EPCkKvbdRadElIxk +EPCkKvbdYlSDsmkm +DoDKjvbdhlFEOVDZ +DoCjjvbdIsZBSlwl +DoDKjvbdLAkGmCXq +DoDLKvbdqwQMCiYq +EPDKjvbdURROtuIN +DoCjjvbdpxoHgREY +DncKjvbdwXLaWAuu +EObjjvbdrpWPJcWG +EPDLKvbdmozYvLYb +EPCkKvbdMowpunGs +DnbkKvbdANHySvzY +DncLKvbdZyDinDLr +DoCjjvbdziuPpESt +EPDKjvbdiVZeXRuC +EPDLKvbdDncKkWbd +EOcLKvbdFVxopNJe +DncLKvbdACqxJzIp +DncKjvbdaMkCTUlg +DoCkKvbdhyuGMQnG +EObjjvbdbBWFFpPw +EObkKvbdTAEiICPE +DoDKjvbdbUagXjtI +DoDLKvbdGZUuAcwb +DoDKjvbdnGdwlmgZ +DoDLKvbdVBCRSpqy +DnbjjvbdfIKvRnRH +EObkKvbdaRebgsek +DnbjjvbdNVSrLNAX +EPDKjvbdrJAKEmPF +DnbkKvbdBdQBWKNG +DoCjjvbdePFTLUUS +EPCkKvbdRDcAoqDr +DncLKvbdrNZiyLhJ +DoCkKvbdLqwNZtpz +EPDLKvbdlqxtzTEJ +DnbkKvbdrRtjmkBN +EPCkKvbdZRMeJNEq +DnbkKvbdZsiJYdTO +EObjjvbdUtMtGLvK +EOcLKvbdnCJwYOnV +DncLKvbdUMWPAuni +EOcKjvbdJcJbpjDY +DoCkKvbdcImKLGXY +EObkKvbdYSlAmTnx +DncLKvbdCTBCtFvr +EObjjvbdqlyjYlIJ +DoCkKvbdmSZUzSci +DoDKjvbdjEjfuPAO +EPCjjvbdWfYzUAPT +DnbjjvbdzROmJJwA +EObjjvbdnQZyVjyC +DncKjvbdjAQGaPgK +EObkKvbdtTSTZZeD +DoDLKvbdZLrETnLm +DncKjvbdCDpAujNG +DncKjvbdUyHsykOn +EPDLKvbdeXystRez +EPCjjvbdlrZUyrci +EPDKjvbdwjvcgzzG +EPDKjvbdnHExNOGy +EOcKjvbdZLqdTmlN +EPCkKvbdEuxopMjF +EObjjvbdJYTaglRQ +EPCjjvbdrWpLbiZR +EPCjjvbdNxOuzcnU +DoDLKvbdijFhKNXr +DnbkKvbdKWVGEFHJ +DnbkKvbdKCicQjCx +DoCkKvbdcScLTdKB +EOcKjvbdKWUecdfi +DoCjjvbdiLeDmuDZ +DncKjvbdySnJNSCH +EPDLKvbdZshhyDrn +DnbkKvbdssSSxydc +EOcLKvbdqrUjnLBN +EPDKjvbdGdLWKCKK +EObjjvbdsQWPJbuf +DoDLKvbdJcKDRJcY +DoCjjvbdZoNiEeZj +DnbkKvbdGFjSOJTq +EPDLKvbdxxJKBozL +DoDKjvbdBraDUGXS +EPDKjvbdJbjCpicY +DoCjjvbdVqmwbEkc +EPDKjvbdijFhKMwr +EPDLKvbdrSVLNkBN +DoCkKvbdiUzEvquC +EPCjjvbdWIYVxGxz +DnbkKvbdZoOIdeZj +DncLKvbdZRMeJNEq +EObjjvbdZMSDtOMN +DnbjjvbdRWnDcLgc +DoDLKvbdmRxtzTDi +EOcKjvbdJmADygUa +EOcKjvbdxUmFQyMO +EOcLKvbdOTUWHEtp +DoDLKvbdZRNFJMeR +EOcLKvbdxmsHxShc +EPCkKvbdUxhTykPO +DoCkKvbdelfWfljL +EPDLKvbdFejSOJTq +EPCkKvbdKefIBaRV +DncKjvbddeOqbXDK +EOcKjvbdhlEcnUcZ +DoCkKvbdZtJJZETO +DnbjjvbdSPtHJfDw +DncLKvbdOFDtIhkE +EPDLKvbdFyVVAcwb +DoCjjvbdqTtGqqjt +EOcLKvbdyTOIlrCH +DnbjjvbdACrYKZiQ +DoDLKvbdvmWAMceN +DoDKjvbdLBLHNCYR +EPCkKvbdIxUCHlQp +EPDLKvbdQmXayNtz +DoCjjvbdKRZdoFme +DncLKvbdZoNiEdyj +DoDKjvbdqqtkOLBN +EPCkKvbdiZuFkpmf +DncKjvbdEPCjkXCd +DoDKjvbdbVBgXjsh +DoCjjvbdmRyUzSdJ +EObjjvbdMJCLpxAS +DoCjjvbdwWlBWAvV +EPDKjvbdNHCpMouL +DncKjvbdEOcLKwDE +DoCjjvbdwjvcgzzG +DnbkKvbdNGbpNPtk +DoDLKvbdZGwEAOri +EObjjvbdaRfDITfL +DoDKjvbdVvhwudEg +EPCjjvbdHgGyxwwg +DncKjvbdcJMikFwY +EObjjvbdwMvAMdEm +EOcKjvbduMYXBUAw +EPDLKvbdpfDeTuaI +DoDKjvbdssSSxzEc +DnbjjvbdjblLRHUg +EOcLKvbdVwIxWDeH +EPCkKvbdLGFgaaQu +EPDKjvbdBiKakIfK +DoDLKvbdEOcKjwDE +EOcKjvbddijRvUzn +DoCjjvbdmaivxPOV +DnbkKvbdMfcQNPuL +DncLKvbdZtIiZDsO +DoDLKvbdhlEcmuDZ +EOcKjvbdIGfzYxYH +DncLKvbdICLydzAD +EPDLKvbdMfcPmPuL +DnbjjvbdrRuKmjaN +DnbkKvbdbsDKscjB +DoCkKvbdhkddNtcZ +EOcLKvbdNQXqVnGs +DoDLKvbdrEFIonVa +DoCjjvbdQvnDcMID +EPCjjvbdjlalZeGo +EPCkKvbdjJfIKNYS +EObjjvbdREDBPqES +EPCjjvbdiZtfMRNf +DoDKjvbdADRxJyiQ +DncLKvbdYkqcsnMN +DncLKvbdZshiZDsO +DoDLKvbdRNXayNtz +DncLKvbdqcdiPmvB +EPCkKvbdrNZixlHi +EPCjjvbdwtmFRYlO +EObkKvbdJTZBTNXl +EOcLKvbdWRnXadkc +DoDLKvbdvwMBVaVu +DoDKjvbdlZSrTYgU +EPDLKvbdQcbaQRDr +DoCjjvbdhuZdvrUb +DnbkKvbdZxdKOClS +DncKjvbdJzoexEAN +EOcLKvbdQvmdDLhD +DncLKvbdunszpkPU +EOcKjvbdiZuGMQnG +DncKjvbdVZIUZkOn +DoDLKvbdkxsRsYgU +EPCjjvbdGQASwGey +DncKjvbdnBivwoNu +EPDLKvbdsBelkfjy +DoDLKvbdddoRbWbj +EPCjjvbdhancFXQq +EObkKvbdJvUfEEfi +EPDLKvbdIidAKPfd +DoDLKvbdxVMdpxkn +DoCjjvbdaNLCTVNH +DnbkKvbdZyDinDMS +DoDLKvbdrMzJyLhJ +EPDLKvbdyXhiaozL +DoCjjvbdGKeTDHlu +DncKjvbdwzIGFxFS +EObjjvbdJvUedEfi +DncLKvbdIjEAJpGd +DncKjvbdyTNiNRbH +EOcKjvbdidkGuPAO +DoDLKvbdkVvmcbXw +DoCjjvbdJYTbHkpp +DoDLKvbdFyVVBEYC +EPDLKvbdmoyyVjyC +EOcKjvbdcTDKtDjB +EPCjjvbdEvYpPmJe +DoCjjvbdCJLCKhej +DoCjjvbdSKxfUgLT +DoDLKvbdFjeTDINV +DncLKvbdEXxMUTtM +EOcKjvbdWRnXaeMD +DoCjjvbdrMzJyLgi +DoCkKvbdcSbkUEKB +DnbkKvbdyzeOSIIh +DncLKvbdpstGqrKt +EPDKjvbdCJLBkJGK +EOcLKvbdJcJcQjDY +EPDLKvbdbLLfPNcA +DnbjjvbdEASImZwX +DnbjjvbdtumwiqTA +DnbkKvbdxKvdHzyf +DoCjjvbdVwIxWDeH +DncLKvbdYzcFqjVy +EPDKjvbdqiAJeMoF +DoDLKvbdNQXqVmfs +EPDLKvbdFjdsChNV +DoCkKvbdOTUWGdtp +EOcKjvbdOEdUIiKd +EOcLKvbduaEZSoFI +EOcLKvbdxsNhlrBg +EObkKvbdcIlijfXY +DoDLKvbdLqvlytpz +DoDKjvbdIryBTNXl +EObjjvbdQwOECkhD +DoCjjvbdLFegaaQu +EObkKvbdFkFTChNV +DnbjjvbdyzeOSHiI +EObjjvbdLAkHNCYR +DnbkKvbdZyDimcMS +DncKjvbdkMbLzEgP +DnbjjvbdRbEEkhyL +EOcKjvbdLrXMzVQz +EOcKjvbdVBBqTRRy +EObjjvbdyNsHxTIc +EPCjjvbdMuTRkNAX +DoCkKvbdUaCQrprZ +EPCjjvbdjmCLydfo +DoCjjvbdFyVVAcxC +EPCjjvbdQvnDblID +DnbjjvbdLhbLqYAS +DncLKvbdFxuVBEYC +DncKjvbdGLFScIMu +DncKjvbdBvzcheQW +EPDLKvbdSPsfjFcw +DnbkKvbdsQWOibvG +DnbkKvbdaSGChTfL +EPDLKvbdjmBkzFGo +DoDLKvbdqAiFAWhE +EPDLKvbdkVwNcaww +DoCkKvbdKRZePGOF +EOcLKvbdJXtCIMRQ +EPCkKvbdaNLCTUmH +EPDLKvbdliDtRUrB +EOcLKvbdKfGHbApu +EObkKvbdDwwlTstM +DoDLKvbdmgExMmfy +EOcLKvbdKWUfEFHJ +EPCjjvbdkxrqrxft +DncLKvbdkClKqHUg +DoDKjvbdVqnXadlD +DoDLKvbdULvPBWPJ +DoDKjvbdUslsfMWK +EOcLKvbdJvVFdFGi +DncKjvbdiifHilxS +EPCkKvbdRaceMJYk +DoCkKvbddwytTrFz +EPDLKvbdYkrETnLm +DoCjjvbdiMEdOUby +DoCkKvbdxVMeQyLn +EPCkKvbdwuMdpxlO +EPDLKvbdNPxQumfs +DncKjvbdYpleJNEq +DncKjvbdTAEhhCPE +EOcLKvbdUGznLwVe +EOcKjvbdNPwpunHT +EPDLKvbdKaLHNBwq +EOcLKvbdFfKRmhtR +EObkKvbdYlRcsmlN +DoDLKvbdWSOXadlD +EOcLKvbdWWiXucdg +DoCkKvbdZsiIxcsO +DoDLKvbdbhlikFvx +EOcKjvbdtlYXAsaX +EOcLKvbdUtNTelVj +DoDKjvbdhaoDFXRR +DoDLKvbdEuxoomJe +DoDLKvbdEYYLtTsl +DncLKvbdbhmJkGWx +EPDLKvbdqwPkbhxq +DnbjjvbdlrYuZsEJ +DncLKvbdeKKSWUzn +DnbkKvbdyTNiNSCH +DncKjvbddwzTsqez +DncLKvbdTXkMNzjx +DoDKjvbdJmAEZgUa +DncKjvbdeEnqavbj +EPDLKvbdcJNJjfWx +DncLKvbdPyNAGsRj +DoCjjvbdLGGHbAqV +DncKjvbdddoRbWcK +DoDLKvbdZjTHogBf +EPDLKvbdRkZFuHKs +EOcLKvbdEuyPoljF +EPDKjvbdEYYMTtUM +DncKjvbdDxXlTssl +DnbkKvbdQvmcblID +EObkKvbdjmBkydgP +DoCkKvbdOAJTUKSA +DncKjvbdhgJbxvJu +DoDKjvbdVvhxVceH +DoCkKvbdjvXODaww +EPDKjvbdemFvflik +DoDKjvbdkCkkRGtg +DoCjjvbdDigjVxKA +DncLKvbdLAjgNCYR +EPDKjvbdbUbGwkTh +EObjjvbdmuUzLJrG +DnbjjvbdmgFXlnGy +DoCkKvbdFxttaDwb +EPCjjvbdJcKDRKCx +DoCkKvbdpfDeUWAh +EPDLKvbdADSYJyhp +DoCjjvbdHkazmvqL +DnbkKvbduLxWaUBX +EPCkKvbdQdCaPpdS +EOcLKvbdZdwfzhIb +EPDKjvbdKWUeceGi +EPDKjvbdSCDeMJZL +DoDKjvbdyOShYShc +EObjjvbdliEURVSB +DncLKvbdmgEwlnGy +DnbkKvbdsBemMHKy +DoDKjvbdYzcGSJvZ +EObkKvbdGcjvKBjK +EOcLKvbdJuuGDdgJ +EPCjjvbdOStWGeUp +EOcLKvbdGLEsChMu +EOcLKvbdeATqNYJf +DncLKvbdxxIjCQZk +EObkKvbddZyQXyQb +DoDKjvbdVBCRTRRy +EPCjjvbduDDVWuoP +EOcKjvbdVZHtZkOn +EPCjjvbdZQmEhmFR +DnbkKvbdZyDimcLr +EPDLKvbdjblKqHVH +EOcLKvbdZtIiZDsO +DnbkKvbdRWmcbkhD +EPCjjvbddneSjtTr +DoCkKvbdZQmFJMdq +DoDLKvbdLFegbBRV +EOcKjvbdSwkMNzjx +DoCjjvbdFjeTDHlu +EPCjjvbdtSqrxydc +DncLKvbdSPtHKFcw +DncLKvbdyYJJapZk +EOcKjvbddxZssrFz +EObjjvbdfekzOGgA +EPDKjvbdrylQSaHn +DnbjjvbdZisHofbG +EObjjvbdrbGNMHKy +DnbkKvbdLBKfmBxR +DncKjvbdACqxJyhp +DncLKvbddijRutzn +EPDLKvbdMpYRVmfs +DncLKvbdmttzKiqf +DnbkKvbdZnmhdeZj +EPCkKvbdjKFgjNYS +DnbjjvbdxnTHxShc +EPCjjvbdlZTSTYgU +DoCjjvbdqlyjYkgi +EObkKvbdxVMeQyMO +EPDLKvbdSPtHJecw +EPDLKvbdrpWOibvG +EObkKvbdRbEFLhyL +DoCkKvbdYNqAYUvU +DoCkKvbdnCKXXnnV +EObkKvbdddoSBvbj +DncKjvbdNGcPlpUk +DnbkKvbdmajXXnmu +DoCjjvbdJXsbHlQp +DncLKvbdNGcPlouL +DoCkKvbdTAFJHaoE +EPCjjvbdnPyxvKyC +EPCkKvbdRyihTDWA +DncLKvbdQlxCZNtz +EObkKvbdJSyAsMwl +DoCjjvbdmttykJrG +EPCkKvbdfpBzwEXh +DoCjjvbdrzMQTBIO +EPDKjvbddZxowyRC +DncKjvbdaNKaruNH +DnbjjvbdaNKasVMg +DncKjvbdcbTNSATm +EPCkKvbdiLdcnVDZ +EObjjvbdYTLaMtOx +EOcKjvbdEASIlzWw +DnbjjvbdziuPodTU +EOcLKvbdqUUHRqkU +DnbkKvbdyNsHxSiD +EObjjvbdhkeDnUcZ +EOcKjvbdNHCpNQUk +EPDLKvbdIryBSmYM +DnbkKvbdfekynGgA +EOcLKvbdiHKCyWJu +EObkKvbdrMzKYlIJ +DoCjjvbdsZkoraIO +EOcKjvbdQccAoqES +DoCjjvbdtTRrxzFD +EPCjjvbdJXtBhMRQ +DnbjjvbdsBfNMHKy +DnbkKvbdeEnrBwCj +DoDLKvbdTfzmkvvF +DoCjjvbdCJLCLIej +DnbjjvbdNUrrLNAX +DoCkKvbdxsNiNRag +EPCjjvbdtbcUwVoP +DoDKjvbdaogHDkzd +DncKjvbdpedFTuaI +DnbjjvbdqYngfpdY +DncKjvbdbiNJkGWx +DoCjjvbdGckVjBij +EObkKvbdqceIomvB +EPDLKvbdFWZQQNJe +EObkKvbdrRtkOLAm +DncKjvbdDwwktUTl +EObkKvbdwNWAMceN +DncKjvbdZMSDtOLm +EObjjvbdTkvPAuni +DoDLKvbdUxhTykPO +EOcLKvbdVBCQsQqy +EPDKjvbdZshhxcrn +DnbjjvbdqdEiQOWB +DoDKjvbdkWWmdBww +DoDLKvbdzQoMhiwA +DnbjjvbdUGzmlXWF +DncKjvbdJTYaTMwl +DoDKjvbdGLFScHmV +DoDKjvbdrWpLcJZR +EOcKjvbdwNWAMcdm +EObkKvbdmfeYNOGy +EObkKvbdtcDUwVoP +DnbjjvbdiZuGMQmf +EObjjvbdfMewGmJk +DnbjjvbdANIZTWyx +DncKjvbdtTSSxydc +DnbkKvbdsBfMkfjy +DoDKjvbdSLYfUgKs +DoDLKvbdZisHogCG +EObkKvbdVTlsfMVj +DncKjvbddZyPwxpb +DncLKvbdAMhYsXZx +DncLKvbdxwhjCPzL +EOcKjvbdKRZeOeme +DoCkKvbdunszqLOt +EPDKjvbdZRMdiMdq +DnbjjvbdEuxpPljF +EPDLKvbdGGJrOJUR +EPDKjvbdVviXudEg +DnbjjvbdpfDeTvBI +DncLKvbdRadElJYk +EPDKjvbdaMjbSuMg +EPDLKvbdTAEhhCOd +DncLKvbdTIyiqABM +EPCkKvbdBsBDUFvr +DoCjjvbdcSbkUEJa +EObjjvbdCIjbKhfK +DoDKjvbdauCHXjsh +DoCkKvbdpyPHfqEY +EOcLKvbdDwxMUUUM +DnbjjvbdGFjRmiUR +DoDLKvbdbQGgELzd +EOcKjvbdGGJqnItR +EPCjjvbdxrnJNRag +DoDLKvbdbhmJkFwY +EPDKjvbddoFSkTtS +DncKjvbdNUsSKmAX +EPCjjvbdfelZmfgA +DoCkKvbdjKGIJlwr +EPDLKvbdJYTaglQp +EPCkKvbdVrOXbFMD +EPDKjvbdTpqPUuIN +EPCjjvbdGckViaij +DnbjjvbdczZQYYqC +DoDKjvbdMtrqkNAX +EObkKvbdaNKartmH +EPDKjvbdmSZUysDi +EOcLKvbdlhdURVSB +DncKjvbdWRnXbEkc +DncLKvbdLBKfmBwq +EPDKjvbdZdwfzhIb +EPCkKvbdhancFXRR +EObkKvbdaSFbgtGL +DncLKvbdJXsaglQp +DncLKvbdUsltFlVj +DoDKjvbdLBKfmBwq +EPCkKvbdnVVZjirG +EObjjvbdiZuFlROG +EObkKvbdwygeeweS +EPCkKvbdwjvcgzyf +DnbkKvbdssRsYzFD +DnbjjvbdxwiJaoyk +EPCjjvbdVhYWYHYz +DncKjvbdhzVFkpnG +DncLKvbdeJjSVtzn +DncLKvbdyYIjCPyk +EPDLKvbdJpzEoGNe +DncKjvbdnBiwXoNu +EOcKjvbdVrOYCElD +EObkKvbdLBKgNCXq +EPDKjvbdTlWPBVni +EPDKjvbdFxuVBDxC +DncKjvbdnHFXlnGy +EPCjjvbdYkrDtOMN +DoCkKvbdUWMPjTaR +DoCjjvbdjSziSjiz +DnbjjvbdeOdsKtUS +EPCkKvbdmfdwmOHZ +EObjjvbdtSrTYydc +DnbkKvbdRjxeuGkT +EObkKvbdKeehCApu +EOcLKvbdpxoIGqEY +DncKjvbdbLMGOnDA +EPCkKvbdEXwktUUM +EObkKvbdiUzFWqtb +DoCjjvbdiHKCyViu +EObkKvbdvwLaWAuu +DoDLKvbdiCPDEvqR +EOcKjvbdWXJXvEEg +DoCkKvbdqTtGrSLU +DnbkKvbdtbbuXWOo +EObjjvbdgGLzOGgA +DncKjvbdTlVoBWPJ +DoCkKvbdeEoRbWcK +DoCkKvbdkWWmdCXw +DncKjvbdehLWRmpg +EPCkKvbdjFLGtoAO +DoDKjvbdGLFScIMu +EObjjvbdrRtkOKaN +EPCkKvbdczZQYYqC +DnbjjvbdfHkVqnRH +EOcLKvbdtvNxKRTA +EPCkKvbdADSYJyiQ +EOcKjvbdmJETptrB +EOcLKvbdURQoUtgm +DoDLKvbdZMSDtOMN +EPCjjvbdFfJqnIsq +EOcKjvbdcJNKKfWx +DnbjjvbdkySqrxft +DncLKvbdJpyePFme +DncKjvbduCcVXWPP +EOcLKvbdxKvcgzzG +DoDLKvbdpfEEsvAh +EObkKvbdZyDjNblS +EPCjjvbdhbPDEwRR +EPDLKvbdTqQoUthN +DoDKjvbdxnSgxShc +DoCkKvbdcTCjscjB +DoCkKvbdOTUVfeVQ +DncKjvbdkMbMZeHP +DncLKvbdEvYpPmKF +DncLKvbdJTZBTNYM +EObjjvbdIHGyxxYH +EOcKjvbdraemLfkZ +EOcKjvbdMpYRVmgT +DncKjvbdxZgfFxEr +DnbkKvbdpxoIGpcx +EPCkKvbdkIGlGFnL +DoDKjvbdUslselVj +DnbjjvbdZnnJEdzK +DncLKvbdehLVrORH +DoCjjvbdySmhlqbH +DoDLKvbdADSXiyhp +DoDKjvbdZtJJZDrn +DoCjjvbdezvZEiUX +EOcLKvbdqTtHSRkU +EPDKjvbdVgxWXgYz +DoCjjvbdGZUuBDwb +DncLKvbdhzUekpnG +EPCjjvbdZxcinDMS +EPCkKvbdOFEThiLE +DoDLKvbdhzVGLqOG +EObjjvbdkySqryGt +DoDKjvbdmpZyVkYb +DoCjjvbdnHFYMnGy +EObkKvbdRotGjFcw +EPDKjvbdjblKpgUg +EOcLKvbdWWiYVdFH +DoDLKvbdtbcVXVoP +EPDLKvbdqqtkOLAm +EPDLKvbdmRyUysEJ +DnbkKvbdxnShYTJD +DoDLKvbdGKeSbhMu +DoCkKvbdjuwODbXw +DncLKvbdaMkCSuMg +DncKjvbdtbcUvuno +DnbjjvbdiVZeWqtb +DoCjjvbdLBKgNBxR +EObkKvbdlZSqrxgU +EPCkKvbdULunaWOi +DoCkKvbdwzIGGYEr +EPCkKvbdnHExNOHZ +EObjjvbdpyOgfqEY +DnbjjvbdpedFUWAh +DoCkKvbdhaoDFXQq +DnbkKvbdYqMdhleR +DnbjjvbdsZkpSaIO +EPDKjvbdJcJbqJbx +EObjjvbdehKvRmqH +EOcLKvbdmIdURVSB +EPDLKvbdvOszqKoU +EOcLKvbdZisIQGbG +DnbjjvbdFyVUaDwb +EPCjjvbdTAEiIBoE +DncLKvbdRkZFtgKs +EOcLKvbdzdynzdyp +EOcLKvbdnUtykKSG +DoDKjvbdZQmEhldq +EOcKjvbdnBjWxOnV +EPCkKvbdqvpLbiZR +DoDKjvbdrykosBIO +EOcLKvbdBiKbLJGK +EPDLKvbdBvzciFPv +DoCjjvbdemFwGlik +EPDLKvbdqTsfqqjt +DncLKvbdptUHRrLU +EObkKvbdbUbGwjsh +DoCkKvbdHffyyXwg +EPCjjvbdgGMZnHHA +EPDKjvbdFejRmhsq +DoCkKvbdQvmdCkgc +DncLKvbdyNsHxShc +DoCkKvbdrDeIpOWB +EObkKvbdYzcGRiuy +DncKjvbdMowqWNfs +DoDLKvbdbsDLTcjB +EPCkKvbdZQmEiNEq +EObjjvbdNPwqWNfs +DoDLKvbddeOrBwDK +EObkKvbdrNZixkgi +DoDKjvbdtlXvaUBX +DncKjvbdtunYKRTA +EOcLKvbdfSBWzkcP +EObjjvbdVAbRTQrZ +DnbjjvbdcJNKLFvx +DncKjvbdssRsYyeD +DoDLKvbdqTsgSSLU +EPCkKvbdMowqVmgT +DoCjjvbdDnbjjvbd +EPCkKvbdlhdURUqa +DncKjvbdqrVLOLAm +DoDKjvbdNHDQNQUk +EPCkKvbdXsLaMtOx +EPCkKvbdRosgJfDw +DncLKvbdKVuFcdgJ +DoCjjvbdGGKRnItR +DnbkKvbdeEnrCWcK +EPDLKvbdlZSrTYgU +EPCjjvbdtSrTYyeD +DoCkKvbdZisHpHCG +DnbjjvbdbrbkUDia +DnbkKvbdhficYvKV +EOcKjvbdsBfMlHLZ +DoDKjvbdBdQBVjNG +DnbkKvbdTvLpKUAq +DoCjjvbdzaAPGgCM +EObjjvbdiVZeWrVC +EPCjjvbdZshiYcrn +EObjjvbdRNXbYnUz +EObkKvbdBcpBWJlf +DncKjvbdtbcUvuoP +DoCkKvbdmfeXmNgZ +DncLKvbdbPfgELzd +DncKjvbdZshiYdSn +EObkKvbdDjHiuwjA +DoDLKvbdfIKvRnRH +DnbjjvbdiLeDmtcZ +DoDLKvbdQwNcblID +EObkKvbdmRyUzSdJ +DnbkKvbdnHFYMnHZ +EOcLKvbdfHjvSORH +DncLKvbdlZSrSyHU +EObkKvbdtSrSxzFD +EObjjvbdZyEKNcLr +EObkKvbdRkYeuHLT +EOcKjvbdTkuoAuoJ +DnbjjvbdEPDKkXCd +EPCkKvbdnCJwXoOV +EObjjvbdxrmiMqbH +DoDLKvbdRaceMIyL +EPDKjvbdRosgKFdX +DoCjjvbdzoQQeDMY +DncKjvbdZyEJmcMS +DoDLKvbdOFDshiLE +EPDKjvbdSQUGiedX +EPCkKvbdTIyjRAAl +EObjjvbdxUmFRYkn +DncKjvbdmpZyWLYb +DoCkKvbdygZMANEw +DoDLKvbdhuZeWquC +EObkKvbdFyUuAcxC +DoCkKvbdiCPCeXQq +DncKjvbdsCFlkfkZ +EPCjjvbdNPwpvOHT +DoCjjvbdSPtGjGDw +DncLKvbdAMhZSvyx +EPCkKvbdWXJYWDdg +EPDKjvbdaogHDkzd +DoDLKvbdRosgKFcw +EPDLKvbdrRtjnKaN +DncKjvbdvBEZSoEh +DoDLKvbdmajXYOmu +DnbjjvbdfNFwHMjL +EPCkKvbdezuyEhtX +DoCkKvbdHffzZYYH +EPCkKvbdvAdYsOdh +EPCjjvbdhlFDnVDZ +DncKjvbdbiNKLFvx +DoDLKvbdMIalQxAS +EPDLKvbdGckWKBjK +EOcKjvbdvOszqKnt +DoCkKvbdraelkgKy +EOcKjvbdMgComPtk +DoDKjvbdOSsugFVQ +DoCkKvbdyNrhYTJD +EPCjjvbduDDVXWOo +DncLKvbdiCPDFXRR +DncLKvbdiGibyWKV +EOcLKvbdfNGXHNJk +EObkKvbdBhjakIej +EPCjjvbdxmrhXriD +DnbkKvbdJbibqKDY +DnbkKvbdSCDdkhyL +EPCjjvbdGFirOIsq +DnbkKvbdKVtfDeHJ +DoDKjvbdGKdrbhMu +DncLKvbdZLrETmlN +EObjjvbdjuvmcbXw +DncKjvbdQdDApRDr +EObkKvbdeATplwjG +DoCjjvbdZMRdUNkm +DoDKjvbdTqQoVVIN +EPCkKvbdOTTufeVQ +EPDKjvbdWRnXadlD +DncKjvbdZsiJYdSn +DoCkKvbdZLrDsnMN +DoDKjvbdEKHiuwjA +EPDLKvbdnBivxPOV +EPCjjvbdddnrCWbj +EOcLKvbdpssgSRkU +EPCjjvbdzdzOzdyp +EPCjjvbdZxcinClS +DoDKjvbdvAcySoEh +DnbjjvbdWHxWXfxz +DoDLKvbdCWzdJEpW +DoCjjvbdehLVqnRH +EObjjvbdEXxLstTl +EObjjvbdkMakzEfo +EPCkKvbdKaKflbXq +EPDLKvbdijFgjNYS +DoCjjvbdZsiIxdSn +DncKjvbdeATqNXif +DncLKvbdzoPqEblY +EObkKvbdLAjgNBwq +DncKjvbdUxgsykPO +DoDKjvbdaogGckzd +DncKjvbdFVxpPmJe +EOcLKvbdZLrDtNlN +EObjjvbdYNqAXuWU +DoCkKvbdEYYLstUM +EObjjvbdeFPSBwDK +DncKjvbdePEsKssr +DncKjvbdZjTHogCG +EPCkKvbdjKGHjNXr +DoCkKvbdNrtVgFVQ +DncLKvbdaMjaruNH +DoDLKvbdwjwEHzzG +EOcLKvbdTIzJqABM +DoDLKvbdliETqVSB +DoDLKvbdNrtVfdtp +DnbjjvbdZxdKNcMS +EPDLKvbdbUafxKsh +DoCkKvbdVrNxCFMD +DoCkKvbdxZgefYEr +DoDKjvbdYTLaMsoY +DncKjvbdeAURMwif +EOcLKvbdNGcPmQVL +EPDKjvbdqceJQOVa +DncKjvbdRotHKGEX +DoCjjvbdwNWAMdFN +EPCkKvbdFyVVAcwb +DoDKjvbdmozYvKyC +DncKjvbdSPsgJecw +EPDKjvbdZtJJYcrn +EOcLKvbdGckWKCJj +DoDKjvbdkxrrSxft +DnbjjvbdRbDdlIxk +DncKjvbdyYJJbPyk +DnbjjvbdhgJcYvKV +EObkKvbdjcLjqHUg +EObkKvbdhgJbyWKV +EObjjvbdrovPKCvG +DoCkKvbdbBVdepQX +DnbjjvbdUVkojTaR +EPCkKvbdbUagYLUI +DoDLKvbdptUGqqkU +DoCjjvbdyTNhlqag +DncKjvbdEYXlTssl +EPCkKvbdXFxytAOs +EOcLKvbdNdctIhkE +EPDLKvbdkDMLRGuH +EPDLKvbdDihJuxKA +EOcLKvbdrafNMHLZ +EPDLKvbdbKlFoODA +DncLKvbdZLqcsnMN +DnbjjvbdznpRFDLx +DncLKvbdziuQPdSt +EPCkKvbdbrcKsdKB +DncLKvbdaMkCTUmH +EPDLKvbdYkqdUOLm +DoDKjvbdjhHLfGNk +DoDLKvbdZMSDtNlN +DnbjjvbdZjTHpHCG +DoCkKvbdemFvgNKL +DncKjvbdrRtkOLAm +EPCjjvbdyNrhXsIc +EObjjvbdgPazwDwh +DoDKjvbdRDcAoqDr +DoDKjvbdvvkaWBWV +EOcKjvbdZRMdiNFR +EPCkKvbddePRawCj +DoCkKvbdHDjvKBij +DnbkKvbdZirgpGbG +EOcKjvbdhbPCeWqR +DnbkKvbdNPwpvNfs +EPCjjvbdZirhPfbG +EOcLKvbdIGgZxwxH +EPCkKvbdrykosBHn +DoDKjvbdxnTIYShc +DnbjjvbdNsTvGduQ +DncLKvbdBcpAvJlf +DnbjjvbdlqxtysDi +DoCkKvbdOEdTiIjd +DncKjvbdfHkVrOQg +DoCkKvbdiHKDYvKV +DoDKjvbdOTUVgFUp +EObkKvbdaaVdfPow +DncLKvbdZHXEAPTJ +DnbkKvbdkIHLefNk +DnbkKvbdjEjfuPAO +EObjjvbdhtzFWqtb +DoDLKvbdSQTfjFdX +DncLKvbdHEKvKBjK +DncLKvbdHDkVjBij +EPDKjvbdRpTfiecw +DnbkKvbdiBncEwQq +EObkKvbdRadEkhyL +EPCkKvbdezvYdiTw +EOcKjvbdaMjasUlg +EObkKvbdczZPwyQb +EPCjjvbdTvMQJtAq +EPCjjvbdJXtCIMRQ +DoDLKvbdkDMKpftg +EPCjjvbdiVZdvqtb +DnbkKvbdtunXipsA +DoCjjvbdjJehKNYS +DnbjjvbdJvUeceHJ +DoDKjvbdKRZdoFme +DncLKvbdJcKCpjCx +EPDKjvbdmbKXYPNu +DnbjjvbdkIHLeenL +EPDLKvbdNPxQunHT +DnbjjvbdUtMtFkvK +EPDLKvbdsPvPJcWG +EObjjvbdMRvlzVQz +DoCkKvbdsQWOjDWG +DnbjjvbdXGZZtAPT +DnbjjvbdunszpkOt +DncKjvbdxZhFfXdr +DnbjjvbdRzJgsCvA +EPCkKvbdSCDdlIxk +EPDKjvbdREDBPqES +DnbjjvbdBvzdIdov +DoDLKvbdSLYetfkT +EObjjvbdKWVGDeHJ +DoCjjvbduDDUvuoP +EOcLKvbdWIYWXgYz +DoCjjvbdbhmJjfWx +EPDKjvbdIxUCILpp +EOcLKvbdeXzTsrFz +EPDLKvbdsBemLgKy +EPCkKvbdzjVPpDrt +DncLKvbdZyDimbkr +DnbjjvbdRNYBxmtz +EPCkKvbdvOszpkPU +EObkKvbdSQTfiedX +DncKjvbdZRNFIldq +DoDKjvbdbhlijfXY +EObkKvbdEzspeLcJ +EPCjjvbdKCicRJbx +EOcLKvbdOYOuzcnU +DoCkKvbdhkddOVDZ +DncKjvbdIxTahMQp +EOcLKvbdwygeexFS +EPCjjvbdKRZeOeme +EPDLKvbdgPazvcxI +DncKjvbdfNFwHMik +EOcLKvbdtkwvaTaX +EObjjvbdURQnuVIN +DnbkKvbdiBncFWqR +DncLKvbdaMkCStmH +EPCjjvbdZjSgogBf +DoDKjvbdMowpvOGs +EPCkKvbdsrqsZZdc +DnbkKvbdRpTfjFdX +EOcKjvbdaMjbTVMg +EOcLKvbdmgExMmfy +DncKjvbdCJLCLJGK +DoCkKvbdNeDshiKd +DnbkKvbdGLFSbgmV +EObjjvbdMtrrLNAX +EOcKjvbdpedEsvAh +DoDKjvbdcyxpXyQb +EObkKvbdxZhGGXdr +DoCkKvbdEztQdlCi +EObkKvbdijFgilxS +EPDLKvbdkHgMFenL +EOcLKvbdlrYtysDi +DncLKvbdjcLjpgVH +DoCjjvbdnVVZkKRf +EPDKjvbdFeirNhsq +DnbkKvbdjblLRGuH +EPDLKvbdtTSTZZeD +DoDKjvbdVBCRTRSZ +DncKjvbdTYLMNzjx +DoCkKvbdEztQdkcJ +EObjjvbdpfEFTuaI +DncLKvbdYSlAmUPY +DncKjvbdYpldiNFR +DncLKvbdWXIwvDdg +DoDLKvbdeXyssrFz +DncLKvbdqdEhonVa +EOcLKvbdNQYRVnGs +EObjjvbdRpTgKGDw +DoDKjvbdauCHXkUI +DoDLKvbdhficZViu +DnbjjvbdzoPpeCkx +DoCkKvbdJYTaglQp +DoDKjvbdnBiwYPNu +EOcLKvbdMJCLqYAS +EPCjjvbdYkrDsnMN +EPCkKvbdehKvRmqH +EObkKvbdVqmxCFMD +DncKjvbdrDeJPmvB +EPDLKvbdzaAOgHCM +EOcLKvbdNPxQvNfs +DncLKvbdFVxopMie +EPDKjvbdgQBzwDwh +EObjjvbdTfzmkvvF +EPDLKvbdUaBprpqy +DoCkKvbdnGdxNOGy +DncLKvbdfIKurOQg +EPCkKvbdKDJcRKCx +EPCjjvbdmJEUQuSB +DncLKvbdrafNMGjy +EOcKjvbdZxdKNbkr +DnbkKvbdJmADzGuB +EPCjjvbdQvmdDMID +DnbkKvbdemGWgNJk +DncKjvbdyfxlAMdw +EPCkKvbddtAUATNW +DncKjvbdcasMrATm +DoDKjvbdVhYVxHYz +EPCjjvbdhyuFkpmf +DoDLKvbdcbTMrATm +EPCkKvbdILaznXRL +DoDKjvbdRDbaQQcr +DncKjvbdijFgjNYS +EObkKvbdIMBznXRL +EPCjjvbdxVNEpyLn +DncLKvbdYkqctOMN +EOcKjvbdxrmiNSBg +EPDLKvbdtTRsYzFD +EOcKjvbdzjVQQDsU +EPCjjvbdZMRctNlN +DncKjvbdXrlAmTnx +EOcLKvbdbPgGdLzd +EPDLKvbdFfJqmhsq +EOcLKvbdyzdmqgiI +DoCjjvbduCbtvuoP +DncLKvbdNGcPlpVL +EPCjjvbdGBOpyJzm +EPCkKvbdRDcBPpcr +EOcLKvbdRbEFLhyL +EOcLKvbdePFTLTsr +EObkKvbdcTCkUDjB +DnbkKvbdrWokbhxq +DncLKvbdqUTfrRjt +EOcLKvbdRyihTDWA +EObkKvbdpxnhHQdY +DnbkKvbdrSUkOKaN +DoCjjvbdIGgZyYXg +DoDLKvbdMowqWNfs +DoDKjvbdUxgtZkOn +EObjjvbdUtNTelVj +EObjjvbdlqxtyrdJ +DncKjvbdkVvnDbYX +EObjjvbdePFTKssr +DoCkKvbdMuSrLNAX +EOcLKvbdnQZyWLZC +DoDKjvbdhgJcYujV +DoDLKvbdaMjasVMg +EPCjjvbdcScLUDia +DnbjjvbdbKkeoNcA +DnbkKvbdfpBzwEYI +DoCkKvbdBhkBjhej +DnbjjvbdkDMLRGtg +EObkKvbdeATqNXjG +EOcKjvbdFkFSbglu +DnbjjvbdznpQdcMY +DncLKvbdIidAJpHE +DoCjjvbdLZQirzuG +DnbjjvbdzjUopDrt +EOcLKvbdnUuZjiqf +DoDLKvbdwyhFeweS +DoCkKvbdaoffckzd +EObkKvbdzaAPGgCM +EObkKvbdEzspdkcJ +DnbjjvbdDjHiuxKA +DnbkKvbdVqmxBdlD +EOcLKvbdrJAKFMne +EOcKjvbdZjSgofbG +EPCjjvbdfMfWgNJk +DoCkKvbdTukpJsaR +DoCjjvbdySmiNSBg +DnbkKvbdzGyMANFX +EObkKvbduWNxKQsA +DoDKjvbdRkZFuHLT +DncLKvbdbKlGOmcA +DncLKvbdyNsIXsJD +DnbkKvbdMpXqWNfs +DoCkKvbdHEKujBjK +DncLKvbdDxXktTsl +EPCkKvbdACrYJyiQ +EOcKjvbdqUUHSRjt +DoDLKvbdOFDsiJLE +EObkKvbdrbGMlGjy +DoCjjvbdjblKpgUg +EPCkKvbdiHJcYujV +EPDKjvbdrDeJQNvB +EPDLKvbdbrbkTdJa +DnbkKvbdNeDtIhkE +DnbkKvbdcJNKKevx +EPCjjvbdxVNFQxkn +EObjjvbdhyuGLqOG +EOcKjvbdrafMkfkZ +EObkKvbdRkYetgKs +DnbjjvbdUWLoitBR +DoCjjvbdQvmcblID +EOcLKvbdDoDLLXCd +DncLKvbdzRPMiJwA +DoCkKvbdsZkoraHn +DoDKjvbdkHgMGFnL +EObkKvbdrbFmMGjy +DnbkKvbdRWnDbkhD +EPDKjvbdJbicRJbx +DncKjvbdGZUuAcwb +DoCjjvbdmfdwmNfy +DoDKjvbdBdQAujNG +EPDLKvbdwWlAuaVu +DncLKvbdxmrgxSiD +DoCkKvbdUsmUFkuj +EOcKjvbdcTDKsdKB +DnbjjvbdjcLkRHVH +DoDKjvbdbiMijewY +EPCjjvbdPyNAHSrK +DnbjjvbdFkErcINV +EPDKjvbdZQldhmFR +EPDKjvbdTJZjRABM +EOcKjvbdKaKgMaxR +DoCjjvbdwzHefYEr +DoDLKvbdDwxLtUUM +DoCkKvbdfILWRmpg +DoCkKvbdRyihTCvA +DoDKjvbdSQUGjFcw +DoCjjvbdEYXktUTl +EPCjjvbdoznEKxPA +EPDLKvbdSiZiqABM +EObkKvbdVUNUFkuj +DncKjvbdMfbpNQUk +DncLKvbdEvYopMie +DnbjjvbdMowpvNgT +DncLKvbdKjaHvAKZ +DoDKjvbdqmZjZMIJ +EObjjvbdGcjuibJj +DoDLKvbduLwvaTaX +DoCkKvbdHgHZyYYH +EObjjvbdEOcKjwCd +EPCjjvbdGckWKCKK +EObkKvbdEuyQQMie +DnbjjvbdHgGzZYYH +EObjjvbdVUMsekuj +EObkKvbdWWiXucdg +EPDKjvbdRWnECkgc +EPDKjvbdxZgefYFS +DnbkKvbdEuyPomKF +EPCjjvbddePSCXCj +DoDKjvbdUsltFlWK +DnbkKvbdbsDKtEJa +EObkKvbdmoyyWLZC +DoDKjvbdSCDeMJZL +DnbkKvbdwtleRYkn +EPDLKvbdJpzEnfNe +DncKjvbdZisIQGbG +DoCjjvbdiUzEwRtb +DncKjvbdrounicVf +DncLKvbdmIdURVRa +DoDKjvbdYSlBNUPY +DnbjjvbdKDKDQibx +DoDLKvbdnCJvwoOV +EPDKjvbdgFlZmfgA +DoDKjvbdTukojTaR +DnbjjvbdVAbQsQqy +EOcLKvbdtAHRIABS +DnbjjvbdmbJvwnnV +EOcKjvbdvBDxrneI +DnbjjvbdeJirWUzn +DnbjjvbdKeegaaQu +DnbjjvbdzQoMiKXA +DnbjjvbdxwiJbPyk +EPDLKvbdKNADzHUa +DoCkKvbdANHyTXZx +EObkKvbdxLXDgzyf +EOcKjvbdpxoHgQcx +DncKjvbdLBKflawq +EPDKjvbdhanbdwQq +DnbkKvbdEASIlyvw +EPCkKvbdwzHfGYEr +EOcLKvbdqZPHgQdY +EPDKjvbdqTtGqqjt +DoCjjvbdDxXksssl +DoDKjvbdQlwayNtz +EOcKjvbdTvLoitAq +DnbkKvbdirzhsKiz +EPDKjvbdyzeORghh +DncLKvbdmJDsqVRa +DncLKvbdKefICAqV +EOcLKvbdZnmheFZj +DoDKjvbdIxUCILpp +DncLKvbdxsOIlrBg +DoCkKvbdiVZdvqtb +EPDLKvbdbBWEfQPw +EObkKvbdsCFllGkZ +EObkKvbdNdctIiKd +EObjjvbdozmcjwoA +EPDLKvbdlhdTqUqa +EOcKjvbdbUagYKsh +DnbkKvbdJpydoGOF +DnbkKvbdnGeYMmfy +DncKjvbdtlXwBUAw +DncKjvbdqiAJdlne +EPCkKvbdMIakqYAS +DnbkKvbdCWzchdov +EObkKvbdelewHNJk +EPCjjvbdFpASvgFy +DoDLKvbdVrNxCFMD +DnbkKvbdMpYQvNfs +EPCkKvbdEObkKwDE +EPDLKvbdHDjuibJj +EPCjjvbdKaLHMaxR +DoDKjvbdakLfOmcA +EPDLKvbdMgDQNQVL +DoCjjvbdEvYpQNKF +EPDKjvbdrEEhpOVa +EOcLKvbdOFDsiIjd +DncKjvbdtTSTYyeD +EObjjvbdQvnDblHc +DoDKjvbdVrNwbElD +EPCjjvbdZMRdUNkm +DoCjjvbdhfibxujV +DnbjjvbdYpmFJMeR +DncLKvbdDihKVxKA +DoCjjvbdrNZjYkgi +EOcLKvbdYqNFImEq +DoDLKvbdJbjDQjCx +DoDKjvbdwygefXeS +DncLKvbdUyHsykPO +DncLKvbdJSyBTMxM +EPDKjvbdcImKKfXY +EPCjjvbddndsLTtS +DoDLKvbdEASIlzWw +EObjjvbdrylQTAgn +DoDKjvbdFkFTChMu +DncLKvbdUaCQrprZ +DnbjjvbdOFEThhjd +EObjjvbdlYsRrxgU +EPCkKvbdnGeYNOGy +DoDKjvbdwygefYEr +DoCjjvbdGckViajK +DoDKjvbdSZjITDWA +EObjjvbdkWXNdCXw +EPCkKvbdKjaIWAJy +EObkKvbdKkBIWAKZ +DoDLKvbdptTfqrLU +DoDKjvbdPxmAGsRj +EObkKvbdTvMPitBR +EPCkKvbdegjvSOQg +DoDKjvbdwNWANEEm +EOcLKvbdRNXbYmtz +DoDKjvbdEOcKjwDE +EPDLKvbdfMfXHMik +DoCkKvbdWHwvXfxz +EPCjjvbdelfWgNKL +EPCjjvbdqcdiQOVa +DncKjvbdkyTSTZGt +DoCkKvbdbAueFpPw +EOcKjvbdQwNdClHc +DnbjjvbdxmsIYSiD +EPDKjvbdCTAbtFwS +DncLKvbdJpzFOeme +EOcKjvbdiZuGLqOG +DncKjvbdKaLHMaxR +EPDLKvbdbiMjLFvx +EPCkKvbdjvXODaxX +EOcLKvbdOAJSsirA +EPDKjvbdqYnhHQdY +DoCkKvbdDwwlTtUM +DnbkKvbdRjxfVHKs +EObjjvbdzjUpPcrt +EOcLKvbdeUAUATNW +EObkKvbdQlwaxmtz +EObkKvbdEXxLtUUM +EObkKvbdYkrETmkm +DoCkKvbdxmsHwsIc +DoDKjvbdzjUoocrt +EPDKjvbdqGEFTuaI +EPCjjvbdbiMjLGXY +EPDKjvbdfpBzwEXh +DncKjvbdZeYGzhJC +DoCjjvbdFkEsCglu +DncKjvbdOFDshhjd +DncKjvbdZMRcsnMN +EPCkKvbdrEFJPnVa +DoCkKvbdcyyPxYpb +EPDLKvbdijGIKMwr +DoCjjvbdbAudepQX +DncLKvbdFejSOItR +EOcKjvbdSLZGVHLT +EPDKjvbdMJBkpxAS +DncKjvbdJXsaglQp +DnbkKvbdjcMLRHVH +DoCkKvbdFjeTCgmV +DnbjjvbdqUTfrRkU +DnbjjvbdznoqFCkx +EObkKvbdVqnYBeLc +DoDLKvbdaMjbTVMg +DoCkKvbdSQUHKFdX +DoCjjvbdrDdhomua +DncLKvbdcTCjsdJa +DoCkKvbdsCFlkgKy +EPCkKvbdmbKWwnmu +DoCjjvbdZQmFImEq +EPCkKvbdyXiKCPzL +EOcLKvbdKQzEnenF +EPCjjvbdrbGNMGjy +EPDKjvbdgGMZnHHA +EOcLKvbdfHjuqnRH +EOcLKvbdFeirNiUR +DoCjjvbduaEZSoFI +DncKjvbdbAudfPow +DoCkKvbdbiMikFwY +DoDLKvbdcyxpYYqC +DnbjjvbdpxoHfpdY +DncKjvbdqUTgRqjt +DoDKjvbdcImKKfWx +DnbjjvbdmfeYNNfy +EPCjjvbdIjEAJofd +EObjjvbdLBKgNCXq +EObjjvbduLxWaUAw +DnbjjvbdJTZBTNXl +DoCkKvbduaDyTOeI +EOcLKvbdUyIUZkPO +EOcLKvbddePRawCj +EPDKjvbdhbObeWqR +EOcKjvbdBdQAvJmG +EOcKjvbdkVwODaww +DnbkKvbdUVkoisaR +DnbkKvbdMoxQvNfs +EObjjvbdCJKbLIfK +DncKjvbdYpmFJNEq +DoCjjvbdjKFhKMxS +DnbjjvbdZLrEUNlN +EPDKjvbdwuNFRZMO +EObjjvbdjuvnECXw +EPCkKvbdlZTSTZGt +DoCjjvbdsQVoJcWG +DncLKvbdmJETqVSB +DnbjjvbdjggLfGOL +EObjjvbdxwiKBpZk +DoDLKvbdKDKCpjDY +EPCjjvbdzRPNIjXA +DoCkKvbdkaMoNALA +EPCkKvbdjvWnDaww +EPCkKvbdSBcdkiZL +DnbkKvbdbUbHXkUI +EOcKjvbdURROtuHm +DncLKvbdJmAEZgVB +DoDLKvbdDxYLsssl +DncKjvbdWRnXadlD +EPCjjvbdADSXiyhp +DnbkKvbdNGcPlouL +DnbjjvbdBsAcTevr +EObjjvbdWWhwvDeH +EOcLKvbdbUafxKsh +DoCkKvbdtcCuXWOo +EOcKjvbdbKkennDA +EPDLKvbdGcjujBjK +DoDKjvbdRWmdDMHc +EPCkKvbdmSZUyrdJ +DoCkKvbdLZRKSztf +DncKjvbdZQmFJNFR +EPDLKvbdjhGkefNk +DncKjvbdeATpmYJf +EPCkKvbdDjHivXjA +EObjjvbdFyVVBEXb +DncKjvbdIHHZxxXg +DnbjjvbdMoxQvNfs +EObjjvbdlYsRsZGt +EOcLKvbdZHWdAPTJ +DoCkKvbdoznDjwoA +EOcLKvbdYpmEiNEq +EOcLKvbdfMfWgNJk +DnbjjvbdjlalZeGo +EPDLKvbdVgxVxGxz +DoDKjvbdZRMdiMeR +DnbkKvbdNsUVgFUp +EObjjvbdNGcPmPuL +EPDLKvbdrSUjnKaN +DncKjvbdMgDPmQUk +DoDLKvbdRkZGUfkT +EOcLKvbdpxoIGqDx +DoCkKvbdVwIxVcdg +DoDKjvbdZQmFIleR +EPDKjvbdZshiZDrn +EPCkKvbdFWZPpNJe +DnbkKvbdcImKKfXY +DoCkKvbdiVZeWqtb +EPCkKvbdkxsSSyHU +EObkKvbdcSbkTdKB +EOcKjvbdFxttaEYC +EPCkKvbdhtzEwSVC +EOcKjvbdLAjgNBwq +DoCkKvbdZisHofbG +DoDLKvbdIsYaTNYM +EPDLKvbdADRxJzIp +DoDKjvbdTkuoAvOi +EOcLKvbdZRMeJMdq +EPDLKvbdWWiXvDdg +DnbjjvbdbsDKscjB +DnbkKvbdtlXwBUBX +EPCjjvbdmgFXlmgZ +EObkKvbdjmBlZeGo +EObkKvbdmgEwmOGy +DoCjjvbdtlXwBTaX +EPDKjvbdSiZiqABM +EPDLKvbdEXxMTssl +EPCkKvbdRWmccLhD +DncLKvbdrWpMDJZR +EPDLKvbdelfXGlik +EOcLKvbdFjdsChNV +EPCkKvbdVUMtFkuj +DoDLKvbdtkxXBUBX +DncLKvbdMgDQNPtk +DnbkKvbdMJCMQxAS +EOcLKvbduWOYJpsA +EPCjjvbdZxcimcMS +DoDKjvbdqrUjmkAm +EObjjvbdRzJgsCvA +EOcLKvbdiBoDFXRR +EPCjjvbdSPtHKFcw +DncKjvbdbBVeGPpX +DnbjjvbdRotGiedX +DoDKjvbdIHGzZYXg +DnbjjvbdiGjCyViu +EPCjjvbdSxKkmzjx +EPCjjvbdmajWwoOV +DnbjjvbdmbKWxPNu +EObkKvbdCTBCsfXS +DoCjjvbdKQzEnfOF +EPCkKvbddijRutzn +EObkKvbdFjeTCgmV +DnbjjvbdURQnuUhN +DnbkKvbdiCOcFXRR +EObkKvbdJutfEEfi +DncLKvbdhtydwRuC +DoCjjvbdcTCjsdJa +DnbjjvbdzoPqEcMY +DoDLKvbdSCDdlJZL +EOcKjvbdlhctQuSB +EPDKjvbdOFETiJKd +EObkKvbddZyQYZQb +EOcLKvbdrMyjYlHi +DoDLKvbdqrVLOLBN +DncKjvbdyNsHwriD +EObkKvbdQvnECkgc +DnbkKvbdznopeClY +DoCkKvbdCJLBjiGK +EOcLKvbdauCGxKtI +EPCjjvbdeFOrCWcK +DncLKvbdcSbjtDia +DnbkKvbdKWVGDdgJ +EPDKjvbdrDdiQNua +DncLKvbdqTtGqrKt +DoDKjvbdjJfIKMwr +DoCkKvbdkxsSTZHU +EObkKvbdFejSNhtR +DoDKjvbdnCKWxOmu +DoDLKvbdvBDySneI +DncKjvbddZxpXyRC +EPDKjvbddwzTsqez +DoDLKvbdLFfIBaQu +DncLKvbdwzHeewdr +DncLKvbdOFEUJJKd +DoDLKvbdEvZQQMie +EPDLKvbdWHxVwgYz +DoCjjvbdiGjCxujV +EPDKjvbdrovPJcWG +DoDLKvbdZxcjOCkr +DnbjjvbdRzJgsDWA +DoDLKvbdiZuGLpnG +DncLKvbdTukoitBR +DnbkKvbdnBiwXnnV +DoDKjvbdBvzdIdov +EObkKvbdRWnECkhD +DoCkKvbdRbDeMJZL +DncKjvbdiGjDYujV +EPCkKvbdNdctIiLE +EPCjjvbdKWUfDdfi +EOcKjvbdkIGlGGNk +EPDKjvbdGZVVBDxC +EObkKvbdXsMBNUOx +EObjjvbdANHxrvyx +EPDKjvbdZtIhyDrn +DoCkKvbdRWmdCkgc +EObkKvbdffLynGgA +DoDKjvbdIxTahMQp +DncKjvbdKQzFPGOF +DoDKjvbduDCtwWOo +EOcKjvbdnCJvxOmu +DoCjjvbdEJgivXjA +DncKjvbdemGWgMjL +DncKjvbdCDpBVjMf +DncLKvbdmoyxukZC +EOcLKvbdtkwwBTaX +DoCkKvbdLqwMzUpz +DncLKvbdqFdFUWBI +EPDLKvbdZyEJmblS +EOcKjvbdEzsqFMCi +DoCkKvbdcarmSATm +DncLKvbdFfJqmiTq +DncLKvbdKQzEoGNe +DoCjjvbdUaCRTRSZ +EOcLKvbdqZOhGqEY +DoCkKvbdZisIQGaf +DoCkKvbdeFOrBwCj +DoDLKvbdmIctQtqa +EObkKvbdxVMdqYkn +DncKjvbdwygfFxFS +DoCkKvbdRWnEDLhD +EOcKjvbdmRyUyrci +DoCkKvbdWXIwvDeH +EPDLKvbdRXODcLgc +DoDLKvbdBsBDUGWr +EOcKjvbdEvYopNJe +DoCjjvbdBvzdIdov +DoCkKvbdyzeNrIJI +EObkKvbdCJKbKhej +EObjjvbdQccBQQcr +DnbkKvbdxZgeewdr +DoDKjvbdqcdhpNua +DoCjjvbdeJjSVtzn +DncKjvbddneTKssr +DnbjjvbdZxcjNbkr +EPCjjvbdZisIPfaf +EPCkKvbdkyTRrxft +DncKjvbdVwIxVcdg +DncLKvbdIxTagkpp +EPCjjvbdbrbjtEJa +DncKjvbdkCkjqHUg +DoCkKvbdUxgsyjnn +EObjjvbdUaCRSprZ +DnbjjvbdMJCLpxAS +DncLKvbdliEUQuRa +EPCkKvbdANHxrvzY +EPCjjvbdeAURMwjG +EPDKjvbdZoOIeEzK +DoDKjvbdmuVZkJqf +DncLKvbdaNLCTUlg +DoCkKvbdnQZxvLYb +DncLKvbdhficZWJu +DncKjvbdatbHYLUI +DoCjjvbddndrjtUS +EOcLKvbdsBfMkgKy +DnbjjvbdBiKakIfK +DnbjjvbdSQTfjFcw +DoCjjvbdmoyxvKyC +DoCkKvbdGcjuibKK +DnbkKvbdZQldiMeR +EObkKvbdqquKnKaN +DoCjjvbdZRNEhldq +EPCjjvbdBiKbLJFj +EPCjjvbdyXhjCPyk +DncLKvbdtTSSxzEc +EPCjjvbdnCJwXnmu +DoDLKvbdbBWEfQPw +EOcLKvbdemGXHNKL +DoDLKvbdmfdxMnGy +EOcLKvbdTqQntthN +EOcLKvbdrMyixlIJ +EOcLKvbdVUMselWK +EOcLKvbdBvzchePv +DoCjjvbdbVCHXjsh +EPCjjvbdZRMdhleR +EOcLKvbdhbObeXRR +EPCkKvbdFWZPpMie +DncLKvbdXFyZtAOs +DnbkKvbdTqQoUuHm +EPCjjvbdCSaDUFvr +DoDKjvbdQZNAHTSK +EOcLKvbdmoyyVkZC +DoCkKvbdGLErbhMu +EOcLKvbdtvNwjRTA +EObkKvbdFjdsDINV +EOcKjvbdeOdsLUUS +DncKjvbdMtrrKmAX +EObkKvbdBsBCtGWr +EOcLKvbdVBCRTRSZ +DoDKjvbdKQydoFme +DncLKvbdnHFXmOGy +DnbkKvbdGAnqYizm +EOcLKvbdjlakzEfo +EOcKjvbdegkWSOQg +DoCjjvbdtkwwAsaX +EPCkKvbdeKKSWUzn +EObjjvbdrRtjnLBN +EPCkKvbdeATqMxKG +DnbkKvbdZMRdTmlN +DoDKjvbdNsUWGeVQ +EObjjvbdyXiKBpZk +EOcLKvbdJKEAJpHE +DoDKjvbdzQoNJJwA +DoCkKvbdwygeewdr +EObkKvbdsCGNMHKy +EOcLKvbdlhdUQuRa +EObjjvbdyNsHwsIc +DoDLKvbdWRnXbFLc +EObjjvbduCcUvvPP +EOcLKvbdrEEhonWB +EPCjjvbdRjyFtgKs +EPCjjvbdkNCLzFGo +DoCkKvbdRDbaPpcr +DoDKjvbdQdCaQQdS +DncKjvbdwyhFexFS +EPDLKvbdBhjakJGK +EPDKjvbdaNKaruMg +EObkKvbdzQnliJwA +DnbjjvbdptTfrSLU +DoDKjvbdFWZPpNJe +EObkKvbdZxcjOCkr +DoDKjvbdehLWRnQg +EOcLKvbdcSbkUEKB +EObjjvbdbUafxLTh +EObkKvbdBcpAvKNG +DoDLKvbdySmiNSBg +DncLKvbdmIdUQuRa +EPCkKvbduDDUvuoP +DoDLKvbdMtrqjmAX +DoDLKvbdVZHtZkOn +EOcLKvbdiZuGLpnG +EOcKjvbdxmrgxShc +DoCjjvbdMpYQvNfs +EOcKjvbdCIkCKiFj +EPDLKvbdaaVdepPw +EObkKvbdXFyZtAOs +EPDLKvbdbKlFnnDA +DncLKvbdqGEFTuaI +EOcKjvbdqFcdsvAh +EPCkKvbdcSbkUDjB +DncKjvbdrJAJeMoF +EObjjvbdZMRdUNkm +DncKjvbdCEPaVjNG +DnbjjvbdptUHSSLU +EPCkKvbdUtNTekuj +DoCkKvbdVqmwadlD +EObjjvbdCIkBjiFj +EOcLKvbdbVCGwkUI +EObjjvbdFfKSNiTq +EPDKjvbdJXtCHlRQ +EPDKjvbdTvMQJtBR +EPCjjvbdZMRdTnLm +EPCjjvbdemGXGljL +EPDKjvbdxmsHxTJD +EOcKjvbdiVZdvrVC +DnbkKvbdmSZUzSdJ +EPCkKvbdUaCRTRSZ +DncLKvbdoAKztIDn +EObjjvbdHffyyXxH +EPCkKvbdaMjbStmH +EObjjvbdZyDinDMS +DoDKjvbdjlbMZdgP +DncKjvbdQwOEDMHc +DncLKvbdGLFSbgmV +EPCkKvbdjvXOECXw +DoCkKvbdSBceLhyL +DoDLKvbdEvYpPmKF +EOcKjvbdrbFlkfkZ +EPDKjvbdTvMQJsaR +DncLKvbdjvXNcaxX +DnbkKvbdijGIKNXr +EOcLKvbdiHJcZViu +DoCjjvbdlqxuZsDi +DnbkKvbdhuZeXRtb +DncLKvbdACqxJzJQ +EObjjvbdjlbLydgP +EPDKjvbdxZgefXdr +EOcKjvbdSCEFLiYk +EObjjvbdKefICApu +EPDKjvbdjlbLyeGo +DncLKvbdbAvEepQX +EPCkKvbdrSVKnLAm +DncLKvbdZjTHpHBf +DnbkKvbdCWzdIdov +DoDLKvbdxUmFQyLn +DnbkKvbdxVNFRYkn +DoCkKvbdZisHpHCG +DoDKjvbdwkXEHzzG +DoCjjvbdSPtHJedX +EOcLKvbdBiLBkIej +DoCkKvbdiLdcnVCy +DnbkKvbdlhcsqUqa +EPCjjvbdwzIGFxEr +EPCkKvbdySmiNRag +DncLKvbdHEKujCKK +EPDLKvbddeOrCXDK +DoDLKvbdNGbolpUk +EOcLKvbdtlYXBTaX +EOcLKvbdqwQLcIyR +EObjjvbdIrxaSlxM +EObjjvbdbrcKtEKB +EOcKjvbdpxngfqDx +DoDLKvbdKfFhCApu +DoDLKvbdJvUfEEfi +DncKjvbdsQWOibuf +DoCjjvbdHgGyxxXg +DoCkKvbdZHWdAPTJ +DncKjvbdauBgYLTh +DoDLKvbdJYUCIMRQ +DncKjvbdbrbjtEJa +DnbjjvbdemFwHNJk +DnbkKvbdBvzcheQW +EPCkKvbdJqZePGNe +EPCkKvbdSKxeuGkT +EPDLKvbdIryBTMxM +EPCjjvbdwWlAuaVu +EOcLKvbdyTOJNRbH +EPCjjvbdQvmdClID +DnbjjvbdyTOJMqag +DncKjvbdrXQMDJYq +EPCkKvbdGdLVjBij +EOcLKvbdjJehJmXr +DnbkKvbdCJKakJGK +DoCjjvbdLrWlzUpz +EPCkKvbdhzVFlRNf +DoCjjvbdRDcApRES +EObkKvbdzROmJKXA +DncKjvbdxUmFRYlO +EPCkKvbdURQoVVIN +EPDLKvbdVZHtZkPO +DnbkKvbdatafwjsh +EObjjvbdNrtWGdtp +DoDLKvbdBiLCLJFj +EOcKjvbdmgFXmOHZ +EObjjvbdZRMeImEq +DoCjjvbdiMEdNtcZ +DnbjjvbdgFkzNfgA +DnbjjvbdGKdsDHmV +DncLKvbdIxUBhMRQ +DoDLKvbdjSzhrjiz +DoDLKvbdpyPHgRDx +DoDLKvbdqYoIGpdY +DoCkKvbdUQqPUuHm +EPCkKvbdBraDTfXS +DncKjvbdNrtWGeUp +DncKjvbdJqZdnenF +EPCjjvbdCWzdIePv +DoDKjvbdrXPlDIxq +EPDKjvbdauBgYLUI +EPCjjvbdQmXbYnUz +DoCjjvbdGGJqnJUR +EPDLKvbdkVvnEBww +EPCjjvbdTukoitBR +DoCjjvbdRkZFtgLT +DoDKjvbdEuyPpMie +EPCkKvbdSLYfUgLT +DnbjjvbdIwtBglQp +DnbkKvbdznpQeDMY +EOcKjvbdznpRFCkx +EPDLKvbdtumwjQsA +DoDLKvbdBhjajiGK +DoDKjvbdhlFDmuDZ +DnbkKvbdqquKnKaN +DncLKvbdMowqVmfs +EOcKjvbdqrUjnLAm +EObjjvbdqwQMDIyR +EPDKjvbdnCKXYPOV +DnbkKvbdHffyyXxH +DoCjjvbdlZSrTZGt +DoDLKvbdznpRFDMY +EPDKjvbdWWiXvDdg +DoDKjvbdRWnEClID +DnbjjvbdJcKCqKDY +EPDKjvbdJbjDQicY +DncLKvbdhaoDEwRR +DncLKvbdvAdZSoEh +DncLKvbdeEnrCWbj +DoDKjvbdVvhwvDeH +EOcKjvbdVAapsQqy +EPCkKvbdxnTIYSiD +EPCkKvbdrouoJbuf +EObjjvbdePEsKtUS +EPDLKvbdirziSkJz +DnbjjvbdhaoCdvqR +EPCkKvbdGZVVAdYC +DncKjvbdtbbuWuoP +DoCkKvbdLFehCBRV +DoDKjvbdLZRJrztf +EObkKvbdkHflGFmk +EOcKjvbdJYUCIMQp +EPDLKvbduCcVXWOo +EPCkKvbdptTfqqkU +DoDKjvbdGQATWgGZ +DncKjvbdEztQeMCi +EObkKvbdZtJJZETO +DoCjjvbdZsiIyETO +EObkKvbddndrjstS +EOcLKvbddeOqbXDK +DnbkKvbdCTBDUGXS +EPDKjvbdQlwayOUz +EPCjjvbdlqyUzTEJ +DoDLKvbdhtydvrUb +EOcKjvbdlZTSSyGt +EOcKjvbdmJDtQuSB +DnbjjvbdtSqsZZeD +DoDLKvbdUaBpsRSZ +EPDKjvbdLGFhBaRV +DnbkKvbdSBcdkhxk +DoCjjvbdDoDKkXDE +DoDKjvbdwyhFfYFS +EPDKjvbdOEctJIjd +EPCjjvbdEObjkWcE +EPDLKvbdhtzEvquC +EObkKvbdZjShQHCG +EPCjjvbdmIctQuRa +EPCkKvbdVwIwucdg +EOcLKvbdADRxJzJQ +EOcLKvbdWWiXvEEg +EPCjjvbdTAFIhBoE +EPDLKvbdZLqdTnMN +EPDLKvbdZQldhmEq +EOcKjvbdLLBIWAJy +DncLKvbdrMzKYlIJ +EPCjjvbdzitoodSt +EPDLKvbdLFehCAqV +DoCkKvbdrMyiyMHi +EPDKjvbdkVvmcaxX +EOcKjvbdmpZxvKxb +EPCkKvbdliDtRUrB +DncLKvbdkxsRsYft +EPDKjvbdTqROuVHm +EPCjjvbdSQTgJedX +EPDLKvbdHlBznXRL +DncKjvbdQdDBQRDr +EPDLKvbdliDsqVRa +DoDKjvbdjgflFfOL +EPDKjvbdeEoSCWbj +DnbkKvbdfSBWzkcP +EObkKvbdmIcspuSB +EPCjjvbdvAdZTPEh +DoCkKvbdIGfyxwxH +DnbjjvbdWWiYWDeH +EObkKvbdZQleImFR +DncLKvbdQwNdCkgc +EOcLKvbdQdDBPqES +DnbjjvbdrpWPJbuf +DoCkKvbdTulQKTaR +DoDLKvbdeUAUASlv +EPCjjvbdZQmFJNEq +DncLKvbdVBBqSqSZ +EOcKjvbdqceJPmvB +DncLKvbdZtIiYcrn +EOcLKvbdJSxaSmYM +DoCkKvbdqqtkOLBN +EObkKvbdgFkymfgA +DnbjjvbdVqmwadlD +DncLKvbdsBfNMGkZ +EPDKjvbdEPDKjwCd +EObjjvbdHDjvKBjK +DncLKvbdCTAbsevr +EObkKvbdFxuUaEXb +DoCjjvbdcyyQYZQb +EObjjvbdZsiIxdSn +EPDLKvbdZQmEhmEq +DnbkKvbdxnTIXriD +DncKjvbdfHkVrORH +EOcKjvbdddoSCXDK +EPCkKvbdhanbdvpq +EOcKjvbdRyihTDWA +DnbjjvbdajkeoODA +EOcLKvbdlhdTpuSB +EPDLKvbdhgJbxuiu +EPCjjvbdnHFXmNgZ +EPCkKvbdpecdsvAh +DnbkKvbdVZIUZjnn +DncKjvbdbAvFGPpX +DnbjjvbdkMalZeHP +EOcLKvbdYSlAmUOx +DoCjjvbdHDkWKCKK +EPDLKvbdaRecHsek +EPCjjvbdJXsagkqQ +EObjjvbdRMwbZNtz +EPCkKvbdrbGMlHKy +DncLKvbdKfGICApu +EPDLKvbdUtNTfLvK +EPCkKvbdMJCMRYAS +EOcLKvbdCJKbLJFj +DoDKjvbdfpBzvcxI +EObkKvbdYpldhmFR +EOcLKvbdSPsfiecw +DoCjjvbdHEKvKCKK +DnbjjvbdUGzmkwVe +DnbjjvbdfMfXGmJk +DnbkKvbdZoOIeEyj +EObkKvbdZnmhdeZj +EOcKjvbdTkuoBVoJ +EPCjjvbdGKdsChMu +DoDLKvbdJYTahLpp +EPCjjvbdbhmJkFwY +DoDLKvbdkIHMGGOL +EPDKjvbdZsiIxdSn +EPCjjvbdMgCpNQUk +DncLKvbdjblKqGtg +DncLKvbdOYOuzdNt +DncKjvbdTvMPjTaR +EPDLKvbdiiehKNXr +DoCjjvbdZdxGzghb +DoDLKvbdeOdsKssr +DoDLKvbddBsMrAUN +DoCkKvbdxxIjBozL +DoDKjvbddoErkUTr +EOcLKvbdwzIFeweS +DoDLKvbdREDBQRES +EObkKvbdhlEdOUby +DoCjjvbdNPxRWNgT +DoDLKvbdZLqctNlN +EObjjvbdbUbHXkUI +DnbkKvbdhtydwSVC +EPDKjvbdeUAUASmW +EObjjvbdhgKDYvJu +EOcLKvbdZnmhddyj +DoDLKvbdUVlQKUAq +DoDKjvbdDihJvXjA +DnbkKvbdZLrETmlN +EPCjjvbdxxJJbQZk +EPCkKvbdrounjDVf +DoCjjvbddiirVtzn +DoDLKvbdmttyjiqf +DncKjvbdfHjvSNpg +DoCjjvbdmRxuZsEJ +DoCkKvbdjAQGaQGj +DncLKvbdnVUzLJrG +EPCjjvbdLAjgNCXq +DoDLKvbdqmZixlHi +EPDLKvbdVUMsekvK +EPDKjvbdrMzKZMIJ +EPCkKvbdKDKCpicY +EOcLKvbdwtmEqZMO +EPDLKvbdmgFXlnGy +DncKjvbdyTNhlqbH +DncKjvbdnHFXlnHZ +DoDLKvbdTqROuUgm +DoDKjvbdRMwbZOUz +EPDKjvbdRMwbYmtz +DoDKjvbdZnmheEyj +EPCkKvbdbBWEfPow +DoDKjvbdQwNccLgc +DoCjjvbdhtzFWqtb +DoDKjvbdRotHKGEX +DncKjvbdZsiJZETO +EObjjvbdaNKbStlg +DoCkKvbdsZlQTAhO +EObjjvbdjhGlGGNk +EObkKvbdQdDBQQcr +DoDKjvbdMtrrLNAX +EPCjjvbdRotHKGDw +EPCjjvbdqZPIGqDx +EOcLKvbdiGicZViu +DnbjjvbdJvVGEFGi +DoCkKvbdKNAEZfuB +EPDLKvbdLZRJrzuG +DnbkKvbdhytfLpnG +EPDKjvbdRbEEkiYk +EOcLKvbdcJMjLFvx +DncKjvbdFfKRnItR +DoDLKvbdegjurORH +DnbjjvbdEPDKjvcE +EPCjjvbdkHgLeenL +DncLKvbdZnmheEzK +DncKjvbdZjSgpHCG +DoCkKvbdbBVdeoow +DoDLKvbdZQmEhleR +EPDLKvbdpxoHfpcx +EPCkKvbdSPtGjGEX +DncKjvbdRbDeLhxk +EObkKvbdrpWOibvG +DnbjjvbdfIKurNpg +EPDLKvbdZyEKNbkr +DoDLKvbdwXMAvBWV +EOcLKvbdWWiXvDdg +EOcKjvbdelfWfljL +DncLKvbdjuvnEBxX +DncLKvbdliDspuRa +EObjjvbdVTlsekuj +DoCjjvbderAvzlDP +EPDKjvbdNeDtIhkE +Dnbjjvbddwyssqez +EObkKvbdGGKRnItR +DoCkKvbdHbLzEzAD +EPCkKvbdTvMPjUBR +EObjjvbdTAEiIBoE +DoCjjvbdRjxfUgLT +DnbkKvbdnUuZkKRf +EPDLKvbdjmBkydgP +EObkKvbdNeDsiIjd +DncKjvbdrounjDWG +DnbjjvbdrWokbhxq +DoDLKvbdsPvPKDWG +DncKjvbdZdwfzgiC +EOcLKvbdZLqdUNlN +DoCjjvbdkDMLRHVH +EPDKjvbdirziSjiz +EObkKvbduDDUvuno +DoDLKvbdkHgMGGOL +DncLKvbdhkdcmuCy +EObkKvbdCJLCLIej +DnbkKvbdeFPRawCj +DncKjvbdsQVoKDVf +EPDLKvbdRXNccLhD +EObkKvbdFxttaDxC +EObkKvbdqrVKnKaN +EPCjjvbddoEsKtUS +EObjjvbdzaAOffbM +DoCjjvbdWSNxBdlD +EPCjjvbdqlzKYlIJ +EOcLKvbdQdDApRDr +DncKjvbdczZPwyRC +EOcLKvbdtlXwBUBX +EOcKjvbdmgFYNOGy +DoCjjvbdKVtfEFGi +EObkKvbdrNZjZLgi +EOcKjvbdliETqVSB +EOcKjvbdbVBgXkUI +DncLKvbdNHDPmPtk +DnbjjvbdjlakzEfo +EOcKjvbdVUNTfLvK +EPDKjvbdTXjkmzjx +DncLKvbdrylQTBIO +EPCkKvbdJpzEoGOF +DncKjvbdFeiqmhtR +DncLKvbdZnnJFFZj +EPDLKvbdlrZUzTEJ +EPDKjvbdLFfICBRV +EPCjjvbdcyxpXyRC +DoDLKvbdQdCaQQcr +DncLKvbdZsiJZDsO +EObjjvbdzQoNIjXA +DncLKvbdVqmxBdlD +DoDKjvbdRjxfUgLT +EObjjvbdWIYVxHYz +DoCkKvbdIGfzZXxH +DncKjvbdxsNhlqag +DoDKjvbdFWYopNJe +EPDKjvbdVBCRTRSZ +EPDKjvbdwyhFfXeS +DoCjjvbdziuPocsU +EPDKjvbdYSkaNUPY +EObjjvbdznopdcLx +EOcLKvbduMYWaUBX +EPDKjvbdnPzZWKyC +EObkKvbdZxcimbkr +EObkKvbdBhjbKiFj +EOcLKvbdjuwNdBww +EPDKjvbdmbKWxOnV +DoCkKvbdnHFYNNgZ +DoDLKvbdrMzKYkhJ +EOcLKvbdqdFIpNvB +EPDKjvbdcScKtDjB +EOcLKvbdygZMAMdw +EOcLKvbdsCGNLgLZ +DoDLKvbdaMkBsUlg +DncKjvbdlZSqsYft +DnbkKvbdnVUzLKRf +DoCkKvbdnHFXlmgZ +EPDKjvbdxZgfGYFS +DoCkKvbdxwiKCPzL +DnbkKvbdBcpAvKMf +DoCjjvbddZyQXxpb +DncLKvbdzQnmIjXA +EPDKjvbdFWZQQMjF +DnbjjvbdMgDQMpUk +DncLKvbdOFDtIiKd +DoDKjvbdKNAEZfta +EOcKjvbdhyuGMQmf +DnbjjvbdZnmhdeZj +DncLKvbdhbOcFXRR +EOcLKvbdvBEZSoEh +EOcKjvbdYkrEUOLm +EPCkKvbdNrtWGduQ +EPDKjvbdZjSgpHCG +EObkKvbdyzdmrHhh +DoDLKvbdznpQdblY +DncLKvbdZshhyDrn +DnbkKvbdjvWmdCYX +EOcLKvbdAMgxsWzY +DnbjjvbdwzIGGXdr +EPDKjvbdrNZixlIJ +DoDKjvbdsQWOicVf +DoDKjvbdjuvmdBxX +EObkKvbdzHZMANFX +DoDLKvbddjJqutzn +EOcKjvbdwNWAMdFN +DnbkKvbdTqRPUtgm +EOcKjvbdVYgtZkOn +EPDKjvbdNGcPlotk +DnbjjvbdJbjDRJcY +EPDLKvbdZtJIyESn +DoDKjvbdtcCuXVoP +DoCjjvbdZMSETmlN +DoCjjvbdgGLzNfgA +EPDKjvbdxKvcgzyf +EObjjvbdrMzKZMIJ +DncLKvbdMoxQumfs +EPCjjvbdbhlikFvx +DoDLKvbdRadFMJYk +DnbjjvbdHgGzYxYH +EObjjvbdVZHtZkOn +DnbkKvbdakLfPNcA +DoCjjvbdmfeXmOGy +DoDLKvbdrRtjmjaN +DnbjjvbdUxgsyjoO +DnbjjvbdbhlikFvx +EPDLKvbdRbEFMJYk +EOcKjvbdRXNcblHc +DnbkKvbdqmZixlHi +DoCjjvbdrzLpTBIO +DoCjjvbdILaznXRL +EPDLKvbdRjyGVGkT +EOcLKvbdehKurOQg +DncLKvbdYkrDsnLm +DoDKjvbdZisHpGaf +DncLKvbdpyPIGpcx +EOcLKvbdijFhKNYS +EOcKjvbdMuSqkNAX +EObjjvbdajlFnnDA +EOcKjvbduLxXAsaX +DnbjjvbdiiegjMwr +EPCkKvbdiMEdNuCy +EPCkKvbdqTtHSRkU +EPCkKvbdIryBTNXl +DncLKvbdFjdrcHlu +EPDKjvbdZoOIeFZj +DncLKvbdcbTNSATm +DoDKjvbddePSCWcK +DoDKjvbdZsiJYcsO +DoDKjvbdpeceTuaI +EOcKjvbdjhHMGFnL +EOcLKvbdjcLkRGtg +DnbjjvbdCJLCKiFj +EPDLKvbdZsiIxdSn +EObkKvbdVTlsekvK +EObkKvbdCTAcTewS +DoDLKvbdOYOuzcnU +EPCkKvbdiUydwRuC +DncLKvbdGQATXGey +EPDLKvbdDjIJvXjA +DncKjvbdpxoIHQdY +EObkKvbdZMSDsmkm +EOcLKvbdBvzchdov +EOcLKvbdKRZeOenF +DnbkKvbdwzIFfYEr +DnbkKvbdSKyFuHKs +EPDKjvbddCSlrATm +EObkKvbdSCDeMIyL +EPCjjvbdsCFllGjy +DnbjjvbdHgGyyYYH +DncKjvbdjKFgilwr +DncLKvbdEvYoomJe +EObkKvbdlhdTpuSB +DoDKjvbdWWiYVceH +DnbjjvbdLGGHbBQu +EObkKvbdOXoVzcnU +DnbjjvbdbsCjtDjB +DnbjjvbdQwOECkhD +DnbjjvbdMgComQVL +DoCjjvbdRotGjFcw +DnbjjvbdmajWxOmu +EPCkKvbdbPfgDkzd +Dnbjjvbdpxngfpcx +DoCkKvbdBraCtGWr +DncKjvbduDCtwWPP +EPDLKvbdYzcFrKVy +EObjjvbdbVBgXkTh +DnbkKvbdyYIibPyk +DncLKvbdUVlPitAq +EObkKvbdbKlGOnDA +DnbjjvbdrJAKFNPF +EPDLKvbdLAjgMbYR +DoCjjvbdSxLLmzjx +DncKjvbdeEnqawCj +EObkKvbdFWZQPmKF +EOcKjvbdGdKvJbJj +DnbkKvbdjcLjqHUg +EPCjjvbdQvnDcLgc +EPCkKvbddoFTLTtS +DnbkKvbdZtIhyDrn +EPDKjvbdBvzdIdpW +EObjjvbdEYYLstUM +EPCkKvbdyzdnSHiI +EObjjvbdZLqdTmlN +EPDLKvbdIHHZyXwg +DoCkKvbdbVBfxKtI +DnbkKvbdMpYRWOGs +EOcKjvbdczYoxYqC +EPCjjvbddwytTqez +EPCjjvbduaDySoEh +EObkKvbdTJZiqAAl +EObjjvbdmoyyWLYb +EPDKjvbdnPyxukZC +EObjjvbdrWolDJZR +DoCkKvbduCbtvvPP +EPDLKvbdJbicQibx +DncLKvbdHELVibJj +DnbjjvbdKefHbAqV +DncLKvbdsZkpTBHn +DoDKjvbduCcVXWOo +DnbkKvbdidkGtoAO +DnbjjvbdrEFIonWB +EPCkKvbdfpBzwEYI +DncLKvbdwuNFRZMO +EPDLKvbdrounjCvG +DncLKvbdxxJJaoyk +EPCjjvbdJmADzHUa +EPDLKvbdqGEFTvBI +EPDLKvbdyOShYTJD +EPCjjvbdJutecdfi +EPDLKvbdIMBznXQk +DncKjvbdmoyxvKyC +EPDLKvbdrXQMChyR +DoCkKvbddwytUSFz +DncKjvbdZjTHofbG +EPDKjvbdGcjujCJj +EPCkKvbdvBEYsOeI +DncKjvbdCTAcUGWr +EPCkKvbdmbKWwnnV +DnbjjvbdpxnhHREY +EObjjvbdlZTRsYft +DoCjjvbdhkdcmtcZ +EObjjvbdMfcPmPtk +EPCkKvbdJXtCHkpp +DnbjjvbdrSUjmkBN +EOcLKvbdYSlBMtOx +EObjjvbdznopdbkx +DncLKvbdddoSCXDK +DoCjjvbdOXnuzcnU +EPCkKvbdZGwEAOsJ +EOcKjvbdauCGwjtI +EPDLKvbdNHDPmPuL +EOcLKvbdNHCpMpUk +DoCjjvbdmSYtysDi +DncKjvbdFjeTDINV +DncKjvbdNrtWHFUp +EPCjjvbdmJETqUqa +DncKjvbdEzsqEkcJ +EOcLKvbdmoyyVjyC +EOcLKvbdZMSETnMN +EOcLKvbdBsAbtFvr +EPCjjvbdJutfEFHJ +DoCkKvbdiBoDEwRR +EPDLKvbdZQmFImFR +EPDLKvbdpfDdsuaI +DnbkKvbdmbKXYPNu +EObjjvbdjKGHjNXr +EOcLKvbdpssgSRjt +DoDLKvbdKRZePGOF +DnbkKvbdfekymgHA +DoDLKvbdiCOcFWqR +DnbjjvbdiHJbyWKV +DoDKjvbdsCGNMHKy +DoCjjvbdGKeSbgmV +DoDLKvbdkIGkfFnL +DncKjvbdfILWRnRH +DoDKjvbdGLEsChNV +EPCjjvbdVrNxBeMD +EPDKjvbdSLZGVHKs +EPDLKvbdQlxByOUz +EOcLKvbdMgDQNQVL +DoDLKvbdrRtjnLAm +EObjjvbdCIkBjhfK +DncKjvbdDwwlTssl +DoDLKvbdANIYsWzY +DnbjjvbdxVMdqYkn +DoCkKvbdzdynzdzQ +DnbjjvbdxsNhmRag +EObjjvbdzjVQPcrt +DoCkKvbdbBWFFopX +EPDKjvbdhfibxvKV +DnbkKvbdegjvRmqH +EPCjjvbdkNCMZdgP +EOcLKvbdmtuZkJqf +EObjjvbdemFvfljL +DncLKvbdyYIibPyk +EObjjvbdieKftoAO +DncKjvbdvOszqKoU +DncLKvbdVUNTelWK +EOcKjvbdCDoaWKMf +EPCkKvbdbsDKtDjB +EPDLKvbdmSYuZsDi +DncLKvbdwWlBWBWV +EObjjvbdkVwOEBww +EObkKvbdWSNwbFLc +DnbjjvbdZRNFImEq +DoDKjvbdrounjDVf +EPDKjvbdCJKbKhej +DncKjvbdsrrTYyeD +DoCjjvbdQvnEDMHc +DoCkKvbdGQASwGfZ +EOcLKvbdfSBWzkbo +DoDLKvbdRkZGVGkT +EOcKjvbdyXhjCPzL +EPCkKvbdbrbkTdJa +EPDLKvbdsQVnibvG +DnbjjvbdpyOgfpdY +DoDLKvbdtunXiqTA +EPDKjvbdqGDdsvAh +DncKjvbdjEkHUoAO +EPCjjvbdGQATXGfZ +EOcKjvbdKDJcRKCx +DncKjvbdhyuGMQnG +DoCkKvbdYkrDsnMN +DoCjjvbdaNKbSuMg +EOcLKvbdrykpTAhO +DnbkKvbdrSUkNkAm +EPCjjvbdwzHeeweS +DoDLKvbdSBdFMJYk +DnbjjvbdqUUGrRjt +DoDKjvbdzitoocrt +EPDKjvbdxnShXriD +DoCkKvbdVviXvEEg +EObkKvbdFxuUaDxC +EObkKvbdygZMAMeX +DnbjjvbdiifHilxS +EPDKjvbdZxcjODMS +DoDLKvbdWWhxWEFH +EPCjjvbdzoQQeClY +EOcLKvbdptUHRqjt +DoDKjvbdVviXudEg +EPDLKvbdUQpnuVHm +EPCjjvbdwzHfFweS +EOcLKvbdZxcjNbkr +EObkKvbdZnmhddyj +DoDLKvbdvlvANDdm +EOcKjvbdMfbolpVL +EObjjvbdbAvFFpQX +EOcKjvbdBdPaWJlf +DncKjvbdqceIonWB +DoCkKvbdtcDVWvOo +DoCkKvbddoFTKssr +DoDKjvbdaMkBruMg +EPCjjvbdEuyPolie +DnbkKvbdOEcsiJLE +DncKjvbdHlBznWqL +EPDKjvbdbhlijewY +EObjjvbdfoazwDwh +EOcLKvbdaNKbStlg +DoCkKvbdqdEiQOWB +DoCkKvbdTvLpKUBR +DncKjvbdkNBkzFHP +EObkKvbdFkErcHlu +DoCkKvbdZshiYcrn +EObjjvbdEJhJvYKA +DnbkKvbdOTUWHFUp +DoDLKvbdVhXvXfxz +EPDLKvbdBdPaWKMf +EObjjvbdFejRnJTq +EPDLKvbdULvPBVoJ +EPDKjvbdJzpFwdAN +EPDKjvbdqwPkbiZR +EPDLKvbdrEFIomua +EOcLKvbdijFhJlxS +DnbkKvbdYkrEUOLm +DnbkKvbdIMBznXQk +DncKjvbdZisHpHCG +EPDLKvbdzjUopESt +DnbjjvbdzjUpPcrt +EPDKjvbdqZOgfpdY +DoDKjvbduLxXAsaX +EObkKvbdrMyiyMHi +EPCkKvbdqTsfqrKt +DoDKjvbdTfznMXVe +EObkKvbddoErkUTr +EOcLKvbdHELWKCJj +DncLKvbdUVkpJtAq +EPCjjvbdRMxBxmtz +EPDKjvbdjEjftoAO +EOcLKvbdYkrDsmkm +DoDLKvbdajlFoNcA +DoCjjvbdmJDtRUqa +EPDKjvbdTqQoUuIN +DnbkKvbdtcDUvvPP +DncLKvbdrbGMlHLZ +DnbkKvbdKfGHbApu +DncLKvbdGFjRnIsq +EPDLKvbdJzpGYEAN +DoCjjvbdkySrSyHU +EObjjvbdKVtfDdfi +EPDKjvbdNrsugFUp +DoCkKvbdNxOuzcmt +DoDLKvbdDihJuxKA +DnbkKvbdzdzOzdzQ +DncKjvbdmSYuZrci +EOcLKvbdptTfqqkU +EPCkKvbdVUNTfLvK +DoCkKvbdGdKujBjK +DoCjjvbdzitopETU +DoDKjvbdqvokbiYq +EPDLKvbdGFjSOJTq +DoDKjvbdliETqUrB +DoDKjvbdZisIQGbG +DoCjjvbdnQZyWLZC +EOcLKvbdGdKujCJj +EPCkKvbdaRfDIUGL +EOcKjvbdauCHXjtI +DnbkKvbdbQHHDkzd +DoCjjvbddZxpYYpb +EObkKvbdbBWEepPw +DncKjvbdSLYfVGkT +EObkKvbdVgxVxHYz +DoCjjvbdfpBzwEYI +DoDKjvbdmfdxMmfy +DncKjvbdhancEwRR +DnbkKvbdEASJMzXX +EObjjvbdmfdwmNfy +DnbjjvbdhbOcFXQq +DoCjjvbdVgxVxGxz +EPCkKvbdQcbaQQdS +EPCjjvbdhbObeXRR +EPDKjvbdePFSkUTr +EPDLKvbdMoxQumgT +DoCkKvbdIBkydzAD +EOcLKvbdcasMrAUN +DoCkKvbdUQqOttgm +DnbkKvbdelevfljL +EObjjvbdZeXfzgiC +EPCjjvbdQYmAGrrK +EObjjvbdxZhGFxFS +EObjjvbdJuuGEEgJ +DoDLKvbdEARhlyvw +EPDKjvbdZdxGzhJC +DoCkKvbdzRPMhiwA +DoCkKvbdZxcinClS +EOcKjvbdFyVVBEYC +EOcLKvbdtbcUwVoP +DncLKvbdlZSrTYft +EObkKvbdaaVeGPow +DncLKvbdEKIJvXjA +DncLKvbdbhljKfWx +EObkKvbdVhYVxGxz +EPDKjvbdmpZxukZC +DoDLKvbdnBivxOnV +EObjjvbdRbEEkiZL +EPCkKvbdZRNFIleR +DoDLKvbdZyEJmblS +DncKjvbdkIGkefNk +EPDKjvbdRkZGVGjs +DnbkKvbdiHJbyVjV +EPDLKvbdFjeSbglu +DncLKvbdqFcdtVaI +EOcKjvbdGYuVAdYC +DoCjjvbduaEZSneI +DnbjjvbdKWVFdFHJ +EObjjvbdGdLVjCJj +DnbkKvbdpssgSSKt +DoCjjvbdssRryZdc +EPDKjvbdZisIQHCG +EOcKjvbdCIjajhfK +DoDKjvbdrafNMGjy +EObkKvbdgQBzwEXh +DnbjjvbdgQBzwDwh +DncKjvbdCEQAvKMf +EPCkKvbdiCOcFWpq +EPDLKvbdLFfHbBQu +EPCjjvbdJTYaSmXl +EPCjjvbdRjyFuGkT +DoCkKvbdjFKftoAO +DncKjvbdmaiwXoNu +DoCjjvbdVZITyjnn +DoDLKvbdDxYLtUTl +DnbjjvbdqvpLcJYq +EOcLKvbdlqxuZsDi +DoDKjvbdZshhyDsO +DoCjjvbdGFjSOIsq +DnbkKvbdcScKtEKB +EPCjjvbdMpXqVmfs +EPCjjvbduoTzpjoU +DoDLKvbdYkqctNkm +EObkKvbddoErjstS +DnbjjvbduLxWaUAw +DoCkKvbdRXODbkgc +DoCjjvbdwzIGFweS +DoCkKvbdZyEKOClS +EObjjvbdiGjCxvJu +EObkKvbdbiMijewY +DoDKjvbdqrVKmkBN +DoCkKvbdFyUuBEYC +DoDLKvbdNsTufduQ +DoDLKvbdEPCkKvcE +DoDLKvbdNQYRWNgT +DnbjjvbdNrtWGeUp +DoCjjvbdPxmAGrqj +EPDKjvbdKNAEZgVB +EPDKjvbdmttzKjSG +EPDKjvbdssSSxydc +DoCjjvbdTlWPAuni +EObjjvbdDHLegAzc +EObjjvbdXnRAXtvU +EObkKvbdKfFgaaQu +EOcKjvbdhtzFXSUb +EPCkKvbdJTZAsMwl +EOcKjvbdQYmAGsSK +DoCkKvbdjhHLeemk +EOcLKvbdiifIJmYS +EPDKjvbdLrWlzVQz +DoCjjvbdxsOIlrBg +EPDLKvbdNPxQvNfs +DnbkKvbdIGfyxwxH +DoCjjvbdjKFhKMwr +DnbjjvbddjKSVtzn +DoCjjvbdZoNiFEzK +EPCjjvbdeFOqavcK +DoDLKvbdEuxpQMie +EObjjvbdZjShQHCG +DoDLKvbdZMSDsmkm +DoDLKvbdGYtuBEYC +EPCjjvbdUaBprqRy +EOcLKvbdmozZWLZC +DncLKvbdUWLpKUBR +EPCjjvbdqYnhHQcx +DoDLKvbdUaBprpqy +EPDKjvbdrzMQSaHn +DnbjjvbdGdLWKCJj +EObkKvbdfILVrNqH +EPCjjvbdehKvRmqH +EPDKjvbdOSsvGeVQ +DncLKvbdxxJJaozL +EPCjjvbdZLqctNkm +EOcLKvbdZxcinCkr +DncLKvbdkWWmcbXw +DoDLKvbduCcVXWPP +DncLKvbdyTNhlqbH +DncKjvbdYTMAlsoY +DoCkKvbdRosfjFcw +EPDLKvbdDwxLsstM +EOcKjvbdlZTRryHU +DoCjjvbdNGbpMpVL +EOcLKvbdYgWdAOri +DoCjjvbdDxYLstTl +EObjjvbdIwtBglRQ +EOcKjvbdvPTzpkPU +DoCjjvbduLxXAtBX +DoCjjvbdiLeENuCy +DnbjjvbdUaCRSqRy +DnbjjvbdYpmEhleR +EObjjvbdsPvOjDWG +DoCkKvbdLFfICApu +DncKjvbddxZstRez +EPCkKvbdFyVVAdXb +DoCjjvbdFyVVBDxC +DoDLKvbdFeirNiTq +EPCjjvbdxnSgxTIc +EOcKjvbdAMgySwZx +EObkKvbdkyTRryHU +DoCkKvbdMRwMzUpz +DnbjjvbdCWzdJEov +DoCkKvbdUyITzLPO +EPCkKvbdcSbjsdKB +DoCkKvbdqceIonVa +DoCkKvbdjmCMZeGo +DncKjvbdfMewGljL +EObkKvbdpfEEtVaI +DoDLKvbdczZQYYqC +DoDLKvbdRNXbYmtz +EObjjvbdTvLojUBR +EPCkKvbdtbcVXWPP +DncLKvbdmSYuZrdJ +DoDLKvbdTukpKUBR +EPDLKvbdsQVoKCvG +EPDLKvbdBraCtFvr +EPDLKvbdZQmEiNEq +EPCjjvbdrzLosAgn +EPCjjvbdssRsZZdc +DncKjvbdbAudepQX +DncKjvbdcTDKscia +DncLKvbdlqyVZsEJ +EOcLKvbdbVCHXkTh +EObkKvbdYTMBMsnx +DnbjjvbdULvPAuoJ +DoCjjvbddtAUASlv +DoDKjvbdxUmEpxkn +DncKjvbdQwOEDLgc +DoCkKvbdSPsgKGDw +DncKjvbdiCOcFXQq +EPDKjvbdRkYfUfkT +EObkKvbdKCjDRJcY +DoCjjvbdZLqctOMN +EPCjjvbdUWLpKTaR +EPCjjvbdLqwMzVQz +DnbjjvbdnBivxPNu +EObkKvbdRpUHKFdX +EPCjjvbdeATqNXif +DoCjjvbdfILVrOQg +DoDKjvbdNrtVfeUp +EOcLKvbdNUrrKmAX +EPCjjvbdrbFllHLZ +DncKjvbdkDMLQgUg +DoCkKvbdVvhwvDeH +DnbjjvbdKeegaaRV +DoDKjvbdcJMjKfXY +DnbjjvbdZtJJYcrn +DoDLKvbdyqOliJwA +DoDLKvbdMgDPmPuL +DoCkKvbdHffzZXxH +DoCjjvbdZxdKNblS +EPDKjvbdkDLjqGtg +EPDKjvbdYzbeqjVy +DncLKvbdTppnttgm +EObkKvbdVYgtZjnn +EPCjjvbdzaAOgHCM +EOcKjvbdcyxoxZRC +EPDLKvbdxnSgxTJD +EObkKvbdfMfXHNJk +EPDKjvbdunszpjoU +EObkKvbdFfKRmhsq +EOcLKvbdhtydwRtb +DoDLKvbdYkrDsnLm +EPDLKvbdGGKSOItR +EPCkKvbduDCuXVno +EPDLKvbdrEFJQOVa +EPDLKvbdIjEAKQGd +EObjjvbdIryArmYM +DoDLKvbdYkqctOMN +EPCkKvbdiZtekqOG +DncKjvbdzdzOzeZp +DoDLKvbdbiNKLFwY +DnbkKvbdlhcsqUrB +DnbkKvbdKyRJrzuG +DoDKjvbdOFDtIiKd +DnbjjvbdvvlBWBVu +DnbkKvbdlrZUyrdJ +EObkKvbdxZgeewdr +DncKjvbdegkVrNpg +DoCjjvbdrJAJeNPF +EObjjvbdmfeXmOHZ +DoCjjvbdNPwqVmfs +DnbjjvbdnPzYvLZC +EPDKjvbdZshiYcrn +EOcLKvbdhgJcYvJu +DoDLKvbdXrlAmToY +DnbkKvbdwWlAvBVu +DnbkKvbdjvWnEBww +DoDLKvbdTYLLmzjx +EOcKjvbdDihJuxKA +DncLKvbdTfznLvue +DoCjjvbdVgwvXgYz +EObjjvbdsBfMkgKy +EPCjjvbdUaBqTQrZ +DnbjjvbdbhmJkGWx +EPCjjvbdLBLGmCYR +DoDKjvbdwjwEHzyf +EPDLKvbdegkVrNpg +DoCkKvbdJpzEnfOF +EPCkKvbdFejSOItR +DnbjjvbdTqQnuUhN +EOcLKvbdUMVoAvOi +EPCkKvbdSCEFLiZL +EPCkKvbdnCKXYPNu +EPDLKvbdZyEKNbkr +DncLKvbdZisIQGaf +EObjjvbdGLEsDHmV +DoCjjvbdBcpAujNG +EObjjvbdZRNFIleR +DnbjjvbdVrOXaeLc +EPCjjvbdHELViaij +EOcLKvbdqcdhpNvB +EPCkKvbdiZuFkqOG +DoCkKvbdOSsufeVQ +DoDLKvbduoTzpjnt +EOcLKvbdTqRPUuHm +DoDLKvbdCDpAuilf +EOcKjvbdZMSDsnMN +DoDLKvbdYqNFJMeR +DnbkKvbdbAvFFpPw +EOcKjvbdVqmwaeMD +EPCkKvbdUyHsyjnn +EPCjjvbdKeehBaQu +DoCjjvbdZshiYdTO +EObkKvbdTvMQJsaR +EPCjjvbdjblKqHUg +DnbkKvbdYlSDtOMN +EObkKvbdrWpMCiZR +EOcKjvbdUGzmlWue +DncKjvbdFyUuAcwb +EPCkKvbdLZQjSztf +EPCjjvbdfjfzbfAE +DncKjvbdFWZQQMie +DoCjjvbdVgxVxHYz +EOcKjvbdWWhxWEFH +DoDLKvbdUWLoitAq +DoDLKvbdzaAOffbM +EOcLKvbdrXPkbiYq +DoCkKvbdYzberKVy +DncLKvbdIMBznWpk +EPCkKvbdEPCkKwDE +DnbkKvbdWWiYVcdg +DoCkKvbdCWzchdpW +EOcLKvbdjvXNcbYX +EPDLKvbdSxLMNzjx +DnbjjvbdhficYuiu +DncLKvbdvmWAMdEm +EObjjvbduaDyTOdh +DncKjvbdwWlAvBWV +DoDKjvbdVviYWDeH +EOcKjvbdNsUWGdtp +DoCjjvbdzjVPodTU +EPCkKvbdmIcsptqa +EPDLKvbdIHHZxxYH +EPDLKvbdUyIUZkPO +EObkKvbdCDpBWJlf +EPDKjvbdWSNwaeMD +DoCjjvbdACrXjZhp +EPDLKvbdwuMdqYlO +DnbjjvbdHlBznWpk +DnbjjvbduaDyTPEh +DnbjjvbdwuNFRZLn +EObjjvbdajkfOnDA +DnbkKvbdWWiYWEEg +EPDLKvbdffLymgHA +EOcLKvbdkDMKpfuH +EPDLKvbdMoxQvOHT +DnbkKvbdbKkenmcA +DoCjjvbdhytfMRNf +DoCjjvbdIsZAsNXl +DoDKjvbdLiBkqYAS +DncLKvbdyzdmrHiI +DnbjjvbdemFvfmJk +EOcLKvbdSCEEkiYk +DoDKjvbdbiNKKevx +DoDLKvbdaaVdeoow +DnbjjvbdNGcQNPuL +DncLKvbdQYmAGrrK +EPDKjvbdrbGMkfjy +EPCjjvbdZjShPfbG +DnbjjvbdJmADyfuB +DnbjjvbdhtzFWquC +DnbjjvbdQvmdDMID +DncLKvbdjvWnEBww +EPCjjvbdxZgfGXdr +EObkKvbdDihKWXjA +EPCkKvbdZMSETnLm +EPDKjvbdZLqcsnMN +EObkKvbdqwPlDJZR +DoDKjvbdZisIQGaf +EObjjvbdjlalZeGo +DncKjvbdxsOJMqag +DoDKjvbdOFEUIhkE +DoCkKvbdzitoodSt +DncLKvbdVrNwaeMD +DoCjjvbdezuyEiTw +EPDKjvbdiCOcEvpq +DoCjjvbdvvlAvAvV +DnbjjvbdJuuFceHJ +DoCjjvbdlYrrSyGt +EPCkKvbdfILVrNqH +DoDLKvbdxsOJNRbH +DncKjvbdIwtBgkpp +DnbkKvbdOTUWHEtp +EPDKjvbdFejRnIsq +DnbjjvbdVBCRTQrZ +EPCjjvbdiMEcnUcZ +EObkKvbdiZuGMRNf +EOcKjvbdatbHYLTh +DoCkKvbdmSZVZrdJ +DoDKjvbdqTsgRqjt +DoDLKvbdCEQBWKNG +DnbjjvbdZtJJZESn +DncLKvbdIHGzZXwg +EPDLKvbdwtmFRZMO +DoCjjvbdKDJbqJcY +EObkKvbdatbHXkUI +DnbkKvbdYqNEhleR +EObjjvbdNHColotk +EPDKjvbdegkWSNpg +DoDLKvbdRjyFtfjs +DoCjjvbddoEsKtUS +EOcLKvbdsQWOjCvG +DoCkKvbdvAcxsOeI +EObjjvbdbAueGQQX +EOcLKvbdxKwEHzzG +DoDKjvbdqTtHSRkU +EOcKjvbdOAIsUKSA +EPCjjvbdWSNxCElD +EPDLKvbdnCKWwoNu +DncLKvbdEARiMzXX +DoCkKvbdbAvEeoow +EOcKjvbdhgJcYvJu +DnbjjvbdTulPisaR +DnbjjvbdIidAKQGd +EPDKjvbdyOTIXrhc +EPCkKvbdrbFmLgLZ +EPCjjvbddeOqbXDK +DncKjvbdRacdlJZL +EOcLKvbdbsDKtDjB +EPCjjvbdUyHtZkOn +EObkKvbdyTOImSBg +DncKjvbdtbbtwWPP +EPDKjvbdKDKDRJcY +EObjjvbdhanbeXQq +EOcLKvbdvvlAuaWV +EPDLKvbdVYgsyjoO +EPDLKvbdKaKflawq +EOcLKvbdCIjajiFj +EObkKvbdUsmUGMWK +EPDLKvbdIjEAJofd +EOcLKvbdqBJFAWhE +EPCkKvbdEJgivXjA +DnbkKvbdYkqdTmkm +EPCkKvbdliDsqUrB +EObjjvbdKVtfEEfi +EObkKvbdmgFYMmgZ +EObjjvbdEARhlyvw +DncKjvbdaRecHtGL +DnbjjvbdNQYRVmfs +EOcLKvbdFfKRnJTq +DncLKvbdMgDQNQUk +EObkKvbdHgGyyXwg +EPCkKvbdCJKbKiFj +EPCkKvbdBraDUGXS +EPDLKvbdiMEcnVCy +DoDLKvbdkCkkQfuH +EOcLKvbdwtmFRZLn +EPDKjvbdKefHbApu +DnbkKvbdkxrqsZGt +EPCkKvbdfIKvRmqH +EOcKjvbdDnbkLWbd +EPDLKvbdaRebhTek +DoDLKvbdjuwODaxX +DnbjjvbdREDBPpdS +DncLKvbdjuwNcaww +EOcKjvbdbiMjKevx +EPDKjvbdqvpLcIyR +EPCjjvbdijGIKMxS +EPDLKvbdQmYCZNtz +EObjjvbdCDpAvKMf +EOcLKvbdJJdAKPgE +DoDKjvbdUxgszLOn +DnbjjvbdOEcshhjd +DoCjjvbdUaCRSprZ +EPCkKvbdxmrhYTJD +EPDKjvbdICLydzAD +EPCjjvbdKRZdoFme +EObkKvbdNdctJIjd +EPCjjvbdKVuFdEgJ +EObjjvbdrXPlDIyR +DoCkKvbdfMewGmKL +DnbkKvbdIwsahMQp +EOcLKvbdRaceMIxk +EPCkKvbdcyxoxZQb +EObjjvbdRkYeuGkT +DncLKvbdbVBfwkTh +EObjjvbdTppoVUhN +EPCjjvbdhytfMROG +EOcKjvbdUxgszKoO +DoCjjvbdGLEsDHlu +EObkKvbdegkVqmqH +DncKjvbdkMbLyeGo +DncKjvbdyzdmqghh +EPCkKvbdGFiqnIsq +EPDKjvbdpstGqqjt +EPDKjvbdYkrDsmkm +EPCkKvbdKaLGlbXq +DoCkKvbdxwiJbPyk +EPCkKvbdJcKDQibx +EPCkKvbduDCuXWPP +DnbjjvbdiGicZWKV +DoCkKvbdsPunicWG +DnbjjvbdKNAEZgVB +EPDLKvbdnPyxujyC +EObkKvbdJXsagkpp +EObkKvbdNddUIiKd +DnbjjvbdQwOEClID +DnbkKvbdFVxpQMie +EPCkKvbdVrNxBeLc +EPCjjvbdUsmUGLuj +EPDLKvbdGZVVBDwb +DoCjjvbdmRyUyrdJ +DncKjvbddZxoxZQb +DnbjjvbdGKdsDINV +EObjjvbdrafNLgKy +DoCjjvbdJbjCqJbx +DnbjjvbdlYsSTYgU +DoCkKvbdQvnDblID +DoDKjvbdssSTYzFD +DncKjvbdmozZVkZC +EPDKjvbdjbkkRGuH +DoDLKvbdxmrgwriD +DoDKjvbdfHkVrORH +EPCkKvbdJuuFceHJ +DoDKjvbdcbSlrATm +EPCkKvbdeATpmXif +DncLKvbdBiKajhej +EPCkKvbdrNZixlIJ +EPDLKvbdKVteceGi +EObkKvbdzjVPodTU +DoDLKvbdWSNxCEkc +EOcKjvbdZxcimcLr +EOcKjvbdZnnIeEyj +DnbkKvbdmbKWxPOV +EPCkKvbdZLrETmkm +EPDKjvbdnUtyjiqf +DoCkKvbdrWpLcJZR +DoCkKvbdaMkCStmH +DncLKvbdFVxpQMie +EPCjjvbdrpWOicWG +EOcKjvbdyOTIYShc +EObkKvbdqrVLNkBN +EOcLKvbdQvnDbkhD +EOcLKvbdDigiuxKA +DncLKvbddoErkTtS +DoDKjvbdRWmdDLgc +EPCjjvbdiHKDZVjV +DnbkKvbdADSYKZiQ +DnbkKvbdsPunibuf +DoCjjvbdSPsfiedX +EPDKjvbdJmAEZfta +EOcKjvbdZMRcsnLm +DoCkKvbdiLddOUcZ +EObkKvbdqqtkOLAm +DoDLKvbdYpmFImFR +EObjjvbdVhYWXfxz +DnbjjvbdMowqWNfs +EObkKvbdVgwuwgYz +DoDKjvbdDxYLsssl +DnbjjvbdZtIiYcsO +DnbkKvbdxwiKBpZk +DoDKjvbdEuxpPmKF +EOcKjvbdJcKDRKCx +EObkKvbdUtNUFlWK +EOcKjvbdjhHLfFnL +DoCkKvbdSQTgKGDw +DncLKvbdQccBQRDr +DncLKvbdILazmwRL +DoDKjvbdYTMBNUPY +DoDLKvbdKaKfmCXq +EPCjjvbdkIHMGGOL +DnbjjvbdCIjbKhfK +DnbkKvbdVgwuwfxz +EPCjjvbdwtmFQxkn +EPDLKvbdcyyQYZRC +DoDKjvbdPyNAGsRj +EObjjvbdSLYetgLT +DoDLKvbdMRwNZuQz +DncKjvbdFjdrcHlu +DoCjjvbdZyDimbkr +DnbkKvbdRXNdClID +EObjjvbdEYYLtUTl +EObkKvbdVqmxBdlD +DoDLKvbdptTgRqkU +EOcLKvbdBdPaWKMf +EPCjjvbdiBncEvpq +DoDLKvbdzQoNJKXA +DoDKjvbdUQpoUtgm +DnbkKvbdrzLpTBHn +DoCjjvbdunszpkPU +EPDLKvbdSZjHsCvA +DncKjvbdRotHJfDw +DnbkKvbdFejSOItR +EOcKjvbdeFOrBwCj +DoDLKvbdkVwNdCXw +EPCkKvbdeOdrjtTr +EPCjjvbdhuZdwRuC +DnbkKvbdfILVqmqH +DncKjvbdnPzYvLYb +DncKjvbdHgGzZYXg +DncKjvbdkVwNcaxX +DoDLKvbdOAJSsjSA +DncKjvbdOFDtJIjd +EOcLKvbdVgwvYGxz +EObkKvbdsQVnjDWG +DoCjjvbdZjShQHCG +DncKjvbdzoPpeCkx +DoDLKvbdSLZFtfjs +DnbkKvbdBsBCtFvr +EOcLKvbdFyUuAcwb +DnbjjvbdqUTfqrKt +DoCjjvbdZxdJmcLr +DncLKvbdmbJwYPOV +EObjjvbdEObjkXDE +EOcKjvbdaSFcIUGL +EPCkKvbdqYoIHQcx +EOcKjvbdfNGWgMjL +DoCjjvbdbrcKtEKB +EPCkKvbdvBDxsOdh +DnbjjvbdtcCuXVoP +DnbjjvbdrpWPKDVf +EOcKjvbdwyhFfYFS +EPCjjvbdnPyyWLZC +EPDLKvbduMYXBUAw +DoDKjvbduaDySoFI +DoCjjvbdyXiKCPzL +DncLKvbdGFjSOIsq +DoDLKvbdeEoRbXDK +DncLKvbdcTCjtDia +DnbjjvbdnUuZjiqf +DnbjjvbdjlakzFHP +EOcLKvbdwWlBWAvV +DnbkKvbdWWiXuceH +EObkKvbdemGWfmKL +EObkKvbdmuUykJrG +DoCkKvbdmozYvKxb +DncKjvbdQZNAGsSK +EObjjvbdjblKpgUg +DncKjvbdSZigsDWA +EOcLKvbdZyEJmblS +DoCjjvbdnCJwYOmu +EPDKjvbdtkxWaTaX +EPDKjvbdGZUuAcwb +DoCkKvbdyfxlANEw +EPCkKvbdTAFJIBnd +DncKjvbdZLqctOMN +DncKjvbdUMWPBWPJ +EPCkKvbdDwwksstM +EPDKjvbdEObjjvbd +EObjjvbdWXJYWEEg +DnbjjvbdpaIeAXIE +DoCjjvbdqYoIHREY +DnbjjvbdvmWAMceN +EObkKvbdLFfHaaQu +EOcLKvbdpaIeAWgd +EPDLKvbdkCkkQgUg +DnbjjvbdePErkTtS +DnbkKvbdNGbomQVL +DoDLKvbdEPCjkWcE +DoCkKvbdehLWRnRH +EOcKjvbdyXhibQZk +EOcLKvbdZyEKOCkr +DoCjjvbdkDLkRGtg +DoDLKvbdkaNPNALA +EObkKvbdrWpLbiYq +DoDLKvbdfHkVqmqH +DoDLKvbdEOcLKwCd +DoDKjvbdrykpTBHn +DncKjvbdxZgefYFS +DnbkKvbdJpzFPFnF +DoCkKvbdNGcPmPtk +EPCjjvbdhzUelRNf +EObkKvbdVTltFlWK +DoCkKvbduaDxrneI +EObkKvbdSQTgJfEX +EOcKjvbdVhYVxHYz +EOcKjvbdkCkkQgUg +EObkKvbdqUUHSSLU +EOcLKvbduLwwAtAw +EPDKjvbdZLrETnMN +EObkKvbdmttyjjRf +DoDKjvbdYqMdiMdq +DoCkKvbdkNBkzEfo +DncKjvbdiLeDnUcZ +DoDKjvbdZLrDsnLm +EPCkKvbduVnYKRTA +EPCjjvbdCIkCLJFj +EPDKjvbdssRrxyeD +DncKjvbdQwOEClHc +EPCkKvbdwXLaWAuu +EPCkKvbdUyHszKoO +EPCkKvbdJYTagkqQ +DoCkKvbdwuNFRYlO +EPCjjvbdfHkWRmqH +EOcKjvbddeOqbXCj +EObkKvbdhficYujV +EPCkKvbdmSYtzTEJ +EPCjjvbdtkxWaTaX +EPDLKvbdwygfGYEr +EPDKjvbdmpZxvKyC +DoCjjvbdpstGrSLU +EPDKjvbdUtMtGLuj +EOcKjvbdjlbLzFGo +EObkKvbdkyTSTZGt +EOcLKvbdLYpjSzuG +EPDLKvbdyXhibQZk +DncKjvbdptUHSRkU +DnbjjvbdFfKRmhtR +DoCjjvbdtbcUwVoP +EPDKjvbdhyuFkpnG +EPDLKvbdFpASwHFy +EPCjjvbdRbDeLiYk +DncLKvbdXmqAYUut +EObjjvbdqlyjZLgi +DoCjjvbdssSTYydc +DnbkKvbdTIzJqABM +EPCkKvbdxsOJNRag +EPCjjvbdlhcspuSB +EObkKvbdqUTgSRjt +EOcKjvbdOEcshhkE +EObjjvbdzjUpPdTU +DnbkKvbdvwLaVaWV +EPCjjvbdmoyyVkYb +DoCkKvbdOFETiJKd +EPCjjvbdeEnqawCj +EObjjvbdmuUzKjRf +EPDLKvbdVvhxVdFH +EPCkKvbdaSGDHsek +EPCjjvbdkySrTZHU +EObjjvbdtAGqIABS +EObkKvbdZyEJmblS +DncKjvbdyTOJMrCH +DncLKvbdFWYoolie +DoDLKvbdTvMPjUAq +EObjjvbdZLqctOLm +DnbkKvbdmIctQuSB +DoCkKvbdZGvdAPTJ +DoCjjvbdkDMLRGuH +DoDLKvbdnVUykKSG +DoDKjvbdLGFhBaRV +DncLKvbdxwiKBozL +DncLKvbdWIYWXgYz +DncLKvbdFkFSbglu +DoDKjvbdIGgZxxXg +DnbjjvbdEztRFMDJ +DoDLKvbdZQldiNEq +EOcLKvbdwWkaWAvV +DoDKjvbdLBLHMawq +DoDLKvbdkMbLzFGo +EPDKjvbdREDAopcr +DoCkKvbdZoNiEdyj +EPDLKvbddneSkUUS +DnbkKvbdSQUHJecw +DoCjjvbdZshhxcrn +DnbjjvbdRkZFuHLT +EPDKjvbdwuNEqYkn +DoDLKvbdemGXGmJk +EOcLKvbdKWVGDeGi +DoCkKvbdWSOXadkc +EObjjvbdVTmTelWK +DncKjvbdhkeDmuDZ +EPCkKvbdRWnEDMID +DnbjjvbdNQYRVnGs +DnbkKvbdTfzmlWvF +DoCkKvbdFpASvgGZ +DoCjjvbdqTsfqqkU +EObkKvbdUVkpKUAq +DoDLKvbdrRtkNjaN +EPCkKvbdrJAKEmOe +DncKjvbdIGfyyYXg +DnbjjvbdZLrDtNkm +EObjjvbdiMEcmuCy +DncKjvbdkyTSTZHU +DncLKvbdBsAbtFvr +DnbkKvbdrpWPKDWG +DncKjvbdbBWFFoow +DoDLKvbdxmsIXsJD +DnbkKvbdehLWRnRH +EObkKvbdiVZeXRuC +DnbkKvbdOTUVfduQ +DncLKvbdZjTIQHCG +DoDLKvbdOSsugFVQ +DoCjjvbdrafNLgKy +EPDLKvbdNPxRVmgT +EPDKjvbdHlBznXQk +EPCkKvbdCEQBWKMf +EObjjvbdtcDUwWOo +DoCjjvbdZMSDtNlN +DoDLKvbdvAcxrneI +EObjjvbdIxUCILpp +EOcKjvbdfSBWzkbo +EObkKvbdShzKRAAl +DnbjjvbdGZUuBDxC +EObkKvbdqlzKYkhJ +EPDKjvbdZyEKNbkr +DoDLKvbdsrrTYzFD +DoCkKvbdfSAvzkcP +DnbjjvbdqlzKYlHi +EPDKjvbdYTLaNToY +EPCjjvbdjEjgUoAO +EOcKjvbdTJZjRABM +EObkKvbdYORAXtvU +DoDLKvbdGKdrcHmV +DoDLKvbdbrcLUEJa +DncLKvbdqvpLcJZR +DnbkKvbdFeiqnIsq +EPDKjvbdZnnIeEzK +EPCjjvbdnUtzLKRf +DoDLKvbdDxXlUUTl +DoDKjvbdiMEcnUby +EObkKvbdYzbeqjWZ +DncKjvbdTvLojUAq +EOcLKvbdjuvmdBxX +DnbjjvbdzoPpdcMY +DoDKjvbdrovOibuf +DoDKjvbdFWZPomJe +DoDKjvbdqGDeUWBI +DoCkKvbdWWiYVdEg +EObkKvbdtvOXiqTA +DnbjjvbdqZPIGpdY +EObkKvbdLBKgNCYR +DoCjjvbdLBKgNCYR +EObjjvbdZsiJZESn +DoCkKvbdTqROtuIN +EPCjjvbdyfyMAMdw +EOcLKvbdptTgSSLU +DncLKvbdPxmAHTSK +DnbjjvbdRkZFtfkT +EPDLKvbdtlXvaUAw +EPCkKvbdqBJFAWhE +EPCkKvbdIidAJogE +EPDLKvbdKQydoGOF +EObkKvbdauCGwkTh +EPCjjvbdNddUIiKd +DoDLKvbdFfKRmhsq +EPCkKvbdeEnqbXCj +EObkKvbdJvVGDdfi +DoDKjvbdWRmwaeLc +EObkKvbdSCDeLiZL +EPDKjvbdDoDLLWcE +EPDLKvbdiMEcnUby +DnbjjvbdLBLGmBxR +EPCjjvbdZnmiEdyj +EObjjvbdVhXuwgYz +DncLKvbdUtNTfMVj +EPDLKvbdKaKgMaxR +DncKjvbdJcJbpicY +DnbkKvbdSKyGVHLT +DoDKjvbdzROlhjXA +DnbkKvbdlrZUysEJ +DoCkKvbdnQZyWLYb +DoCjjvbdeFOqbWbj +EOcLKvbdjgfkfGOL +EObkKvbdiHJbyWKV +DnbkKvbdGdLVibJj +DoDKjvbdGLErcINV +EPCjjvbdNGcPlpUk +EOcKjvbdjFLGtoAO +EOcKjvbdsBfMlGkZ +EObjjvbdhtydvquC +DoCjjvbdznpRFCkx +DncLKvbdYSkaNUOx +DoCjjvbdVvhxVdFH +EPDLKvbdNeETiJLE +DoDKjvbdcScLTdJa +EOcLKvbdQwNdDLgc +DoDLKvbdUMWPBWPJ +DncKjvbdqFdEtVaI +EObjjvbdhbPCeXRR +DoCjjvbdKeehCApu +DncKjvbdYNqAXuVt +DoDLKvbdjmCLzFGo +DoCkKvbdtlXwBUAw +EObkKvbdwtmEqYlO +EObjjvbdrovOjCvG +EObkKvbdqrVLOLBN +DoCjjvbdSBcdkhxk +DncLKvbdrEEhomua +EObkKvbdtbbtvuno +EPDLKvbdZjShQGaf +EPCjjvbdTAFJHbPE +DnbjjvbdcScLTcia +EObkKvbdbsDLUDia +DnbkKvbdkyTSTYgU +DncKjvbdySmhmSCH +DoCjjvbdnBivxPNu +DncKjvbdEXxLtTtM +EObjjvbdZshhyESn +DoDKjvbdkMbLzEfo +EObjjvbdssRrxyeD +DoDKjvbdcSbkTdKB +EPDLKvbdHDjvJbKK +DncLKvbdsQVnjCvG +DnbjjvbdJSyBTMwl +EOcLKvbddZxpYYqC +EPCjjvbdrXQLcJZR +DoCkKvbdnHEwlmfy +EOcKjvbdGZUuBDwb +EObjjvbdvOszqKnt +EOcLKvbdRosgKFdX +EPCjjvbdMpXqWNfs +EPCkKvbdJbibqJcY +DncKjvbdJvVFdEgJ +EObkKvbdqwPkcIyR +DnbkKvbdDwxMUTtM +DncKjvbdtcDVXVno +EPDLKvbdlZSrSxft +DoCkKvbdKeehCApu +EPDLKvbdQlxCYmtz +EOcLKvbdYqNFJNFR +DoCkKvbdnCKWwoOV +EObjjvbdwzIFfYEr +EOcKjvbdkDMLQfuH +EPCjjvbdrSUjnLBN +EPCkKvbdTfznMXVe +EPCkKvbdZxdKNcMS +DoCjjvbdJXsaglRQ +DoCjjvbdNPwqWNgT +DoCjjvbdLqwMzUpz +EOcKjvbdCDoaWJlf +DnbjjvbdlYsRsZGt +DncKjvbdeOdsLUUS +EOcKjvbdEvZQPmJe +DoCkKvbdqBJFAXHd +DnbjjvbdtkwwBUBX +EObjjvbdLFfHaaQu +DoDLKvbdbLMFoNcA +EPDLKvbdiLdcnUby +DnbkKvbdUQqPVUgm +EOcLKvbdEOcLLXDE +DoDKjvbdrEEhpOWB +DncKjvbdkCkkQftg +DncLKvbdMfbpNQUk +DnbjjvbdTulQKUAq +DoDLKvbdUtNUFkvK +DncKjvbddndsKtTr +EPDKjvbdliDsqVSB +EPCkKvbdhbOcEvqR +DoCkKvbdqceJQNua +DoCkKvbdrWpLcIyR +DncKjvbdrSVLNkAm +DoDLKvbdyOShYTJD +DncKjvbdyYJKBoyk +DnbjjvbdZQldiNFR +EPDLKvbdePEsKstS +EPCjjvbdcScKtDia +DncLKvbdxsOJNRbH +EObjjvbdEYXlUUTl +DoCkKvbdxUldqZMO +EOcKjvbdRjxeuGkT +EOcLKvbdqrVLNjaN +DoCkKvbdDwwktUUM +EOcLKvbdZQmEiNFR +EPCkKvbdMSXMytpz +DnbkKvbdnUtzKiqf +DoCjjvbdREDAoqDr +EPCjjvbdZyDinDMS +EPCjjvbdiCPDEwRR +EPCkKvbdmSZUzSci +DoDKjvbdkWWmdCXw +DnbkKvbdmJDsqVRa +EPDKjvbdhzVGLpnG +DoCkKvbdsPuoKDWG +DoDLKvbdrylPsAgn +EPCjjvbdsPuoJbuf +EOcKjvbdrEFJQOVa +EPCjjvbdEPDLLXCd +DncKjvbdkVwOEBxX +EPCkKvbdqGEFUWAh +DncLKvbdtbcUvuno +EOcKjvbdWIYWYGxz +EPDLKvbdZLqcsmkm +DoDKjvbdmaivwnnV +DoCkKvbdOYPVzcmt +DoCjjvbdVwIwvDeH +DoCjjvbdYkrETmkm +DoDKjvbdLFfHbAqV +EObjjvbdkIHLefOL +EPDKjvbdZjShPfaf +DoCjjvbdehLWSORH +DncLKvbdKfFgbBQu +EObkKvbdsPunjDVf +DncKjvbdiMEdNuCy +DncKjvbdFfKSNhtR +EOcKjvbdFVxpQNKF +DncLKvbdfHkVrORH +EObjjvbdKefIBaQu +EPDKjvbduCbtvuoP +EPCkKvbdGdLWKCKK +DncLKvbdLAkGmBwq +DncLKvbdZshiZESn +DnbjjvbdySmhmSCH +DoDKjvbdACqxJyiQ +DncLKvbdmajXYOmu +DnbjjvbdxVNFRZMO +DnbjjvbdVqmxBdlD +DnbkKvbdIGgZyYXg +DncKjvbdddnrBvcK +EPCjjvbdUGzmkwVe +DncLKvbdaNLCTVNH +DoCkKvbdWWhwucdg +DncKjvbdkWWmcaxX +DoDKjvbdaRfChUGL +EPDLKvbdOEcsiJKd +DoDLKvbdGLFTChMu +EObjjvbdjmBkzFHP +DncLKvbdrWokcJYq +EObjjvbdDHMGHAzc +EObkKvbdRyjITCvA +DnbjjvbdWRnXbElD +DoCjjvbdEARiNZvw +DnbkKvbdRjyFtfjs +DoCkKvbdMgDQNQVL +DoDKjvbdCEPaWJmG +DoCkKvbdUtNTfLuj +DoDKjvbdNGcQMpVL +DoDKjvbdZQmFImEq +EObjjvbdyYIibPyk +DoDLKvbdcSbjtDjB +EPCjjvbdPxmAGsSK +EPCjjvbdnUuZjirG +EPCkKvbddijSVtzn +EOcKjvbdxUmEqYlO +EOcKjvbdxrmiNRag +EPCkKvbdjmBlZeHP +EOcKjvbdvBDySndh +EObjjvbdliDsqVSB +EOcKjvbdTvMQKUBR +DncLKvbdRNXbYnUz +DnbjjvbdyYIiaozL +DoCkKvbdhbPDEwRR +EPDKjvbdptUGrSLU +DoDKjvbdFjeTChMu +DnbkKvbdFVxoomJe +EObkKvbdlYrrSyGt +EPDLKvbdVZHszKnn +DncLKvbdDwwktUUM +DncLKvbdDnbkKvcE +EPCkKvbdjJfHjMwr +EPDKjvbdUtNTfMWK +EObjjvbdbhlikGWx +DncLKvbdKfFhCBQu +DoDKjvbdVgwvXgYz +EPDLKvbdiBoCdwRR +EPDLKvbdzdzOzeZp +EObkKvbdMoxRWNgT +EPDKjvbdjvXNdBww +EObkKvbdUtMsfLuj +EOcLKvbdnUuZjjRf +DnbkKvbduCbtwVoP +EPDLKvbdGGKRmhsq +EObkKvbdePEsLTtS +DoCjjvbdSKyGUgLT +EOcLKvbdRbDdlIyL +DoDLKvbdNxPVzcnU +EObjjvbdkCkkRGtg +DncKjvbdVTmUFkvK +DncKjvbdUsltFkuj +EPDKjvbdSCEElJZL +EOcKjvbdZxcjNcMS +DoCjjvbdEJgjWYKA +DncLKvbdREDBQRDr +DncKjvbddoErjtUS +EPDLKvbdADSYJyiQ +EPDKjvbdatafxKsh +EPDLKvbdkIGkeemk +DoDLKvbdmRxtzSci +DnbkKvbdTlWPAvPJ +DncKjvbdjJegjMwr +DoCkKvbdqTtHSSKt +EOcKjvbdkMakzFHP +DncLKvbddZyPwxpb +DnbkKvbdTppnuUgm +EObkKvbdnPyxukZC +DoDKjvbdbiNJjewY +EPDKjvbdJSyArlwl +EPDLKvbdvvlBVaVu +EOcLKvbdjJfIKMxS +EPDLKvbdliETqVRa +DoCkKvbdWXJXvEFH +DncLKvbdiHKDZWKV +EObkKvbdEXwktUUM +EOcKjvbdRWnDcMID +EPDLKvbdbhljKfWx +DnbkKvbdVTlsfMVj +DnbjjvbdZoOIdeZj +DoDKjvbdDxYLtUTl +EObjjvbdmIdTqUqa +EPCjjvbdiZtekqNf +DoDLKvbdMfcPmPtk +EPDLKvbdKxpirztf +DnbkKvbdEARhlzWw +EOcKjvbdqiAJeMne +DnbjjvbdUsltGMWK +DnbkKvbdMoxRWNfs +EPCjjvbdTqQntuIN +EPDKjvbdLFfHbApu +EOcLKvbdANIZSwZx +DoCjjvbdSLZGUfjs +DoDLKvbdJSyArlxM +EOcLKvbddZxoxZRC +DoDLKvbdRpTfjFcw +EObjjvbdKefHbBRV +EPCkKvbdjlakyeGo +DoDLKvbdiBncFXRR +EObkKvbdkHfkefOL +DnbjjvbdfILVrORH +DnbjjvbdbsDKtDia +DoCjjvbdqiAKElne +EObkKvbdEXxMTtUM +DncKjvbdHfgZxxXg +EPDKjvbdQvnDcMID +DoDKjvbdCSaCsewS +DncLKvbdSZigsDWA +DnbkKvbdiUyeXSUb +DnbkKvbdZRNFJMeR +EPDKjvbdDxXlTstM +EPCjjvbdkNBlZdfo +DnbkKvbdhuZdvqtb +DncLKvbdHDkWJajK +EOcKjvbdhficZWKV +DoDLKvbdxwiKCPyk +EPDLKvbdZQleJMeR +DoDLKvbdLrXMytpz +DncKjvbdcTCjtEJa +DnbkKvbdUMVnaWPJ +DoCjjvbdnBjXYPOV +EObjjvbduWNwjQsA +DoCjjvbdRpUHJecw +DnbkKvbdJYUBglQp +EOcLKvbduoTzqKoU +EObjjvbdZMRctNlN +EObkKvbdziuPpESt +DoDLKvbduLxWaTaX +EOcLKvbdhgKDZWKV +DnbkKvbdZQldhmFR +EOcLKvbdcyyPxZQb +EOcKjvbdRWnDcLgc +DncLKvbdxZgfFweS +EPCkKvbdyqOliJwA +DnbjjvbdsPvPKCuf +DoCjjvbdMgCpNQVL +DncLKvbdOEdTiJKd +EPDKjvbdEARiMyvw +EOcLKvbdJbibqKDY +DoCkKvbdeEnrCWbj +DoCkKvbdGKdrcIMu +DnbkKvbdUMWOaVoJ +DoCkKvbdKaKgNCXq +DnbkKvbdoAKztHdO +EPDKjvbdDxXlUUTl +EOcLKvbdFVxoomJe +EOcKjvbdpyPHfpdY +EPCjjvbdxwiJaoyk +DoCkKvbdlqxtyrci +EOcKjvbdfHkWRmpg +DoCjjvbdkMalZdfo +EPCjjvbdJpyePGOF +DncLKvbdqUUHRqjt +DoDLKvbdziuQPdSt +DoDKjvbdBhjajiGK +EPDKjvbdjcLjpftg +EPDKjvbdVwJYWEFH +DnbjjvbdNdcsiJLE +DoCjjvbdQwODcLgc +EOcLKvbdtkxXAtAw +EPDKjvbdwMvANEEm +DoCjjvbdqFdEsuaI +EObjjvbdrSUjmjaN +DoDLKvbdnGeYMnGy +EOcLKvbdPyNAHTSK +DnbkKvbdMowpvNgT +DoCjjvbdGdLVibKK +DoDLKvbdtcDVXVno +EObkKvbdtlXwBUAw +DoCjjvbdSPsgKGEX +EPCjjvbdURQntuHm +DncLKvbdrMyjZLgi +EPDKjvbdwXMAvBVu +EOcLKvbdRjxfUfkT +DnbkKvbdGFjRnJTq +DoCkKvbdbUbHYLTh +EPDKjvbdoznEKxPA +EPCjjvbdLiBlQxAS +DncKjvbdfVzxPizs +DnbjjvbdSKyFtgLT +EPDKjvbdrXPlCiZR +DncLKvbdhzVGLpnG +EObjjvbdVwJYVdFH +EPDKjvbdwXLaWBVu +EPCjjvbdjhHMGFmk +EObkKvbdKyQjSzuG +DoCjjvbdmfeYNOHZ +DoDLKvbdZirgofaf +EOcLKvbdZoOIdeZj +EPCkKvbdLFfHbApu +EPCkKvbdjvWnEBww +DoDKjvbdcScLUEKB +DoCkKvbdkCkjqHUg +DoDKjvbdyTNhmSBg +DoCkKvbdkHgLfFnL +EPCjjvbdzoQQdcLx +DoCjjvbdOTTvHEtp +EPCkKvbdznopeDLx +EPCkKvbdGFjRmhtR +EPCkKvbdUaCQrpqy +EOcKjvbdnGeXmOHZ +DoDKjvbdiCPDEwRR +DoCjjvbdRbEFLiYk +DncKjvbdRXOECkgc +EPCjjvbdKWUedEgJ +DncKjvbdDjIJvYKA +DoDKjvbdyTOJNRbH +DoCjjvbdePFTKtTr +DoDKjvbdhtyeWrVC +EPCkKvbdqvolCiZR +DoDLKvbdapHHELzd +EObjjvbdlhdUQtrB +EOcKjvbdptUGrRkU +EPCjjvbdqUTfqrLU +EPCkKvbdcJMikGWx +DoDKjvbdlhctRVRa +EOcLKvbdANHyTXZx +EPDKjvbdpssfqrKt +EPCkKvbdFeiqnJTq +DoCkKvbdxZgfGXdr +EOcLKvbdRWmcblHc +DncLKvbdjggMFemk +DoDKjvbdKeegbBQu diff --git a/hotspot/test/serviceability/ParserTest.java b/hotspot/test/serviceability/ParserTest.java index b031b4de017..b70d235260d 100644 --- a/hotspot/test/serviceability/ParserTest.java +++ b/hotspot/test/serviceability/ParserTest.java @@ -20,6 +20,7 @@ public class ParserTest { testNanoTime(); testJLong(); testBool(); + testQuotes(); testMemorySize(); } @@ -95,6 +96,33 @@ public class ParserTest { parse(name, "false", "", args); } + public void testQuotes() throws Exception { + String name = "name"; + DiagnosticCommand arg1 = new DiagnosticCommand(name, + "desc", DiagnosticArgumentType.STRING, + false, null); + DiagnosticCommand arg2 = new DiagnosticCommand("arg", + "desc", DiagnosticArgumentType.STRING, + false, null); + DiagnosticCommand[] args = {arg1, arg2}; + + // try with a quoted value + parse(name, "Recording 1", name + "=\"Recording 1\"", args); + // try with a quoted argument + parse(name, "myrec", "\"" + name + "\"" + "=myrec", args); + // try with both a quoted value and a quoted argument + parse(name, "Recording 1", "\"" + name + "\"" + "=\"Recording 1\"", args); + + // now the same thing but with other arguments after + + // try with a quoted value + parse(name, "Recording 1", name + "=\"Recording 1\",arg=value", args); + // try with a quoted argument + parse(name, "myrec", "\"" + name + "\"" + "=myrec,arg=value", args); + // try with both a quoted value and a quoted argument + parse(name, "Recording 1", "\"" + name + "\"" + "=\"Recording 1\",arg=value", args); + } + public void testMemorySize() throws Exception { String name = "name"; String defaultValue = "1024"; diff --git a/jaxp/.hgtags b/jaxp/.hgtags index 72b505f142b..ff99b6a10c0 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -166,3 +166,8 @@ f95fdbe525c88ef0d57dc1390be6582a8af5e07c jdk8-b39 39ee03c1602155ff02e5feb6cd44869452f24cf7 jdk8-b42 eff4ece9c8bc43b3ce2b3758574c4c20147f0689 jdk8-b43 0b3f3a4ce13930430b32b616a717dfc7fe385b28 jdk8-b44 +57476f66e13c55eea2f2fe2b858369a4c64b9936 jdk8-b45 +300f45e990643af230d6cca39477ff62c44a9a54 jdk8-b46 +404521944ac9383afda7d55d60713b212c730646 jdk8-b47 +1c88da9a1365797e49be77ae42c34bbc0a3c3f0c jdk8-b48 +f81e981eca7b63316cf9d778f93903a4fc62161d jdk8-b49 diff --git a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java index 7f3295d1479..84e2c81634a 100644 --- a/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java +++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java @@ -602,7 +602,7 @@ protected static final String PARSER_SETTINGS = if (reader == null) { stream = xmlInputSource.getByteStream(); if (stream == null) { - URL location = new URL(escapeNonUSAscii(expandedSystemId)); + URL location = new URL(expandedSystemId); URLConnection connect = location.openConnection(); if (!(connect instanceof HttpURLConnection)) { stream = connect.getInputStream(); @@ -2586,64 +2586,6 @@ protected static final String PARSER_SETTINGS = } // fixURI(String):String - /** - * Escape invalid URI characters. - * - * Passed a URI that contains invalid characters (like spaces, non-ASCII Unicode characters, and the like), - * this function percent encodes the invalid characters per the URI specification (i.e., as a sequence of - * %-encoded UTF-8 octets). - * - * N.B. There are two problems. If the URI contains a '%' character, that might be an indication that - * the URI has already been escaped by the author, or it might be an invalid '%'. In the former case, - * it's important not to escape it, or we'll wind up with invalid, doubly-escaped '%'s. In the latter, - * the URI is broken if we don't encode it. Similarly, a '#' character might be the start of a fragment - * identifier or it might be an invalid '#'. - * - * Given that the former is vastly more likely than the latter in each case (most users are familiar with - * the magic status of '%' and '#' and they occur relatively infrequently in filenames, and if the user parses - * a proper Java File, we will already have %-escaped the URI), we simply assume that %'s and #'s are legit. - * - * Very rarely, we may be wrong. If so, tell the user to fix the clearly broken URI. - */ - protected static String escapeNonUSAscii(String str) { - if (str == null) { - return str; - } - - // get UTF-8 bytes for the string - StringBuffer buffer = new StringBuffer(); - byte[] bytes = null; - byte b; - try { - bytes = str.getBytes("UTF-8"); - } catch (java.io.UnsupportedEncodingException e) { - // should never happen - return str; - } - int len = bytes.length; - int ch; - - // for each byte - for (int i = 0; i < len; i++) { - b = bytes[i]; - // for non-ascii character: make it positive, then escape - if (b < 0) { - ch = b + 256; - buffer.append('%'); - buffer.append(gHexChs[ch >> 4]); - buffer.append(gHexChs[ch & 0xf]); - } - else if (b != '%' && b != '#' && gNeedEscaping[b]) { - buffer.append('%'); - buffer.append(gAfterEscaping1[b]); - buffer.append(gAfterEscaping2[b]); - } - else { - buffer.append((char)b); - } - } - return buffer.toString(); - } // // Package visible methods diff --git a/jaxws/.hgtags b/jaxws/.hgtags index 43d26862ac0..36a8d495d93 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -166,3 +166,8 @@ f2072b164b0519227833a2994f78e3988ee67827 jdk8-b41 1f20f37818a91b66eaeba268d0b785718598ee0e jdk8-b42 f00c12994562c2f68d348a7c3e829374a89294e2 jdk8-b43 f6a417540ef124c9b4123d07da5e26f2ab909949 jdk8-b44 +e80ac58b5ba904f24e125c742c30d0d740f05f86 jdk8-b45 +ae368a83c2404b65c9e38c65e2aa081f2201ca74 jdk8-b46 +fe6a060afc404dcf0921708a740de770666b781f jdk8-b47 +efb564de8a8ee397a65fab77d45cb20200f6ddd8 jdk8-b48 +b48865af8ac559ba6f60fb86fa3fe0ebdd22746c jdk8-b49 diff --git a/jdk/.hgtags b/jdk/.hgtags index 3635c35c55e..a49f7948b7a 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -166,3 +166,8 @@ b88fc3359dc7edabfa8a228855d8cebf8843c055 jdk8-b40 cf5c1f6fbc5ba14163fe0ef8eb8601b33f951372 jdk8-b42 b3246687c3695dff6f461bb407f9db88f7d072e7 jdk8-b43 db471a7af03168e4441c245b1d9976f720a7cb77 jdk8-b44 +b92353a01aa049bc508fc56f0347d5934b7c4390 jdk8-b45 +8d2ed9d58453c8049715a72a6d26b6b66b37a94c jdk8-b46 +00b22b23269a57d0bb46c57753be2fe9a9d2c1a3 jdk8-b47 +3e4ab821f46166fcf63e8fe5c8046216003c941f jdk8-b48 +51707c3b75c0f521794d9ab425f4e5b2351c70c1 jdk8-b49 diff --git a/jdk/THIRD_PARTY_README b/jdk/THIRD_PARTY_README index ee5463a922e..759733bfceb 100644 --- a/jdk/THIRD_PARTY_README +++ b/jdk/THIRD_PARTY_README @@ -3383,3 +3383,397 @@ included with JRE 7, JDK 7, and OpenJDK 7, except where noted: ------------------------------------------------------------------------------- +%% This notice is provided with respect to Mozilla Network Security +Services (NSS), which is supplied with the JDK test suite in the OpenJDK +source code repository. It is licensed under Mozilla Public License (MPL), +version 2.0. + +The NSS libraries are supplied in executable form, built from unmodified +NSS source code labeled with the "NSS_3.13.1_RTM" release tag. + +The NSS source code is available in the OpenJDK source code repository at: + jdk/test/sun/security/pkcs11/nss/src + +The NSS libraries are available in the OpenJDK source code repository at: + jdk/test/sun/security/pkcs11/nss/lib + +--- begin of LICENSE --- + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + +--- end of LICENSE --- + +------------------------------------------------------------------------------- + diff --git a/jdk/make/java/nio/FILES_java.gmk b/jdk/make/java/nio/FILES_java.gmk index b394b89e483..f3b277f050a 100644 --- a/jdk/make/java/nio/FILES_java.gmk +++ b/jdk/make/java/nio/FILES_java.gmk @@ -221,8 +221,6 @@ FILES_src = \ sun/nio/cs/HistoricallyNamedCharset.java \ sun/nio/cs/ISO_8859_1.java \ sun/nio/cs/SingleByte.java \ - sun/nio/cs/SingleByteDecoder.java \ - sun/nio/cs/SingleByteEncoder.java \ sun/nio/cs/StreamEncoder.java \ sun/nio/cs/StreamDecoder.java \ sun/nio/cs/Surrogate.java \ diff --git a/jdk/make/java/nio/Makefile b/jdk/make/java/nio/Makefile index 9b9ef88a47c..78b36de9cd3 100644 --- a/jdk/make/java/nio/Makefile +++ b/jdk/make/java/nio/Makefile @@ -282,6 +282,9 @@ FILES_java += \ sun/nio/fs/BsdFileSystem.java \ sun/nio/fs/BsdFileSystemProvider.java \ sun/nio/fs/BsdNativeDispatcher.java \ + sun/nio/fs/MacOSXFileSystemProvider.java \ + sun/nio/fs/MacOSXFileSystem.java \ + sun/nio/fs/MacOSXNativeDispatcher.java \ sun/nio/fs/PollingWatchService.java \ sun/nio/fs/UnixChannelFactory.java \ sun/nio/fs/UnixCopyFile.java \ @@ -311,6 +314,7 @@ FILES_c += \ \ GnomeFileTypeDetector.c \ BsdNativeDispatcher.c \ + MacOSXNativeDispatcher.c \ UnixCopyFile.c \ UnixNativeDispatcher.c \ \ @@ -385,7 +389,7 @@ ifeq ($(PLATFORM), linux) OTHER_LDLIBS += -L$(LIBDIR)/$(LIBARCH) -ljava -lnet -lpthread $(LIBDL) endif ifeq ($(PLATFORM), macosx) -OTHER_LDLIBS += -L$(LIBDIR) -ljava -lnet -pthread +OTHER_LDLIBS += -L$(LIBDIR) -ljava -lnet -pthread -framework CoreFoundation endif ifeq ($(PLATFORM), solaris) OTHER_LDLIBS += $(JVMLIB) $(LIBSOCKET) -lposix4 $(LIBDL) -lsendfile \ diff --git a/jdk/make/java/sun_nio/FILES_java.gmk b/jdk/make/java/sun_nio/FILES_java.gmk index b00fb04c588..d07474d4348 100644 --- a/jdk/make/java/sun_nio/FILES_java.gmk +++ b/jdk/make/java/sun_nio/FILES_java.gmk @@ -34,8 +34,6 @@ FILES_java = \ sun/nio/cs/HistoricallyNamedCharset.java \ sun/nio/cs/Surrogate.java \ sun/nio/cs/CharsetMapping.java \ - sun/nio/cs/SingleByteEncoder.java \ - sun/nio/cs/SingleByteDecoder.java \ sun/nio/cs/UnicodeEncoder.java \ sun/nio/cs/UnicodeDecoder.java \ sun/nio/cs/ISO_8859_1.java \ diff --git a/jdk/make/sun/nio/cs/FILES_java.gmk b/jdk/make/sun/nio/cs/FILES_java.gmk index 05d722b1be1..e00eaa9eb5d 100644 --- a/jdk/make/sun/nio/cs/FILES_java.gmk +++ b/jdk/make/sun/nio/cs/FILES_java.gmk @@ -127,7 +127,17 @@ FILES_gen_extcs = \ sun/nio/cs/ext/MS949.java \ sun/nio/cs/ext/MS950.java \ sun/nio/cs/ext/GBK.java \ - sun/nio/cs/ext/Big5.java + sun/nio/cs/ext/Big5.java \ + sun/nio/cs/ext/SJIS.java \ + sun/nio/cs/ext/PCK.java \ + sun/nio/cs/ext/JIS_X_0201.java \ + sun/nio/cs/ext/JIS_X_0208.java \ + sun/nio/cs/ext/JIS_X_0208_MS5022X.java \ + sun/nio/cs/ext/JIS_X_0208_MS932.java \ + sun/nio/cs/ext/JIS_X_0208_Solaris.java \ + sun/nio/cs/ext/JIS_X_0212.java \ + sun/nio/cs/ext/JIS_X_0212_MS5022X.java \ + sun/nio/cs/ext/JIS_X_0212_Solaris.java FILES_java = $(FILES_src) $(FILES_gen_extcs) diff --git a/jdk/make/sun/security/Makefile b/jdk/make/sun/security/Makefile index 217a7ef1bc0..50720320121 100644 --- a/jdk/make/sun/security/Makefile +++ b/jdk/make/sun/security/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -44,15 +44,8 @@ ifneq ($(PLATFORM), windows) JGSS_WRAPPER = jgss/wrapper endif -# Build PKCS#11 on all platforms except 64-bit Windows. -# We exclude windows-amd64 because we don't have any -# 64-bit PKCS#11 implementations to test with on that platform. +# Build PKCS#11 on all platforms PKCS11 = pkcs11 -ifeq ($(ARCH_DATA_MODEL), 64) - ifeq ($(PLATFORM), windows) - PKCS11 = - endif -endif # Build Microsoft CryptoAPI provider only on Windows platform. MSCAPI = diff --git a/jdk/make/tools/CharsetMapping/DoubleByte-X.java.template b/jdk/make/tools/CharsetMapping/DoubleByte-X.java.template index d5bb40b403c..625746e9d5c 100644 --- a/jdk/make/tools/CharsetMapping/DoubleByte-X.java.template +++ b/jdk/make/tools/CharsetMapping/DoubleByte-X.java.template @@ -54,7 +54,7 @@ public class $NAME_CLZ$ extends Charset public CharsetEncoder newEncoder() { initc2b(); - return new DoubleByte.Encoder$ENCTYPE$(this, c2b, c2bIndex); + return new DoubleByte.Encoder$ENCTYPE$(this, $ENC_REPLACEMENT$ c2b, c2bIndex); } $B2C$ diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0201.c2b b/jdk/make/tools/CharsetMapping/JIS_X_0201.c2b new file mode 100644 index 00000000000..c3c7da1831d --- /dev/null +++ b/jdk/make/tools/CharsetMapping/JIS_X_0201.c2b @@ -0,0 +1,2 @@ +0x7e 0x203e +0x5c 0x00a5 diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0201.map b/jdk/make/tools/CharsetMapping/JIS_X_0201.map index aaa8f1150a3..6430c267fbc 100644 --- a/jdk/make/tools/CharsetMapping/JIS_X_0201.map +++ b/jdk/make/tools/CharsetMapping/JIS_X_0201.map @@ -1,257 +1,192 @@ -#Generated from JIS_X_0201.java -0x00 U+0000 -0x01 U+0001 -0x02 U+0002 -0x03 U+0003 -0x04 U+0004 -0x05 U+0005 -0x06 U+0006 -0x07 U+0007 -0x08 U+0008 -0x09 U+0009 -0x0a U+000a -0x0b U+000b -0x0c U+000c -0x0d U+000d -0x0e U+000e -0x0f U+000f -0x10 U+0010 -0x11 U+0011 -0x12 U+0012 -0x13 U+0013 -0x14 U+0014 -0x15 U+0015 -0x16 U+0016 -0x17 U+0017 -0x18 U+0018 -0x19 U+0019 -0x1a U+001a -0x1b U+001b -0x1c U+001c -0x1d U+001d -0x1e U+001e -0x1f U+001f -0x20 U+0020 -0x21 U+0021 -0x22 U+0022 -0x23 U+0023 -0x24 U+0024 -0x25 U+0025 -0x26 U+0026 -0x27 U+0027 -0x28 U+0028 -0x29 U+0029 -0x2a U+002a -0x2b U+002b -0x2c U+002c -0x2d U+002d -0x2e U+002e -0x2f U+002f -0x30 U+0030 -0x31 U+0031 -0x32 U+0032 -0x33 U+0033 -0x34 U+0034 -0x35 U+0035 -0x36 U+0036 -0x37 U+0037 -0x38 U+0038 -0x39 U+0039 -0x3a U+003a -0x3b U+003b -0x3c U+003c -0x3d U+003d -0x3e U+003e -0x3f U+003f -0x40 U+0040 -0x41 U+0041 -0x42 U+0042 -0x43 U+0043 -0x44 U+0044 -0x45 U+0045 -0x46 U+0046 -0x47 U+0047 -0x48 U+0048 -0x49 U+0049 -0x4a U+004a -0x4b U+004b -0x4c U+004c -0x4d U+004d -0x4e U+004e -0x4f U+004f -0x50 U+0050 -0x51 U+0051 -0x52 U+0052 -0x53 U+0053 -0x54 U+0054 -0x55 U+0055 -0x56 U+0056 -0x57 U+0057 -0x58 U+0058 -0x59 U+0059 -0x5a U+005a -0x5b U+005b -0x5c U+005c -0x5d U+005d -0x5e U+005e -0x5f U+005f -0x60 U+0060 -0x61 U+0061 -0x62 U+0062 -0x63 U+0063 -0x64 U+0064 -0x65 U+0065 -0x66 U+0066 -0x67 U+0067 -0x68 U+0068 -0x69 U+0069 -0x6a U+006a -0x6b U+006b -0x6c U+006c -0x6d U+006d -0x6e U+006e -0x6f U+006f -0x70 U+0070 -0x71 U+0071 -0x72 U+0072 -0x73 U+0073 -0x74 U+0074 -0x75 U+0075 -0x76 U+0076 -0x77 U+0077 -0x78 U+0078 -0x79 U+0079 -0x7a U+007a -0x7b U+007b -0x7c U+007c -0x7d U+007d -0x7e U+007e -0x7f U+007f -0x80 U+fffd -0x81 U+fffd -0x82 U+fffd -0x83 U+fffd -0x84 U+fffd -0x85 U+fffd -0x86 U+fffd -0x87 U+fffd -0x88 U+fffd -0x89 U+fffd -0x8a U+fffd -0x8b U+fffd -0x8c U+fffd -0x8d U+fffd -0x8e U+fffd -0x8f U+fffd -0x90 U+fffd -0x91 U+fffd -0x92 U+fffd -0x93 U+fffd -0x94 U+fffd -0x95 U+fffd -0x96 U+fffd -0x97 U+fffd -0x98 U+fffd -0x99 U+fffd -0x9a U+fffd -0x9b U+fffd -0x9c U+fffd -0x9d U+fffd -0x9e U+fffd -0x9f U+fffd -0xa0 U+fffd -0xa1 U+ff61 -0xa2 U+ff62 -0xa3 U+ff63 -0xa4 U+ff64 -0xa5 U+ff65 -0xa6 U+ff66 -0xa7 U+ff67 -0xa8 U+ff68 -0xa9 U+ff69 -0xaa U+ff6a -0xab U+ff6b -0xac U+ff6c -0xad U+ff6d -0xae U+ff6e -0xaf U+ff6f -0xb0 U+ff70 -0xb1 U+ff71 -0xb2 U+ff72 -0xb3 U+ff73 -0xb4 U+ff74 -0xb5 U+ff75 -0xb6 U+ff76 -0xb7 U+ff77 -0xb8 U+ff78 -0xb9 U+ff79 -0xba U+ff7a -0xbb U+ff7b -0xbc U+ff7c -0xbd U+ff7d -0xbe U+ff7e -0xbf U+ff7f -0xc0 U+ff80 -0xc1 U+ff81 -0xc2 U+ff82 -0xc3 U+ff83 -0xc4 U+ff84 -0xc5 U+ff85 -0xc6 U+ff86 -0xc7 U+ff87 -0xc8 U+ff88 -0xc9 U+ff89 -0xca U+ff8a -0xcb U+ff8b -0xcc U+ff8c -0xcd U+ff8d -0xce U+ff8e -0xcf U+ff8f -0xd0 U+ff90 -0xd1 U+ff91 -0xd2 U+ff92 -0xd3 U+ff93 -0xd4 U+ff94 -0xd5 U+ff95 -0xd6 U+ff96 -0xd7 U+ff97 -0xd8 U+ff98 -0xd9 U+ff99 -0xda U+ff9a -0xdb U+ff9b -0xdc U+ff9c -0xdd U+ff9d -0xde U+ff9e -0xdf U+ff9f -0xe0 U+fffd -0xe1 U+fffd -0xe2 U+fffd -0xe3 U+fffd -0xe4 U+fffd -0xe5 U+fffd -0xe6 U+fffd -0xe7 U+fffd -0xe8 U+fffd -0xe9 U+fffd -0xea U+fffd -0xeb U+fffd -0xec U+fffd -0xed U+fffd -0xee U+fffd -0xef U+fffd -0xf0 U+fffd -0xf1 U+fffd -0xf2 U+fffd -0xf3 U+fffd -0xf4 U+fffd -0xf5 U+fffd -0xf6 U+fffd -0xf7 U+fffd -0xf8 U+fffd -0xf9 U+fffd -0xfa U+fffd -0xfb U+fffd -0xfc U+fffd -0xfd U+fffd -0xfe U+fffd -0xff U+fffd +# copy/pasted from JIS_X_0201.b2c + code points 0-0x1f and 0x7f +0x00 0x0000 +0x01 0x0001 +0x02 0x0002 +0x03 0x0003 +0x04 0x0004 +0x05 0x0005 +0x06 0x0006 +0x07 0x0007 +0x08 0x0008 +0x09 0x0009 +0x0A 0x000A +0x0B 0x000B +0x0C 0x000C +0x0D 0x000D +0x0E 0x000E +0x0F 0x000F +0x10 0x0010 +0x11 0x0011 +0x12 0x0012 +0x13 0x0013 +0x14 0x0014 +0x15 0x0015 +0x16 0x0016 +0x17 0x0017 +0x18 0x0018 +0x19 0x0019 +0x1A 0x001A +0x1B 0x001B +0x1C 0x001C +0x1D 0x001D +0x1E 0x001E +0x1F 0x001F +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # YEN SIGN +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # OVERLINE +0x7F 0x007F +0xA1 0xFF61 # HALFWIDTH IDEOGRAPHIC FULL STOP +0xA2 0xFF62 # HALFWIDTH LEFT CORNER BRACKET +0xA3 0xFF63 # HALFWIDTH RIGHT CORNER BRACKET +0xA4 0xFF64 # HALFWIDTH IDEOGRAPHIC COMMA +0xA5 0xFF65 # HALFWIDTH KATAKANA MIDDLE DOT +0xA6 0xFF66 # HALFWIDTH KATAKANA LETTER WO +0xA7 0xFF67 # HALFWIDTH KATAKANA LETTER SMALL A +0xA8 0xFF68 # HALFWIDTH KATAKANA LETTER SMALL I +0xA9 0xFF69 # HALFWIDTH KATAKANA LETTER SMALL U +0xAA 0xFF6A # HALFWIDTH KATAKANA LETTER SMALL E +0xAB 0xFF6B # HALFWIDTH KATAKANA LETTER SMALL O +0xAC 0xFF6C # HALFWIDTH KATAKANA LETTER SMALL YA +0xAD 0xFF6D # HALFWIDTH KATAKANA LETTER SMALL YU +0xAE 0xFF6E # HALFWIDTH KATAKANA LETTER SMALL YO +0xAF 0xFF6F # HALFWIDTH KATAKANA LETTER SMALL TU +0xB0 0xFF70 # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +0xB1 0xFF71 # HALFWIDTH KATAKANA LETTER A +0xB2 0xFF72 # HALFWIDTH KATAKANA LETTER I +0xB3 0xFF73 # HALFWIDTH KATAKANA LETTER U +0xB4 0xFF74 # HALFWIDTH KATAKANA LETTER E +0xB5 0xFF75 # HALFWIDTH KATAKANA LETTER O +0xB6 0xFF76 # HALFWIDTH KATAKANA LETTER KA +0xB7 0xFF77 # HALFWIDTH KATAKANA LETTER KI +0xB8 0xFF78 # HALFWIDTH KATAKANA LETTER KU +0xB9 0xFF79 # HALFWIDTH KATAKANA LETTER KE +0xBA 0xFF7A # HALFWIDTH KATAKANA LETTER KO +0xBB 0xFF7B # HALFWIDTH KATAKANA LETTER SA +0xBC 0xFF7C # HALFWIDTH KATAKANA LETTER SI +0xBD 0xFF7D # HALFWIDTH KATAKANA LETTER SU +0xBE 0xFF7E # HALFWIDTH KATAKANA LETTER SE +0xBF 0xFF7F # HALFWIDTH KATAKANA LETTER SO +0xC0 0xFF80 # HALFWIDTH KATAKANA LETTER TA +0xC1 0xFF81 # HALFWIDTH KATAKANA LETTER TI +0xC2 0xFF82 # HALFWIDTH KATAKANA LETTER TU +0xC3 0xFF83 # HALFWIDTH KATAKANA LETTER TE +0xC4 0xFF84 # HALFWIDTH KATAKANA LETTER TO +0xC5 0xFF85 # HALFWIDTH KATAKANA LETTER NA +0xC6 0xFF86 # HALFWIDTH KATAKANA LETTER NI +0xC7 0xFF87 # HALFWIDTH KATAKANA LETTER NU +0xC8 0xFF88 # HALFWIDTH KATAKANA LETTER NE +0xC9 0xFF89 # HALFWIDTH KATAKANA LETTER NO +0xCA 0xFF8A # HALFWIDTH KATAKANA LETTER HA +0xCB 0xFF8B # HALFWIDTH KATAKANA LETTER HI +0xCC 0xFF8C # HALFWIDTH KATAKANA LETTER HU +0xCD 0xFF8D # HALFWIDTH KATAKANA LETTER HE +0xCE 0xFF8E # HALFWIDTH KATAKANA LETTER HO +0xCF 0xFF8F # HALFWIDTH KATAKANA LETTER MA +0xD0 0xFF90 # HALFWIDTH KATAKANA LETTER MI +0xD1 0xFF91 # HALFWIDTH KATAKANA LETTER MU +0xD2 0xFF92 # HALFWIDTH KATAKANA LETTER ME +0xD3 0xFF93 # HALFWIDTH KATAKANA LETTER MO +0xD4 0xFF94 # HALFWIDTH KATAKANA LETTER YA +0xD5 0xFF95 # HALFWIDTH KATAKANA LETTER YU +0xD6 0xFF96 # HALFWIDTH KATAKANA LETTER YO +0xD7 0xFF97 # HALFWIDTH KATAKANA LETTER RA +0xD8 0xFF98 # HALFWIDTH KATAKANA LETTER RI +0xD9 0xFF99 # HALFWIDTH KATAKANA LETTER RU +0xDA 0xFF9A # HALFWIDTH KATAKANA LETTER RE +0xDB 0xFF9B # HALFWIDTH KATAKANA LETTER RO +0xDC 0xFF9C # HALFWIDTH KATAKANA LETTER WA +0xDD 0xFF9D # HALFWIDTH KATAKANA LETTER N +0xDE 0xFF9E # HALFWIDTH KATAKANA VOICED SOUND MARK +0xDF 0xFF9F # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0208.map b/jdk/make/tools/CharsetMapping/JIS_X_0208.map new file mode 100644 index 00000000000..b769fde2d74 --- /dev/null +++ b/jdk/make/tools/CharsetMapping/JIS_X_0208.map @@ -0,0 +1,6879 @@ +0x2121 0x3000 +0x2122 0x3001 +0x2123 0x3002 +0x2124 0xff0c +0x2125 0xff0e +0x2126 0x30fb +0x2127 0xff1a +0x2128 0xff1b +0x2129 0xff1f +0x212a 0xff01 +0x212b 0x309b +0x212c 0x309c +0x212d 0x00b4 +0x212e 0xff40 +0x212f 0x00a8 +0x2130 0xff3e +0x2131 0xffe3 +0x2132 0xff3f +0x2133 0x30fd +0x2134 0x30fe +0x2135 0x309d +0x2136 0x309e +0x2137 0x3003 +0x2138 0x4edd +0x2139 0x3005 +0x213a 0x3006 +0x213b 0x3007 +0x213c 0x30fc +0x213d 0x2014 +0x213e 0x2010 +0x213f 0xff0f +0x2140 0xff3c +0x2141 0x301c +0x2142 0x2016 +0x2143 0xff5c +0x2144 0x2026 +0x2145 0x2025 +0x2146 0x2018 +0x2147 0x2019 +0x2148 0x201c +0x2149 0x201d +0x214a 0xff08 +0x214b 0xff09 +0x214c 0x3014 +0x214d 0x3015 +0x214e 0xff3b +0x214f 0xff3d +0x2150 0xff5b +0x2151 0xff5d +0x2152 0x3008 +0x2153 0x3009 +0x2154 0x300a +0x2155 0x300b +0x2156 0x300c +0x2157 0x300d +0x2158 0x300e +0x2159 0x300f +0x215a 0x3010 +0x215b 0x3011 +0x215c 0xff0b +0x215d 0x2212 +0x215e 0x00b1 +0x215f 0x00d7 +0x2160 0x00f7 +0x2161 0xff1d +0x2162 0x2260 +0x2163 0xff1c +0x2164 0xff1e +0x2165 0x2266 +0x2166 0x2267 +0x2167 0x221e +0x2168 0x2234 +0x2169 0x2642 +0x216a 0x2640 +0x216b 0x00b0 +0x216c 0x2032 +0x216d 0x2033 +0x216e 0x2103 +0x216f 0xffe5 +0x2170 0xff04 +0x2171 0x00a2 +0x2172 0x00a3 +0x2173 0xff05 +0x2174 0xff03 +0x2175 0xff06 +0x2176 0xff0a +0x2177 0xff20 +0x2178 0x00a7 +0x2179 0x2606 +0x217a 0x2605 +0x217b 0x25cb +0x217c 0x25cf +0x217d 0x25ce +0x217e 0x25c7 +0x2221 0x25c6 +0x2222 0x25a1 +0x2223 0x25a0 +0x2224 0x25b3 +0x2225 0x25b2 +0x2226 0x25bd +0x2227 0x25bc +0x2228 0x203b +0x2229 0x3012 +0x222a 0x2192 +0x222b 0x2190 +0x222c 0x2191 +0x222d 0x2193 +0x222e 0x3013 +0x223a 0x2208 +0x223b 0x220b +0x223c 0x2286 +0x223d 0x2287 +0x223e 0x2282 +0x223f 0x2283 +0x2240 0x222a +0x2241 0x2229 +0x224a 0x2227 +0x224b 0x2228 +0x224c 0x00ac +0x224d 0x21d2 +0x224e 0x21d4 +0x224f 0x2200 +0x2250 0x2203 +0x225c 0x2220 +0x225d 0x22a5 +0x225e 0x2312 +0x225f 0x2202 +0x2260 0x2207 +0x2261 0x2261 +0x2262 0x2252 +0x2263 0x226a +0x2264 0x226b +0x2265 0x221a +0x2266 0x223d +0x2267 0x221d +0x2268 0x2235 +0x2269 0x222b +0x226a 0x222c +0x2272 0x212b +0x2273 0x2030 +0x2274 0x266f +0x2275 0x266d +0x2276 0x266a +0x2277 0x2020 +0x2278 0x2021 +0x2279 0x00b6 +0x227e 0x25ef +0x2330 0xff10 +0x2331 0xff11 +0x2332 0xff12 +0x2333 0xff13 +0x2334 0xff14 +0x2335 0xff15 +0x2336 0xff16 +0x2337 0xff17 +0x2338 0xff18 +0x2339 0xff19 +0x2341 0xff21 +0x2342 0xff22 +0x2343 0xff23 +0x2344 0xff24 +0x2345 0xff25 +0x2346 0xff26 +0x2347 0xff27 +0x2348 0xff28 +0x2349 0xff29 +0x234a 0xff2a +0x234b 0xff2b +0x234c 0xff2c +0x234d 0xff2d +0x234e 0xff2e +0x234f 0xff2f +0x2350 0xff30 +0x2351 0xff31 +0x2352 0xff32 +0x2353 0xff33 +0x2354 0xff34 +0x2355 0xff35 +0x2356 0xff36 +0x2357 0xff37 +0x2358 0xff38 +0x2359 0xff39 +0x235a 0xff3a +0x2361 0xff41 +0x2362 0xff42 +0x2363 0xff43 +0x2364 0xff44 +0x2365 0xff45 +0x2366 0xff46 +0x2367 0xff47 +0x2368 0xff48 +0x2369 0xff49 +0x236a 0xff4a +0x236b 0xff4b +0x236c 0xff4c +0x236d 0xff4d +0x236e 0xff4e +0x236f 0xff4f +0x2370 0xff50 +0x2371 0xff51 +0x2372 0xff52 +0x2373 0xff53 +0x2374 0xff54 +0x2375 0xff55 +0x2376 0xff56 +0x2377 0xff57 +0x2378 0xff58 +0x2379 0xff59 +0x237a 0xff5a +0x2421 0x3041 +0x2422 0x3042 +0x2423 0x3043 +0x2424 0x3044 +0x2425 0x3045 +0x2426 0x3046 +0x2427 0x3047 +0x2428 0x3048 +0x2429 0x3049 +0x242a 0x304a +0x242b 0x304b +0x242c 0x304c +0x242d 0x304d +0x242e 0x304e +0x242f 0x304f +0x2430 0x3050 +0x2431 0x3051 +0x2432 0x3052 +0x2433 0x3053 +0x2434 0x3054 +0x2435 0x3055 +0x2436 0x3056 +0x2437 0x3057 +0x2438 0x3058 +0x2439 0x3059 +0x243a 0x305a +0x243b 0x305b +0x243c 0x305c +0x243d 0x305d +0x243e 0x305e +0x243f 0x305f +0x2440 0x3060 +0x2441 0x3061 +0x2442 0x3062 +0x2443 0x3063 +0x2444 0x3064 +0x2445 0x3065 +0x2446 0x3066 +0x2447 0x3067 +0x2448 0x3068 +0x2449 0x3069 +0x244a 0x306a +0x244b 0x306b +0x244c 0x306c +0x244d 0x306d +0x244e 0x306e +0x244f 0x306f +0x2450 0x3070 +0x2451 0x3071 +0x2452 0x3072 +0x2453 0x3073 +0x2454 0x3074 +0x2455 0x3075 +0x2456 0x3076 +0x2457 0x3077 +0x2458 0x3078 +0x2459 0x3079 +0x245a 0x307a +0x245b 0x307b +0x245c 0x307c +0x245d 0x307d +0x245e 0x307e +0x245f 0x307f +0x2460 0x3080 +0x2461 0x3081 +0x2462 0x3082 +0x2463 0x3083 +0x2464 0x3084 +0x2465 0x3085 +0x2466 0x3086 +0x2467 0x3087 +0x2468 0x3088 +0x2469 0x3089 +0x246a 0x308a +0x246b 0x308b +0x246c 0x308c +0x246d 0x308d +0x246e 0x308e +0x246f 0x308f +0x2470 0x3090 +0x2471 0x3091 +0x2472 0x3092 +0x2473 0x3093 +0x2521 0x30a1 +0x2522 0x30a2 +0x2523 0x30a3 +0x2524 0x30a4 +0x2525 0x30a5 +0x2526 0x30a6 +0x2527 0x30a7 +0x2528 0x30a8 +0x2529 0x30a9 +0x252a 0x30aa +0x252b 0x30ab +0x252c 0x30ac +0x252d 0x30ad +0x252e 0x30ae +0x252f 0x30af +0x2530 0x30b0 +0x2531 0x30b1 +0x2532 0x30b2 +0x2533 0x30b3 +0x2534 0x30b4 +0x2535 0x30b5 +0x2536 0x30b6 +0x2537 0x30b7 +0x2538 0x30b8 +0x2539 0x30b9 +0x253a 0x30ba +0x253b 0x30bb +0x253c 0x30bc +0x253d 0x30bd +0x253e 0x30be +0x253f 0x30bf +0x2540 0x30c0 +0x2541 0x30c1 +0x2542 0x30c2 +0x2543 0x30c3 +0x2544 0x30c4 +0x2545 0x30c5 +0x2546 0x30c6 +0x2547 0x30c7 +0x2548 0x30c8 +0x2549 0x30c9 +0x254a 0x30ca +0x254b 0x30cb +0x254c 0x30cc +0x254d 0x30cd +0x254e 0x30ce +0x254f 0x30cf +0x2550 0x30d0 +0x2551 0x30d1 +0x2552 0x30d2 +0x2553 0x30d3 +0x2554 0x30d4 +0x2555 0x30d5 +0x2556 0x30d6 +0x2557 0x30d7 +0x2558 0x30d8 +0x2559 0x30d9 +0x255a 0x30da +0x255b 0x30db +0x255c 0x30dc +0x255d 0x30dd +0x255e 0x30de +0x255f 0x30df +0x2560 0x30e0 +0x2561 0x30e1 +0x2562 0x30e2 +0x2563 0x30e3 +0x2564 0x30e4 +0x2565 0x30e5 +0x2566 0x30e6 +0x2567 0x30e7 +0x2568 0x30e8 +0x2569 0x30e9 +0x256a 0x30ea +0x256b 0x30eb +0x256c 0x30ec +0x256d 0x30ed +0x256e 0x30ee +0x256f 0x30ef +0x2570 0x30f0 +0x2571 0x30f1 +0x2572 0x30f2 +0x2573 0x30f3 +0x2574 0x30f4 +0x2575 0x30f5 +0x2576 0x30f6 +0x2621 0x0391 +0x2622 0x0392 +0x2623 0x0393 +0x2624 0x0394 +0x2625 0x0395 +0x2626 0x0396 +0x2627 0x0397 +0x2628 0x0398 +0x2629 0x0399 +0x262a 0x039a +0x262b 0x039b +0x262c 0x039c +0x262d 0x039d +0x262e 0x039e +0x262f 0x039f +0x2630 0x03a0 +0x2631 0x03a1 +0x2632 0x03a3 +0x2633 0x03a4 +0x2634 0x03a5 +0x2635 0x03a6 +0x2636 0x03a7 +0x2637 0x03a8 +0x2638 0x03a9 +0x2641 0x03b1 +0x2642 0x03b2 +0x2643 0x03b3 +0x2644 0x03b4 +0x2645 0x03b5 +0x2646 0x03b6 +0x2647 0x03b7 +0x2648 0x03b8 +0x2649 0x03b9 +0x264a 0x03ba +0x264b 0x03bb +0x264c 0x03bc +0x264d 0x03bd +0x264e 0x03be +0x264f 0x03bf +0x2650 0x03c0 +0x2651 0x03c1 +0x2652 0x03c3 +0x2653 0x03c4 +0x2654 0x03c5 +0x2655 0x03c6 +0x2656 0x03c7 +0x2657 0x03c8 +0x2658 0x03c9 +0x2721 0x0410 +0x2722 0x0411 +0x2723 0x0412 +0x2724 0x0413 +0x2725 0x0414 +0x2726 0x0415 +0x2727 0x0401 +0x2728 0x0416 +0x2729 0x0417 +0x272a 0x0418 +0x272b 0x0419 +0x272c 0x041a +0x272d 0x041b +0x272e 0x041c +0x272f 0x041d +0x2730 0x041e +0x2731 0x041f +0x2732 0x0420 +0x2733 0x0421 +0x2734 0x0422 +0x2735 0x0423 +0x2736 0x0424 +0x2737 0x0425 +0x2738 0x0426 +0x2739 0x0427 +0x273a 0x0428 +0x273b 0x0429 +0x273c 0x042a +0x273d 0x042b +0x273e 0x042c +0x273f 0x042d +0x2740 0x042e +0x2741 0x042f +0x2751 0x0430 +0x2752 0x0431 +0x2753 0x0432 +0x2754 0x0433 +0x2755 0x0434 +0x2756 0x0435 +0x2757 0x0451 +0x2758 0x0436 +0x2759 0x0437 +0x275a 0x0438 +0x275b 0x0439 +0x275c 0x043a +0x275d 0x043b +0x275e 0x043c +0x275f 0x043d +0x2760 0x043e +0x2761 0x043f +0x2762 0x0440 +0x2763 0x0441 +0x2764 0x0442 +0x2765 0x0443 +0x2766 0x0444 +0x2767 0x0445 +0x2768 0x0446 +0x2769 0x0447 +0x276a 0x0448 +0x276b 0x0449 +0x276c 0x044a +0x276d 0x044b +0x276e 0x044c +0x276f 0x044d +0x2770 0x044e +0x2771 0x044f +0x2821 0x2500 +0x2822 0x2502 +0x2823 0x250c +0x2824 0x2510 +0x2825 0x2518 +0x2826 0x2514 +0x2827 0x251c +0x2828 0x252c +0x2829 0x2524 +0x282a 0x2534 +0x282b 0x253c +0x282c 0x2501 +0x282d 0x2503 +0x282e 0x250f +0x282f 0x2513 +0x2830 0x251b +0x2831 0x2517 +0x2832 0x2523 +0x2833 0x2533 +0x2834 0x252b +0x2835 0x253b +0x2836 0x254b +0x2837 0x2520 +0x2838 0x252f +0x2839 0x2528 +0x283a 0x2537 +0x283b 0x253f +0x283c 0x251d +0x283d 0x2530 +0x283e 0x2525 +0x283f 0x2538 +0x2840 0x2542 +0x3021 0x4e9c +0x3022 0x5516 +0x3023 0x5a03 +0x3024 0x963f +0x3025 0x54c0 +0x3026 0x611b +0x3027 0x6328 +0x3028 0x59f6 +0x3029 0x9022 +0x302a 0x8475 +0x302b 0x831c +0x302c 0x7a50 +0x302d 0x60aa +0x302e 0x63e1 +0x302f 0x6e25 +0x3030 0x65ed +0x3031 0x8466 +0x3032 0x82a6 +0x3033 0x9bf5 +0x3034 0x6893 +0x3035 0x5727 +0x3036 0x65a1 +0x3037 0x6271 +0x3038 0x5b9b +0x3039 0x59d0 +0x303a 0x867b +0x303b 0x98f4 +0x303c 0x7d62 +0x303d 0x7dbe +0x303e 0x9b8e +0x303f 0x6216 +0x3040 0x7c9f +0x3041 0x88b7 +0x3042 0x5b89 +0x3043 0x5eb5 +0x3044 0x6309 +0x3045 0x6697 +0x3046 0x6848 +0x3047 0x95c7 +0x3048 0x978d +0x3049 0x674f +0x304a 0x4ee5 +0x304b 0x4f0a +0x304c 0x4f4d +0x304d 0x4f9d +0x304e 0x5049 +0x304f 0x56f2 +0x3050 0x5937 +0x3051 0x59d4 +0x3052 0x5a01 +0x3053 0x5c09 +0x3054 0x60df +0x3055 0x610f +0x3056 0x6170 +0x3057 0x6613 +0x3058 0x6905 +0x3059 0x70ba +0x305a 0x754f +0x305b 0x7570 +0x305c 0x79fb +0x305d 0x7dad +0x305e 0x7def +0x305f 0x80c3 +0x3060 0x840e +0x3061 0x8863 +0x3062 0x8b02 +0x3063 0x9055 +0x3064 0x907a +0x3065 0x533b +0x3066 0x4e95 +0x3067 0x4ea5 +0x3068 0x57df +0x3069 0x80b2 +0x306a 0x90c1 +0x306b 0x78ef +0x306c 0x4e00 +0x306d 0x58f1 +0x306e 0x6ea2 +0x306f 0x9038 +0x3070 0x7a32 +0x3071 0x8328 +0x3072 0x828b +0x3073 0x9c2f +0x3074 0x5141 +0x3075 0x5370 +0x3076 0x54bd +0x3077 0x54e1 +0x3078 0x56e0 +0x3079 0x59fb +0x307a 0x5f15 +0x307b 0x98f2 +0x307c 0x6deb +0x307d 0x80e4 +0x307e 0x852d +0x3121 0x9662 +0x3122 0x9670 +0x3123 0x96a0 +0x3124 0x97fb +0x3125 0x540b +0x3126 0x53f3 +0x3127 0x5b87 +0x3128 0x70cf +0x3129 0x7fbd +0x312a 0x8fc2 +0x312b 0x96e8 +0x312c 0x536f +0x312d 0x9d5c +0x312e 0x7aba +0x312f 0x4e11 +0x3130 0x7893 +0x3131 0x81fc +0x3132 0x6e26 +0x3133 0x5618 +0x3134 0x5504 +0x3135 0x6b1d +0x3136 0x851a +0x3137 0x9c3b +0x3138 0x59e5 +0x3139 0x53a9 +0x313a 0x6d66 +0x313b 0x74dc +0x313c 0x958f +0x313d 0x5642 +0x313e 0x4e91 +0x313f 0x904b +0x3140 0x96f2 +0x3141 0x834f +0x3142 0x990c +0x3143 0x53e1 +0x3144 0x55b6 +0x3145 0x5b30 +0x3146 0x5f71 +0x3147 0x6620 +0x3148 0x66f3 +0x3149 0x6804 +0x314a 0x6c38 +0x314b 0x6cf3 +0x314c 0x6d29 +0x314d 0x745b +0x314e 0x76c8 +0x314f 0x7a4e +0x3150 0x9834 +0x3151 0x82f1 +0x3152 0x885b +0x3153 0x8a60 +0x3154 0x92ed +0x3155 0x6db2 +0x3156 0x75ab +0x3157 0x76ca +0x3158 0x99c5 +0x3159 0x60a6 +0x315a 0x8b01 +0x315b 0x8d8a +0x315c 0x95b2 +0x315d 0x698e +0x315e 0x53ad +0x315f 0x5186 +0x3160 0x5712 +0x3161 0x5830 +0x3162 0x5944 +0x3163 0x5bb4 +0x3164 0x5ef6 +0x3165 0x6028 +0x3166 0x63a9 +0x3167 0x63f4 +0x3168 0x6cbf +0x3169 0x6f14 +0x316a 0x708e +0x316b 0x7114 +0x316c 0x7159 +0x316d 0x71d5 +0x316e 0x733f +0x316f 0x7e01 +0x3170 0x8276 +0x3171 0x82d1 +0x3172 0x8597 +0x3173 0x9060 +0x3174 0x925b +0x3175 0x9d1b +0x3176 0x5869 +0x3177 0x65bc +0x3178 0x6c5a +0x3179 0x7525 +0x317a 0x51f9 +0x317b 0x592e +0x317c 0x5965 +0x317d 0x5f80 +0x317e 0x5fdc +0x3221 0x62bc +0x3222 0x65fa +0x3223 0x6a2a +0x3224 0x6b27 +0x3225 0x6bb4 +0x3226 0x738b +0x3227 0x7fc1 +0x3228 0x8956 +0x3229 0x9d2c +0x322a 0x9d0e +0x322b 0x9ec4 +0x322c 0x5ca1 +0x322d 0x6c96 +0x322e 0x837b +0x322f 0x5104 +0x3230 0x5c4b +0x3231 0x61b6 +0x3232 0x81c6 +0x3233 0x6876 +0x3234 0x7261 +0x3235 0x4e59 +0x3236 0x4ffa +0x3237 0x5378 +0x3238 0x6069 +0x3239 0x6e29 +0x323a 0x7a4f +0x323b 0x97f3 +0x323c 0x4e0b +0x323d 0x5316 +0x323e 0x4eee +0x323f 0x4f55 +0x3240 0x4f3d +0x3241 0x4fa1 +0x3242 0x4f73 +0x3243 0x52a0 +0x3244 0x53ef +0x3245 0x5609 +0x3246 0x590f +0x3247 0x5ac1 +0x3248 0x5bb6 +0x3249 0x5be1 +0x324a 0x79d1 +0x324b 0x6687 +0x324c 0x679c +0x324d 0x67b6 +0x324e 0x6b4c +0x324f 0x6cb3 +0x3250 0x706b +0x3251 0x73c2 +0x3252 0x798d +0x3253 0x79be +0x3254 0x7a3c +0x3255 0x7b87 +0x3256 0x82b1 +0x3257 0x82db +0x3258 0x8304 +0x3259 0x8377 +0x325a 0x83ef +0x325b 0x83d3 +0x325c 0x8766 +0x325d 0x8ab2 +0x325e 0x5629 +0x325f 0x8ca8 +0x3260 0x8fe6 +0x3261 0x904e +0x3262 0x971e +0x3263 0x868a +0x3264 0x4fc4 +0x3265 0x5ce8 +0x3266 0x6211 +0x3267 0x7259 +0x3268 0x753b +0x3269 0x81e5 +0x326a 0x82bd +0x326b 0x86fe +0x326c 0x8cc0 +0x326d 0x96c5 +0x326e 0x9913 +0x326f 0x99d5 +0x3270 0x4ecb +0x3271 0x4f1a +0x3272 0x89e3 +0x3273 0x56de +0x3274 0x584a +0x3275 0x58ca +0x3276 0x5efb +0x3277 0x5feb +0x3278 0x602a +0x3279 0x6094 +0x327a 0x6062 +0x327b 0x61d0 +0x327c 0x6212 +0x327d 0x62d0 +0x327e 0x6539 +0x3321 0x9b41 +0x3322 0x6666 +0x3323 0x68b0 +0x3324 0x6d77 +0x3325 0x7070 +0x3326 0x754c +0x3327 0x7686 +0x3328 0x7d75 +0x3329 0x82a5 +0x332a 0x87f9 +0x332b 0x958b +0x332c 0x968e +0x332d 0x8c9d +0x332e 0x51f1 +0x332f 0x52be +0x3330 0x5916 +0x3331 0x54b3 +0x3332 0x5bb3 +0x3333 0x5d16 +0x3334 0x6168 +0x3335 0x6982 +0x3336 0x6daf +0x3337 0x788d +0x3338 0x84cb +0x3339 0x8857 +0x333a 0x8a72 +0x333b 0x93a7 +0x333c 0x9ab8 +0x333d 0x6d6c +0x333e 0x99a8 +0x333f 0x86d9 +0x3340 0x57a3 +0x3341 0x67ff +0x3342 0x86ce +0x3343 0x920e +0x3344 0x5283 +0x3345 0x5687 +0x3346 0x5404 +0x3347 0x5ed3 +0x3348 0x62e1 +0x3349 0x64b9 +0x334a 0x683c +0x334b 0x6838 +0x334c 0x6bbb +0x334d 0x7372 +0x334e 0x78ba +0x334f 0x7a6b +0x3350 0x899a +0x3351 0x89d2 +0x3352 0x8d6b +0x3353 0x8f03 +0x3354 0x90ed +0x3355 0x95a3 +0x3356 0x9694 +0x3357 0x9769 +0x3358 0x5b66 +0x3359 0x5cb3 +0x335a 0x697d +0x335b 0x984d +0x335c 0x984e +0x335d 0x639b +0x335e 0x7b20 +0x335f 0x6a2b +0x3360 0x6a7f +0x3361 0x68b6 +0x3362 0x9c0d +0x3363 0x6f5f +0x3364 0x5272 +0x3365 0x559d +0x3366 0x6070 +0x3367 0x62ec +0x3368 0x6d3b +0x3369 0x6e07 +0x336a 0x6ed1 +0x336b 0x845b +0x336c 0x8910 +0x336d 0x8f44 +0x336e 0x4e14 +0x336f 0x9c39 +0x3370 0x53f6 +0x3371 0x691b +0x3372 0x6a3a +0x3373 0x9784 +0x3374 0x682a +0x3375 0x515c +0x3376 0x7ac3 +0x3377 0x84b2 +0x3378 0x91dc +0x3379 0x938c +0x337a 0x565b +0x337b 0x9d28 +0x337c 0x6822 +0x337d 0x8305 +0x337e 0x8431 +0x3421 0x7ca5 +0x3422 0x5208 +0x3423 0x82c5 +0x3424 0x74e6 +0x3425 0x4e7e +0x3426 0x4f83 +0x3427 0x51a0 +0x3428 0x5bd2 +0x3429 0x520a +0x342a 0x52d8 +0x342b 0x52e7 +0x342c 0x5dfb +0x342d 0x559a +0x342e 0x582a +0x342f 0x59e6 +0x3430 0x5b8c +0x3431 0x5b98 +0x3432 0x5bdb +0x3433 0x5e72 +0x3434 0x5e79 +0x3435 0x60a3 +0x3436 0x611f +0x3437 0x6163 +0x3438 0x61be +0x3439 0x63db +0x343a 0x6562 +0x343b 0x67d1 +0x343c 0x6853 +0x343d 0x68fa +0x343e 0x6b3e +0x343f 0x6b53 +0x3440 0x6c57 +0x3441 0x6f22 +0x3442 0x6f97 +0x3443 0x6f45 +0x3444 0x74b0 +0x3445 0x7518 +0x3446 0x76e3 +0x3447 0x770b +0x3448 0x7aff +0x3449 0x7ba1 +0x344a 0x7c21 +0x344b 0x7de9 +0x344c 0x7f36 +0x344d 0x7ff0 +0x344e 0x809d +0x344f 0x8266 +0x3450 0x839e +0x3451 0x89b3 +0x3452 0x8acc +0x3453 0x8cab +0x3454 0x9084 +0x3455 0x9451 +0x3456 0x9593 +0x3457 0x9591 +0x3458 0x95a2 +0x3459 0x9665 +0x345a 0x97d3 +0x345b 0x9928 +0x345c 0x8218 +0x345d 0x4e38 +0x345e 0x542b +0x345f 0x5cb8 +0x3460 0x5dcc +0x3461 0x73a9 +0x3462 0x764c +0x3463 0x773c +0x3464 0x5ca9 +0x3465 0x7feb +0x3466 0x8d0b +0x3467 0x96c1 +0x3468 0x9811 +0x3469 0x9854 +0x346a 0x9858 +0x346b 0x4f01 +0x346c 0x4f0e +0x346d 0x5371 +0x346e 0x559c +0x346f 0x5668 +0x3470 0x57fa +0x3471 0x5947 +0x3472 0x5b09 +0x3473 0x5bc4 +0x3474 0x5c90 +0x3475 0x5e0c +0x3476 0x5e7e +0x3477 0x5fcc +0x3478 0x63ee +0x3479 0x673a +0x347a 0x65d7 +0x347b 0x65e2 +0x347c 0x671f +0x347d 0x68cb +0x347e 0x68c4 +0x3521 0x6a5f +0x3522 0x5e30 +0x3523 0x6bc5 +0x3524 0x6c17 +0x3525 0x6c7d +0x3526 0x757f +0x3527 0x7948 +0x3528 0x5b63 +0x3529 0x7a00 +0x352a 0x7d00 +0x352b 0x5fbd +0x352c 0x898f +0x352d 0x8a18 +0x352e 0x8cb4 +0x352f 0x8d77 +0x3530 0x8ecc +0x3531 0x8f1d +0x3532 0x98e2 +0x3533 0x9a0e +0x3534 0x9b3c +0x3535 0x4e80 +0x3536 0x507d +0x3537 0x5100 +0x3538 0x5993 +0x3539 0x5b9c +0x353a 0x622f +0x353b 0x6280 +0x353c 0x64ec +0x353d 0x6b3a +0x353e 0x72a0 +0x353f 0x7591 +0x3540 0x7947 +0x3541 0x7fa9 +0x3542 0x87fb +0x3543 0x8abc +0x3544 0x8b70 +0x3545 0x63ac +0x3546 0x83ca +0x3547 0x97a0 +0x3548 0x5409 +0x3549 0x5403 +0x354a 0x55ab +0x354b 0x6854 +0x354c 0x6a58 +0x354d 0x8a70 +0x354e 0x7827 +0x354f 0x6775 +0x3550 0x9ecd +0x3551 0x5374 +0x3552 0x5ba2 +0x3553 0x811a +0x3554 0x8650 +0x3555 0x9006 +0x3556 0x4e18 +0x3557 0x4e45 +0x3558 0x4ec7 +0x3559 0x4f11 +0x355a 0x53ca +0x355b 0x5438 +0x355c 0x5bae +0x355d 0x5f13 +0x355e 0x6025 +0x355f 0x6551 +0x3560 0x673d +0x3561 0x6c42 +0x3562 0x6c72 +0x3563 0x6ce3 +0x3564 0x7078 +0x3565 0x7403 +0x3566 0x7a76 +0x3567 0x7aae +0x3568 0x7b08 +0x3569 0x7d1a +0x356a 0x7cfe +0x356b 0x7d66 +0x356c 0x65e7 +0x356d 0x725b +0x356e 0x53bb +0x356f 0x5c45 +0x3570 0x5de8 +0x3571 0x62d2 +0x3572 0x62e0 +0x3573 0x6319 +0x3574 0x6e20 +0x3575 0x865a +0x3576 0x8a31 +0x3577 0x8ddd +0x3578 0x92f8 +0x3579 0x6f01 +0x357a 0x79a6 +0x357b 0x9b5a +0x357c 0x4ea8 +0x357d 0x4eab +0x357e 0x4eac +0x3621 0x4f9b +0x3622 0x4fa0 +0x3623 0x50d1 +0x3624 0x5147 +0x3625 0x7af6 +0x3626 0x5171 +0x3627 0x51f6 +0x3628 0x5354 +0x3629 0x5321 +0x362a 0x537f +0x362b 0x53eb +0x362c 0x55ac +0x362d 0x5883 +0x362e 0x5ce1 +0x362f 0x5f37 +0x3630 0x5f4a +0x3631 0x602f +0x3632 0x6050 +0x3633 0x606d +0x3634 0x631f +0x3635 0x6559 +0x3636 0x6a4b +0x3637 0x6cc1 +0x3638 0x72c2 +0x3639 0x72ed +0x363a 0x77ef +0x363b 0x80f8 +0x363c 0x8105 +0x363d 0x8208 +0x363e 0x854e +0x363f 0x90f7 +0x3640 0x93e1 +0x3641 0x97ff +0x3642 0x9957 +0x3643 0x9a5a +0x3644 0x4ef0 +0x3645 0x51dd +0x3646 0x5c2d +0x3647 0x6681 +0x3648 0x696d +0x3649 0x5c40 +0x364a 0x66f2 +0x364b 0x6975 +0x364c 0x7389 +0x364d 0x6850 +0x364e 0x7c81 +0x364f 0x50c5 +0x3650 0x52e4 +0x3651 0x5747 +0x3652 0x5dfe +0x3653 0x9326 +0x3654 0x65a4 +0x3655 0x6b23 +0x3656 0x6b3d +0x3657 0x7434 +0x3658 0x7981 +0x3659 0x79bd +0x365a 0x7b4b +0x365b 0x7dca +0x365c 0x82b9 +0x365d 0x83cc +0x365e 0x887f +0x365f 0x895f +0x3660 0x8b39 +0x3661 0x8fd1 +0x3662 0x91d1 +0x3663 0x541f +0x3664 0x9280 +0x3665 0x4e5d +0x3666 0x5036 +0x3667 0x53e5 +0x3668 0x533a +0x3669 0x72d7 +0x366a 0x7396 +0x366b 0x77e9 +0x366c 0x82e6 +0x366d 0x8eaf +0x366e 0x99c6 +0x366f 0x99c8 +0x3670 0x99d2 +0x3671 0x5177 +0x3672 0x611a +0x3673 0x865e +0x3674 0x55b0 +0x3675 0x7a7a +0x3676 0x5076 +0x3677 0x5bd3 +0x3678 0x9047 +0x3679 0x9685 +0x367a 0x4e32 +0x367b 0x6adb +0x367c 0x91e7 +0x367d 0x5c51 +0x367e 0x5c48 +0x3721 0x6398 +0x3722 0x7a9f +0x3723 0x6c93 +0x3724 0x9774 +0x3725 0x8f61 +0x3726 0x7aaa +0x3727 0x718a +0x3728 0x9688 +0x3729 0x7c82 +0x372a 0x6817 +0x372b 0x7e70 +0x372c 0x6851 +0x372d 0x936c +0x372e 0x52f2 +0x372f 0x541b +0x3730 0x85ab +0x3731 0x8a13 +0x3732 0x7fa4 +0x3733 0x8ecd +0x3734 0x90e1 +0x3735 0x5366 +0x3736 0x8888 +0x3737 0x7941 +0x3738 0x4fc2 +0x3739 0x50be +0x373a 0x5211 +0x373b 0x5144 +0x373c 0x5553 +0x373d 0x572d +0x373e 0x73ea +0x373f 0x578b +0x3740 0x5951 +0x3741 0x5f62 +0x3742 0x5f84 +0x3743 0x6075 +0x3744 0x6176 +0x3745 0x6167 +0x3746 0x61a9 +0x3747 0x63b2 +0x3748 0x643a +0x3749 0x656c +0x374a 0x666f +0x374b 0x6842 +0x374c 0x6e13 +0x374d 0x7566 +0x374e 0x7a3d +0x374f 0x7cfb +0x3750 0x7d4c +0x3751 0x7d99 +0x3752 0x7e4b +0x3753 0x7f6b +0x3754 0x830e +0x3755 0x834a +0x3756 0x86cd +0x3757 0x8a08 +0x3758 0x8a63 +0x3759 0x8b66 +0x375a 0x8efd +0x375b 0x981a +0x375c 0x9d8f +0x375d 0x82b8 +0x375e 0x8fce +0x375f 0x9be8 +0x3760 0x5287 +0x3761 0x621f +0x3762 0x6483 +0x3763 0x6fc0 +0x3764 0x9699 +0x3765 0x6841 +0x3766 0x5091 +0x3767 0x6b20 +0x3768 0x6c7a +0x3769 0x6f54 +0x376a 0x7a74 +0x376b 0x7d50 +0x376c 0x8840 +0x376d 0x8a23 +0x376e 0x6708 +0x376f 0x4ef6 +0x3770 0x5039 +0x3771 0x5026 +0x3772 0x5065 +0x3773 0x517c +0x3774 0x5238 +0x3775 0x5263 +0x3776 0x55a7 +0x3777 0x570f +0x3778 0x5805 +0x3779 0x5acc +0x377a 0x5efa +0x377b 0x61b2 +0x377c 0x61f8 +0x377d 0x62f3 +0x377e 0x6372 +0x3821 0x691c +0x3822 0x6a29 +0x3823 0x727d +0x3824 0x72ac +0x3825 0x732e +0x3826 0x7814 +0x3827 0x786f +0x3828 0x7d79 +0x3829 0x770c +0x382a 0x80a9 +0x382b 0x898b +0x382c 0x8b19 +0x382d 0x8ce2 +0x382e 0x8ed2 +0x382f 0x9063 +0x3830 0x9375 +0x3831 0x967a +0x3832 0x9855 +0x3833 0x9a13 +0x3834 0x9e78 +0x3835 0x5143 +0x3836 0x539f +0x3837 0x53b3 +0x3838 0x5e7b +0x3839 0x5f26 +0x383a 0x6e1b +0x383b 0x6e90 +0x383c 0x7384 +0x383d 0x73fe +0x383e 0x7d43 +0x383f 0x8237 +0x3840 0x8a00 +0x3841 0x8afa +0x3842 0x9650 +0x3843 0x4e4e +0x3844 0x500b +0x3845 0x53e4 +0x3846 0x547c +0x3847 0x56fa +0x3848 0x59d1 +0x3849 0x5b64 +0x384a 0x5df1 +0x384b 0x5eab +0x384c 0x5f27 +0x384d 0x6238 +0x384e 0x6545 +0x384f 0x67af +0x3850 0x6e56 +0x3851 0x72d0 +0x3852 0x7cca +0x3853 0x88b4 +0x3854 0x80a1 +0x3855 0x80e1 +0x3856 0x83f0 +0x3857 0x864e +0x3858 0x8a87 +0x3859 0x8de8 +0x385a 0x9237 +0x385b 0x96c7 +0x385c 0x9867 +0x385d 0x9f13 +0x385e 0x4e94 +0x385f 0x4e92 +0x3860 0x4f0d +0x3861 0x5348 +0x3862 0x5449 +0x3863 0x543e +0x3864 0x5a2f +0x3865 0x5f8c +0x3866 0x5fa1 +0x3867 0x609f +0x3868 0x68a7 +0x3869 0x6a8e +0x386a 0x745a +0x386b 0x7881 +0x386c 0x8a9e +0x386d 0x8aa4 +0x386e 0x8b77 +0x386f 0x9190 +0x3870 0x4e5e +0x3871 0x9bc9 +0x3872 0x4ea4 +0x3873 0x4f7c +0x3874 0x4faf +0x3875 0x5019 +0x3876 0x5016 +0x3877 0x5149 +0x3878 0x516c +0x3879 0x529f +0x387a 0x52b9 +0x387b 0x52fe +0x387c 0x539a +0x387d 0x53e3 +0x387e 0x5411 +0x3921 0x540e +0x3922 0x5589 +0x3923 0x5751 +0x3924 0x57a2 +0x3925 0x597d +0x3926 0x5b54 +0x3927 0x5b5d +0x3928 0x5b8f +0x3929 0x5de5 +0x392a 0x5de7 +0x392b 0x5df7 +0x392c 0x5e78 +0x392d 0x5e83 +0x392e 0x5e9a +0x392f 0x5eb7 +0x3930 0x5f18 +0x3931 0x6052 +0x3932 0x614c +0x3933 0x6297 +0x3934 0x62d8 +0x3935 0x63a7 +0x3936 0x653b +0x3937 0x6602 +0x3938 0x6643 +0x3939 0x66f4 +0x393a 0x676d +0x393b 0x6821 +0x393c 0x6897 +0x393d 0x69cb +0x393e 0x6c5f +0x393f 0x6d2a +0x3940 0x6d69 +0x3941 0x6e2f +0x3942 0x6e9d +0x3943 0x7532 +0x3944 0x7687 +0x3945 0x786c +0x3946 0x7a3f +0x3947 0x7ce0 +0x3948 0x7d05 +0x3949 0x7d18 +0x394a 0x7d5e +0x394b 0x7db1 +0x394c 0x8015 +0x394d 0x8003 +0x394e 0x80af +0x394f 0x80b1 +0x3950 0x8154 +0x3951 0x818f +0x3952 0x822a +0x3953 0x8352 +0x3954 0x884c +0x3955 0x8861 +0x3956 0x8b1b +0x3957 0x8ca2 +0x3958 0x8cfc +0x3959 0x90ca +0x395a 0x9175 +0x395b 0x9271 +0x395c 0x783f +0x395d 0x92fc +0x395e 0x95a4 +0x395f 0x964d +0x3960 0x9805 +0x3961 0x9999 +0x3962 0x9ad8 +0x3963 0x9d3b +0x3964 0x525b +0x3965 0x52ab +0x3966 0x53f7 +0x3967 0x5408 +0x3968 0x58d5 +0x3969 0x62f7 +0x396a 0x6fe0 +0x396b 0x8c6a +0x396c 0x8f5f +0x396d 0x9eb9 +0x396e 0x514b +0x396f 0x523b +0x3970 0x544a +0x3971 0x56fd +0x3972 0x7a40 +0x3973 0x9177 +0x3974 0x9d60 +0x3975 0x9ed2 +0x3976 0x7344 +0x3977 0x6f09 +0x3978 0x8170 +0x3979 0x7511 +0x397a 0x5ffd +0x397b 0x60da +0x397c 0x9aa8 +0x397d 0x72db +0x397e 0x8fbc +0x3a21 0x6b64 +0x3a22 0x9803 +0x3a23 0x4eca +0x3a24 0x56f0 +0x3a25 0x5764 +0x3a26 0x58be +0x3a27 0x5a5a +0x3a28 0x6068 +0x3a29 0x61c7 +0x3a2a 0x660f +0x3a2b 0x6606 +0x3a2c 0x6839 +0x3a2d 0x68b1 +0x3a2e 0x6df7 +0x3a2f 0x75d5 +0x3a30 0x7d3a +0x3a31 0x826e +0x3a32 0x9b42 +0x3a33 0x4e9b +0x3a34 0x4f50 +0x3a35 0x53c9 +0x3a36 0x5506 +0x3a37 0x5d6f +0x3a38 0x5de6 +0x3a39 0x5dee +0x3a3a 0x67fb +0x3a3b 0x6c99 +0x3a3c 0x7473 +0x3a3d 0x7802 +0x3a3e 0x8a50 +0x3a3f 0x9396 +0x3a40 0x88df +0x3a41 0x5750 +0x3a42 0x5ea7 +0x3a43 0x632b +0x3a44 0x50b5 +0x3a45 0x50ac +0x3a46 0x518d +0x3a47 0x6700 +0x3a48 0x54c9 +0x3a49 0x585e +0x3a4a 0x59bb +0x3a4b 0x5bb0 +0x3a4c 0x5f69 +0x3a4d 0x624d +0x3a4e 0x63a1 +0x3a4f 0x683d +0x3a50 0x6b73 +0x3a51 0x6e08 +0x3a52 0x707d +0x3a53 0x91c7 +0x3a54 0x7280 +0x3a55 0x7815 +0x3a56 0x7826 +0x3a57 0x796d +0x3a58 0x658e +0x3a59 0x7d30 +0x3a5a 0x83dc +0x3a5b 0x88c1 +0x3a5c 0x8f09 +0x3a5d 0x969b +0x3a5e 0x5264 +0x3a5f 0x5728 +0x3a60 0x6750 +0x3a61 0x7f6a +0x3a62 0x8ca1 +0x3a63 0x51b4 +0x3a64 0x5742 +0x3a65 0x962a +0x3a66 0x583a +0x3a67 0x698a +0x3a68 0x80b4 +0x3a69 0x54b2 +0x3a6a 0x5d0e +0x3a6b 0x57fc +0x3a6c 0x7895 +0x3a6d 0x9dfa +0x3a6e 0x4f5c +0x3a6f 0x524a +0x3a70 0x548b +0x3a71 0x643e +0x3a72 0x6628 +0x3a73 0x6714 +0x3a74 0x67f5 +0x3a75 0x7a84 +0x3a76 0x7b56 +0x3a77 0x7d22 +0x3a78 0x932f +0x3a79 0x685c +0x3a7a 0x9bad +0x3a7b 0x7b39 +0x3a7c 0x5319 +0x3a7d 0x518a +0x3a7e 0x5237 +0x3b21 0x5bdf +0x3b22 0x62f6 +0x3b23 0x64ae +0x3b24 0x64e6 +0x3b25 0x672d +0x3b26 0x6bba +0x3b27 0x85a9 +0x3b28 0x96d1 +0x3b29 0x7690 +0x3b2a 0x9bd6 +0x3b2b 0x634c +0x3b2c 0x9306 +0x3b2d 0x9bab +0x3b2e 0x76bf +0x3b2f 0x6652 +0x3b30 0x4e09 +0x3b31 0x5098 +0x3b32 0x53c2 +0x3b33 0x5c71 +0x3b34 0x60e8 +0x3b35 0x6492 +0x3b36 0x6563 +0x3b37 0x685f +0x3b38 0x71e6 +0x3b39 0x73ca +0x3b3a 0x7523 +0x3b3b 0x7b97 +0x3b3c 0x7e82 +0x3b3d 0x8695 +0x3b3e 0x8b83 +0x3b3f 0x8cdb +0x3b40 0x9178 +0x3b41 0x9910 +0x3b42 0x65ac +0x3b43 0x66ab +0x3b44 0x6b8b +0x3b45 0x4ed5 +0x3b46 0x4ed4 +0x3b47 0x4f3a +0x3b48 0x4f7f +0x3b49 0x523a +0x3b4a 0x53f8 +0x3b4b 0x53f2 +0x3b4c 0x55e3 +0x3b4d 0x56db +0x3b4e 0x58eb +0x3b4f 0x59cb +0x3b50 0x59c9 +0x3b51 0x59ff +0x3b52 0x5b50 +0x3b53 0x5c4d +0x3b54 0x5e02 +0x3b55 0x5e2b +0x3b56 0x5fd7 +0x3b57 0x601d +0x3b58 0x6307 +0x3b59 0x652f +0x3b5a 0x5b5c +0x3b5b 0x65af +0x3b5c 0x65bd +0x3b5d 0x65e8 +0x3b5e 0x679d +0x3b5f 0x6b62 +0x3b60 0x6b7b +0x3b61 0x6c0f +0x3b62 0x7345 +0x3b63 0x7949 +0x3b64 0x79c1 +0x3b65 0x7cf8 +0x3b66 0x7d19 +0x3b67 0x7d2b +0x3b68 0x80a2 +0x3b69 0x8102 +0x3b6a 0x81f3 +0x3b6b 0x8996 +0x3b6c 0x8a5e +0x3b6d 0x8a69 +0x3b6e 0x8a66 +0x3b6f 0x8a8c +0x3b70 0x8aee +0x3b71 0x8cc7 +0x3b72 0x8cdc +0x3b73 0x96cc +0x3b74 0x98fc +0x3b75 0x6b6f +0x3b76 0x4e8b +0x3b77 0x4f3c +0x3b78 0x4f8d +0x3b79 0x5150 +0x3b7a 0x5b57 +0x3b7b 0x5bfa +0x3b7c 0x6148 +0x3b7d 0x6301 +0x3b7e 0x6642 +0x3c21 0x6b21 +0x3c22 0x6ecb +0x3c23 0x6cbb +0x3c24 0x723e +0x3c25 0x74bd +0x3c26 0x75d4 +0x3c27 0x78c1 +0x3c28 0x793a +0x3c29 0x800c +0x3c2a 0x8033 +0x3c2b 0x81ea +0x3c2c 0x8494 +0x3c2d 0x8f9e +0x3c2e 0x6c50 +0x3c2f 0x9e7f +0x3c30 0x5f0f +0x3c31 0x8b58 +0x3c32 0x9d2b +0x3c33 0x7afa +0x3c34 0x8ef8 +0x3c35 0x5b8d +0x3c36 0x96eb +0x3c37 0x4e03 +0x3c38 0x53f1 +0x3c39 0x57f7 +0x3c3a 0x5931 +0x3c3b 0x5ac9 +0x3c3c 0x5ba4 +0x3c3d 0x6089 +0x3c3e 0x6e7f +0x3c3f 0x6f06 +0x3c40 0x75be +0x3c41 0x8cea +0x3c42 0x5b9f +0x3c43 0x8500 +0x3c44 0x7be0 +0x3c45 0x5072 +0x3c46 0x67f4 +0x3c47 0x829d +0x3c48 0x5c61 +0x3c49 0x854a +0x3c4a 0x7e1e +0x3c4b 0x820e +0x3c4c 0x5199 +0x3c4d 0x5c04 +0x3c4e 0x6368 +0x3c4f 0x8d66 +0x3c50 0x659c +0x3c51 0x716e +0x3c52 0x793e +0x3c53 0x7d17 +0x3c54 0x8005 +0x3c55 0x8b1d +0x3c56 0x8eca +0x3c57 0x906e +0x3c58 0x86c7 +0x3c59 0x90aa +0x3c5a 0x501f +0x3c5b 0x52fa +0x3c5c 0x5c3a +0x3c5d 0x6753 +0x3c5e 0x707c +0x3c5f 0x7235 +0x3c60 0x914c +0x3c61 0x91c8 +0x3c62 0x932b +0x3c63 0x82e5 +0x3c64 0x5bc2 +0x3c65 0x5f31 +0x3c66 0x60f9 +0x3c67 0x4e3b +0x3c68 0x53d6 +0x3c69 0x5b88 +0x3c6a 0x624b +0x3c6b 0x6731 +0x3c6c 0x6b8a +0x3c6d 0x72e9 +0x3c6e 0x73e0 +0x3c6f 0x7a2e +0x3c70 0x816b +0x3c71 0x8da3 +0x3c72 0x9152 +0x3c73 0x9996 +0x3c74 0x5112 +0x3c75 0x53d7 +0x3c76 0x546a +0x3c77 0x5bff +0x3c78 0x6388 +0x3c79 0x6a39 +0x3c7a 0x7dac +0x3c7b 0x9700 +0x3c7c 0x56da +0x3c7d 0x53ce +0x3c7e 0x5468 +0x3d21 0x5b97 +0x3d22 0x5c31 +0x3d23 0x5dde +0x3d24 0x4fee +0x3d25 0x6101 +0x3d26 0x62fe +0x3d27 0x6d32 +0x3d28 0x79c0 +0x3d29 0x79cb +0x3d2a 0x7d42 +0x3d2b 0x7e4d +0x3d2c 0x7fd2 +0x3d2d 0x81ed +0x3d2e 0x821f +0x3d2f 0x8490 +0x3d30 0x8846 +0x3d31 0x8972 +0x3d32 0x8b90 +0x3d33 0x8e74 +0x3d34 0x8f2f +0x3d35 0x9031 +0x3d36 0x914b +0x3d37 0x916c +0x3d38 0x96c6 +0x3d39 0x919c +0x3d3a 0x4ec0 +0x3d3b 0x4f4f +0x3d3c 0x5145 +0x3d3d 0x5341 +0x3d3e 0x5f93 +0x3d3f 0x620e +0x3d40 0x67d4 +0x3d41 0x6c41 +0x3d42 0x6e0b +0x3d43 0x7363 +0x3d44 0x7e26 +0x3d45 0x91cd +0x3d46 0x9283 +0x3d47 0x53d4 +0x3d48 0x5919 +0x3d49 0x5bbf +0x3d4a 0x6dd1 +0x3d4b 0x795d +0x3d4c 0x7e2e +0x3d4d 0x7c9b +0x3d4e 0x587e +0x3d4f 0x719f +0x3d50 0x51fa +0x3d51 0x8853 +0x3d52 0x8ff0 +0x3d53 0x4fca +0x3d54 0x5cfb +0x3d55 0x6625 +0x3d56 0x77ac +0x3d57 0x7ae3 +0x3d58 0x821c +0x3d59 0x99ff +0x3d5a 0x51c6 +0x3d5b 0x5faa +0x3d5c 0x65ec +0x3d5d 0x696f +0x3d5e 0x6b89 +0x3d5f 0x6df3 +0x3d60 0x6e96 +0x3d61 0x6f64 +0x3d62 0x76fe +0x3d63 0x7d14 +0x3d64 0x5de1 +0x3d65 0x9075 +0x3d66 0x9187 +0x3d67 0x9806 +0x3d68 0x51e6 +0x3d69 0x521d +0x3d6a 0x6240 +0x3d6b 0x6691 +0x3d6c 0x66d9 +0x3d6d 0x6e1a +0x3d6e 0x5eb6 +0x3d6f 0x7dd2 +0x3d70 0x7f72 +0x3d71 0x66f8 +0x3d72 0x85af +0x3d73 0x85f7 +0x3d74 0x8af8 +0x3d75 0x52a9 +0x3d76 0x53d9 +0x3d77 0x5973 +0x3d78 0x5e8f +0x3d79 0x5f90 +0x3d7a 0x6055 +0x3d7b 0x92e4 +0x3d7c 0x9664 +0x3d7d 0x50b7 +0x3d7e 0x511f +0x3e21 0x52dd +0x3e22 0x5320 +0x3e23 0x5347 +0x3e24 0x53ec +0x3e25 0x54e8 +0x3e26 0x5546 +0x3e27 0x5531 +0x3e28 0x5617 +0x3e29 0x5968 +0x3e2a 0x59be +0x3e2b 0x5a3c +0x3e2c 0x5bb5 +0x3e2d 0x5c06 +0x3e2e 0x5c0f +0x3e2f 0x5c11 +0x3e30 0x5c1a +0x3e31 0x5e84 +0x3e32 0x5e8a +0x3e33 0x5ee0 +0x3e34 0x5f70 +0x3e35 0x627f +0x3e36 0x6284 +0x3e37 0x62db +0x3e38 0x638c +0x3e39 0x6377 +0x3e3a 0x6607 +0x3e3b 0x660c +0x3e3c 0x662d +0x3e3d 0x6676 +0x3e3e 0x677e +0x3e3f 0x68a2 +0x3e40 0x6a1f +0x3e41 0x6a35 +0x3e42 0x6cbc +0x3e43 0x6d88 +0x3e44 0x6e09 +0x3e45 0x6e58 +0x3e46 0x713c +0x3e47 0x7126 +0x3e48 0x7167 +0x3e49 0x75c7 +0x3e4a 0x7701 +0x3e4b 0x785d +0x3e4c 0x7901 +0x3e4d 0x7965 +0x3e4e 0x79f0 +0x3e4f 0x7ae0 +0x3e50 0x7b11 +0x3e51 0x7ca7 +0x3e52 0x7d39 +0x3e53 0x8096 +0x3e54 0x83d6 +0x3e55 0x848b +0x3e56 0x8549 +0x3e57 0x885d +0x3e58 0x88f3 +0x3e59 0x8a1f +0x3e5a 0x8a3c +0x3e5b 0x8a54 +0x3e5c 0x8a73 +0x3e5d 0x8c61 +0x3e5e 0x8cde +0x3e5f 0x91a4 +0x3e60 0x9266 +0x3e61 0x937e +0x3e62 0x9418 +0x3e63 0x969c +0x3e64 0x9798 +0x3e65 0x4e0a +0x3e66 0x4e08 +0x3e67 0x4e1e +0x3e68 0x4e57 +0x3e69 0x5197 +0x3e6a 0x5270 +0x3e6b 0x57ce +0x3e6c 0x5834 +0x3e6d 0x58cc +0x3e6e 0x5b22 +0x3e6f 0x5e38 +0x3e70 0x60c5 +0x3e71 0x64fe +0x3e72 0x6761 +0x3e73 0x6756 +0x3e74 0x6d44 +0x3e75 0x72b6 +0x3e76 0x7573 +0x3e77 0x7a63 +0x3e78 0x84b8 +0x3e79 0x8b72 +0x3e7a 0x91b8 +0x3e7b 0x9320 +0x3e7c 0x5631 +0x3e7d 0x57f4 +0x3e7e 0x98fe +0x3f21 0x62ed +0x3f22 0x690d +0x3f23 0x6b96 +0x3f24 0x71ed +0x3f25 0x7e54 +0x3f26 0x8077 +0x3f27 0x8272 +0x3f28 0x89e6 +0x3f29 0x98df +0x3f2a 0x8755 +0x3f2b 0x8fb1 +0x3f2c 0x5c3b +0x3f2d 0x4f38 +0x3f2e 0x4fe1 +0x3f2f 0x4fb5 +0x3f30 0x5507 +0x3f31 0x5a20 +0x3f32 0x5bdd +0x3f33 0x5be9 +0x3f34 0x5fc3 +0x3f35 0x614e +0x3f36 0x632f +0x3f37 0x65b0 +0x3f38 0x664b +0x3f39 0x68ee +0x3f3a 0x699b +0x3f3b 0x6d78 +0x3f3c 0x6df1 +0x3f3d 0x7533 +0x3f3e 0x75b9 +0x3f3f 0x771f +0x3f40 0x795e +0x3f41 0x79e6 +0x3f42 0x7d33 +0x3f43 0x81e3 +0x3f44 0x82af +0x3f45 0x85aa +0x3f46 0x89aa +0x3f47 0x8a3a +0x3f48 0x8eab +0x3f49 0x8f9b +0x3f4a 0x9032 +0x3f4b 0x91dd +0x3f4c 0x9707 +0x3f4d 0x4eba +0x3f4e 0x4ec1 +0x3f4f 0x5203 +0x3f50 0x5875 +0x3f51 0x58ec +0x3f52 0x5c0b +0x3f53 0x751a +0x3f54 0x5c3d +0x3f55 0x814e +0x3f56 0x8a0a +0x3f57 0x8fc5 +0x3f58 0x9663 +0x3f59 0x976d +0x3f5a 0x7b25 +0x3f5b 0x8acf +0x3f5c 0x9808 +0x3f5d 0x9162 +0x3f5e 0x56f3 +0x3f5f 0x53a8 +0x3f60 0x9017 +0x3f61 0x5439 +0x3f62 0x5782 +0x3f63 0x5e25 +0x3f64 0x63a8 +0x3f65 0x6c34 +0x3f66 0x708a +0x3f67 0x7761 +0x3f68 0x7c8b +0x3f69 0x7fe0 +0x3f6a 0x8870 +0x3f6b 0x9042 +0x3f6c 0x9154 +0x3f6d 0x9310 +0x3f6e 0x9318 +0x3f6f 0x968f +0x3f70 0x745e +0x3f71 0x9ac4 +0x3f72 0x5d07 +0x3f73 0x5d69 +0x3f74 0x6570 +0x3f75 0x67a2 +0x3f76 0x8da8 +0x3f77 0x96db +0x3f78 0x636e +0x3f79 0x6749 +0x3f7a 0x6919 +0x3f7b 0x83c5 +0x3f7c 0x9817 +0x3f7d 0x96c0 +0x3f7e 0x88fe +0x4021 0x6f84 +0x4022 0x647a +0x4023 0x5bf8 +0x4024 0x4e16 +0x4025 0x702c +0x4026 0x755d +0x4027 0x662f +0x4028 0x51c4 +0x4029 0x5236 +0x402a 0x52e2 +0x402b 0x59d3 +0x402c 0x5f81 +0x402d 0x6027 +0x402e 0x6210 +0x402f 0x653f +0x4030 0x6574 +0x4031 0x661f +0x4032 0x6674 +0x4033 0x68f2 +0x4034 0x6816 +0x4035 0x6b63 +0x4036 0x6e05 +0x4037 0x7272 +0x4038 0x751f +0x4039 0x76db +0x403a 0x7cbe +0x403b 0x8056 +0x403c 0x58f0 +0x403d 0x88fd +0x403e 0x897f +0x403f 0x8aa0 +0x4040 0x8a93 +0x4041 0x8acb +0x4042 0x901d +0x4043 0x9192 +0x4044 0x9752 +0x4045 0x9759 +0x4046 0x6589 +0x4047 0x7a0e +0x4048 0x8106 +0x4049 0x96bb +0x404a 0x5e2d +0x404b 0x60dc +0x404c 0x621a +0x404d 0x65a5 +0x404e 0x6614 +0x404f 0x6790 +0x4050 0x77f3 +0x4051 0x7a4d +0x4052 0x7c4d +0x4053 0x7e3e +0x4054 0x810a +0x4055 0x8cac +0x4056 0x8d64 +0x4057 0x8de1 +0x4058 0x8e5f +0x4059 0x78a9 +0x405a 0x5207 +0x405b 0x62d9 +0x405c 0x63a5 +0x405d 0x6442 +0x405e 0x6298 +0x405f 0x8a2d +0x4060 0x7a83 +0x4061 0x7bc0 +0x4062 0x8aac +0x4063 0x96ea +0x4064 0x7d76 +0x4065 0x820c +0x4066 0x8749 +0x4067 0x4ed9 +0x4068 0x5148 +0x4069 0x5343 +0x406a 0x5360 +0x406b 0x5ba3 +0x406c 0x5c02 +0x406d 0x5c16 +0x406e 0x5ddd +0x406f 0x6226 +0x4070 0x6247 +0x4071 0x64b0 +0x4072 0x6813 +0x4073 0x6834 +0x4074 0x6cc9 +0x4075 0x6d45 +0x4076 0x6d17 +0x4077 0x67d3 +0x4078 0x6f5c +0x4079 0x714e +0x407a 0x717d +0x407b 0x65cb +0x407c 0x7a7f +0x407d 0x7bad +0x407e 0x7dda +0x4121 0x7e4a +0x4122 0x7fa8 +0x4123 0x817a +0x4124 0x821b +0x4125 0x8239 +0x4126 0x85a6 +0x4127 0x8a6e +0x4128 0x8cce +0x4129 0x8df5 +0x412a 0x9078 +0x412b 0x9077 +0x412c 0x92ad +0x412d 0x9291 +0x412e 0x9583 +0x412f 0x9bae +0x4130 0x524d +0x4131 0x5584 +0x4132 0x6f38 +0x4133 0x7136 +0x4134 0x5168 +0x4135 0x7985 +0x4136 0x7e55 +0x4137 0x81b3 +0x4138 0x7cce +0x4139 0x564c +0x413a 0x5851 +0x413b 0x5ca8 +0x413c 0x63aa +0x413d 0x66fe +0x413e 0x66fd +0x413f 0x695a +0x4140 0x72d9 +0x4141 0x758f +0x4142 0x758e +0x4143 0x790e +0x4144 0x7956 +0x4145 0x79df +0x4146 0x7c97 +0x4147 0x7d20 +0x4148 0x7d44 +0x4149 0x8607 +0x414a 0x8a34 +0x414b 0x963b +0x414c 0x9061 +0x414d 0x9f20 +0x414e 0x50e7 +0x414f 0x5275 +0x4150 0x53cc +0x4151 0x53e2 +0x4152 0x5009 +0x4153 0x55aa +0x4154 0x58ee +0x4155 0x594f +0x4156 0x723d +0x4157 0x5b8b +0x4158 0x5c64 +0x4159 0x531d +0x415a 0x60e3 +0x415b 0x60f3 +0x415c 0x635c +0x415d 0x6383 +0x415e 0x633f +0x415f 0x63bb +0x4160 0x64cd +0x4161 0x65e9 +0x4162 0x66f9 +0x4163 0x5de3 +0x4164 0x69cd +0x4165 0x69fd +0x4166 0x6f15 +0x4167 0x71e5 +0x4168 0x4e89 +0x4169 0x75e9 +0x416a 0x76f8 +0x416b 0x7a93 +0x416c 0x7cdf +0x416d 0x7dcf +0x416e 0x7d9c +0x416f 0x8061 +0x4170 0x8349 +0x4171 0x8358 +0x4172 0x846c +0x4173 0x84bc +0x4174 0x85fb +0x4175 0x88c5 +0x4176 0x8d70 +0x4177 0x9001 +0x4178 0x906d +0x4179 0x9397 +0x417a 0x971c +0x417b 0x9a12 +0x417c 0x50cf +0x417d 0x5897 +0x417e 0x618e +0x4221 0x81d3 +0x4222 0x8535 +0x4223 0x8d08 +0x4224 0x9020 +0x4225 0x4fc3 +0x4226 0x5074 +0x4227 0x5247 +0x4228 0x5373 +0x4229 0x606f +0x422a 0x6349 +0x422b 0x675f +0x422c 0x6e2c +0x422d 0x8db3 +0x422e 0x901f +0x422f 0x4fd7 +0x4230 0x5c5e +0x4231 0x8cca +0x4232 0x65cf +0x4233 0x7d9a +0x4234 0x5352 +0x4235 0x8896 +0x4236 0x5176 +0x4237 0x63c3 +0x4238 0x5b58 +0x4239 0x5b6b +0x423a 0x5c0a +0x423b 0x640d +0x423c 0x6751 +0x423d 0x905c +0x423e 0x4ed6 +0x423f 0x591a +0x4240 0x592a +0x4241 0x6c70 +0x4242 0x8a51 +0x4243 0x553e +0x4244 0x5815 +0x4245 0x59a5 +0x4246 0x60f0 +0x4247 0x6253 +0x4248 0x67c1 +0x4249 0x8235 +0x424a 0x6955 +0x424b 0x9640 +0x424c 0x99c4 +0x424d 0x9a28 +0x424e 0x4f53 +0x424f 0x5806 +0x4250 0x5bfe +0x4251 0x8010 +0x4252 0x5cb1 +0x4253 0x5e2f +0x4254 0x5f85 +0x4255 0x6020 +0x4256 0x614b +0x4257 0x6234 +0x4258 0x66ff +0x4259 0x6cf0 +0x425a 0x6ede +0x425b 0x80ce +0x425c 0x817f +0x425d 0x82d4 +0x425e 0x888b +0x425f 0x8cb8 +0x4260 0x9000 +0x4261 0x902e +0x4262 0x968a +0x4263 0x9edb +0x4264 0x9bdb +0x4265 0x4ee3 +0x4266 0x53f0 +0x4267 0x5927 +0x4268 0x7b2c +0x4269 0x918d +0x426a 0x984c +0x426b 0x9df9 +0x426c 0x6edd +0x426d 0x7027 +0x426e 0x5353 +0x426f 0x5544 +0x4270 0x5b85 +0x4271 0x6258 +0x4272 0x629e +0x4273 0x62d3 +0x4274 0x6ca2 +0x4275 0x6fef +0x4276 0x7422 +0x4277 0x8a17 +0x4278 0x9438 +0x4279 0x6fc1 +0x427a 0x8afe +0x427b 0x8338 +0x427c 0x51e7 +0x427d 0x86f8 +0x427e 0x53ea +0x4321 0x53e9 +0x4322 0x4f46 +0x4323 0x9054 +0x4324 0x8fb0 +0x4325 0x596a +0x4326 0x8131 +0x4327 0x5dfd +0x4328 0x7aea +0x4329 0x8fbf +0x432a 0x68da +0x432b 0x8c37 +0x432c 0x72f8 +0x432d 0x9c48 +0x432e 0x6a3d +0x432f 0x8ab0 +0x4330 0x4e39 +0x4331 0x5358 +0x4332 0x5606 +0x4333 0x5766 +0x4334 0x62c5 +0x4335 0x63a2 +0x4336 0x65e6 +0x4337 0x6b4e +0x4338 0x6de1 +0x4339 0x6e5b +0x433a 0x70ad +0x433b 0x77ed +0x433c 0x7aef +0x433d 0x7baa +0x433e 0x7dbb +0x433f 0x803d +0x4340 0x80c6 +0x4341 0x86cb +0x4342 0x8a95 +0x4343 0x935b +0x4344 0x56e3 +0x4345 0x58c7 +0x4346 0x5f3e +0x4347 0x65ad +0x4348 0x6696 +0x4349 0x6a80 +0x434a 0x6bb5 +0x434b 0x7537 +0x434c 0x8ac7 +0x434d 0x5024 +0x434e 0x77e5 +0x434f 0x5730 +0x4350 0x5f1b +0x4351 0x6065 +0x4352 0x667a +0x4353 0x6c60 +0x4354 0x75f4 +0x4355 0x7a1a +0x4356 0x7f6e +0x4357 0x81f4 +0x4358 0x8718 +0x4359 0x9045 +0x435a 0x99b3 +0x435b 0x7bc9 +0x435c 0x755c +0x435d 0x7af9 +0x435e 0x7b51 +0x435f 0x84c4 +0x4360 0x9010 +0x4361 0x79e9 +0x4362 0x7a92 +0x4363 0x8336 +0x4364 0x5ae1 +0x4365 0x7740 +0x4366 0x4e2d +0x4367 0x4ef2 +0x4368 0x5b99 +0x4369 0x5fe0 +0x436a 0x62bd +0x436b 0x663c +0x436c 0x67f1 +0x436d 0x6ce8 +0x436e 0x866b +0x436f 0x8877 +0x4370 0x8a3b +0x4371 0x914e +0x4372 0x92f3 +0x4373 0x99d0 +0x4374 0x6a17 +0x4375 0x7026 +0x4376 0x732a +0x4377 0x82e7 +0x4378 0x8457 +0x4379 0x8caf +0x437a 0x4e01 +0x437b 0x5146 +0x437c 0x51cb +0x437d 0x558b +0x437e 0x5bf5 +0x4421 0x5e16 +0x4422 0x5e33 +0x4423 0x5e81 +0x4424 0x5f14 +0x4425 0x5f35 +0x4426 0x5f6b +0x4427 0x5fb4 +0x4428 0x61f2 +0x4429 0x6311 +0x442a 0x66a2 +0x442b 0x671d +0x442c 0x6f6e +0x442d 0x7252 +0x442e 0x753a +0x442f 0x773a +0x4430 0x8074 +0x4431 0x8139 +0x4432 0x8178 +0x4433 0x8776 +0x4434 0x8abf +0x4435 0x8adc +0x4436 0x8d85 +0x4437 0x8df3 +0x4438 0x929a +0x4439 0x9577 +0x443a 0x9802 +0x443b 0x9ce5 +0x443c 0x52c5 +0x443d 0x6357 +0x443e 0x76f4 +0x443f 0x6715 +0x4440 0x6c88 +0x4441 0x73cd +0x4442 0x8cc3 +0x4443 0x93ae +0x4444 0x9673 +0x4445 0x6d25 +0x4446 0x589c +0x4447 0x690e +0x4448 0x69cc +0x4449 0x8ffd +0x444a 0x939a +0x444b 0x75db +0x444c 0x901a +0x444d 0x585a +0x444e 0x6802 +0x444f 0x63b4 +0x4450 0x69fb +0x4451 0x4f43 +0x4452 0x6f2c +0x4453 0x67d8 +0x4454 0x8fbb +0x4455 0x8526 +0x4456 0x7db4 +0x4457 0x9354 +0x4458 0x693f +0x4459 0x6f70 +0x445a 0x576a +0x445b 0x58f7 +0x445c 0x5b2c +0x445d 0x7d2c +0x445e 0x722a +0x445f 0x540a +0x4460 0x91e3 +0x4461 0x9db4 +0x4462 0x4ead +0x4463 0x4f4e +0x4464 0x505c +0x4465 0x5075 +0x4466 0x5243 +0x4467 0x8c9e +0x4468 0x5448 +0x4469 0x5824 +0x446a 0x5b9a +0x446b 0x5e1d +0x446c 0x5e95 +0x446d 0x5ead +0x446e 0x5ef7 +0x446f 0x5f1f +0x4470 0x608c +0x4471 0x62b5 +0x4472 0x633a +0x4473 0x63d0 +0x4474 0x68af +0x4475 0x6c40 +0x4476 0x7887 +0x4477 0x798e +0x4478 0x7a0b +0x4479 0x7de0 +0x447a 0x8247 +0x447b 0x8a02 +0x447c 0x8ae6 +0x447d 0x8e44 +0x447e 0x9013 +0x4521 0x90b8 +0x4522 0x912d +0x4523 0x91d8 +0x4524 0x9f0e +0x4525 0x6ce5 +0x4526 0x6458 +0x4527 0x64e2 +0x4528 0x6575 +0x4529 0x6ef4 +0x452a 0x7684 +0x452b 0x7b1b +0x452c 0x9069 +0x452d 0x93d1 +0x452e 0x6eba +0x452f 0x54f2 +0x4530 0x5fb9 +0x4531 0x64a4 +0x4532 0x8f4d +0x4533 0x8fed +0x4534 0x9244 +0x4535 0x5178 +0x4536 0x586b +0x4537 0x5929 +0x4538 0x5c55 +0x4539 0x5e97 +0x453a 0x6dfb +0x453b 0x7e8f +0x453c 0x751c +0x453d 0x8cbc +0x453e 0x8ee2 +0x453f 0x985b +0x4540 0x70b9 +0x4541 0x4f1d +0x4542 0x6bbf +0x4543 0x6fb1 +0x4544 0x7530 +0x4545 0x96fb +0x4546 0x514e +0x4547 0x5410 +0x4548 0x5835 +0x4549 0x5857 +0x454a 0x59ac +0x454b 0x5c60 +0x454c 0x5f92 +0x454d 0x6597 +0x454e 0x675c +0x454f 0x6e21 +0x4550 0x767b +0x4551 0x83df +0x4552 0x8ced +0x4553 0x9014 +0x4554 0x90fd +0x4555 0x934d +0x4556 0x7825 +0x4557 0x783a +0x4558 0x52aa +0x4559 0x5ea6 +0x455a 0x571f +0x455b 0x5974 +0x455c 0x6012 +0x455d 0x5012 +0x455e 0x515a +0x455f 0x51ac +0x4560 0x51cd +0x4561 0x5200 +0x4562 0x5510 +0x4563 0x5854 +0x4564 0x5858 +0x4565 0x5957 +0x4566 0x5b95 +0x4567 0x5cf6 +0x4568 0x5d8b +0x4569 0x60bc +0x456a 0x6295 +0x456b 0x642d +0x456c 0x6771 +0x456d 0x6843 +0x456e 0x68bc +0x456f 0x68df +0x4570 0x76d7 +0x4571 0x6dd8 +0x4572 0x6e6f +0x4573 0x6d9b +0x4574 0x706f +0x4575 0x71c8 +0x4576 0x5f53 +0x4577 0x75d8 +0x4578 0x7977 +0x4579 0x7b49 +0x457a 0x7b54 +0x457b 0x7b52 +0x457c 0x7cd6 +0x457d 0x7d71 +0x457e 0x5230 +0x4621 0x8463 +0x4622 0x8569 +0x4623 0x85e4 +0x4624 0x8a0e +0x4625 0x8b04 +0x4626 0x8c46 +0x4627 0x8e0f +0x4628 0x9003 +0x4629 0x900f +0x462a 0x9419 +0x462b 0x9676 +0x462c 0x982d +0x462d 0x9a30 +0x462e 0x95d8 +0x462f 0x50cd +0x4630 0x52d5 +0x4631 0x540c +0x4632 0x5802 +0x4633 0x5c0e +0x4634 0x61a7 +0x4635 0x649e +0x4636 0x6d1e +0x4637 0x77b3 +0x4638 0x7ae5 +0x4639 0x80f4 +0x463a 0x8404 +0x463b 0x9053 +0x463c 0x9285 +0x463d 0x5ce0 +0x463e 0x9d07 +0x463f 0x533f +0x4640 0x5f97 +0x4641 0x5fb3 +0x4642 0x6d9c +0x4643 0x7279 +0x4644 0x7763 +0x4645 0x79bf +0x4646 0x7be4 +0x4647 0x6bd2 +0x4648 0x72ec +0x4649 0x8aad +0x464a 0x6803 +0x464b 0x6a61 +0x464c 0x51f8 +0x464d 0x7a81 +0x464e 0x6934 +0x464f 0x5c4a +0x4650 0x9cf6 +0x4651 0x82eb +0x4652 0x5bc5 +0x4653 0x9149 +0x4654 0x701e +0x4655 0x5678 +0x4656 0x5c6f +0x4657 0x60c7 +0x4658 0x6566 +0x4659 0x6c8c +0x465a 0x8c5a +0x465b 0x9041 +0x465c 0x9813 +0x465d 0x5451 +0x465e 0x66c7 +0x465f 0x920d +0x4660 0x5948 +0x4661 0x90a3 +0x4662 0x5185 +0x4663 0x4e4d +0x4664 0x51ea +0x4665 0x8599 +0x4666 0x8b0e +0x4667 0x7058 +0x4668 0x637a +0x4669 0x934b +0x466a 0x6962 +0x466b 0x99b4 +0x466c 0x7e04 +0x466d 0x7577 +0x466e 0x5357 +0x466f 0x6960 +0x4670 0x8edf +0x4671 0x96e3 +0x4672 0x6c5d +0x4673 0x4e8c +0x4674 0x5c3c +0x4675 0x5f10 +0x4676 0x8fe9 +0x4677 0x5302 +0x4678 0x8cd1 +0x4679 0x8089 +0x467a 0x8679 +0x467b 0x5eff +0x467c 0x65e5 +0x467d 0x4e73 +0x467e 0x5165 +0x4721 0x5982 +0x4722 0x5c3f +0x4723 0x97ee +0x4724 0x4efb +0x4725 0x598a +0x4726 0x5fcd +0x4727 0x8a8d +0x4728 0x6fe1 +0x4729 0x79b0 +0x472a 0x7962 +0x472b 0x5be7 +0x472c 0x8471 +0x472d 0x732b +0x472e 0x71b1 +0x472f 0x5e74 +0x4730 0x5ff5 +0x4731 0x637b +0x4732 0x649a +0x4733 0x71c3 +0x4734 0x7c98 +0x4735 0x4e43 +0x4736 0x5efc +0x4737 0x4e4b +0x4738 0x57dc +0x4739 0x56a2 +0x473a 0x60a9 +0x473b 0x6fc3 +0x473c 0x7d0d +0x473d 0x80fd +0x473e 0x8133 +0x473f 0x81bf +0x4740 0x8fb2 +0x4741 0x8997 +0x4742 0x86a4 +0x4743 0x5df4 +0x4744 0x628a +0x4745 0x64ad +0x4746 0x8987 +0x4747 0x6777 +0x4748 0x6ce2 +0x4749 0x6d3e +0x474a 0x7436 +0x474b 0x7834 +0x474c 0x5a46 +0x474d 0x7f75 +0x474e 0x82ad +0x474f 0x99ac +0x4750 0x4ff3 +0x4751 0x5ec3 +0x4752 0x62dd +0x4753 0x6392 +0x4754 0x6557 +0x4755 0x676f +0x4756 0x76c3 +0x4757 0x724c +0x4758 0x80cc +0x4759 0x80ba +0x475a 0x8f29 +0x475b 0x914d +0x475c 0x500d +0x475d 0x57f9 +0x475e 0x5a92 +0x475f 0x6885 +0x4760 0x6973 +0x4761 0x7164 +0x4762 0x72fd +0x4763 0x8cb7 +0x4764 0x58f2 +0x4765 0x8ce0 +0x4766 0x966a +0x4767 0x9019 +0x4768 0x877f +0x4769 0x79e4 +0x476a 0x77e7 +0x476b 0x8429 +0x476c 0x4f2f +0x476d 0x5265 +0x476e 0x535a +0x476f 0x62cd +0x4770 0x67cf +0x4771 0x6cca +0x4772 0x767d +0x4773 0x7b94 +0x4774 0x7c95 +0x4775 0x8236 +0x4776 0x8584 +0x4777 0x8feb +0x4778 0x66dd +0x4779 0x6f20 +0x477a 0x7206 +0x477b 0x7e1b +0x477c 0x83ab +0x477d 0x99c1 +0x477e 0x9ea6 +0x4821 0x51fd +0x4822 0x7bb1 +0x4823 0x7872 +0x4824 0x7bb8 +0x4825 0x8087 +0x4826 0x7b48 +0x4827 0x6ae8 +0x4828 0x5e61 +0x4829 0x808c +0x482a 0x7551 +0x482b 0x7560 +0x482c 0x516b +0x482d 0x9262 +0x482e 0x6e8c +0x482f 0x767a +0x4830 0x9197 +0x4831 0x9aea +0x4832 0x4f10 +0x4833 0x7f70 +0x4834 0x629c +0x4835 0x7b4f +0x4836 0x95a5 +0x4837 0x9ce9 +0x4838 0x567a +0x4839 0x5859 +0x483a 0x86e4 +0x483b 0x96bc +0x483c 0x4f34 +0x483d 0x5224 +0x483e 0x534a +0x483f 0x53cd +0x4840 0x53db +0x4841 0x5e06 +0x4842 0x642c +0x4843 0x6591 +0x4844 0x677f +0x4845 0x6c3e +0x4846 0x6c4e +0x4847 0x7248 +0x4848 0x72af +0x4849 0x73ed +0x484a 0x7554 +0x484b 0x7e41 +0x484c 0x822c +0x484d 0x85e9 +0x484e 0x8ca9 +0x484f 0x7bc4 +0x4850 0x91c6 +0x4851 0x7169 +0x4852 0x9812 +0x4853 0x98ef +0x4854 0x633d +0x4855 0x6669 +0x4856 0x756a +0x4857 0x76e4 +0x4858 0x78d0 +0x4859 0x8543 +0x485a 0x86ee +0x485b 0x532a +0x485c 0x5351 +0x485d 0x5426 +0x485e 0x5983 +0x485f 0x5e87 +0x4860 0x5f7c +0x4861 0x60b2 +0x4862 0x6249 +0x4863 0x6279 +0x4864 0x62ab +0x4865 0x6590 +0x4866 0x6bd4 +0x4867 0x6ccc +0x4868 0x75b2 +0x4869 0x76ae +0x486a 0x7891 +0x486b 0x79d8 +0x486c 0x7dcb +0x486d 0x7f77 +0x486e 0x80a5 +0x486f 0x88ab +0x4870 0x8ab9 +0x4871 0x8cbb +0x4872 0x907f +0x4873 0x975e +0x4874 0x98db +0x4875 0x6a0b +0x4876 0x7c38 +0x4877 0x5099 +0x4878 0x5c3e +0x4879 0x5fae +0x487a 0x6787 +0x487b 0x6bd8 +0x487c 0x7435 +0x487d 0x7709 +0x487e 0x7f8e +0x4921 0x9f3b +0x4922 0x67ca +0x4923 0x7a17 +0x4924 0x5339 +0x4925 0x758b +0x4926 0x9aed +0x4927 0x5f66 +0x4928 0x819d +0x4929 0x83f1 +0x492a 0x8098 +0x492b 0x5f3c +0x492c 0x5fc5 +0x492d 0x7562 +0x492e 0x7b46 +0x492f 0x903c +0x4930 0x6867 +0x4931 0x59eb +0x4932 0x5a9b +0x4933 0x7d10 +0x4934 0x767e +0x4935 0x8b2c +0x4936 0x4ff5 +0x4937 0x5f6a +0x4938 0x6a19 +0x4939 0x6c37 +0x493a 0x6f02 +0x493b 0x74e2 +0x493c 0x7968 +0x493d 0x8868 +0x493e 0x8a55 +0x493f 0x8c79 +0x4940 0x5edf +0x4941 0x63cf +0x4942 0x75c5 +0x4943 0x79d2 +0x4944 0x82d7 +0x4945 0x9328 +0x4946 0x92f2 +0x4947 0x849c +0x4948 0x86ed +0x4949 0x9c2d +0x494a 0x54c1 +0x494b 0x5f6c +0x494c 0x658c +0x494d 0x6d5c +0x494e 0x7015 +0x494f 0x8ca7 +0x4950 0x8cd3 +0x4951 0x983b +0x4952 0x654f +0x4953 0x74f6 +0x4954 0x4e0d +0x4955 0x4ed8 +0x4956 0x57e0 +0x4957 0x592b +0x4958 0x5a66 +0x4959 0x5bcc +0x495a 0x51a8 +0x495b 0x5e03 +0x495c 0x5e9c +0x495d 0x6016 +0x495e 0x6276 +0x495f 0x6577 +0x4960 0x65a7 +0x4961 0x666e +0x4962 0x6d6e +0x4963 0x7236 +0x4964 0x7b26 +0x4965 0x8150 +0x4966 0x819a +0x4967 0x8299 +0x4968 0x8b5c +0x4969 0x8ca0 +0x496a 0x8ce6 +0x496b 0x8d74 +0x496c 0x961c +0x496d 0x9644 +0x496e 0x4fae +0x496f 0x64ab +0x4970 0x6b66 +0x4971 0x821e +0x4972 0x8461 +0x4973 0x856a +0x4974 0x90e8 +0x4975 0x5c01 +0x4976 0x6953 +0x4977 0x98a8 +0x4978 0x847a +0x4979 0x8557 +0x497a 0x4f0f +0x497b 0x526f +0x497c 0x5fa9 +0x497d 0x5e45 +0x497e 0x670d +0x4a21 0x798f +0x4a22 0x8179 +0x4a23 0x8907 +0x4a24 0x8986 +0x4a25 0x6df5 +0x4a26 0x5f17 +0x4a27 0x6255 +0x4a28 0x6cb8 +0x4a29 0x4ecf +0x4a2a 0x7269 +0x4a2b 0x9b92 +0x4a2c 0x5206 +0x4a2d 0x543b +0x4a2e 0x5674 +0x4a2f 0x58b3 +0x4a30 0x61a4 +0x4a31 0x626e +0x4a32 0x711a +0x4a33 0x596e +0x4a34 0x7c89 +0x4a35 0x7cde +0x4a36 0x7d1b +0x4a37 0x96f0 +0x4a38 0x6587 +0x4a39 0x805e +0x4a3a 0x4e19 +0x4a3b 0x4f75 +0x4a3c 0x5175 +0x4a3d 0x5840 +0x4a3e 0x5e63 +0x4a3f 0x5e73 +0x4a40 0x5f0a +0x4a41 0x67c4 +0x4a42 0x4e26 +0x4a43 0x853d +0x4a44 0x9589 +0x4a45 0x965b +0x4a46 0x7c73 +0x4a47 0x9801 +0x4a48 0x50fb +0x4a49 0x58c1 +0x4a4a 0x7656 +0x4a4b 0x78a7 +0x4a4c 0x5225 +0x4a4d 0x77a5 +0x4a4e 0x8511 +0x4a4f 0x7b86 +0x4a50 0x504f +0x4a51 0x5909 +0x4a52 0x7247 +0x4a53 0x7bc7 +0x4a54 0x7de8 +0x4a55 0x8fba +0x4a56 0x8fd4 +0x4a57 0x904d +0x4a58 0x4fbf +0x4a59 0x52c9 +0x4a5a 0x5a29 +0x4a5b 0x5f01 +0x4a5c 0x97ad +0x4a5d 0x4fdd +0x4a5e 0x8217 +0x4a5f 0x92ea +0x4a60 0x5703 +0x4a61 0x6355 +0x4a62 0x6b69 +0x4a63 0x752b +0x4a64 0x88dc +0x4a65 0x8f14 +0x4a66 0x7a42 +0x4a67 0x52df +0x4a68 0x5893 +0x4a69 0x6155 +0x4a6a 0x620a +0x4a6b 0x66ae +0x4a6c 0x6bcd +0x4a6d 0x7c3f +0x4a6e 0x83e9 +0x4a6f 0x5023 +0x4a70 0x4ff8 +0x4a71 0x5305 +0x4a72 0x5446 +0x4a73 0x5831 +0x4a74 0x5949 +0x4a75 0x5b9d +0x4a76 0x5cf0 +0x4a77 0x5cef +0x4a78 0x5d29 +0x4a79 0x5e96 +0x4a7a 0x62b1 +0x4a7b 0x6367 +0x4a7c 0x653e +0x4a7d 0x65b9 +0x4a7e 0x670b +0x4b21 0x6cd5 +0x4b22 0x6ce1 +0x4b23 0x70f9 +0x4b24 0x7832 +0x4b25 0x7e2b +0x4b26 0x80de +0x4b27 0x82b3 +0x4b28 0x840c +0x4b29 0x84ec +0x4b2a 0x8702 +0x4b2b 0x8912 +0x4b2c 0x8a2a +0x4b2d 0x8c4a +0x4b2e 0x90a6 +0x4b2f 0x92d2 +0x4b30 0x98fd +0x4b31 0x9cf3 +0x4b32 0x9d6c +0x4b33 0x4e4f +0x4b34 0x4ea1 +0x4b35 0x508d +0x4b36 0x5256 +0x4b37 0x574a +0x4b38 0x59a8 +0x4b39 0x5e3d +0x4b3a 0x5fd8 +0x4b3b 0x5fd9 +0x4b3c 0x623f +0x4b3d 0x66b4 +0x4b3e 0x671b +0x4b3f 0x67d0 +0x4b40 0x68d2 +0x4b41 0x5192 +0x4b42 0x7d21 +0x4b43 0x80aa +0x4b44 0x81a8 +0x4b45 0x8b00 +0x4b46 0x8c8c +0x4b47 0x8cbf +0x4b48 0x927e +0x4b49 0x9632 +0x4b4a 0x5420 +0x4b4b 0x982c +0x4b4c 0x5317 +0x4b4d 0x50d5 +0x4b4e 0x535c +0x4b4f 0x58a8 +0x4b50 0x64b2 +0x4b51 0x6734 +0x4b52 0x7267 +0x4b53 0x7766 +0x4b54 0x7a46 +0x4b55 0x91e6 +0x4b56 0x52c3 +0x4b57 0x6ca1 +0x4b58 0x6b86 +0x4b59 0x5800 +0x4b5a 0x5e4c +0x4b5b 0x5954 +0x4b5c 0x672c +0x4b5d 0x7ffb +0x4b5e 0x51e1 +0x4b5f 0x76c6 +0x4b60 0x6469 +0x4b61 0x78e8 +0x4b62 0x9b54 +0x4b63 0x9ebb +0x4b64 0x57cb +0x4b65 0x59b9 +0x4b66 0x6627 +0x4b67 0x679a +0x4b68 0x6bce +0x4b69 0x54e9 +0x4b6a 0x69d9 +0x4b6b 0x5e55 +0x4b6c 0x819c +0x4b6d 0x6795 +0x4b6e 0x9baa +0x4b6f 0x67fe +0x4b70 0x9c52 +0x4b71 0x685d +0x4b72 0x4ea6 +0x4b73 0x4fe3 +0x4b74 0x53c8 +0x4b75 0x62b9 +0x4b76 0x672b +0x4b77 0x6cab +0x4b78 0x8fc4 +0x4b79 0x4fad +0x4b7a 0x7e6d +0x4b7b 0x9ebf +0x4b7c 0x4e07 +0x4b7d 0x6162 +0x4b7e 0x6e80 +0x4c21 0x6f2b +0x4c22 0x8513 +0x4c23 0x5473 +0x4c24 0x672a +0x4c25 0x9b45 +0x4c26 0x5df3 +0x4c27 0x7b95 +0x4c28 0x5cac +0x4c29 0x5bc6 +0x4c2a 0x871c +0x4c2b 0x6e4a +0x4c2c 0x84d1 +0x4c2d 0x7a14 +0x4c2e 0x8108 +0x4c2f 0x5999 +0x4c30 0x7c8d +0x4c31 0x6c11 +0x4c32 0x7720 +0x4c33 0x52d9 +0x4c34 0x5922 +0x4c35 0x7121 +0x4c36 0x725f +0x4c37 0x77db +0x4c38 0x9727 +0x4c39 0x9d61 +0x4c3a 0x690b +0x4c3b 0x5a7f +0x4c3c 0x5a18 +0x4c3d 0x51a5 +0x4c3e 0x540d +0x4c3f 0x547d +0x4c40 0x660e +0x4c41 0x76df +0x4c42 0x8ff7 +0x4c43 0x9298 +0x4c44 0x9cf4 +0x4c45 0x59ea +0x4c46 0x725d +0x4c47 0x6ec5 +0x4c48 0x514d +0x4c49 0x68c9 +0x4c4a 0x7dbf +0x4c4b 0x7dec +0x4c4c 0x9762 +0x4c4d 0x9eba +0x4c4e 0x6478 +0x4c4f 0x6a21 +0x4c50 0x8302 +0x4c51 0x5984 +0x4c52 0x5b5f +0x4c53 0x6bdb +0x4c54 0x731b +0x4c55 0x76f2 +0x4c56 0x7db2 +0x4c57 0x8017 +0x4c58 0x8499 +0x4c59 0x5132 +0x4c5a 0x6728 +0x4c5b 0x9ed9 +0x4c5c 0x76ee +0x4c5d 0x6762 +0x4c5e 0x52ff +0x4c5f 0x9905 +0x4c60 0x5c24 +0x4c61 0x623b +0x4c62 0x7c7e +0x4c63 0x8cb0 +0x4c64 0x554f +0x4c65 0x60b6 +0x4c66 0x7d0b +0x4c67 0x9580 +0x4c68 0x5301 +0x4c69 0x4e5f +0x4c6a 0x51b6 +0x4c6b 0x591c +0x4c6c 0x723a +0x4c6d 0x8036 +0x4c6e 0x91ce +0x4c6f 0x5f25 +0x4c70 0x77e2 +0x4c71 0x5384 +0x4c72 0x5f79 +0x4c73 0x7d04 +0x4c74 0x85ac +0x4c75 0x8a33 +0x4c76 0x8e8d +0x4c77 0x9756 +0x4c78 0x67f3 +0x4c79 0x85ae +0x4c7a 0x9453 +0x4c7b 0x6109 +0x4c7c 0x6108 +0x4c7d 0x6cb9 +0x4c7e 0x7652 +0x4d21 0x8aed +0x4d22 0x8f38 +0x4d23 0x552f +0x4d24 0x4f51 +0x4d25 0x512a +0x4d26 0x52c7 +0x4d27 0x53cb +0x4d28 0x5ba5 +0x4d29 0x5e7d +0x4d2a 0x60a0 +0x4d2b 0x6182 +0x4d2c 0x63d6 +0x4d2d 0x6709 +0x4d2e 0x67da +0x4d2f 0x6e67 +0x4d30 0x6d8c +0x4d31 0x7336 +0x4d32 0x7337 +0x4d33 0x7531 +0x4d34 0x7950 +0x4d35 0x88d5 +0x4d36 0x8a98 +0x4d37 0x904a +0x4d38 0x9091 +0x4d39 0x90f5 +0x4d3a 0x96c4 +0x4d3b 0x878d +0x4d3c 0x5915 +0x4d3d 0x4e88 +0x4d3e 0x4f59 +0x4d3f 0x4e0e +0x4d40 0x8a89 +0x4d41 0x8f3f +0x4d42 0x9810 +0x4d43 0x50ad +0x4d44 0x5e7c +0x4d45 0x5996 +0x4d46 0x5bb9 +0x4d47 0x5eb8 +0x4d48 0x63da +0x4d49 0x63fa +0x4d4a 0x64c1 +0x4d4b 0x66dc +0x4d4c 0x694a +0x4d4d 0x69d8 +0x4d4e 0x6d0b +0x4d4f 0x6eb6 +0x4d50 0x7194 +0x4d51 0x7528 +0x4d52 0x7aaf +0x4d53 0x7f8a +0x4d54 0x8000 +0x4d55 0x8449 +0x4d56 0x84c9 +0x4d57 0x8981 +0x4d58 0x8b21 +0x4d59 0x8e0a +0x4d5a 0x9065 +0x4d5b 0x967d +0x4d5c 0x990a +0x4d5d 0x617e +0x4d5e 0x6291 +0x4d5f 0x6b32 +0x4d60 0x6c83 +0x4d61 0x6d74 +0x4d62 0x7fcc +0x4d63 0x7ffc +0x4d64 0x6dc0 +0x4d65 0x7f85 +0x4d66 0x87ba +0x4d67 0x88f8 +0x4d68 0x6765 +0x4d69 0x83b1 +0x4d6a 0x983c +0x4d6b 0x96f7 +0x4d6c 0x6d1b +0x4d6d 0x7d61 +0x4d6e 0x843d +0x4d6f 0x916a +0x4d70 0x4e71 +0x4d71 0x5375 +0x4d72 0x5d50 +0x4d73 0x6b04 +0x4d74 0x6feb +0x4d75 0x85cd +0x4d76 0x862d +0x4d77 0x89a7 +0x4d78 0x5229 +0x4d79 0x540f +0x4d7a 0x5c65 +0x4d7b 0x674e +0x4d7c 0x68a8 +0x4d7d 0x7406 +0x4d7e 0x7483 +0x4e21 0x75e2 +0x4e22 0x88cf +0x4e23 0x88e1 +0x4e24 0x91cc +0x4e25 0x96e2 +0x4e26 0x9678 +0x4e27 0x5f8b +0x4e28 0x7387 +0x4e29 0x7acb +0x4e2a 0x844e +0x4e2b 0x63a0 +0x4e2c 0x7565 +0x4e2d 0x5289 +0x4e2e 0x6d41 +0x4e2f 0x6e9c +0x4e30 0x7409 +0x4e31 0x7559 +0x4e32 0x786b +0x4e33 0x7c92 +0x4e34 0x9686 +0x4e35 0x7adc +0x4e36 0x9f8d +0x4e37 0x4fb6 +0x4e38 0x616e +0x4e39 0x65c5 +0x4e3a 0x865c +0x4e3b 0x4e86 +0x4e3c 0x4eae +0x4e3d 0x50da +0x4e3e 0x4e21 +0x4e3f 0x51cc +0x4e40 0x5bee +0x4e41 0x6599 +0x4e42 0x6881 +0x4e43 0x6dbc +0x4e44 0x731f +0x4e45 0x7642 +0x4e46 0x77ad +0x4e47 0x7a1c +0x4e48 0x7ce7 +0x4e49 0x826f +0x4e4a 0x8ad2 +0x4e4b 0x907c +0x4e4c 0x91cf +0x4e4d 0x9675 +0x4e4e 0x9818 +0x4e4f 0x529b +0x4e50 0x7dd1 +0x4e51 0x502b +0x4e52 0x5398 +0x4e53 0x6797 +0x4e54 0x6dcb +0x4e55 0x71d0 +0x4e56 0x7433 +0x4e57 0x81e8 +0x4e58 0x8f2a +0x4e59 0x96a3 +0x4e5a 0x9c57 +0x4e5b 0x9e9f +0x4e5c 0x7460 +0x4e5d 0x5841 +0x4e5e 0x6d99 +0x4e5f 0x7d2f +0x4e60 0x985e +0x4e61 0x4ee4 +0x4e62 0x4f36 +0x4e63 0x4f8b +0x4e64 0x51b7 +0x4e65 0x52b1 +0x4e66 0x5dba +0x4e67 0x601c +0x4e68 0x73b2 +0x4e69 0x793c +0x4e6a 0x82d3 +0x4e6b 0x9234 +0x4e6c 0x96b7 +0x4e6d 0x96f6 +0x4e6e 0x970a +0x4e6f 0x9e97 +0x4e70 0x9f62 +0x4e71 0x66a6 +0x4e72 0x6b74 +0x4e73 0x5217 +0x4e74 0x52a3 +0x4e75 0x70c8 +0x4e76 0x88c2 +0x4e77 0x5ec9 +0x4e78 0x604b +0x4e79 0x6190 +0x4e7a 0x6f23 +0x4e7b 0x7149 +0x4e7c 0x7c3e +0x4e7d 0x7df4 +0x4e7e 0x806f +0x4f21 0x84ee +0x4f22 0x9023 +0x4f23 0x932c +0x4f24 0x5442 +0x4f25 0x9b6f +0x4f26 0x6ad3 +0x4f27 0x7089 +0x4f28 0x8cc2 +0x4f29 0x8def +0x4f2a 0x9732 +0x4f2b 0x52b4 +0x4f2c 0x5a41 +0x4f2d 0x5eca +0x4f2e 0x5f04 +0x4f2f 0x6717 +0x4f30 0x697c +0x4f31 0x6994 +0x4f32 0x6d6a +0x4f33 0x6f0f +0x4f34 0x7262 +0x4f35 0x72fc +0x4f36 0x7bed +0x4f37 0x8001 +0x4f38 0x807e +0x4f39 0x874b +0x4f3a 0x90ce +0x4f3b 0x516d +0x4f3c 0x9e93 +0x4f3d 0x7984 +0x4f3e 0x808b +0x4f3f 0x9332 +0x4f40 0x8ad6 +0x4f41 0x502d +0x4f42 0x548c +0x4f43 0x8a71 +0x4f44 0x6b6a +0x4f45 0x8cc4 +0x4f46 0x8107 +0x4f47 0x60d1 +0x4f48 0x67a0 +0x4f49 0x9df2 +0x4f4a 0x4e99 +0x4f4b 0x4e98 +0x4f4c 0x9c10 +0x4f4d 0x8a6b +0x4f4e 0x85c1 +0x4f4f 0x8568 +0x4f50 0x6900 +0x4f51 0x6e7e +0x4f52 0x7897 +0x4f53 0x8155 +0x5021 0x5f0c +0x5022 0x4e10 +0x5023 0x4e15 +0x5024 0x4e2a +0x5025 0x4e31 +0x5026 0x4e36 +0x5027 0x4e3c +0x5028 0x4e3f +0x5029 0x4e42 +0x502a 0x4e56 +0x502b 0x4e58 +0x502c 0x4e82 +0x502d 0x4e85 +0x502e 0x8c6b +0x502f 0x4e8a +0x5030 0x8212 +0x5031 0x5f0d +0x5032 0x4e8e +0x5033 0x4e9e +0x5034 0x4e9f +0x5035 0x4ea0 +0x5036 0x4ea2 +0x5037 0x4eb0 +0x5038 0x4eb3 +0x5039 0x4eb6 +0x503a 0x4ece +0x503b 0x4ecd +0x503c 0x4ec4 +0x503d 0x4ec6 +0x503e 0x4ec2 +0x503f 0x4ed7 +0x5040 0x4ede +0x5041 0x4eed +0x5042 0x4edf +0x5043 0x4ef7 +0x5044 0x4f09 +0x5045 0x4f5a +0x5046 0x4f30 +0x5047 0x4f5b +0x5048 0x4f5d +0x5049 0x4f57 +0x504a 0x4f47 +0x504b 0x4f76 +0x504c 0x4f88 +0x504d 0x4f8f +0x504e 0x4f98 +0x504f 0x4f7b +0x5050 0x4f69 +0x5051 0x4f70 +0x5052 0x4f91 +0x5053 0x4f6f +0x5054 0x4f86 +0x5055 0x4f96 +0x5056 0x5118 +0x5057 0x4fd4 +0x5058 0x4fdf +0x5059 0x4fce +0x505a 0x4fd8 +0x505b 0x4fdb +0x505c 0x4fd1 +0x505d 0x4fda +0x505e 0x4fd0 +0x505f 0x4fe4 +0x5060 0x4fe5 +0x5061 0x501a +0x5062 0x5028 +0x5063 0x5014 +0x5064 0x502a +0x5065 0x5025 +0x5066 0x5005 +0x5067 0x4f1c +0x5068 0x4ff6 +0x5069 0x5021 +0x506a 0x5029 +0x506b 0x502c +0x506c 0x4ffe +0x506d 0x4fef +0x506e 0x5011 +0x506f 0x5006 +0x5070 0x5043 +0x5071 0x5047 +0x5072 0x6703 +0x5073 0x5055 +0x5074 0x5050 +0x5075 0x5048 +0x5076 0x505a +0x5077 0x5056 +0x5078 0x506c +0x5079 0x5078 +0x507a 0x5080 +0x507b 0x509a +0x507c 0x5085 +0x507d 0x50b4 +0x507e 0x50b2 +0x5121 0x50c9 +0x5122 0x50ca +0x5123 0x50b3 +0x5124 0x50c2 +0x5125 0x50d6 +0x5126 0x50de +0x5127 0x50e5 +0x5128 0x50ed +0x5129 0x50e3 +0x512a 0x50ee +0x512b 0x50f9 +0x512c 0x50f5 +0x512d 0x5109 +0x512e 0x5101 +0x512f 0x5102 +0x5130 0x5116 +0x5131 0x5115 +0x5132 0x5114 +0x5133 0x511a +0x5134 0x5121 +0x5135 0x513a +0x5136 0x5137 +0x5137 0x513c +0x5138 0x513b +0x5139 0x513f +0x513a 0x5140 +0x513b 0x5152 +0x513c 0x514c +0x513d 0x5154 +0x513e 0x5162 +0x513f 0x7af8 +0x5140 0x5169 +0x5141 0x516a +0x5142 0x516e +0x5143 0x5180 +0x5144 0x5182 +0x5145 0x56d8 +0x5146 0x518c +0x5147 0x5189 +0x5148 0x518f +0x5149 0x5191 +0x514a 0x5193 +0x514b 0x5195 +0x514c 0x5196 +0x514d 0x51a4 +0x514e 0x51a6 +0x514f 0x51a2 +0x5150 0x51a9 +0x5151 0x51aa +0x5152 0x51ab +0x5153 0x51b3 +0x5154 0x51b1 +0x5155 0x51b2 +0x5156 0x51b0 +0x5157 0x51b5 +0x5158 0x51bd +0x5159 0x51c5 +0x515a 0x51c9 +0x515b 0x51db +0x515c 0x51e0 +0x515d 0x8655 +0x515e 0x51e9 +0x515f 0x51ed +0x5160 0x51f0 +0x5161 0x51f5 +0x5162 0x51fe +0x5163 0x5204 +0x5164 0x520b +0x5165 0x5214 +0x5166 0x520e +0x5167 0x5227 +0x5168 0x522a +0x5169 0x522e +0x516a 0x5233 +0x516b 0x5239 +0x516c 0x524f +0x516d 0x5244 +0x516e 0x524b +0x516f 0x524c +0x5170 0x525e +0x5171 0x5254 +0x5172 0x526a +0x5173 0x5274 +0x5174 0x5269 +0x5175 0x5273 +0x5176 0x527f +0x5177 0x527d +0x5178 0x528d +0x5179 0x5294 +0x517a 0x5292 +0x517b 0x5271 +0x517c 0x5288 +0x517d 0x5291 +0x517e 0x8fa8 +0x5221 0x8fa7 +0x5222 0x52ac +0x5223 0x52ad +0x5224 0x52bc +0x5225 0x52b5 +0x5226 0x52c1 +0x5227 0x52cd +0x5228 0x52d7 +0x5229 0x52de +0x522a 0x52e3 +0x522b 0x52e6 +0x522c 0x98ed +0x522d 0x52e0 +0x522e 0x52f3 +0x522f 0x52f5 +0x5230 0x52f8 +0x5231 0x52f9 +0x5232 0x5306 +0x5233 0x5308 +0x5234 0x7538 +0x5235 0x530d +0x5236 0x5310 +0x5237 0x530f +0x5238 0x5315 +0x5239 0x531a +0x523a 0x5323 +0x523b 0x532f +0x523c 0x5331 +0x523d 0x5333 +0x523e 0x5338 +0x523f 0x5340 +0x5240 0x5346 +0x5241 0x5345 +0x5242 0x4e17 +0x5243 0x5349 +0x5244 0x534d +0x5245 0x51d6 +0x5246 0x535e +0x5247 0x5369 +0x5248 0x536e +0x5249 0x5918 +0x524a 0x537b +0x524b 0x5377 +0x524c 0x5382 +0x524d 0x5396 +0x524e 0x53a0 +0x524f 0x53a6 +0x5250 0x53a5 +0x5251 0x53ae +0x5252 0x53b0 +0x5253 0x53b6 +0x5254 0x53c3 +0x5255 0x7c12 +0x5256 0x96d9 +0x5257 0x53df +0x5258 0x66fc +0x5259 0x71ee +0x525a 0x53ee +0x525b 0x53e8 +0x525c 0x53ed +0x525d 0x53fa +0x525e 0x5401 +0x525f 0x543d +0x5260 0x5440 +0x5261 0x542c +0x5262 0x542d +0x5263 0x543c +0x5264 0x542e +0x5265 0x5436 +0x5266 0x5429 +0x5267 0x541d +0x5268 0x544e +0x5269 0x548f +0x526a 0x5475 +0x526b 0x548e +0x526c 0x545f +0x526d 0x5471 +0x526e 0x5477 +0x526f 0x5470 +0x5270 0x5492 +0x5271 0x547b +0x5272 0x5480 +0x5273 0x5476 +0x5274 0x5484 +0x5275 0x5490 +0x5276 0x5486 +0x5277 0x54c7 +0x5278 0x54a2 +0x5279 0x54b8 +0x527a 0x54a5 +0x527b 0x54ac +0x527c 0x54c4 +0x527d 0x54c8 +0x527e 0x54a8 +0x5321 0x54ab +0x5322 0x54c2 +0x5323 0x54a4 +0x5324 0x54be +0x5325 0x54bc +0x5326 0x54d8 +0x5327 0x54e5 +0x5328 0x54e6 +0x5329 0x550f +0x532a 0x5514 +0x532b 0x54fd +0x532c 0x54ee +0x532d 0x54ed +0x532e 0x54fa +0x532f 0x54e2 +0x5330 0x5539 +0x5331 0x5540 +0x5332 0x5563 +0x5333 0x554c +0x5334 0x552e +0x5335 0x555c +0x5336 0x5545 +0x5337 0x5556 +0x5338 0x5557 +0x5339 0x5538 +0x533a 0x5533 +0x533b 0x555d +0x533c 0x5599 +0x533d 0x5580 +0x533e 0x54af +0x533f 0x558a +0x5340 0x559f +0x5341 0x557b +0x5342 0x557e +0x5343 0x5598 +0x5344 0x559e +0x5345 0x55ae +0x5346 0x557c +0x5347 0x5583 +0x5348 0x55a9 +0x5349 0x5587 +0x534a 0x55a8 +0x534b 0x55da +0x534c 0x55c5 +0x534d 0x55df +0x534e 0x55c4 +0x534f 0x55dc +0x5350 0x55e4 +0x5351 0x55d4 +0x5352 0x5614 +0x5353 0x55f7 +0x5354 0x5616 +0x5355 0x55fe +0x5356 0x55fd +0x5357 0x561b +0x5358 0x55f9 +0x5359 0x564e +0x535a 0x5650 +0x535b 0x71df +0x535c 0x5634 +0x535d 0x5636 +0x535e 0x5632 +0x535f 0x5638 +0x5360 0x566b +0x5361 0x5664 +0x5362 0x562f +0x5363 0x566c +0x5364 0x566a +0x5365 0x5686 +0x5366 0x5680 +0x5367 0x568a +0x5368 0x56a0 +0x5369 0x5694 +0x536a 0x568f +0x536b 0x56a5 +0x536c 0x56ae +0x536d 0x56b6 +0x536e 0x56b4 +0x536f 0x56c2 +0x5370 0x56bc +0x5371 0x56c1 +0x5372 0x56c3 +0x5373 0x56c0 +0x5374 0x56c8 +0x5375 0x56ce +0x5376 0x56d1 +0x5377 0x56d3 +0x5378 0x56d7 +0x5379 0x56ee +0x537a 0x56f9 +0x537b 0x5700 +0x537c 0x56ff +0x537d 0x5704 +0x537e 0x5709 +0x5421 0x5708 +0x5422 0x570b +0x5423 0x570d +0x5424 0x5713 +0x5425 0x5718 +0x5426 0x5716 +0x5427 0x55c7 +0x5428 0x571c +0x5429 0x5726 +0x542a 0x5737 +0x542b 0x5738 +0x542c 0x574e +0x542d 0x573b +0x542e 0x5740 +0x542f 0x574f +0x5430 0x5769 +0x5431 0x57c0 +0x5432 0x5788 +0x5433 0x5761 +0x5434 0x577f +0x5435 0x5789 +0x5436 0x5793 +0x5437 0x57a0 +0x5438 0x57b3 +0x5439 0x57a4 +0x543a 0x57aa +0x543b 0x57b0 +0x543c 0x57c3 +0x543d 0x57c6 +0x543e 0x57d4 +0x543f 0x57d2 +0x5440 0x57d3 +0x5441 0x580a +0x5442 0x57d6 +0x5443 0x57e3 +0x5444 0x580b +0x5445 0x5819 +0x5446 0x581d +0x5447 0x5872 +0x5448 0x5821 +0x5449 0x5862 +0x544a 0x584b +0x544b 0x5870 +0x544c 0x6bc0 +0x544d 0x5852 +0x544e 0x583d +0x544f 0x5879 +0x5450 0x5885 +0x5451 0x58b9 +0x5452 0x589f +0x5453 0x58ab +0x5454 0x58ba +0x5455 0x58de +0x5456 0x58bb +0x5457 0x58b8 +0x5458 0x58ae +0x5459 0x58c5 +0x545a 0x58d3 +0x545b 0x58d1 +0x545c 0x58d7 +0x545d 0x58d9 +0x545e 0x58d8 +0x545f 0x58e5 +0x5460 0x58dc +0x5461 0x58e4 +0x5462 0x58df +0x5463 0x58ef +0x5464 0x58fa +0x5465 0x58f9 +0x5466 0x58fb +0x5467 0x58fc +0x5468 0x58fd +0x5469 0x5902 +0x546a 0x590a +0x546b 0x5910 +0x546c 0x591b +0x546d 0x68a6 +0x546e 0x5925 +0x546f 0x592c +0x5470 0x592d +0x5471 0x5932 +0x5472 0x5938 +0x5473 0x593e +0x5474 0x7ad2 +0x5475 0x5955 +0x5476 0x5950 +0x5477 0x594e +0x5478 0x595a +0x5479 0x5958 +0x547a 0x5962 +0x547b 0x5960 +0x547c 0x5967 +0x547d 0x596c +0x547e 0x5969 +0x5521 0x5978 +0x5522 0x5981 +0x5523 0x599d +0x5524 0x4f5e +0x5525 0x4fab +0x5526 0x59a3 +0x5527 0x59b2 +0x5528 0x59c6 +0x5529 0x59e8 +0x552a 0x59dc +0x552b 0x598d +0x552c 0x59d9 +0x552d 0x59da +0x552e 0x5a25 +0x552f 0x5a1f +0x5530 0x5a11 +0x5531 0x5a1c +0x5532 0x5a09 +0x5533 0x5a1a +0x5534 0x5a40 +0x5535 0x5a6c +0x5536 0x5a49 +0x5537 0x5a35 +0x5538 0x5a36 +0x5539 0x5a62 +0x553a 0x5a6a +0x553b 0x5a9a +0x553c 0x5abc +0x553d 0x5abe +0x553e 0x5acb +0x553f 0x5ac2 +0x5540 0x5abd +0x5541 0x5ae3 +0x5542 0x5ad7 +0x5543 0x5ae6 +0x5544 0x5ae9 +0x5545 0x5ad6 +0x5546 0x5afa +0x5547 0x5afb +0x5548 0x5b0c +0x5549 0x5b0b +0x554a 0x5b16 +0x554b 0x5b32 +0x554c 0x5ad0 +0x554d 0x5b2a +0x554e 0x5b36 +0x554f 0x5b3e +0x5550 0x5b43 +0x5551 0x5b45 +0x5552 0x5b40 +0x5553 0x5b51 +0x5554 0x5b55 +0x5555 0x5b5a +0x5556 0x5b5b +0x5557 0x5b65 +0x5558 0x5b69 +0x5559 0x5b70 +0x555a 0x5b73 +0x555b 0x5b75 +0x555c 0x5b78 +0x555d 0x6588 +0x555e 0x5b7a +0x555f 0x5b80 +0x5560 0x5b83 +0x5561 0x5ba6 +0x5562 0x5bb8 +0x5563 0x5bc3 +0x5564 0x5bc7 +0x5565 0x5bc9 +0x5566 0x5bd4 +0x5567 0x5bd0 +0x5568 0x5be4 +0x5569 0x5be6 +0x556a 0x5be2 +0x556b 0x5bde +0x556c 0x5be5 +0x556d 0x5beb +0x556e 0x5bf0 +0x556f 0x5bf6 +0x5570 0x5bf3 +0x5571 0x5c05 +0x5572 0x5c07 +0x5573 0x5c08 +0x5574 0x5c0d +0x5575 0x5c13 +0x5576 0x5c20 +0x5577 0x5c22 +0x5578 0x5c28 +0x5579 0x5c38 +0x557a 0x5c39 +0x557b 0x5c41 +0x557c 0x5c46 +0x557d 0x5c4e +0x557e 0x5c53 +0x5621 0x5c50 +0x5622 0x5c4f +0x5623 0x5b71 +0x5624 0x5c6c +0x5625 0x5c6e +0x5626 0x4e62 +0x5627 0x5c76 +0x5628 0x5c79 +0x5629 0x5c8c +0x562a 0x5c91 +0x562b 0x5c94 +0x562c 0x599b +0x562d 0x5cab +0x562e 0x5cbb +0x562f 0x5cb6 +0x5630 0x5cbc +0x5631 0x5cb7 +0x5632 0x5cc5 +0x5633 0x5cbe +0x5634 0x5cc7 +0x5635 0x5cd9 +0x5636 0x5ce9 +0x5637 0x5cfd +0x5638 0x5cfa +0x5639 0x5ced +0x563a 0x5d8c +0x563b 0x5cea +0x563c 0x5d0b +0x563d 0x5d15 +0x563e 0x5d17 +0x563f 0x5d5c +0x5640 0x5d1f +0x5641 0x5d1b +0x5642 0x5d11 +0x5643 0x5d14 +0x5644 0x5d22 +0x5645 0x5d1a +0x5646 0x5d19 +0x5647 0x5d18 +0x5648 0x5d4c +0x5649 0x5d52 +0x564a 0x5d4e +0x564b 0x5d4b +0x564c 0x5d6c +0x564d 0x5d73 +0x564e 0x5d76 +0x564f 0x5d87 +0x5650 0x5d84 +0x5651 0x5d82 +0x5652 0x5da2 +0x5653 0x5d9d +0x5654 0x5dac +0x5655 0x5dae +0x5656 0x5dbd +0x5657 0x5d90 +0x5658 0x5db7 +0x5659 0x5dbc +0x565a 0x5dc9 +0x565b 0x5dcd +0x565c 0x5dd3 +0x565d 0x5dd2 +0x565e 0x5dd6 +0x565f 0x5ddb +0x5660 0x5deb +0x5661 0x5df2 +0x5662 0x5df5 +0x5663 0x5e0b +0x5664 0x5e1a +0x5665 0x5e19 +0x5666 0x5e11 +0x5667 0x5e1b +0x5668 0x5e36 +0x5669 0x5e37 +0x566a 0x5e44 +0x566b 0x5e43 +0x566c 0x5e40 +0x566d 0x5e4e +0x566e 0x5e57 +0x566f 0x5e54 +0x5670 0x5e5f +0x5671 0x5e62 +0x5672 0x5e64 +0x5673 0x5e47 +0x5674 0x5e75 +0x5675 0x5e76 +0x5676 0x5e7a +0x5677 0x9ebc +0x5678 0x5e7f +0x5679 0x5ea0 +0x567a 0x5ec1 +0x567b 0x5ec2 +0x567c 0x5ec8 +0x567d 0x5ed0 +0x567e 0x5ecf +0x5721 0x5ed6 +0x5722 0x5ee3 +0x5723 0x5edd +0x5724 0x5eda +0x5725 0x5edb +0x5726 0x5ee2 +0x5727 0x5ee1 +0x5728 0x5ee8 +0x5729 0x5ee9 +0x572a 0x5eec +0x572b 0x5ef1 +0x572c 0x5ef3 +0x572d 0x5ef0 +0x572e 0x5ef4 +0x572f 0x5ef8 +0x5730 0x5efe +0x5731 0x5f03 +0x5732 0x5f09 +0x5733 0x5f5d +0x5734 0x5f5c +0x5735 0x5f0b +0x5736 0x5f11 +0x5737 0x5f16 +0x5738 0x5f29 +0x5739 0x5f2d +0x573a 0x5f38 +0x573b 0x5f41 +0x573c 0x5f48 +0x573d 0x5f4c +0x573e 0x5f4e +0x573f 0x5f2f +0x5740 0x5f51 +0x5741 0x5f56 +0x5742 0x5f57 +0x5743 0x5f59 +0x5744 0x5f61 +0x5745 0x5f6d +0x5746 0x5f73 +0x5747 0x5f77 +0x5748 0x5f83 +0x5749 0x5f82 +0x574a 0x5f7f +0x574b 0x5f8a +0x574c 0x5f88 +0x574d 0x5f91 +0x574e 0x5f87 +0x574f 0x5f9e +0x5750 0x5f99 +0x5751 0x5f98 +0x5752 0x5fa0 +0x5753 0x5fa8 +0x5754 0x5fad +0x5755 0x5fbc +0x5756 0x5fd6 +0x5757 0x5ffb +0x5758 0x5fe4 +0x5759 0x5ff8 +0x575a 0x5ff1 +0x575b 0x5fdd +0x575c 0x60b3 +0x575d 0x5fff +0x575e 0x6021 +0x575f 0x6060 +0x5760 0x6019 +0x5761 0x6010 +0x5762 0x6029 +0x5763 0x600e +0x5764 0x6031 +0x5765 0x601b +0x5766 0x6015 +0x5767 0x602b +0x5768 0x6026 +0x5769 0x600f +0x576a 0x603a +0x576b 0x605a +0x576c 0x6041 +0x576d 0x606a +0x576e 0x6077 +0x576f 0x605f +0x5770 0x604a +0x5771 0x6046 +0x5772 0x604d +0x5773 0x6063 +0x5774 0x6043 +0x5775 0x6064 +0x5776 0x6042 +0x5777 0x606c +0x5778 0x606b +0x5779 0x6059 +0x577a 0x6081 +0x577b 0x608d +0x577c 0x60e7 +0x577d 0x6083 +0x577e 0x609a +0x5821 0x6084 +0x5822 0x609b +0x5823 0x6096 +0x5824 0x6097 +0x5825 0x6092 +0x5826 0x60a7 +0x5827 0x608b +0x5828 0x60e1 +0x5829 0x60b8 +0x582a 0x60e0 +0x582b 0x60d3 +0x582c 0x60b4 +0x582d 0x5ff0 +0x582e 0x60bd +0x582f 0x60c6 +0x5830 0x60b5 +0x5831 0x60d8 +0x5832 0x614d +0x5833 0x6115 +0x5834 0x6106 +0x5835 0x60f6 +0x5836 0x60f7 +0x5837 0x6100 +0x5838 0x60f4 +0x5839 0x60fa +0x583a 0x6103 +0x583b 0x6121 +0x583c 0x60fb +0x583d 0x60f1 +0x583e 0x610d +0x583f 0x610e +0x5840 0x6147 +0x5841 0x613e +0x5842 0x6128 +0x5843 0x6127 +0x5844 0x614a +0x5845 0x613f +0x5846 0x613c +0x5847 0x612c +0x5848 0x6134 +0x5849 0x613d +0x584a 0x6142 +0x584b 0x6144 +0x584c 0x6173 +0x584d 0x6177 +0x584e 0x6158 +0x584f 0x6159 +0x5850 0x615a +0x5851 0x616b +0x5852 0x6174 +0x5853 0x616f +0x5854 0x6165 +0x5855 0x6171 +0x5856 0x615f +0x5857 0x615d +0x5858 0x6153 +0x5859 0x6175 +0x585a 0x6199 +0x585b 0x6196 +0x585c 0x6187 +0x585d 0x61ac +0x585e 0x6194 +0x585f 0x619a +0x5860 0x618a +0x5861 0x6191 +0x5862 0x61ab +0x5863 0x61ae +0x5864 0x61cc +0x5865 0x61ca +0x5866 0x61c9 +0x5867 0x61f7 +0x5868 0x61c8 +0x5869 0x61c3 +0x586a 0x61c6 +0x586b 0x61ba +0x586c 0x61cb +0x586d 0x7f79 +0x586e 0x61cd +0x586f 0x61e6 +0x5870 0x61e3 +0x5871 0x61f6 +0x5872 0x61fa +0x5873 0x61f4 +0x5874 0x61ff +0x5875 0x61fd +0x5876 0x61fc +0x5877 0x61fe +0x5878 0x6200 +0x5879 0x6208 +0x587a 0x6209 +0x587b 0x620d +0x587c 0x620c +0x587d 0x6214 +0x587e 0x621b +0x5921 0x621e +0x5922 0x6221 +0x5923 0x622a +0x5924 0x622e +0x5925 0x6230 +0x5926 0x6232 +0x5927 0x6233 +0x5928 0x6241 +0x5929 0x624e +0x592a 0x625e +0x592b 0x6263 +0x592c 0x625b +0x592d 0x6260 +0x592e 0x6268 +0x592f 0x627c +0x5930 0x6282 +0x5931 0x6289 +0x5932 0x627e +0x5933 0x6292 +0x5934 0x6293 +0x5935 0x6296 +0x5936 0x62d4 +0x5937 0x6283 +0x5938 0x6294 +0x5939 0x62d7 +0x593a 0x62d1 +0x593b 0x62bb +0x593c 0x62cf +0x593d 0x62ff +0x593e 0x62c6 +0x593f 0x64d4 +0x5940 0x62c8 +0x5941 0x62dc +0x5942 0x62cc +0x5943 0x62ca +0x5944 0x62c2 +0x5945 0x62c7 +0x5946 0x629b +0x5947 0x62c9 +0x5948 0x630c +0x5949 0x62ee +0x594a 0x62f1 +0x594b 0x6327 +0x594c 0x6302 +0x594d 0x6308 +0x594e 0x62ef +0x594f 0x62f5 +0x5950 0x6350 +0x5951 0x633e +0x5952 0x634d +0x5953 0x641c +0x5954 0x634f +0x5955 0x6396 +0x5956 0x638e +0x5957 0x6380 +0x5958 0x63ab +0x5959 0x6376 +0x595a 0x63a3 +0x595b 0x638f +0x595c 0x6389 +0x595d 0x639f +0x595e 0x63b5 +0x595f 0x636b +0x5960 0x6369 +0x5961 0x63be +0x5962 0x63e9 +0x5963 0x63c0 +0x5964 0x63c6 +0x5965 0x63e3 +0x5966 0x63c9 +0x5967 0x63d2 +0x5968 0x63f6 +0x5969 0x63c4 +0x596a 0x6416 +0x596b 0x6434 +0x596c 0x6406 +0x596d 0x6413 +0x596e 0x6426 +0x596f 0x6436 +0x5970 0x651d +0x5971 0x6417 +0x5972 0x6428 +0x5973 0x640f +0x5974 0x6467 +0x5975 0x646f +0x5976 0x6476 +0x5977 0x644e +0x5978 0x652a +0x5979 0x6495 +0x597a 0x6493 +0x597b 0x64a5 +0x597c 0x64a9 +0x597d 0x6488 +0x597e 0x64bc +0x5a21 0x64da +0x5a22 0x64d2 +0x5a23 0x64c5 +0x5a24 0x64c7 +0x5a25 0x64bb +0x5a26 0x64d8 +0x5a27 0x64c2 +0x5a28 0x64f1 +0x5a29 0x64e7 +0x5a2a 0x8209 +0x5a2b 0x64e0 +0x5a2c 0x64e1 +0x5a2d 0x62ac +0x5a2e 0x64e3 +0x5a2f 0x64ef +0x5a30 0x652c +0x5a31 0x64f6 +0x5a32 0x64f4 +0x5a33 0x64f2 +0x5a34 0x64fa +0x5a35 0x6500 +0x5a36 0x64fd +0x5a37 0x6518 +0x5a38 0x651c +0x5a39 0x6505 +0x5a3a 0x6524 +0x5a3b 0x6523 +0x5a3c 0x652b +0x5a3d 0x6534 +0x5a3e 0x6535 +0x5a3f 0x6537 +0x5a40 0x6536 +0x5a41 0x6538 +0x5a42 0x754b +0x5a43 0x6548 +0x5a44 0x6556 +0x5a45 0x6555 +0x5a46 0x654d +0x5a47 0x6558 +0x5a48 0x655e +0x5a49 0x655d +0x5a4a 0x6572 +0x5a4b 0x6578 +0x5a4c 0x6582 +0x5a4d 0x6583 +0x5a4e 0x8b8a +0x5a4f 0x659b +0x5a50 0x659f +0x5a51 0x65ab +0x5a52 0x65b7 +0x5a53 0x65c3 +0x5a54 0x65c6 +0x5a55 0x65c1 +0x5a56 0x65c4 +0x5a57 0x65cc +0x5a58 0x65d2 +0x5a59 0x65db +0x5a5a 0x65d9 +0x5a5b 0x65e0 +0x5a5c 0x65e1 +0x5a5d 0x65f1 +0x5a5e 0x6772 +0x5a5f 0x660a +0x5a60 0x6603 +0x5a61 0x65fb +0x5a62 0x6773 +0x5a63 0x6635 +0x5a64 0x6636 +0x5a65 0x6634 +0x5a66 0x661c +0x5a67 0x664f +0x5a68 0x6644 +0x5a69 0x6649 +0x5a6a 0x6641 +0x5a6b 0x665e +0x5a6c 0x665d +0x5a6d 0x6664 +0x5a6e 0x6667 +0x5a6f 0x6668 +0x5a70 0x665f +0x5a71 0x6662 +0x5a72 0x6670 +0x5a73 0x6683 +0x5a74 0x6688 +0x5a75 0x668e +0x5a76 0x6689 +0x5a77 0x6684 +0x5a78 0x6698 +0x5a79 0x669d +0x5a7a 0x66c1 +0x5a7b 0x66b9 +0x5a7c 0x66c9 +0x5a7d 0x66be +0x5a7e 0x66bc +0x5b21 0x66c4 +0x5b22 0x66b8 +0x5b23 0x66d6 +0x5b24 0x66da +0x5b25 0x66e0 +0x5b26 0x663f +0x5b27 0x66e6 +0x5b28 0x66e9 +0x5b29 0x66f0 +0x5b2a 0x66f5 +0x5b2b 0x66f7 +0x5b2c 0x670f +0x5b2d 0x6716 +0x5b2e 0x671e +0x5b2f 0x6726 +0x5b30 0x6727 +0x5b31 0x9738 +0x5b32 0x672e +0x5b33 0x673f +0x5b34 0x6736 +0x5b35 0x6741 +0x5b36 0x6738 +0x5b37 0x6737 +0x5b38 0x6746 +0x5b39 0x675e +0x5b3a 0x6760 +0x5b3b 0x6759 +0x5b3c 0x6763 +0x5b3d 0x6764 +0x5b3e 0x6789 +0x5b3f 0x6770 +0x5b40 0x67a9 +0x5b41 0x677c +0x5b42 0x676a +0x5b43 0x678c +0x5b44 0x678b +0x5b45 0x67a6 +0x5b46 0x67a1 +0x5b47 0x6785 +0x5b48 0x67b7 +0x5b49 0x67ef +0x5b4a 0x67b4 +0x5b4b 0x67ec +0x5b4c 0x67b3 +0x5b4d 0x67e9 +0x5b4e 0x67b8 +0x5b4f 0x67e4 +0x5b50 0x67de +0x5b51 0x67dd +0x5b52 0x67e2 +0x5b53 0x67ee +0x5b54 0x67b9 +0x5b55 0x67ce +0x5b56 0x67c6 +0x5b57 0x67e7 +0x5b58 0x6a9c +0x5b59 0x681e +0x5b5a 0x6846 +0x5b5b 0x6829 +0x5b5c 0x6840 +0x5b5d 0x684d +0x5b5e 0x6832 +0x5b5f 0x684e +0x5b60 0x68b3 +0x5b61 0x682b +0x5b62 0x6859 +0x5b63 0x6863 +0x5b64 0x6877 +0x5b65 0x687f +0x5b66 0x689f +0x5b67 0x688f +0x5b68 0x68ad +0x5b69 0x6894 +0x5b6a 0x689d +0x5b6b 0x689b +0x5b6c 0x6883 +0x5b6d 0x6aae +0x5b6e 0x68b9 +0x5b6f 0x6874 +0x5b70 0x68b5 +0x5b71 0x68a0 +0x5b72 0x68ba +0x5b73 0x690f +0x5b74 0x688d +0x5b75 0x687e +0x5b76 0x6901 +0x5b77 0x68ca +0x5b78 0x6908 +0x5b79 0x68d8 +0x5b7a 0x6922 +0x5b7b 0x6926 +0x5b7c 0x68e1 +0x5b7d 0x690c +0x5b7e 0x68cd +0x5c21 0x68d4 +0x5c22 0x68e7 +0x5c23 0x68d5 +0x5c24 0x6936 +0x5c25 0x6912 +0x5c26 0x6904 +0x5c27 0x68d7 +0x5c28 0x68e3 +0x5c29 0x6925 +0x5c2a 0x68f9 +0x5c2b 0x68e0 +0x5c2c 0x68ef +0x5c2d 0x6928 +0x5c2e 0x692a +0x5c2f 0x691a +0x5c30 0x6923 +0x5c31 0x6921 +0x5c32 0x68c6 +0x5c33 0x6979 +0x5c34 0x6977 +0x5c35 0x695c +0x5c36 0x6978 +0x5c37 0x696b +0x5c38 0x6954 +0x5c39 0x697e +0x5c3a 0x696e +0x5c3b 0x6939 +0x5c3c 0x6974 +0x5c3d 0x693d +0x5c3e 0x6959 +0x5c3f 0x6930 +0x5c40 0x6961 +0x5c41 0x695e +0x5c42 0x695d +0x5c43 0x6981 +0x5c44 0x696a +0x5c45 0x69b2 +0x5c46 0x69ae +0x5c47 0x69d0 +0x5c48 0x69bf +0x5c49 0x69c1 +0x5c4a 0x69d3 +0x5c4b 0x69be +0x5c4c 0x69ce +0x5c4d 0x5be8 +0x5c4e 0x69ca +0x5c4f 0x69dd +0x5c50 0x69bb +0x5c51 0x69c3 +0x5c52 0x69a7 +0x5c53 0x6a2e +0x5c54 0x6991 +0x5c55 0x69a0 +0x5c56 0x699c +0x5c57 0x6995 +0x5c58 0x69b4 +0x5c59 0x69de +0x5c5a 0x69e8 +0x5c5b 0x6a02 +0x5c5c 0x6a1b +0x5c5d 0x69ff +0x5c5e 0x6b0a +0x5c5f 0x69f9 +0x5c60 0x69f2 +0x5c61 0x69e7 +0x5c62 0x6a05 +0x5c63 0x69b1 +0x5c64 0x6a1e +0x5c65 0x69ed +0x5c66 0x6a14 +0x5c67 0x69eb +0x5c68 0x6a0a +0x5c69 0x6a12 +0x5c6a 0x6ac1 +0x5c6b 0x6a23 +0x5c6c 0x6a13 +0x5c6d 0x6a44 +0x5c6e 0x6a0c +0x5c6f 0x6a72 +0x5c70 0x6a36 +0x5c71 0x6a78 +0x5c72 0x6a47 +0x5c73 0x6a62 +0x5c74 0x6a59 +0x5c75 0x6a66 +0x5c76 0x6a48 +0x5c77 0x6a38 +0x5c78 0x6a22 +0x5c79 0x6a90 +0x5c7a 0x6a8d +0x5c7b 0x6aa0 +0x5c7c 0x6a84 +0x5c7d 0x6aa2 +0x5c7e 0x6aa3 +0x5d21 0x6a97 +0x5d22 0x8617 +0x5d23 0x6abb +0x5d24 0x6ac3 +0x5d25 0x6ac2 +0x5d26 0x6ab8 +0x5d27 0x6ab3 +0x5d28 0x6aac +0x5d29 0x6ade +0x5d2a 0x6ad1 +0x5d2b 0x6adf +0x5d2c 0x6aaa +0x5d2d 0x6ada +0x5d2e 0x6aea +0x5d2f 0x6afb +0x5d30 0x6b05 +0x5d31 0x8616 +0x5d32 0x6afa +0x5d33 0x6b12 +0x5d34 0x6b16 +0x5d35 0x9b31 +0x5d36 0x6b1f +0x5d37 0x6b38 +0x5d38 0x6b37 +0x5d39 0x76dc +0x5d3a 0x6b39 +0x5d3b 0x98ee +0x5d3c 0x6b47 +0x5d3d 0x6b43 +0x5d3e 0x6b49 +0x5d3f 0x6b50 +0x5d40 0x6b59 +0x5d41 0x6b54 +0x5d42 0x6b5b +0x5d43 0x6b5f +0x5d44 0x6b61 +0x5d45 0x6b78 +0x5d46 0x6b79 +0x5d47 0x6b7f +0x5d48 0x6b80 +0x5d49 0x6b84 +0x5d4a 0x6b83 +0x5d4b 0x6b8d +0x5d4c 0x6b98 +0x5d4d 0x6b95 +0x5d4e 0x6b9e +0x5d4f 0x6ba4 +0x5d50 0x6baa +0x5d51 0x6bab +0x5d52 0x6baf +0x5d53 0x6bb2 +0x5d54 0x6bb1 +0x5d55 0x6bb3 +0x5d56 0x6bb7 +0x5d57 0x6bbc +0x5d58 0x6bc6 +0x5d59 0x6bcb +0x5d5a 0x6bd3 +0x5d5b 0x6bdf +0x5d5c 0x6bec +0x5d5d 0x6beb +0x5d5e 0x6bf3 +0x5d5f 0x6bef +0x5d60 0x9ebe +0x5d61 0x6c08 +0x5d62 0x6c13 +0x5d63 0x6c14 +0x5d64 0x6c1b +0x5d65 0x6c24 +0x5d66 0x6c23 +0x5d67 0x6c5e +0x5d68 0x6c55 +0x5d69 0x6c62 +0x5d6a 0x6c6a +0x5d6b 0x6c82 +0x5d6c 0x6c8d +0x5d6d 0x6c9a +0x5d6e 0x6c81 +0x5d6f 0x6c9b +0x5d70 0x6c7e +0x5d71 0x6c68 +0x5d72 0x6c73 +0x5d73 0x6c92 +0x5d74 0x6c90 +0x5d75 0x6cc4 +0x5d76 0x6cf1 +0x5d77 0x6cd3 +0x5d78 0x6cbd +0x5d79 0x6cd7 +0x5d7a 0x6cc5 +0x5d7b 0x6cdd +0x5d7c 0x6cae +0x5d7d 0x6cb1 +0x5d7e 0x6cbe +0x5e21 0x6cba +0x5e22 0x6cdb +0x5e23 0x6cef +0x5e24 0x6cd9 +0x5e25 0x6cea +0x5e26 0x6d1f +0x5e27 0x884d +0x5e28 0x6d36 +0x5e29 0x6d2b +0x5e2a 0x6d3d +0x5e2b 0x6d38 +0x5e2c 0x6d19 +0x5e2d 0x6d35 +0x5e2e 0x6d33 +0x5e2f 0x6d12 +0x5e30 0x6d0c +0x5e31 0x6d63 +0x5e32 0x6d93 +0x5e33 0x6d64 +0x5e34 0x6d5a +0x5e35 0x6d79 +0x5e36 0x6d59 +0x5e37 0x6d8e +0x5e38 0x6d95 +0x5e39 0x6fe4 +0x5e3a 0x6d85 +0x5e3b 0x6df9 +0x5e3c 0x6e15 +0x5e3d 0x6e0a +0x5e3e 0x6db5 +0x5e3f 0x6dc7 +0x5e40 0x6de6 +0x5e41 0x6db8 +0x5e42 0x6dc6 +0x5e43 0x6dec +0x5e44 0x6dde +0x5e45 0x6dcc +0x5e46 0x6de8 +0x5e47 0x6dd2 +0x5e48 0x6dc5 +0x5e49 0x6dfa +0x5e4a 0x6dd9 +0x5e4b 0x6de4 +0x5e4c 0x6dd5 +0x5e4d 0x6dea +0x5e4e 0x6dee +0x5e4f 0x6e2d +0x5e50 0x6e6e +0x5e51 0x6e2e +0x5e52 0x6e19 +0x5e53 0x6e72 +0x5e54 0x6e5f +0x5e55 0x6e3e +0x5e56 0x6e23 +0x5e57 0x6e6b +0x5e58 0x6e2b +0x5e59 0x6e76 +0x5e5a 0x6e4d +0x5e5b 0x6e1f +0x5e5c 0x6e43 +0x5e5d 0x6e3a +0x5e5e 0x6e4e +0x5e5f 0x6e24 +0x5e60 0x6eff +0x5e61 0x6e1d +0x5e62 0x6e38 +0x5e63 0x6e82 +0x5e64 0x6eaa +0x5e65 0x6e98 +0x5e66 0x6ec9 +0x5e67 0x6eb7 +0x5e68 0x6ed3 +0x5e69 0x6ebd +0x5e6a 0x6eaf +0x5e6b 0x6ec4 +0x5e6c 0x6eb2 +0x5e6d 0x6ed4 +0x5e6e 0x6ed5 +0x5e6f 0x6e8f +0x5e70 0x6ea5 +0x5e71 0x6ec2 +0x5e72 0x6e9f +0x5e73 0x6f41 +0x5e74 0x6f11 +0x5e75 0x704c +0x5e76 0x6eec +0x5e77 0x6ef8 +0x5e78 0x6efe +0x5e79 0x6f3f +0x5e7a 0x6ef2 +0x5e7b 0x6f31 +0x5e7c 0x6eef +0x5e7d 0x6f32 +0x5e7e 0x6ecc +0x5f21 0x6f3e +0x5f22 0x6f13 +0x5f23 0x6ef7 +0x5f24 0x6f86 +0x5f25 0x6f7a +0x5f26 0x6f78 +0x5f27 0x6f81 +0x5f28 0x6f80 +0x5f29 0x6f6f +0x5f2a 0x6f5b +0x5f2b 0x6ff3 +0x5f2c 0x6f6d +0x5f2d 0x6f82 +0x5f2e 0x6f7c +0x5f2f 0x6f58 +0x5f30 0x6f8e +0x5f31 0x6f91 +0x5f32 0x6fc2 +0x5f33 0x6f66 +0x5f34 0x6fb3 +0x5f35 0x6fa3 +0x5f36 0x6fa1 +0x5f37 0x6fa4 +0x5f38 0x6fb9 +0x5f39 0x6fc6 +0x5f3a 0x6faa +0x5f3b 0x6fdf +0x5f3c 0x6fd5 +0x5f3d 0x6fec +0x5f3e 0x6fd4 +0x5f3f 0x6fd8 +0x5f40 0x6ff1 +0x5f41 0x6fee +0x5f42 0x6fdb +0x5f43 0x7009 +0x5f44 0x700b +0x5f45 0x6ffa +0x5f46 0x7011 +0x5f47 0x7001 +0x5f48 0x700f +0x5f49 0x6ffe +0x5f4a 0x701b +0x5f4b 0x701a +0x5f4c 0x6f74 +0x5f4d 0x701d +0x5f4e 0x7018 +0x5f4f 0x701f +0x5f50 0x7030 +0x5f51 0x703e +0x5f52 0x7032 +0x5f53 0x7051 +0x5f54 0x7063 +0x5f55 0x7099 +0x5f56 0x7092 +0x5f57 0x70af +0x5f58 0x70f1 +0x5f59 0x70ac +0x5f5a 0x70b8 +0x5f5b 0x70b3 +0x5f5c 0x70ae +0x5f5d 0x70df +0x5f5e 0x70cb +0x5f5f 0x70dd +0x5f60 0x70d9 +0x5f61 0x7109 +0x5f62 0x70fd +0x5f63 0x711c +0x5f64 0x7119 +0x5f65 0x7165 +0x5f66 0x7155 +0x5f67 0x7188 +0x5f68 0x7166 +0x5f69 0x7162 +0x5f6a 0x714c +0x5f6b 0x7156 +0x5f6c 0x716c +0x5f6d 0x718f +0x5f6e 0x71fb +0x5f6f 0x7184 +0x5f70 0x7195 +0x5f71 0x71a8 +0x5f72 0x71ac +0x5f73 0x71d7 +0x5f74 0x71b9 +0x5f75 0x71be +0x5f76 0x71d2 +0x5f77 0x71c9 +0x5f78 0x71d4 +0x5f79 0x71ce +0x5f7a 0x71e0 +0x5f7b 0x71ec +0x5f7c 0x71e7 +0x5f7d 0x71f5 +0x5f7e 0x71fc +0x6021 0x71f9 +0x6022 0x71ff +0x6023 0x720d +0x6024 0x7210 +0x6025 0x721b +0x6026 0x7228 +0x6027 0x722d +0x6028 0x722c +0x6029 0x7230 +0x602a 0x7232 +0x602b 0x723b +0x602c 0x723c +0x602d 0x723f +0x602e 0x7240 +0x602f 0x7246 +0x6030 0x724b +0x6031 0x7258 +0x6032 0x7274 +0x6033 0x727e +0x6034 0x7282 +0x6035 0x7281 +0x6036 0x7287 +0x6037 0x7292 +0x6038 0x7296 +0x6039 0x72a2 +0x603a 0x72a7 +0x603b 0x72b9 +0x603c 0x72b2 +0x603d 0x72c3 +0x603e 0x72c6 +0x603f 0x72c4 +0x6040 0x72ce +0x6041 0x72d2 +0x6042 0x72e2 +0x6043 0x72e0 +0x6044 0x72e1 +0x6045 0x72f9 +0x6046 0x72f7 +0x6047 0x500f +0x6048 0x7317 +0x6049 0x730a +0x604a 0x731c +0x604b 0x7316 +0x604c 0x731d +0x604d 0x7334 +0x604e 0x732f +0x604f 0x7329 +0x6050 0x7325 +0x6051 0x733e +0x6052 0x734e +0x6053 0x734f +0x6054 0x9ed8 +0x6055 0x7357 +0x6056 0x736a +0x6057 0x7368 +0x6058 0x7370 +0x6059 0x7378 +0x605a 0x7375 +0x605b 0x737b +0x605c 0x737a +0x605d 0x73c8 +0x605e 0x73b3 +0x605f 0x73ce +0x6060 0x73bb +0x6061 0x73c0 +0x6062 0x73e5 +0x6063 0x73ee +0x6064 0x73de +0x6065 0x74a2 +0x6066 0x7405 +0x6067 0x746f +0x6068 0x7425 +0x6069 0x73f8 +0x606a 0x7432 +0x606b 0x743a +0x606c 0x7455 +0x606d 0x743f +0x606e 0x745f +0x606f 0x7459 +0x6070 0x7441 +0x6071 0x745c +0x6072 0x7469 +0x6073 0x7470 +0x6074 0x7463 +0x6075 0x746a +0x6076 0x7476 +0x6077 0x747e +0x6078 0x748b +0x6079 0x749e +0x607a 0x74a7 +0x607b 0x74ca +0x607c 0x74cf +0x607d 0x74d4 +0x607e 0x73f1 +0x6121 0x74e0 +0x6122 0x74e3 +0x6123 0x74e7 +0x6124 0x74e9 +0x6125 0x74ee +0x6126 0x74f2 +0x6127 0x74f0 +0x6128 0x74f1 +0x6129 0x74f8 +0x612a 0x74f7 +0x612b 0x7504 +0x612c 0x7503 +0x612d 0x7505 +0x612e 0x750c +0x612f 0x750e +0x6130 0x750d +0x6131 0x7515 +0x6132 0x7513 +0x6133 0x751e +0x6134 0x7526 +0x6135 0x752c +0x6136 0x753c +0x6137 0x7544 +0x6138 0x754d +0x6139 0x754a +0x613a 0x7549 +0x613b 0x755b +0x613c 0x7546 +0x613d 0x755a +0x613e 0x7569 +0x613f 0x7564 +0x6140 0x7567 +0x6141 0x756b +0x6142 0x756d +0x6143 0x7578 +0x6144 0x7576 +0x6145 0x7586 +0x6146 0x7587 +0x6147 0x7574 +0x6148 0x758a +0x6149 0x7589 +0x614a 0x7582 +0x614b 0x7594 +0x614c 0x759a +0x614d 0x759d +0x614e 0x75a5 +0x614f 0x75a3 +0x6150 0x75c2 +0x6151 0x75b3 +0x6152 0x75c3 +0x6153 0x75b5 +0x6154 0x75bd +0x6155 0x75b8 +0x6156 0x75bc +0x6157 0x75b1 +0x6158 0x75cd +0x6159 0x75ca +0x615a 0x75d2 +0x615b 0x75d9 +0x615c 0x75e3 +0x615d 0x75de +0x615e 0x75fe +0x615f 0x75ff +0x6160 0x75fc +0x6161 0x7601 +0x6162 0x75f0 +0x6163 0x75fa +0x6164 0x75f2 +0x6165 0x75f3 +0x6166 0x760b +0x6167 0x760d +0x6168 0x7609 +0x6169 0x761f +0x616a 0x7627 +0x616b 0x7620 +0x616c 0x7621 +0x616d 0x7622 +0x616e 0x7624 +0x616f 0x7634 +0x6170 0x7630 +0x6171 0x763b +0x6172 0x7647 +0x6173 0x7648 +0x6174 0x7646 +0x6175 0x765c +0x6176 0x7658 +0x6177 0x7661 +0x6178 0x7662 +0x6179 0x7668 +0x617a 0x7669 +0x617b 0x766a +0x617c 0x7667 +0x617d 0x766c +0x617e 0x7670 +0x6221 0x7672 +0x6222 0x7676 +0x6223 0x7678 +0x6224 0x767c +0x6225 0x7680 +0x6226 0x7683 +0x6227 0x7688 +0x6228 0x768b +0x6229 0x768e +0x622a 0x7696 +0x622b 0x7693 +0x622c 0x7699 +0x622d 0x769a +0x622e 0x76b0 +0x622f 0x76b4 +0x6230 0x76b8 +0x6231 0x76b9 +0x6232 0x76ba +0x6233 0x76c2 +0x6234 0x76cd +0x6235 0x76d6 +0x6236 0x76d2 +0x6237 0x76de +0x6238 0x76e1 +0x6239 0x76e5 +0x623a 0x76e7 +0x623b 0x76ea +0x623c 0x862f +0x623d 0x76fb +0x623e 0x7708 +0x623f 0x7707 +0x6240 0x7704 +0x6241 0x7729 +0x6242 0x7724 +0x6243 0x771e +0x6244 0x7725 +0x6245 0x7726 +0x6246 0x771b +0x6247 0x7737 +0x6248 0x7738 +0x6249 0x7747 +0x624a 0x775a +0x624b 0x7768 +0x624c 0x776b +0x624d 0x775b +0x624e 0x7765 +0x624f 0x777f +0x6250 0x777e +0x6251 0x7779 +0x6252 0x778e +0x6253 0x778b +0x6254 0x7791 +0x6255 0x77a0 +0x6256 0x779e +0x6257 0x77b0 +0x6258 0x77b6 +0x6259 0x77b9 +0x625a 0x77bf +0x625b 0x77bc +0x625c 0x77bd +0x625d 0x77bb +0x625e 0x77c7 +0x625f 0x77cd +0x6260 0x77d7 +0x6261 0x77da +0x6262 0x77dc +0x6263 0x77e3 +0x6264 0x77ee +0x6265 0x77fc +0x6266 0x780c +0x6267 0x7812 +0x6268 0x7926 +0x6269 0x7820 +0x626a 0x792a +0x626b 0x7845 +0x626c 0x788e +0x626d 0x7874 +0x626e 0x7886 +0x626f 0x787c +0x6270 0x789a +0x6271 0x788c +0x6272 0x78a3 +0x6273 0x78b5 +0x6274 0x78aa +0x6275 0x78af +0x6276 0x78d1 +0x6277 0x78c6 +0x6278 0x78cb +0x6279 0x78d4 +0x627a 0x78be +0x627b 0x78bc +0x627c 0x78c5 +0x627d 0x78ca +0x627e 0x78ec +0x6321 0x78e7 +0x6322 0x78da +0x6323 0x78fd +0x6324 0x78f4 +0x6325 0x7907 +0x6326 0x7912 +0x6327 0x7911 +0x6328 0x7919 +0x6329 0x792c +0x632a 0x792b +0x632b 0x7940 +0x632c 0x7960 +0x632d 0x7957 +0x632e 0x795f +0x632f 0x795a +0x6330 0x7955 +0x6331 0x7953 +0x6332 0x797a +0x6333 0x797f +0x6334 0x798a +0x6335 0x799d +0x6336 0x79a7 +0x6337 0x9f4b +0x6338 0x79aa +0x6339 0x79ae +0x633a 0x79b3 +0x633b 0x79b9 +0x633c 0x79ba +0x633d 0x79c9 +0x633e 0x79d5 +0x633f 0x79e7 +0x6340 0x79ec +0x6341 0x79e1 +0x6342 0x79e3 +0x6343 0x7a08 +0x6344 0x7a0d +0x6345 0x7a18 +0x6346 0x7a19 +0x6347 0x7a20 +0x6348 0x7a1f +0x6349 0x7980 +0x634a 0x7a31 +0x634b 0x7a3b +0x634c 0x7a3e +0x634d 0x7a37 +0x634e 0x7a43 +0x634f 0x7a57 +0x6350 0x7a49 +0x6351 0x7a61 +0x6352 0x7a62 +0x6353 0x7a69 +0x6354 0x9f9d +0x6355 0x7a70 +0x6356 0x7a79 +0x6357 0x7a7d +0x6358 0x7a88 +0x6359 0x7a97 +0x635a 0x7a95 +0x635b 0x7a98 +0x635c 0x7a96 +0x635d 0x7aa9 +0x635e 0x7ac8 +0x635f 0x7ab0 +0x6360 0x7ab6 +0x6361 0x7ac5 +0x6362 0x7ac4 +0x6363 0x7abf +0x6364 0x9083 +0x6365 0x7ac7 +0x6366 0x7aca +0x6367 0x7acd +0x6368 0x7acf +0x6369 0x7ad5 +0x636a 0x7ad3 +0x636b 0x7ad9 +0x636c 0x7ada +0x636d 0x7add +0x636e 0x7ae1 +0x636f 0x7ae2 +0x6370 0x7ae6 +0x6371 0x7aed +0x6372 0x7af0 +0x6373 0x7b02 +0x6374 0x7b0f +0x6375 0x7b0a +0x6376 0x7b06 +0x6377 0x7b33 +0x6378 0x7b18 +0x6379 0x7b19 +0x637a 0x7b1e +0x637b 0x7b35 +0x637c 0x7b28 +0x637d 0x7b36 +0x637e 0x7b50 +0x6421 0x7b7a +0x6422 0x7b04 +0x6423 0x7b4d +0x6424 0x7b0b +0x6425 0x7b4c +0x6426 0x7b45 +0x6427 0x7b75 +0x6428 0x7b65 +0x6429 0x7b74 +0x642a 0x7b67 +0x642b 0x7b70 +0x642c 0x7b71 +0x642d 0x7b6c +0x642e 0x7b6e +0x642f 0x7b9d +0x6430 0x7b98 +0x6431 0x7b9f +0x6432 0x7b8d +0x6433 0x7b9c +0x6434 0x7b9a +0x6435 0x7b8b +0x6436 0x7b92 +0x6437 0x7b8f +0x6438 0x7b5d +0x6439 0x7b99 +0x643a 0x7bcb +0x643b 0x7bc1 +0x643c 0x7bcc +0x643d 0x7bcf +0x643e 0x7bb4 +0x643f 0x7bc6 +0x6440 0x7bdd +0x6441 0x7be9 +0x6442 0x7c11 +0x6443 0x7c14 +0x6444 0x7be6 +0x6445 0x7be5 +0x6446 0x7c60 +0x6447 0x7c00 +0x6448 0x7c07 +0x6449 0x7c13 +0x644a 0x7bf3 +0x644b 0x7bf7 +0x644c 0x7c17 +0x644d 0x7c0d +0x644e 0x7bf6 +0x644f 0x7c23 +0x6450 0x7c27 +0x6451 0x7c2a +0x6452 0x7c1f +0x6453 0x7c37 +0x6454 0x7c2b +0x6455 0x7c3d +0x6456 0x7c4c +0x6457 0x7c43 +0x6458 0x7c54 +0x6459 0x7c4f +0x645a 0x7c40 +0x645b 0x7c50 +0x645c 0x7c58 +0x645d 0x7c5f +0x645e 0x7c64 +0x645f 0x7c56 +0x6460 0x7c65 +0x6461 0x7c6c +0x6462 0x7c75 +0x6463 0x7c83 +0x6464 0x7c90 +0x6465 0x7ca4 +0x6466 0x7cad +0x6467 0x7ca2 +0x6468 0x7cab +0x6469 0x7ca1 +0x646a 0x7ca8 +0x646b 0x7cb3 +0x646c 0x7cb2 +0x646d 0x7cb1 +0x646e 0x7cae +0x646f 0x7cb9 +0x6470 0x7cbd +0x6471 0x7cc0 +0x6472 0x7cc5 +0x6473 0x7cc2 +0x6474 0x7cd8 +0x6475 0x7cd2 +0x6476 0x7cdc +0x6477 0x7ce2 +0x6478 0x9b3b +0x6479 0x7cef +0x647a 0x7cf2 +0x647b 0x7cf4 +0x647c 0x7cf6 +0x647d 0x7cfa +0x647e 0x7d06 +0x6521 0x7d02 +0x6522 0x7d1c +0x6523 0x7d15 +0x6524 0x7d0a +0x6525 0x7d45 +0x6526 0x7d4b +0x6527 0x7d2e +0x6528 0x7d32 +0x6529 0x7d3f +0x652a 0x7d35 +0x652b 0x7d46 +0x652c 0x7d73 +0x652d 0x7d56 +0x652e 0x7d4e +0x652f 0x7d72 +0x6530 0x7d68 +0x6531 0x7d6e +0x6532 0x7d4f +0x6533 0x7d63 +0x6534 0x7d93 +0x6535 0x7d89 +0x6536 0x7d5b +0x6537 0x7d8f +0x6538 0x7d7d +0x6539 0x7d9b +0x653a 0x7dba +0x653b 0x7dae +0x653c 0x7da3 +0x653d 0x7db5 +0x653e 0x7dc7 +0x653f 0x7dbd +0x6540 0x7dab +0x6541 0x7e3d +0x6542 0x7da2 +0x6543 0x7daf +0x6544 0x7ddc +0x6545 0x7db8 +0x6546 0x7d9f +0x6547 0x7db0 +0x6548 0x7dd8 +0x6549 0x7ddd +0x654a 0x7de4 +0x654b 0x7dde +0x654c 0x7dfb +0x654d 0x7df2 +0x654e 0x7de1 +0x654f 0x7e05 +0x6550 0x7e0a +0x6551 0x7e23 +0x6552 0x7e21 +0x6553 0x7e12 +0x6554 0x7e31 +0x6555 0x7e1f +0x6556 0x7e09 +0x6557 0x7e0b +0x6558 0x7e22 +0x6559 0x7e46 +0x655a 0x7e66 +0x655b 0x7e3b +0x655c 0x7e35 +0x655d 0x7e39 +0x655e 0x7e43 +0x655f 0x7e37 +0x6560 0x7e32 +0x6561 0x7e3a +0x6562 0x7e67 +0x6563 0x7e5d +0x6564 0x7e56 +0x6565 0x7e5e +0x6566 0x7e59 +0x6567 0x7e5a +0x6568 0x7e79 +0x6569 0x7e6a +0x656a 0x7e69 +0x656b 0x7e7c +0x656c 0x7e7b +0x656d 0x7e83 +0x656e 0x7dd5 +0x656f 0x7e7d +0x6570 0x8fae +0x6571 0x7e7f +0x6572 0x7e88 +0x6573 0x7e89 +0x6574 0x7e8c +0x6575 0x7e92 +0x6576 0x7e90 +0x6577 0x7e93 +0x6578 0x7e94 +0x6579 0x7e96 +0x657a 0x7e8e +0x657b 0x7e9b +0x657c 0x7e9c +0x657d 0x7f38 +0x657e 0x7f3a +0x6621 0x7f45 +0x6622 0x7f4c +0x6623 0x7f4d +0x6624 0x7f4e +0x6625 0x7f50 +0x6626 0x7f51 +0x6627 0x7f55 +0x6628 0x7f54 +0x6629 0x7f58 +0x662a 0x7f5f +0x662b 0x7f60 +0x662c 0x7f68 +0x662d 0x7f69 +0x662e 0x7f67 +0x662f 0x7f78 +0x6630 0x7f82 +0x6631 0x7f86 +0x6632 0x7f83 +0x6633 0x7f88 +0x6634 0x7f87 +0x6635 0x7f8c +0x6636 0x7f94 +0x6637 0x7f9e +0x6638 0x7f9d +0x6639 0x7f9a +0x663a 0x7fa3 +0x663b 0x7faf +0x663c 0x7fb2 +0x663d 0x7fb9 +0x663e 0x7fae +0x663f 0x7fb6 +0x6640 0x7fb8 +0x6641 0x8b71 +0x6642 0x7fc5 +0x6643 0x7fc6 +0x6644 0x7fca +0x6645 0x7fd5 +0x6646 0x7fd4 +0x6647 0x7fe1 +0x6648 0x7fe6 +0x6649 0x7fe9 +0x664a 0x7ff3 +0x664b 0x7ff9 +0x664c 0x98dc +0x664d 0x8006 +0x664e 0x8004 +0x664f 0x800b +0x6650 0x8012 +0x6651 0x8018 +0x6652 0x8019 +0x6653 0x801c +0x6654 0x8021 +0x6655 0x8028 +0x6656 0x803f +0x6657 0x803b +0x6658 0x804a +0x6659 0x8046 +0x665a 0x8052 +0x665b 0x8058 +0x665c 0x805a +0x665d 0x805f +0x665e 0x8062 +0x665f 0x8068 +0x6660 0x8073 +0x6661 0x8072 +0x6662 0x8070 +0x6663 0x8076 +0x6664 0x8079 +0x6665 0x807d +0x6666 0x807f +0x6667 0x8084 +0x6668 0x8086 +0x6669 0x8085 +0x666a 0x809b +0x666b 0x8093 +0x666c 0x809a +0x666d 0x80ad +0x666e 0x5190 +0x666f 0x80ac +0x6670 0x80db +0x6671 0x80e5 +0x6672 0x80d9 +0x6673 0x80dd +0x6674 0x80c4 +0x6675 0x80da +0x6676 0x80d6 +0x6677 0x8109 +0x6678 0x80ef +0x6679 0x80f1 +0x667a 0x811b +0x667b 0x8129 +0x667c 0x8123 +0x667d 0x812f +0x667e 0x814b +0x6721 0x968b +0x6722 0x8146 +0x6723 0x813e +0x6724 0x8153 +0x6725 0x8151 +0x6726 0x80fc +0x6727 0x8171 +0x6728 0x816e +0x6729 0x8165 +0x672a 0x8166 +0x672b 0x8174 +0x672c 0x8183 +0x672d 0x8188 +0x672e 0x818a +0x672f 0x8180 +0x6730 0x8182 +0x6731 0x81a0 +0x6732 0x8195 +0x6733 0x81a4 +0x6734 0x81a3 +0x6735 0x815f +0x6736 0x8193 +0x6737 0x81a9 +0x6738 0x81b0 +0x6739 0x81b5 +0x673a 0x81be +0x673b 0x81b8 +0x673c 0x81bd +0x673d 0x81c0 +0x673e 0x81c2 +0x673f 0x81ba +0x6740 0x81c9 +0x6741 0x81cd +0x6742 0x81d1 +0x6743 0x81d9 +0x6744 0x81d8 +0x6745 0x81c8 +0x6746 0x81da +0x6747 0x81df +0x6748 0x81e0 +0x6749 0x81e7 +0x674a 0x81fa +0x674b 0x81fb +0x674c 0x81fe +0x674d 0x8201 +0x674e 0x8202 +0x674f 0x8205 +0x6750 0x8207 +0x6751 0x820a +0x6752 0x820d +0x6753 0x8210 +0x6754 0x8216 +0x6755 0x8229 +0x6756 0x822b +0x6757 0x8238 +0x6758 0x8233 +0x6759 0x8240 +0x675a 0x8259 +0x675b 0x8258 +0x675c 0x825d +0x675d 0x825a +0x675e 0x825f +0x675f 0x8264 +0x6760 0x8262 +0x6761 0x8268 +0x6762 0x826a +0x6763 0x826b +0x6764 0x822e +0x6765 0x8271 +0x6766 0x8277 +0x6767 0x8278 +0x6768 0x827e +0x6769 0x828d +0x676a 0x8292 +0x676b 0x82ab +0x676c 0x829f +0x676d 0x82bb +0x676e 0x82ac +0x676f 0x82e1 +0x6770 0x82e3 +0x6771 0x82df +0x6772 0x82d2 +0x6773 0x82f4 +0x6774 0x82f3 +0x6775 0x82fa +0x6776 0x8393 +0x6777 0x8303 +0x6778 0x82fb +0x6779 0x82f9 +0x677a 0x82de +0x677b 0x8306 +0x677c 0x82dc +0x677d 0x8309 +0x677e 0x82d9 +0x6821 0x8335 +0x6822 0x8334 +0x6823 0x8316 +0x6824 0x8332 +0x6825 0x8331 +0x6826 0x8340 +0x6827 0x8339 +0x6828 0x8350 +0x6829 0x8345 +0x682a 0x832f +0x682b 0x832b +0x682c 0x8317 +0x682d 0x8318 +0x682e 0x8385 +0x682f 0x839a +0x6830 0x83aa +0x6831 0x839f +0x6832 0x83a2 +0x6833 0x8396 +0x6834 0x8323 +0x6835 0x838e +0x6836 0x8387 +0x6837 0x838a +0x6838 0x837c +0x6839 0x83b5 +0x683a 0x8373 +0x683b 0x8375 +0x683c 0x83a0 +0x683d 0x8389 +0x683e 0x83a8 +0x683f 0x83f4 +0x6840 0x8413 +0x6841 0x83eb +0x6842 0x83ce +0x6843 0x83fd +0x6844 0x8403 +0x6845 0x83d8 +0x6846 0x840b +0x6847 0x83c1 +0x6848 0x83f7 +0x6849 0x8407 +0x684a 0x83e0 +0x684b 0x83f2 +0x684c 0x840d +0x684d 0x8422 +0x684e 0x8420 +0x684f 0x83bd +0x6850 0x8438 +0x6851 0x8506 +0x6852 0x83fb +0x6853 0x846d +0x6854 0x842a +0x6855 0x843c +0x6856 0x855a +0x6857 0x8484 +0x6858 0x8477 +0x6859 0x846b +0x685a 0x84ad +0x685b 0x846e +0x685c 0x8482 +0x685d 0x8469 +0x685e 0x8446 +0x685f 0x842c +0x6860 0x846f +0x6861 0x8479 +0x6862 0x8435 +0x6863 0x84ca +0x6864 0x8462 +0x6865 0x84b9 +0x6866 0x84bf +0x6867 0x849f +0x6868 0x84d9 +0x6869 0x84cd +0x686a 0x84bb +0x686b 0x84da +0x686c 0x84d0 +0x686d 0x84c1 +0x686e 0x84c6 +0x686f 0x84d6 +0x6870 0x84a1 +0x6871 0x8521 +0x6872 0x84ff +0x6873 0x84f4 +0x6874 0x8517 +0x6875 0x8518 +0x6876 0x852c +0x6877 0x851f +0x6878 0x8515 +0x6879 0x8514 +0x687a 0x84fc +0x687b 0x8540 +0x687c 0x8563 +0x687d 0x8558 +0x687e 0x8548 +0x6921 0x8541 +0x6922 0x8602 +0x6923 0x854b +0x6924 0x8555 +0x6925 0x8580 +0x6926 0x85a4 +0x6927 0x8588 +0x6928 0x8591 +0x6929 0x858a +0x692a 0x85a8 +0x692b 0x856d +0x692c 0x8594 +0x692d 0x859b +0x692e 0x85ea +0x692f 0x8587 +0x6930 0x859c +0x6931 0x8577 +0x6932 0x857e +0x6933 0x8590 +0x6934 0x85c9 +0x6935 0x85ba +0x6936 0x85cf +0x6937 0x85b9 +0x6938 0x85d0 +0x6939 0x85d5 +0x693a 0x85dd +0x693b 0x85e5 +0x693c 0x85dc +0x693d 0x85f9 +0x693e 0x860a +0x693f 0x8613 +0x6940 0x860b +0x6941 0x85fe +0x6942 0x85fa +0x6943 0x8606 +0x6944 0x8622 +0x6945 0x861a +0x6946 0x8630 +0x6947 0x863f +0x6948 0x864d +0x6949 0x4e55 +0x694a 0x8654 +0x694b 0x865f +0x694c 0x8667 +0x694d 0x8671 +0x694e 0x8693 +0x694f 0x86a3 +0x6950 0x86a9 +0x6951 0x86aa +0x6952 0x868b +0x6953 0x868c +0x6954 0x86b6 +0x6955 0x86af +0x6956 0x86c4 +0x6957 0x86c6 +0x6958 0x86b0 +0x6959 0x86c9 +0x695a 0x8823 +0x695b 0x86ab +0x695c 0x86d4 +0x695d 0x86de +0x695e 0x86e9 +0x695f 0x86ec +0x6960 0x86df +0x6961 0x86db +0x6962 0x86ef +0x6963 0x8712 +0x6964 0x8706 +0x6965 0x8708 +0x6966 0x8700 +0x6967 0x8703 +0x6968 0x86fb +0x6969 0x8711 +0x696a 0x8709 +0x696b 0x870d +0x696c 0x86f9 +0x696d 0x870a +0x696e 0x8734 +0x696f 0x873f +0x6970 0x8737 +0x6971 0x873b +0x6972 0x8725 +0x6973 0x8729 +0x6974 0x871a +0x6975 0x8760 +0x6976 0x875f +0x6977 0x8778 +0x6978 0x874c +0x6979 0x874e +0x697a 0x8774 +0x697b 0x8757 +0x697c 0x8768 +0x697d 0x876e +0x697e 0x8759 +0x6a21 0x8753 +0x6a22 0x8763 +0x6a23 0x876a +0x6a24 0x8805 +0x6a25 0x87a2 +0x6a26 0x879f +0x6a27 0x8782 +0x6a28 0x87af +0x6a29 0x87cb +0x6a2a 0x87bd +0x6a2b 0x87c0 +0x6a2c 0x87d0 +0x6a2d 0x96d6 +0x6a2e 0x87ab +0x6a2f 0x87c4 +0x6a30 0x87b3 +0x6a31 0x87c7 +0x6a32 0x87c6 +0x6a33 0x87bb +0x6a34 0x87ef +0x6a35 0x87f2 +0x6a36 0x87e0 +0x6a37 0x880f +0x6a38 0x880d +0x6a39 0x87fe +0x6a3a 0x87f6 +0x6a3b 0x87f7 +0x6a3c 0x880e +0x6a3d 0x87d2 +0x6a3e 0x8811 +0x6a3f 0x8816 +0x6a40 0x8815 +0x6a41 0x8822 +0x6a42 0x8821 +0x6a43 0x8831 +0x6a44 0x8836 +0x6a45 0x8839 +0x6a46 0x8827 +0x6a47 0x883b +0x6a48 0x8844 +0x6a49 0x8842 +0x6a4a 0x8852 +0x6a4b 0x8859 +0x6a4c 0x885e +0x6a4d 0x8862 +0x6a4e 0x886b +0x6a4f 0x8881 +0x6a50 0x887e +0x6a51 0x889e +0x6a52 0x8875 +0x6a53 0x887d +0x6a54 0x88b5 +0x6a55 0x8872 +0x6a56 0x8882 +0x6a57 0x8897 +0x6a58 0x8892 +0x6a59 0x88ae +0x6a5a 0x8899 +0x6a5b 0x88a2 +0x6a5c 0x888d +0x6a5d 0x88a4 +0x6a5e 0x88b0 +0x6a5f 0x88bf +0x6a60 0x88b1 +0x6a61 0x88c3 +0x6a62 0x88c4 +0x6a63 0x88d4 +0x6a64 0x88d8 +0x6a65 0x88d9 +0x6a66 0x88dd +0x6a67 0x88f9 +0x6a68 0x8902 +0x6a69 0x88fc +0x6a6a 0x88f4 +0x6a6b 0x88e8 +0x6a6c 0x88f2 +0x6a6d 0x8904 +0x6a6e 0x890c +0x6a6f 0x890a +0x6a70 0x8913 +0x6a71 0x8943 +0x6a72 0x891e +0x6a73 0x8925 +0x6a74 0x892a +0x6a75 0x892b +0x6a76 0x8941 +0x6a77 0x8944 +0x6a78 0x893b +0x6a79 0x8936 +0x6a7a 0x8938 +0x6a7b 0x894c +0x6a7c 0x891d +0x6a7d 0x8960 +0x6a7e 0x895e +0x6b21 0x8966 +0x6b22 0x8964 +0x6b23 0x896d +0x6b24 0x896a +0x6b25 0x896f +0x6b26 0x8974 +0x6b27 0x8977 +0x6b28 0x897e +0x6b29 0x8983 +0x6b2a 0x8988 +0x6b2b 0x898a +0x6b2c 0x8993 +0x6b2d 0x8998 +0x6b2e 0x89a1 +0x6b2f 0x89a9 +0x6b30 0x89a6 +0x6b31 0x89ac +0x6b32 0x89af +0x6b33 0x89b2 +0x6b34 0x89ba +0x6b35 0x89bd +0x6b36 0x89bf +0x6b37 0x89c0 +0x6b38 0x89da +0x6b39 0x89dc +0x6b3a 0x89dd +0x6b3b 0x89e7 +0x6b3c 0x89f4 +0x6b3d 0x89f8 +0x6b3e 0x8a03 +0x6b3f 0x8a16 +0x6b40 0x8a10 +0x6b41 0x8a0c +0x6b42 0x8a1b +0x6b43 0x8a1d +0x6b44 0x8a25 +0x6b45 0x8a36 +0x6b46 0x8a41 +0x6b47 0x8a5b +0x6b48 0x8a52 +0x6b49 0x8a46 +0x6b4a 0x8a48 +0x6b4b 0x8a7c +0x6b4c 0x8a6d +0x6b4d 0x8a6c +0x6b4e 0x8a62 +0x6b4f 0x8a85 +0x6b50 0x8a82 +0x6b51 0x8a84 +0x6b52 0x8aa8 +0x6b53 0x8aa1 +0x6b54 0x8a91 +0x6b55 0x8aa5 +0x6b56 0x8aa6 +0x6b57 0x8a9a +0x6b58 0x8aa3 +0x6b59 0x8ac4 +0x6b5a 0x8acd +0x6b5b 0x8ac2 +0x6b5c 0x8ada +0x6b5d 0x8aeb +0x6b5e 0x8af3 +0x6b5f 0x8ae7 +0x6b60 0x8ae4 +0x6b61 0x8af1 +0x6b62 0x8b14 +0x6b63 0x8ae0 +0x6b64 0x8ae2 +0x6b65 0x8af7 +0x6b66 0x8ade +0x6b67 0x8adb +0x6b68 0x8b0c +0x6b69 0x8b07 +0x6b6a 0x8b1a +0x6b6b 0x8ae1 +0x6b6c 0x8b16 +0x6b6d 0x8b10 +0x6b6e 0x8b17 +0x6b6f 0x8b20 +0x6b70 0x8b33 +0x6b71 0x97ab +0x6b72 0x8b26 +0x6b73 0x8b2b +0x6b74 0x8b3e +0x6b75 0x8b28 +0x6b76 0x8b41 +0x6b77 0x8b4c +0x6b78 0x8b4f +0x6b79 0x8b4e +0x6b7a 0x8b49 +0x6b7b 0x8b56 +0x6b7c 0x8b5b +0x6b7d 0x8b5a +0x6b7e 0x8b6b +0x6c21 0x8b5f +0x6c22 0x8b6c +0x6c23 0x8b6f +0x6c24 0x8b74 +0x6c25 0x8b7d +0x6c26 0x8b80 +0x6c27 0x8b8c +0x6c28 0x8b8e +0x6c29 0x8b92 +0x6c2a 0x8b93 +0x6c2b 0x8b96 +0x6c2c 0x8b99 +0x6c2d 0x8b9a +0x6c2e 0x8c3a +0x6c2f 0x8c41 +0x6c30 0x8c3f +0x6c31 0x8c48 +0x6c32 0x8c4c +0x6c33 0x8c4e +0x6c34 0x8c50 +0x6c35 0x8c55 +0x6c36 0x8c62 +0x6c37 0x8c6c +0x6c38 0x8c78 +0x6c39 0x8c7a +0x6c3a 0x8c82 +0x6c3b 0x8c89 +0x6c3c 0x8c85 +0x6c3d 0x8c8a +0x6c3e 0x8c8d +0x6c3f 0x8c8e +0x6c40 0x8c94 +0x6c41 0x8c7c +0x6c42 0x8c98 +0x6c43 0x621d +0x6c44 0x8cad +0x6c45 0x8caa +0x6c46 0x8cbd +0x6c47 0x8cb2 +0x6c48 0x8cb3 +0x6c49 0x8cae +0x6c4a 0x8cb6 +0x6c4b 0x8cc8 +0x6c4c 0x8cc1 +0x6c4d 0x8ce4 +0x6c4e 0x8ce3 +0x6c4f 0x8cda +0x6c50 0x8cfd +0x6c51 0x8cfa +0x6c52 0x8cfb +0x6c53 0x8d04 +0x6c54 0x8d05 +0x6c55 0x8d0a +0x6c56 0x8d07 +0x6c57 0x8d0f +0x6c58 0x8d0d +0x6c59 0x8d10 +0x6c5a 0x9f4e +0x6c5b 0x8d13 +0x6c5c 0x8ccd +0x6c5d 0x8d14 +0x6c5e 0x8d16 +0x6c5f 0x8d67 +0x6c60 0x8d6d +0x6c61 0x8d71 +0x6c62 0x8d73 +0x6c63 0x8d81 +0x6c64 0x8d99 +0x6c65 0x8dc2 +0x6c66 0x8dbe +0x6c67 0x8dba +0x6c68 0x8dcf +0x6c69 0x8dda +0x6c6a 0x8dd6 +0x6c6b 0x8dcc +0x6c6c 0x8ddb +0x6c6d 0x8dcb +0x6c6e 0x8dea +0x6c6f 0x8deb +0x6c70 0x8ddf +0x6c71 0x8de3 +0x6c72 0x8dfc +0x6c73 0x8e08 +0x6c74 0x8e09 +0x6c75 0x8dff +0x6c76 0x8e1d +0x6c77 0x8e1e +0x6c78 0x8e10 +0x6c79 0x8e1f +0x6c7a 0x8e42 +0x6c7b 0x8e35 +0x6c7c 0x8e30 +0x6c7d 0x8e34 +0x6c7e 0x8e4a +0x6d21 0x8e47 +0x6d22 0x8e49 +0x6d23 0x8e4c +0x6d24 0x8e50 +0x6d25 0x8e48 +0x6d26 0x8e59 +0x6d27 0x8e64 +0x6d28 0x8e60 +0x6d29 0x8e2a +0x6d2a 0x8e63 +0x6d2b 0x8e55 +0x6d2c 0x8e76 +0x6d2d 0x8e72 +0x6d2e 0x8e7c +0x6d2f 0x8e81 +0x6d30 0x8e87 +0x6d31 0x8e85 +0x6d32 0x8e84 +0x6d33 0x8e8b +0x6d34 0x8e8a +0x6d35 0x8e93 +0x6d36 0x8e91 +0x6d37 0x8e94 +0x6d38 0x8e99 +0x6d39 0x8eaa +0x6d3a 0x8ea1 +0x6d3b 0x8eac +0x6d3c 0x8eb0 +0x6d3d 0x8ec6 +0x6d3e 0x8eb1 +0x6d3f 0x8ebe +0x6d40 0x8ec5 +0x6d41 0x8ec8 +0x6d42 0x8ecb +0x6d43 0x8edb +0x6d44 0x8ee3 +0x6d45 0x8efc +0x6d46 0x8efb +0x6d47 0x8eeb +0x6d48 0x8efe +0x6d49 0x8f0a +0x6d4a 0x8f05 +0x6d4b 0x8f15 +0x6d4c 0x8f12 +0x6d4d 0x8f19 +0x6d4e 0x8f13 +0x6d4f 0x8f1c +0x6d50 0x8f1f +0x6d51 0x8f1b +0x6d52 0x8f0c +0x6d53 0x8f26 +0x6d54 0x8f33 +0x6d55 0x8f3b +0x6d56 0x8f39 +0x6d57 0x8f45 +0x6d58 0x8f42 +0x6d59 0x8f3e +0x6d5a 0x8f4c +0x6d5b 0x8f49 +0x6d5c 0x8f46 +0x6d5d 0x8f4e +0x6d5e 0x8f57 +0x6d5f 0x8f5c +0x6d60 0x8f62 +0x6d61 0x8f63 +0x6d62 0x8f64 +0x6d63 0x8f9c +0x6d64 0x8f9f +0x6d65 0x8fa3 +0x6d66 0x8fad +0x6d67 0x8faf +0x6d68 0x8fb7 +0x6d69 0x8fda +0x6d6a 0x8fe5 +0x6d6b 0x8fe2 +0x6d6c 0x8fea +0x6d6d 0x8fef +0x6d6e 0x9087 +0x6d6f 0x8ff4 +0x6d70 0x9005 +0x6d71 0x8ff9 +0x6d72 0x8ffa +0x6d73 0x9011 +0x6d74 0x9015 +0x6d75 0x9021 +0x6d76 0x900d +0x6d77 0x901e +0x6d78 0x9016 +0x6d79 0x900b +0x6d7a 0x9027 +0x6d7b 0x9036 +0x6d7c 0x9035 +0x6d7d 0x9039 +0x6d7e 0x8ff8 +0x6e21 0x904f +0x6e22 0x9050 +0x6e23 0x9051 +0x6e24 0x9052 +0x6e25 0x900e +0x6e26 0x9049 +0x6e27 0x903e +0x6e28 0x9056 +0x6e29 0x9058 +0x6e2a 0x905e +0x6e2b 0x9068 +0x6e2c 0x906f +0x6e2d 0x9076 +0x6e2e 0x96a8 +0x6e2f 0x9072 +0x6e30 0x9082 +0x6e31 0x907d +0x6e32 0x9081 +0x6e33 0x9080 +0x6e34 0x908a +0x6e35 0x9089 +0x6e36 0x908f +0x6e37 0x90a8 +0x6e38 0x90af +0x6e39 0x90b1 +0x6e3a 0x90b5 +0x6e3b 0x90e2 +0x6e3c 0x90e4 +0x6e3d 0x6248 +0x6e3e 0x90db +0x6e3f 0x9102 +0x6e40 0x9112 +0x6e41 0x9119 +0x6e42 0x9132 +0x6e43 0x9130 +0x6e44 0x914a +0x6e45 0x9156 +0x6e46 0x9158 +0x6e47 0x9163 +0x6e48 0x9165 +0x6e49 0x9169 +0x6e4a 0x9173 +0x6e4b 0x9172 +0x6e4c 0x918b +0x6e4d 0x9189 +0x6e4e 0x9182 +0x6e4f 0x91a2 +0x6e50 0x91ab +0x6e51 0x91af +0x6e52 0x91aa +0x6e53 0x91b5 +0x6e54 0x91b4 +0x6e55 0x91ba +0x6e56 0x91c0 +0x6e57 0x91c1 +0x6e58 0x91c9 +0x6e59 0x91cb +0x6e5a 0x91d0 +0x6e5b 0x91d6 +0x6e5c 0x91df +0x6e5d 0x91e1 +0x6e5e 0x91db +0x6e5f 0x91fc +0x6e60 0x91f5 +0x6e61 0x91f6 +0x6e62 0x921e +0x6e63 0x91ff +0x6e64 0x9214 +0x6e65 0x922c +0x6e66 0x9215 +0x6e67 0x9211 +0x6e68 0x925e +0x6e69 0x9257 +0x6e6a 0x9245 +0x6e6b 0x9249 +0x6e6c 0x9264 +0x6e6d 0x9248 +0x6e6e 0x9295 +0x6e6f 0x923f +0x6e70 0x924b +0x6e71 0x9250 +0x6e72 0x929c +0x6e73 0x9296 +0x6e74 0x9293 +0x6e75 0x929b +0x6e76 0x925a +0x6e77 0x92cf +0x6e78 0x92b9 +0x6e79 0x92b7 +0x6e7a 0x92e9 +0x6e7b 0x930f +0x6e7c 0x92fa +0x6e7d 0x9344 +0x6e7e 0x932e +0x6f21 0x9319 +0x6f22 0x9322 +0x6f23 0x931a +0x6f24 0x9323 +0x6f25 0x933a +0x6f26 0x9335 +0x6f27 0x933b +0x6f28 0x935c +0x6f29 0x9360 +0x6f2a 0x937c +0x6f2b 0x936e +0x6f2c 0x9356 +0x6f2d 0x93b0 +0x6f2e 0x93ac +0x6f2f 0x93ad +0x6f30 0x9394 +0x6f31 0x93b9 +0x6f32 0x93d6 +0x6f33 0x93d7 +0x6f34 0x93e8 +0x6f35 0x93e5 +0x6f36 0x93d8 +0x6f37 0x93c3 +0x6f38 0x93dd +0x6f39 0x93d0 +0x6f3a 0x93c8 +0x6f3b 0x93e4 +0x6f3c 0x941a +0x6f3d 0x9414 +0x6f3e 0x9413 +0x6f3f 0x9403 +0x6f40 0x9407 +0x6f41 0x9410 +0x6f42 0x9436 +0x6f43 0x942b +0x6f44 0x9435 +0x6f45 0x9421 +0x6f46 0x943a +0x6f47 0x9441 +0x6f48 0x9452 +0x6f49 0x9444 +0x6f4a 0x945b +0x6f4b 0x9460 +0x6f4c 0x9462 +0x6f4d 0x945e +0x6f4e 0x946a +0x6f4f 0x9229 +0x6f50 0x9470 +0x6f51 0x9475 +0x6f52 0x9477 +0x6f53 0x947d +0x6f54 0x945a +0x6f55 0x947c +0x6f56 0x947e +0x6f57 0x9481 +0x6f58 0x947f +0x6f59 0x9582 +0x6f5a 0x9587 +0x6f5b 0x958a +0x6f5c 0x9594 +0x6f5d 0x9596 +0x6f5e 0x9598 +0x6f5f 0x9599 +0x6f60 0x95a0 +0x6f61 0x95a8 +0x6f62 0x95a7 +0x6f63 0x95ad +0x6f64 0x95bc +0x6f65 0x95bb +0x6f66 0x95b9 +0x6f67 0x95be +0x6f68 0x95ca +0x6f69 0x6ff6 +0x6f6a 0x95c3 +0x6f6b 0x95cd +0x6f6c 0x95cc +0x6f6d 0x95d5 +0x6f6e 0x95d4 +0x6f6f 0x95d6 +0x6f70 0x95dc +0x6f71 0x95e1 +0x6f72 0x95e5 +0x6f73 0x95e2 +0x6f74 0x9621 +0x6f75 0x9628 +0x6f76 0x962e +0x6f77 0x962f +0x6f78 0x9642 +0x6f79 0x964c +0x6f7a 0x964f +0x6f7b 0x964b +0x6f7c 0x9677 +0x6f7d 0x965c +0x6f7e 0x965e +0x7021 0x965d +0x7022 0x965f +0x7023 0x9666 +0x7024 0x9672 +0x7025 0x966c +0x7026 0x968d +0x7027 0x9698 +0x7028 0x9695 +0x7029 0x9697 +0x702a 0x96aa +0x702b 0x96a7 +0x702c 0x96b1 +0x702d 0x96b2 +0x702e 0x96b0 +0x702f 0x96b4 +0x7030 0x96b6 +0x7031 0x96b8 +0x7032 0x96b9 +0x7033 0x96ce +0x7034 0x96cb +0x7035 0x96c9 +0x7036 0x96cd +0x7037 0x894d +0x7038 0x96dc +0x7039 0x970d +0x703a 0x96d5 +0x703b 0x96f9 +0x703c 0x9704 +0x703d 0x9706 +0x703e 0x9708 +0x703f 0x9713 +0x7040 0x970e +0x7041 0x9711 +0x7042 0x970f +0x7043 0x9716 +0x7044 0x9719 +0x7045 0x9724 +0x7046 0x972a +0x7047 0x9730 +0x7048 0x9739 +0x7049 0x973d +0x704a 0x973e +0x704b 0x9744 +0x704c 0x9746 +0x704d 0x9748 +0x704e 0x9742 +0x704f 0x9749 +0x7050 0x975c +0x7051 0x9760 +0x7052 0x9764 +0x7053 0x9766 +0x7054 0x9768 +0x7055 0x52d2 +0x7056 0x976b +0x7057 0x9771 +0x7058 0x9779 +0x7059 0x9785 +0x705a 0x977c +0x705b 0x9781 +0x705c 0x977a +0x705d 0x9786 +0x705e 0x978b +0x705f 0x978f +0x7060 0x9790 +0x7061 0x979c +0x7062 0x97a8 +0x7063 0x97a6 +0x7064 0x97a3 +0x7065 0x97b3 +0x7066 0x97b4 +0x7067 0x97c3 +0x7068 0x97c6 +0x7069 0x97c8 +0x706a 0x97cb +0x706b 0x97dc +0x706c 0x97ed +0x706d 0x9f4f +0x706e 0x97f2 +0x706f 0x7adf +0x7070 0x97f6 +0x7071 0x97f5 +0x7072 0x980f +0x7073 0x980c +0x7074 0x9838 +0x7075 0x9824 +0x7076 0x9821 +0x7077 0x9837 +0x7078 0x983d +0x7079 0x9846 +0x707a 0x984f +0x707b 0x984b +0x707c 0x986b +0x707d 0x986f +0x707e 0x9870 +0x7121 0x9871 +0x7122 0x9874 +0x7123 0x9873 +0x7124 0x98aa +0x7125 0x98af +0x7126 0x98b1 +0x7127 0x98b6 +0x7128 0x98c4 +0x7129 0x98c3 +0x712a 0x98c6 +0x712b 0x98e9 +0x712c 0x98eb +0x712d 0x9903 +0x712e 0x9909 +0x712f 0x9912 +0x7130 0x9914 +0x7131 0x9918 +0x7132 0x9921 +0x7133 0x991d +0x7134 0x991e +0x7135 0x9924 +0x7136 0x9920 +0x7137 0x992c +0x7138 0x992e +0x7139 0x993d +0x713a 0x993e +0x713b 0x9942 +0x713c 0x9949 +0x713d 0x9945 +0x713e 0x9950 +0x713f 0x994b +0x7140 0x9951 +0x7141 0x9952 +0x7142 0x994c +0x7143 0x9955 +0x7144 0x9997 +0x7145 0x9998 +0x7146 0x99a5 +0x7147 0x99ad +0x7148 0x99ae +0x7149 0x99bc +0x714a 0x99df +0x714b 0x99db +0x714c 0x99dd +0x714d 0x99d8 +0x714e 0x99d1 +0x714f 0x99ed +0x7150 0x99ee +0x7151 0x99f1 +0x7152 0x99f2 +0x7153 0x99fb +0x7154 0x99f8 +0x7155 0x9a01 +0x7156 0x9a0f +0x7157 0x9a05 +0x7158 0x99e2 +0x7159 0x9a19 +0x715a 0x9a2b +0x715b 0x9a37 +0x715c 0x9a45 +0x715d 0x9a42 +0x715e 0x9a40 +0x715f 0x9a43 +0x7160 0x9a3e +0x7161 0x9a55 +0x7162 0x9a4d +0x7163 0x9a5b +0x7164 0x9a57 +0x7165 0x9a5f +0x7166 0x9a62 +0x7167 0x9a65 +0x7168 0x9a64 +0x7169 0x9a69 +0x716a 0x9a6b +0x716b 0x9a6a +0x716c 0x9aad +0x716d 0x9ab0 +0x716e 0x9abc +0x716f 0x9ac0 +0x7170 0x9acf +0x7171 0x9ad1 +0x7172 0x9ad3 +0x7173 0x9ad4 +0x7174 0x9ade +0x7175 0x9adf +0x7176 0x9ae2 +0x7177 0x9ae3 +0x7178 0x9ae6 +0x7179 0x9aef +0x717a 0x9aeb +0x717b 0x9aee +0x717c 0x9af4 +0x717d 0x9af1 +0x717e 0x9af7 +0x7221 0x9afb +0x7222 0x9b06 +0x7223 0x9b18 +0x7224 0x9b1a +0x7225 0x9b1f +0x7226 0x9b22 +0x7227 0x9b23 +0x7228 0x9b25 +0x7229 0x9b27 +0x722a 0x9b28 +0x722b 0x9b29 +0x722c 0x9b2a +0x722d 0x9b2e +0x722e 0x9b2f +0x722f 0x9b32 +0x7230 0x9b44 +0x7231 0x9b43 +0x7232 0x9b4f +0x7233 0x9b4d +0x7234 0x9b4e +0x7235 0x9b51 +0x7236 0x9b58 +0x7237 0x9b74 +0x7238 0x9b93 +0x7239 0x9b83 +0x723a 0x9b91 +0x723b 0x9b96 +0x723c 0x9b97 +0x723d 0x9b9f +0x723e 0x9ba0 +0x723f 0x9ba8 +0x7240 0x9bb4 +0x7241 0x9bc0 +0x7242 0x9bca +0x7243 0x9bb9 +0x7244 0x9bc6 +0x7245 0x9bcf +0x7246 0x9bd1 +0x7247 0x9bd2 +0x7248 0x9be3 +0x7249 0x9be2 +0x724a 0x9be4 +0x724b 0x9bd4 +0x724c 0x9be1 +0x724d 0x9c3a +0x724e 0x9bf2 +0x724f 0x9bf1 +0x7250 0x9bf0 +0x7251 0x9c15 +0x7252 0x9c14 +0x7253 0x9c09 +0x7254 0x9c13 +0x7255 0x9c0c +0x7256 0x9c06 +0x7257 0x9c08 +0x7258 0x9c12 +0x7259 0x9c0a +0x725a 0x9c04 +0x725b 0x9c2e +0x725c 0x9c1b +0x725d 0x9c25 +0x725e 0x9c24 +0x725f 0x9c21 +0x7260 0x9c30 +0x7261 0x9c47 +0x7262 0x9c32 +0x7263 0x9c46 +0x7264 0x9c3e +0x7265 0x9c5a +0x7266 0x9c60 +0x7267 0x9c67 +0x7268 0x9c76 +0x7269 0x9c78 +0x726a 0x9ce7 +0x726b 0x9cec +0x726c 0x9cf0 +0x726d 0x9d09 +0x726e 0x9d08 +0x726f 0x9ceb +0x7270 0x9d03 +0x7271 0x9d06 +0x7272 0x9d2a +0x7273 0x9d26 +0x7274 0x9daf +0x7275 0x9d23 +0x7276 0x9d1f +0x7277 0x9d44 +0x7278 0x9d15 +0x7279 0x9d12 +0x727a 0x9d41 +0x727b 0x9d3f +0x727c 0x9d3e +0x727d 0x9d46 +0x727e 0x9d48 +0x7321 0x9d5d +0x7322 0x9d5e +0x7323 0x9d64 +0x7324 0x9d51 +0x7325 0x9d50 +0x7326 0x9d59 +0x7327 0x9d72 +0x7328 0x9d89 +0x7329 0x9d87 +0x732a 0x9dab +0x732b 0x9d6f +0x732c 0x9d7a +0x732d 0x9d9a +0x732e 0x9da4 +0x732f 0x9da9 +0x7330 0x9db2 +0x7331 0x9dc4 +0x7332 0x9dc1 +0x7333 0x9dbb +0x7334 0x9db8 +0x7335 0x9dba +0x7336 0x9dc6 +0x7337 0x9dcf +0x7338 0x9dc2 +0x7339 0x9dd9 +0x733a 0x9dd3 +0x733b 0x9df8 +0x733c 0x9de6 +0x733d 0x9ded +0x733e 0x9def +0x733f 0x9dfd +0x7340 0x9e1a +0x7341 0x9e1b +0x7342 0x9e1e +0x7343 0x9e75 +0x7344 0x9e79 +0x7345 0x9e7d +0x7346 0x9e81 +0x7347 0x9e88 +0x7348 0x9e8b +0x7349 0x9e8c +0x734a 0x9e92 +0x734b 0x9e95 +0x734c 0x9e91 +0x734d 0x9e9d +0x734e 0x9ea5 +0x734f 0x9ea9 +0x7350 0x9eb8 +0x7351 0x9eaa +0x7352 0x9ead +0x7353 0x9761 +0x7354 0x9ecc +0x7355 0x9ece +0x7356 0x9ecf +0x7357 0x9ed0 +0x7358 0x9ed4 +0x7359 0x9edc +0x735a 0x9ede +0x735b 0x9edd +0x735c 0x9ee0 +0x735d 0x9ee5 +0x735e 0x9ee8 +0x735f 0x9eef +0x7360 0x9ef4 +0x7361 0x9ef6 +0x7362 0x9ef7 +0x7363 0x9ef9 +0x7364 0x9efb +0x7365 0x9efc +0x7366 0x9efd +0x7367 0x9f07 +0x7368 0x9f08 +0x7369 0x76b7 +0x736a 0x9f15 +0x736b 0x9f21 +0x736c 0x9f2c +0x736d 0x9f3e +0x736e 0x9f4a +0x736f 0x9f52 +0x7370 0x9f54 +0x7371 0x9f63 +0x7372 0x9f5f +0x7373 0x9f60 +0x7374 0x9f61 +0x7375 0x9f66 +0x7376 0x9f67 +0x7377 0x9f6c +0x7378 0x9f6a +0x7379 0x9f77 +0x737a 0x9f72 +0x737b 0x9f76 +0x737c 0x9f95 +0x737d 0x9f9c +0x737e 0x9fa0 +0x7421 0x582f +0x7422 0x69c7 +0x7423 0x9059 +0x7424 0x7464 +0x7425 0x51dc +0x7426 0x7199 diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0208_MS5022X.c2b b/jdk/make/tools/CharsetMapping/JIS_X_0208_MS5022X.c2b new file mode 100644 index 00000000000..ff7aa0846df --- /dev/null +++ b/jdk/make/tools/CharsetMapping/JIS_X_0208_MS5022X.c2b @@ -0,0 +1,73 @@ +# +# The diff of JIS_X_0208_MS5022X_Decoder and +# JIS_X_0208_MS5022X_Encoder +# +0x215d 0xff0d +0x2142 0x2225 +0x2123 0xff61 +0x2156 0xff62 +0x2157 0xff63 +0x2122 0xff64 +0x2126 0xff65 +0x2572 0xff66 +0x2521 0xff67 +0x2523 0xff68 +0x2525 0xff69 +0x2527 0xff6a +0x2529 0xff6b +0x2563 0xff6c +0x2565 0xff6d +0x2567 0xff6e +0x2543 0xff6f +0x213c 0xff70 +0x2522 0xff71 +0x2524 0xff72 +0x2526 0xff73 +0x2528 0xff74 +0x252a 0xff75 +0x252b 0xff76 +0x252d 0xff77 +0x252f 0xff78 +0x2531 0xff79 +0x2533 0xff7a +0x2535 0xff7b +0x2537 0xff7c +0x2539 0xff7d +0x253b 0xff7e +0x253d 0xff7f +0x253f 0xff80 +0x2541 0xff81 +0x2544 0xff82 +0x2546 0xff83 +0x2548 0xff84 +0x254a 0xff85 +0x254b 0xff86 +0x254c 0xff87 +0x254d 0xff88 +0x254e 0xff89 +0x254f 0xff8a +0x2552 0xff8b +0x2555 0xff8c +0x2558 0xff8d +0x255b 0xff8e +0x255e 0xff8f +0x255f 0xff90 +0x2560 0xff91 +0x2561 0xff92 +0x2562 0xff93 +0x2564 0xff94 +0x2566 0xff95 +0x2568 0xff96 +0x2569 0xff97 +0x256a 0xff98 +0x256b 0xff99 +0x256c 0xff9a +0x256d 0xff9b +0x256f 0xff9c +0x2573 0xff9d +0x212b 0xff9e +0x212c 0xff9f +0x2171 0xffe0 +0x2172 0xffe1 +0x224c 0xffe2 + diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0208_MS5022X.map b/jdk/make/tools/CharsetMapping/JIS_X_0208_MS5022X.map new file mode 100644 index 00000000000..8e509b5ebbc --- /dev/null +++ b/jdk/make/tools/CharsetMapping/JIS_X_0208_MS5022X.map @@ -0,0 +1,7893 @@ +0x2121 0x3000 +0x2122 0x3001 +0x2123 0x3002 +0x2124 0xff0c +0x2125 0xff0e +0x2126 0x30fb +0x2127 0xff1a +0x2128 0xff1b +0x2129 0xff1f +0x212a 0xff01 +0x212b 0x309b +0x212c 0x309c +0x212d 0x00b4 +0x212e 0xff40 +0x212f 0x00a8 +0x2130 0xff3e +0x2131 0xffe3 +0x2132 0xff3f +0x2133 0x30fd +0x2134 0x30fe +0x2135 0x309d +0x2136 0x309e +0x2137 0x3003 +0x2138 0x4edd +0x2139 0x3005 +0x213a 0x3006 +0x213b 0x3007 +0x213c 0x30fc +0x213d 0x2015 +0x213e 0x2010 +0x213f 0xff0f +0x2140 0xff3c +0x2141 0x301c +0x2142 0x2016 +0x2143 0xff5c +0x2144 0x2026 +0x2145 0x2025 +0x2146 0x2018 +0x2147 0x2019 +0x2148 0x201c +0x2149 0x201d +0x214a 0xff08 +0x214b 0xff09 +0x214c 0x3014 +0x214d 0x3015 +0x214e 0xff3b +0x214f 0xff3d +0x2150 0xff5b +0x2151 0xff5d +0x2152 0x3008 +0x2153 0x3009 +0x2154 0x300a +0x2155 0x300b +0x2156 0x300c +0x2157 0x300d +0x2158 0x300e +0x2159 0x300f +0x215a 0x3010 +0x215b 0x3011 +0x215c 0xff0b +0x215d 0x2212 +0x215e 0x00b1 +0x215f 0x00d7 +0x2160 0x00f7 +0x2161 0xff1d +0x2162 0x2260 +0x2163 0xff1c +0x2164 0xff1e +0x2165 0x2266 +0x2166 0x2267 +0x2167 0x221e +0x2168 0x2234 +0x2169 0x2642 +0x216a 0x2640 +0x216b 0x00b0 +0x216c 0x2032 +0x216d 0x2033 +0x216e 0x2103 +0x216f 0xffe5 +0x2170 0xff04 +0x2171 0x00a2 +0x2172 0x00a3 +0x2173 0xff05 +0x2174 0xff03 +0x2175 0xff06 +0x2176 0xff0a +0x2177 0xff20 +0x2178 0x00a7 +0x2179 0x2606 +0x217a 0x2605 +0x217b 0x25cb +0x217c 0x25cf +0x217d 0x25ce +0x217e 0x25c7 +0x2221 0x25c6 +0x2222 0x25a1 +0x2223 0x25a0 +0x2224 0x25b3 +0x2225 0x25b2 +0x2226 0x25bd +0x2227 0x25bc +0x2228 0x203b +0x2229 0x3012 +0x222a 0x2192 +0x222b 0x2190 +0x222c 0x2191 +0x222d 0x2193 +0x222e 0x3013 +0x223a 0x2208 +0x223b 0x220b +0x223c 0x2286 +0x223d 0x2287 +0x223e 0x2282 +0x223f 0x2283 +0x2240 0x222a +0x2241 0x2229 +0x224a 0x2227 +0x224b 0x2228 +0x224c 0x00ac +0x224d 0x21d2 +0x224e 0x21d4 +0x224f 0x2200 +0x2250 0x2203 +0x225c 0x2220 +0x225d 0x22a5 +0x225e 0x2312 +0x225f 0x2202 +0x2260 0x2207 +0x2261 0x2261 +0x2262 0x2252 +0x2263 0x226a +0x2264 0x226b +0x2265 0x221a +0x2266 0x223d +0x2267 0x221d +0x2268 0x2235 +0x2269 0x222b +0x226a 0x222c +0x2272 0x212b +0x2273 0x2030 +0x2274 0x266f +0x2275 0x266d +0x2276 0x266a +0x2277 0x2020 +0x2278 0x2021 +0x2279 0x00b6 +0x227e 0x25ef +0x2330 0xff10 +0x2331 0xff11 +0x2332 0xff12 +0x2333 0xff13 +0x2334 0xff14 +0x2335 0xff15 +0x2336 0xff16 +0x2337 0xff17 +0x2338 0xff18 +0x2339 0xff19 +0x2341 0xff21 +0x2342 0xff22 +0x2343 0xff23 +0x2344 0xff24 +0x2345 0xff25 +0x2346 0xff26 +0x2347 0xff27 +0x2348 0xff28 +0x2349 0xff29 +0x234a 0xff2a +0x234b 0xff2b +0x234c 0xff2c +0x234d 0xff2d +0x234e 0xff2e +0x234f 0xff2f +0x2350 0xff30 +0x2351 0xff31 +0x2352 0xff32 +0x2353 0xff33 +0x2354 0xff34 +0x2355 0xff35 +0x2356 0xff36 +0x2357 0xff37 +0x2358 0xff38 +0x2359 0xff39 +0x235a 0xff3a +0x2361 0xff41 +0x2362 0xff42 +0x2363 0xff43 +0x2364 0xff44 +0x2365 0xff45 +0x2366 0xff46 +0x2367 0xff47 +0x2368 0xff48 +0x2369 0xff49 +0x236a 0xff4a +0x236b 0xff4b +0x236c 0xff4c +0x236d 0xff4d +0x236e 0xff4e +0x236f 0xff4f +0x2370 0xff50 +0x2371 0xff51 +0x2372 0xff52 +0x2373 0xff53 +0x2374 0xff54 +0x2375 0xff55 +0x2376 0xff56 +0x2377 0xff57 +0x2378 0xff58 +0x2379 0xff59 +0x237a 0xff5a +0x2421 0x3041 +0x2422 0x3042 +0x2423 0x3043 +0x2424 0x3044 +0x2425 0x3045 +0x2426 0x3046 +0x2427 0x3047 +0x2428 0x3048 +0x2429 0x3049 +0x242a 0x304a +0x242b 0x304b +0x242c 0x304c +0x242d 0x304d +0x242e 0x304e +0x242f 0x304f +0x2430 0x3050 +0x2431 0x3051 +0x2432 0x3052 +0x2433 0x3053 +0x2434 0x3054 +0x2435 0x3055 +0x2436 0x3056 +0x2437 0x3057 +0x2438 0x3058 +0x2439 0x3059 +0x243a 0x305a +0x243b 0x305b +0x243c 0x305c +0x243d 0x305d +0x243e 0x305e +0x243f 0x305f +0x2440 0x3060 +0x2441 0x3061 +0x2442 0x3062 +0x2443 0x3063 +0x2444 0x3064 +0x2445 0x3065 +0x2446 0x3066 +0x2447 0x3067 +0x2448 0x3068 +0x2449 0x3069 +0x244a 0x306a +0x244b 0x306b +0x244c 0x306c +0x244d 0x306d +0x244e 0x306e +0x244f 0x306f +0x2450 0x3070 +0x2451 0x3071 +0x2452 0x3072 +0x2453 0x3073 +0x2454 0x3074 +0x2455 0x3075 +0x2456 0x3076 +0x2457 0x3077 +0x2458 0x3078 +0x2459 0x3079 +0x245a 0x307a +0x245b 0x307b +0x245c 0x307c +0x245d 0x307d +0x245e 0x307e +0x245f 0x307f +0x2460 0x3080 +0x2461 0x3081 +0x2462 0x3082 +0x2463 0x3083 +0x2464 0x3084 +0x2465 0x3085 +0x2466 0x3086 +0x2467 0x3087 +0x2468 0x3088 +0x2469 0x3089 +0x246a 0x308a +0x246b 0x308b +0x246c 0x308c +0x246d 0x308d +0x246e 0x308e +0x246f 0x308f +0x2470 0x3090 +0x2471 0x3091 +0x2472 0x3092 +0x2473 0x3093 +0x2521 0x30a1 +0x2522 0x30a2 +0x2523 0x30a3 +0x2524 0x30a4 +0x2525 0x30a5 +0x2526 0x30a6 +0x2527 0x30a7 +0x2528 0x30a8 +0x2529 0x30a9 +0x252a 0x30aa +0x252b 0x30ab +0x252c 0x30ac +0x252d 0x30ad +0x252e 0x30ae +0x252f 0x30af +0x2530 0x30b0 +0x2531 0x30b1 +0x2532 0x30b2 +0x2533 0x30b3 +0x2534 0x30b4 +0x2535 0x30b5 +0x2536 0x30b6 +0x2537 0x30b7 +0x2538 0x30b8 +0x2539 0x30b9 +0x253a 0x30ba +0x253b 0x30bb +0x253c 0x30bc +0x253d 0x30bd +0x253e 0x30be +0x253f 0x30bf +0x2540 0x30c0 +0x2541 0x30c1 +0x2542 0x30c2 +0x2543 0x30c3 +0x2544 0x30c4 +0x2545 0x30c5 +0x2546 0x30c6 +0x2547 0x30c7 +0x2548 0x30c8 +0x2549 0x30c9 +0x254a 0x30ca +0x254b 0x30cb +0x254c 0x30cc +0x254d 0x30cd +0x254e 0x30ce +0x254f 0x30cf +0x2550 0x30d0 +0x2551 0x30d1 +0x2552 0x30d2 +0x2553 0x30d3 +0x2554 0x30d4 +0x2555 0x30d5 +0x2556 0x30d6 +0x2557 0x30d7 +0x2558 0x30d8 +0x2559 0x30d9 +0x255a 0x30da +0x255b 0x30db +0x255c 0x30dc +0x255d 0x30dd +0x255e 0x30de +0x255f 0x30df +0x2560 0x30e0 +0x2561 0x30e1 +0x2562 0x30e2 +0x2563 0x30e3 +0x2564 0x30e4 +0x2565 0x30e5 +0x2566 0x30e6 +0x2567 0x30e7 +0x2568 0x30e8 +0x2569 0x30e9 +0x256a 0x30ea +0x256b 0x30eb +0x256c 0x30ec +0x256d 0x30ed +0x256e 0x30ee +0x256f 0x30ef +0x2570 0x30f0 +0x2571 0x30f1 +0x2572 0x30f2 +0x2573 0x30f3 +0x2574 0x30f4 +0x2575 0x30f5 +0x2576 0x30f6 +0x2621 0x0391 +0x2622 0x0392 +0x2623 0x0393 +0x2624 0x0394 +0x2625 0x0395 +0x2626 0x0396 +0x2627 0x0397 +0x2628 0x0398 +0x2629 0x0399 +0x262a 0x039a +0x262b 0x039b +0x262c 0x039c +0x262d 0x039d +0x262e 0x039e +0x262f 0x039f +0x2630 0x03a0 +0x2631 0x03a1 +0x2632 0x03a3 +0x2633 0x03a4 +0x2634 0x03a5 +0x2635 0x03a6 +0x2636 0x03a7 +0x2637 0x03a8 +0x2638 0x03a9 +0x2641 0x03b1 +0x2642 0x03b2 +0x2643 0x03b3 +0x2644 0x03b4 +0x2645 0x03b5 +0x2646 0x03b6 +0x2647 0x03b7 +0x2648 0x03b8 +0x2649 0x03b9 +0x264a 0x03ba +0x264b 0x03bb +0x264c 0x03bc +0x264d 0x03bd +0x264e 0x03be +0x264f 0x03bf +0x2650 0x03c0 +0x2651 0x03c1 +0x2652 0x03c3 +0x2653 0x03c4 +0x2654 0x03c5 +0x2655 0x03c6 +0x2656 0x03c7 +0x2657 0x03c8 +0x2658 0x03c9 +0x2721 0x0410 +0x2722 0x0411 +0x2723 0x0412 +0x2724 0x0413 +0x2725 0x0414 +0x2726 0x0415 +0x2727 0x0401 +0x2728 0x0416 +0x2729 0x0417 +0x272a 0x0418 +0x272b 0x0419 +0x272c 0x041a +0x272d 0x041b +0x272e 0x041c +0x272f 0x041d +0x2730 0x041e +0x2731 0x041f +0x2732 0x0420 +0x2733 0x0421 +0x2734 0x0422 +0x2735 0x0423 +0x2736 0x0424 +0x2737 0x0425 +0x2738 0x0426 +0x2739 0x0427 +0x273a 0x0428 +0x273b 0x0429 +0x273c 0x042a +0x273d 0x042b +0x273e 0x042c +0x273f 0x042d +0x2740 0x042e +0x2741 0x042f +0x2751 0x0430 +0x2752 0x0431 +0x2753 0x0432 +0x2754 0x0433 +0x2755 0x0434 +0x2756 0x0435 +0x2757 0x0451 +0x2758 0x0436 +0x2759 0x0437 +0x275a 0x0438 +0x275b 0x0439 +0x275c 0x043a +0x275d 0x043b +0x275e 0x043c +0x275f 0x043d +0x2760 0x043e +0x2761 0x043f +0x2762 0x0440 +0x2763 0x0441 +0x2764 0x0442 +0x2765 0x0443 +0x2766 0x0444 +0x2767 0x0445 +0x2768 0x0446 +0x2769 0x0447 +0x276a 0x0448 +0x276b 0x0449 +0x276c 0x044a +0x276d 0x044b +0x276e 0x044c +0x276f 0x044d +0x2770 0x044e +0x2771 0x044f +0x2821 0x2500 +0x2822 0x2502 +0x2823 0x250c +0x2824 0x2510 +0x2825 0x2518 +0x2826 0x2514 +0x2827 0x251c +0x2828 0x252c +0x2829 0x2524 +0x282a 0x2534 +0x282b 0x253c +0x282c 0x2501 +0x282d 0x2503 +0x282e 0x250f +0x282f 0x2513 +0x2830 0x251b +0x2831 0x2517 +0x2832 0x2523 +0x2833 0x2533 +0x2834 0x252b +0x2835 0x253b +0x2836 0x254b +0x2837 0x2520 +0x2838 0x252f +0x2839 0x2528 +0x283a 0x2537 +0x283b 0x253f +0x283c 0x251d +0x283d 0x2530 +0x283e 0x2525 +0x283f 0x2538 +0x2840 0x2542 +0x2d21 0x2460 +0x2d22 0x2461 +0x2d23 0x2462 +0x2d24 0x2463 +0x2d25 0x2464 +0x2d26 0x2465 +0x2d27 0x2466 +0x2d28 0x2467 +0x2d29 0x2468 +0x2d2a 0x2469 +0x2d2b 0x246a +0x2d2c 0x246b +0x2d2d 0x246c +0x2d2e 0x246d +0x2d2f 0x246e +0x2d30 0x246f +0x2d31 0x2470 +0x2d32 0x2471 +0x2d33 0x2472 +0x2d34 0x2473 +0x2d35 0x2160 +0x2d36 0x2161 +0x2d37 0x2162 +0x2d38 0x2163 +0x2d39 0x2164 +0x2d3a 0x2165 +0x2d3b 0x2166 +0x2d3c 0x2167 +0x2d3d 0x2168 +0x2d3e 0x2169 +0x2d40 0x3349 +0x2d41 0x3314 +0x2d42 0x3322 +0x2d43 0x334d +0x2d44 0x3318 +0x2d45 0x3327 +0x2d46 0x3303 +0x2d47 0x3336 +0x2d48 0x3351 +0x2d49 0x3357 +0x2d4a 0x330d +0x2d4b 0x3326 +0x2d4c 0x3323 +0x2d4d 0x332b +0x2d4e 0x334a +0x2d4f 0x333b +0x2d50 0x339c +0x2d51 0x339d +0x2d52 0x339e +0x2d53 0x338e +0x2d54 0x338f +0x2d55 0x33c4 +0x2d56 0x33a1 +0x2d5f 0x337b +0x2d60 0x301e +0x2d61 0x301f +0x2d62 0x2116 +0x2d63 0x33cd +0x2d64 0x2121 +0x2d65 0x32a4 +0x2d66 0x32a5 +0x2d67 0x32a6 +0x2d68 0x32a7 +0x2d69 0x32a8 +0x2d6a 0x3231 +0x2d6b 0x3232 +0x2d6c 0x3239 +0x2d6d 0x337e +0x2d6e 0x337d +0x2d6f 0x337c +0x2d73 0x222e +0x2d74 0x2211 +0x2d78 0x221f +0x2d79 0x22bf +0x3021 0x4e9c +0x3022 0x5516 +0x3023 0x5a03 +0x3024 0x963f +0x3025 0x54c0 +0x3026 0x611b +0x3027 0x6328 +0x3028 0x59f6 +0x3029 0x9022 +0x302a 0x8475 +0x302b 0x831c +0x302c 0x7a50 +0x302d 0x60aa +0x302e 0x63e1 +0x302f 0x6e25 +0x3030 0x65ed +0x3031 0x8466 +0x3032 0x82a6 +0x3033 0x9bf5 +0x3034 0x6893 +0x3035 0x5727 +0x3036 0x65a1 +0x3037 0x6271 +0x3038 0x5b9b +0x3039 0x59d0 +0x303a 0x867b +0x303b 0x98f4 +0x303c 0x7d62 +0x303d 0x7dbe +0x303e 0x9b8e +0x303f 0x6216 +0x3040 0x7c9f +0x3041 0x88b7 +0x3042 0x5b89 +0x3043 0x5eb5 +0x3044 0x6309 +0x3045 0x6697 +0x3046 0x6848 +0x3047 0x95c7 +0x3048 0x978d +0x3049 0x674f +0x304a 0x4ee5 +0x304b 0x4f0a +0x304c 0x4f4d +0x304d 0x4f9d +0x304e 0x5049 +0x304f 0x56f2 +0x3050 0x5937 +0x3051 0x59d4 +0x3052 0x5a01 +0x3053 0x5c09 +0x3054 0x60df +0x3055 0x610f +0x3056 0x6170 +0x3057 0x6613 +0x3058 0x6905 +0x3059 0x70ba +0x305a 0x754f +0x305b 0x7570 +0x305c 0x79fb +0x305d 0x7dad +0x305e 0x7def +0x305f 0x80c3 +0x3060 0x840e +0x3061 0x8863 +0x3062 0x8b02 +0x3063 0x9055 +0x3064 0x907a +0x3065 0x533b +0x3066 0x4e95 +0x3067 0x4ea5 +0x3068 0x57df +0x3069 0x80b2 +0x306a 0x90c1 +0x306b 0x78ef +0x306c 0x4e00 +0x306d 0x58f1 +0x306e 0x6ea2 +0x306f 0x9038 +0x3070 0x7a32 +0x3071 0x8328 +0x3072 0x828b +0x3073 0x9c2f +0x3074 0x5141 +0x3075 0x5370 +0x3076 0x54bd +0x3077 0x54e1 +0x3078 0x56e0 +0x3079 0x59fb +0x307a 0x5f15 +0x307b 0x98f2 +0x307c 0x6deb +0x307d 0x80e4 +0x307e 0x852d +0x3121 0x9662 +0x3122 0x9670 +0x3123 0x96a0 +0x3124 0x97fb +0x3125 0x540b +0x3126 0x53f3 +0x3127 0x5b87 +0x3128 0x70cf +0x3129 0x7fbd +0x312a 0x8fc2 +0x312b 0x96e8 +0x312c 0x536f +0x312d 0x9d5c +0x312e 0x7aba +0x312f 0x4e11 +0x3130 0x7893 +0x3131 0x81fc +0x3132 0x6e26 +0x3133 0x5618 +0x3134 0x5504 +0x3135 0x6b1d +0x3136 0x851a +0x3137 0x9c3b +0x3138 0x59e5 +0x3139 0x53a9 +0x313a 0x6d66 +0x313b 0x74dc +0x313c 0x958f +0x313d 0x5642 +0x313e 0x4e91 +0x313f 0x904b +0x3140 0x96f2 +0x3141 0x834f +0x3142 0x990c +0x3143 0x53e1 +0x3144 0x55b6 +0x3145 0x5b30 +0x3146 0x5f71 +0x3147 0x6620 +0x3148 0x66f3 +0x3149 0x6804 +0x314a 0x6c38 +0x314b 0x6cf3 +0x314c 0x6d29 +0x314d 0x745b +0x314e 0x76c8 +0x314f 0x7a4e +0x3150 0x9834 +0x3151 0x82f1 +0x3152 0x885b +0x3153 0x8a60 +0x3154 0x92ed +0x3155 0x6db2 +0x3156 0x75ab +0x3157 0x76ca +0x3158 0x99c5 +0x3159 0x60a6 +0x315a 0x8b01 +0x315b 0x8d8a +0x315c 0x95b2 +0x315d 0x698e +0x315e 0x53ad +0x315f 0x5186 +0x3160 0x5712 +0x3161 0x5830 +0x3162 0x5944 +0x3163 0x5bb4 +0x3164 0x5ef6 +0x3165 0x6028 +0x3166 0x63a9 +0x3167 0x63f4 +0x3168 0x6cbf +0x3169 0x6f14 +0x316a 0x708e +0x316b 0x7114 +0x316c 0x7159 +0x316d 0x71d5 +0x316e 0x733f +0x316f 0x7e01 +0x3170 0x8276 +0x3171 0x82d1 +0x3172 0x8597 +0x3173 0x9060 +0x3174 0x925b +0x3175 0x9d1b +0x3176 0x5869 +0x3177 0x65bc +0x3178 0x6c5a +0x3179 0x7525 +0x317a 0x51f9 +0x317b 0x592e +0x317c 0x5965 +0x317d 0x5f80 +0x317e 0x5fdc +0x3221 0x62bc +0x3222 0x65fa +0x3223 0x6a2a +0x3224 0x6b27 +0x3225 0x6bb4 +0x3226 0x738b +0x3227 0x7fc1 +0x3228 0x8956 +0x3229 0x9d2c +0x322a 0x9d0e +0x322b 0x9ec4 +0x322c 0x5ca1 +0x322d 0x6c96 +0x322e 0x837b +0x322f 0x5104 +0x3230 0x5c4b +0x3231 0x61b6 +0x3232 0x81c6 +0x3233 0x6876 +0x3234 0x7261 +0x3235 0x4e59 +0x3236 0x4ffa +0x3237 0x5378 +0x3238 0x6069 +0x3239 0x6e29 +0x323a 0x7a4f +0x323b 0x97f3 +0x323c 0x4e0b +0x323d 0x5316 +0x323e 0x4eee +0x323f 0x4f55 +0x3240 0x4f3d +0x3241 0x4fa1 +0x3242 0x4f73 +0x3243 0x52a0 +0x3244 0x53ef +0x3245 0x5609 +0x3246 0x590f +0x3247 0x5ac1 +0x3248 0x5bb6 +0x3249 0x5be1 +0x324a 0x79d1 +0x324b 0x6687 +0x324c 0x679c +0x324d 0x67b6 +0x324e 0x6b4c +0x324f 0x6cb3 +0x3250 0x706b +0x3251 0x73c2 +0x3252 0x798d +0x3253 0x79be +0x3254 0x7a3c +0x3255 0x7b87 +0x3256 0x82b1 +0x3257 0x82db +0x3258 0x8304 +0x3259 0x8377 +0x325a 0x83ef +0x325b 0x83d3 +0x325c 0x8766 +0x325d 0x8ab2 +0x325e 0x5629 +0x325f 0x8ca8 +0x3260 0x8fe6 +0x3261 0x904e +0x3262 0x971e +0x3263 0x868a +0x3264 0x4fc4 +0x3265 0x5ce8 +0x3266 0x6211 +0x3267 0x7259 +0x3268 0x753b +0x3269 0x81e5 +0x326a 0x82bd +0x326b 0x86fe +0x326c 0x8cc0 +0x326d 0x96c5 +0x326e 0x9913 +0x326f 0x99d5 +0x3270 0x4ecb +0x3271 0x4f1a +0x3272 0x89e3 +0x3273 0x56de +0x3274 0x584a +0x3275 0x58ca +0x3276 0x5efb +0x3277 0x5feb +0x3278 0x602a +0x3279 0x6094 +0x327a 0x6062 +0x327b 0x61d0 +0x327c 0x6212 +0x327d 0x62d0 +0x327e 0x6539 +0x3321 0x9b41 +0x3322 0x6666 +0x3323 0x68b0 +0x3324 0x6d77 +0x3325 0x7070 +0x3326 0x754c +0x3327 0x7686 +0x3328 0x7d75 +0x3329 0x82a5 +0x332a 0x87f9 +0x332b 0x958b +0x332c 0x968e +0x332d 0x8c9d +0x332e 0x51f1 +0x332f 0x52be +0x3330 0x5916 +0x3331 0x54b3 +0x3332 0x5bb3 +0x3333 0x5d16 +0x3334 0x6168 +0x3335 0x6982 +0x3336 0x6daf +0x3337 0x788d +0x3338 0x84cb +0x3339 0x8857 +0x333a 0x8a72 +0x333b 0x93a7 +0x333c 0x9ab8 +0x333d 0x6d6c +0x333e 0x99a8 +0x333f 0x86d9 +0x3340 0x57a3 +0x3341 0x67ff +0x3342 0x86ce +0x3343 0x920e +0x3344 0x5283 +0x3345 0x5687 +0x3346 0x5404 +0x3347 0x5ed3 +0x3348 0x62e1 +0x3349 0x64b9 +0x334a 0x683c +0x334b 0x6838 +0x334c 0x6bbb +0x334d 0x7372 +0x334e 0x78ba +0x334f 0x7a6b +0x3350 0x899a +0x3351 0x89d2 +0x3352 0x8d6b +0x3353 0x8f03 +0x3354 0x90ed +0x3355 0x95a3 +0x3356 0x9694 +0x3357 0x9769 +0x3358 0x5b66 +0x3359 0x5cb3 +0x335a 0x697d +0x335b 0x984d +0x335c 0x984e +0x335d 0x639b +0x335e 0x7b20 +0x335f 0x6a2b +0x3360 0x6a7f +0x3361 0x68b6 +0x3362 0x9c0d +0x3363 0x6f5f +0x3364 0x5272 +0x3365 0x559d +0x3366 0x6070 +0x3367 0x62ec +0x3368 0x6d3b +0x3369 0x6e07 +0x336a 0x6ed1 +0x336b 0x845b +0x336c 0x8910 +0x336d 0x8f44 +0x336e 0x4e14 +0x336f 0x9c39 +0x3370 0x53f6 +0x3371 0x691b +0x3372 0x6a3a +0x3373 0x9784 +0x3374 0x682a +0x3375 0x515c +0x3376 0x7ac3 +0x3377 0x84b2 +0x3378 0x91dc +0x3379 0x938c +0x337a 0x565b +0x337b 0x9d28 +0x337c 0x6822 +0x337d 0x8305 +0x337e 0x8431 +0x3421 0x7ca5 +0x3422 0x5208 +0x3423 0x82c5 +0x3424 0x74e6 +0x3425 0x4e7e +0x3426 0x4f83 +0x3427 0x51a0 +0x3428 0x5bd2 +0x3429 0x520a +0x342a 0x52d8 +0x342b 0x52e7 +0x342c 0x5dfb +0x342d 0x559a +0x342e 0x582a +0x342f 0x59e6 +0x3430 0x5b8c +0x3431 0x5b98 +0x3432 0x5bdb +0x3433 0x5e72 +0x3434 0x5e79 +0x3435 0x60a3 +0x3436 0x611f +0x3437 0x6163 +0x3438 0x61be +0x3439 0x63db +0x343a 0x6562 +0x343b 0x67d1 +0x343c 0x6853 +0x343d 0x68fa +0x343e 0x6b3e +0x343f 0x6b53 +0x3440 0x6c57 +0x3441 0x6f22 +0x3442 0x6f97 +0x3443 0x6f45 +0x3444 0x74b0 +0x3445 0x7518 +0x3446 0x76e3 +0x3447 0x770b +0x3448 0x7aff +0x3449 0x7ba1 +0x344a 0x7c21 +0x344b 0x7de9 +0x344c 0x7f36 +0x344d 0x7ff0 +0x344e 0x809d +0x344f 0x8266 +0x3450 0x839e +0x3451 0x89b3 +0x3452 0x8acc +0x3453 0x8cab +0x3454 0x9084 +0x3455 0x9451 +0x3456 0x9593 +0x3457 0x9591 +0x3458 0x95a2 +0x3459 0x9665 +0x345a 0x97d3 +0x345b 0x9928 +0x345c 0x8218 +0x345d 0x4e38 +0x345e 0x542b +0x345f 0x5cb8 +0x3460 0x5dcc +0x3461 0x73a9 +0x3462 0x764c +0x3463 0x773c +0x3464 0x5ca9 +0x3465 0x7feb +0x3466 0x8d0b +0x3467 0x96c1 +0x3468 0x9811 +0x3469 0x9854 +0x346a 0x9858 +0x346b 0x4f01 +0x346c 0x4f0e +0x346d 0x5371 +0x346e 0x559c +0x346f 0x5668 +0x3470 0x57fa +0x3471 0x5947 +0x3472 0x5b09 +0x3473 0x5bc4 +0x3474 0x5c90 +0x3475 0x5e0c +0x3476 0x5e7e +0x3477 0x5fcc +0x3478 0x63ee +0x3479 0x673a +0x347a 0x65d7 +0x347b 0x65e2 +0x347c 0x671f +0x347d 0x68cb +0x347e 0x68c4 +0x3521 0x6a5f +0x3522 0x5e30 +0x3523 0x6bc5 +0x3524 0x6c17 +0x3525 0x6c7d +0x3526 0x757f +0x3527 0x7948 +0x3528 0x5b63 +0x3529 0x7a00 +0x352a 0x7d00 +0x352b 0x5fbd +0x352c 0x898f +0x352d 0x8a18 +0x352e 0x8cb4 +0x352f 0x8d77 +0x3530 0x8ecc +0x3531 0x8f1d +0x3532 0x98e2 +0x3533 0x9a0e +0x3534 0x9b3c +0x3535 0x4e80 +0x3536 0x507d +0x3537 0x5100 +0x3538 0x5993 +0x3539 0x5b9c +0x353a 0x622f +0x353b 0x6280 +0x353c 0x64ec +0x353d 0x6b3a +0x353e 0x72a0 +0x353f 0x7591 +0x3540 0x7947 +0x3541 0x7fa9 +0x3542 0x87fb +0x3543 0x8abc +0x3544 0x8b70 +0x3545 0x63ac +0x3546 0x83ca +0x3547 0x97a0 +0x3548 0x5409 +0x3549 0x5403 +0x354a 0x55ab +0x354b 0x6854 +0x354c 0x6a58 +0x354d 0x8a70 +0x354e 0x7827 +0x354f 0x6775 +0x3550 0x9ecd +0x3551 0x5374 +0x3552 0x5ba2 +0x3553 0x811a +0x3554 0x8650 +0x3555 0x9006 +0x3556 0x4e18 +0x3557 0x4e45 +0x3558 0x4ec7 +0x3559 0x4f11 +0x355a 0x53ca +0x355b 0x5438 +0x355c 0x5bae +0x355d 0x5f13 +0x355e 0x6025 +0x355f 0x6551 +0x3560 0x673d +0x3561 0x6c42 +0x3562 0x6c72 +0x3563 0x6ce3 +0x3564 0x7078 +0x3565 0x7403 +0x3566 0x7a76 +0x3567 0x7aae +0x3568 0x7b08 +0x3569 0x7d1a +0x356a 0x7cfe +0x356b 0x7d66 +0x356c 0x65e7 +0x356d 0x725b +0x356e 0x53bb +0x356f 0x5c45 +0x3570 0x5de8 +0x3571 0x62d2 +0x3572 0x62e0 +0x3573 0x6319 +0x3574 0x6e20 +0x3575 0x865a +0x3576 0x8a31 +0x3577 0x8ddd +0x3578 0x92f8 +0x3579 0x6f01 +0x357a 0x79a6 +0x357b 0x9b5a +0x357c 0x4ea8 +0x357d 0x4eab +0x357e 0x4eac +0x3621 0x4f9b +0x3622 0x4fa0 +0x3623 0x50d1 +0x3624 0x5147 +0x3625 0x7af6 +0x3626 0x5171 +0x3627 0x51f6 +0x3628 0x5354 +0x3629 0x5321 +0x362a 0x537f +0x362b 0x53eb +0x362c 0x55ac +0x362d 0x5883 +0x362e 0x5ce1 +0x362f 0x5f37 +0x3630 0x5f4a +0x3631 0x602f +0x3632 0x6050 +0x3633 0x606d +0x3634 0x631f +0x3635 0x6559 +0x3636 0x6a4b +0x3637 0x6cc1 +0x3638 0x72c2 +0x3639 0x72ed +0x363a 0x77ef +0x363b 0x80f8 +0x363c 0x8105 +0x363d 0x8208 +0x363e 0x854e +0x363f 0x90f7 +0x3640 0x93e1 +0x3641 0x97ff +0x3642 0x9957 +0x3643 0x9a5a +0x3644 0x4ef0 +0x3645 0x51dd +0x3646 0x5c2d +0x3647 0x6681 +0x3648 0x696d +0x3649 0x5c40 +0x364a 0x66f2 +0x364b 0x6975 +0x364c 0x7389 +0x364d 0x6850 +0x364e 0x7c81 +0x364f 0x50c5 +0x3650 0x52e4 +0x3651 0x5747 +0x3652 0x5dfe +0x3653 0x9326 +0x3654 0x65a4 +0x3655 0x6b23 +0x3656 0x6b3d +0x3657 0x7434 +0x3658 0x7981 +0x3659 0x79bd +0x365a 0x7b4b +0x365b 0x7dca +0x365c 0x82b9 +0x365d 0x83cc +0x365e 0x887f +0x365f 0x895f +0x3660 0x8b39 +0x3661 0x8fd1 +0x3662 0x91d1 +0x3663 0x541f +0x3664 0x9280 +0x3665 0x4e5d +0x3666 0x5036 +0x3667 0x53e5 +0x3668 0x533a +0x3669 0x72d7 +0x366a 0x7396 +0x366b 0x77e9 +0x366c 0x82e6 +0x366d 0x8eaf +0x366e 0x99c6 +0x366f 0x99c8 +0x3670 0x99d2 +0x3671 0x5177 +0x3672 0x611a +0x3673 0x865e +0x3674 0x55b0 +0x3675 0x7a7a +0x3676 0x5076 +0x3677 0x5bd3 +0x3678 0x9047 +0x3679 0x9685 +0x367a 0x4e32 +0x367b 0x6adb +0x367c 0x91e7 +0x367d 0x5c51 +0x367e 0x5c48 +0x3721 0x6398 +0x3722 0x7a9f +0x3723 0x6c93 +0x3724 0x9774 +0x3725 0x8f61 +0x3726 0x7aaa +0x3727 0x718a +0x3728 0x9688 +0x3729 0x7c82 +0x372a 0x6817 +0x372b 0x7e70 +0x372c 0x6851 +0x372d 0x936c +0x372e 0x52f2 +0x372f 0x541b +0x3730 0x85ab +0x3731 0x8a13 +0x3732 0x7fa4 +0x3733 0x8ecd +0x3734 0x90e1 +0x3735 0x5366 +0x3736 0x8888 +0x3737 0x7941 +0x3738 0x4fc2 +0x3739 0x50be +0x373a 0x5211 +0x373b 0x5144 +0x373c 0x5553 +0x373d 0x572d +0x373e 0x73ea +0x373f 0x578b +0x3740 0x5951 +0x3741 0x5f62 +0x3742 0x5f84 +0x3743 0x6075 +0x3744 0x6176 +0x3745 0x6167 +0x3746 0x61a9 +0x3747 0x63b2 +0x3748 0x643a +0x3749 0x656c +0x374a 0x666f +0x374b 0x6842 +0x374c 0x6e13 +0x374d 0x7566 +0x374e 0x7a3d +0x374f 0x7cfb +0x3750 0x7d4c +0x3751 0x7d99 +0x3752 0x7e4b +0x3753 0x7f6b +0x3754 0x830e +0x3755 0x834a +0x3756 0x86cd +0x3757 0x8a08 +0x3758 0x8a63 +0x3759 0x8b66 +0x375a 0x8efd +0x375b 0x981a +0x375c 0x9d8f +0x375d 0x82b8 +0x375e 0x8fce +0x375f 0x9be8 +0x3760 0x5287 +0x3761 0x621f +0x3762 0x6483 +0x3763 0x6fc0 +0x3764 0x9699 +0x3765 0x6841 +0x3766 0x5091 +0x3767 0x6b20 +0x3768 0x6c7a +0x3769 0x6f54 +0x376a 0x7a74 +0x376b 0x7d50 +0x376c 0x8840 +0x376d 0x8a23 +0x376e 0x6708 +0x376f 0x4ef6 +0x3770 0x5039 +0x3771 0x5026 +0x3772 0x5065 +0x3773 0x517c +0x3774 0x5238 +0x3775 0x5263 +0x3776 0x55a7 +0x3777 0x570f +0x3778 0x5805 +0x3779 0x5acc +0x377a 0x5efa +0x377b 0x61b2 +0x377c 0x61f8 +0x377d 0x62f3 +0x377e 0x6372 +0x3821 0x691c +0x3822 0x6a29 +0x3823 0x727d +0x3824 0x72ac +0x3825 0x732e +0x3826 0x7814 +0x3827 0x786f +0x3828 0x7d79 +0x3829 0x770c +0x382a 0x80a9 +0x382b 0x898b +0x382c 0x8b19 +0x382d 0x8ce2 +0x382e 0x8ed2 +0x382f 0x9063 +0x3830 0x9375 +0x3831 0x967a +0x3832 0x9855 +0x3833 0x9a13 +0x3834 0x9e78 +0x3835 0x5143 +0x3836 0x539f +0x3837 0x53b3 +0x3838 0x5e7b +0x3839 0x5f26 +0x383a 0x6e1b +0x383b 0x6e90 +0x383c 0x7384 +0x383d 0x73fe +0x383e 0x7d43 +0x383f 0x8237 +0x3840 0x8a00 +0x3841 0x8afa +0x3842 0x9650 +0x3843 0x4e4e +0x3844 0x500b +0x3845 0x53e4 +0x3846 0x547c +0x3847 0x56fa +0x3848 0x59d1 +0x3849 0x5b64 +0x384a 0x5df1 +0x384b 0x5eab +0x384c 0x5f27 +0x384d 0x6238 +0x384e 0x6545 +0x384f 0x67af +0x3850 0x6e56 +0x3851 0x72d0 +0x3852 0x7cca +0x3853 0x88b4 +0x3854 0x80a1 +0x3855 0x80e1 +0x3856 0x83f0 +0x3857 0x864e +0x3858 0x8a87 +0x3859 0x8de8 +0x385a 0x9237 +0x385b 0x96c7 +0x385c 0x9867 +0x385d 0x9f13 +0x385e 0x4e94 +0x385f 0x4e92 +0x3860 0x4f0d +0x3861 0x5348 +0x3862 0x5449 +0x3863 0x543e +0x3864 0x5a2f +0x3865 0x5f8c +0x3866 0x5fa1 +0x3867 0x609f +0x3868 0x68a7 +0x3869 0x6a8e +0x386a 0x745a +0x386b 0x7881 +0x386c 0x8a9e +0x386d 0x8aa4 +0x386e 0x8b77 +0x386f 0x9190 +0x3870 0x4e5e +0x3871 0x9bc9 +0x3872 0x4ea4 +0x3873 0x4f7c +0x3874 0x4faf +0x3875 0x5019 +0x3876 0x5016 +0x3877 0x5149 +0x3878 0x516c +0x3879 0x529f +0x387a 0x52b9 +0x387b 0x52fe +0x387c 0x539a +0x387d 0x53e3 +0x387e 0x5411 +0x3921 0x540e +0x3922 0x5589 +0x3923 0x5751 +0x3924 0x57a2 +0x3925 0x597d +0x3926 0x5b54 +0x3927 0x5b5d +0x3928 0x5b8f +0x3929 0x5de5 +0x392a 0x5de7 +0x392b 0x5df7 +0x392c 0x5e78 +0x392d 0x5e83 +0x392e 0x5e9a +0x392f 0x5eb7 +0x3930 0x5f18 +0x3931 0x6052 +0x3932 0x614c +0x3933 0x6297 +0x3934 0x62d8 +0x3935 0x63a7 +0x3936 0x653b +0x3937 0x6602 +0x3938 0x6643 +0x3939 0x66f4 +0x393a 0x676d +0x393b 0x6821 +0x393c 0x6897 +0x393d 0x69cb +0x393e 0x6c5f +0x393f 0x6d2a +0x3940 0x6d69 +0x3941 0x6e2f +0x3942 0x6e9d +0x3943 0x7532 +0x3944 0x7687 +0x3945 0x786c +0x3946 0x7a3f +0x3947 0x7ce0 +0x3948 0x7d05 +0x3949 0x7d18 +0x394a 0x7d5e +0x394b 0x7db1 +0x394c 0x8015 +0x394d 0x8003 +0x394e 0x80af +0x394f 0x80b1 +0x3950 0x8154 +0x3951 0x818f +0x3952 0x822a +0x3953 0x8352 +0x3954 0x884c +0x3955 0x8861 +0x3956 0x8b1b +0x3957 0x8ca2 +0x3958 0x8cfc +0x3959 0x90ca +0x395a 0x9175 +0x395b 0x9271 +0x395c 0x783f +0x395d 0x92fc +0x395e 0x95a4 +0x395f 0x964d +0x3960 0x9805 +0x3961 0x9999 +0x3962 0x9ad8 +0x3963 0x9d3b +0x3964 0x525b +0x3965 0x52ab +0x3966 0x53f7 +0x3967 0x5408 +0x3968 0x58d5 +0x3969 0x62f7 +0x396a 0x6fe0 +0x396b 0x8c6a +0x396c 0x8f5f +0x396d 0x9eb9 +0x396e 0x514b +0x396f 0x523b +0x3970 0x544a +0x3971 0x56fd +0x3972 0x7a40 +0x3973 0x9177 +0x3974 0x9d60 +0x3975 0x9ed2 +0x3976 0x7344 +0x3977 0x6f09 +0x3978 0x8170 +0x3979 0x7511 +0x397a 0x5ffd +0x397b 0x60da +0x397c 0x9aa8 +0x397d 0x72db +0x397e 0x8fbc +0x3a21 0x6b64 +0x3a22 0x9803 +0x3a23 0x4eca +0x3a24 0x56f0 +0x3a25 0x5764 +0x3a26 0x58be +0x3a27 0x5a5a +0x3a28 0x6068 +0x3a29 0x61c7 +0x3a2a 0x660f +0x3a2b 0x6606 +0x3a2c 0x6839 +0x3a2d 0x68b1 +0x3a2e 0x6df7 +0x3a2f 0x75d5 +0x3a30 0x7d3a +0x3a31 0x826e +0x3a32 0x9b42 +0x3a33 0x4e9b +0x3a34 0x4f50 +0x3a35 0x53c9 +0x3a36 0x5506 +0x3a37 0x5d6f +0x3a38 0x5de6 +0x3a39 0x5dee +0x3a3a 0x67fb +0x3a3b 0x6c99 +0x3a3c 0x7473 +0x3a3d 0x7802 +0x3a3e 0x8a50 +0x3a3f 0x9396 +0x3a40 0x88df +0x3a41 0x5750 +0x3a42 0x5ea7 +0x3a43 0x632b +0x3a44 0x50b5 +0x3a45 0x50ac +0x3a46 0x518d +0x3a47 0x6700 +0x3a48 0x54c9 +0x3a49 0x585e +0x3a4a 0x59bb +0x3a4b 0x5bb0 +0x3a4c 0x5f69 +0x3a4d 0x624d +0x3a4e 0x63a1 +0x3a4f 0x683d +0x3a50 0x6b73 +0x3a51 0x6e08 +0x3a52 0x707d +0x3a53 0x91c7 +0x3a54 0x7280 +0x3a55 0x7815 +0x3a56 0x7826 +0x3a57 0x796d +0x3a58 0x658e +0x3a59 0x7d30 +0x3a5a 0x83dc +0x3a5b 0x88c1 +0x3a5c 0x8f09 +0x3a5d 0x969b +0x3a5e 0x5264 +0x3a5f 0x5728 +0x3a60 0x6750 +0x3a61 0x7f6a +0x3a62 0x8ca1 +0x3a63 0x51b4 +0x3a64 0x5742 +0x3a65 0x962a +0x3a66 0x583a +0x3a67 0x698a +0x3a68 0x80b4 +0x3a69 0x54b2 +0x3a6a 0x5d0e +0x3a6b 0x57fc +0x3a6c 0x7895 +0x3a6d 0x9dfa +0x3a6e 0x4f5c +0x3a6f 0x524a +0x3a70 0x548b +0x3a71 0x643e +0x3a72 0x6628 +0x3a73 0x6714 +0x3a74 0x67f5 +0x3a75 0x7a84 +0x3a76 0x7b56 +0x3a77 0x7d22 +0x3a78 0x932f +0x3a79 0x685c +0x3a7a 0x9bad +0x3a7b 0x7b39 +0x3a7c 0x5319 +0x3a7d 0x518a +0x3a7e 0x5237 +0x3b21 0x5bdf +0x3b22 0x62f6 +0x3b23 0x64ae +0x3b24 0x64e6 +0x3b25 0x672d +0x3b26 0x6bba +0x3b27 0x85a9 +0x3b28 0x96d1 +0x3b29 0x7690 +0x3b2a 0x9bd6 +0x3b2b 0x634c +0x3b2c 0x9306 +0x3b2d 0x9bab +0x3b2e 0x76bf +0x3b2f 0x6652 +0x3b30 0x4e09 +0x3b31 0x5098 +0x3b32 0x53c2 +0x3b33 0x5c71 +0x3b34 0x60e8 +0x3b35 0x6492 +0x3b36 0x6563 +0x3b37 0x685f +0x3b38 0x71e6 +0x3b39 0x73ca +0x3b3a 0x7523 +0x3b3b 0x7b97 +0x3b3c 0x7e82 +0x3b3d 0x8695 +0x3b3e 0x8b83 +0x3b3f 0x8cdb +0x3b40 0x9178 +0x3b41 0x9910 +0x3b42 0x65ac +0x3b43 0x66ab +0x3b44 0x6b8b +0x3b45 0x4ed5 +0x3b46 0x4ed4 +0x3b47 0x4f3a +0x3b48 0x4f7f +0x3b49 0x523a +0x3b4a 0x53f8 +0x3b4b 0x53f2 +0x3b4c 0x55e3 +0x3b4d 0x56db +0x3b4e 0x58eb +0x3b4f 0x59cb +0x3b50 0x59c9 +0x3b51 0x59ff +0x3b52 0x5b50 +0x3b53 0x5c4d +0x3b54 0x5e02 +0x3b55 0x5e2b +0x3b56 0x5fd7 +0x3b57 0x601d +0x3b58 0x6307 +0x3b59 0x652f +0x3b5a 0x5b5c +0x3b5b 0x65af +0x3b5c 0x65bd +0x3b5d 0x65e8 +0x3b5e 0x679d +0x3b5f 0x6b62 +0x3b60 0x6b7b +0x3b61 0x6c0f +0x3b62 0x7345 +0x3b63 0x7949 +0x3b64 0x79c1 +0x3b65 0x7cf8 +0x3b66 0x7d19 +0x3b67 0x7d2b +0x3b68 0x80a2 +0x3b69 0x8102 +0x3b6a 0x81f3 +0x3b6b 0x8996 +0x3b6c 0x8a5e +0x3b6d 0x8a69 +0x3b6e 0x8a66 +0x3b6f 0x8a8c +0x3b70 0x8aee +0x3b71 0x8cc7 +0x3b72 0x8cdc +0x3b73 0x96cc +0x3b74 0x98fc +0x3b75 0x6b6f +0x3b76 0x4e8b +0x3b77 0x4f3c +0x3b78 0x4f8d +0x3b79 0x5150 +0x3b7a 0x5b57 +0x3b7b 0x5bfa +0x3b7c 0x6148 +0x3b7d 0x6301 +0x3b7e 0x6642 +0x3c21 0x6b21 +0x3c22 0x6ecb +0x3c23 0x6cbb +0x3c24 0x723e +0x3c25 0x74bd +0x3c26 0x75d4 +0x3c27 0x78c1 +0x3c28 0x793a +0x3c29 0x800c +0x3c2a 0x8033 +0x3c2b 0x81ea +0x3c2c 0x8494 +0x3c2d 0x8f9e +0x3c2e 0x6c50 +0x3c2f 0x9e7f +0x3c30 0x5f0f +0x3c31 0x8b58 +0x3c32 0x9d2b +0x3c33 0x7afa +0x3c34 0x8ef8 +0x3c35 0x5b8d +0x3c36 0x96eb +0x3c37 0x4e03 +0x3c38 0x53f1 +0x3c39 0x57f7 +0x3c3a 0x5931 +0x3c3b 0x5ac9 +0x3c3c 0x5ba4 +0x3c3d 0x6089 +0x3c3e 0x6e7f +0x3c3f 0x6f06 +0x3c40 0x75be +0x3c41 0x8cea +0x3c42 0x5b9f +0x3c43 0x8500 +0x3c44 0x7be0 +0x3c45 0x5072 +0x3c46 0x67f4 +0x3c47 0x829d +0x3c48 0x5c61 +0x3c49 0x854a +0x3c4a 0x7e1e +0x3c4b 0x820e +0x3c4c 0x5199 +0x3c4d 0x5c04 +0x3c4e 0x6368 +0x3c4f 0x8d66 +0x3c50 0x659c +0x3c51 0x716e +0x3c52 0x793e +0x3c53 0x7d17 +0x3c54 0x8005 +0x3c55 0x8b1d +0x3c56 0x8eca +0x3c57 0x906e +0x3c58 0x86c7 +0x3c59 0x90aa +0x3c5a 0x501f +0x3c5b 0x52fa +0x3c5c 0x5c3a +0x3c5d 0x6753 +0x3c5e 0x707c +0x3c5f 0x7235 +0x3c60 0x914c +0x3c61 0x91c8 +0x3c62 0x932b +0x3c63 0x82e5 +0x3c64 0x5bc2 +0x3c65 0x5f31 +0x3c66 0x60f9 +0x3c67 0x4e3b +0x3c68 0x53d6 +0x3c69 0x5b88 +0x3c6a 0x624b +0x3c6b 0x6731 +0x3c6c 0x6b8a +0x3c6d 0x72e9 +0x3c6e 0x73e0 +0x3c6f 0x7a2e +0x3c70 0x816b +0x3c71 0x8da3 +0x3c72 0x9152 +0x3c73 0x9996 +0x3c74 0x5112 +0x3c75 0x53d7 +0x3c76 0x546a +0x3c77 0x5bff +0x3c78 0x6388 +0x3c79 0x6a39 +0x3c7a 0x7dac +0x3c7b 0x9700 +0x3c7c 0x56da +0x3c7d 0x53ce +0x3c7e 0x5468 +0x3d21 0x5b97 +0x3d22 0x5c31 +0x3d23 0x5dde +0x3d24 0x4fee +0x3d25 0x6101 +0x3d26 0x62fe +0x3d27 0x6d32 +0x3d28 0x79c0 +0x3d29 0x79cb +0x3d2a 0x7d42 +0x3d2b 0x7e4d +0x3d2c 0x7fd2 +0x3d2d 0x81ed +0x3d2e 0x821f +0x3d2f 0x8490 +0x3d30 0x8846 +0x3d31 0x8972 +0x3d32 0x8b90 +0x3d33 0x8e74 +0x3d34 0x8f2f +0x3d35 0x9031 +0x3d36 0x914b +0x3d37 0x916c +0x3d38 0x96c6 +0x3d39 0x919c +0x3d3a 0x4ec0 +0x3d3b 0x4f4f +0x3d3c 0x5145 +0x3d3d 0x5341 +0x3d3e 0x5f93 +0x3d3f 0x620e +0x3d40 0x67d4 +0x3d41 0x6c41 +0x3d42 0x6e0b +0x3d43 0x7363 +0x3d44 0x7e26 +0x3d45 0x91cd +0x3d46 0x9283 +0x3d47 0x53d4 +0x3d48 0x5919 +0x3d49 0x5bbf +0x3d4a 0x6dd1 +0x3d4b 0x795d +0x3d4c 0x7e2e +0x3d4d 0x7c9b +0x3d4e 0x587e +0x3d4f 0x719f +0x3d50 0x51fa +0x3d51 0x8853 +0x3d52 0x8ff0 +0x3d53 0x4fca +0x3d54 0x5cfb +0x3d55 0x6625 +0x3d56 0x77ac +0x3d57 0x7ae3 +0x3d58 0x821c +0x3d59 0x99ff +0x3d5a 0x51c6 +0x3d5b 0x5faa +0x3d5c 0x65ec +0x3d5d 0x696f +0x3d5e 0x6b89 +0x3d5f 0x6df3 +0x3d60 0x6e96 +0x3d61 0x6f64 +0x3d62 0x76fe +0x3d63 0x7d14 +0x3d64 0x5de1 +0x3d65 0x9075 +0x3d66 0x9187 +0x3d67 0x9806 +0x3d68 0x51e6 +0x3d69 0x521d +0x3d6a 0x6240 +0x3d6b 0x6691 +0x3d6c 0x66d9 +0x3d6d 0x6e1a +0x3d6e 0x5eb6 +0x3d6f 0x7dd2 +0x3d70 0x7f72 +0x3d71 0x66f8 +0x3d72 0x85af +0x3d73 0x85f7 +0x3d74 0x8af8 +0x3d75 0x52a9 +0x3d76 0x53d9 +0x3d77 0x5973 +0x3d78 0x5e8f +0x3d79 0x5f90 +0x3d7a 0x6055 +0x3d7b 0x92e4 +0x3d7c 0x9664 +0x3d7d 0x50b7 +0x3d7e 0x511f +0x3e21 0x52dd +0x3e22 0x5320 +0x3e23 0x5347 +0x3e24 0x53ec +0x3e25 0x54e8 +0x3e26 0x5546 +0x3e27 0x5531 +0x3e28 0x5617 +0x3e29 0x5968 +0x3e2a 0x59be +0x3e2b 0x5a3c +0x3e2c 0x5bb5 +0x3e2d 0x5c06 +0x3e2e 0x5c0f +0x3e2f 0x5c11 +0x3e30 0x5c1a +0x3e31 0x5e84 +0x3e32 0x5e8a +0x3e33 0x5ee0 +0x3e34 0x5f70 +0x3e35 0x627f +0x3e36 0x6284 +0x3e37 0x62db +0x3e38 0x638c +0x3e39 0x6377 +0x3e3a 0x6607 +0x3e3b 0x660c +0x3e3c 0x662d +0x3e3d 0x6676 +0x3e3e 0x677e +0x3e3f 0x68a2 +0x3e40 0x6a1f +0x3e41 0x6a35 +0x3e42 0x6cbc +0x3e43 0x6d88 +0x3e44 0x6e09 +0x3e45 0x6e58 +0x3e46 0x713c +0x3e47 0x7126 +0x3e48 0x7167 +0x3e49 0x75c7 +0x3e4a 0x7701 +0x3e4b 0x785d +0x3e4c 0x7901 +0x3e4d 0x7965 +0x3e4e 0x79f0 +0x3e4f 0x7ae0 +0x3e50 0x7b11 +0x3e51 0x7ca7 +0x3e52 0x7d39 +0x3e53 0x8096 +0x3e54 0x83d6 +0x3e55 0x848b +0x3e56 0x8549 +0x3e57 0x885d +0x3e58 0x88f3 +0x3e59 0x8a1f +0x3e5a 0x8a3c +0x3e5b 0x8a54 +0x3e5c 0x8a73 +0x3e5d 0x8c61 +0x3e5e 0x8cde +0x3e5f 0x91a4 +0x3e60 0x9266 +0x3e61 0x937e +0x3e62 0x9418 +0x3e63 0x969c +0x3e64 0x9798 +0x3e65 0x4e0a +0x3e66 0x4e08 +0x3e67 0x4e1e +0x3e68 0x4e57 +0x3e69 0x5197 +0x3e6a 0x5270 +0x3e6b 0x57ce +0x3e6c 0x5834 +0x3e6d 0x58cc +0x3e6e 0x5b22 +0x3e6f 0x5e38 +0x3e70 0x60c5 +0x3e71 0x64fe +0x3e72 0x6761 +0x3e73 0x6756 +0x3e74 0x6d44 +0x3e75 0x72b6 +0x3e76 0x7573 +0x3e77 0x7a63 +0x3e78 0x84b8 +0x3e79 0x8b72 +0x3e7a 0x91b8 +0x3e7b 0x9320 +0x3e7c 0x5631 +0x3e7d 0x57f4 +0x3e7e 0x98fe +0x3f21 0x62ed +0x3f22 0x690d +0x3f23 0x6b96 +0x3f24 0x71ed +0x3f25 0x7e54 +0x3f26 0x8077 +0x3f27 0x8272 +0x3f28 0x89e6 +0x3f29 0x98df +0x3f2a 0x8755 +0x3f2b 0x8fb1 +0x3f2c 0x5c3b +0x3f2d 0x4f38 +0x3f2e 0x4fe1 +0x3f2f 0x4fb5 +0x3f30 0x5507 +0x3f31 0x5a20 +0x3f32 0x5bdd +0x3f33 0x5be9 +0x3f34 0x5fc3 +0x3f35 0x614e +0x3f36 0x632f +0x3f37 0x65b0 +0x3f38 0x664b +0x3f39 0x68ee +0x3f3a 0x699b +0x3f3b 0x6d78 +0x3f3c 0x6df1 +0x3f3d 0x7533 +0x3f3e 0x75b9 +0x3f3f 0x771f +0x3f40 0x795e +0x3f41 0x79e6 +0x3f42 0x7d33 +0x3f43 0x81e3 +0x3f44 0x82af +0x3f45 0x85aa +0x3f46 0x89aa +0x3f47 0x8a3a +0x3f48 0x8eab +0x3f49 0x8f9b +0x3f4a 0x9032 +0x3f4b 0x91dd +0x3f4c 0x9707 +0x3f4d 0x4eba +0x3f4e 0x4ec1 +0x3f4f 0x5203 +0x3f50 0x5875 +0x3f51 0x58ec +0x3f52 0x5c0b +0x3f53 0x751a +0x3f54 0x5c3d +0x3f55 0x814e +0x3f56 0x8a0a +0x3f57 0x8fc5 +0x3f58 0x9663 +0x3f59 0x976d +0x3f5a 0x7b25 +0x3f5b 0x8acf +0x3f5c 0x9808 +0x3f5d 0x9162 +0x3f5e 0x56f3 +0x3f5f 0x53a8 +0x3f60 0x9017 +0x3f61 0x5439 +0x3f62 0x5782 +0x3f63 0x5e25 +0x3f64 0x63a8 +0x3f65 0x6c34 +0x3f66 0x708a +0x3f67 0x7761 +0x3f68 0x7c8b +0x3f69 0x7fe0 +0x3f6a 0x8870 +0x3f6b 0x9042 +0x3f6c 0x9154 +0x3f6d 0x9310 +0x3f6e 0x9318 +0x3f6f 0x968f +0x3f70 0x745e +0x3f71 0x9ac4 +0x3f72 0x5d07 +0x3f73 0x5d69 +0x3f74 0x6570 +0x3f75 0x67a2 +0x3f76 0x8da8 +0x3f77 0x96db +0x3f78 0x636e +0x3f79 0x6749 +0x3f7a 0x6919 +0x3f7b 0x83c5 +0x3f7c 0x9817 +0x3f7d 0x96c0 +0x3f7e 0x88fe +0x4021 0x6f84 +0x4022 0x647a +0x4023 0x5bf8 +0x4024 0x4e16 +0x4025 0x702c +0x4026 0x755d +0x4027 0x662f +0x4028 0x51c4 +0x4029 0x5236 +0x402a 0x52e2 +0x402b 0x59d3 +0x402c 0x5f81 +0x402d 0x6027 +0x402e 0x6210 +0x402f 0x653f +0x4030 0x6574 +0x4031 0x661f +0x4032 0x6674 +0x4033 0x68f2 +0x4034 0x6816 +0x4035 0x6b63 +0x4036 0x6e05 +0x4037 0x7272 +0x4038 0x751f +0x4039 0x76db +0x403a 0x7cbe +0x403b 0x8056 +0x403c 0x58f0 +0x403d 0x88fd +0x403e 0x897f +0x403f 0x8aa0 +0x4040 0x8a93 +0x4041 0x8acb +0x4042 0x901d +0x4043 0x9192 +0x4044 0x9752 +0x4045 0x9759 +0x4046 0x6589 +0x4047 0x7a0e +0x4048 0x8106 +0x4049 0x96bb +0x404a 0x5e2d +0x404b 0x60dc +0x404c 0x621a +0x404d 0x65a5 +0x404e 0x6614 +0x404f 0x6790 +0x4050 0x77f3 +0x4051 0x7a4d +0x4052 0x7c4d +0x4053 0x7e3e +0x4054 0x810a +0x4055 0x8cac +0x4056 0x8d64 +0x4057 0x8de1 +0x4058 0x8e5f +0x4059 0x78a9 +0x405a 0x5207 +0x405b 0x62d9 +0x405c 0x63a5 +0x405d 0x6442 +0x405e 0x6298 +0x405f 0x8a2d +0x4060 0x7a83 +0x4061 0x7bc0 +0x4062 0x8aac +0x4063 0x96ea +0x4064 0x7d76 +0x4065 0x820c +0x4066 0x8749 +0x4067 0x4ed9 +0x4068 0x5148 +0x4069 0x5343 +0x406a 0x5360 +0x406b 0x5ba3 +0x406c 0x5c02 +0x406d 0x5c16 +0x406e 0x5ddd +0x406f 0x6226 +0x4070 0x6247 +0x4071 0x64b0 +0x4072 0x6813 +0x4073 0x6834 +0x4074 0x6cc9 +0x4075 0x6d45 +0x4076 0x6d17 +0x4077 0x67d3 +0x4078 0x6f5c +0x4079 0x714e +0x407a 0x717d +0x407b 0x65cb +0x407c 0x7a7f +0x407d 0x7bad +0x407e 0x7dda +0x4121 0x7e4a +0x4122 0x7fa8 +0x4123 0x817a +0x4124 0x821b +0x4125 0x8239 +0x4126 0x85a6 +0x4127 0x8a6e +0x4128 0x8cce +0x4129 0x8df5 +0x412a 0x9078 +0x412b 0x9077 +0x412c 0x92ad +0x412d 0x9291 +0x412e 0x9583 +0x412f 0x9bae +0x4130 0x524d +0x4131 0x5584 +0x4132 0x6f38 +0x4133 0x7136 +0x4134 0x5168 +0x4135 0x7985 +0x4136 0x7e55 +0x4137 0x81b3 +0x4138 0x7cce +0x4139 0x564c +0x413a 0x5851 +0x413b 0x5ca8 +0x413c 0x63aa +0x413d 0x66fe +0x413e 0x66fd +0x413f 0x695a +0x4140 0x72d9 +0x4141 0x758f +0x4142 0x758e +0x4143 0x790e +0x4144 0x7956 +0x4145 0x79df +0x4146 0x7c97 +0x4147 0x7d20 +0x4148 0x7d44 +0x4149 0x8607 +0x414a 0x8a34 +0x414b 0x963b +0x414c 0x9061 +0x414d 0x9f20 +0x414e 0x50e7 +0x414f 0x5275 +0x4150 0x53cc +0x4151 0x53e2 +0x4152 0x5009 +0x4153 0x55aa +0x4154 0x58ee +0x4155 0x594f +0x4156 0x723d +0x4157 0x5b8b +0x4158 0x5c64 +0x4159 0x531d +0x415a 0x60e3 +0x415b 0x60f3 +0x415c 0x635c +0x415d 0x6383 +0x415e 0x633f +0x415f 0x63bb +0x4160 0x64cd +0x4161 0x65e9 +0x4162 0x66f9 +0x4163 0x5de3 +0x4164 0x69cd +0x4165 0x69fd +0x4166 0x6f15 +0x4167 0x71e5 +0x4168 0x4e89 +0x4169 0x75e9 +0x416a 0x76f8 +0x416b 0x7a93 +0x416c 0x7cdf +0x416d 0x7dcf +0x416e 0x7d9c +0x416f 0x8061 +0x4170 0x8349 +0x4171 0x8358 +0x4172 0x846c +0x4173 0x84bc +0x4174 0x85fb +0x4175 0x88c5 +0x4176 0x8d70 +0x4177 0x9001 +0x4178 0x906d +0x4179 0x9397 +0x417a 0x971c +0x417b 0x9a12 +0x417c 0x50cf +0x417d 0x5897 +0x417e 0x618e +0x4221 0x81d3 +0x4222 0x8535 +0x4223 0x8d08 +0x4224 0x9020 +0x4225 0x4fc3 +0x4226 0x5074 +0x4227 0x5247 +0x4228 0x5373 +0x4229 0x606f +0x422a 0x6349 +0x422b 0x675f +0x422c 0x6e2c +0x422d 0x8db3 +0x422e 0x901f +0x422f 0x4fd7 +0x4230 0x5c5e +0x4231 0x8cca +0x4232 0x65cf +0x4233 0x7d9a +0x4234 0x5352 +0x4235 0x8896 +0x4236 0x5176 +0x4237 0x63c3 +0x4238 0x5b58 +0x4239 0x5b6b +0x423a 0x5c0a +0x423b 0x640d +0x423c 0x6751 +0x423d 0x905c +0x423e 0x4ed6 +0x423f 0x591a +0x4240 0x592a +0x4241 0x6c70 +0x4242 0x8a51 +0x4243 0x553e +0x4244 0x5815 +0x4245 0x59a5 +0x4246 0x60f0 +0x4247 0x6253 +0x4248 0x67c1 +0x4249 0x8235 +0x424a 0x6955 +0x424b 0x9640 +0x424c 0x99c4 +0x424d 0x9a28 +0x424e 0x4f53 +0x424f 0x5806 +0x4250 0x5bfe +0x4251 0x8010 +0x4252 0x5cb1 +0x4253 0x5e2f +0x4254 0x5f85 +0x4255 0x6020 +0x4256 0x614b +0x4257 0x6234 +0x4258 0x66ff +0x4259 0x6cf0 +0x425a 0x6ede +0x425b 0x80ce +0x425c 0x817f +0x425d 0x82d4 +0x425e 0x888b +0x425f 0x8cb8 +0x4260 0x9000 +0x4261 0x902e +0x4262 0x968a +0x4263 0x9edb +0x4264 0x9bdb +0x4265 0x4ee3 +0x4266 0x53f0 +0x4267 0x5927 +0x4268 0x7b2c +0x4269 0x918d +0x426a 0x984c +0x426b 0x9df9 +0x426c 0x6edd +0x426d 0x7027 +0x426e 0x5353 +0x426f 0x5544 +0x4270 0x5b85 +0x4271 0x6258 +0x4272 0x629e +0x4273 0x62d3 +0x4274 0x6ca2 +0x4275 0x6fef +0x4276 0x7422 +0x4277 0x8a17 +0x4278 0x9438 +0x4279 0x6fc1 +0x427a 0x8afe +0x427b 0x8338 +0x427c 0x51e7 +0x427d 0x86f8 +0x427e 0x53ea +0x4321 0x53e9 +0x4322 0x4f46 +0x4323 0x9054 +0x4324 0x8fb0 +0x4325 0x596a +0x4326 0x8131 +0x4327 0x5dfd +0x4328 0x7aea +0x4329 0x8fbf +0x432a 0x68da +0x432b 0x8c37 +0x432c 0x72f8 +0x432d 0x9c48 +0x432e 0x6a3d +0x432f 0x8ab0 +0x4330 0x4e39 +0x4331 0x5358 +0x4332 0x5606 +0x4333 0x5766 +0x4334 0x62c5 +0x4335 0x63a2 +0x4336 0x65e6 +0x4337 0x6b4e +0x4338 0x6de1 +0x4339 0x6e5b +0x433a 0x70ad +0x433b 0x77ed +0x433c 0x7aef +0x433d 0x7baa +0x433e 0x7dbb +0x433f 0x803d +0x4340 0x80c6 +0x4341 0x86cb +0x4342 0x8a95 +0x4343 0x935b +0x4344 0x56e3 +0x4345 0x58c7 +0x4346 0x5f3e +0x4347 0x65ad +0x4348 0x6696 +0x4349 0x6a80 +0x434a 0x6bb5 +0x434b 0x7537 +0x434c 0x8ac7 +0x434d 0x5024 +0x434e 0x77e5 +0x434f 0x5730 +0x4350 0x5f1b +0x4351 0x6065 +0x4352 0x667a +0x4353 0x6c60 +0x4354 0x75f4 +0x4355 0x7a1a +0x4356 0x7f6e +0x4357 0x81f4 +0x4358 0x8718 +0x4359 0x9045 +0x435a 0x99b3 +0x435b 0x7bc9 +0x435c 0x755c +0x435d 0x7af9 +0x435e 0x7b51 +0x435f 0x84c4 +0x4360 0x9010 +0x4361 0x79e9 +0x4362 0x7a92 +0x4363 0x8336 +0x4364 0x5ae1 +0x4365 0x7740 +0x4366 0x4e2d +0x4367 0x4ef2 +0x4368 0x5b99 +0x4369 0x5fe0 +0x436a 0x62bd +0x436b 0x663c +0x436c 0x67f1 +0x436d 0x6ce8 +0x436e 0x866b +0x436f 0x8877 +0x4370 0x8a3b +0x4371 0x914e +0x4372 0x92f3 +0x4373 0x99d0 +0x4374 0x6a17 +0x4375 0x7026 +0x4376 0x732a +0x4377 0x82e7 +0x4378 0x8457 +0x4379 0x8caf +0x437a 0x4e01 +0x437b 0x5146 +0x437c 0x51cb +0x437d 0x558b +0x437e 0x5bf5 +0x4421 0x5e16 +0x4422 0x5e33 +0x4423 0x5e81 +0x4424 0x5f14 +0x4425 0x5f35 +0x4426 0x5f6b +0x4427 0x5fb4 +0x4428 0x61f2 +0x4429 0x6311 +0x442a 0x66a2 +0x442b 0x671d +0x442c 0x6f6e +0x442d 0x7252 +0x442e 0x753a +0x442f 0x773a +0x4430 0x8074 +0x4431 0x8139 +0x4432 0x8178 +0x4433 0x8776 +0x4434 0x8abf +0x4435 0x8adc +0x4436 0x8d85 +0x4437 0x8df3 +0x4438 0x929a +0x4439 0x9577 +0x443a 0x9802 +0x443b 0x9ce5 +0x443c 0x52c5 +0x443d 0x6357 +0x443e 0x76f4 +0x443f 0x6715 +0x4440 0x6c88 +0x4441 0x73cd +0x4442 0x8cc3 +0x4443 0x93ae +0x4444 0x9673 +0x4445 0x6d25 +0x4446 0x589c +0x4447 0x690e +0x4448 0x69cc +0x4449 0x8ffd +0x444a 0x939a +0x444b 0x75db +0x444c 0x901a +0x444d 0x585a +0x444e 0x6802 +0x444f 0x63b4 +0x4450 0x69fb +0x4451 0x4f43 +0x4452 0x6f2c +0x4453 0x67d8 +0x4454 0x8fbb +0x4455 0x8526 +0x4456 0x7db4 +0x4457 0x9354 +0x4458 0x693f +0x4459 0x6f70 +0x445a 0x576a +0x445b 0x58f7 +0x445c 0x5b2c +0x445d 0x7d2c +0x445e 0x722a +0x445f 0x540a +0x4460 0x91e3 +0x4461 0x9db4 +0x4462 0x4ead +0x4463 0x4f4e +0x4464 0x505c +0x4465 0x5075 +0x4466 0x5243 +0x4467 0x8c9e +0x4468 0x5448 +0x4469 0x5824 +0x446a 0x5b9a +0x446b 0x5e1d +0x446c 0x5e95 +0x446d 0x5ead +0x446e 0x5ef7 +0x446f 0x5f1f +0x4470 0x608c +0x4471 0x62b5 +0x4472 0x633a +0x4473 0x63d0 +0x4474 0x68af +0x4475 0x6c40 +0x4476 0x7887 +0x4477 0x798e +0x4478 0x7a0b +0x4479 0x7de0 +0x447a 0x8247 +0x447b 0x8a02 +0x447c 0x8ae6 +0x447d 0x8e44 +0x447e 0x9013 +0x4521 0x90b8 +0x4522 0x912d +0x4523 0x91d8 +0x4524 0x9f0e +0x4525 0x6ce5 +0x4526 0x6458 +0x4527 0x64e2 +0x4528 0x6575 +0x4529 0x6ef4 +0x452a 0x7684 +0x452b 0x7b1b +0x452c 0x9069 +0x452d 0x93d1 +0x452e 0x6eba +0x452f 0x54f2 +0x4530 0x5fb9 +0x4531 0x64a4 +0x4532 0x8f4d +0x4533 0x8fed +0x4534 0x9244 +0x4535 0x5178 +0x4536 0x586b +0x4537 0x5929 +0x4538 0x5c55 +0x4539 0x5e97 +0x453a 0x6dfb +0x453b 0x7e8f +0x453c 0x751c +0x453d 0x8cbc +0x453e 0x8ee2 +0x453f 0x985b +0x4540 0x70b9 +0x4541 0x4f1d +0x4542 0x6bbf +0x4543 0x6fb1 +0x4544 0x7530 +0x4545 0x96fb +0x4546 0x514e +0x4547 0x5410 +0x4548 0x5835 +0x4549 0x5857 +0x454a 0x59ac +0x454b 0x5c60 +0x454c 0x5f92 +0x454d 0x6597 +0x454e 0x675c +0x454f 0x6e21 +0x4550 0x767b +0x4551 0x83df +0x4552 0x8ced +0x4553 0x9014 +0x4554 0x90fd +0x4555 0x934d +0x4556 0x7825 +0x4557 0x783a +0x4558 0x52aa +0x4559 0x5ea6 +0x455a 0x571f +0x455b 0x5974 +0x455c 0x6012 +0x455d 0x5012 +0x455e 0x515a +0x455f 0x51ac +0x4560 0x51cd +0x4561 0x5200 +0x4562 0x5510 +0x4563 0x5854 +0x4564 0x5858 +0x4565 0x5957 +0x4566 0x5b95 +0x4567 0x5cf6 +0x4568 0x5d8b +0x4569 0x60bc +0x456a 0x6295 +0x456b 0x642d +0x456c 0x6771 +0x456d 0x6843 +0x456e 0x68bc +0x456f 0x68df +0x4570 0x76d7 +0x4571 0x6dd8 +0x4572 0x6e6f +0x4573 0x6d9b +0x4574 0x706f +0x4575 0x71c8 +0x4576 0x5f53 +0x4577 0x75d8 +0x4578 0x7977 +0x4579 0x7b49 +0x457a 0x7b54 +0x457b 0x7b52 +0x457c 0x7cd6 +0x457d 0x7d71 +0x457e 0x5230 +0x4621 0x8463 +0x4622 0x8569 +0x4623 0x85e4 +0x4624 0x8a0e +0x4625 0x8b04 +0x4626 0x8c46 +0x4627 0x8e0f +0x4628 0x9003 +0x4629 0x900f +0x462a 0x9419 +0x462b 0x9676 +0x462c 0x982d +0x462d 0x9a30 +0x462e 0x95d8 +0x462f 0x50cd +0x4630 0x52d5 +0x4631 0x540c +0x4632 0x5802 +0x4633 0x5c0e +0x4634 0x61a7 +0x4635 0x649e +0x4636 0x6d1e +0x4637 0x77b3 +0x4638 0x7ae5 +0x4639 0x80f4 +0x463a 0x8404 +0x463b 0x9053 +0x463c 0x9285 +0x463d 0x5ce0 +0x463e 0x9d07 +0x463f 0x533f +0x4640 0x5f97 +0x4641 0x5fb3 +0x4642 0x6d9c +0x4643 0x7279 +0x4644 0x7763 +0x4645 0x79bf +0x4646 0x7be4 +0x4647 0x6bd2 +0x4648 0x72ec +0x4649 0x8aad +0x464a 0x6803 +0x464b 0x6a61 +0x464c 0x51f8 +0x464d 0x7a81 +0x464e 0x6934 +0x464f 0x5c4a +0x4650 0x9cf6 +0x4651 0x82eb +0x4652 0x5bc5 +0x4653 0x9149 +0x4654 0x701e +0x4655 0x5678 +0x4656 0x5c6f +0x4657 0x60c7 +0x4658 0x6566 +0x4659 0x6c8c +0x465a 0x8c5a +0x465b 0x9041 +0x465c 0x9813 +0x465d 0x5451 +0x465e 0x66c7 +0x465f 0x920d +0x4660 0x5948 +0x4661 0x90a3 +0x4662 0x5185 +0x4663 0x4e4d +0x4664 0x51ea +0x4665 0x8599 +0x4666 0x8b0e +0x4667 0x7058 +0x4668 0x637a +0x4669 0x934b +0x466a 0x6962 +0x466b 0x99b4 +0x466c 0x7e04 +0x466d 0x7577 +0x466e 0x5357 +0x466f 0x6960 +0x4670 0x8edf +0x4671 0x96e3 +0x4672 0x6c5d +0x4673 0x4e8c +0x4674 0x5c3c +0x4675 0x5f10 +0x4676 0x8fe9 +0x4677 0x5302 +0x4678 0x8cd1 +0x4679 0x8089 +0x467a 0x8679 +0x467b 0x5eff +0x467c 0x65e5 +0x467d 0x4e73 +0x467e 0x5165 +0x4721 0x5982 +0x4722 0x5c3f +0x4723 0x97ee +0x4724 0x4efb +0x4725 0x598a +0x4726 0x5fcd +0x4727 0x8a8d +0x4728 0x6fe1 +0x4729 0x79b0 +0x472a 0x7962 +0x472b 0x5be7 +0x472c 0x8471 +0x472d 0x732b +0x472e 0x71b1 +0x472f 0x5e74 +0x4730 0x5ff5 +0x4731 0x637b +0x4732 0x649a +0x4733 0x71c3 +0x4734 0x7c98 +0x4735 0x4e43 +0x4736 0x5efc +0x4737 0x4e4b +0x4738 0x57dc +0x4739 0x56a2 +0x473a 0x60a9 +0x473b 0x6fc3 +0x473c 0x7d0d +0x473d 0x80fd +0x473e 0x8133 +0x473f 0x81bf +0x4740 0x8fb2 +0x4741 0x8997 +0x4742 0x86a4 +0x4743 0x5df4 +0x4744 0x628a +0x4745 0x64ad +0x4746 0x8987 +0x4747 0x6777 +0x4748 0x6ce2 +0x4749 0x6d3e +0x474a 0x7436 +0x474b 0x7834 +0x474c 0x5a46 +0x474d 0x7f75 +0x474e 0x82ad +0x474f 0x99ac +0x4750 0x4ff3 +0x4751 0x5ec3 +0x4752 0x62dd +0x4753 0x6392 +0x4754 0x6557 +0x4755 0x676f +0x4756 0x76c3 +0x4757 0x724c +0x4758 0x80cc +0x4759 0x80ba +0x475a 0x8f29 +0x475b 0x914d +0x475c 0x500d +0x475d 0x57f9 +0x475e 0x5a92 +0x475f 0x6885 +0x4760 0x6973 +0x4761 0x7164 +0x4762 0x72fd +0x4763 0x8cb7 +0x4764 0x58f2 +0x4765 0x8ce0 +0x4766 0x966a +0x4767 0x9019 +0x4768 0x877f +0x4769 0x79e4 +0x476a 0x77e7 +0x476b 0x8429 +0x476c 0x4f2f +0x476d 0x5265 +0x476e 0x535a +0x476f 0x62cd +0x4770 0x67cf +0x4771 0x6cca +0x4772 0x767d +0x4773 0x7b94 +0x4774 0x7c95 +0x4775 0x8236 +0x4776 0x8584 +0x4777 0x8feb +0x4778 0x66dd +0x4779 0x6f20 +0x477a 0x7206 +0x477b 0x7e1b +0x477c 0x83ab +0x477d 0x99c1 +0x477e 0x9ea6 +0x4821 0x51fd +0x4822 0x7bb1 +0x4823 0x7872 +0x4824 0x7bb8 +0x4825 0x8087 +0x4826 0x7b48 +0x4827 0x6ae8 +0x4828 0x5e61 +0x4829 0x808c +0x482a 0x7551 +0x482b 0x7560 +0x482c 0x516b +0x482d 0x9262 +0x482e 0x6e8c +0x482f 0x767a +0x4830 0x9197 +0x4831 0x9aea +0x4832 0x4f10 +0x4833 0x7f70 +0x4834 0x629c +0x4835 0x7b4f +0x4836 0x95a5 +0x4837 0x9ce9 +0x4838 0x567a +0x4839 0x5859 +0x483a 0x86e4 +0x483b 0x96bc +0x483c 0x4f34 +0x483d 0x5224 +0x483e 0x534a +0x483f 0x53cd +0x4840 0x53db +0x4841 0x5e06 +0x4842 0x642c +0x4843 0x6591 +0x4844 0x677f +0x4845 0x6c3e +0x4846 0x6c4e +0x4847 0x7248 +0x4848 0x72af +0x4849 0x73ed +0x484a 0x7554 +0x484b 0x7e41 +0x484c 0x822c +0x484d 0x85e9 +0x484e 0x8ca9 +0x484f 0x7bc4 +0x4850 0x91c6 +0x4851 0x7169 +0x4852 0x9812 +0x4853 0x98ef +0x4854 0x633d +0x4855 0x6669 +0x4856 0x756a +0x4857 0x76e4 +0x4858 0x78d0 +0x4859 0x8543 +0x485a 0x86ee +0x485b 0x532a +0x485c 0x5351 +0x485d 0x5426 +0x485e 0x5983 +0x485f 0x5e87 +0x4860 0x5f7c +0x4861 0x60b2 +0x4862 0x6249 +0x4863 0x6279 +0x4864 0x62ab +0x4865 0x6590 +0x4866 0x6bd4 +0x4867 0x6ccc +0x4868 0x75b2 +0x4869 0x76ae +0x486a 0x7891 +0x486b 0x79d8 +0x486c 0x7dcb +0x486d 0x7f77 +0x486e 0x80a5 +0x486f 0x88ab +0x4870 0x8ab9 +0x4871 0x8cbb +0x4872 0x907f +0x4873 0x975e +0x4874 0x98db +0x4875 0x6a0b +0x4876 0x7c38 +0x4877 0x5099 +0x4878 0x5c3e +0x4879 0x5fae +0x487a 0x6787 +0x487b 0x6bd8 +0x487c 0x7435 +0x487d 0x7709 +0x487e 0x7f8e +0x4921 0x9f3b +0x4922 0x67ca +0x4923 0x7a17 +0x4924 0x5339 +0x4925 0x758b +0x4926 0x9aed +0x4927 0x5f66 +0x4928 0x819d +0x4929 0x83f1 +0x492a 0x8098 +0x492b 0x5f3c +0x492c 0x5fc5 +0x492d 0x7562 +0x492e 0x7b46 +0x492f 0x903c +0x4930 0x6867 +0x4931 0x59eb +0x4932 0x5a9b +0x4933 0x7d10 +0x4934 0x767e +0x4935 0x8b2c +0x4936 0x4ff5 +0x4937 0x5f6a +0x4938 0x6a19 +0x4939 0x6c37 +0x493a 0x6f02 +0x493b 0x74e2 +0x493c 0x7968 +0x493d 0x8868 +0x493e 0x8a55 +0x493f 0x8c79 +0x4940 0x5edf +0x4941 0x63cf +0x4942 0x75c5 +0x4943 0x79d2 +0x4944 0x82d7 +0x4945 0x9328 +0x4946 0x92f2 +0x4947 0x849c +0x4948 0x86ed +0x4949 0x9c2d +0x494a 0x54c1 +0x494b 0x5f6c +0x494c 0x658c +0x494d 0x6d5c +0x494e 0x7015 +0x494f 0x8ca7 +0x4950 0x8cd3 +0x4951 0x983b +0x4952 0x654f +0x4953 0x74f6 +0x4954 0x4e0d +0x4955 0x4ed8 +0x4956 0x57e0 +0x4957 0x592b +0x4958 0x5a66 +0x4959 0x5bcc +0x495a 0x51a8 +0x495b 0x5e03 +0x495c 0x5e9c +0x495d 0x6016 +0x495e 0x6276 +0x495f 0x6577 +0x4960 0x65a7 +0x4961 0x666e +0x4962 0x6d6e +0x4963 0x7236 +0x4964 0x7b26 +0x4965 0x8150 +0x4966 0x819a +0x4967 0x8299 +0x4968 0x8b5c +0x4969 0x8ca0 +0x496a 0x8ce6 +0x496b 0x8d74 +0x496c 0x961c +0x496d 0x9644 +0x496e 0x4fae +0x496f 0x64ab +0x4970 0x6b66 +0x4971 0x821e +0x4972 0x8461 +0x4973 0x856a +0x4974 0x90e8 +0x4975 0x5c01 +0x4976 0x6953 +0x4977 0x98a8 +0x4978 0x847a +0x4979 0x8557 +0x497a 0x4f0f +0x497b 0x526f +0x497c 0x5fa9 +0x497d 0x5e45 +0x497e 0x670d +0x4a21 0x798f +0x4a22 0x8179 +0x4a23 0x8907 +0x4a24 0x8986 +0x4a25 0x6df5 +0x4a26 0x5f17 +0x4a27 0x6255 +0x4a28 0x6cb8 +0x4a29 0x4ecf +0x4a2a 0x7269 +0x4a2b 0x9b92 +0x4a2c 0x5206 +0x4a2d 0x543b +0x4a2e 0x5674 +0x4a2f 0x58b3 +0x4a30 0x61a4 +0x4a31 0x626e +0x4a32 0x711a +0x4a33 0x596e +0x4a34 0x7c89 +0x4a35 0x7cde +0x4a36 0x7d1b +0x4a37 0x96f0 +0x4a38 0x6587 +0x4a39 0x805e +0x4a3a 0x4e19 +0x4a3b 0x4f75 +0x4a3c 0x5175 +0x4a3d 0x5840 +0x4a3e 0x5e63 +0x4a3f 0x5e73 +0x4a40 0x5f0a +0x4a41 0x67c4 +0x4a42 0x4e26 +0x4a43 0x853d +0x4a44 0x9589 +0x4a45 0x965b +0x4a46 0x7c73 +0x4a47 0x9801 +0x4a48 0x50fb +0x4a49 0x58c1 +0x4a4a 0x7656 +0x4a4b 0x78a7 +0x4a4c 0x5225 +0x4a4d 0x77a5 +0x4a4e 0x8511 +0x4a4f 0x7b86 +0x4a50 0x504f +0x4a51 0x5909 +0x4a52 0x7247 +0x4a53 0x7bc7 +0x4a54 0x7de8 +0x4a55 0x8fba +0x4a56 0x8fd4 +0x4a57 0x904d +0x4a58 0x4fbf +0x4a59 0x52c9 +0x4a5a 0x5a29 +0x4a5b 0x5f01 +0x4a5c 0x97ad +0x4a5d 0x4fdd +0x4a5e 0x8217 +0x4a5f 0x92ea +0x4a60 0x5703 +0x4a61 0x6355 +0x4a62 0x6b69 +0x4a63 0x752b +0x4a64 0x88dc +0x4a65 0x8f14 +0x4a66 0x7a42 +0x4a67 0x52df +0x4a68 0x5893 +0x4a69 0x6155 +0x4a6a 0x620a +0x4a6b 0x66ae +0x4a6c 0x6bcd +0x4a6d 0x7c3f +0x4a6e 0x83e9 +0x4a6f 0x5023 +0x4a70 0x4ff8 +0x4a71 0x5305 +0x4a72 0x5446 +0x4a73 0x5831 +0x4a74 0x5949 +0x4a75 0x5b9d +0x4a76 0x5cf0 +0x4a77 0x5cef +0x4a78 0x5d29 +0x4a79 0x5e96 +0x4a7a 0x62b1 +0x4a7b 0x6367 +0x4a7c 0x653e +0x4a7d 0x65b9 +0x4a7e 0x670b +0x4b21 0x6cd5 +0x4b22 0x6ce1 +0x4b23 0x70f9 +0x4b24 0x7832 +0x4b25 0x7e2b +0x4b26 0x80de +0x4b27 0x82b3 +0x4b28 0x840c +0x4b29 0x84ec +0x4b2a 0x8702 +0x4b2b 0x8912 +0x4b2c 0x8a2a +0x4b2d 0x8c4a +0x4b2e 0x90a6 +0x4b2f 0x92d2 +0x4b30 0x98fd +0x4b31 0x9cf3 +0x4b32 0x9d6c +0x4b33 0x4e4f +0x4b34 0x4ea1 +0x4b35 0x508d +0x4b36 0x5256 +0x4b37 0x574a +0x4b38 0x59a8 +0x4b39 0x5e3d +0x4b3a 0x5fd8 +0x4b3b 0x5fd9 +0x4b3c 0x623f +0x4b3d 0x66b4 +0x4b3e 0x671b +0x4b3f 0x67d0 +0x4b40 0x68d2 +0x4b41 0x5192 +0x4b42 0x7d21 +0x4b43 0x80aa +0x4b44 0x81a8 +0x4b45 0x8b00 +0x4b46 0x8c8c +0x4b47 0x8cbf +0x4b48 0x927e +0x4b49 0x9632 +0x4b4a 0x5420 +0x4b4b 0x982c +0x4b4c 0x5317 +0x4b4d 0x50d5 +0x4b4e 0x535c +0x4b4f 0x58a8 +0x4b50 0x64b2 +0x4b51 0x6734 +0x4b52 0x7267 +0x4b53 0x7766 +0x4b54 0x7a46 +0x4b55 0x91e6 +0x4b56 0x52c3 +0x4b57 0x6ca1 +0x4b58 0x6b86 +0x4b59 0x5800 +0x4b5a 0x5e4c +0x4b5b 0x5954 +0x4b5c 0x672c +0x4b5d 0x7ffb +0x4b5e 0x51e1 +0x4b5f 0x76c6 +0x4b60 0x6469 +0x4b61 0x78e8 +0x4b62 0x9b54 +0x4b63 0x9ebb +0x4b64 0x57cb +0x4b65 0x59b9 +0x4b66 0x6627 +0x4b67 0x679a +0x4b68 0x6bce +0x4b69 0x54e9 +0x4b6a 0x69d9 +0x4b6b 0x5e55 +0x4b6c 0x819c +0x4b6d 0x6795 +0x4b6e 0x9baa +0x4b6f 0x67fe +0x4b70 0x9c52 +0x4b71 0x685d +0x4b72 0x4ea6 +0x4b73 0x4fe3 +0x4b74 0x53c8 +0x4b75 0x62b9 +0x4b76 0x672b +0x4b77 0x6cab +0x4b78 0x8fc4 +0x4b79 0x4fad +0x4b7a 0x7e6d +0x4b7b 0x9ebf +0x4b7c 0x4e07 +0x4b7d 0x6162 +0x4b7e 0x6e80 +0x4c21 0x6f2b +0x4c22 0x8513 +0x4c23 0x5473 +0x4c24 0x672a +0x4c25 0x9b45 +0x4c26 0x5df3 +0x4c27 0x7b95 +0x4c28 0x5cac +0x4c29 0x5bc6 +0x4c2a 0x871c +0x4c2b 0x6e4a +0x4c2c 0x84d1 +0x4c2d 0x7a14 +0x4c2e 0x8108 +0x4c2f 0x5999 +0x4c30 0x7c8d +0x4c31 0x6c11 +0x4c32 0x7720 +0x4c33 0x52d9 +0x4c34 0x5922 +0x4c35 0x7121 +0x4c36 0x725f +0x4c37 0x77db +0x4c38 0x9727 +0x4c39 0x9d61 +0x4c3a 0x690b +0x4c3b 0x5a7f +0x4c3c 0x5a18 +0x4c3d 0x51a5 +0x4c3e 0x540d +0x4c3f 0x547d +0x4c40 0x660e +0x4c41 0x76df +0x4c42 0x8ff7 +0x4c43 0x9298 +0x4c44 0x9cf4 +0x4c45 0x59ea +0x4c46 0x725d +0x4c47 0x6ec5 +0x4c48 0x514d +0x4c49 0x68c9 +0x4c4a 0x7dbf +0x4c4b 0x7dec +0x4c4c 0x9762 +0x4c4d 0x9eba +0x4c4e 0x6478 +0x4c4f 0x6a21 +0x4c50 0x8302 +0x4c51 0x5984 +0x4c52 0x5b5f +0x4c53 0x6bdb +0x4c54 0x731b +0x4c55 0x76f2 +0x4c56 0x7db2 +0x4c57 0x8017 +0x4c58 0x8499 +0x4c59 0x5132 +0x4c5a 0x6728 +0x4c5b 0x9ed9 +0x4c5c 0x76ee +0x4c5d 0x6762 +0x4c5e 0x52ff +0x4c5f 0x9905 +0x4c60 0x5c24 +0x4c61 0x623b +0x4c62 0x7c7e +0x4c63 0x8cb0 +0x4c64 0x554f +0x4c65 0x60b6 +0x4c66 0x7d0b +0x4c67 0x9580 +0x4c68 0x5301 +0x4c69 0x4e5f +0x4c6a 0x51b6 +0x4c6b 0x591c +0x4c6c 0x723a +0x4c6d 0x8036 +0x4c6e 0x91ce +0x4c6f 0x5f25 +0x4c70 0x77e2 +0x4c71 0x5384 +0x4c72 0x5f79 +0x4c73 0x7d04 +0x4c74 0x85ac +0x4c75 0x8a33 +0x4c76 0x8e8d +0x4c77 0x9756 +0x4c78 0x67f3 +0x4c79 0x85ae +0x4c7a 0x9453 +0x4c7b 0x6109 +0x4c7c 0x6108 +0x4c7d 0x6cb9 +0x4c7e 0x7652 +0x4d21 0x8aed +0x4d22 0x8f38 +0x4d23 0x552f +0x4d24 0x4f51 +0x4d25 0x512a +0x4d26 0x52c7 +0x4d27 0x53cb +0x4d28 0x5ba5 +0x4d29 0x5e7d +0x4d2a 0x60a0 +0x4d2b 0x6182 +0x4d2c 0x63d6 +0x4d2d 0x6709 +0x4d2e 0x67da +0x4d2f 0x6e67 +0x4d30 0x6d8c +0x4d31 0x7336 +0x4d32 0x7337 +0x4d33 0x7531 +0x4d34 0x7950 +0x4d35 0x88d5 +0x4d36 0x8a98 +0x4d37 0x904a +0x4d38 0x9091 +0x4d39 0x90f5 +0x4d3a 0x96c4 +0x4d3b 0x878d +0x4d3c 0x5915 +0x4d3d 0x4e88 +0x4d3e 0x4f59 +0x4d3f 0x4e0e +0x4d40 0x8a89 +0x4d41 0x8f3f +0x4d42 0x9810 +0x4d43 0x50ad +0x4d44 0x5e7c +0x4d45 0x5996 +0x4d46 0x5bb9 +0x4d47 0x5eb8 +0x4d48 0x63da +0x4d49 0x63fa +0x4d4a 0x64c1 +0x4d4b 0x66dc +0x4d4c 0x694a +0x4d4d 0x69d8 +0x4d4e 0x6d0b +0x4d4f 0x6eb6 +0x4d50 0x7194 +0x4d51 0x7528 +0x4d52 0x7aaf +0x4d53 0x7f8a +0x4d54 0x8000 +0x4d55 0x8449 +0x4d56 0x84c9 +0x4d57 0x8981 +0x4d58 0x8b21 +0x4d59 0x8e0a +0x4d5a 0x9065 +0x4d5b 0x967d +0x4d5c 0x990a +0x4d5d 0x617e +0x4d5e 0x6291 +0x4d5f 0x6b32 +0x4d60 0x6c83 +0x4d61 0x6d74 +0x4d62 0x7fcc +0x4d63 0x7ffc +0x4d64 0x6dc0 +0x4d65 0x7f85 +0x4d66 0x87ba +0x4d67 0x88f8 +0x4d68 0x6765 +0x4d69 0x83b1 +0x4d6a 0x983c +0x4d6b 0x96f7 +0x4d6c 0x6d1b +0x4d6d 0x7d61 +0x4d6e 0x843d +0x4d6f 0x916a +0x4d70 0x4e71 +0x4d71 0x5375 +0x4d72 0x5d50 +0x4d73 0x6b04 +0x4d74 0x6feb +0x4d75 0x85cd +0x4d76 0x862d +0x4d77 0x89a7 +0x4d78 0x5229 +0x4d79 0x540f +0x4d7a 0x5c65 +0x4d7b 0x674e +0x4d7c 0x68a8 +0x4d7d 0x7406 +0x4d7e 0x7483 +0x4e21 0x75e2 +0x4e22 0x88cf +0x4e23 0x88e1 +0x4e24 0x91cc +0x4e25 0x96e2 +0x4e26 0x9678 +0x4e27 0x5f8b +0x4e28 0x7387 +0x4e29 0x7acb +0x4e2a 0x844e +0x4e2b 0x63a0 +0x4e2c 0x7565 +0x4e2d 0x5289 +0x4e2e 0x6d41 +0x4e2f 0x6e9c +0x4e30 0x7409 +0x4e31 0x7559 +0x4e32 0x786b +0x4e33 0x7c92 +0x4e34 0x9686 +0x4e35 0x7adc +0x4e36 0x9f8d +0x4e37 0x4fb6 +0x4e38 0x616e +0x4e39 0x65c5 +0x4e3a 0x865c +0x4e3b 0x4e86 +0x4e3c 0x4eae +0x4e3d 0x50da +0x4e3e 0x4e21 +0x4e3f 0x51cc +0x4e40 0x5bee +0x4e41 0x6599 +0x4e42 0x6881 +0x4e43 0x6dbc +0x4e44 0x731f +0x4e45 0x7642 +0x4e46 0x77ad +0x4e47 0x7a1c +0x4e48 0x7ce7 +0x4e49 0x826f +0x4e4a 0x8ad2 +0x4e4b 0x907c +0x4e4c 0x91cf +0x4e4d 0x9675 +0x4e4e 0x9818 +0x4e4f 0x529b +0x4e50 0x7dd1 +0x4e51 0x502b +0x4e52 0x5398 +0x4e53 0x6797 +0x4e54 0x6dcb +0x4e55 0x71d0 +0x4e56 0x7433 +0x4e57 0x81e8 +0x4e58 0x8f2a +0x4e59 0x96a3 +0x4e5a 0x9c57 +0x4e5b 0x9e9f +0x4e5c 0x7460 +0x4e5d 0x5841 +0x4e5e 0x6d99 +0x4e5f 0x7d2f +0x4e60 0x985e +0x4e61 0x4ee4 +0x4e62 0x4f36 +0x4e63 0x4f8b +0x4e64 0x51b7 +0x4e65 0x52b1 +0x4e66 0x5dba +0x4e67 0x601c +0x4e68 0x73b2 +0x4e69 0x793c +0x4e6a 0x82d3 +0x4e6b 0x9234 +0x4e6c 0x96b7 +0x4e6d 0x96f6 +0x4e6e 0x970a +0x4e6f 0x9e97 +0x4e70 0x9f62 +0x4e71 0x66a6 +0x4e72 0x6b74 +0x4e73 0x5217 +0x4e74 0x52a3 +0x4e75 0x70c8 +0x4e76 0x88c2 +0x4e77 0x5ec9 +0x4e78 0x604b +0x4e79 0x6190 +0x4e7a 0x6f23 +0x4e7b 0x7149 +0x4e7c 0x7c3e +0x4e7d 0x7df4 +0x4e7e 0x806f +0x4f21 0x84ee +0x4f22 0x9023 +0x4f23 0x932c +0x4f24 0x5442 +0x4f25 0x9b6f +0x4f26 0x6ad3 +0x4f27 0x7089 +0x4f28 0x8cc2 +0x4f29 0x8def +0x4f2a 0x9732 +0x4f2b 0x52b4 +0x4f2c 0x5a41 +0x4f2d 0x5eca +0x4f2e 0x5f04 +0x4f2f 0x6717 +0x4f30 0x697c +0x4f31 0x6994 +0x4f32 0x6d6a +0x4f33 0x6f0f +0x4f34 0x7262 +0x4f35 0x72fc +0x4f36 0x7bed +0x4f37 0x8001 +0x4f38 0x807e +0x4f39 0x874b +0x4f3a 0x90ce +0x4f3b 0x516d +0x4f3c 0x9e93 +0x4f3d 0x7984 +0x4f3e 0x808b +0x4f3f 0x9332 +0x4f40 0x8ad6 +0x4f41 0x502d +0x4f42 0x548c +0x4f43 0x8a71 +0x4f44 0x6b6a +0x4f45 0x8cc4 +0x4f46 0x8107 +0x4f47 0x60d1 +0x4f48 0x67a0 +0x4f49 0x9df2 +0x4f4a 0x4e99 +0x4f4b 0x4e98 +0x4f4c 0x9c10 +0x4f4d 0x8a6b +0x4f4e 0x85c1 +0x4f4f 0x8568 +0x4f50 0x6900 +0x4f51 0x6e7e +0x4f52 0x7897 +0x4f53 0x8155 +0x5021 0x5f0c +0x5022 0x4e10 +0x5023 0x4e15 +0x5024 0x4e2a +0x5025 0x4e31 +0x5026 0x4e36 +0x5027 0x4e3c +0x5028 0x4e3f +0x5029 0x4e42 +0x502a 0x4e56 +0x502b 0x4e58 +0x502c 0x4e82 +0x502d 0x4e85 +0x502e 0x8c6b +0x502f 0x4e8a +0x5030 0x8212 +0x5031 0x5f0d +0x5032 0x4e8e +0x5033 0x4e9e +0x5034 0x4e9f +0x5035 0x4ea0 +0x5036 0x4ea2 +0x5037 0x4eb0 +0x5038 0x4eb3 +0x5039 0x4eb6 +0x503a 0x4ece +0x503b 0x4ecd +0x503c 0x4ec4 +0x503d 0x4ec6 +0x503e 0x4ec2 +0x503f 0x4ed7 +0x5040 0x4ede +0x5041 0x4eed +0x5042 0x4edf +0x5043 0x4ef7 +0x5044 0x4f09 +0x5045 0x4f5a +0x5046 0x4f30 +0x5047 0x4f5b +0x5048 0x4f5d +0x5049 0x4f57 +0x504a 0x4f47 +0x504b 0x4f76 +0x504c 0x4f88 +0x504d 0x4f8f +0x504e 0x4f98 +0x504f 0x4f7b +0x5050 0x4f69 +0x5051 0x4f70 +0x5052 0x4f91 +0x5053 0x4f6f +0x5054 0x4f86 +0x5055 0x4f96 +0x5056 0x5118 +0x5057 0x4fd4 +0x5058 0x4fdf +0x5059 0x4fce +0x505a 0x4fd8 +0x505b 0x4fdb +0x505c 0x4fd1 +0x505d 0x4fda +0x505e 0x4fd0 +0x505f 0x4fe4 +0x5060 0x4fe5 +0x5061 0x501a +0x5062 0x5028 +0x5063 0x5014 +0x5064 0x502a +0x5065 0x5025 +0x5066 0x5005 +0x5067 0x4f1c +0x5068 0x4ff6 +0x5069 0x5021 +0x506a 0x5029 +0x506b 0x502c +0x506c 0x4ffe +0x506d 0x4fef +0x506e 0x5011 +0x506f 0x5006 +0x5070 0x5043 +0x5071 0x5047 +0x5072 0x6703 +0x5073 0x5055 +0x5074 0x5050 +0x5075 0x5048 +0x5076 0x505a +0x5077 0x5056 +0x5078 0x506c +0x5079 0x5078 +0x507a 0x5080 +0x507b 0x509a +0x507c 0x5085 +0x507d 0x50b4 +0x507e 0x50b2 +0x5121 0x50c9 +0x5122 0x50ca +0x5123 0x50b3 +0x5124 0x50c2 +0x5125 0x50d6 +0x5126 0x50de +0x5127 0x50e5 +0x5128 0x50ed +0x5129 0x50e3 +0x512a 0x50ee +0x512b 0x50f9 +0x512c 0x50f5 +0x512d 0x5109 +0x512e 0x5101 +0x512f 0x5102 +0x5130 0x5116 +0x5131 0x5115 +0x5132 0x5114 +0x5133 0x511a +0x5134 0x5121 +0x5135 0x513a +0x5136 0x5137 +0x5137 0x513c +0x5138 0x513b +0x5139 0x513f +0x513a 0x5140 +0x513b 0x5152 +0x513c 0x514c +0x513d 0x5154 +0x513e 0x5162 +0x513f 0x7af8 +0x5140 0x5169 +0x5141 0x516a +0x5142 0x516e +0x5143 0x5180 +0x5144 0x5182 +0x5145 0x56d8 +0x5146 0x518c +0x5147 0x5189 +0x5148 0x518f +0x5149 0x5191 +0x514a 0x5193 +0x514b 0x5195 +0x514c 0x5196 +0x514d 0x51a4 +0x514e 0x51a6 +0x514f 0x51a2 +0x5150 0x51a9 +0x5151 0x51aa +0x5152 0x51ab +0x5153 0x51b3 +0x5154 0x51b1 +0x5155 0x51b2 +0x5156 0x51b0 +0x5157 0x51b5 +0x5158 0x51bd +0x5159 0x51c5 +0x515a 0x51c9 +0x515b 0x51db +0x515c 0x51e0 +0x515d 0x8655 +0x515e 0x51e9 +0x515f 0x51ed +0x5160 0x51f0 +0x5161 0x51f5 +0x5162 0x51fe +0x5163 0x5204 +0x5164 0x520b +0x5165 0x5214 +0x5166 0x520e +0x5167 0x5227 +0x5168 0x522a +0x5169 0x522e +0x516a 0x5233 +0x516b 0x5239 +0x516c 0x524f +0x516d 0x5244 +0x516e 0x524b +0x516f 0x524c +0x5170 0x525e +0x5171 0x5254 +0x5172 0x526a +0x5173 0x5274 +0x5174 0x5269 +0x5175 0x5273 +0x5176 0x527f +0x5177 0x527d +0x5178 0x528d +0x5179 0x5294 +0x517a 0x5292 +0x517b 0x5271 +0x517c 0x5288 +0x517d 0x5291 +0x517e 0x8fa8 +0x5221 0x8fa7 +0x5222 0x52ac +0x5223 0x52ad +0x5224 0x52bc +0x5225 0x52b5 +0x5226 0x52c1 +0x5227 0x52cd +0x5228 0x52d7 +0x5229 0x52de +0x522a 0x52e3 +0x522b 0x52e6 +0x522c 0x98ed +0x522d 0x52e0 +0x522e 0x52f3 +0x522f 0x52f5 +0x5230 0x52f8 +0x5231 0x52f9 +0x5232 0x5306 +0x5233 0x5308 +0x5234 0x7538 +0x5235 0x530d +0x5236 0x5310 +0x5237 0x530f +0x5238 0x5315 +0x5239 0x531a +0x523a 0x5323 +0x523b 0x532f +0x523c 0x5331 +0x523d 0x5333 +0x523e 0x5338 +0x523f 0x5340 +0x5240 0x5346 +0x5241 0x5345 +0x5242 0x4e17 +0x5243 0x5349 +0x5244 0x534d +0x5245 0x51d6 +0x5246 0x535e +0x5247 0x5369 +0x5248 0x536e +0x5249 0x5918 +0x524a 0x537b +0x524b 0x5377 +0x524c 0x5382 +0x524d 0x5396 +0x524e 0x53a0 +0x524f 0x53a6 +0x5250 0x53a5 +0x5251 0x53ae +0x5252 0x53b0 +0x5253 0x53b6 +0x5254 0x53c3 +0x5255 0x7c12 +0x5256 0x96d9 +0x5257 0x53df +0x5258 0x66fc +0x5259 0x71ee +0x525a 0x53ee +0x525b 0x53e8 +0x525c 0x53ed +0x525d 0x53fa +0x525e 0x5401 +0x525f 0x543d +0x5260 0x5440 +0x5261 0x542c +0x5262 0x542d +0x5263 0x543c +0x5264 0x542e +0x5265 0x5436 +0x5266 0x5429 +0x5267 0x541d +0x5268 0x544e +0x5269 0x548f +0x526a 0x5475 +0x526b 0x548e +0x526c 0x545f +0x526d 0x5471 +0x526e 0x5477 +0x526f 0x5470 +0x5270 0x5492 +0x5271 0x547b +0x5272 0x5480 +0x5273 0x5476 +0x5274 0x5484 +0x5275 0x5490 +0x5276 0x5486 +0x5277 0x54c7 +0x5278 0x54a2 +0x5279 0x54b8 +0x527a 0x54a5 +0x527b 0x54ac +0x527c 0x54c4 +0x527d 0x54c8 +0x527e 0x54a8 +0x5321 0x54ab +0x5322 0x54c2 +0x5323 0x54a4 +0x5324 0x54be +0x5325 0x54bc +0x5326 0x54d8 +0x5327 0x54e5 +0x5328 0x54e6 +0x5329 0x550f +0x532a 0x5514 +0x532b 0x54fd +0x532c 0x54ee +0x532d 0x54ed +0x532e 0x54fa +0x532f 0x54e2 +0x5330 0x5539 +0x5331 0x5540 +0x5332 0x5563 +0x5333 0x554c +0x5334 0x552e +0x5335 0x555c +0x5336 0x5545 +0x5337 0x5556 +0x5338 0x5557 +0x5339 0x5538 +0x533a 0x5533 +0x533b 0x555d +0x533c 0x5599 +0x533d 0x5580 +0x533e 0x54af +0x533f 0x558a +0x5340 0x559f +0x5341 0x557b +0x5342 0x557e +0x5343 0x5598 +0x5344 0x559e +0x5345 0x55ae +0x5346 0x557c +0x5347 0x5583 +0x5348 0x55a9 +0x5349 0x5587 +0x534a 0x55a8 +0x534b 0x55da +0x534c 0x55c5 +0x534d 0x55df +0x534e 0x55c4 +0x534f 0x55dc +0x5350 0x55e4 +0x5351 0x55d4 +0x5352 0x5614 +0x5353 0x55f7 +0x5354 0x5616 +0x5355 0x55fe +0x5356 0x55fd +0x5357 0x561b +0x5358 0x55f9 +0x5359 0x564e +0x535a 0x5650 +0x535b 0x71df +0x535c 0x5634 +0x535d 0x5636 +0x535e 0x5632 +0x535f 0x5638 +0x5360 0x566b +0x5361 0x5664 +0x5362 0x562f +0x5363 0x566c +0x5364 0x566a +0x5365 0x5686 +0x5366 0x5680 +0x5367 0x568a +0x5368 0x56a0 +0x5369 0x5694 +0x536a 0x568f +0x536b 0x56a5 +0x536c 0x56ae +0x536d 0x56b6 +0x536e 0x56b4 +0x536f 0x56c2 +0x5370 0x56bc +0x5371 0x56c1 +0x5372 0x56c3 +0x5373 0x56c0 +0x5374 0x56c8 +0x5375 0x56ce +0x5376 0x56d1 +0x5377 0x56d3 +0x5378 0x56d7 +0x5379 0x56ee +0x537a 0x56f9 +0x537b 0x5700 +0x537c 0x56ff +0x537d 0x5704 +0x537e 0x5709 +0x5421 0x5708 +0x5422 0x570b +0x5423 0x570d +0x5424 0x5713 +0x5425 0x5718 +0x5426 0x5716 +0x5427 0x55c7 +0x5428 0x571c +0x5429 0x5726 +0x542a 0x5737 +0x542b 0x5738 +0x542c 0x574e +0x542d 0x573b +0x542e 0x5740 +0x542f 0x574f +0x5430 0x5769 +0x5431 0x57c0 +0x5432 0x5788 +0x5433 0x5761 +0x5434 0x577f +0x5435 0x5789 +0x5436 0x5793 +0x5437 0x57a0 +0x5438 0x57b3 +0x5439 0x57a4 +0x543a 0x57aa +0x543b 0x57b0 +0x543c 0x57c3 +0x543d 0x57c6 +0x543e 0x57d4 +0x543f 0x57d2 +0x5440 0x57d3 +0x5441 0x580a +0x5442 0x57d6 +0x5443 0x57e3 +0x5444 0x580b +0x5445 0x5819 +0x5446 0x581d +0x5447 0x5872 +0x5448 0x5821 +0x5449 0x5862 +0x544a 0x584b +0x544b 0x5870 +0x544c 0x6bc0 +0x544d 0x5852 +0x544e 0x583d +0x544f 0x5879 +0x5450 0x5885 +0x5451 0x58b9 +0x5452 0x589f +0x5453 0x58ab +0x5454 0x58ba +0x5455 0x58de +0x5456 0x58bb +0x5457 0x58b8 +0x5458 0x58ae +0x5459 0x58c5 +0x545a 0x58d3 +0x545b 0x58d1 +0x545c 0x58d7 +0x545d 0x58d9 +0x545e 0x58d8 +0x545f 0x58e5 +0x5460 0x58dc +0x5461 0x58e4 +0x5462 0x58df +0x5463 0x58ef +0x5464 0x58fa +0x5465 0x58f9 +0x5466 0x58fb +0x5467 0x58fc +0x5468 0x58fd +0x5469 0x5902 +0x546a 0x590a +0x546b 0x5910 +0x546c 0x591b +0x546d 0x68a6 +0x546e 0x5925 +0x546f 0x592c +0x5470 0x592d +0x5471 0x5932 +0x5472 0x5938 +0x5473 0x593e +0x5474 0x7ad2 +0x5475 0x5955 +0x5476 0x5950 +0x5477 0x594e +0x5478 0x595a +0x5479 0x5958 +0x547a 0x5962 +0x547b 0x5960 +0x547c 0x5967 +0x547d 0x596c +0x547e 0x5969 +0x5521 0x5978 +0x5522 0x5981 +0x5523 0x599d +0x5524 0x4f5e +0x5525 0x4fab +0x5526 0x59a3 +0x5527 0x59b2 +0x5528 0x59c6 +0x5529 0x59e8 +0x552a 0x59dc +0x552b 0x598d +0x552c 0x59d9 +0x552d 0x59da +0x552e 0x5a25 +0x552f 0x5a1f +0x5530 0x5a11 +0x5531 0x5a1c +0x5532 0x5a09 +0x5533 0x5a1a +0x5534 0x5a40 +0x5535 0x5a6c +0x5536 0x5a49 +0x5537 0x5a35 +0x5538 0x5a36 +0x5539 0x5a62 +0x553a 0x5a6a +0x553b 0x5a9a +0x553c 0x5abc +0x553d 0x5abe +0x553e 0x5acb +0x553f 0x5ac2 +0x5540 0x5abd +0x5541 0x5ae3 +0x5542 0x5ad7 +0x5543 0x5ae6 +0x5544 0x5ae9 +0x5545 0x5ad6 +0x5546 0x5afa +0x5547 0x5afb +0x5548 0x5b0c +0x5549 0x5b0b +0x554a 0x5b16 +0x554b 0x5b32 +0x554c 0x5ad0 +0x554d 0x5b2a +0x554e 0x5b36 +0x554f 0x5b3e +0x5550 0x5b43 +0x5551 0x5b45 +0x5552 0x5b40 +0x5553 0x5b51 +0x5554 0x5b55 +0x5555 0x5b5a +0x5556 0x5b5b +0x5557 0x5b65 +0x5558 0x5b69 +0x5559 0x5b70 +0x555a 0x5b73 +0x555b 0x5b75 +0x555c 0x5b78 +0x555d 0x6588 +0x555e 0x5b7a +0x555f 0x5b80 +0x5560 0x5b83 +0x5561 0x5ba6 +0x5562 0x5bb8 +0x5563 0x5bc3 +0x5564 0x5bc7 +0x5565 0x5bc9 +0x5566 0x5bd4 +0x5567 0x5bd0 +0x5568 0x5be4 +0x5569 0x5be6 +0x556a 0x5be2 +0x556b 0x5bde +0x556c 0x5be5 +0x556d 0x5beb +0x556e 0x5bf0 +0x556f 0x5bf6 +0x5570 0x5bf3 +0x5571 0x5c05 +0x5572 0x5c07 +0x5573 0x5c08 +0x5574 0x5c0d +0x5575 0x5c13 +0x5576 0x5c20 +0x5577 0x5c22 +0x5578 0x5c28 +0x5579 0x5c38 +0x557a 0x5c39 +0x557b 0x5c41 +0x557c 0x5c46 +0x557d 0x5c4e +0x557e 0x5c53 +0x5621 0x5c50 +0x5622 0x5c4f +0x5623 0x5b71 +0x5624 0x5c6c +0x5625 0x5c6e +0x5626 0x4e62 +0x5627 0x5c76 +0x5628 0x5c79 +0x5629 0x5c8c +0x562a 0x5c91 +0x562b 0x5c94 +0x562c 0x599b +0x562d 0x5cab +0x562e 0x5cbb +0x562f 0x5cb6 +0x5630 0x5cbc +0x5631 0x5cb7 +0x5632 0x5cc5 +0x5633 0x5cbe +0x5634 0x5cc7 +0x5635 0x5cd9 +0x5636 0x5ce9 +0x5637 0x5cfd +0x5638 0x5cfa +0x5639 0x5ced +0x563a 0x5d8c +0x563b 0x5cea +0x563c 0x5d0b +0x563d 0x5d15 +0x563e 0x5d17 +0x563f 0x5d5c +0x5640 0x5d1f +0x5641 0x5d1b +0x5642 0x5d11 +0x5643 0x5d14 +0x5644 0x5d22 +0x5645 0x5d1a +0x5646 0x5d19 +0x5647 0x5d18 +0x5648 0x5d4c +0x5649 0x5d52 +0x564a 0x5d4e +0x564b 0x5d4b +0x564c 0x5d6c +0x564d 0x5d73 +0x564e 0x5d76 +0x564f 0x5d87 +0x5650 0x5d84 +0x5651 0x5d82 +0x5652 0x5da2 +0x5653 0x5d9d +0x5654 0x5dac +0x5655 0x5dae +0x5656 0x5dbd +0x5657 0x5d90 +0x5658 0x5db7 +0x5659 0x5dbc +0x565a 0x5dc9 +0x565b 0x5dcd +0x565c 0x5dd3 +0x565d 0x5dd2 +0x565e 0x5dd6 +0x565f 0x5ddb +0x5660 0x5deb +0x5661 0x5df2 +0x5662 0x5df5 +0x5663 0x5e0b +0x5664 0x5e1a +0x5665 0x5e19 +0x5666 0x5e11 +0x5667 0x5e1b +0x5668 0x5e36 +0x5669 0x5e37 +0x566a 0x5e44 +0x566b 0x5e43 +0x566c 0x5e40 +0x566d 0x5e4e +0x566e 0x5e57 +0x566f 0x5e54 +0x5670 0x5e5f +0x5671 0x5e62 +0x5672 0x5e64 +0x5673 0x5e47 +0x5674 0x5e75 +0x5675 0x5e76 +0x5676 0x5e7a +0x5677 0x9ebc +0x5678 0x5e7f +0x5679 0x5ea0 +0x567a 0x5ec1 +0x567b 0x5ec2 +0x567c 0x5ec8 +0x567d 0x5ed0 +0x567e 0x5ecf +0x5721 0x5ed6 +0x5722 0x5ee3 +0x5723 0x5edd +0x5724 0x5eda +0x5725 0x5edb +0x5726 0x5ee2 +0x5727 0x5ee1 +0x5728 0x5ee8 +0x5729 0x5ee9 +0x572a 0x5eec +0x572b 0x5ef1 +0x572c 0x5ef3 +0x572d 0x5ef0 +0x572e 0x5ef4 +0x572f 0x5ef8 +0x5730 0x5efe +0x5731 0x5f03 +0x5732 0x5f09 +0x5733 0x5f5d +0x5734 0x5f5c +0x5735 0x5f0b +0x5736 0x5f11 +0x5737 0x5f16 +0x5738 0x5f29 +0x5739 0x5f2d +0x573a 0x5f38 +0x573b 0x5f41 +0x573c 0x5f48 +0x573d 0x5f4c +0x573e 0x5f4e +0x573f 0x5f2f +0x5740 0x5f51 +0x5741 0x5f56 +0x5742 0x5f57 +0x5743 0x5f59 +0x5744 0x5f61 +0x5745 0x5f6d +0x5746 0x5f73 +0x5747 0x5f77 +0x5748 0x5f83 +0x5749 0x5f82 +0x574a 0x5f7f +0x574b 0x5f8a +0x574c 0x5f88 +0x574d 0x5f91 +0x574e 0x5f87 +0x574f 0x5f9e +0x5750 0x5f99 +0x5751 0x5f98 +0x5752 0x5fa0 +0x5753 0x5fa8 +0x5754 0x5fad +0x5755 0x5fbc +0x5756 0x5fd6 +0x5757 0x5ffb +0x5758 0x5fe4 +0x5759 0x5ff8 +0x575a 0x5ff1 +0x575b 0x5fdd +0x575c 0x60b3 +0x575d 0x5fff +0x575e 0x6021 +0x575f 0x6060 +0x5760 0x6019 +0x5761 0x6010 +0x5762 0x6029 +0x5763 0x600e +0x5764 0x6031 +0x5765 0x601b +0x5766 0x6015 +0x5767 0x602b +0x5768 0x6026 +0x5769 0x600f +0x576a 0x603a +0x576b 0x605a +0x576c 0x6041 +0x576d 0x606a +0x576e 0x6077 +0x576f 0x605f +0x5770 0x604a +0x5771 0x6046 +0x5772 0x604d +0x5773 0x6063 +0x5774 0x6043 +0x5775 0x6064 +0x5776 0x6042 +0x5777 0x606c +0x5778 0x606b +0x5779 0x6059 +0x577a 0x6081 +0x577b 0x608d +0x577c 0x60e7 +0x577d 0x6083 +0x577e 0x609a +0x5821 0x6084 +0x5822 0x609b +0x5823 0x6096 +0x5824 0x6097 +0x5825 0x6092 +0x5826 0x60a7 +0x5827 0x608b +0x5828 0x60e1 +0x5829 0x60b8 +0x582a 0x60e0 +0x582b 0x60d3 +0x582c 0x60b4 +0x582d 0x5ff0 +0x582e 0x60bd +0x582f 0x60c6 +0x5830 0x60b5 +0x5831 0x60d8 +0x5832 0x614d +0x5833 0x6115 +0x5834 0x6106 +0x5835 0x60f6 +0x5836 0x60f7 +0x5837 0x6100 +0x5838 0x60f4 +0x5839 0x60fa +0x583a 0x6103 +0x583b 0x6121 +0x583c 0x60fb +0x583d 0x60f1 +0x583e 0x610d +0x583f 0x610e +0x5840 0x6147 +0x5841 0x613e +0x5842 0x6128 +0x5843 0x6127 +0x5844 0x614a +0x5845 0x613f +0x5846 0x613c +0x5847 0x612c +0x5848 0x6134 +0x5849 0x613d +0x584a 0x6142 +0x584b 0x6144 +0x584c 0x6173 +0x584d 0x6177 +0x584e 0x6158 +0x584f 0x6159 +0x5850 0x615a +0x5851 0x616b +0x5852 0x6174 +0x5853 0x616f +0x5854 0x6165 +0x5855 0x6171 +0x5856 0x615f +0x5857 0x615d +0x5858 0x6153 +0x5859 0x6175 +0x585a 0x6199 +0x585b 0x6196 +0x585c 0x6187 +0x585d 0x61ac +0x585e 0x6194 +0x585f 0x619a +0x5860 0x618a +0x5861 0x6191 +0x5862 0x61ab +0x5863 0x61ae +0x5864 0x61cc +0x5865 0x61ca +0x5866 0x61c9 +0x5867 0x61f7 +0x5868 0x61c8 +0x5869 0x61c3 +0x586a 0x61c6 +0x586b 0x61ba +0x586c 0x61cb +0x586d 0x7f79 +0x586e 0x61cd +0x586f 0x61e6 +0x5870 0x61e3 +0x5871 0x61f6 +0x5872 0x61fa +0x5873 0x61f4 +0x5874 0x61ff +0x5875 0x61fd +0x5876 0x61fc +0x5877 0x61fe +0x5878 0x6200 +0x5879 0x6208 +0x587a 0x6209 +0x587b 0x620d +0x587c 0x620c +0x587d 0x6214 +0x587e 0x621b +0x5921 0x621e +0x5922 0x6221 +0x5923 0x622a +0x5924 0x622e +0x5925 0x6230 +0x5926 0x6232 +0x5927 0x6233 +0x5928 0x6241 +0x5929 0x624e +0x592a 0x625e +0x592b 0x6263 +0x592c 0x625b +0x592d 0x6260 +0x592e 0x6268 +0x592f 0x627c +0x5930 0x6282 +0x5931 0x6289 +0x5932 0x627e +0x5933 0x6292 +0x5934 0x6293 +0x5935 0x6296 +0x5936 0x62d4 +0x5937 0x6283 +0x5938 0x6294 +0x5939 0x62d7 +0x593a 0x62d1 +0x593b 0x62bb +0x593c 0x62cf +0x593d 0x62ff +0x593e 0x62c6 +0x593f 0x64d4 +0x5940 0x62c8 +0x5941 0x62dc +0x5942 0x62cc +0x5943 0x62ca +0x5944 0x62c2 +0x5945 0x62c7 +0x5946 0x629b +0x5947 0x62c9 +0x5948 0x630c +0x5949 0x62ee +0x594a 0x62f1 +0x594b 0x6327 +0x594c 0x6302 +0x594d 0x6308 +0x594e 0x62ef +0x594f 0x62f5 +0x5950 0x6350 +0x5951 0x633e +0x5952 0x634d +0x5953 0x641c +0x5954 0x634f +0x5955 0x6396 +0x5956 0x638e +0x5957 0x6380 +0x5958 0x63ab +0x5959 0x6376 +0x595a 0x63a3 +0x595b 0x638f +0x595c 0x6389 +0x595d 0x639f +0x595e 0x63b5 +0x595f 0x636b +0x5960 0x6369 +0x5961 0x63be +0x5962 0x63e9 +0x5963 0x63c0 +0x5964 0x63c6 +0x5965 0x63e3 +0x5966 0x63c9 +0x5967 0x63d2 +0x5968 0x63f6 +0x5969 0x63c4 +0x596a 0x6416 +0x596b 0x6434 +0x596c 0x6406 +0x596d 0x6413 +0x596e 0x6426 +0x596f 0x6436 +0x5970 0x651d +0x5971 0x6417 +0x5972 0x6428 +0x5973 0x640f +0x5974 0x6467 +0x5975 0x646f +0x5976 0x6476 +0x5977 0x644e +0x5978 0x652a +0x5979 0x6495 +0x597a 0x6493 +0x597b 0x64a5 +0x597c 0x64a9 +0x597d 0x6488 +0x597e 0x64bc +0x5a21 0x64da +0x5a22 0x64d2 +0x5a23 0x64c5 +0x5a24 0x64c7 +0x5a25 0x64bb +0x5a26 0x64d8 +0x5a27 0x64c2 +0x5a28 0x64f1 +0x5a29 0x64e7 +0x5a2a 0x8209 +0x5a2b 0x64e0 +0x5a2c 0x64e1 +0x5a2d 0x62ac +0x5a2e 0x64e3 +0x5a2f 0x64ef +0x5a30 0x652c +0x5a31 0x64f6 +0x5a32 0x64f4 +0x5a33 0x64f2 +0x5a34 0x64fa +0x5a35 0x6500 +0x5a36 0x64fd +0x5a37 0x6518 +0x5a38 0x651c +0x5a39 0x6505 +0x5a3a 0x6524 +0x5a3b 0x6523 +0x5a3c 0x652b +0x5a3d 0x6534 +0x5a3e 0x6535 +0x5a3f 0x6537 +0x5a40 0x6536 +0x5a41 0x6538 +0x5a42 0x754b +0x5a43 0x6548 +0x5a44 0x6556 +0x5a45 0x6555 +0x5a46 0x654d +0x5a47 0x6558 +0x5a48 0x655e +0x5a49 0x655d +0x5a4a 0x6572 +0x5a4b 0x6578 +0x5a4c 0x6582 +0x5a4d 0x6583 +0x5a4e 0x8b8a +0x5a4f 0x659b +0x5a50 0x659f +0x5a51 0x65ab +0x5a52 0x65b7 +0x5a53 0x65c3 +0x5a54 0x65c6 +0x5a55 0x65c1 +0x5a56 0x65c4 +0x5a57 0x65cc +0x5a58 0x65d2 +0x5a59 0x65db +0x5a5a 0x65d9 +0x5a5b 0x65e0 +0x5a5c 0x65e1 +0x5a5d 0x65f1 +0x5a5e 0x6772 +0x5a5f 0x660a +0x5a60 0x6603 +0x5a61 0x65fb +0x5a62 0x6773 +0x5a63 0x6635 +0x5a64 0x6636 +0x5a65 0x6634 +0x5a66 0x661c +0x5a67 0x664f +0x5a68 0x6644 +0x5a69 0x6649 +0x5a6a 0x6641 +0x5a6b 0x665e +0x5a6c 0x665d +0x5a6d 0x6664 +0x5a6e 0x6667 +0x5a6f 0x6668 +0x5a70 0x665f +0x5a71 0x6662 +0x5a72 0x6670 +0x5a73 0x6683 +0x5a74 0x6688 +0x5a75 0x668e +0x5a76 0x6689 +0x5a77 0x6684 +0x5a78 0x6698 +0x5a79 0x669d +0x5a7a 0x66c1 +0x5a7b 0x66b9 +0x5a7c 0x66c9 +0x5a7d 0x66be +0x5a7e 0x66bc +0x5b21 0x66c4 +0x5b22 0x66b8 +0x5b23 0x66d6 +0x5b24 0x66da +0x5b25 0x66e0 +0x5b26 0x663f +0x5b27 0x66e6 +0x5b28 0x66e9 +0x5b29 0x66f0 +0x5b2a 0x66f5 +0x5b2b 0x66f7 +0x5b2c 0x670f +0x5b2d 0x6716 +0x5b2e 0x671e +0x5b2f 0x6726 +0x5b30 0x6727 +0x5b31 0x9738 +0x5b32 0x672e +0x5b33 0x673f +0x5b34 0x6736 +0x5b35 0x6741 +0x5b36 0x6738 +0x5b37 0x6737 +0x5b38 0x6746 +0x5b39 0x675e +0x5b3a 0x6760 +0x5b3b 0x6759 +0x5b3c 0x6763 +0x5b3d 0x6764 +0x5b3e 0x6789 +0x5b3f 0x6770 +0x5b40 0x67a9 +0x5b41 0x677c +0x5b42 0x676a +0x5b43 0x678c +0x5b44 0x678b +0x5b45 0x67a6 +0x5b46 0x67a1 +0x5b47 0x6785 +0x5b48 0x67b7 +0x5b49 0x67ef +0x5b4a 0x67b4 +0x5b4b 0x67ec +0x5b4c 0x67b3 +0x5b4d 0x67e9 +0x5b4e 0x67b8 +0x5b4f 0x67e4 +0x5b50 0x67de +0x5b51 0x67dd +0x5b52 0x67e2 +0x5b53 0x67ee +0x5b54 0x67b9 +0x5b55 0x67ce +0x5b56 0x67c6 +0x5b57 0x67e7 +0x5b58 0x6a9c +0x5b59 0x681e +0x5b5a 0x6846 +0x5b5b 0x6829 +0x5b5c 0x6840 +0x5b5d 0x684d +0x5b5e 0x6832 +0x5b5f 0x684e +0x5b60 0x68b3 +0x5b61 0x682b +0x5b62 0x6859 +0x5b63 0x6863 +0x5b64 0x6877 +0x5b65 0x687f +0x5b66 0x689f +0x5b67 0x688f +0x5b68 0x68ad +0x5b69 0x6894 +0x5b6a 0x689d +0x5b6b 0x689b +0x5b6c 0x6883 +0x5b6d 0x6aae +0x5b6e 0x68b9 +0x5b6f 0x6874 +0x5b70 0x68b5 +0x5b71 0x68a0 +0x5b72 0x68ba +0x5b73 0x690f +0x5b74 0x688d +0x5b75 0x687e +0x5b76 0x6901 +0x5b77 0x68ca +0x5b78 0x6908 +0x5b79 0x68d8 +0x5b7a 0x6922 +0x5b7b 0x6926 +0x5b7c 0x68e1 +0x5b7d 0x690c +0x5b7e 0x68cd +0x5c21 0x68d4 +0x5c22 0x68e7 +0x5c23 0x68d5 +0x5c24 0x6936 +0x5c25 0x6912 +0x5c26 0x6904 +0x5c27 0x68d7 +0x5c28 0x68e3 +0x5c29 0x6925 +0x5c2a 0x68f9 +0x5c2b 0x68e0 +0x5c2c 0x68ef +0x5c2d 0x6928 +0x5c2e 0x692a +0x5c2f 0x691a +0x5c30 0x6923 +0x5c31 0x6921 +0x5c32 0x68c6 +0x5c33 0x6979 +0x5c34 0x6977 +0x5c35 0x695c +0x5c36 0x6978 +0x5c37 0x696b +0x5c38 0x6954 +0x5c39 0x697e +0x5c3a 0x696e +0x5c3b 0x6939 +0x5c3c 0x6974 +0x5c3d 0x693d +0x5c3e 0x6959 +0x5c3f 0x6930 +0x5c40 0x6961 +0x5c41 0x695e +0x5c42 0x695d +0x5c43 0x6981 +0x5c44 0x696a +0x5c45 0x69b2 +0x5c46 0x69ae +0x5c47 0x69d0 +0x5c48 0x69bf +0x5c49 0x69c1 +0x5c4a 0x69d3 +0x5c4b 0x69be +0x5c4c 0x69ce +0x5c4d 0x5be8 +0x5c4e 0x69ca +0x5c4f 0x69dd +0x5c50 0x69bb +0x5c51 0x69c3 +0x5c52 0x69a7 +0x5c53 0x6a2e +0x5c54 0x6991 +0x5c55 0x69a0 +0x5c56 0x699c +0x5c57 0x6995 +0x5c58 0x69b4 +0x5c59 0x69de +0x5c5a 0x69e8 +0x5c5b 0x6a02 +0x5c5c 0x6a1b +0x5c5d 0x69ff +0x5c5e 0x6b0a +0x5c5f 0x69f9 +0x5c60 0x69f2 +0x5c61 0x69e7 +0x5c62 0x6a05 +0x5c63 0x69b1 +0x5c64 0x6a1e +0x5c65 0x69ed +0x5c66 0x6a14 +0x5c67 0x69eb +0x5c68 0x6a0a +0x5c69 0x6a12 +0x5c6a 0x6ac1 +0x5c6b 0x6a23 +0x5c6c 0x6a13 +0x5c6d 0x6a44 +0x5c6e 0x6a0c +0x5c6f 0x6a72 +0x5c70 0x6a36 +0x5c71 0x6a78 +0x5c72 0x6a47 +0x5c73 0x6a62 +0x5c74 0x6a59 +0x5c75 0x6a66 +0x5c76 0x6a48 +0x5c77 0x6a38 +0x5c78 0x6a22 +0x5c79 0x6a90 +0x5c7a 0x6a8d +0x5c7b 0x6aa0 +0x5c7c 0x6a84 +0x5c7d 0x6aa2 +0x5c7e 0x6aa3 +0x5d21 0x6a97 +0x5d22 0x8617 +0x5d23 0x6abb +0x5d24 0x6ac3 +0x5d25 0x6ac2 +0x5d26 0x6ab8 +0x5d27 0x6ab3 +0x5d28 0x6aac +0x5d29 0x6ade +0x5d2a 0x6ad1 +0x5d2b 0x6adf +0x5d2c 0x6aaa +0x5d2d 0x6ada +0x5d2e 0x6aea +0x5d2f 0x6afb +0x5d30 0x6b05 +0x5d31 0x8616 +0x5d32 0x6afa +0x5d33 0x6b12 +0x5d34 0x6b16 +0x5d35 0x9b31 +0x5d36 0x6b1f +0x5d37 0x6b38 +0x5d38 0x6b37 +0x5d39 0x76dc +0x5d3a 0x6b39 +0x5d3b 0x98ee +0x5d3c 0x6b47 +0x5d3d 0x6b43 +0x5d3e 0x6b49 +0x5d3f 0x6b50 +0x5d40 0x6b59 +0x5d41 0x6b54 +0x5d42 0x6b5b +0x5d43 0x6b5f +0x5d44 0x6b61 +0x5d45 0x6b78 +0x5d46 0x6b79 +0x5d47 0x6b7f +0x5d48 0x6b80 +0x5d49 0x6b84 +0x5d4a 0x6b83 +0x5d4b 0x6b8d +0x5d4c 0x6b98 +0x5d4d 0x6b95 +0x5d4e 0x6b9e +0x5d4f 0x6ba4 +0x5d50 0x6baa +0x5d51 0x6bab +0x5d52 0x6baf +0x5d53 0x6bb2 +0x5d54 0x6bb1 +0x5d55 0x6bb3 +0x5d56 0x6bb7 +0x5d57 0x6bbc +0x5d58 0x6bc6 +0x5d59 0x6bcb +0x5d5a 0x6bd3 +0x5d5b 0x6bdf +0x5d5c 0x6bec +0x5d5d 0x6beb +0x5d5e 0x6bf3 +0x5d5f 0x6bef +0x5d60 0x9ebe +0x5d61 0x6c08 +0x5d62 0x6c13 +0x5d63 0x6c14 +0x5d64 0x6c1b +0x5d65 0x6c24 +0x5d66 0x6c23 +0x5d67 0x6c5e +0x5d68 0x6c55 +0x5d69 0x6c62 +0x5d6a 0x6c6a +0x5d6b 0x6c82 +0x5d6c 0x6c8d +0x5d6d 0x6c9a +0x5d6e 0x6c81 +0x5d6f 0x6c9b +0x5d70 0x6c7e +0x5d71 0x6c68 +0x5d72 0x6c73 +0x5d73 0x6c92 +0x5d74 0x6c90 +0x5d75 0x6cc4 +0x5d76 0x6cf1 +0x5d77 0x6cd3 +0x5d78 0x6cbd +0x5d79 0x6cd7 +0x5d7a 0x6cc5 +0x5d7b 0x6cdd +0x5d7c 0x6cae +0x5d7d 0x6cb1 +0x5d7e 0x6cbe +0x5e21 0x6cba +0x5e22 0x6cdb +0x5e23 0x6cef +0x5e24 0x6cd9 +0x5e25 0x6cea +0x5e26 0x6d1f +0x5e27 0x884d +0x5e28 0x6d36 +0x5e29 0x6d2b +0x5e2a 0x6d3d +0x5e2b 0x6d38 +0x5e2c 0x6d19 +0x5e2d 0x6d35 +0x5e2e 0x6d33 +0x5e2f 0x6d12 +0x5e30 0x6d0c +0x5e31 0x6d63 +0x5e32 0x6d93 +0x5e33 0x6d64 +0x5e34 0x6d5a +0x5e35 0x6d79 +0x5e36 0x6d59 +0x5e37 0x6d8e +0x5e38 0x6d95 +0x5e39 0x6fe4 +0x5e3a 0x6d85 +0x5e3b 0x6df9 +0x5e3c 0x6e15 +0x5e3d 0x6e0a +0x5e3e 0x6db5 +0x5e3f 0x6dc7 +0x5e40 0x6de6 +0x5e41 0x6db8 +0x5e42 0x6dc6 +0x5e43 0x6dec +0x5e44 0x6dde +0x5e45 0x6dcc +0x5e46 0x6de8 +0x5e47 0x6dd2 +0x5e48 0x6dc5 +0x5e49 0x6dfa +0x5e4a 0x6dd9 +0x5e4b 0x6de4 +0x5e4c 0x6dd5 +0x5e4d 0x6dea +0x5e4e 0x6dee +0x5e4f 0x6e2d +0x5e50 0x6e6e +0x5e51 0x6e2e +0x5e52 0x6e19 +0x5e53 0x6e72 +0x5e54 0x6e5f +0x5e55 0x6e3e +0x5e56 0x6e23 +0x5e57 0x6e6b +0x5e58 0x6e2b +0x5e59 0x6e76 +0x5e5a 0x6e4d +0x5e5b 0x6e1f +0x5e5c 0x6e43 +0x5e5d 0x6e3a +0x5e5e 0x6e4e +0x5e5f 0x6e24 +0x5e60 0x6eff +0x5e61 0x6e1d +0x5e62 0x6e38 +0x5e63 0x6e82 +0x5e64 0x6eaa +0x5e65 0x6e98 +0x5e66 0x6ec9 +0x5e67 0x6eb7 +0x5e68 0x6ed3 +0x5e69 0x6ebd +0x5e6a 0x6eaf +0x5e6b 0x6ec4 +0x5e6c 0x6eb2 +0x5e6d 0x6ed4 +0x5e6e 0x6ed5 +0x5e6f 0x6e8f +0x5e70 0x6ea5 +0x5e71 0x6ec2 +0x5e72 0x6e9f +0x5e73 0x6f41 +0x5e74 0x6f11 +0x5e75 0x704c +0x5e76 0x6eec +0x5e77 0x6ef8 +0x5e78 0x6efe +0x5e79 0x6f3f +0x5e7a 0x6ef2 +0x5e7b 0x6f31 +0x5e7c 0x6eef +0x5e7d 0x6f32 +0x5e7e 0x6ecc +0x5f21 0x6f3e +0x5f22 0x6f13 +0x5f23 0x6ef7 +0x5f24 0x6f86 +0x5f25 0x6f7a +0x5f26 0x6f78 +0x5f27 0x6f81 +0x5f28 0x6f80 +0x5f29 0x6f6f +0x5f2a 0x6f5b +0x5f2b 0x6ff3 +0x5f2c 0x6f6d +0x5f2d 0x6f82 +0x5f2e 0x6f7c +0x5f2f 0x6f58 +0x5f30 0x6f8e +0x5f31 0x6f91 +0x5f32 0x6fc2 +0x5f33 0x6f66 +0x5f34 0x6fb3 +0x5f35 0x6fa3 +0x5f36 0x6fa1 +0x5f37 0x6fa4 +0x5f38 0x6fb9 +0x5f39 0x6fc6 +0x5f3a 0x6faa +0x5f3b 0x6fdf +0x5f3c 0x6fd5 +0x5f3d 0x6fec +0x5f3e 0x6fd4 +0x5f3f 0x6fd8 +0x5f40 0x6ff1 +0x5f41 0x6fee +0x5f42 0x6fdb +0x5f43 0x7009 +0x5f44 0x700b +0x5f45 0x6ffa +0x5f46 0x7011 +0x5f47 0x7001 +0x5f48 0x700f +0x5f49 0x6ffe +0x5f4a 0x701b +0x5f4b 0x701a +0x5f4c 0x6f74 +0x5f4d 0x701d +0x5f4e 0x7018 +0x5f4f 0x701f +0x5f50 0x7030 +0x5f51 0x703e +0x5f52 0x7032 +0x5f53 0x7051 +0x5f54 0x7063 +0x5f55 0x7099 +0x5f56 0x7092 +0x5f57 0x70af +0x5f58 0x70f1 +0x5f59 0x70ac +0x5f5a 0x70b8 +0x5f5b 0x70b3 +0x5f5c 0x70ae +0x5f5d 0x70df +0x5f5e 0x70cb +0x5f5f 0x70dd +0x5f60 0x70d9 +0x5f61 0x7109 +0x5f62 0x70fd +0x5f63 0x711c +0x5f64 0x7119 +0x5f65 0x7165 +0x5f66 0x7155 +0x5f67 0x7188 +0x5f68 0x7166 +0x5f69 0x7162 +0x5f6a 0x714c +0x5f6b 0x7156 +0x5f6c 0x716c +0x5f6d 0x718f +0x5f6e 0x71fb +0x5f6f 0x7184 +0x5f70 0x7195 +0x5f71 0x71a8 +0x5f72 0x71ac +0x5f73 0x71d7 +0x5f74 0x71b9 +0x5f75 0x71be +0x5f76 0x71d2 +0x5f77 0x71c9 +0x5f78 0x71d4 +0x5f79 0x71ce +0x5f7a 0x71e0 +0x5f7b 0x71ec +0x5f7c 0x71e7 +0x5f7d 0x71f5 +0x5f7e 0x71fc +0x6021 0x71f9 +0x6022 0x71ff +0x6023 0x720d +0x6024 0x7210 +0x6025 0x721b +0x6026 0x7228 +0x6027 0x722d +0x6028 0x722c +0x6029 0x7230 +0x602a 0x7232 +0x602b 0x723b +0x602c 0x723c +0x602d 0x723f +0x602e 0x7240 +0x602f 0x7246 +0x6030 0x724b +0x6031 0x7258 +0x6032 0x7274 +0x6033 0x727e +0x6034 0x7282 +0x6035 0x7281 +0x6036 0x7287 +0x6037 0x7292 +0x6038 0x7296 +0x6039 0x72a2 +0x603a 0x72a7 +0x603b 0x72b9 +0x603c 0x72b2 +0x603d 0x72c3 +0x603e 0x72c6 +0x603f 0x72c4 +0x6040 0x72ce +0x6041 0x72d2 +0x6042 0x72e2 +0x6043 0x72e0 +0x6044 0x72e1 +0x6045 0x72f9 +0x6046 0x72f7 +0x6047 0x500f +0x6048 0x7317 +0x6049 0x730a +0x604a 0x731c +0x604b 0x7316 +0x604c 0x731d +0x604d 0x7334 +0x604e 0x732f +0x604f 0x7329 +0x6050 0x7325 +0x6051 0x733e +0x6052 0x734e +0x6053 0x734f +0x6054 0x9ed8 +0x6055 0x7357 +0x6056 0x736a +0x6057 0x7368 +0x6058 0x7370 +0x6059 0x7378 +0x605a 0x7375 +0x605b 0x737b +0x605c 0x737a +0x605d 0x73c8 +0x605e 0x73b3 +0x605f 0x73ce +0x6060 0x73bb +0x6061 0x73c0 +0x6062 0x73e5 +0x6063 0x73ee +0x6064 0x73de +0x6065 0x74a2 +0x6066 0x7405 +0x6067 0x746f +0x6068 0x7425 +0x6069 0x73f8 +0x606a 0x7432 +0x606b 0x743a +0x606c 0x7455 +0x606d 0x743f +0x606e 0x745f +0x606f 0x7459 +0x6070 0x7441 +0x6071 0x745c +0x6072 0x7469 +0x6073 0x7470 +0x6074 0x7463 +0x6075 0x746a +0x6076 0x7476 +0x6077 0x747e +0x6078 0x748b +0x6079 0x749e +0x607a 0x74a7 +0x607b 0x74ca +0x607c 0x74cf +0x607d 0x74d4 +0x607e 0x73f1 +0x6121 0x74e0 +0x6122 0x74e3 +0x6123 0x74e7 +0x6124 0x74e9 +0x6125 0x74ee +0x6126 0x74f2 +0x6127 0x74f0 +0x6128 0x74f1 +0x6129 0x74f8 +0x612a 0x74f7 +0x612b 0x7504 +0x612c 0x7503 +0x612d 0x7505 +0x612e 0x750c +0x612f 0x750e +0x6130 0x750d +0x6131 0x7515 +0x6132 0x7513 +0x6133 0x751e +0x6134 0x7526 +0x6135 0x752c +0x6136 0x753c +0x6137 0x7544 +0x6138 0x754d +0x6139 0x754a +0x613a 0x7549 +0x613b 0x755b +0x613c 0x7546 +0x613d 0x755a +0x613e 0x7569 +0x613f 0x7564 +0x6140 0x7567 +0x6141 0x756b +0x6142 0x756d +0x6143 0x7578 +0x6144 0x7576 +0x6145 0x7586 +0x6146 0x7587 +0x6147 0x7574 +0x6148 0x758a +0x6149 0x7589 +0x614a 0x7582 +0x614b 0x7594 +0x614c 0x759a +0x614d 0x759d +0x614e 0x75a5 +0x614f 0x75a3 +0x6150 0x75c2 +0x6151 0x75b3 +0x6152 0x75c3 +0x6153 0x75b5 +0x6154 0x75bd +0x6155 0x75b8 +0x6156 0x75bc +0x6157 0x75b1 +0x6158 0x75cd +0x6159 0x75ca +0x615a 0x75d2 +0x615b 0x75d9 +0x615c 0x75e3 +0x615d 0x75de +0x615e 0x75fe +0x615f 0x75ff +0x6160 0x75fc +0x6161 0x7601 +0x6162 0x75f0 +0x6163 0x75fa +0x6164 0x75f2 +0x6165 0x75f3 +0x6166 0x760b +0x6167 0x760d +0x6168 0x7609 +0x6169 0x761f +0x616a 0x7627 +0x616b 0x7620 +0x616c 0x7621 +0x616d 0x7622 +0x616e 0x7624 +0x616f 0x7634 +0x6170 0x7630 +0x6171 0x763b +0x6172 0x7647 +0x6173 0x7648 +0x6174 0x7646 +0x6175 0x765c +0x6176 0x7658 +0x6177 0x7661 +0x6178 0x7662 +0x6179 0x7668 +0x617a 0x7669 +0x617b 0x766a +0x617c 0x7667 +0x617d 0x766c +0x617e 0x7670 +0x6221 0x7672 +0x6222 0x7676 +0x6223 0x7678 +0x6224 0x767c +0x6225 0x7680 +0x6226 0x7683 +0x6227 0x7688 +0x6228 0x768b +0x6229 0x768e +0x622a 0x7696 +0x622b 0x7693 +0x622c 0x7699 +0x622d 0x769a +0x622e 0x76b0 +0x622f 0x76b4 +0x6230 0x76b8 +0x6231 0x76b9 +0x6232 0x76ba +0x6233 0x76c2 +0x6234 0x76cd +0x6235 0x76d6 +0x6236 0x76d2 +0x6237 0x76de +0x6238 0x76e1 +0x6239 0x76e5 +0x623a 0x76e7 +0x623b 0x76ea +0x623c 0x862f +0x623d 0x76fb +0x623e 0x7708 +0x623f 0x7707 +0x6240 0x7704 +0x6241 0x7729 +0x6242 0x7724 +0x6243 0x771e +0x6244 0x7725 +0x6245 0x7726 +0x6246 0x771b +0x6247 0x7737 +0x6248 0x7738 +0x6249 0x7747 +0x624a 0x775a +0x624b 0x7768 +0x624c 0x776b +0x624d 0x775b +0x624e 0x7765 +0x624f 0x777f +0x6250 0x777e +0x6251 0x7779 +0x6252 0x778e +0x6253 0x778b +0x6254 0x7791 +0x6255 0x77a0 +0x6256 0x779e +0x6257 0x77b0 +0x6258 0x77b6 +0x6259 0x77b9 +0x625a 0x77bf +0x625b 0x77bc +0x625c 0x77bd +0x625d 0x77bb +0x625e 0x77c7 +0x625f 0x77cd +0x6260 0x77d7 +0x6261 0x77da +0x6262 0x77dc +0x6263 0x77e3 +0x6264 0x77ee +0x6265 0x77fc +0x6266 0x780c +0x6267 0x7812 +0x6268 0x7926 +0x6269 0x7820 +0x626a 0x792a +0x626b 0x7845 +0x626c 0x788e +0x626d 0x7874 +0x626e 0x7886 +0x626f 0x787c +0x6270 0x789a +0x6271 0x788c +0x6272 0x78a3 +0x6273 0x78b5 +0x6274 0x78aa +0x6275 0x78af +0x6276 0x78d1 +0x6277 0x78c6 +0x6278 0x78cb +0x6279 0x78d4 +0x627a 0x78be +0x627b 0x78bc +0x627c 0x78c5 +0x627d 0x78ca +0x627e 0x78ec +0x6321 0x78e7 +0x6322 0x78da +0x6323 0x78fd +0x6324 0x78f4 +0x6325 0x7907 +0x6326 0x7912 +0x6327 0x7911 +0x6328 0x7919 +0x6329 0x792c +0x632a 0x792b +0x632b 0x7940 +0x632c 0x7960 +0x632d 0x7957 +0x632e 0x795f +0x632f 0x795a +0x6330 0x7955 +0x6331 0x7953 +0x6332 0x797a +0x6333 0x797f +0x6334 0x798a +0x6335 0x799d +0x6336 0x79a7 +0x6337 0x9f4b +0x6338 0x79aa +0x6339 0x79ae +0x633a 0x79b3 +0x633b 0x79b9 +0x633c 0x79ba +0x633d 0x79c9 +0x633e 0x79d5 +0x633f 0x79e7 +0x6340 0x79ec +0x6341 0x79e1 +0x6342 0x79e3 +0x6343 0x7a08 +0x6344 0x7a0d +0x6345 0x7a18 +0x6346 0x7a19 +0x6347 0x7a20 +0x6348 0x7a1f +0x6349 0x7980 +0x634a 0x7a31 +0x634b 0x7a3b +0x634c 0x7a3e +0x634d 0x7a37 +0x634e 0x7a43 +0x634f 0x7a57 +0x6350 0x7a49 +0x6351 0x7a61 +0x6352 0x7a62 +0x6353 0x7a69 +0x6354 0x9f9d +0x6355 0x7a70 +0x6356 0x7a79 +0x6357 0x7a7d +0x6358 0x7a88 +0x6359 0x7a97 +0x635a 0x7a95 +0x635b 0x7a98 +0x635c 0x7a96 +0x635d 0x7aa9 +0x635e 0x7ac8 +0x635f 0x7ab0 +0x6360 0x7ab6 +0x6361 0x7ac5 +0x6362 0x7ac4 +0x6363 0x7abf +0x6364 0x9083 +0x6365 0x7ac7 +0x6366 0x7aca +0x6367 0x7acd +0x6368 0x7acf +0x6369 0x7ad5 +0x636a 0x7ad3 +0x636b 0x7ad9 +0x636c 0x7ada +0x636d 0x7add +0x636e 0x7ae1 +0x636f 0x7ae2 +0x6370 0x7ae6 +0x6371 0x7aed +0x6372 0x7af0 +0x6373 0x7b02 +0x6374 0x7b0f +0x6375 0x7b0a +0x6376 0x7b06 +0x6377 0x7b33 +0x6378 0x7b18 +0x6379 0x7b19 +0x637a 0x7b1e +0x637b 0x7b35 +0x637c 0x7b28 +0x637d 0x7b36 +0x637e 0x7b50 +0x6421 0x7b7a +0x6422 0x7b04 +0x6423 0x7b4d +0x6424 0x7b0b +0x6425 0x7b4c +0x6426 0x7b45 +0x6427 0x7b75 +0x6428 0x7b65 +0x6429 0x7b74 +0x642a 0x7b67 +0x642b 0x7b70 +0x642c 0x7b71 +0x642d 0x7b6c +0x642e 0x7b6e +0x642f 0x7b9d +0x6430 0x7b98 +0x6431 0x7b9f +0x6432 0x7b8d +0x6433 0x7b9c +0x6434 0x7b9a +0x6435 0x7b8b +0x6436 0x7b92 +0x6437 0x7b8f +0x6438 0x7b5d +0x6439 0x7b99 +0x643a 0x7bcb +0x643b 0x7bc1 +0x643c 0x7bcc +0x643d 0x7bcf +0x643e 0x7bb4 +0x643f 0x7bc6 +0x6440 0x7bdd +0x6441 0x7be9 +0x6442 0x7c11 +0x6443 0x7c14 +0x6444 0x7be6 +0x6445 0x7be5 +0x6446 0x7c60 +0x6447 0x7c00 +0x6448 0x7c07 +0x6449 0x7c13 +0x644a 0x7bf3 +0x644b 0x7bf7 +0x644c 0x7c17 +0x644d 0x7c0d +0x644e 0x7bf6 +0x644f 0x7c23 +0x6450 0x7c27 +0x6451 0x7c2a +0x6452 0x7c1f +0x6453 0x7c37 +0x6454 0x7c2b +0x6455 0x7c3d +0x6456 0x7c4c +0x6457 0x7c43 +0x6458 0x7c54 +0x6459 0x7c4f +0x645a 0x7c40 +0x645b 0x7c50 +0x645c 0x7c58 +0x645d 0x7c5f +0x645e 0x7c64 +0x645f 0x7c56 +0x6460 0x7c65 +0x6461 0x7c6c +0x6462 0x7c75 +0x6463 0x7c83 +0x6464 0x7c90 +0x6465 0x7ca4 +0x6466 0x7cad +0x6467 0x7ca2 +0x6468 0x7cab +0x6469 0x7ca1 +0x646a 0x7ca8 +0x646b 0x7cb3 +0x646c 0x7cb2 +0x646d 0x7cb1 +0x646e 0x7cae +0x646f 0x7cb9 +0x6470 0x7cbd +0x6471 0x7cc0 +0x6472 0x7cc5 +0x6473 0x7cc2 +0x6474 0x7cd8 +0x6475 0x7cd2 +0x6476 0x7cdc +0x6477 0x7ce2 +0x6478 0x9b3b +0x6479 0x7cef +0x647a 0x7cf2 +0x647b 0x7cf4 +0x647c 0x7cf6 +0x647d 0x7cfa +0x647e 0x7d06 +0x6521 0x7d02 +0x6522 0x7d1c +0x6523 0x7d15 +0x6524 0x7d0a +0x6525 0x7d45 +0x6526 0x7d4b +0x6527 0x7d2e +0x6528 0x7d32 +0x6529 0x7d3f +0x652a 0x7d35 +0x652b 0x7d46 +0x652c 0x7d73 +0x652d 0x7d56 +0x652e 0x7d4e +0x652f 0x7d72 +0x6530 0x7d68 +0x6531 0x7d6e +0x6532 0x7d4f +0x6533 0x7d63 +0x6534 0x7d93 +0x6535 0x7d89 +0x6536 0x7d5b +0x6537 0x7d8f +0x6538 0x7d7d +0x6539 0x7d9b +0x653a 0x7dba +0x653b 0x7dae +0x653c 0x7da3 +0x653d 0x7db5 +0x653e 0x7dc7 +0x653f 0x7dbd +0x6540 0x7dab +0x6541 0x7e3d +0x6542 0x7da2 +0x6543 0x7daf +0x6544 0x7ddc +0x6545 0x7db8 +0x6546 0x7d9f +0x6547 0x7db0 +0x6548 0x7dd8 +0x6549 0x7ddd +0x654a 0x7de4 +0x654b 0x7dde +0x654c 0x7dfb +0x654d 0x7df2 +0x654e 0x7de1 +0x654f 0x7e05 +0x6550 0x7e0a +0x6551 0x7e23 +0x6552 0x7e21 +0x6553 0x7e12 +0x6554 0x7e31 +0x6555 0x7e1f +0x6556 0x7e09 +0x6557 0x7e0b +0x6558 0x7e22 +0x6559 0x7e46 +0x655a 0x7e66 +0x655b 0x7e3b +0x655c 0x7e35 +0x655d 0x7e39 +0x655e 0x7e43 +0x655f 0x7e37 +0x6560 0x7e32 +0x6561 0x7e3a +0x6562 0x7e67 +0x6563 0x7e5d +0x6564 0x7e56 +0x6565 0x7e5e +0x6566 0x7e59 +0x6567 0x7e5a +0x6568 0x7e79 +0x6569 0x7e6a +0x656a 0x7e69 +0x656b 0x7e7c +0x656c 0x7e7b +0x656d 0x7e83 +0x656e 0x7dd5 +0x656f 0x7e7d +0x6570 0x8fae +0x6571 0x7e7f +0x6572 0x7e88 +0x6573 0x7e89 +0x6574 0x7e8c +0x6575 0x7e92 +0x6576 0x7e90 +0x6577 0x7e93 +0x6578 0x7e94 +0x6579 0x7e96 +0x657a 0x7e8e +0x657b 0x7e9b +0x657c 0x7e9c +0x657d 0x7f38 +0x657e 0x7f3a +0x6621 0x7f45 +0x6622 0x7f4c +0x6623 0x7f4d +0x6624 0x7f4e +0x6625 0x7f50 +0x6626 0x7f51 +0x6627 0x7f55 +0x6628 0x7f54 +0x6629 0x7f58 +0x662a 0x7f5f +0x662b 0x7f60 +0x662c 0x7f68 +0x662d 0x7f69 +0x662e 0x7f67 +0x662f 0x7f78 +0x6630 0x7f82 +0x6631 0x7f86 +0x6632 0x7f83 +0x6633 0x7f88 +0x6634 0x7f87 +0x6635 0x7f8c +0x6636 0x7f94 +0x6637 0x7f9e +0x6638 0x7f9d +0x6639 0x7f9a +0x663a 0x7fa3 +0x663b 0x7faf +0x663c 0x7fb2 +0x663d 0x7fb9 +0x663e 0x7fae +0x663f 0x7fb6 +0x6640 0x7fb8 +0x6641 0x8b71 +0x6642 0x7fc5 +0x6643 0x7fc6 +0x6644 0x7fca +0x6645 0x7fd5 +0x6646 0x7fd4 +0x6647 0x7fe1 +0x6648 0x7fe6 +0x6649 0x7fe9 +0x664a 0x7ff3 +0x664b 0x7ff9 +0x664c 0x98dc +0x664d 0x8006 +0x664e 0x8004 +0x664f 0x800b +0x6650 0x8012 +0x6651 0x8018 +0x6652 0x8019 +0x6653 0x801c +0x6654 0x8021 +0x6655 0x8028 +0x6656 0x803f +0x6657 0x803b +0x6658 0x804a +0x6659 0x8046 +0x665a 0x8052 +0x665b 0x8058 +0x665c 0x805a +0x665d 0x805f +0x665e 0x8062 +0x665f 0x8068 +0x6660 0x8073 +0x6661 0x8072 +0x6662 0x8070 +0x6663 0x8076 +0x6664 0x8079 +0x6665 0x807d +0x6666 0x807f +0x6667 0x8084 +0x6668 0x8086 +0x6669 0x8085 +0x666a 0x809b +0x666b 0x8093 +0x666c 0x809a +0x666d 0x80ad +0x666e 0x5190 +0x666f 0x80ac +0x6670 0x80db +0x6671 0x80e5 +0x6672 0x80d9 +0x6673 0x80dd +0x6674 0x80c4 +0x6675 0x80da +0x6676 0x80d6 +0x6677 0x8109 +0x6678 0x80ef +0x6679 0x80f1 +0x667a 0x811b +0x667b 0x8129 +0x667c 0x8123 +0x667d 0x812f +0x667e 0x814b +0x6721 0x968b +0x6722 0x8146 +0x6723 0x813e +0x6724 0x8153 +0x6725 0x8151 +0x6726 0x80fc +0x6727 0x8171 +0x6728 0x816e +0x6729 0x8165 +0x672a 0x8166 +0x672b 0x8174 +0x672c 0x8183 +0x672d 0x8188 +0x672e 0x818a +0x672f 0x8180 +0x6730 0x8182 +0x6731 0x81a0 +0x6732 0x8195 +0x6733 0x81a4 +0x6734 0x81a3 +0x6735 0x815f +0x6736 0x8193 +0x6737 0x81a9 +0x6738 0x81b0 +0x6739 0x81b5 +0x673a 0x81be +0x673b 0x81b8 +0x673c 0x81bd +0x673d 0x81c0 +0x673e 0x81c2 +0x673f 0x81ba +0x6740 0x81c9 +0x6741 0x81cd +0x6742 0x81d1 +0x6743 0x81d9 +0x6744 0x81d8 +0x6745 0x81c8 +0x6746 0x81da +0x6747 0x81df +0x6748 0x81e0 +0x6749 0x81e7 +0x674a 0x81fa +0x674b 0x81fb +0x674c 0x81fe +0x674d 0x8201 +0x674e 0x8202 +0x674f 0x8205 +0x6750 0x8207 +0x6751 0x820a +0x6752 0x820d +0x6753 0x8210 +0x6754 0x8216 +0x6755 0x8229 +0x6756 0x822b +0x6757 0x8238 +0x6758 0x8233 +0x6759 0x8240 +0x675a 0x8259 +0x675b 0x8258 +0x675c 0x825d +0x675d 0x825a +0x675e 0x825f +0x675f 0x8264 +0x6760 0x8262 +0x6761 0x8268 +0x6762 0x826a +0x6763 0x826b +0x6764 0x822e +0x6765 0x8271 +0x6766 0x8277 +0x6767 0x8278 +0x6768 0x827e +0x6769 0x828d +0x676a 0x8292 +0x676b 0x82ab +0x676c 0x829f +0x676d 0x82bb +0x676e 0x82ac +0x676f 0x82e1 +0x6770 0x82e3 +0x6771 0x82df +0x6772 0x82d2 +0x6773 0x82f4 +0x6774 0x82f3 +0x6775 0x82fa +0x6776 0x8393 +0x6777 0x8303 +0x6778 0x82fb +0x6779 0x82f9 +0x677a 0x82de +0x677b 0x8306 +0x677c 0x82dc +0x677d 0x8309 +0x677e 0x82d9 +0x6821 0x8335 +0x6822 0x8334 +0x6823 0x8316 +0x6824 0x8332 +0x6825 0x8331 +0x6826 0x8340 +0x6827 0x8339 +0x6828 0x8350 +0x6829 0x8345 +0x682a 0x832f +0x682b 0x832b +0x682c 0x8317 +0x682d 0x8318 +0x682e 0x8385 +0x682f 0x839a +0x6830 0x83aa +0x6831 0x839f +0x6832 0x83a2 +0x6833 0x8396 +0x6834 0x8323 +0x6835 0x838e +0x6836 0x8387 +0x6837 0x838a +0x6838 0x837c +0x6839 0x83b5 +0x683a 0x8373 +0x683b 0x8375 +0x683c 0x83a0 +0x683d 0x8389 +0x683e 0x83a8 +0x683f 0x83f4 +0x6840 0x8413 +0x6841 0x83eb +0x6842 0x83ce +0x6843 0x83fd +0x6844 0x8403 +0x6845 0x83d8 +0x6846 0x840b +0x6847 0x83c1 +0x6848 0x83f7 +0x6849 0x8407 +0x684a 0x83e0 +0x684b 0x83f2 +0x684c 0x840d +0x684d 0x8422 +0x684e 0x8420 +0x684f 0x83bd +0x6850 0x8438 +0x6851 0x8506 +0x6852 0x83fb +0x6853 0x846d +0x6854 0x842a +0x6855 0x843c +0x6856 0x855a +0x6857 0x8484 +0x6858 0x8477 +0x6859 0x846b +0x685a 0x84ad +0x685b 0x846e +0x685c 0x8482 +0x685d 0x8469 +0x685e 0x8446 +0x685f 0x842c +0x6860 0x846f +0x6861 0x8479 +0x6862 0x8435 +0x6863 0x84ca +0x6864 0x8462 +0x6865 0x84b9 +0x6866 0x84bf +0x6867 0x849f +0x6868 0x84d9 +0x6869 0x84cd +0x686a 0x84bb +0x686b 0x84da +0x686c 0x84d0 +0x686d 0x84c1 +0x686e 0x84c6 +0x686f 0x84d6 +0x6870 0x84a1 +0x6871 0x8521 +0x6872 0x84ff +0x6873 0x84f4 +0x6874 0x8517 +0x6875 0x8518 +0x6876 0x852c +0x6877 0x851f +0x6878 0x8515 +0x6879 0x8514 +0x687a 0x84fc +0x687b 0x8540 +0x687c 0x8563 +0x687d 0x8558 +0x687e 0x8548 +0x6921 0x8541 +0x6922 0x8602 +0x6923 0x854b +0x6924 0x8555 +0x6925 0x8580 +0x6926 0x85a4 +0x6927 0x8588 +0x6928 0x8591 +0x6929 0x858a +0x692a 0x85a8 +0x692b 0x856d +0x692c 0x8594 +0x692d 0x859b +0x692e 0x85ea +0x692f 0x8587 +0x6930 0x859c +0x6931 0x8577 +0x6932 0x857e +0x6933 0x8590 +0x6934 0x85c9 +0x6935 0x85ba +0x6936 0x85cf +0x6937 0x85b9 +0x6938 0x85d0 +0x6939 0x85d5 +0x693a 0x85dd +0x693b 0x85e5 +0x693c 0x85dc +0x693d 0x85f9 +0x693e 0x860a +0x693f 0x8613 +0x6940 0x860b +0x6941 0x85fe +0x6942 0x85fa +0x6943 0x8606 +0x6944 0x8622 +0x6945 0x861a +0x6946 0x8630 +0x6947 0x863f +0x6948 0x864d +0x6949 0x4e55 +0x694a 0x8654 +0x694b 0x865f +0x694c 0x8667 +0x694d 0x8671 +0x694e 0x8693 +0x694f 0x86a3 +0x6950 0x86a9 +0x6951 0x86aa +0x6952 0x868b +0x6953 0x868c +0x6954 0x86b6 +0x6955 0x86af +0x6956 0x86c4 +0x6957 0x86c6 +0x6958 0x86b0 +0x6959 0x86c9 +0x695a 0x8823 +0x695b 0x86ab +0x695c 0x86d4 +0x695d 0x86de +0x695e 0x86e9 +0x695f 0x86ec +0x6960 0x86df +0x6961 0x86db +0x6962 0x86ef +0x6963 0x8712 +0x6964 0x8706 +0x6965 0x8708 +0x6966 0x8700 +0x6967 0x8703 +0x6968 0x86fb +0x6969 0x8711 +0x696a 0x8709 +0x696b 0x870d +0x696c 0x86f9 +0x696d 0x870a +0x696e 0x8734 +0x696f 0x873f +0x6970 0x8737 +0x6971 0x873b +0x6972 0x8725 +0x6973 0x8729 +0x6974 0x871a +0x6975 0x8760 +0x6976 0x875f +0x6977 0x8778 +0x6978 0x874c +0x6979 0x874e +0x697a 0x8774 +0x697b 0x8757 +0x697c 0x8768 +0x697d 0x876e +0x697e 0x8759 +0x6a21 0x8753 +0x6a22 0x8763 +0x6a23 0x876a +0x6a24 0x8805 +0x6a25 0x87a2 +0x6a26 0x879f +0x6a27 0x8782 +0x6a28 0x87af +0x6a29 0x87cb +0x6a2a 0x87bd +0x6a2b 0x87c0 +0x6a2c 0x87d0 +0x6a2d 0x96d6 +0x6a2e 0x87ab +0x6a2f 0x87c4 +0x6a30 0x87b3 +0x6a31 0x87c7 +0x6a32 0x87c6 +0x6a33 0x87bb +0x6a34 0x87ef +0x6a35 0x87f2 +0x6a36 0x87e0 +0x6a37 0x880f +0x6a38 0x880d +0x6a39 0x87fe +0x6a3a 0x87f6 +0x6a3b 0x87f7 +0x6a3c 0x880e +0x6a3d 0x87d2 +0x6a3e 0x8811 +0x6a3f 0x8816 +0x6a40 0x8815 +0x6a41 0x8822 +0x6a42 0x8821 +0x6a43 0x8831 +0x6a44 0x8836 +0x6a45 0x8839 +0x6a46 0x8827 +0x6a47 0x883b +0x6a48 0x8844 +0x6a49 0x8842 +0x6a4a 0x8852 +0x6a4b 0x8859 +0x6a4c 0x885e +0x6a4d 0x8862 +0x6a4e 0x886b +0x6a4f 0x8881 +0x6a50 0x887e +0x6a51 0x889e +0x6a52 0x8875 +0x6a53 0x887d +0x6a54 0x88b5 +0x6a55 0x8872 +0x6a56 0x8882 +0x6a57 0x8897 +0x6a58 0x8892 +0x6a59 0x88ae +0x6a5a 0x8899 +0x6a5b 0x88a2 +0x6a5c 0x888d +0x6a5d 0x88a4 +0x6a5e 0x88b0 +0x6a5f 0x88bf +0x6a60 0x88b1 +0x6a61 0x88c3 +0x6a62 0x88c4 +0x6a63 0x88d4 +0x6a64 0x88d8 +0x6a65 0x88d9 +0x6a66 0x88dd +0x6a67 0x88f9 +0x6a68 0x8902 +0x6a69 0x88fc +0x6a6a 0x88f4 +0x6a6b 0x88e8 +0x6a6c 0x88f2 +0x6a6d 0x8904 +0x6a6e 0x890c +0x6a6f 0x890a +0x6a70 0x8913 +0x6a71 0x8943 +0x6a72 0x891e +0x6a73 0x8925 +0x6a74 0x892a +0x6a75 0x892b +0x6a76 0x8941 +0x6a77 0x8944 +0x6a78 0x893b +0x6a79 0x8936 +0x6a7a 0x8938 +0x6a7b 0x894c +0x6a7c 0x891d +0x6a7d 0x8960 +0x6a7e 0x895e +0x6b21 0x8966 +0x6b22 0x8964 +0x6b23 0x896d +0x6b24 0x896a +0x6b25 0x896f +0x6b26 0x8974 +0x6b27 0x8977 +0x6b28 0x897e +0x6b29 0x8983 +0x6b2a 0x8988 +0x6b2b 0x898a +0x6b2c 0x8993 +0x6b2d 0x8998 +0x6b2e 0x89a1 +0x6b2f 0x89a9 +0x6b30 0x89a6 +0x6b31 0x89ac +0x6b32 0x89af +0x6b33 0x89b2 +0x6b34 0x89ba +0x6b35 0x89bd +0x6b36 0x89bf +0x6b37 0x89c0 +0x6b38 0x89da +0x6b39 0x89dc +0x6b3a 0x89dd +0x6b3b 0x89e7 +0x6b3c 0x89f4 +0x6b3d 0x89f8 +0x6b3e 0x8a03 +0x6b3f 0x8a16 +0x6b40 0x8a10 +0x6b41 0x8a0c +0x6b42 0x8a1b +0x6b43 0x8a1d +0x6b44 0x8a25 +0x6b45 0x8a36 +0x6b46 0x8a41 +0x6b47 0x8a5b +0x6b48 0x8a52 +0x6b49 0x8a46 +0x6b4a 0x8a48 +0x6b4b 0x8a7c +0x6b4c 0x8a6d +0x6b4d 0x8a6c +0x6b4e 0x8a62 +0x6b4f 0x8a85 +0x6b50 0x8a82 +0x6b51 0x8a84 +0x6b52 0x8aa8 +0x6b53 0x8aa1 +0x6b54 0x8a91 +0x6b55 0x8aa5 +0x6b56 0x8aa6 +0x6b57 0x8a9a +0x6b58 0x8aa3 +0x6b59 0x8ac4 +0x6b5a 0x8acd +0x6b5b 0x8ac2 +0x6b5c 0x8ada +0x6b5d 0x8aeb +0x6b5e 0x8af3 +0x6b5f 0x8ae7 +0x6b60 0x8ae4 +0x6b61 0x8af1 +0x6b62 0x8b14 +0x6b63 0x8ae0 +0x6b64 0x8ae2 +0x6b65 0x8af7 +0x6b66 0x8ade +0x6b67 0x8adb +0x6b68 0x8b0c +0x6b69 0x8b07 +0x6b6a 0x8b1a +0x6b6b 0x8ae1 +0x6b6c 0x8b16 +0x6b6d 0x8b10 +0x6b6e 0x8b17 +0x6b6f 0x8b20 +0x6b70 0x8b33 +0x6b71 0x97ab +0x6b72 0x8b26 +0x6b73 0x8b2b +0x6b74 0x8b3e +0x6b75 0x8b28 +0x6b76 0x8b41 +0x6b77 0x8b4c +0x6b78 0x8b4f +0x6b79 0x8b4e +0x6b7a 0x8b49 +0x6b7b 0x8b56 +0x6b7c 0x8b5b +0x6b7d 0x8b5a +0x6b7e 0x8b6b +0x6c21 0x8b5f +0x6c22 0x8b6c +0x6c23 0x8b6f +0x6c24 0x8b74 +0x6c25 0x8b7d +0x6c26 0x8b80 +0x6c27 0x8b8c +0x6c28 0x8b8e +0x6c29 0x8b92 +0x6c2a 0x8b93 +0x6c2b 0x8b96 +0x6c2c 0x8b99 +0x6c2d 0x8b9a +0x6c2e 0x8c3a +0x6c2f 0x8c41 +0x6c30 0x8c3f +0x6c31 0x8c48 +0x6c32 0x8c4c +0x6c33 0x8c4e +0x6c34 0x8c50 +0x6c35 0x8c55 +0x6c36 0x8c62 +0x6c37 0x8c6c +0x6c38 0x8c78 +0x6c39 0x8c7a +0x6c3a 0x8c82 +0x6c3b 0x8c89 +0x6c3c 0x8c85 +0x6c3d 0x8c8a +0x6c3e 0x8c8d +0x6c3f 0x8c8e +0x6c40 0x8c94 +0x6c41 0x8c7c +0x6c42 0x8c98 +0x6c43 0x621d +0x6c44 0x8cad +0x6c45 0x8caa +0x6c46 0x8cbd +0x6c47 0x8cb2 +0x6c48 0x8cb3 +0x6c49 0x8cae +0x6c4a 0x8cb6 +0x6c4b 0x8cc8 +0x6c4c 0x8cc1 +0x6c4d 0x8ce4 +0x6c4e 0x8ce3 +0x6c4f 0x8cda +0x6c50 0x8cfd +0x6c51 0x8cfa +0x6c52 0x8cfb +0x6c53 0x8d04 +0x6c54 0x8d05 +0x6c55 0x8d0a +0x6c56 0x8d07 +0x6c57 0x8d0f +0x6c58 0x8d0d +0x6c59 0x8d10 +0x6c5a 0x9f4e +0x6c5b 0x8d13 +0x6c5c 0x8ccd +0x6c5d 0x8d14 +0x6c5e 0x8d16 +0x6c5f 0x8d67 +0x6c60 0x8d6d +0x6c61 0x8d71 +0x6c62 0x8d73 +0x6c63 0x8d81 +0x6c64 0x8d99 +0x6c65 0x8dc2 +0x6c66 0x8dbe +0x6c67 0x8dba +0x6c68 0x8dcf +0x6c69 0x8dda +0x6c6a 0x8dd6 +0x6c6b 0x8dcc +0x6c6c 0x8ddb +0x6c6d 0x8dcb +0x6c6e 0x8dea +0x6c6f 0x8deb +0x6c70 0x8ddf +0x6c71 0x8de3 +0x6c72 0x8dfc +0x6c73 0x8e08 +0x6c74 0x8e09 +0x6c75 0x8dff +0x6c76 0x8e1d +0x6c77 0x8e1e +0x6c78 0x8e10 +0x6c79 0x8e1f +0x6c7a 0x8e42 +0x6c7b 0x8e35 +0x6c7c 0x8e30 +0x6c7d 0x8e34 +0x6c7e 0x8e4a +0x6d21 0x8e47 +0x6d22 0x8e49 +0x6d23 0x8e4c +0x6d24 0x8e50 +0x6d25 0x8e48 +0x6d26 0x8e59 +0x6d27 0x8e64 +0x6d28 0x8e60 +0x6d29 0x8e2a +0x6d2a 0x8e63 +0x6d2b 0x8e55 +0x6d2c 0x8e76 +0x6d2d 0x8e72 +0x6d2e 0x8e7c +0x6d2f 0x8e81 +0x6d30 0x8e87 +0x6d31 0x8e85 +0x6d32 0x8e84 +0x6d33 0x8e8b +0x6d34 0x8e8a +0x6d35 0x8e93 +0x6d36 0x8e91 +0x6d37 0x8e94 +0x6d38 0x8e99 +0x6d39 0x8eaa +0x6d3a 0x8ea1 +0x6d3b 0x8eac +0x6d3c 0x8eb0 +0x6d3d 0x8ec6 +0x6d3e 0x8eb1 +0x6d3f 0x8ebe +0x6d40 0x8ec5 +0x6d41 0x8ec8 +0x6d42 0x8ecb +0x6d43 0x8edb +0x6d44 0x8ee3 +0x6d45 0x8efc +0x6d46 0x8efb +0x6d47 0x8eeb +0x6d48 0x8efe +0x6d49 0x8f0a +0x6d4a 0x8f05 +0x6d4b 0x8f15 +0x6d4c 0x8f12 +0x6d4d 0x8f19 +0x6d4e 0x8f13 +0x6d4f 0x8f1c +0x6d50 0x8f1f +0x6d51 0x8f1b +0x6d52 0x8f0c +0x6d53 0x8f26 +0x6d54 0x8f33 +0x6d55 0x8f3b +0x6d56 0x8f39 +0x6d57 0x8f45 +0x6d58 0x8f42 +0x6d59 0x8f3e +0x6d5a 0x8f4c +0x6d5b 0x8f49 +0x6d5c 0x8f46 +0x6d5d 0x8f4e +0x6d5e 0x8f57 +0x6d5f 0x8f5c +0x6d60 0x8f62 +0x6d61 0x8f63 +0x6d62 0x8f64 +0x6d63 0x8f9c +0x6d64 0x8f9f +0x6d65 0x8fa3 +0x6d66 0x8fad +0x6d67 0x8faf +0x6d68 0x8fb7 +0x6d69 0x8fda +0x6d6a 0x8fe5 +0x6d6b 0x8fe2 +0x6d6c 0x8fea +0x6d6d 0x8fef +0x6d6e 0x9087 +0x6d6f 0x8ff4 +0x6d70 0x9005 +0x6d71 0x8ff9 +0x6d72 0x8ffa +0x6d73 0x9011 +0x6d74 0x9015 +0x6d75 0x9021 +0x6d76 0x900d +0x6d77 0x901e +0x6d78 0x9016 +0x6d79 0x900b +0x6d7a 0x9027 +0x6d7b 0x9036 +0x6d7c 0x9035 +0x6d7d 0x9039 +0x6d7e 0x8ff8 +0x6e21 0x904f +0x6e22 0x9050 +0x6e23 0x9051 +0x6e24 0x9052 +0x6e25 0x900e +0x6e26 0x9049 +0x6e27 0x903e +0x6e28 0x9056 +0x6e29 0x9058 +0x6e2a 0x905e +0x6e2b 0x9068 +0x6e2c 0x906f +0x6e2d 0x9076 +0x6e2e 0x96a8 +0x6e2f 0x9072 +0x6e30 0x9082 +0x6e31 0x907d +0x6e32 0x9081 +0x6e33 0x9080 +0x6e34 0x908a +0x6e35 0x9089 +0x6e36 0x908f +0x6e37 0x90a8 +0x6e38 0x90af +0x6e39 0x90b1 +0x6e3a 0x90b5 +0x6e3b 0x90e2 +0x6e3c 0x90e4 +0x6e3d 0x6248 +0x6e3e 0x90db +0x6e3f 0x9102 +0x6e40 0x9112 +0x6e41 0x9119 +0x6e42 0x9132 +0x6e43 0x9130 +0x6e44 0x914a +0x6e45 0x9156 +0x6e46 0x9158 +0x6e47 0x9163 +0x6e48 0x9165 +0x6e49 0x9169 +0x6e4a 0x9173 +0x6e4b 0x9172 +0x6e4c 0x918b +0x6e4d 0x9189 +0x6e4e 0x9182 +0x6e4f 0x91a2 +0x6e50 0x91ab +0x6e51 0x91af +0x6e52 0x91aa +0x6e53 0x91b5 +0x6e54 0x91b4 +0x6e55 0x91ba +0x6e56 0x91c0 +0x6e57 0x91c1 +0x6e58 0x91c9 +0x6e59 0x91cb +0x6e5a 0x91d0 +0x6e5b 0x91d6 +0x6e5c 0x91df +0x6e5d 0x91e1 +0x6e5e 0x91db +0x6e5f 0x91fc +0x6e60 0x91f5 +0x6e61 0x91f6 +0x6e62 0x921e +0x6e63 0x91ff +0x6e64 0x9214 +0x6e65 0x922c +0x6e66 0x9215 +0x6e67 0x9211 +0x6e68 0x925e +0x6e69 0x9257 +0x6e6a 0x9245 +0x6e6b 0x9249 +0x6e6c 0x9264 +0x6e6d 0x9248 +0x6e6e 0x9295 +0x6e6f 0x923f +0x6e70 0x924b +0x6e71 0x9250 +0x6e72 0x929c +0x6e73 0x9296 +0x6e74 0x9293 +0x6e75 0x929b +0x6e76 0x925a +0x6e77 0x92cf +0x6e78 0x92b9 +0x6e79 0x92b7 +0x6e7a 0x92e9 +0x6e7b 0x930f +0x6e7c 0x92fa +0x6e7d 0x9344 +0x6e7e 0x932e +0x6f21 0x9319 +0x6f22 0x9322 +0x6f23 0x931a +0x6f24 0x9323 +0x6f25 0x933a +0x6f26 0x9335 +0x6f27 0x933b +0x6f28 0x935c +0x6f29 0x9360 +0x6f2a 0x937c +0x6f2b 0x936e +0x6f2c 0x9356 +0x6f2d 0x93b0 +0x6f2e 0x93ac +0x6f2f 0x93ad +0x6f30 0x9394 +0x6f31 0x93b9 +0x6f32 0x93d6 +0x6f33 0x93d7 +0x6f34 0x93e8 +0x6f35 0x93e5 +0x6f36 0x93d8 +0x6f37 0x93c3 +0x6f38 0x93dd +0x6f39 0x93d0 +0x6f3a 0x93c8 +0x6f3b 0x93e4 +0x6f3c 0x941a +0x6f3d 0x9414 +0x6f3e 0x9413 +0x6f3f 0x9403 +0x6f40 0x9407 +0x6f41 0x9410 +0x6f42 0x9436 +0x6f43 0x942b +0x6f44 0x9435 +0x6f45 0x9421 +0x6f46 0x943a +0x6f47 0x9441 +0x6f48 0x9452 +0x6f49 0x9444 +0x6f4a 0x945b +0x6f4b 0x9460 +0x6f4c 0x9462 +0x6f4d 0x945e +0x6f4e 0x946a +0x6f4f 0x9229 +0x6f50 0x9470 +0x6f51 0x9475 +0x6f52 0x9477 +0x6f53 0x947d +0x6f54 0x945a +0x6f55 0x947c +0x6f56 0x947e +0x6f57 0x9481 +0x6f58 0x947f +0x6f59 0x9582 +0x6f5a 0x9587 +0x6f5b 0x958a +0x6f5c 0x9594 +0x6f5d 0x9596 +0x6f5e 0x9598 +0x6f5f 0x9599 +0x6f60 0x95a0 +0x6f61 0x95a8 +0x6f62 0x95a7 +0x6f63 0x95ad +0x6f64 0x95bc +0x6f65 0x95bb +0x6f66 0x95b9 +0x6f67 0x95be +0x6f68 0x95ca +0x6f69 0x6ff6 +0x6f6a 0x95c3 +0x6f6b 0x95cd +0x6f6c 0x95cc +0x6f6d 0x95d5 +0x6f6e 0x95d4 +0x6f6f 0x95d6 +0x6f70 0x95dc +0x6f71 0x95e1 +0x6f72 0x95e5 +0x6f73 0x95e2 +0x6f74 0x9621 +0x6f75 0x9628 +0x6f76 0x962e +0x6f77 0x962f +0x6f78 0x9642 +0x6f79 0x964c +0x6f7a 0x964f +0x6f7b 0x964b +0x6f7c 0x9677 +0x6f7d 0x965c +0x6f7e 0x965e +0x7021 0x965d +0x7022 0x965f +0x7023 0x9666 +0x7024 0x9672 +0x7025 0x966c +0x7026 0x968d +0x7027 0x9698 +0x7028 0x9695 +0x7029 0x9697 +0x702a 0x96aa +0x702b 0x96a7 +0x702c 0x96b1 +0x702d 0x96b2 +0x702e 0x96b0 +0x702f 0x96b4 +0x7030 0x96b6 +0x7031 0x96b8 +0x7032 0x96b9 +0x7033 0x96ce +0x7034 0x96cb +0x7035 0x96c9 +0x7036 0x96cd +0x7037 0x894d +0x7038 0x96dc +0x7039 0x970d +0x703a 0x96d5 +0x703b 0x96f9 +0x703c 0x9704 +0x703d 0x9706 +0x703e 0x9708 +0x703f 0x9713 +0x7040 0x970e +0x7041 0x9711 +0x7042 0x970f +0x7043 0x9716 +0x7044 0x9719 +0x7045 0x9724 +0x7046 0x972a +0x7047 0x9730 +0x7048 0x9739 +0x7049 0x973d +0x704a 0x973e +0x704b 0x9744 +0x704c 0x9746 +0x704d 0x9748 +0x704e 0x9742 +0x704f 0x9749 +0x7050 0x975c +0x7051 0x9760 +0x7052 0x9764 +0x7053 0x9766 +0x7054 0x9768 +0x7055 0x52d2 +0x7056 0x976b +0x7057 0x9771 +0x7058 0x9779 +0x7059 0x9785 +0x705a 0x977c +0x705b 0x9781 +0x705c 0x977a +0x705d 0x9786 +0x705e 0x978b +0x705f 0x978f +0x7060 0x9790 +0x7061 0x979c +0x7062 0x97a8 +0x7063 0x97a6 +0x7064 0x97a3 +0x7065 0x97b3 +0x7066 0x97b4 +0x7067 0x97c3 +0x7068 0x97c6 +0x7069 0x97c8 +0x706a 0x97cb +0x706b 0x97dc +0x706c 0x97ed +0x706d 0x9f4f +0x706e 0x97f2 +0x706f 0x7adf +0x7070 0x97f6 +0x7071 0x97f5 +0x7072 0x980f +0x7073 0x980c +0x7074 0x9838 +0x7075 0x9824 +0x7076 0x9821 +0x7077 0x9837 +0x7078 0x983d +0x7079 0x9846 +0x707a 0x984f +0x707b 0x984b +0x707c 0x986b +0x707d 0x986f +0x707e 0x9870 +0x7121 0x9871 +0x7122 0x9874 +0x7123 0x9873 +0x7124 0x98aa +0x7125 0x98af +0x7126 0x98b1 +0x7127 0x98b6 +0x7128 0x98c4 +0x7129 0x98c3 +0x712a 0x98c6 +0x712b 0x98e9 +0x712c 0x98eb +0x712d 0x9903 +0x712e 0x9909 +0x712f 0x9912 +0x7130 0x9914 +0x7131 0x9918 +0x7132 0x9921 +0x7133 0x991d +0x7134 0x991e +0x7135 0x9924 +0x7136 0x9920 +0x7137 0x992c +0x7138 0x992e +0x7139 0x993d +0x713a 0x993e +0x713b 0x9942 +0x713c 0x9949 +0x713d 0x9945 +0x713e 0x9950 +0x713f 0x994b +0x7140 0x9951 +0x7141 0x9952 +0x7142 0x994c +0x7143 0x9955 +0x7144 0x9997 +0x7145 0x9998 +0x7146 0x99a5 +0x7147 0x99ad +0x7148 0x99ae +0x7149 0x99bc +0x714a 0x99df +0x714b 0x99db +0x714c 0x99dd +0x714d 0x99d8 +0x714e 0x99d1 +0x714f 0x99ed +0x7150 0x99ee +0x7151 0x99f1 +0x7152 0x99f2 +0x7153 0x99fb +0x7154 0x99f8 +0x7155 0x9a01 +0x7156 0x9a0f +0x7157 0x9a05 +0x7158 0x99e2 +0x7159 0x9a19 +0x715a 0x9a2b +0x715b 0x9a37 +0x715c 0x9a45 +0x715d 0x9a42 +0x715e 0x9a40 +0x715f 0x9a43 +0x7160 0x9a3e +0x7161 0x9a55 +0x7162 0x9a4d +0x7163 0x9a5b +0x7164 0x9a57 +0x7165 0x9a5f +0x7166 0x9a62 +0x7167 0x9a65 +0x7168 0x9a64 +0x7169 0x9a69 +0x716a 0x9a6b +0x716b 0x9a6a +0x716c 0x9aad +0x716d 0x9ab0 +0x716e 0x9abc +0x716f 0x9ac0 +0x7170 0x9acf +0x7171 0x9ad1 +0x7172 0x9ad3 +0x7173 0x9ad4 +0x7174 0x9ade +0x7175 0x9adf +0x7176 0x9ae2 +0x7177 0x9ae3 +0x7178 0x9ae6 +0x7179 0x9aef +0x717a 0x9aeb +0x717b 0x9aee +0x717c 0x9af4 +0x717d 0x9af1 +0x717e 0x9af7 +0x7221 0x9afb +0x7222 0x9b06 +0x7223 0x9b18 +0x7224 0x9b1a +0x7225 0x9b1f +0x7226 0x9b22 +0x7227 0x9b23 +0x7228 0x9b25 +0x7229 0x9b27 +0x722a 0x9b28 +0x722b 0x9b29 +0x722c 0x9b2a +0x722d 0x9b2e +0x722e 0x9b2f +0x722f 0x9b32 +0x7230 0x9b44 +0x7231 0x9b43 +0x7232 0x9b4f +0x7233 0x9b4d +0x7234 0x9b4e +0x7235 0x9b51 +0x7236 0x9b58 +0x7237 0x9b74 +0x7238 0x9b93 +0x7239 0x9b83 +0x723a 0x9b91 +0x723b 0x9b96 +0x723c 0x9b97 +0x723d 0x9b9f +0x723e 0x9ba0 +0x723f 0x9ba8 +0x7240 0x9bb4 +0x7241 0x9bc0 +0x7242 0x9bca +0x7243 0x9bb9 +0x7244 0x9bc6 +0x7245 0x9bcf +0x7246 0x9bd1 +0x7247 0x9bd2 +0x7248 0x9be3 +0x7249 0x9be2 +0x724a 0x9be4 +0x724b 0x9bd4 +0x724c 0x9be1 +0x724d 0x9c3a +0x724e 0x9bf2 +0x724f 0x9bf1 +0x7250 0x9bf0 +0x7251 0x9c15 +0x7252 0x9c14 +0x7253 0x9c09 +0x7254 0x9c13 +0x7255 0x9c0c +0x7256 0x9c06 +0x7257 0x9c08 +0x7258 0x9c12 +0x7259 0x9c0a +0x725a 0x9c04 +0x725b 0x9c2e +0x725c 0x9c1b +0x725d 0x9c25 +0x725e 0x9c24 +0x725f 0x9c21 +0x7260 0x9c30 +0x7261 0x9c47 +0x7262 0x9c32 +0x7263 0x9c46 +0x7264 0x9c3e +0x7265 0x9c5a +0x7266 0x9c60 +0x7267 0x9c67 +0x7268 0x9c76 +0x7269 0x9c78 +0x726a 0x9ce7 +0x726b 0x9cec +0x726c 0x9cf0 +0x726d 0x9d09 +0x726e 0x9d08 +0x726f 0x9ceb +0x7270 0x9d03 +0x7271 0x9d06 +0x7272 0x9d2a +0x7273 0x9d26 +0x7274 0x9daf +0x7275 0x9d23 +0x7276 0x9d1f +0x7277 0x9d44 +0x7278 0x9d15 +0x7279 0x9d12 +0x727a 0x9d41 +0x727b 0x9d3f +0x727c 0x9d3e +0x727d 0x9d46 +0x727e 0x9d48 +0x7321 0x9d5d +0x7322 0x9d5e +0x7323 0x9d64 +0x7324 0x9d51 +0x7325 0x9d50 +0x7326 0x9d59 +0x7327 0x9d72 +0x7328 0x9d89 +0x7329 0x9d87 +0x732a 0x9dab +0x732b 0x9d6f +0x732c 0x9d7a +0x732d 0x9d9a +0x732e 0x9da4 +0x732f 0x9da9 +0x7330 0x9db2 +0x7331 0x9dc4 +0x7332 0x9dc1 +0x7333 0x9dbb +0x7334 0x9db8 +0x7335 0x9dba +0x7336 0x9dc6 +0x7337 0x9dcf +0x7338 0x9dc2 +0x7339 0x9dd9 +0x733a 0x9dd3 +0x733b 0x9df8 +0x733c 0x9de6 +0x733d 0x9ded +0x733e 0x9def +0x733f 0x9dfd +0x7340 0x9e1a +0x7341 0x9e1b +0x7342 0x9e1e +0x7343 0x9e75 +0x7344 0x9e79 +0x7345 0x9e7d +0x7346 0x9e81 +0x7347 0x9e88 +0x7348 0x9e8b +0x7349 0x9e8c +0x734a 0x9e92 +0x734b 0x9e95 +0x734c 0x9e91 +0x734d 0x9e9d +0x734e 0x9ea5 +0x734f 0x9ea9 +0x7350 0x9eb8 +0x7351 0x9eaa +0x7352 0x9ead +0x7353 0x9761 +0x7354 0x9ecc +0x7355 0x9ece +0x7356 0x9ecf +0x7357 0x9ed0 +0x7358 0x9ed4 +0x7359 0x9edc +0x735a 0x9ede +0x735b 0x9edd +0x735c 0x9ee0 +0x735d 0x9ee5 +0x735e 0x9ee8 +0x735f 0x9eef +0x7360 0x9ef4 +0x7361 0x9ef6 +0x7362 0x9ef7 +0x7363 0x9ef9 +0x7364 0x9efb +0x7365 0x9efc +0x7366 0x9efd +0x7367 0x9f07 +0x7368 0x9f08 +0x7369 0x76b7 +0x736a 0x9f15 +0x736b 0x9f21 +0x736c 0x9f2c +0x736d 0x9f3e +0x736e 0x9f4a +0x736f 0x9f52 +0x7370 0x9f54 +0x7371 0x9f63 +0x7372 0x9f5f +0x7373 0x9f60 +0x7374 0x9f61 +0x7375 0x9f66 +0x7376 0x9f67 +0x7377 0x9f6c +0x7378 0x9f6a +0x7379 0x9f77 +0x737a 0x9f72 +0x737b 0x9f76 +0x737c 0x9f95 +0x737d 0x9f9c +0x737e 0x9fa0 +0x7421 0x582f +0x7422 0x69c7 +0x7423 0x9059 +0x7424 0x7464 +0x7425 0x51dc +0x7426 0x7199 +0x7521 0xe000 +0x7522 0xe001 +0x7523 0xe002 +0x7524 0xe003 +0x7525 0xe004 +0x7526 0xe005 +0x7527 0xe006 +0x7528 0xe007 +0x7529 0xe008 +0x752a 0xe009 +0x752b 0xe00a +0x752c 0xe00b +0x752d 0xe00c +0x752e 0xe00d +0x752f 0xe00e +0x7530 0xe00f +0x7531 0xe010 +0x7532 0xe011 +0x7533 0xe012 +0x7534 0xe013 +0x7535 0xe014 +0x7536 0xe015 +0x7537 0xe016 +0x7538 0xe017 +0x7539 0xe018 +0x753a 0xe019 +0x753b 0xe01a +0x753c 0xe01b +0x753d 0xe01c +0x753e 0xe01d +0x753f 0xe01e +0x7540 0xe01f +0x7541 0xe020 +0x7542 0xe021 +0x7543 0xe022 +0x7544 0xe023 +0x7545 0xe024 +0x7546 0xe025 +0x7547 0xe026 +0x7548 0xe027 +0x7549 0xe028 +0x754a 0xe029 +0x754b 0xe02a +0x754c 0xe02b +0x754d 0xe02c +0x754e 0xe02d +0x754f 0xe02e +0x7550 0xe02f +0x7551 0xe030 +0x7552 0xe031 +0x7553 0xe032 +0x7554 0xe033 +0x7555 0xe034 +0x7556 0xe035 +0x7557 0xe036 +0x7558 0xe037 +0x7559 0xe038 +0x755a 0xe039 +0x755b 0xe03a +0x755c 0xe03b +0x755d 0xe03c +0x755e 0xe03d +0x755f 0xe03e +0x7560 0xe03f +0x7561 0xe040 +0x7562 0xe041 +0x7563 0xe042 +0x7564 0xe043 +0x7565 0xe044 +0x7566 0xe045 +0x7567 0xe046 +0x7568 0xe047 +0x7569 0xe048 +0x756a 0xe049 +0x756b 0xe04a +0x756c 0xe04b +0x756d 0xe04c +0x756e 0xe04d +0x756f 0xe04e +0x7570 0xe04f +0x7571 0xe050 +0x7572 0xe051 +0x7573 0xe052 +0x7574 0xe053 +0x7575 0xe054 +0x7576 0xe055 +0x7577 0xe056 +0x7578 0xe057 +0x7579 0xe058 +0x757a 0xe059 +0x757b 0xe05a +0x757c 0xe05b +0x757d 0xe05c +0x757e 0xe05d +0x7621 0xe05e +0x7622 0xe05f +0x7623 0xe060 +0x7624 0xe061 +0x7625 0xe062 +0x7626 0xe063 +0x7627 0xe064 +0x7628 0xe065 +0x7629 0xe066 +0x762a 0xe067 +0x762b 0xe068 +0x762c 0xe069 +0x762d 0xe06a +0x762e 0xe06b +0x762f 0xe06c +0x7630 0xe06d +0x7631 0xe06e +0x7632 0xe06f +0x7633 0xe070 +0x7634 0xe071 +0x7635 0xe072 +0x7636 0xe073 +0x7637 0xe074 +0x7638 0xe075 +0x7639 0xe076 +0x763a 0xe077 +0x763b 0xe078 +0x763c 0xe079 +0x763d 0xe07a +0x763e 0xe07b +0x763f 0xe07c +0x7640 0xe07d +0x7641 0xe07e +0x7642 0xe07f +0x7643 0xe080 +0x7644 0xe081 +0x7645 0xe082 +0x7646 0xe083 +0x7647 0xe084 +0x7648 0xe085 +0x7649 0xe086 +0x764a 0xe087 +0x764b 0xe088 +0x764c 0xe089 +0x764d 0xe08a +0x764e 0xe08b +0x764f 0xe08c +0x7650 0xe08d +0x7651 0xe08e +0x7652 0xe08f +0x7653 0xe090 +0x7654 0xe091 +0x7655 0xe092 +0x7656 0xe093 +0x7657 0xe094 +0x7658 0xe095 +0x7659 0xe096 +0x765a 0xe097 +0x765b 0xe098 +0x765c 0xe099 +0x765d 0xe09a +0x765e 0xe09b +0x765f 0xe09c +0x7660 0xe09d +0x7661 0xe09e +0x7662 0xe09f +0x7663 0xe0a0 +0x7664 0xe0a1 +0x7665 0xe0a2 +0x7666 0xe0a3 +0x7667 0xe0a4 +0x7668 0xe0a5 +0x7669 0xe0a6 +0x766a 0xe0a7 +0x766b 0xe0a8 +0x766c 0xe0a9 +0x766d 0xe0aa +0x766e 0xe0ab +0x766f 0xe0ac +0x7670 0xe0ad +0x7671 0xe0ae +0x7672 0xe0af +0x7673 0xe0b0 +0x7674 0xe0b1 +0x7675 0xe0b2 +0x7676 0xe0b3 +0x7677 0xe0b4 +0x7678 0xe0b5 +0x7679 0xe0b6 +0x767a 0xe0b7 +0x767b 0xe0b8 +0x767c 0xe0b9 +0x767d 0xe0ba +0x767e 0xe0bb +0x7721 0xe0bc +0x7722 0xe0bd +0x7723 0xe0be +0x7724 0xe0bf +0x7725 0xe0c0 +0x7726 0xe0c1 +0x7727 0xe0c2 +0x7728 0xe0c3 +0x7729 0xe0c4 +0x772a 0xe0c5 +0x772b 0xe0c6 +0x772c 0xe0c7 +0x772d 0xe0c8 +0x772e 0xe0c9 +0x772f 0xe0ca +0x7730 0xe0cb +0x7731 0xe0cc +0x7732 0xe0cd +0x7733 0xe0ce +0x7734 0xe0cf +0x7735 0xe0d0 +0x7736 0xe0d1 +0x7737 0xe0d2 +0x7738 0xe0d3 +0x7739 0xe0d4 +0x773a 0xe0d5 +0x773b 0xe0d6 +0x773c 0xe0d7 +0x773d 0xe0d8 +0x773e 0xe0d9 +0x773f 0xe0da +0x7740 0xe0db +0x7741 0xe0dc +0x7742 0xe0dd +0x7743 0xe0de +0x7744 0xe0df +0x7745 0xe0e0 +0x7746 0xe0e1 +0x7747 0xe0e2 +0x7748 0xe0e3 +0x7749 0xe0e4 +0x774a 0xe0e5 +0x774b 0xe0e6 +0x774c 0xe0e7 +0x774d 0xe0e8 +0x774e 0xe0e9 +0x774f 0xe0ea +0x7750 0xe0eb +0x7751 0xe0ec +0x7752 0xe0ed +0x7753 0xe0ee +0x7754 0xe0ef +0x7755 0xe0f0 +0x7756 0xe0f1 +0x7757 0xe0f2 +0x7758 0xe0f3 +0x7759 0xe0f4 +0x775a 0xe0f5 +0x775b 0xe0f6 +0x775c 0xe0f7 +0x775d 0xe0f8 +0x775e 0xe0f9 +0x775f 0xe0fa +0x7760 0xe0fb +0x7761 0xe0fc +0x7762 0xe0fd +0x7763 0xe0fe +0x7764 0xe0ff +0x7765 0xe100 +0x7766 0xe101 +0x7767 0xe102 +0x7768 0xe103 +0x7769 0xe104 +0x776a 0xe105 +0x776b 0xe106 +0x776c 0xe107 +0x776d 0xe108 +0x776e 0xe109 +0x776f 0xe10a +0x7770 0xe10b +0x7771 0xe10c +0x7772 0xe10d +0x7773 0xe10e +0x7774 0xe10f +0x7775 0xe110 +0x7776 0xe111 +0x7777 0xe112 +0x7778 0xe113 +0x7779 0xe114 +0x777a 0xe115 +0x777b 0xe116 +0x777c 0xe117 +0x777d 0xe118 +0x777e 0xe119 +0x7821 0xe11a +0x7822 0xe11b +0x7823 0xe11c +0x7824 0xe11d +0x7825 0xe11e +0x7826 0xe11f +0x7827 0xe120 +0x7828 0xe121 +0x7829 0xe122 +0x782a 0xe123 +0x782b 0xe124 +0x782c 0xe125 +0x782d 0xe126 +0x782e 0xe127 +0x782f 0xe128 +0x7830 0xe129 +0x7831 0xe12a +0x7832 0xe12b +0x7833 0xe12c +0x7834 0xe12d +0x7835 0xe12e +0x7836 0xe12f +0x7837 0xe130 +0x7838 0xe131 +0x7839 0xe132 +0x783a 0xe133 +0x783b 0xe134 +0x783c 0xe135 +0x783d 0xe136 +0x783e 0xe137 +0x783f 0xe138 +0x7840 0xe139 +0x7841 0xe13a +0x7842 0xe13b +0x7843 0xe13c +0x7844 0xe13d +0x7845 0xe13e +0x7846 0xe13f +0x7847 0xe140 +0x7848 0xe141 +0x7849 0xe142 +0x784a 0xe143 +0x784b 0xe144 +0x784c 0xe145 +0x784d 0xe146 +0x784e 0xe147 +0x784f 0xe148 +0x7850 0xe149 +0x7851 0xe14a +0x7852 0xe14b +0x7853 0xe14c +0x7854 0xe14d +0x7855 0xe14e +0x7856 0xe14f +0x7857 0xe150 +0x7858 0xe151 +0x7859 0xe152 +0x785a 0xe153 +0x785b 0xe154 +0x785c 0xe155 +0x785d 0xe156 +0x785e 0xe157 +0x785f 0xe158 +0x7860 0xe159 +0x7861 0xe15a +0x7862 0xe15b +0x7863 0xe15c +0x7864 0xe15d +0x7865 0xe15e +0x7866 0xe15f +0x7867 0xe160 +0x7868 0xe161 +0x7869 0xe162 +0x786a 0xe163 +0x786b 0xe164 +0x786c 0xe165 +0x786d 0xe166 +0x786e 0xe167 +0x786f 0xe168 +0x7870 0xe169 +0x7871 0xe16a +0x7872 0xe16b +0x7873 0xe16c +0x7874 0xe16d +0x7875 0xe16e +0x7876 0xe16f +0x7877 0xe170 +0x7878 0xe171 +0x7879 0xe172 +0x787a 0xe173 +0x787b 0xe174 +0x787c 0xe175 +0x787d 0xe176 +0x787e 0xe177 +0x7921 0xe178 +0x7922 0xe179 +0x7923 0xe17a +0x7924 0xe17b +0x7925 0xe17c +0x7926 0xe17d +0x7927 0xe17e +0x7928 0xe17f +0x7929 0xe180 +0x792a 0xe181 +0x792b 0xe182 +0x792c 0xe183 +0x792d 0xe184 +0x792e 0xe185 +0x792f 0xe186 +0x7930 0xe187 +0x7931 0xe188 +0x7932 0xe189 +0x7933 0xe18a +0x7934 0xe18b +0x7935 0xe18c +0x7936 0xe18d +0x7937 0xe18e +0x7938 0xe18f +0x7939 0xe190 +0x793a 0xe191 +0x793b 0xe192 +0x793c 0xe193 +0x793d 0xe194 +0x793e 0xe195 +0x793f 0xe196 +0x7940 0xe197 +0x7941 0xe198 +0x7942 0xe199 +0x7943 0xe19a +0x7944 0xe19b +0x7945 0xe19c +0x7946 0xe19d +0x7947 0xe19e +0x7948 0xe19f +0x7949 0xe1a0 +0x794a 0xe1a1 +0x794b 0xe1a2 +0x794c 0xe1a3 +0x794d 0xe1a4 +0x794e 0xe1a5 +0x794f 0xe1a6 +0x7950 0xe1a7 +0x7951 0xe1a8 +0x7952 0xe1a9 +0x7953 0xe1aa +0x7954 0xe1ab +0x7955 0xe1ac +0x7956 0xe1ad +0x7957 0xe1ae +0x7958 0xe1af +0x7959 0xe1b0 +0x795a 0xe1b1 +0x795b 0xe1b2 +0x795c 0xe1b3 +0x795d 0xe1b4 +0x795e 0xe1b5 +0x795f 0xe1b6 +0x7960 0xe1b7 +0x7961 0xe1b8 +0x7962 0xe1b9 +0x7963 0xe1ba +0x7964 0xe1bb +0x7965 0xe1bc +0x7966 0xe1bd +0x7967 0xe1be +0x7968 0xe1bf +0x7969 0xe1c0 +0x796a 0xe1c1 +0x796b 0xe1c2 +0x796c 0xe1c3 +0x796d 0xe1c4 +0x796e 0xe1c5 +0x796f 0xe1c6 +0x7970 0xe1c7 +0x7971 0xe1c8 +0x7972 0xe1c9 +0x7973 0xe1ca +0x7974 0xe1cb +0x7975 0xe1cc +0x7976 0xe1cd +0x7977 0xe1ce +0x7978 0xe1cf +0x7979 0xe1d0 +0x797a 0xe1d1 +0x797b 0xe1d2 +0x797c 0xe1d3 +0x797d 0xe1d4 +0x797e 0xe1d5 +0x7a21 0xe1d6 +0x7a22 0xe1d7 +0x7a23 0xe1d8 +0x7a24 0xe1d9 +0x7a25 0xe1da +0x7a26 0xe1db +0x7a27 0xe1dc +0x7a28 0xe1dd +0x7a29 0xe1de +0x7a2a 0xe1df +0x7a2b 0xe1e0 +0x7a2c 0xe1e1 +0x7a2d 0xe1e2 +0x7a2e 0xe1e3 +0x7a2f 0xe1e4 +0x7a30 0xe1e5 +0x7a31 0xe1e6 +0x7a32 0xe1e7 +0x7a33 0xe1e8 +0x7a34 0xe1e9 +0x7a35 0xe1ea +0x7a36 0xe1eb +0x7a37 0xe1ec +0x7a38 0xe1ed +0x7a39 0xe1ee +0x7a3a 0xe1ef +0x7a3b 0xe1f0 +0x7a3c 0xe1f1 +0x7a3d 0xe1f2 +0x7a3e 0xe1f3 +0x7a3f 0xe1f4 +0x7a40 0xe1f5 +0x7a41 0xe1f6 +0x7a42 0xe1f7 +0x7a43 0xe1f8 +0x7a44 0xe1f9 +0x7a45 0xe1fa +0x7a46 0xe1fb +0x7a47 0xe1fc +0x7a48 0xe1fd +0x7a49 0xe1fe +0x7a4a 0xe1ff +0x7a4b 0xe200 +0x7a4c 0xe201 +0x7a4d 0xe202 +0x7a4e 0xe203 +0x7a4f 0xe204 +0x7a50 0xe205 +0x7a51 0xe206 +0x7a52 0xe207 +0x7a53 0xe208 +0x7a54 0xe209 +0x7a55 0xe20a +0x7a56 0xe20b +0x7a57 0xe20c +0x7a58 0xe20d +0x7a59 0xe20e +0x7a5a 0xe20f +0x7a5b 0xe210 +0x7a5c 0xe211 +0x7a5d 0xe212 +0x7a5e 0xe213 +0x7a5f 0xe214 +0x7a60 0xe215 +0x7a61 0xe216 +0x7a62 0xe217 +0x7a63 0xe218 +0x7a64 0xe219 +0x7a65 0xe21a +0x7a66 0xe21b +0x7a67 0xe21c +0x7a68 0xe21d +0x7a69 0xe21e +0x7a6a 0xe21f +0x7a6b 0xe220 +0x7a6c 0xe221 +0x7a6d 0xe222 +0x7a6e 0xe223 +0x7a6f 0xe224 +0x7a70 0xe225 +0x7a71 0xe226 +0x7a72 0xe227 +0x7a73 0xe228 +0x7a74 0xe229 +0x7a75 0xe22a +0x7a76 0xe22b +0x7a77 0xe22c +0x7a78 0xe22d +0x7a79 0xe22e +0x7a7a 0xe22f +0x7a7b 0xe230 +0x7a7c 0xe231 +0x7a7d 0xe232 +0x7a7e 0xe233 +0x7b21 0xe234 +0x7b22 0xe235 +0x7b23 0xe236 +0x7b24 0xe237 +0x7b25 0xe238 +0x7b26 0xe239 +0x7b27 0xe23a +0x7b28 0xe23b +0x7b29 0xe23c +0x7b2a 0xe23d +0x7b2b 0xe23e +0x7b2c 0xe23f +0x7b2d 0xe240 +0x7b2e 0xe241 +0x7b2f 0xe242 +0x7b30 0xe243 +0x7b31 0xe244 +0x7b32 0xe245 +0x7b33 0xe246 +0x7b34 0xe247 +0x7b35 0xe248 +0x7b36 0xe249 +0x7b37 0xe24a +0x7b38 0xe24b +0x7b39 0xe24c +0x7b3a 0xe24d +0x7b3b 0xe24e +0x7b3c 0xe24f +0x7b3d 0xe250 +0x7b3e 0xe251 +0x7b3f 0xe252 +0x7b40 0xe253 +0x7b41 0xe254 +0x7b42 0xe255 +0x7b43 0xe256 +0x7b44 0xe257 +0x7b45 0xe258 +0x7b46 0xe259 +0x7b47 0xe25a +0x7b48 0xe25b +0x7b49 0xe25c +0x7b4a 0xe25d +0x7b4b 0xe25e +0x7b4c 0xe25f +0x7b4d 0xe260 +0x7b4e 0xe261 +0x7b4f 0xe262 +0x7b50 0xe263 +0x7b51 0xe264 +0x7b52 0xe265 +0x7b53 0xe266 +0x7b54 0xe267 +0x7b55 0xe268 +0x7b56 0xe269 +0x7b57 0xe26a +0x7b58 0xe26b +0x7b59 0xe26c +0x7b5a 0xe26d +0x7b5b 0xe26e +0x7b5c 0xe26f +0x7b5d 0xe270 +0x7b5e 0xe271 +0x7b5f 0xe272 +0x7b60 0xe273 +0x7b61 0xe274 +0x7b62 0xe275 +0x7b63 0xe276 +0x7b64 0xe277 +0x7b65 0xe278 +0x7b66 0xe279 +0x7b67 0xe27a +0x7b68 0xe27b +0x7b69 0xe27c +0x7b6a 0xe27d +0x7b6b 0xe27e +0x7b6c 0xe27f +0x7b6d 0xe280 +0x7b6e 0xe281 +0x7b6f 0xe282 +0x7b70 0xe283 +0x7b71 0xe284 +0x7b72 0xe285 +0x7b73 0xe286 +0x7b74 0xe287 +0x7b75 0xe288 +0x7b76 0xe289 +0x7b77 0xe28a +0x7b78 0xe28b +0x7b79 0xe28c +0x7b7a 0xe28d +0x7b7b 0xe28e +0x7b7c 0xe28f +0x7b7d 0xe290 +0x7b7e 0xe291 +0x7c21 0xe292 +0x7c22 0xe293 +0x7c23 0xe294 +0x7c24 0xe295 +0x7c25 0xe296 +0x7c26 0xe297 +0x7c27 0xe298 +0x7c28 0xe299 +0x7c29 0xe29a +0x7c2a 0xe29b +0x7c2b 0xe29c +0x7c2c 0xe29d +0x7c2d 0xe29e +0x7c2e 0xe29f +0x7c2f 0xe2a0 +0x7c30 0xe2a1 +0x7c31 0xe2a2 +0x7c32 0xe2a3 +0x7c33 0xe2a4 +0x7c34 0xe2a5 +0x7c35 0xe2a6 +0x7c36 0xe2a7 +0x7c37 0xe2a8 +0x7c38 0xe2a9 +0x7c39 0xe2aa +0x7c3a 0xe2ab +0x7c3b 0xe2ac +0x7c3c 0xe2ad +0x7c3d 0xe2ae +0x7c3e 0xe2af +0x7c3f 0xe2b0 +0x7c40 0xe2b1 +0x7c41 0xe2b2 +0x7c42 0xe2b3 +0x7c43 0xe2b4 +0x7c44 0xe2b5 +0x7c45 0xe2b6 +0x7c46 0xe2b7 +0x7c47 0xe2b8 +0x7c48 0xe2b9 +0x7c49 0xe2ba +0x7c4a 0xe2bb +0x7c4b 0xe2bc +0x7c4c 0xe2bd +0x7c4d 0xe2be +0x7c4e 0xe2bf +0x7c4f 0xe2c0 +0x7c50 0xe2c1 +0x7c51 0xe2c2 +0x7c52 0xe2c3 +0x7c53 0xe2c4 +0x7c54 0xe2c5 +0x7c55 0xe2c6 +0x7c56 0xe2c7 +0x7c57 0xe2c8 +0x7c58 0xe2c9 +0x7c59 0xe2ca +0x7c5a 0xe2cb +0x7c5b 0xe2cc +0x7c5c 0xe2cd +0x7c5d 0xe2ce +0x7c5e 0xe2cf +0x7c5f 0xe2d0 +0x7c60 0xe2d1 +0x7c61 0xe2d2 +0x7c62 0xe2d3 +0x7c63 0xe2d4 +0x7c64 0xe2d5 +0x7c65 0xe2d6 +0x7c66 0xe2d7 +0x7c67 0xe2d8 +0x7c68 0xe2d9 +0x7c69 0xe2da +0x7c6a 0xe2db +0x7c6b 0xe2dc +0x7c6c 0xe2dd +0x7c6d 0xe2de +0x7c6e 0xe2df +0x7c6f 0xe2e0 +0x7c70 0xe2e1 +0x7c71 0xe2e2 +0x7c72 0xe2e3 +0x7c73 0xe2e4 +0x7c74 0xe2e5 +0x7c75 0xe2e6 +0x7c76 0xe2e7 +0x7c77 0xe2e8 +0x7c78 0xe2e9 +0x7c79 0xe2ea +0x7c7a 0xe2eb +0x7c7b 0xe2ec +0x7c7c 0xe2ed +0x7c7d 0xe2ee +0x7c7e 0xe2ef +0x7d21 0xe2f0 +0x7d22 0xe2f1 +0x7d23 0xe2f2 +0x7d24 0xe2f3 +0x7d25 0xe2f4 +0x7d26 0xe2f5 +0x7d27 0xe2f6 +0x7d28 0xe2f7 +0x7d29 0xe2f8 +0x7d2a 0xe2f9 +0x7d2b 0xe2fa +0x7d2c 0xe2fb +0x7d2d 0xe2fc +0x7d2e 0xe2fd +0x7d2f 0xe2fe +0x7d30 0xe2ff +0x7d31 0xe300 +0x7d32 0xe301 +0x7d33 0xe302 +0x7d34 0xe303 +0x7d35 0xe304 +0x7d36 0xe305 +0x7d37 0xe306 +0x7d38 0xe307 +0x7d39 0xe308 +0x7d3a 0xe309 +0x7d3b 0xe30a +0x7d3c 0xe30b +0x7d3d 0xe30c +0x7d3e 0xe30d +0x7d3f 0xe30e +0x7d40 0xe30f +0x7d41 0xe310 +0x7d42 0xe311 +0x7d43 0xe312 +0x7d44 0xe313 +0x7d45 0xe314 +0x7d46 0xe315 +0x7d47 0xe316 +0x7d48 0xe317 +0x7d49 0xe318 +0x7d4a 0xe319 +0x7d4b 0xe31a +0x7d4c 0xe31b +0x7d4d 0xe31c +0x7d4e 0xe31d +0x7d4f 0xe31e +0x7d50 0xe31f +0x7d51 0xe320 +0x7d52 0xe321 +0x7d53 0xe322 +0x7d54 0xe323 +0x7d55 0xe324 +0x7d56 0xe325 +0x7d57 0xe326 +0x7d58 0xe327 +0x7d59 0xe328 +0x7d5a 0xe329 +0x7d5b 0xe32a +0x7d5c 0xe32b +0x7d5d 0xe32c +0x7d5e 0xe32d +0x7d5f 0xe32e +0x7d60 0xe32f +0x7d61 0xe330 +0x7d62 0xe331 +0x7d63 0xe332 +0x7d64 0xe333 +0x7d65 0xe334 +0x7d66 0xe335 +0x7d67 0xe336 +0x7d68 0xe337 +0x7d69 0xe338 +0x7d6a 0xe339 +0x7d6b 0xe33a +0x7d6c 0xe33b +0x7d6d 0xe33c +0x7d6e 0xe33d +0x7d6f 0xe33e +0x7d70 0xe33f +0x7d71 0xe340 +0x7d72 0xe341 +0x7d73 0xe342 +0x7d74 0xe343 +0x7d75 0xe344 +0x7d76 0xe345 +0x7d77 0xe346 +0x7d78 0xe347 +0x7d79 0xe348 +0x7d7a 0xe349 +0x7d7b 0xe34a +0x7d7c 0xe34b +0x7d7d 0xe34c +0x7d7e 0xe34d +0x7e21 0xe34e +0x7e22 0xe34f +0x7e23 0xe350 +0x7e24 0xe351 +0x7e25 0xe352 +0x7e26 0xe353 +0x7e27 0xe354 +0x7e28 0xe355 +0x7e29 0xe356 +0x7e2a 0xe357 +0x7e2b 0xe358 +0x7e2c 0xe359 +0x7e2d 0xe35a +0x7e2e 0xe35b +0x7e2f 0xe35c +0x7e30 0xe35d +0x7e31 0xe35e +0x7e32 0xe35f +0x7e33 0xe360 +0x7e34 0xe361 +0x7e35 0xe362 +0x7e36 0xe363 +0x7e37 0xe364 +0x7e38 0xe365 +0x7e39 0xe366 +0x7e3a 0xe367 +0x7e3b 0xe368 +0x7e3c 0xe369 +0x7e3d 0xe36a +0x7e3e 0xe36b +0x7e3f 0xe36c +0x7e40 0xe36d +0x7e41 0xe36e +0x7e42 0xe36f +0x7e43 0xe370 +0x7e44 0xe371 +0x7e45 0xe372 +0x7e46 0xe373 +0x7e47 0xe374 +0x7e48 0xe375 +0x7e49 0xe376 +0x7e4a 0xe377 +0x7e4b 0xe378 +0x7e4c 0xe379 +0x7e4d 0xe37a +0x7e4e 0xe37b +0x7e4f 0xe37c +0x7e50 0xe37d +0x7e51 0xe37e +0x7e52 0xe37f +0x7e53 0xe380 +0x7e54 0xe381 +0x7e55 0xe382 +0x7e56 0xe383 +0x7e57 0xe384 +0x7e58 0xe385 +0x7e59 0xe386 +0x7e5a 0xe387 +0x7e5b 0xe388 +0x7e5c 0xe389 +0x7e5d 0xe38a +0x7e5e 0xe38b +0x7e5f 0xe38c +0x7e60 0xe38d +0x7e61 0xe38e +0x7e62 0xe38f +0x7e63 0xe390 +0x7e64 0xe391 +0x7e65 0xe392 +0x7e66 0xe393 +0x7e67 0xe394 +0x7e68 0xe395 +0x7e69 0xe396 +0x7e6a 0xe397 +0x7e6b 0xe398 +0x7e6c 0xe399 +0x7e6d 0xe39a +0x7e6e 0xe39b +0x7e6f 0xe39c +0x7e70 0xe39d +0x7e71 0xe39e +0x7e72 0xe39f +0x7e73 0xe3a0 +0x7e74 0xe3a1 +0x7e75 0xe3a2 +0x7e76 0xe3a3 +0x7e77 0xe3a4 +0x7e78 0xe3a5 +0x7e79 0xe3a6 +0x7e7a 0xe3a7 +0x7e7b 0xe3a8 +0x7e7c 0xe3a9 +0x7e7d 0xe3aa +0x7e7e 0xe3ab diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0208_MS932.map b/jdk/make/tools/CharsetMapping/JIS_X_0208_MS932.map new file mode 100644 index 00000000000..ee74c0b2753 --- /dev/null +++ b/jdk/make/tools/CharsetMapping/JIS_X_0208_MS932.map @@ -0,0 +1,7364 @@ +# +# mapping is based on JIS_X_0208_MS932_De/Encoder +# +# moved following entries to .nr +# +# 0x224c 0xffe2 +# 0x225d 0x22a5 +# 0x2265 0x221a +# 0x2269 0x222b +# 0x2d70 0x2252 +# 0x2d71 0x2261 +# 0x2d77 0x2220 +# 0x2d7a 0x2235 +# 0x2d7b 0x2229 +# 0x2d7c 0x222a +# +# and following to c2b +# +# 0x2124 0x00b8 +# 0x2126 0x00b7 +# 0x2131 0x00af +# 0x2263 0x00ab +# 0x2264 0x00bb +# 0x2574 0x3094 +# 0x264c 0x00b5 +# +# +# +0x2121 0x3000 +0x2122 0x3001 +0x2123 0x3002 +0x2124 0xff0c +0x2125 0xff0e +0x2126 0x30fb +0x2127 0xff1a +0x2128 0xff1b +0x2129 0xff1f +0x212a 0xff01 +0x212b 0x309b +0x212c 0x309c +0x212d 0x00b4 +0x212e 0xff40 +0x212f 0x00a8 +0x2130 0xff3e +0x2131 0xffe3 +0x2132 0xff3f +0x2133 0x30fd +0x2134 0x30fe +0x2135 0x309d +0x2136 0x309e +0x2137 0x3003 +0x2138 0x4edd +0x2139 0x3005 +0x213a 0x3006 +0x213b 0x3007 +0x213c 0x30fc +0x213d 0x2015 +0x213e 0x2010 +0x213f 0xff0f +0x2140 0xff3c +0x2141 0xff5e +0x2142 0x2225 +0x2143 0xff5c +0x2144 0x2026 +0x2145 0x2025 +0x2146 0x2018 +0x2147 0x2019 +0x2148 0x201c +0x2149 0x201d +0x214a 0xff08 +0x214b 0xff09 +0x214c 0x3014 +0x214d 0x3015 +0x214e 0xff3b +0x214f 0xff3d +0x2150 0xff5b +0x2151 0xff5d +0x2152 0x3008 +0x2153 0x3009 +0x2154 0x300a +0x2155 0x300b +0x2156 0x300c +0x2157 0x300d +0x2158 0x300e +0x2159 0x300f +0x215a 0x3010 +0x215b 0x3011 +0x215c 0xff0b +0x215d 0xff0d +0x215e 0x00b1 +0x215f 0x00d7 +0x2160 0x00f7 +0x2161 0xff1d +0x2162 0x2260 +0x2163 0xff1c +0x2164 0xff1e +0x2165 0x2266 +0x2166 0x2267 +0x2167 0x221e +0x2168 0x2234 +0x2169 0x2642 +0x216a 0x2640 +0x216b 0x00b0 +0x216c 0x2032 +0x216d 0x2033 +0x216e 0x2103 +0x216f 0xffe5 +0x2170 0xff04 +0x2171 0xffe0 +0x2172 0xffe1 +0x2173 0xff05 +0x2174 0xff03 +0x2175 0xff06 +0x2176 0xff0a +0x2177 0xff20 +0x2178 0x00a7 +0x2179 0x2606 +0x217a 0x2605 +0x217b 0x25cb +0x217c 0x25cf +0x217d 0x25ce +0x217e 0x25c7 +0x2221 0x25c6 +0x2222 0x25a1 +0x2223 0x25a0 +0x2224 0x25b3 +0x2225 0x25b2 +0x2226 0x25bd +0x2227 0x25bc +0x2228 0x203b +0x2229 0x3012 +0x222a 0x2192 +0x222b 0x2190 +0x222c 0x2191 +0x222d 0x2193 +0x222e 0x3013 +0x223a 0x2208 +0x223b 0x220b +0x223c 0x2286 +0x223d 0x2287 +0x223e 0x2282 +0x223f 0x2283 +0x2240 0x222a +0x2241 0x2229 +0x224a 0x2227 +0x224b 0x2228 +#0x224c 0xffe2 +0x224d 0x21d2 +0x224e 0x21d4 +0x224f 0x2200 +0x2250 0x2203 +0x225c 0x2220 +#0x225d 0x22a5 +0x225e 0x2312 +0x225f 0x2202 +0x2260 0x2207 +0x2261 0x2261 +0x2262 0x2252 +0x2263 0x226a +0x2264 0x226b +#0x2265 0x221a +0x2266 0x223d +0x2267 0x221d +0x2268 0x2235 +#0x2269 0x222b +0x226a 0x222c +0x2272 0x212b +0x2273 0x2030 +0x2274 0x266f +0x2275 0x266d +0x2276 0x266a +0x2277 0x2020 +0x2278 0x2021 +0x2279 0x00b6 +0x227e 0x25ef +0x2330 0xff10 +0x2331 0xff11 +0x2332 0xff12 +0x2333 0xff13 +0x2334 0xff14 +0x2335 0xff15 +0x2336 0xff16 +0x2337 0xff17 +0x2338 0xff18 +0x2339 0xff19 +0x2341 0xff21 +0x2342 0xff22 +0x2343 0xff23 +0x2344 0xff24 +0x2345 0xff25 +0x2346 0xff26 +0x2347 0xff27 +0x2348 0xff28 +0x2349 0xff29 +0x234a 0xff2a +0x234b 0xff2b +0x234c 0xff2c +0x234d 0xff2d +0x234e 0xff2e +0x234f 0xff2f +0x2350 0xff30 +0x2351 0xff31 +0x2352 0xff32 +0x2353 0xff33 +0x2354 0xff34 +0x2355 0xff35 +0x2356 0xff36 +0x2357 0xff37 +0x2358 0xff38 +0x2359 0xff39 +0x235a 0xff3a +0x2361 0xff41 +0x2362 0xff42 +0x2363 0xff43 +0x2364 0xff44 +0x2365 0xff45 +0x2366 0xff46 +0x2367 0xff47 +0x2368 0xff48 +0x2369 0xff49 +0x236a 0xff4a +0x236b 0xff4b +0x236c 0xff4c +0x236d 0xff4d +0x236e 0xff4e +0x236f 0xff4f +0x2370 0xff50 +0x2371 0xff51 +0x2372 0xff52 +0x2373 0xff53 +0x2374 0xff54 +0x2375 0xff55 +0x2376 0xff56 +0x2377 0xff57 +0x2378 0xff58 +0x2379 0xff59 +0x237a 0xff5a +0x2421 0x3041 +0x2422 0x3042 +0x2423 0x3043 +0x2424 0x3044 +0x2425 0x3045 +0x2426 0x3046 +0x2427 0x3047 +0x2428 0x3048 +0x2429 0x3049 +0x242a 0x304a +0x242b 0x304b +0x242c 0x304c +0x242d 0x304d +0x242e 0x304e +0x242f 0x304f +0x2430 0x3050 +0x2431 0x3051 +0x2432 0x3052 +0x2433 0x3053 +0x2434 0x3054 +0x2435 0x3055 +0x2436 0x3056 +0x2437 0x3057 +0x2438 0x3058 +0x2439 0x3059 +0x243a 0x305a +0x243b 0x305b +0x243c 0x305c +0x243d 0x305d +0x243e 0x305e +0x243f 0x305f +0x2440 0x3060 +0x2441 0x3061 +0x2442 0x3062 +0x2443 0x3063 +0x2444 0x3064 +0x2445 0x3065 +0x2446 0x3066 +0x2447 0x3067 +0x2448 0x3068 +0x2449 0x3069 +0x244a 0x306a +0x244b 0x306b +0x244c 0x306c +0x244d 0x306d +0x244e 0x306e +0x244f 0x306f +0x2450 0x3070 +0x2451 0x3071 +0x2452 0x3072 +0x2453 0x3073 +0x2454 0x3074 +0x2455 0x3075 +0x2456 0x3076 +0x2457 0x3077 +0x2458 0x3078 +0x2459 0x3079 +0x245a 0x307a +0x245b 0x307b +0x245c 0x307c +0x245d 0x307d +0x245e 0x307e +0x245f 0x307f +0x2460 0x3080 +0x2461 0x3081 +0x2462 0x3082 +0x2463 0x3083 +0x2464 0x3084 +0x2465 0x3085 +0x2466 0x3086 +0x2467 0x3087 +0x2468 0x3088 +0x2469 0x3089 +0x246a 0x308a +0x246b 0x308b +0x246c 0x308c +0x246d 0x308d +0x246e 0x308e +0x246f 0x308f +0x2470 0x3090 +0x2471 0x3091 +0x2472 0x3092 +0x2473 0x3093 +0x2521 0x30a1 +0x2522 0x30a2 +0x2523 0x30a3 +0x2524 0x30a4 +0x2525 0x30a5 +0x2526 0x30a6 +0x2527 0x30a7 +0x2528 0x30a8 +0x2529 0x30a9 +0x252a 0x30aa +0x252b 0x30ab +0x252c 0x30ac +0x252d 0x30ad +0x252e 0x30ae +0x252f 0x30af +0x2530 0x30b0 +0x2531 0x30b1 +0x2532 0x30b2 +0x2533 0x30b3 +0x2534 0x30b4 +0x2535 0x30b5 +0x2536 0x30b6 +0x2537 0x30b7 +0x2538 0x30b8 +0x2539 0x30b9 +0x253a 0x30ba +0x253b 0x30bb +0x253c 0x30bc +0x253d 0x30bd +0x253e 0x30be +0x253f 0x30bf +0x2540 0x30c0 +0x2541 0x30c1 +0x2542 0x30c2 +0x2543 0x30c3 +0x2544 0x30c4 +0x2545 0x30c5 +0x2546 0x30c6 +0x2547 0x30c7 +0x2548 0x30c8 +0x2549 0x30c9 +0x254a 0x30ca +0x254b 0x30cb +0x254c 0x30cc +0x254d 0x30cd +0x254e 0x30ce +0x254f 0x30cf +0x2550 0x30d0 +0x2551 0x30d1 +0x2552 0x30d2 +0x2553 0x30d3 +0x2554 0x30d4 +0x2555 0x30d5 +0x2556 0x30d6 +0x2557 0x30d7 +0x2558 0x30d8 +0x2559 0x30d9 +0x255a 0x30da +0x255b 0x30db +0x255c 0x30dc +0x255d 0x30dd +0x255e 0x30de +0x255f 0x30df +0x2560 0x30e0 +0x2561 0x30e1 +0x2562 0x30e2 +0x2563 0x30e3 +0x2564 0x30e4 +0x2565 0x30e5 +0x2566 0x30e6 +0x2567 0x30e7 +0x2568 0x30e8 +0x2569 0x30e9 +0x256a 0x30ea +0x256b 0x30eb +0x256c 0x30ec +0x256d 0x30ed +0x256e 0x30ee +0x256f 0x30ef +0x2570 0x30f0 +0x2571 0x30f1 +0x2572 0x30f2 +0x2573 0x30f3 +0x2574 0x30f4 +0x2575 0x30f5 +0x2576 0x30f6 +0x2621 0x0391 +0x2622 0x0392 +0x2623 0x0393 +0x2624 0x0394 +0x2625 0x0395 +0x2626 0x0396 +0x2627 0x0397 +0x2628 0x0398 +0x2629 0x0399 +0x262a 0x039a +0x262b 0x039b +0x262c 0x039c +0x262d 0x039d +0x262e 0x039e +0x262f 0x039f +0x2630 0x03a0 +0x2631 0x03a1 +0x2632 0x03a3 +0x2633 0x03a4 +0x2634 0x03a5 +0x2635 0x03a6 +0x2636 0x03a7 +0x2637 0x03a8 +0x2638 0x03a9 +0x2641 0x03b1 +0x2642 0x03b2 +0x2643 0x03b3 +0x2644 0x03b4 +0x2645 0x03b5 +0x2646 0x03b6 +0x2647 0x03b7 +0x2648 0x03b8 +0x2649 0x03b9 +0x264a 0x03ba +0x264b 0x03bb +0x264c 0x03bc +0x264d 0x03bd +0x264e 0x03be +0x264f 0x03bf +0x2650 0x03c0 +0x2651 0x03c1 +0x2652 0x03c3 +0x2653 0x03c4 +0x2654 0x03c5 +0x2655 0x03c6 +0x2656 0x03c7 +0x2657 0x03c8 +0x2658 0x03c9 +0x2721 0x0410 +0x2722 0x0411 +0x2723 0x0412 +0x2724 0x0413 +0x2725 0x0414 +0x2726 0x0415 +0x2727 0x0401 +0x2728 0x0416 +0x2729 0x0417 +0x272a 0x0418 +0x272b 0x0419 +0x272c 0x041a +0x272d 0x041b +0x272e 0x041c +0x272f 0x041d +0x2730 0x041e +0x2731 0x041f +0x2732 0x0420 +0x2733 0x0421 +0x2734 0x0422 +0x2735 0x0423 +0x2736 0x0424 +0x2737 0x0425 +0x2738 0x0426 +0x2739 0x0427 +0x273a 0x0428 +0x273b 0x0429 +0x273c 0x042a +0x273d 0x042b +0x273e 0x042c +0x273f 0x042d +0x2740 0x042e +0x2741 0x042f +0x2751 0x0430 +0x2752 0x0431 +0x2753 0x0432 +0x2754 0x0433 +0x2755 0x0434 +0x2756 0x0435 +0x2757 0x0451 +0x2758 0x0436 +0x2759 0x0437 +0x275a 0x0438 +0x275b 0x0439 +0x275c 0x043a +0x275d 0x043b +0x275e 0x043c +0x275f 0x043d +0x2760 0x043e +0x2761 0x043f +0x2762 0x0440 +0x2763 0x0441 +0x2764 0x0442 +0x2765 0x0443 +0x2766 0x0444 +0x2767 0x0445 +0x2768 0x0446 +0x2769 0x0447 +0x276a 0x0448 +0x276b 0x0449 +0x276c 0x044a +0x276d 0x044b +0x276e 0x044c +0x276f 0x044d +0x2770 0x044e +0x2771 0x044f +0x2821 0x2500 +0x2822 0x2502 +0x2823 0x250c +0x2824 0x2510 +0x2825 0x2518 +0x2826 0x2514 +0x2827 0x251c +0x2828 0x252c +0x2829 0x2524 +0x282a 0x2534 +0x282b 0x253c +0x282c 0x2501 +0x282d 0x2503 +0x282e 0x250f +0x282f 0x2513 +0x2830 0x251b +0x2831 0x2517 +0x2832 0x2523 +0x2833 0x2533 +0x2834 0x252b +0x2835 0x253b +0x2836 0x254b +0x2837 0x2520 +0x2838 0x252f +0x2839 0x2528 +0x283a 0x2537 +0x283b 0x253f +0x283c 0x251d +0x283d 0x2530 +0x283e 0x2525 +0x283f 0x2538 +0x2840 0x2542 +0x2d21 0x2460 +0x2d22 0x2461 +0x2d23 0x2462 +0x2d24 0x2463 +0x2d25 0x2464 +0x2d26 0x2465 +0x2d27 0x2466 +0x2d28 0x2467 +0x2d29 0x2468 +0x2d2a 0x2469 +0x2d2b 0x246a +0x2d2c 0x246b +0x2d2d 0x246c +0x2d2e 0x246d +0x2d2f 0x246e +0x2d30 0x246f +0x2d31 0x2470 +0x2d32 0x2471 +0x2d33 0x2472 +0x2d34 0x2473 +0x2d35 0x2160 +0x2d36 0x2161 +0x2d37 0x2162 +0x2d38 0x2163 +0x2d39 0x2164 +0x2d3a 0x2165 +0x2d3b 0x2166 +0x2d3c 0x2167 +0x2d3d 0x2168 +0x2d3e 0x2169 +0x2d40 0x3349 +0x2d41 0x3314 +0x2d42 0x3322 +0x2d43 0x334d +0x2d44 0x3318 +0x2d45 0x3327 +0x2d46 0x3303 +0x2d47 0x3336 +0x2d48 0x3351 +0x2d49 0x3357 +0x2d4a 0x330d +0x2d4b 0x3326 +0x2d4c 0x3323 +0x2d4d 0x332b +0x2d4e 0x334a +0x2d4f 0x333b +0x2d50 0x339c +0x2d51 0x339d +0x2d52 0x339e +0x2d53 0x338e +0x2d54 0x338f +0x2d55 0x33c4 +0x2d56 0x33a1 +0x2d5f 0x337b +0x2d60 0x301d +0x2d61 0x301f +0x2d62 0x2116 +0x2d63 0x33cd +0x2d64 0x2121 +0x2d65 0x32a4 +0x2d66 0x32a5 +0x2d67 0x32a6 +0x2d68 0x32a7 +0x2d69 0x32a8 +0x2d6a 0x3231 +0x2d6b 0x3232 +0x2d6c 0x3239 +0x2d6d 0x337e +0x2d6e 0x337d +0x2d6f 0x337c +#0x2d70 0x2252 +#0x2d71 0x2261 +0x2d72 0x222b +0x2d73 0x222e +0x2d74 0x2211 +0x2d75 0x221a +0x2d76 0x22a5 +#0x2d77 0x2220 +0x2d78 0x221f +0x2d79 0x22bf +#0x2d7a 0x2235 +#0x2d7b 0x2229 +#0x2d7c 0x222a +0x3021 0x4e9c +0x3022 0x5516 +0x3023 0x5a03 +0x3024 0x963f +0x3025 0x54c0 +0x3026 0x611b +0x3027 0x6328 +0x3028 0x59f6 +0x3029 0x9022 +0x302a 0x8475 +0x302b 0x831c +0x302c 0x7a50 +0x302d 0x60aa +0x302e 0x63e1 +0x302f 0x6e25 +0x3030 0x65ed +0x3031 0x8466 +0x3032 0x82a6 +0x3033 0x9bf5 +0x3034 0x6893 +0x3035 0x5727 +0x3036 0x65a1 +0x3037 0x6271 +0x3038 0x5b9b +0x3039 0x59d0 +0x303a 0x867b +0x303b 0x98f4 +0x303c 0x7d62 +0x303d 0x7dbe +0x303e 0x9b8e +0x303f 0x6216 +0x3040 0x7c9f +0x3041 0x88b7 +0x3042 0x5b89 +0x3043 0x5eb5 +0x3044 0x6309 +0x3045 0x6697 +0x3046 0x6848 +0x3047 0x95c7 +0x3048 0x978d +0x3049 0x674f +0x304a 0x4ee5 +0x304b 0x4f0a +0x304c 0x4f4d +0x304d 0x4f9d +0x304e 0x5049 +0x304f 0x56f2 +0x3050 0x5937 +0x3051 0x59d4 +0x3052 0x5a01 +0x3053 0x5c09 +0x3054 0x60df +0x3055 0x610f +0x3056 0x6170 +0x3057 0x6613 +0x3058 0x6905 +0x3059 0x70ba +0x305a 0x754f +0x305b 0x7570 +0x305c 0x79fb +0x305d 0x7dad +0x305e 0x7def +0x305f 0x80c3 +0x3060 0x840e +0x3061 0x8863 +0x3062 0x8b02 +0x3063 0x9055 +0x3064 0x907a +0x3065 0x533b +0x3066 0x4e95 +0x3067 0x4ea5 +0x3068 0x57df +0x3069 0x80b2 +0x306a 0x90c1 +0x306b 0x78ef +0x306c 0x4e00 +0x306d 0x58f1 +0x306e 0x6ea2 +0x306f 0x9038 +0x3070 0x7a32 +0x3071 0x8328 +0x3072 0x828b +0x3073 0x9c2f +0x3074 0x5141 +0x3075 0x5370 +0x3076 0x54bd +0x3077 0x54e1 +0x3078 0x56e0 +0x3079 0x59fb +0x307a 0x5f15 +0x307b 0x98f2 +0x307c 0x6deb +0x307d 0x80e4 +0x307e 0x852d +0x3121 0x9662 +0x3122 0x9670 +0x3123 0x96a0 +0x3124 0x97fb +0x3125 0x540b +0x3126 0x53f3 +0x3127 0x5b87 +0x3128 0x70cf +0x3129 0x7fbd +0x312a 0x8fc2 +0x312b 0x96e8 +0x312c 0x536f +0x312d 0x9d5c +0x312e 0x7aba +0x312f 0x4e11 +0x3130 0x7893 +0x3131 0x81fc +0x3132 0x6e26 +0x3133 0x5618 +0x3134 0x5504 +0x3135 0x6b1d +0x3136 0x851a +0x3137 0x9c3b +0x3138 0x59e5 +0x3139 0x53a9 +0x313a 0x6d66 +0x313b 0x74dc +0x313c 0x958f +0x313d 0x5642 +0x313e 0x4e91 +0x313f 0x904b +0x3140 0x96f2 +0x3141 0x834f +0x3142 0x990c +0x3143 0x53e1 +0x3144 0x55b6 +0x3145 0x5b30 +0x3146 0x5f71 +0x3147 0x6620 +0x3148 0x66f3 +0x3149 0x6804 +0x314a 0x6c38 +0x314b 0x6cf3 +0x314c 0x6d29 +0x314d 0x745b +0x314e 0x76c8 +0x314f 0x7a4e +0x3150 0x9834 +0x3151 0x82f1 +0x3152 0x885b +0x3153 0x8a60 +0x3154 0x92ed +0x3155 0x6db2 +0x3156 0x75ab +0x3157 0x76ca +0x3158 0x99c5 +0x3159 0x60a6 +0x315a 0x8b01 +0x315b 0x8d8a +0x315c 0x95b2 +0x315d 0x698e +0x315e 0x53ad +0x315f 0x5186 +0x3160 0x5712 +0x3161 0x5830 +0x3162 0x5944 +0x3163 0x5bb4 +0x3164 0x5ef6 +0x3165 0x6028 +0x3166 0x63a9 +0x3167 0x63f4 +0x3168 0x6cbf +0x3169 0x6f14 +0x316a 0x708e +0x316b 0x7114 +0x316c 0x7159 +0x316d 0x71d5 +0x316e 0x733f +0x316f 0x7e01 +0x3170 0x8276 +0x3171 0x82d1 +0x3172 0x8597 +0x3173 0x9060 +0x3174 0x925b +0x3175 0x9d1b +0x3176 0x5869 +0x3177 0x65bc +0x3178 0x6c5a +0x3179 0x7525 +0x317a 0x51f9 +0x317b 0x592e +0x317c 0x5965 +0x317d 0x5f80 +0x317e 0x5fdc +0x3221 0x62bc +0x3222 0x65fa +0x3223 0x6a2a +0x3224 0x6b27 +0x3225 0x6bb4 +0x3226 0x738b +0x3227 0x7fc1 +0x3228 0x8956 +0x3229 0x9d2c +0x322a 0x9d0e +0x322b 0x9ec4 +0x322c 0x5ca1 +0x322d 0x6c96 +0x322e 0x837b +0x322f 0x5104 +0x3230 0x5c4b +0x3231 0x61b6 +0x3232 0x81c6 +0x3233 0x6876 +0x3234 0x7261 +0x3235 0x4e59 +0x3236 0x4ffa +0x3237 0x5378 +0x3238 0x6069 +0x3239 0x6e29 +0x323a 0x7a4f +0x323b 0x97f3 +0x323c 0x4e0b +0x323d 0x5316 +0x323e 0x4eee +0x323f 0x4f55 +0x3240 0x4f3d +0x3241 0x4fa1 +0x3242 0x4f73 +0x3243 0x52a0 +0x3244 0x53ef +0x3245 0x5609 +0x3246 0x590f +0x3247 0x5ac1 +0x3248 0x5bb6 +0x3249 0x5be1 +0x324a 0x79d1 +0x324b 0x6687 +0x324c 0x679c +0x324d 0x67b6 +0x324e 0x6b4c +0x324f 0x6cb3 +0x3250 0x706b +0x3251 0x73c2 +0x3252 0x798d +0x3253 0x79be +0x3254 0x7a3c +0x3255 0x7b87 +0x3256 0x82b1 +0x3257 0x82db +0x3258 0x8304 +0x3259 0x8377 +0x325a 0x83ef +0x325b 0x83d3 +0x325c 0x8766 +0x325d 0x8ab2 +0x325e 0x5629 +0x325f 0x8ca8 +0x3260 0x8fe6 +0x3261 0x904e +0x3262 0x971e +0x3263 0x868a +0x3264 0x4fc4 +0x3265 0x5ce8 +0x3266 0x6211 +0x3267 0x7259 +0x3268 0x753b +0x3269 0x81e5 +0x326a 0x82bd +0x326b 0x86fe +0x326c 0x8cc0 +0x326d 0x96c5 +0x326e 0x9913 +0x326f 0x99d5 +0x3270 0x4ecb +0x3271 0x4f1a +0x3272 0x89e3 +0x3273 0x56de +0x3274 0x584a +0x3275 0x58ca +0x3276 0x5efb +0x3277 0x5feb +0x3278 0x602a +0x3279 0x6094 +0x327a 0x6062 +0x327b 0x61d0 +0x327c 0x6212 +0x327d 0x62d0 +0x327e 0x6539 +0x3321 0x9b41 +0x3322 0x6666 +0x3323 0x68b0 +0x3324 0x6d77 +0x3325 0x7070 +0x3326 0x754c +0x3327 0x7686 +0x3328 0x7d75 +0x3329 0x82a5 +0x332a 0x87f9 +0x332b 0x958b +0x332c 0x968e +0x332d 0x8c9d +0x332e 0x51f1 +0x332f 0x52be +0x3330 0x5916 +0x3331 0x54b3 +0x3332 0x5bb3 +0x3333 0x5d16 +0x3334 0x6168 +0x3335 0x6982 +0x3336 0x6daf +0x3337 0x788d +0x3338 0x84cb +0x3339 0x8857 +0x333a 0x8a72 +0x333b 0x93a7 +0x333c 0x9ab8 +0x333d 0x6d6c +0x333e 0x99a8 +0x333f 0x86d9 +0x3340 0x57a3 +0x3341 0x67ff +0x3342 0x86ce +0x3343 0x920e +0x3344 0x5283 +0x3345 0x5687 +0x3346 0x5404 +0x3347 0x5ed3 +0x3348 0x62e1 +0x3349 0x64b9 +0x334a 0x683c +0x334b 0x6838 +0x334c 0x6bbb +0x334d 0x7372 +0x334e 0x78ba +0x334f 0x7a6b +0x3350 0x899a +0x3351 0x89d2 +0x3352 0x8d6b +0x3353 0x8f03 +0x3354 0x90ed +0x3355 0x95a3 +0x3356 0x9694 +0x3357 0x9769 +0x3358 0x5b66 +0x3359 0x5cb3 +0x335a 0x697d +0x335b 0x984d +0x335c 0x984e +0x335d 0x639b +0x335e 0x7b20 +0x335f 0x6a2b +0x3360 0x6a7f +0x3361 0x68b6 +0x3362 0x9c0d +0x3363 0x6f5f +0x3364 0x5272 +0x3365 0x559d +0x3366 0x6070 +0x3367 0x62ec +0x3368 0x6d3b +0x3369 0x6e07 +0x336a 0x6ed1 +0x336b 0x845b +0x336c 0x8910 +0x336d 0x8f44 +0x336e 0x4e14 +0x336f 0x9c39 +0x3370 0x53f6 +0x3371 0x691b +0x3372 0x6a3a +0x3373 0x9784 +0x3374 0x682a +0x3375 0x515c +0x3376 0x7ac3 +0x3377 0x84b2 +0x3378 0x91dc +0x3379 0x938c +0x337a 0x565b +0x337b 0x9d28 +0x337c 0x6822 +0x337d 0x8305 +0x337e 0x8431 +0x3421 0x7ca5 +0x3422 0x5208 +0x3423 0x82c5 +0x3424 0x74e6 +0x3425 0x4e7e +0x3426 0x4f83 +0x3427 0x51a0 +0x3428 0x5bd2 +0x3429 0x520a +0x342a 0x52d8 +0x342b 0x52e7 +0x342c 0x5dfb +0x342d 0x559a +0x342e 0x582a +0x342f 0x59e6 +0x3430 0x5b8c +0x3431 0x5b98 +0x3432 0x5bdb +0x3433 0x5e72 +0x3434 0x5e79 +0x3435 0x60a3 +0x3436 0x611f +0x3437 0x6163 +0x3438 0x61be +0x3439 0x63db +0x343a 0x6562 +0x343b 0x67d1 +0x343c 0x6853 +0x343d 0x68fa +0x343e 0x6b3e +0x343f 0x6b53 +0x3440 0x6c57 +0x3441 0x6f22 +0x3442 0x6f97 +0x3443 0x6f45 +0x3444 0x74b0 +0x3445 0x7518 +0x3446 0x76e3 +0x3447 0x770b +0x3448 0x7aff +0x3449 0x7ba1 +0x344a 0x7c21 +0x344b 0x7de9 +0x344c 0x7f36 +0x344d 0x7ff0 +0x344e 0x809d +0x344f 0x8266 +0x3450 0x839e +0x3451 0x89b3 +0x3452 0x8acc +0x3453 0x8cab +0x3454 0x9084 +0x3455 0x9451 +0x3456 0x9593 +0x3457 0x9591 +0x3458 0x95a2 +0x3459 0x9665 +0x345a 0x97d3 +0x345b 0x9928 +0x345c 0x8218 +0x345d 0x4e38 +0x345e 0x542b +0x345f 0x5cb8 +0x3460 0x5dcc +0x3461 0x73a9 +0x3462 0x764c +0x3463 0x773c +0x3464 0x5ca9 +0x3465 0x7feb +0x3466 0x8d0b +0x3467 0x96c1 +0x3468 0x9811 +0x3469 0x9854 +0x346a 0x9858 +0x346b 0x4f01 +0x346c 0x4f0e +0x346d 0x5371 +0x346e 0x559c +0x346f 0x5668 +0x3470 0x57fa +0x3471 0x5947 +0x3472 0x5b09 +0x3473 0x5bc4 +0x3474 0x5c90 +0x3475 0x5e0c +0x3476 0x5e7e +0x3477 0x5fcc +0x3478 0x63ee +0x3479 0x673a +0x347a 0x65d7 +0x347b 0x65e2 +0x347c 0x671f +0x347d 0x68cb +0x347e 0x68c4 +0x3521 0x6a5f +0x3522 0x5e30 +0x3523 0x6bc5 +0x3524 0x6c17 +0x3525 0x6c7d +0x3526 0x757f +0x3527 0x7948 +0x3528 0x5b63 +0x3529 0x7a00 +0x352a 0x7d00 +0x352b 0x5fbd +0x352c 0x898f +0x352d 0x8a18 +0x352e 0x8cb4 +0x352f 0x8d77 +0x3530 0x8ecc +0x3531 0x8f1d +0x3532 0x98e2 +0x3533 0x9a0e +0x3534 0x9b3c +0x3535 0x4e80 +0x3536 0x507d +0x3537 0x5100 +0x3538 0x5993 +0x3539 0x5b9c +0x353a 0x622f +0x353b 0x6280 +0x353c 0x64ec +0x353d 0x6b3a +0x353e 0x72a0 +0x353f 0x7591 +0x3540 0x7947 +0x3541 0x7fa9 +0x3542 0x87fb +0x3543 0x8abc +0x3544 0x8b70 +0x3545 0x63ac +0x3546 0x83ca +0x3547 0x97a0 +0x3548 0x5409 +0x3549 0x5403 +0x354a 0x55ab +0x354b 0x6854 +0x354c 0x6a58 +0x354d 0x8a70 +0x354e 0x7827 +0x354f 0x6775 +0x3550 0x9ecd +0x3551 0x5374 +0x3552 0x5ba2 +0x3553 0x811a +0x3554 0x8650 +0x3555 0x9006 +0x3556 0x4e18 +0x3557 0x4e45 +0x3558 0x4ec7 +0x3559 0x4f11 +0x355a 0x53ca +0x355b 0x5438 +0x355c 0x5bae +0x355d 0x5f13 +0x355e 0x6025 +0x355f 0x6551 +0x3560 0x673d +0x3561 0x6c42 +0x3562 0x6c72 +0x3563 0x6ce3 +0x3564 0x7078 +0x3565 0x7403 +0x3566 0x7a76 +0x3567 0x7aae +0x3568 0x7b08 +0x3569 0x7d1a +0x356a 0x7cfe +0x356b 0x7d66 +0x356c 0x65e7 +0x356d 0x725b +0x356e 0x53bb +0x356f 0x5c45 +0x3570 0x5de8 +0x3571 0x62d2 +0x3572 0x62e0 +0x3573 0x6319 +0x3574 0x6e20 +0x3575 0x865a +0x3576 0x8a31 +0x3577 0x8ddd +0x3578 0x92f8 +0x3579 0x6f01 +0x357a 0x79a6 +0x357b 0x9b5a +0x357c 0x4ea8 +0x357d 0x4eab +0x357e 0x4eac +0x3621 0x4f9b +0x3622 0x4fa0 +0x3623 0x50d1 +0x3624 0x5147 +0x3625 0x7af6 +0x3626 0x5171 +0x3627 0x51f6 +0x3628 0x5354 +0x3629 0x5321 +0x362a 0x537f +0x362b 0x53eb +0x362c 0x55ac +0x362d 0x5883 +0x362e 0x5ce1 +0x362f 0x5f37 +0x3630 0x5f4a +0x3631 0x602f +0x3632 0x6050 +0x3633 0x606d +0x3634 0x631f +0x3635 0x6559 +0x3636 0x6a4b +0x3637 0x6cc1 +0x3638 0x72c2 +0x3639 0x72ed +0x363a 0x77ef +0x363b 0x80f8 +0x363c 0x8105 +0x363d 0x8208 +0x363e 0x854e +0x363f 0x90f7 +0x3640 0x93e1 +0x3641 0x97ff +0x3642 0x9957 +0x3643 0x9a5a +0x3644 0x4ef0 +0x3645 0x51dd +0x3646 0x5c2d +0x3647 0x6681 +0x3648 0x696d +0x3649 0x5c40 +0x364a 0x66f2 +0x364b 0x6975 +0x364c 0x7389 +0x364d 0x6850 +0x364e 0x7c81 +0x364f 0x50c5 +0x3650 0x52e4 +0x3651 0x5747 +0x3652 0x5dfe +0x3653 0x9326 +0x3654 0x65a4 +0x3655 0x6b23 +0x3656 0x6b3d +0x3657 0x7434 +0x3658 0x7981 +0x3659 0x79bd +0x365a 0x7b4b +0x365b 0x7dca +0x365c 0x82b9 +0x365d 0x83cc +0x365e 0x887f +0x365f 0x895f +0x3660 0x8b39 +0x3661 0x8fd1 +0x3662 0x91d1 +0x3663 0x541f +0x3664 0x9280 +0x3665 0x4e5d +0x3666 0x5036 +0x3667 0x53e5 +0x3668 0x533a +0x3669 0x72d7 +0x366a 0x7396 +0x366b 0x77e9 +0x366c 0x82e6 +0x366d 0x8eaf +0x366e 0x99c6 +0x366f 0x99c8 +0x3670 0x99d2 +0x3671 0x5177 +0x3672 0x611a +0x3673 0x865e +0x3674 0x55b0 +0x3675 0x7a7a +0x3676 0x5076 +0x3677 0x5bd3 +0x3678 0x9047 +0x3679 0x9685 +0x367a 0x4e32 +0x367b 0x6adb +0x367c 0x91e7 +0x367d 0x5c51 +0x367e 0x5c48 +0x3721 0x6398 +0x3722 0x7a9f +0x3723 0x6c93 +0x3724 0x9774 +0x3725 0x8f61 +0x3726 0x7aaa +0x3727 0x718a +0x3728 0x9688 +0x3729 0x7c82 +0x372a 0x6817 +0x372b 0x7e70 +0x372c 0x6851 +0x372d 0x936c +0x372e 0x52f2 +0x372f 0x541b +0x3730 0x85ab +0x3731 0x8a13 +0x3732 0x7fa4 +0x3733 0x8ecd +0x3734 0x90e1 +0x3735 0x5366 +0x3736 0x8888 +0x3737 0x7941 +0x3738 0x4fc2 +0x3739 0x50be +0x373a 0x5211 +0x373b 0x5144 +0x373c 0x5553 +0x373d 0x572d +0x373e 0x73ea +0x373f 0x578b +0x3740 0x5951 +0x3741 0x5f62 +0x3742 0x5f84 +0x3743 0x6075 +0x3744 0x6176 +0x3745 0x6167 +0x3746 0x61a9 +0x3747 0x63b2 +0x3748 0x643a +0x3749 0x656c +0x374a 0x666f +0x374b 0x6842 +0x374c 0x6e13 +0x374d 0x7566 +0x374e 0x7a3d +0x374f 0x7cfb +0x3750 0x7d4c +0x3751 0x7d99 +0x3752 0x7e4b +0x3753 0x7f6b +0x3754 0x830e +0x3755 0x834a +0x3756 0x86cd +0x3757 0x8a08 +0x3758 0x8a63 +0x3759 0x8b66 +0x375a 0x8efd +0x375b 0x981a +0x375c 0x9d8f +0x375d 0x82b8 +0x375e 0x8fce +0x375f 0x9be8 +0x3760 0x5287 +0x3761 0x621f +0x3762 0x6483 +0x3763 0x6fc0 +0x3764 0x9699 +0x3765 0x6841 +0x3766 0x5091 +0x3767 0x6b20 +0x3768 0x6c7a +0x3769 0x6f54 +0x376a 0x7a74 +0x376b 0x7d50 +0x376c 0x8840 +0x376d 0x8a23 +0x376e 0x6708 +0x376f 0x4ef6 +0x3770 0x5039 +0x3771 0x5026 +0x3772 0x5065 +0x3773 0x517c +0x3774 0x5238 +0x3775 0x5263 +0x3776 0x55a7 +0x3777 0x570f +0x3778 0x5805 +0x3779 0x5acc +0x377a 0x5efa +0x377b 0x61b2 +0x377c 0x61f8 +0x377d 0x62f3 +0x377e 0x6372 +0x3821 0x691c +0x3822 0x6a29 +0x3823 0x727d +0x3824 0x72ac +0x3825 0x732e +0x3826 0x7814 +0x3827 0x786f +0x3828 0x7d79 +0x3829 0x770c +0x382a 0x80a9 +0x382b 0x898b +0x382c 0x8b19 +0x382d 0x8ce2 +0x382e 0x8ed2 +0x382f 0x9063 +0x3830 0x9375 +0x3831 0x967a +0x3832 0x9855 +0x3833 0x9a13 +0x3834 0x9e78 +0x3835 0x5143 +0x3836 0x539f +0x3837 0x53b3 +0x3838 0x5e7b +0x3839 0x5f26 +0x383a 0x6e1b +0x383b 0x6e90 +0x383c 0x7384 +0x383d 0x73fe +0x383e 0x7d43 +0x383f 0x8237 +0x3840 0x8a00 +0x3841 0x8afa +0x3842 0x9650 +0x3843 0x4e4e +0x3844 0x500b +0x3845 0x53e4 +0x3846 0x547c +0x3847 0x56fa +0x3848 0x59d1 +0x3849 0x5b64 +0x384a 0x5df1 +0x384b 0x5eab +0x384c 0x5f27 +0x384d 0x6238 +0x384e 0x6545 +0x384f 0x67af +0x3850 0x6e56 +0x3851 0x72d0 +0x3852 0x7cca +0x3853 0x88b4 +0x3854 0x80a1 +0x3855 0x80e1 +0x3856 0x83f0 +0x3857 0x864e +0x3858 0x8a87 +0x3859 0x8de8 +0x385a 0x9237 +0x385b 0x96c7 +0x385c 0x9867 +0x385d 0x9f13 +0x385e 0x4e94 +0x385f 0x4e92 +0x3860 0x4f0d +0x3861 0x5348 +0x3862 0x5449 +0x3863 0x543e +0x3864 0x5a2f +0x3865 0x5f8c +0x3866 0x5fa1 +0x3867 0x609f +0x3868 0x68a7 +0x3869 0x6a8e +0x386a 0x745a +0x386b 0x7881 +0x386c 0x8a9e +0x386d 0x8aa4 +0x386e 0x8b77 +0x386f 0x9190 +0x3870 0x4e5e +0x3871 0x9bc9 +0x3872 0x4ea4 +0x3873 0x4f7c +0x3874 0x4faf +0x3875 0x5019 +0x3876 0x5016 +0x3877 0x5149 +0x3878 0x516c +0x3879 0x529f +0x387a 0x52b9 +0x387b 0x52fe +0x387c 0x539a +0x387d 0x53e3 +0x387e 0x5411 +0x3921 0x540e +0x3922 0x5589 +0x3923 0x5751 +0x3924 0x57a2 +0x3925 0x597d +0x3926 0x5b54 +0x3927 0x5b5d +0x3928 0x5b8f +0x3929 0x5de5 +0x392a 0x5de7 +0x392b 0x5df7 +0x392c 0x5e78 +0x392d 0x5e83 +0x392e 0x5e9a +0x392f 0x5eb7 +0x3930 0x5f18 +0x3931 0x6052 +0x3932 0x614c +0x3933 0x6297 +0x3934 0x62d8 +0x3935 0x63a7 +0x3936 0x653b +0x3937 0x6602 +0x3938 0x6643 +0x3939 0x66f4 +0x393a 0x676d +0x393b 0x6821 +0x393c 0x6897 +0x393d 0x69cb +0x393e 0x6c5f +0x393f 0x6d2a +0x3940 0x6d69 +0x3941 0x6e2f +0x3942 0x6e9d +0x3943 0x7532 +0x3944 0x7687 +0x3945 0x786c +0x3946 0x7a3f +0x3947 0x7ce0 +0x3948 0x7d05 +0x3949 0x7d18 +0x394a 0x7d5e +0x394b 0x7db1 +0x394c 0x8015 +0x394d 0x8003 +0x394e 0x80af +0x394f 0x80b1 +0x3950 0x8154 +0x3951 0x818f +0x3952 0x822a +0x3953 0x8352 +0x3954 0x884c +0x3955 0x8861 +0x3956 0x8b1b +0x3957 0x8ca2 +0x3958 0x8cfc +0x3959 0x90ca +0x395a 0x9175 +0x395b 0x9271 +0x395c 0x783f +0x395d 0x92fc +0x395e 0x95a4 +0x395f 0x964d +0x3960 0x9805 +0x3961 0x9999 +0x3962 0x9ad8 +0x3963 0x9d3b +0x3964 0x525b +0x3965 0x52ab +0x3966 0x53f7 +0x3967 0x5408 +0x3968 0x58d5 +0x3969 0x62f7 +0x396a 0x6fe0 +0x396b 0x8c6a +0x396c 0x8f5f +0x396d 0x9eb9 +0x396e 0x514b +0x396f 0x523b +0x3970 0x544a +0x3971 0x56fd +0x3972 0x7a40 +0x3973 0x9177 +0x3974 0x9d60 +0x3975 0x9ed2 +0x3976 0x7344 +0x3977 0x6f09 +0x3978 0x8170 +0x3979 0x7511 +0x397a 0x5ffd +0x397b 0x60da +0x397c 0x9aa8 +0x397d 0x72db +0x397e 0x8fbc +0x3a21 0x6b64 +0x3a22 0x9803 +0x3a23 0x4eca +0x3a24 0x56f0 +0x3a25 0x5764 +0x3a26 0x58be +0x3a27 0x5a5a +0x3a28 0x6068 +0x3a29 0x61c7 +0x3a2a 0x660f +0x3a2b 0x6606 +0x3a2c 0x6839 +0x3a2d 0x68b1 +0x3a2e 0x6df7 +0x3a2f 0x75d5 +0x3a30 0x7d3a +0x3a31 0x826e +0x3a32 0x9b42 +0x3a33 0x4e9b +0x3a34 0x4f50 +0x3a35 0x53c9 +0x3a36 0x5506 +0x3a37 0x5d6f +0x3a38 0x5de6 +0x3a39 0x5dee +0x3a3a 0x67fb +0x3a3b 0x6c99 +0x3a3c 0x7473 +0x3a3d 0x7802 +0x3a3e 0x8a50 +0x3a3f 0x9396 +0x3a40 0x88df +0x3a41 0x5750 +0x3a42 0x5ea7 +0x3a43 0x632b +0x3a44 0x50b5 +0x3a45 0x50ac +0x3a46 0x518d +0x3a47 0x6700 +0x3a48 0x54c9 +0x3a49 0x585e +0x3a4a 0x59bb +0x3a4b 0x5bb0 +0x3a4c 0x5f69 +0x3a4d 0x624d +0x3a4e 0x63a1 +0x3a4f 0x683d +0x3a50 0x6b73 +0x3a51 0x6e08 +0x3a52 0x707d +0x3a53 0x91c7 +0x3a54 0x7280 +0x3a55 0x7815 +0x3a56 0x7826 +0x3a57 0x796d +0x3a58 0x658e +0x3a59 0x7d30 +0x3a5a 0x83dc +0x3a5b 0x88c1 +0x3a5c 0x8f09 +0x3a5d 0x969b +0x3a5e 0x5264 +0x3a5f 0x5728 +0x3a60 0x6750 +0x3a61 0x7f6a +0x3a62 0x8ca1 +0x3a63 0x51b4 +0x3a64 0x5742 +0x3a65 0x962a +0x3a66 0x583a +0x3a67 0x698a +0x3a68 0x80b4 +0x3a69 0x54b2 +0x3a6a 0x5d0e +0x3a6b 0x57fc +0x3a6c 0x7895 +0x3a6d 0x9dfa +0x3a6e 0x4f5c +0x3a6f 0x524a +0x3a70 0x548b +0x3a71 0x643e +0x3a72 0x6628 +0x3a73 0x6714 +0x3a74 0x67f5 +0x3a75 0x7a84 +0x3a76 0x7b56 +0x3a77 0x7d22 +0x3a78 0x932f +0x3a79 0x685c +0x3a7a 0x9bad +0x3a7b 0x7b39 +0x3a7c 0x5319 +0x3a7d 0x518a +0x3a7e 0x5237 +0x3b21 0x5bdf +0x3b22 0x62f6 +0x3b23 0x64ae +0x3b24 0x64e6 +0x3b25 0x672d +0x3b26 0x6bba +0x3b27 0x85a9 +0x3b28 0x96d1 +0x3b29 0x7690 +0x3b2a 0x9bd6 +0x3b2b 0x634c +0x3b2c 0x9306 +0x3b2d 0x9bab +0x3b2e 0x76bf +0x3b2f 0x6652 +0x3b30 0x4e09 +0x3b31 0x5098 +0x3b32 0x53c2 +0x3b33 0x5c71 +0x3b34 0x60e8 +0x3b35 0x6492 +0x3b36 0x6563 +0x3b37 0x685f +0x3b38 0x71e6 +0x3b39 0x73ca +0x3b3a 0x7523 +0x3b3b 0x7b97 +0x3b3c 0x7e82 +0x3b3d 0x8695 +0x3b3e 0x8b83 +0x3b3f 0x8cdb +0x3b40 0x9178 +0x3b41 0x9910 +0x3b42 0x65ac +0x3b43 0x66ab +0x3b44 0x6b8b +0x3b45 0x4ed5 +0x3b46 0x4ed4 +0x3b47 0x4f3a +0x3b48 0x4f7f +0x3b49 0x523a +0x3b4a 0x53f8 +0x3b4b 0x53f2 +0x3b4c 0x55e3 +0x3b4d 0x56db +0x3b4e 0x58eb +0x3b4f 0x59cb +0x3b50 0x59c9 +0x3b51 0x59ff +0x3b52 0x5b50 +0x3b53 0x5c4d +0x3b54 0x5e02 +0x3b55 0x5e2b +0x3b56 0x5fd7 +0x3b57 0x601d +0x3b58 0x6307 +0x3b59 0x652f +0x3b5a 0x5b5c +0x3b5b 0x65af +0x3b5c 0x65bd +0x3b5d 0x65e8 +0x3b5e 0x679d +0x3b5f 0x6b62 +0x3b60 0x6b7b +0x3b61 0x6c0f +0x3b62 0x7345 +0x3b63 0x7949 +0x3b64 0x79c1 +0x3b65 0x7cf8 +0x3b66 0x7d19 +0x3b67 0x7d2b +0x3b68 0x80a2 +0x3b69 0x8102 +0x3b6a 0x81f3 +0x3b6b 0x8996 +0x3b6c 0x8a5e +0x3b6d 0x8a69 +0x3b6e 0x8a66 +0x3b6f 0x8a8c +0x3b70 0x8aee +0x3b71 0x8cc7 +0x3b72 0x8cdc +0x3b73 0x96cc +0x3b74 0x98fc +0x3b75 0x6b6f +0x3b76 0x4e8b +0x3b77 0x4f3c +0x3b78 0x4f8d +0x3b79 0x5150 +0x3b7a 0x5b57 +0x3b7b 0x5bfa +0x3b7c 0x6148 +0x3b7d 0x6301 +0x3b7e 0x6642 +0x3c21 0x6b21 +0x3c22 0x6ecb +0x3c23 0x6cbb +0x3c24 0x723e +0x3c25 0x74bd +0x3c26 0x75d4 +0x3c27 0x78c1 +0x3c28 0x793a +0x3c29 0x800c +0x3c2a 0x8033 +0x3c2b 0x81ea +0x3c2c 0x8494 +0x3c2d 0x8f9e +0x3c2e 0x6c50 +0x3c2f 0x9e7f +0x3c30 0x5f0f +0x3c31 0x8b58 +0x3c32 0x9d2b +0x3c33 0x7afa +0x3c34 0x8ef8 +0x3c35 0x5b8d +0x3c36 0x96eb +0x3c37 0x4e03 +0x3c38 0x53f1 +0x3c39 0x57f7 +0x3c3a 0x5931 +0x3c3b 0x5ac9 +0x3c3c 0x5ba4 +0x3c3d 0x6089 +0x3c3e 0x6e7f +0x3c3f 0x6f06 +0x3c40 0x75be +0x3c41 0x8cea +0x3c42 0x5b9f +0x3c43 0x8500 +0x3c44 0x7be0 +0x3c45 0x5072 +0x3c46 0x67f4 +0x3c47 0x829d +0x3c48 0x5c61 +0x3c49 0x854a +0x3c4a 0x7e1e +0x3c4b 0x820e +0x3c4c 0x5199 +0x3c4d 0x5c04 +0x3c4e 0x6368 +0x3c4f 0x8d66 +0x3c50 0x659c +0x3c51 0x716e +0x3c52 0x793e +0x3c53 0x7d17 +0x3c54 0x8005 +0x3c55 0x8b1d +0x3c56 0x8eca +0x3c57 0x906e +0x3c58 0x86c7 +0x3c59 0x90aa +0x3c5a 0x501f +0x3c5b 0x52fa +0x3c5c 0x5c3a +0x3c5d 0x6753 +0x3c5e 0x707c +0x3c5f 0x7235 +0x3c60 0x914c +0x3c61 0x91c8 +0x3c62 0x932b +0x3c63 0x82e5 +0x3c64 0x5bc2 +0x3c65 0x5f31 +0x3c66 0x60f9 +0x3c67 0x4e3b +0x3c68 0x53d6 +0x3c69 0x5b88 +0x3c6a 0x624b +0x3c6b 0x6731 +0x3c6c 0x6b8a +0x3c6d 0x72e9 +0x3c6e 0x73e0 +0x3c6f 0x7a2e +0x3c70 0x816b +0x3c71 0x8da3 +0x3c72 0x9152 +0x3c73 0x9996 +0x3c74 0x5112 +0x3c75 0x53d7 +0x3c76 0x546a +0x3c77 0x5bff +0x3c78 0x6388 +0x3c79 0x6a39 +0x3c7a 0x7dac +0x3c7b 0x9700 +0x3c7c 0x56da +0x3c7d 0x53ce +0x3c7e 0x5468 +0x3d21 0x5b97 +0x3d22 0x5c31 +0x3d23 0x5dde +0x3d24 0x4fee +0x3d25 0x6101 +0x3d26 0x62fe +0x3d27 0x6d32 +0x3d28 0x79c0 +0x3d29 0x79cb +0x3d2a 0x7d42 +0x3d2b 0x7e4d +0x3d2c 0x7fd2 +0x3d2d 0x81ed +0x3d2e 0x821f +0x3d2f 0x8490 +0x3d30 0x8846 +0x3d31 0x8972 +0x3d32 0x8b90 +0x3d33 0x8e74 +0x3d34 0x8f2f +0x3d35 0x9031 +0x3d36 0x914b +0x3d37 0x916c +0x3d38 0x96c6 +0x3d39 0x919c +0x3d3a 0x4ec0 +0x3d3b 0x4f4f +0x3d3c 0x5145 +0x3d3d 0x5341 +0x3d3e 0x5f93 +0x3d3f 0x620e +0x3d40 0x67d4 +0x3d41 0x6c41 +0x3d42 0x6e0b +0x3d43 0x7363 +0x3d44 0x7e26 +0x3d45 0x91cd +0x3d46 0x9283 +0x3d47 0x53d4 +0x3d48 0x5919 +0x3d49 0x5bbf +0x3d4a 0x6dd1 +0x3d4b 0x795d +0x3d4c 0x7e2e +0x3d4d 0x7c9b +0x3d4e 0x587e +0x3d4f 0x719f +0x3d50 0x51fa +0x3d51 0x8853 +0x3d52 0x8ff0 +0x3d53 0x4fca +0x3d54 0x5cfb +0x3d55 0x6625 +0x3d56 0x77ac +0x3d57 0x7ae3 +0x3d58 0x821c +0x3d59 0x99ff +0x3d5a 0x51c6 +0x3d5b 0x5faa +0x3d5c 0x65ec +0x3d5d 0x696f +0x3d5e 0x6b89 +0x3d5f 0x6df3 +0x3d60 0x6e96 +0x3d61 0x6f64 +0x3d62 0x76fe +0x3d63 0x7d14 +0x3d64 0x5de1 +0x3d65 0x9075 +0x3d66 0x9187 +0x3d67 0x9806 +0x3d68 0x51e6 +0x3d69 0x521d +0x3d6a 0x6240 +0x3d6b 0x6691 +0x3d6c 0x66d9 +0x3d6d 0x6e1a +0x3d6e 0x5eb6 +0x3d6f 0x7dd2 +0x3d70 0x7f72 +0x3d71 0x66f8 +0x3d72 0x85af +0x3d73 0x85f7 +0x3d74 0x8af8 +0x3d75 0x52a9 +0x3d76 0x53d9 +0x3d77 0x5973 +0x3d78 0x5e8f +0x3d79 0x5f90 +0x3d7a 0x6055 +0x3d7b 0x92e4 +0x3d7c 0x9664 +0x3d7d 0x50b7 +0x3d7e 0x511f +0x3e21 0x52dd +0x3e22 0x5320 +0x3e23 0x5347 +0x3e24 0x53ec +0x3e25 0x54e8 +0x3e26 0x5546 +0x3e27 0x5531 +0x3e28 0x5617 +0x3e29 0x5968 +0x3e2a 0x59be +0x3e2b 0x5a3c +0x3e2c 0x5bb5 +0x3e2d 0x5c06 +0x3e2e 0x5c0f +0x3e2f 0x5c11 +0x3e30 0x5c1a +0x3e31 0x5e84 +0x3e32 0x5e8a +0x3e33 0x5ee0 +0x3e34 0x5f70 +0x3e35 0x627f +0x3e36 0x6284 +0x3e37 0x62db +0x3e38 0x638c +0x3e39 0x6377 +0x3e3a 0x6607 +0x3e3b 0x660c +0x3e3c 0x662d +0x3e3d 0x6676 +0x3e3e 0x677e +0x3e3f 0x68a2 +0x3e40 0x6a1f +0x3e41 0x6a35 +0x3e42 0x6cbc +0x3e43 0x6d88 +0x3e44 0x6e09 +0x3e45 0x6e58 +0x3e46 0x713c +0x3e47 0x7126 +0x3e48 0x7167 +0x3e49 0x75c7 +0x3e4a 0x7701 +0x3e4b 0x785d +0x3e4c 0x7901 +0x3e4d 0x7965 +0x3e4e 0x79f0 +0x3e4f 0x7ae0 +0x3e50 0x7b11 +0x3e51 0x7ca7 +0x3e52 0x7d39 +0x3e53 0x8096 +0x3e54 0x83d6 +0x3e55 0x848b +0x3e56 0x8549 +0x3e57 0x885d +0x3e58 0x88f3 +0x3e59 0x8a1f +0x3e5a 0x8a3c +0x3e5b 0x8a54 +0x3e5c 0x8a73 +0x3e5d 0x8c61 +0x3e5e 0x8cde +0x3e5f 0x91a4 +0x3e60 0x9266 +0x3e61 0x937e +0x3e62 0x9418 +0x3e63 0x969c +0x3e64 0x9798 +0x3e65 0x4e0a +0x3e66 0x4e08 +0x3e67 0x4e1e +0x3e68 0x4e57 +0x3e69 0x5197 +0x3e6a 0x5270 +0x3e6b 0x57ce +0x3e6c 0x5834 +0x3e6d 0x58cc +0x3e6e 0x5b22 +0x3e6f 0x5e38 +0x3e70 0x60c5 +0x3e71 0x64fe +0x3e72 0x6761 +0x3e73 0x6756 +0x3e74 0x6d44 +0x3e75 0x72b6 +0x3e76 0x7573 +0x3e77 0x7a63 +0x3e78 0x84b8 +0x3e79 0x8b72 +0x3e7a 0x91b8 +0x3e7b 0x9320 +0x3e7c 0x5631 +0x3e7d 0x57f4 +0x3e7e 0x98fe +0x3f21 0x62ed +0x3f22 0x690d +0x3f23 0x6b96 +0x3f24 0x71ed +0x3f25 0x7e54 +0x3f26 0x8077 +0x3f27 0x8272 +0x3f28 0x89e6 +0x3f29 0x98df +0x3f2a 0x8755 +0x3f2b 0x8fb1 +0x3f2c 0x5c3b +0x3f2d 0x4f38 +0x3f2e 0x4fe1 +0x3f2f 0x4fb5 +0x3f30 0x5507 +0x3f31 0x5a20 +0x3f32 0x5bdd +0x3f33 0x5be9 +0x3f34 0x5fc3 +0x3f35 0x614e +0x3f36 0x632f +0x3f37 0x65b0 +0x3f38 0x664b +0x3f39 0x68ee +0x3f3a 0x699b +0x3f3b 0x6d78 +0x3f3c 0x6df1 +0x3f3d 0x7533 +0x3f3e 0x75b9 +0x3f3f 0x771f +0x3f40 0x795e +0x3f41 0x79e6 +0x3f42 0x7d33 +0x3f43 0x81e3 +0x3f44 0x82af +0x3f45 0x85aa +0x3f46 0x89aa +0x3f47 0x8a3a +0x3f48 0x8eab +0x3f49 0x8f9b +0x3f4a 0x9032 +0x3f4b 0x91dd +0x3f4c 0x9707 +0x3f4d 0x4eba +0x3f4e 0x4ec1 +0x3f4f 0x5203 +0x3f50 0x5875 +0x3f51 0x58ec +0x3f52 0x5c0b +0x3f53 0x751a +0x3f54 0x5c3d +0x3f55 0x814e +0x3f56 0x8a0a +0x3f57 0x8fc5 +0x3f58 0x9663 +0x3f59 0x976d +0x3f5a 0x7b25 +0x3f5b 0x8acf +0x3f5c 0x9808 +0x3f5d 0x9162 +0x3f5e 0x56f3 +0x3f5f 0x53a8 +0x3f60 0x9017 +0x3f61 0x5439 +0x3f62 0x5782 +0x3f63 0x5e25 +0x3f64 0x63a8 +0x3f65 0x6c34 +0x3f66 0x708a +0x3f67 0x7761 +0x3f68 0x7c8b +0x3f69 0x7fe0 +0x3f6a 0x8870 +0x3f6b 0x9042 +0x3f6c 0x9154 +0x3f6d 0x9310 +0x3f6e 0x9318 +0x3f6f 0x968f +0x3f70 0x745e +0x3f71 0x9ac4 +0x3f72 0x5d07 +0x3f73 0x5d69 +0x3f74 0x6570 +0x3f75 0x67a2 +0x3f76 0x8da8 +0x3f77 0x96db +0x3f78 0x636e +0x3f79 0x6749 +0x3f7a 0x6919 +0x3f7b 0x83c5 +0x3f7c 0x9817 +0x3f7d 0x96c0 +0x3f7e 0x88fe +0x4021 0x6f84 +0x4022 0x647a +0x4023 0x5bf8 +0x4024 0x4e16 +0x4025 0x702c +0x4026 0x755d +0x4027 0x662f +0x4028 0x51c4 +0x4029 0x5236 +0x402a 0x52e2 +0x402b 0x59d3 +0x402c 0x5f81 +0x402d 0x6027 +0x402e 0x6210 +0x402f 0x653f +0x4030 0x6574 +0x4031 0x661f +0x4032 0x6674 +0x4033 0x68f2 +0x4034 0x6816 +0x4035 0x6b63 +0x4036 0x6e05 +0x4037 0x7272 +0x4038 0x751f +0x4039 0x76db +0x403a 0x7cbe +0x403b 0x8056 +0x403c 0x58f0 +0x403d 0x88fd +0x403e 0x897f +0x403f 0x8aa0 +0x4040 0x8a93 +0x4041 0x8acb +0x4042 0x901d +0x4043 0x9192 +0x4044 0x9752 +0x4045 0x9759 +0x4046 0x6589 +0x4047 0x7a0e +0x4048 0x8106 +0x4049 0x96bb +0x404a 0x5e2d +0x404b 0x60dc +0x404c 0x621a +0x404d 0x65a5 +0x404e 0x6614 +0x404f 0x6790 +0x4050 0x77f3 +0x4051 0x7a4d +0x4052 0x7c4d +0x4053 0x7e3e +0x4054 0x810a +0x4055 0x8cac +0x4056 0x8d64 +0x4057 0x8de1 +0x4058 0x8e5f +0x4059 0x78a9 +0x405a 0x5207 +0x405b 0x62d9 +0x405c 0x63a5 +0x405d 0x6442 +0x405e 0x6298 +0x405f 0x8a2d +0x4060 0x7a83 +0x4061 0x7bc0 +0x4062 0x8aac +0x4063 0x96ea +0x4064 0x7d76 +0x4065 0x820c +0x4066 0x8749 +0x4067 0x4ed9 +0x4068 0x5148 +0x4069 0x5343 +0x406a 0x5360 +0x406b 0x5ba3 +0x406c 0x5c02 +0x406d 0x5c16 +0x406e 0x5ddd +0x406f 0x6226 +0x4070 0x6247 +0x4071 0x64b0 +0x4072 0x6813 +0x4073 0x6834 +0x4074 0x6cc9 +0x4075 0x6d45 +0x4076 0x6d17 +0x4077 0x67d3 +0x4078 0x6f5c +0x4079 0x714e +0x407a 0x717d +0x407b 0x65cb +0x407c 0x7a7f +0x407d 0x7bad +0x407e 0x7dda +0x4121 0x7e4a +0x4122 0x7fa8 +0x4123 0x817a +0x4124 0x821b +0x4125 0x8239 +0x4126 0x85a6 +0x4127 0x8a6e +0x4128 0x8cce +0x4129 0x8df5 +0x412a 0x9078 +0x412b 0x9077 +0x412c 0x92ad +0x412d 0x9291 +0x412e 0x9583 +0x412f 0x9bae +0x4130 0x524d +0x4131 0x5584 +0x4132 0x6f38 +0x4133 0x7136 +0x4134 0x5168 +0x4135 0x7985 +0x4136 0x7e55 +0x4137 0x81b3 +0x4138 0x7cce +0x4139 0x564c +0x413a 0x5851 +0x413b 0x5ca8 +0x413c 0x63aa +0x413d 0x66fe +0x413e 0x66fd +0x413f 0x695a +0x4140 0x72d9 +0x4141 0x758f +0x4142 0x758e +0x4143 0x790e +0x4144 0x7956 +0x4145 0x79df +0x4146 0x7c97 +0x4147 0x7d20 +0x4148 0x7d44 +0x4149 0x8607 +0x414a 0x8a34 +0x414b 0x963b +0x414c 0x9061 +0x414d 0x9f20 +0x414e 0x50e7 +0x414f 0x5275 +0x4150 0x53cc +0x4151 0x53e2 +0x4152 0x5009 +0x4153 0x55aa +0x4154 0x58ee +0x4155 0x594f +0x4156 0x723d +0x4157 0x5b8b +0x4158 0x5c64 +0x4159 0x531d +0x415a 0x60e3 +0x415b 0x60f3 +0x415c 0x635c +0x415d 0x6383 +0x415e 0x633f +0x415f 0x63bb +0x4160 0x64cd +0x4161 0x65e9 +0x4162 0x66f9 +0x4163 0x5de3 +0x4164 0x69cd +0x4165 0x69fd +0x4166 0x6f15 +0x4167 0x71e5 +0x4168 0x4e89 +0x4169 0x75e9 +0x416a 0x76f8 +0x416b 0x7a93 +0x416c 0x7cdf +0x416d 0x7dcf +0x416e 0x7d9c +0x416f 0x8061 +0x4170 0x8349 +0x4171 0x8358 +0x4172 0x846c +0x4173 0x84bc +0x4174 0x85fb +0x4175 0x88c5 +0x4176 0x8d70 +0x4177 0x9001 +0x4178 0x906d +0x4179 0x9397 +0x417a 0x971c +0x417b 0x9a12 +0x417c 0x50cf +0x417d 0x5897 +0x417e 0x618e +0x4221 0x81d3 +0x4222 0x8535 +0x4223 0x8d08 +0x4224 0x9020 +0x4225 0x4fc3 +0x4226 0x5074 +0x4227 0x5247 +0x4228 0x5373 +0x4229 0x606f +0x422a 0x6349 +0x422b 0x675f +0x422c 0x6e2c +0x422d 0x8db3 +0x422e 0x901f +0x422f 0x4fd7 +0x4230 0x5c5e +0x4231 0x8cca +0x4232 0x65cf +0x4233 0x7d9a +0x4234 0x5352 +0x4235 0x8896 +0x4236 0x5176 +0x4237 0x63c3 +0x4238 0x5b58 +0x4239 0x5b6b +0x423a 0x5c0a +0x423b 0x640d +0x423c 0x6751 +0x423d 0x905c +0x423e 0x4ed6 +0x423f 0x591a +0x4240 0x592a +0x4241 0x6c70 +0x4242 0x8a51 +0x4243 0x553e +0x4244 0x5815 +0x4245 0x59a5 +0x4246 0x60f0 +0x4247 0x6253 +0x4248 0x67c1 +0x4249 0x8235 +0x424a 0x6955 +0x424b 0x9640 +0x424c 0x99c4 +0x424d 0x9a28 +0x424e 0x4f53 +0x424f 0x5806 +0x4250 0x5bfe +0x4251 0x8010 +0x4252 0x5cb1 +0x4253 0x5e2f +0x4254 0x5f85 +0x4255 0x6020 +0x4256 0x614b +0x4257 0x6234 +0x4258 0x66ff +0x4259 0x6cf0 +0x425a 0x6ede +0x425b 0x80ce +0x425c 0x817f +0x425d 0x82d4 +0x425e 0x888b +0x425f 0x8cb8 +0x4260 0x9000 +0x4261 0x902e +0x4262 0x968a +0x4263 0x9edb +0x4264 0x9bdb +0x4265 0x4ee3 +0x4266 0x53f0 +0x4267 0x5927 +0x4268 0x7b2c +0x4269 0x918d +0x426a 0x984c +0x426b 0x9df9 +0x426c 0x6edd +0x426d 0x7027 +0x426e 0x5353 +0x426f 0x5544 +0x4270 0x5b85 +0x4271 0x6258 +0x4272 0x629e +0x4273 0x62d3 +0x4274 0x6ca2 +0x4275 0x6fef +0x4276 0x7422 +0x4277 0x8a17 +0x4278 0x9438 +0x4279 0x6fc1 +0x427a 0x8afe +0x427b 0x8338 +0x427c 0x51e7 +0x427d 0x86f8 +0x427e 0x53ea +0x4321 0x53e9 +0x4322 0x4f46 +0x4323 0x9054 +0x4324 0x8fb0 +0x4325 0x596a +0x4326 0x8131 +0x4327 0x5dfd +0x4328 0x7aea +0x4329 0x8fbf +0x432a 0x68da +0x432b 0x8c37 +0x432c 0x72f8 +0x432d 0x9c48 +0x432e 0x6a3d +0x432f 0x8ab0 +0x4330 0x4e39 +0x4331 0x5358 +0x4332 0x5606 +0x4333 0x5766 +0x4334 0x62c5 +0x4335 0x63a2 +0x4336 0x65e6 +0x4337 0x6b4e +0x4338 0x6de1 +0x4339 0x6e5b +0x433a 0x70ad +0x433b 0x77ed +0x433c 0x7aef +0x433d 0x7baa +0x433e 0x7dbb +0x433f 0x803d +0x4340 0x80c6 +0x4341 0x86cb +0x4342 0x8a95 +0x4343 0x935b +0x4344 0x56e3 +0x4345 0x58c7 +0x4346 0x5f3e +0x4347 0x65ad +0x4348 0x6696 +0x4349 0x6a80 +0x434a 0x6bb5 +0x434b 0x7537 +0x434c 0x8ac7 +0x434d 0x5024 +0x434e 0x77e5 +0x434f 0x5730 +0x4350 0x5f1b +0x4351 0x6065 +0x4352 0x667a +0x4353 0x6c60 +0x4354 0x75f4 +0x4355 0x7a1a +0x4356 0x7f6e +0x4357 0x81f4 +0x4358 0x8718 +0x4359 0x9045 +0x435a 0x99b3 +0x435b 0x7bc9 +0x435c 0x755c +0x435d 0x7af9 +0x435e 0x7b51 +0x435f 0x84c4 +0x4360 0x9010 +0x4361 0x79e9 +0x4362 0x7a92 +0x4363 0x8336 +0x4364 0x5ae1 +0x4365 0x7740 +0x4366 0x4e2d +0x4367 0x4ef2 +0x4368 0x5b99 +0x4369 0x5fe0 +0x436a 0x62bd +0x436b 0x663c +0x436c 0x67f1 +0x436d 0x6ce8 +0x436e 0x866b +0x436f 0x8877 +0x4370 0x8a3b +0x4371 0x914e +0x4372 0x92f3 +0x4373 0x99d0 +0x4374 0x6a17 +0x4375 0x7026 +0x4376 0x732a +0x4377 0x82e7 +0x4378 0x8457 +0x4379 0x8caf +0x437a 0x4e01 +0x437b 0x5146 +0x437c 0x51cb +0x437d 0x558b +0x437e 0x5bf5 +0x4421 0x5e16 +0x4422 0x5e33 +0x4423 0x5e81 +0x4424 0x5f14 +0x4425 0x5f35 +0x4426 0x5f6b +0x4427 0x5fb4 +0x4428 0x61f2 +0x4429 0x6311 +0x442a 0x66a2 +0x442b 0x671d +0x442c 0x6f6e +0x442d 0x7252 +0x442e 0x753a +0x442f 0x773a +0x4430 0x8074 +0x4431 0x8139 +0x4432 0x8178 +0x4433 0x8776 +0x4434 0x8abf +0x4435 0x8adc +0x4436 0x8d85 +0x4437 0x8df3 +0x4438 0x929a +0x4439 0x9577 +0x443a 0x9802 +0x443b 0x9ce5 +0x443c 0x52c5 +0x443d 0x6357 +0x443e 0x76f4 +0x443f 0x6715 +0x4440 0x6c88 +0x4441 0x73cd +0x4442 0x8cc3 +0x4443 0x93ae +0x4444 0x9673 +0x4445 0x6d25 +0x4446 0x589c +0x4447 0x690e +0x4448 0x69cc +0x4449 0x8ffd +0x444a 0x939a +0x444b 0x75db +0x444c 0x901a +0x444d 0x585a +0x444e 0x6802 +0x444f 0x63b4 +0x4450 0x69fb +0x4451 0x4f43 +0x4452 0x6f2c +0x4453 0x67d8 +0x4454 0x8fbb +0x4455 0x8526 +0x4456 0x7db4 +0x4457 0x9354 +0x4458 0x693f +0x4459 0x6f70 +0x445a 0x576a +0x445b 0x58f7 +0x445c 0x5b2c +0x445d 0x7d2c +0x445e 0x722a +0x445f 0x540a +0x4460 0x91e3 +0x4461 0x9db4 +0x4462 0x4ead +0x4463 0x4f4e +0x4464 0x505c +0x4465 0x5075 +0x4466 0x5243 +0x4467 0x8c9e +0x4468 0x5448 +0x4469 0x5824 +0x446a 0x5b9a +0x446b 0x5e1d +0x446c 0x5e95 +0x446d 0x5ead +0x446e 0x5ef7 +0x446f 0x5f1f +0x4470 0x608c +0x4471 0x62b5 +0x4472 0x633a +0x4473 0x63d0 +0x4474 0x68af +0x4475 0x6c40 +0x4476 0x7887 +0x4477 0x798e +0x4478 0x7a0b +0x4479 0x7de0 +0x447a 0x8247 +0x447b 0x8a02 +0x447c 0x8ae6 +0x447d 0x8e44 +0x447e 0x9013 +0x4521 0x90b8 +0x4522 0x912d +0x4523 0x91d8 +0x4524 0x9f0e +0x4525 0x6ce5 +0x4526 0x6458 +0x4527 0x64e2 +0x4528 0x6575 +0x4529 0x6ef4 +0x452a 0x7684 +0x452b 0x7b1b +0x452c 0x9069 +0x452d 0x93d1 +0x452e 0x6eba +0x452f 0x54f2 +0x4530 0x5fb9 +0x4531 0x64a4 +0x4532 0x8f4d +0x4533 0x8fed +0x4534 0x9244 +0x4535 0x5178 +0x4536 0x586b +0x4537 0x5929 +0x4538 0x5c55 +0x4539 0x5e97 +0x453a 0x6dfb +0x453b 0x7e8f +0x453c 0x751c +0x453d 0x8cbc +0x453e 0x8ee2 +0x453f 0x985b +0x4540 0x70b9 +0x4541 0x4f1d +0x4542 0x6bbf +0x4543 0x6fb1 +0x4544 0x7530 +0x4545 0x96fb +0x4546 0x514e +0x4547 0x5410 +0x4548 0x5835 +0x4549 0x5857 +0x454a 0x59ac +0x454b 0x5c60 +0x454c 0x5f92 +0x454d 0x6597 +0x454e 0x675c +0x454f 0x6e21 +0x4550 0x767b +0x4551 0x83df +0x4552 0x8ced +0x4553 0x9014 +0x4554 0x90fd +0x4555 0x934d +0x4556 0x7825 +0x4557 0x783a +0x4558 0x52aa +0x4559 0x5ea6 +0x455a 0x571f +0x455b 0x5974 +0x455c 0x6012 +0x455d 0x5012 +0x455e 0x515a +0x455f 0x51ac +0x4560 0x51cd +0x4561 0x5200 +0x4562 0x5510 +0x4563 0x5854 +0x4564 0x5858 +0x4565 0x5957 +0x4566 0x5b95 +0x4567 0x5cf6 +0x4568 0x5d8b +0x4569 0x60bc +0x456a 0x6295 +0x456b 0x642d +0x456c 0x6771 +0x456d 0x6843 +0x456e 0x68bc +0x456f 0x68df +0x4570 0x76d7 +0x4571 0x6dd8 +0x4572 0x6e6f +0x4573 0x6d9b +0x4574 0x706f +0x4575 0x71c8 +0x4576 0x5f53 +0x4577 0x75d8 +0x4578 0x7977 +0x4579 0x7b49 +0x457a 0x7b54 +0x457b 0x7b52 +0x457c 0x7cd6 +0x457d 0x7d71 +0x457e 0x5230 +0x4621 0x8463 +0x4622 0x8569 +0x4623 0x85e4 +0x4624 0x8a0e +0x4625 0x8b04 +0x4626 0x8c46 +0x4627 0x8e0f +0x4628 0x9003 +0x4629 0x900f +0x462a 0x9419 +0x462b 0x9676 +0x462c 0x982d +0x462d 0x9a30 +0x462e 0x95d8 +0x462f 0x50cd +0x4630 0x52d5 +0x4631 0x540c +0x4632 0x5802 +0x4633 0x5c0e +0x4634 0x61a7 +0x4635 0x649e +0x4636 0x6d1e +0x4637 0x77b3 +0x4638 0x7ae5 +0x4639 0x80f4 +0x463a 0x8404 +0x463b 0x9053 +0x463c 0x9285 +0x463d 0x5ce0 +0x463e 0x9d07 +0x463f 0x533f +0x4640 0x5f97 +0x4641 0x5fb3 +0x4642 0x6d9c +0x4643 0x7279 +0x4644 0x7763 +0x4645 0x79bf +0x4646 0x7be4 +0x4647 0x6bd2 +0x4648 0x72ec +0x4649 0x8aad +0x464a 0x6803 +0x464b 0x6a61 +0x464c 0x51f8 +0x464d 0x7a81 +0x464e 0x6934 +0x464f 0x5c4a +0x4650 0x9cf6 +0x4651 0x82eb +0x4652 0x5bc5 +0x4653 0x9149 +0x4654 0x701e +0x4655 0x5678 +0x4656 0x5c6f +0x4657 0x60c7 +0x4658 0x6566 +0x4659 0x6c8c +0x465a 0x8c5a +0x465b 0x9041 +0x465c 0x9813 +0x465d 0x5451 +0x465e 0x66c7 +0x465f 0x920d +0x4660 0x5948 +0x4661 0x90a3 +0x4662 0x5185 +0x4663 0x4e4d +0x4664 0x51ea +0x4665 0x8599 +0x4666 0x8b0e +0x4667 0x7058 +0x4668 0x637a +0x4669 0x934b +0x466a 0x6962 +0x466b 0x99b4 +0x466c 0x7e04 +0x466d 0x7577 +0x466e 0x5357 +0x466f 0x6960 +0x4670 0x8edf +0x4671 0x96e3 +0x4672 0x6c5d +0x4673 0x4e8c +0x4674 0x5c3c +0x4675 0x5f10 +0x4676 0x8fe9 +0x4677 0x5302 +0x4678 0x8cd1 +0x4679 0x8089 +0x467a 0x8679 +0x467b 0x5eff +0x467c 0x65e5 +0x467d 0x4e73 +0x467e 0x5165 +0x4721 0x5982 +0x4722 0x5c3f +0x4723 0x97ee +0x4724 0x4efb +0x4725 0x598a +0x4726 0x5fcd +0x4727 0x8a8d +0x4728 0x6fe1 +0x4729 0x79b0 +0x472a 0x7962 +0x472b 0x5be7 +0x472c 0x8471 +0x472d 0x732b +0x472e 0x71b1 +0x472f 0x5e74 +0x4730 0x5ff5 +0x4731 0x637b +0x4732 0x649a +0x4733 0x71c3 +0x4734 0x7c98 +0x4735 0x4e43 +0x4736 0x5efc +0x4737 0x4e4b +0x4738 0x57dc +0x4739 0x56a2 +0x473a 0x60a9 +0x473b 0x6fc3 +0x473c 0x7d0d +0x473d 0x80fd +0x473e 0x8133 +0x473f 0x81bf +0x4740 0x8fb2 +0x4741 0x8997 +0x4742 0x86a4 +0x4743 0x5df4 +0x4744 0x628a +0x4745 0x64ad +0x4746 0x8987 +0x4747 0x6777 +0x4748 0x6ce2 +0x4749 0x6d3e +0x474a 0x7436 +0x474b 0x7834 +0x474c 0x5a46 +0x474d 0x7f75 +0x474e 0x82ad +0x474f 0x99ac +0x4750 0x4ff3 +0x4751 0x5ec3 +0x4752 0x62dd +0x4753 0x6392 +0x4754 0x6557 +0x4755 0x676f +0x4756 0x76c3 +0x4757 0x724c +0x4758 0x80cc +0x4759 0x80ba +0x475a 0x8f29 +0x475b 0x914d +0x475c 0x500d +0x475d 0x57f9 +0x475e 0x5a92 +0x475f 0x6885 +0x4760 0x6973 +0x4761 0x7164 +0x4762 0x72fd +0x4763 0x8cb7 +0x4764 0x58f2 +0x4765 0x8ce0 +0x4766 0x966a +0x4767 0x9019 +0x4768 0x877f +0x4769 0x79e4 +0x476a 0x77e7 +0x476b 0x8429 +0x476c 0x4f2f +0x476d 0x5265 +0x476e 0x535a +0x476f 0x62cd +0x4770 0x67cf +0x4771 0x6cca +0x4772 0x767d +0x4773 0x7b94 +0x4774 0x7c95 +0x4775 0x8236 +0x4776 0x8584 +0x4777 0x8feb +0x4778 0x66dd +0x4779 0x6f20 +0x477a 0x7206 +0x477b 0x7e1b +0x477c 0x83ab +0x477d 0x99c1 +0x477e 0x9ea6 +0x4821 0x51fd +0x4822 0x7bb1 +0x4823 0x7872 +0x4824 0x7bb8 +0x4825 0x8087 +0x4826 0x7b48 +0x4827 0x6ae8 +0x4828 0x5e61 +0x4829 0x808c +0x482a 0x7551 +0x482b 0x7560 +0x482c 0x516b +0x482d 0x9262 +0x482e 0x6e8c +0x482f 0x767a +0x4830 0x9197 +0x4831 0x9aea +0x4832 0x4f10 +0x4833 0x7f70 +0x4834 0x629c +0x4835 0x7b4f +0x4836 0x95a5 +0x4837 0x9ce9 +0x4838 0x567a +0x4839 0x5859 +0x483a 0x86e4 +0x483b 0x96bc +0x483c 0x4f34 +0x483d 0x5224 +0x483e 0x534a +0x483f 0x53cd +0x4840 0x53db +0x4841 0x5e06 +0x4842 0x642c +0x4843 0x6591 +0x4844 0x677f +0x4845 0x6c3e +0x4846 0x6c4e +0x4847 0x7248 +0x4848 0x72af +0x4849 0x73ed +0x484a 0x7554 +0x484b 0x7e41 +0x484c 0x822c +0x484d 0x85e9 +0x484e 0x8ca9 +0x484f 0x7bc4 +0x4850 0x91c6 +0x4851 0x7169 +0x4852 0x9812 +0x4853 0x98ef +0x4854 0x633d +0x4855 0x6669 +0x4856 0x756a +0x4857 0x76e4 +0x4858 0x78d0 +0x4859 0x8543 +0x485a 0x86ee +0x485b 0x532a +0x485c 0x5351 +0x485d 0x5426 +0x485e 0x5983 +0x485f 0x5e87 +0x4860 0x5f7c +0x4861 0x60b2 +0x4862 0x6249 +0x4863 0x6279 +0x4864 0x62ab +0x4865 0x6590 +0x4866 0x6bd4 +0x4867 0x6ccc +0x4868 0x75b2 +0x4869 0x76ae +0x486a 0x7891 +0x486b 0x79d8 +0x486c 0x7dcb +0x486d 0x7f77 +0x486e 0x80a5 +0x486f 0x88ab +0x4870 0x8ab9 +0x4871 0x8cbb +0x4872 0x907f +0x4873 0x975e +0x4874 0x98db +0x4875 0x6a0b +0x4876 0x7c38 +0x4877 0x5099 +0x4878 0x5c3e +0x4879 0x5fae +0x487a 0x6787 +0x487b 0x6bd8 +0x487c 0x7435 +0x487d 0x7709 +0x487e 0x7f8e +0x4921 0x9f3b +0x4922 0x67ca +0x4923 0x7a17 +0x4924 0x5339 +0x4925 0x758b +0x4926 0x9aed +0x4927 0x5f66 +0x4928 0x819d +0x4929 0x83f1 +0x492a 0x8098 +0x492b 0x5f3c +0x492c 0x5fc5 +0x492d 0x7562 +0x492e 0x7b46 +0x492f 0x903c +0x4930 0x6867 +0x4931 0x59eb +0x4932 0x5a9b +0x4933 0x7d10 +0x4934 0x767e +0x4935 0x8b2c +0x4936 0x4ff5 +0x4937 0x5f6a +0x4938 0x6a19 +0x4939 0x6c37 +0x493a 0x6f02 +0x493b 0x74e2 +0x493c 0x7968 +0x493d 0x8868 +0x493e 0x8a55 +0x493f 0x8c79 +0x4940 0x5edf +0x4941 0x63cf +0x4942 0x75c5 +0x4943 0x79d2 +0x4944 0x82d7 +0x4945 0x9328 +0x4946 0x92f2 +0x4947 0x849c +0x4948 0x86ed +0x4949 0x9c2d +0x494a 0x54c1 +0x494b 0x5f6c +0x494c 0x658c +0x494d 0x6d5c +0x494e 0x7015 +0x494f 0x8ca7 +0x4950 0x8cd3 +0x4951 0x983b +0x4952 0x654f +0x4953 0x74f6 +0x4954 0x4e0d +0x4955 0x4ed8 +0x4956 0x57e0 +0x4957 0x592b +0x4958 0x5a66 +0x4959 0x5bcc +0x495a 0x51a8 +0x495b 0x5e03 +0x495c 0x5e9c +0x495d 0x6016 +0x495e 0x6276 +0x495f 0x6577 +0x4960 0x65a7 +0x4961 0x666e +0x4962 0x6d6e +0x4963 0x7236 +0x4964 0x7b26 +0x4965 0x8150 +0x4966 0x819a +0x4967 0x8299 +0x4968 0x8b5c +0x4969 0x8ca0 +0x496a 0x8ce6 +0x496b 0x8d74 +0x496c 0x961c +0x496d 0x9644 +0x496e 0x4fae +0x496f 0x64ab +0x4970 0x6b66 +0x4971 0x821e +0x4972 0x8461 +0x4973 0x856a +0x4974 0x90e8 +0x4975 0x5c01 +0x4976 0x6953 +0x4977 0x98a8 +0x4978 0x847a +0x4979 0x8557 +0x497a 0x4f0f +0x497b 0x526f +0x497c 0x5fa9 +0x497d 0x5e45 +0x497e 0x670d +0x4a21 0x798f +0x4a22 0x8179 +0x4a23 0x8907 +0x4a24 0x8986 +0x4a25 0x6df5 +0x4a26 0x5f17 +0x4a27 0x6255 +0x4a28 0x6cb8 +0x4a29 0x4ecf +0x4a2a 0x7269 +0x4a2b 0x9b92 +0x4a2c 0x5206 +0x4a2d 0x543b +0x4a2e 0x5674 +0x4a2f 0x58b3 +0x4a30 0x61a4 +0x4a31 0x626e +0x4a32 0x711a +0x4a33 0x596e +0x4a34 0x7c89 +0x4a35 0x7cde +0x4a36 0x7d1b +0x4a37 0x96f0 +0x4a38 0x6587 +0x4a39 0x805e +0x4a3a 0x4e19 +0x4a3b 0x4f75 +0x4a3c 0x5175 +0x4a3d 0x5840 +0x4a3e 0x5e63 +0x4a3f 0x5e73 +0x4a40 0x5f0a +0x4a41 0x67c4 +0x4a42 0x4e26 +0x4a43 0x853d +0x4a44 0x9589 +0x4a45 0x965b +0x4a46 0x7c73 +0x4a47 0x9801 +0x4a48 0x50fb +0x4a49 0x58c1 +0x4a4a 0x7656 +0x4a4b 0x78a7 +0x4a4c 0x5225 +0x4a4d 0x77a5 +0x4a4e 0x8511 +0x4a4f 0x7b86 +0x4a50 0x504f +0x4a51 0x5909 +0x4a52 0x7247 +0x4a53 0x7bc7 +0x4a54 0x7de8 +0x4a55 0x8fba +0x4a56 0x8fd4 +0x4a57 0x904d +0x4a58 0x4fbf +0x4a59 0x52c9 +0x4a5a 0x5a29 +0x4a5b 0x5f01 +0x4a5c 0x97ad +0x4a5d 0x4fdd +0x4a5e 0x8217 +0x4a5f 0x92ea +0x4a60 0x5703 +0x4a61 0x6355 +0x4a62 0x6b69 +0x4a63 0x752b +0x4a64 0x88dc +0x4a65 0x8f14 +0x4a66 0x7a42 +0x4a67 0x52df +0x4a68 0x5893 +0x4a69 0x6155 +0x4a6a 0x620a +0x4a6b 0x66ae +0x4a6c 0x6bcd +0x4a6d 0x7c3f +0x4a6e 0x83e9 +0x4a6f 0x5023 +0x4a70 0x4ff8 +0x4a71 0x5305 +0x4a72 0x5446 +0x4a73 0x5831 +0x4a74 0x5949 +0x4a75 0x5b9d +0x4a76 0x5cf0 +0x4a77 0x5cef +0x4a78 0x5d29 +0x4a79 0x5e96 +0x4a7a 0x62b1 +0x4a7b 0x6367 +0x4a7c 0x653e +0x4a7d 0x65b9 +0x4a7e 0x670b +0x4b21 0x6cd5 +0x4b22 0x6ce1 +0x4b23 0x70f9 +0x4b24 0x7832 +0x4b25 0x7e2b +0x4b26 0x80de +0x4b27 0x82b3 +0x4b28 0x840c +0x4b29 0x84ec +0x4b2a 0x8702 +0x4b2b 0x8912 +0x4b2c 0x8a2a +0x4b2d 0x8c4a +0x4b2e 0x90a6 +0x4b2f 0x92d2 +0x4b30 0x98fd +0x4b31 0x9cf3 +0x4b32 0x9d6c +0x4b33 0x4e4f +0x4b34 0x4ea1 +0x4b35 0x508d +0x4b36 0x5256 +0x4b37 0x574a +0x4b38 0x59a8 +0x4b39 0x5e3d +0x4b3a 0x5fd8 +0x4b3b 0x5fd9 +0x4b3c 0x623f +0x4b3d 0x66b4 +0x4b3e 0x671b +0x4b3f 0x67d0 +0x4b40 0x68d2 +0x4b41 0x5192 +0x4b42 0x7d21 +0x4b43 0x80aa +0x4b44 0x81a8 +0x4b45 0x8b00 +0x4b46 0x8c8c +0x4b47 0x8cbf +0x4b48 0x927e +0x4b49 0x9632 +0x4b4a 0x5420 +0x4b4b 0x982c +0x4b4c 0x5317 +0x4b4d 0x50d5 +0x4b4e 0x535c +0x4b4f 0x58a8 +0x4b50 0x64b2 +0x4b51 0x6734 +0x4b52 0x7267 +0x4b53 0x7766 +0x4b54 0x7a46 +0x4b55 0x91e6 +0x4b56 0x52c3 +0x4b57 0x6ca1 +0x4b58 0x6b86 +0x4b59 0x5800 +0x4b5a 0x5e4c +0x4b5b 0x5954 +0x4b5c 0x672c +0x4b5d 0x7ffb +0x4b5e 0x51e1 +0x4b5f 0x76c6 +0x4b60 0x6469 +0x4b61 0x78e8 +0x4b62 0x9b54 +0x4b63 0x9ebb +0x4b64 0x57cb +0x4b65 0x59b9 +0x4b66 0x6627 +0x4b67 0x679a +0x4b68 0x6bce +0x4b69 0x54e9 +0x4b6a 0x69d9 +0x4b6b 0x5e55 +0x4b6c 0x819c +0x4b6d 0x6795 +0x4b6e 0x9baa +0x4b6f 0x67fe +0x4b70 0x9c52 +0x4b71 0x685d +0x4b72 0x4ea6 +0x4b73 0x4fe3 +0x4b74 0x53c8 +0x4b75 0x62b9 +0x4b76 0x672b +0x4b77 0x6cab +0x4b78 0x8fc4 +0x4b79 0x4fad +0x4b7a 0x7e6d +0x4b7b 0x9ebf +0x4b7c 0x4e07 +0x4b7d 0x6162 +0x4b7e 0x6e80 +0x4c21 0x6f2b +0x4c22 0x8513 +0x4c23 0x5473 +0x4c24 0x672a +0x4c25 0x9b45 +0x4c26 0x5df3 +0x4c27 0x7b95 +0x4c28 0x5cac +0x4c29 0x5bc6 +0x4c2a 0x871c +0x4c2b 0x6e4a +0x4c2c 0x84d1 +0x4c2d 0x7a14 +0x4c2e 0x8108 +0x4c2f 0x5999 +0x4c30 0x7c8d +0x4c31 0x6c11 +0x4c32 0x7720 +0x4c33 0x52d9 +0x4c34 0x5922 +0x4c35 0x7121 +0x4c36 0x725f +0x4c37 0x77db +0x4c38 0x9727 +0x4c39 0x9d61 +0x4c3a 0x690b +0x4c3b 0x5a7f +0x4c3c 0x5a18 +0x4c3d 0x51a5 +0x4c3e 0x540d +0x4c3f 0x547d +0x4c40 0x660e +0x4c41 0x76df +0x4c42 0x8ff7 +0x4c43 0x9298 +0x4c44 0x9cf4 +0x4c45 0x59ea +0x4c46 0x725d +0x4c47 0x6ec5 +0x4c48 0x514d +0x4c49 0x68c9 +0x4c4a 0x7dbf +0x4c4b 0x7dec +0x4c4c 0x9762 +0x4c4d 0x9eba +0x4c4e 0x6478 +0x4c4f 0x6a21 +0x4c50 0x8302 +0x4c51 0x5984 +0x4c52 0x5b5f +0x4c53 0x6bdb +0x4c54 0x731b +0x4c55 0x76f2 +0x4c56 0x7db2 +0x4c57 0x8017 +0x4c58 0x8499 +0x4c59 0x5132 +0x4c5a 0x6728 +0x4c5b 0x9ed9 +0x4c5c 0x76ee +0x4c5d 0x6762 +0x4c5e 0x52ff +0x4c5f 0x9905 +0x4c60 0x5c24 +0x4c61 0x623b +0x4c62 0x7c7e +0x4c63 0x8cb0 +0x4c64 0x554f +0x4c65 0x60b6 +0x4c66 0x7d0b +0x4c67 0x9580 +0x4c68 0x5301 +0x4c69 0x4e5f +0x4c6a 0x51b6 +0x4c6b 0x591c +0x4c6c 0x723a +0x4c6d 0x8036 +0x4c6e 0x91ce +0x4c6f 0x5f25 +0x4c70 0x77e2 +0x4c71 0x5384 +0x4c72 0x5f79 +0x4c73 0x7d04 +0x4c74 0x85ac +0x4c75 0x8a33 +0x4c76 0x8e8d +0x4c77 0x9756 +0x4c78 0x67f3 +0x4c79 0x85ae +0x4c7a 0x9453 +0x4c7b 0x6109 +0x4c7c 0x6108 +0x4c7d 0x6cb9 +0x4c7e 0x7652 +0x4d21 0x8aed +0x4d22 0x8f38 +0x4d23 0x552f +0x4d24 0x4f51 +0x4d25 0x512a +0x4d26 0x52c7 +0x4d27 0x53cb +0x4d28 0x5ba5 +0x4d29 0x5e7d +0x4d2a 0x60a0 +0x4d2b 0x6182 +0x4d2c 0x63d6 +0x4d2d 0x6709 +0x4d2e 0x67da +0x4d2f 0x6e67 +0x4d30 0x6d8c +0x4d31 0x7336 +0x4d32 0x7337 +0x4d33 0x7531 +0x4d34 0x7950 +0x4d35 0x88d5 +0x4d36 0x8a98 +0x4d37 0x904a +0x4d38 0x9091 +0x4d39 0x90f5 +0x4d3a 0x96c4 +0x4d3b 0x878d +0x4d3c 0x5915 +0x4d3d 0x4e88 +0x4d3e 0x4f59 +0x4d3f 0x4e0e +0x4d40 0x8a89 +0x4d41 0x8f3f +0x4d42 0x9810 +0x4d43 0x50ad +0x4d44 0x5e7c +0x4d45 0x5996 +0x4d46 0x5bb9 +0x4d47 0x5eb8 +0x4d48 0x63da +0x4d49 0x63fa +0x4d4a 0x64c1 +0x4d4b 0x66dc +0x4d4c 0x694a +0x4d4d 0x69d8 +0x4d4e 0x6d0b +0x4d4f 0x6eb6 +0x4d50 0x7194 +0x4d51 0x7528 +0x4d52 0x7aaf +0x4d53 0x7f8a +0x4d54 0x8000 +0x4d55 0x8449 +0x4d56 0x84c9 +0x4d57 0x8981 +0x4d58 0x8b21 +0x4d59 0x8e0a +0x4d5a 0x9065 +0x4d5b 0x967d +0x4d5c 0x990a +0x4d5d 0x617e +0x4d5e 0x6291 +0x4d5f 0x6b32 +0x4d60 0x6c83 +0x4d61 0x6d74 +0x4d62 0x7fcc +0x4d63 0x7ffc +0x4d64 0x6dc0 +0x4d65 0x7f85 +0x4d66 0x87ba +0x4d67 0x88f8 +0x4d68 0x6765 +0x4d69 0x83b1 +0x4d6a 0x983c +0x4d6b 0x96f7 +0x4d6c 0x6d1b +0x4d6d 0x7d61 +0x4d6e 0x843d +0x4d6f 0x916a +0x4d70 0x4e71 +0x4d71 0x5375 +0x4d72 0x5d50 +0x4d73 0x6b04 +0x4d74 0x6feb +0x4d75 0x85cd +0x4d76 0x862d +0x4d77 0x89a7 +0x4d78 0x5229 +0x4d79 0x540f +0x4d7a 0x5c65 +0x4d7b 0x674e +0x4d7c 0x68a8 +0x4d7d 0x7406 +0x4d7e 0x7483 +0x4e21 0x75e2 +0x4e22 0x88cf +0x4e23 0x88e1 +0x4e24 0x91cc +0x4e25 0x96e2 +0x4e26 0x9678 +0x4e27 0x5f8b +0x4e28 0x7387 +0x4e29 0x7acb +0x4e2a 0x844e +0x4e2b 0x63a0 +0x4e2c 0x7565 +0x4e2d 0x5289 +0x4e2e 0x6d41 +0x4e2f 0x6e9c +0x4e30 0x7409 +0x4e31 0x7559 +0x4e32 0x786b +0x4e33 0x7c92 +0x4e34 0x9686 +0x4e35 0x7adc +0x4e36 0x9f8d +0x4e37 0x4fb6 +0x4e38 0x616e +0x4e39 0x65c5 +0x4e3a 0x865c +0x4e3b 0x4e86 +0x4e3c 0x4eae +0x4e3d 0x50da +0x4e3e 0x4e21 +0x4e3f 0x51cc +0x4e40 0x5bee +0x4e41 0x6599 +0x4e42 0x6881 +0x4e43 0x6dbc +0x4e44 0x731f +0x4e45 0x7642 +0x4e46 0x77ad +0x4e47 0x7a1c +0x4e48 0x7ce7 +0x4e49 0x826f +0x4e4a 0x8ad2 +0x4e4b 0x907c +0x4e4c 0x91cf +0x4e4d 0x9675 +0x4e4e 0x9818 +0x4e4f 0x529b +0x4e50 0x7dd1 +0x4e51 0x502b +0x4e52 0x5398 +0x4e53 0x6797 +0x4e54 0x6dcb +0x4e55 0x71d0 +0x4e56 0x7433 +0x4e57 0x81e8 +0x4e58 0x8f2a +0x4e59 0x96a3 +0x4e5a 0x9c57 +0x4e5b 0x9e9f +0x4e5c 0x7460 +0x4e5d 0x5841 +0x4e5e 0x6d99 +0x4e5f 0x7d2f +0x4e60 0x985e +0x4e61 0x4ee4 +0x4e62 0x4f36 +0x4e63 0x4f8b +0x4e64 0x51b7 +0x4e65 0x52b1 +0x4e66 0x5dba +0x4e67 0x601c +0x4e68 0x73b2 +0x4e69 0x793c +0x4e6a 0x82d3 +0x4e6b 0x9234 +0x4e6c 0x96b7 +0x4e6d 0x96f6 +0x4e6e 0x970a +0x4e6f 0x9e97 +0x4e70 0x9f62 +0x4e71 0x66a6 +0x4e72 0x6b74 +0x4e73 0x5217 +0x4e74 0x52a3 +0x4e75 0x70c8 +0x4e76 0x88c2 +0x4e77 0x5ec9 +0x4e78 0x604b +0x4e79 0x6190 +0x4e7a 0x6f23 +0x4e7b 0x7149 +0x4e7c 0x7c3e +0x4e7d 0x7df4 +0x4e7e 0x806f +0x4f21 0x84ee +0x4f22 0x9023 +0x4f23 0x932c +0x4f24 0x5442 +0x4f25 0x9b6f +0x4f26 0x6ad3 +0x4f27 0x7089 +0x4f28 0x8cc2 +0x4f29 0x8def +0x4f2a 0x9732 +0x4f2b 0x52b4 +0x4f2c 0x5a41 +0x4f2d 0x5eca +0x4f2e 0x5f04 +0x4f2f 0x6717 +0x4f30 0x697c +0x4f31 0x6994 +0x4f32 0x6d6a +0x4f33 0x6f0f +0x4f34 0x7262 +0x4f35 0x72fc +0x4f36 0x7bed +0x4f37 0x8001 +0x4f38 0x807e +0x4f39 0x874b +0x4f3a 0x90ce +0x4f3b 0x516d +0x4f3c 0x9e93 +0x4f3d 0x7984 +0x4f3e 0x808b +0x4f3f 0x9332 +0x4f40 0x8ad6 +0x4f41 0x502d +0x4f42 0x548c +0x4f43 0x8a71 +0x4f44 0x6b6a +0x4f45 0x8cc4 +0x4f46 0x8107 +0x4f47 0x60d1 +0x4f48 0x67a0 +0x4f49 0x9df2 +0x4f4a 0x4e99 +0x4f4b 0x4e98 +0x4f4c 0x9c10 +0x4f4d 0x8a6b +0x4f4e 0x85c1 +0x4f4f 0x8568 +0x4f50 0x6900 +0x4f51 0x6e7e +0x4f52 0x7897 +0x4f53 0x8155 +0x5021 0x5f0c +0x5022 0x4e10 +0x5023 0x4e15 +0x5024 0x4e2a +0x5025 0x4e31 +0x5026 0x4e36 +0x5027 0x4e3c +0x5028 0x4e3f +0x5029 0x4e42 +0x502a 0x4e56 +0x502b 0x4e58 +0x502c 0x4e82 +0x502d 0x4e85 +0x502e 0x8c6b +0x502f 0x4e8a +0x5030 0x8212 +0x5031 0x5f0d +0x5032 0x4e8e +0x5033 0x4e9e +0x5034 0x4e9f +0x5035 0x4ea0 +0x5036 0x4ea2 +0x5037 0x4eb0 +0x5038 0x4eb3 +0x5039 0x4eb6 +0x503a 0x4ece +0x503b 0x4ecd +0x503c 0x4ec4 +0x503d 0x4ec6 +0x503e 0x4ec2 +0x503f 0x4ed7 +0x5040 0x4ede +0x5041 0x4eed +0x5042 0x4edf +0x5043 0x4ef7 +0x5044 0x4f09 +0x5045 0x4f5a +0x5046 0x4f30 +0x5047 0x4f5b +0x5048 0x4f5d +0x5049 0x4f57 +0x504a 0x4f47 +0x504b 0x4f76 +0x504c 0x4f88 +0x504d 0x4f8f +0x504e 0x4f98 +0x504f 0x4f7b +0x5050 0x4f69 +0x5051 0x4f70 +0x5052 0x4f91 +0x5053 0x4f6f +0x5054 0x4f86 +0x5055 0x4f96 +0x5056 0x5118 +0x5057 0x4fd4 +0x5058 0x4fdf +0x5059 0x4fce +0x505a 0x4fd8 +0x505b 0x4fdb +0x505c 0x4fd1 +0x505d 0x4fda +0x505e 0x4fd0 +0x505f 0x4fe4 +0x5060 0x4fe5 +0x5061 0x501a +0x5062 0x5028 +0x5063 0x5014 +0x5064 0x502a +0x5065 0x5025 +0x5066 0x5005 +0x5067 0x4f1c +0x5068 0x4ff6 +0x5069 0x5021 +0x506a 0x5029 +0x506b 0x502c +0x506c 0x4ffe +0x506d 0x4fef +0x506e 0x5011 +0x506f 0x5006 +0x5070 0x5043 +0x5071 0x5047 +0x5072 0x6703 +0x5073 0x5055 +0x5074 0x5050 +0x5075 0x5048 +0x5076 0x505a +0x5077 0x5056 +0x5078 0x506c +0x5079 0x5078 +0x507a 0x5080 +0x507b 0x509a +0x507c 0x5085 +0x507d 0x50b4 +0x507e 0x50b2 +0x5121 0x50c9 +0x5122 0x50ca +0x5123 0x50b3 +0x5124 0x50c2 +0x5125 0x50d6 +0x5126 0x50de +0x5127 0x50e5 +0x5128 0x50ed +0x5129 0x50e3 +0x512a 0x50ee +0x512b 0x50f9 +0x512c 0x50f5 +0x512d 0x5109 +0x512e 0x5101 +0x512f 0x5102 +0x5130 0x5116 +0x5131 0x5115 +0x5132 0x5114 +0x5133 0x511a +0x5134 0x5121 +0x5135 0x513a +0x5136 0x5137 +0x5137 0x513c +0x5138 0x513b +0x5139 0x513f +0x513a 0x5140 +0x513b 0x5152 +0x513c 0x514c +0x513d 0x5154 +0x513e 0x5162 +0x513f 0x7af8 +0x5140 0x5169 +0x5141 0x516a +0x5142 0x516e +0x5143 0x5180 +0x5144 0x5182 +0x5145 0x56d8 +0x5146 0x518c +0x5147 0x5189 +0x5148 0x518f +0x5149 0x5191 +0x514a 0x5193 +0x514b 0x5195 +0x514c 0x5196 +0x514d 0x51a4 +0x514e 0x51a6 +0x514f 0x51a2 +0x5150 0x51a9 +0x5151 0x51aa +0x5152 0x51ab +0x5153 0x51b3 +0x5154 0x51b1 +0x5155 0x51b2 +0x5156 0x51b0 +0x5157 0x51b5 +0x5158 0x51bd +0x5159 0x51c5 +0x515a 0x51c9 +0x515b 0x51db +0x515c 0x51e0 +0x515d 0x8655 +0x515e 0x51e9 +0x515f 0x51ed +0x5160 0x51f0 +0x5161 0x51f5 +0x5162 0x51fe +0x5163 0x5204 +0x5164 0x520b +0x5165 0x5214 +0x5166 0x520e +0x5167 0x5227 +0x5168 0x522a +0x5169 0x522e +0x516a 0x5233 +0x516b 0x5239 +0x516c 0x524f +0x516d 0x5244 +0x516e 0x524b +0x516f 0x524c +0x5170 0x525e +0x5171 0x5254 +0x5172 0x526a +0x5173 0x5274 +0x5174 0x5269 +0x5175 0x5273 +0x5176 0x527f +0x5177 0x527d +0x5178 0x528d +0x5179 0x5294 +0x517a 0x5292 +0x517b 0x5271 +0x517c 0x5288 +0x517d 0x5291 +0x517e 0x8fa8 +0x5221 0x8fa7 +0x5222 0x52ac +0x5223 0x52ad +0x5224 0x52bc +0x5225 0x52b5 +0x5226 0x52c1 +0x5227 0x52cd +0x5228 0x52d7 +0x5229 0x52de +0x522a 0x52e3 +0x522b 0x52e6 +0x522c 0x98ed +0x522d 0x52e0 +0x522e 0x52f3 +0x522f 0x52f5 +0x5230 0x52f8 +0x5231 0x52f9 +0x5232 0x5306 +0x5233 0x5308 +0x5234 0x7538 +0x5235 0x530d +0x5236 0x5310 +0x5237 0x530f +0x5238 0x5315 +0x5239 0x531a +0x523a 0x5323 +0x523b 0x532f +0x523c 0x5331 +0x523d 0x5333 +0x523e 0x5338 +0x523f 0x5340 +0x5240 0x5346 +0x5241 0x5345 +0x5242 0x4e17 +0x5243 0x5349 +0x5244 0x534d +0x5245 0x51d6 +0x5246 0x535e +0x5247 0x5369 +0x5248 0x536e +0x5249 0x5918 +0x524a 0x537b +0x524b 0x5377 +0x524c 0x5382 +0x524d 0x5396 +0x524e 0x53a0 +0x524f 0x53a6 +0x5250 0x53a5 +0x5251 0x53ae +0x5252 0x53b0 +0x5253 0x53b6 +0x5254 0x53c3 +0x5255 0x7c12 +0x5256 0x96d9 +0x5257 0x53df +0x5258 0x66fc +0x5259 0x71ee +0x525a 0x53ee +0x525b 0x53e8 +0x525c 0x53ed +0x525d 0x53fa +0x525e 0x5401 +0x525f 0x543d +0x5260 0x5440 +0x5261 0x542c +0x5262 0x542d +0x5263 0x543c +0x5264 0x542e +0x5265 0x5436 +0x5266 0x5429 +0x5267 0x541d +0x5268 0x544e +0x5269 0x548f +0x526a 0x5475 +0x526b 0x548e +0x526c 0x545f +0x526d 0x5471 +0x526e 0x5477 +0x526f 0x5470 +0x5270 0x5492 +0x5271 0x547b +0x5272 0x5480 +0x5273 0x5476 +0x5274 0x5484 +0x5275 0x5490 +0x5276 0x5486 +0x5277 0x54c7 +0x5278 0x54a2 +0x5279 0x54b8 +0x527a 0x54a5 +0x527b 0x54ac +0x527c 0x54c4 +0x527d 0x54c8 +0x527e 0x54a8 +0x5321 0x54ab +0x5322 0x54c2 +0x5323 0x54a4 +0x5324 0x54be +0x5325 0x54bc +0x5326 0x54d8 +0x5327 0x54e5 +0x5328 0x54e6 +0x5329 0x550f +0x532a 0x5514 +0x532b 0x54fd +0x532c 0x54ee +0x532d 0x54ed +0x532e 0x54fa +0x532f 0x54e2 +0x5330 0x5539 +0x5331 0x5540 +0x5332 0x5563 +0x5333 0x554c +0x5334 0x552e +0x5335 0x555c +0x5336 0x5545 +0x5337 0x5556 +0x5338 0x5557 +0x5339 0x5538 +0x533a 0x5533 +0x533b 0x555d +0x533c 0x5599 +0x533d 0x5580 +0x533e 0x54af +0x533f 0x558a +0x5340 0x559f +0x5341 0x557b +0x5342 0x557e +0x5343 0x5598 +0x5344 0x559e +0x5345 0x55ae +0x5346 0x557c +0x5347 0x5583 +0x5348 0x55a9 +0x5349 0x5587 +0x534a 0x55a8 +0x534b 0x55da +0x534c 0x55c5 +0x534d 0x55df +0x534e 0x55c4 +0x534f 0x55dc +0x5350 0x55e4 +0x5351 0x55d4 +0x5352 0x5614 +0x5353 0x55f7 +0x5354 0x5616 +0x5355 0x55fe +0x5356 0x55fd +0x5357 0x561b +0x5358 0x55f9 +0x5359 0x564e +0x535a 0x5650 +0x535b 0x71df +0x535c 0x5634 +0x535d 0x5636 +0x535e 0x5632 +0x535f 0x5638 +0x5360 0x566b +0x5361 0x5664 +0x5362 0x562f +0x5363 0x566c +0x5364 0x566a +0x5365 0x5686 +0x5366 0x5680 +0x5367 0x568a +0x5368 0x56a0 +0x5369 0x5694 +0x536a 0x568f +0x536b 0x56a5 +0x536c 0x56ae +0x536d 0x56b6 +0x536e 0x56b4 +0x536f 0x56c2 +0x5370 0x56bc +0x5371 0x56c1 +0x5372 0x56c3 +0x5373 0x56c0 +0x5374 0x56c8 +0x5375 0x56ce +0x5376 0x56d1 +0x5377 0x56d3 +0x5378 0x56d7 +0x5379 0x56ee +0x537a 0x56f9 +0x537b 0x5700 +0x537c 0x56ff +0x537d 0x5704 +0x537e 0x5709 +0x5421 0x5708 +0x5422 0x570b +0x5423 0x570d +0x5424 0x5713 +0x5425 0x5718 +0x5426 0x5716 +0x5427 0x55c7 +0x5428 0x571c +0x5429 0x5726 +0x542a 0x5737 +0x542b 0x5738 +0x542c 0x574e +0x542d 0x573b +0x542e 0x5740 +0x542f 0x574f +0x5430 0x5769 +0x5431 0x57c0 +0x5432 0x5788 +0x5433 0x5761 +0x5434 0x577f +0x5435 0x5789 +0x5436 0x5793 +0x5437 0x57a0 +0x5438 0x57b3 +0x5439 0x57a4 +0x543a 0x57aa +0x543b 0x57b0 +0x543c 0x57c3 +0x543d 0x57c6 +0x543e 0x57d4 +0x543f 0x57d2 +0x5440 0x57d3 +0x5441 0x580a +0x5442 0x57d6 +0x5443 0x57e3 +0x5444 0x580b +0x5445 0x5819 +0x5446 0x581d +0x5447 0x5872 +0x5448 0x5821 +0x5449 0x5862 +0x544a 0x584b +0x544b 0x5870 +0x544c 0x6bc0 +0x544d 0x5852 +0x544e 0x583d +0x544f 0x5879 +0x5450 0x5885 +0x5451 0x58b9 +0x5452 0x589f +0x5453 0x58ab +0x5454 0x58ba +0x5455 0x58de +0x5456 0x58bb +0x5457 0x58b8 +0x5458 0x58ae +0x5459 0x58c5 +0x545a 0x58d3 +0x545b 0x58d1 +0x545c 0x58d7 +0x545d 0x58d9 +0x545e 0x58d8 +0x545f 0x58e5 +0x5460 0x58dc +0x5461 0x58e4 +0x5462 0x58df +0x5463 0x58ef +0x5464 0x58fa +0x5465 0x58f9 +0x5466 0x58fb +0x5467 0x58fc +0x5468 0x58fd +0x5469 0x5902 +0x546a 0x590a +0x546b 0x5910 +0x546c 0x591b +0x546d 0x68a6 +0x546e 0x5925 +0x546f 0x592c +0x5470 0x592d +0x5471 0x5932 +0x5472 0x5938 +0x5473 0x593e +0x5474 0x7ad2 +0x5475 0x5955 +0x5476 0x5950 +0x5477 0x594e +0x5478 0x595a +0x5479 0x5958 +0x547a 0x5962 +0x547b 0x5960 +0x547c 0x5967 +0x547d 0x596c +0x547e 0x5969 +0x5521 0x5978 +0x5522 0x5981 +0x5523 0x599d +0x5524 0x4f5e +0x5525 0x4fab +0x5526 0x59a3 +0x5527 0x59b2 +0x5528 0x59c6 +0x5529 0x59e8 +0x552a 0x59dc +0x552b 0x598d +0x552c 0x59d9 +0x552d 0x59da +0x552e 0x5a25 +0x552f 0x5a1f +0x5530 0x5a11 +0x5531 0x5a1c +0x5532 0x5a09 +0x5533 0x5a1a +0x5534 0x5a40 +0x5535 0x5a6c +0x5536 0x5a49 +0x5537 0x5a35 +0x5538 0x5a36 +0x5539 0x5a62 +0x553a 0x5a6a +0x553b 0x5a9a +0x553c 0x5abc +0x553d 0x5abe +0x553e 0x5acb +0x553f 0x5ac2 +0x5540 0x5abd +0x5541 0x5ae3 +0x5542 0x5ad7 +0x5543 0x5ae6 +0x5544 0x5ae9 +0x5545 0x5ad6 +0x5546 0x5afa +0x5547 0x5afb +0x5548 0x5b0c +0x5549 0x5b0b +0x554a 0x5b16 +0x554b 0x5b32 +0x554c 0x5ad0 +0x554d 0x5b2a +0x554e 0x5b36 +0x554f 0x5b3e +0x5550 0x5b43 +0x5551 0x5b45 +0x5552 0x5b40 +0x5553 0x5b51 +0x5554 0x5b55 +0x5555 0x5b5a +0x5556 0x5b5b +0x5557 0x5b65 +0x5558 0x5b69 +0x5559 0x5b70 +0x555a 0x5b73 +0x555b 0x5b75 +0x555c 0x5b78 +0x555d 0x6588 +0x555e 0x5b7a +0x555f 0x5b80 +0x5560 0x5b83 +0x5561 0x5ba6 +0x5562 0x5bb8 +0x5563 0x5bc3 +0x5564 0x5bc7 +0x5565 0x5bc9 +0x5566 0x5bd4 +0x5567 0x5bd0 +0x5568 0x5be4 +0x5569 0x5be6 +0x556a 0x5be2 +0x556b 0x5bde +0x556c 0x5be5 +0x556d 0x5beb +0x556e 0x5bf0 +0x556f 0x5bf6 +0x5570 0x5bf3 +0x5571 0x5c05 +0x5572 0x5c07 +0x5573 0x5c08 +0x5574 0x5c0d +0x5575 0x5c13 +0x5576 0x5c20 +0x5577 0x5c22 +0x5578 0x5c28 +0x5579 0x5c38 +0x557a 0x5c39 +0x557b 0x5c41 +0x557c 0x5c46 +0x557d 0x5c4e +0x557e 0x5c53 +0x5621 0x5c50 +0x5622 0x5c4f +0x5623 0x5b71 +0x5624 0x5c6c +0x5625 0x5c6e +0x5626 0x4e62 +0x5627 0x5c76 +0x5628 0x5c79 +0x5629 0x5c8c +0x562a 0x5c91 +0x562b 0x5c94 +0x562c 0x599b +0x562d 0x5cab +0x562e 0x5cbb +0x562f 0x5cb6 +0x5630 0x5cbc +0x5631 0x5cb7 +0x5632 0x5cc5 +0x5633 0x5cbe +0x5634 0x5cc7 +0x5635 0x5cd9 +0x5636 0x5ce9 +0x5637 0x5cfd +0x5638 0x5cfa +0x5639 0x5ced +0x563a 0x5d8c +0x563b 0x5cea +0x563c 0x5d0b +0x563d 0x5d15 +0x563e 0x5d17 +0x563f 0x5d5c +0x5640 0x5d1f +0x5641 0x5d1b +0x5642 0x5d11 +0x5643 0x5d14 +0x5644 0x5d22 +0x5645 0x5d1a +0x5646 0x5d19 +0x5647 0x5d18 +0x5648 0x5d4c +0x5649 0x5d52 +0x564a 0x5d4e +0x564b 0x5d4b +0x564c 0x5d6c +0x564d 0x5d73 +0x564e 0x5d76 +0x564f 0x5d87 +0x5650 0x5d84 +0x5651 0x5d82 +0x5652 0x5da2 +0x5653 0x5d9d +0x5654 0x5dac +0x5655 0x5dae +0x5656 0x5dbd +0x5657 0x5d90 +0x5658 0x5db7 +0x5659 0x5dbc +0x565a 0x5dc9 +0x565b 0x5dcd +0x565c 0x5dd3 +0x565d 0x5dd2 +0x565e 0x5dd6 +0x565f 0x5ddb +0x5660 0x5deb +0x5661 0x5df2 +0x5662 0x5df5 +0x5663 0x5e0b +0x5664 0x5e1a +0x5665 0x5e19 +0x5666 0x5e11 +0x5667 0x5e1b +0x5668 0x5e36 +0x5669 0x5e37 +0x566a 0x5e44 +0x566b 0x5e43 +0x566c 0x5e40 +0x566d 0x5e4e +0x566e 0x5e57 +0x566f 0x5e54 +0x5670 0x5e5f +0x5671 0x5e62 +0x5672 0x5e64 +0x5673 0x5e47 +0x5674 0x5e75 +0x5675 0x5e76 +0x5676 0x5e7a +0x5677 0x9ebc +0x5678 0x5e7f +0x5679 0x5ea0 +0x567a 0x5ec1 +0x567b 0x5ec2 +0x567c 0x5ec8 +0x567d 0x5ed0 +0x567e 0x5ecf +0x5721 0x5ed6 +0x5722 0x5ee3 +0x5723 0x5edd +0x5724 0x5eda +0x5725 0x5edb +0x5726 0x5ee2 +0x5727 0x5ee1 +0x5728 0x5ee8 +0x5729 0x5ee9 +0x572a 0x5eec +0x572b 0x5ef1 +0x572c 0x5ef3 +0x572d 0x5ef0 +0x572e 0x5ef4 +0x572f 0x5ef8 +0x5730 0x5efe +0x5731 0x5f03 +0x5732 0x5f09 +0x5733 0x5f5d +0x5734 0x5f5c +0x5735 0x5f0b +0x5736 0x5f11 +0x5737 0x5f16 +0x5738 0x5f29 +0x5739 0x5f2d +0x573a 0x5f38 +0x573b 0x5f41 +0x573c 0x5f48 +0x573d 0x5f4c +0x573e 0x5f4e +0x573f 0x5f2f +0x5740 0x5f51 +0x5741 0x5f56 +0x5742 0x5f57 +0x5743 0x5f59 +0x5744 0x5f61 +0x5745 0x5f6d +0x5746 0x5f73 +0x5747 0x5f77 +0x5748 0x5f83 +0x5749 0x5f82 +0x574a 0x5f7f +0x574b 0x5f8a +0x574c 0x5f88 +0x574d 0x5f91 +0x574e 0x5f87 +0x574f 0x5f9e +0x5750 0x5f99 +0x5751 0x5f98 +0x5752 0x5fa0 +0x5753 0x5fa8 +0x5754 0x5fad +0x5755 0x5fbc +0x5756 0x5fd6 +0x5757 0x5ffb +0x5758 0x5fe4 +0x5759 0x5ff8 +0x575a 0x5ff1 +0x575b 0x5fdd +0x575c 0x60b3 +0x575d 0x5fff +0x575e 0x6021 +0x575f 0x6060 +0x5760 0x6019 +0x5761 0x6010 +0x5762 0x6029 +0x5763 0x600e +0x5764 0x6031 +0x5765 0x601b +0x5766 0x6015 +0x5767 0x602b +0x5768 0x6026 +0x5769 0x600f +0x576a 0x603a +0x576b 0x605a +0x576c 0x6041 +0x576d 0x606a +0x576e 0x6077 +0x576f 0x605f +0x5770 0x604a +0x5771 0x6046 +0x5772 0x604d +0x5773 0x6063 +0x5774 0x6043 +0x5775 0x6064 +0x5776 0x6042 +0x5777 0x606c +0x5778 0x606b +0x5779 0x6059 +0x577a 0x6081 +0x577b 0x608d +0x577c 0x60e7 +0x577d 0x6083 +0x577e 0x609a +0x5821 0x6084 +0x5822 0x609b +0x5823 0x6096 +0x5824 0x6097 +0x5825 0x6092 +0x5826 0x60a7 +0x5827 0x608b +0x5828 0x60e1 +0x5829 0x60b8 +0x582a 0x60e0 +0x582b 0x60d3 +0x582c 0x60b4 +0x582d 0x5ff0 +0x582e 0x60bd +0x582f 0x60c6 +0x5830 0x60b5 +0x5831 0x60d8 +0x5832 0x614d +0x5833 0x6115 +0x5834 0x6106 +0x5835 0x60f6 +0x5836 0x60f7 +0x5837 0x6100 +0x5838 0x60f4 +0x5839 0x60fa +0x583a 0x6103 +0x583b 0x6121 +0x583c 0x60fb +0x583d 0x60f1 +0x583e 0x610d +0x583f 0x610e +0x5840 0x6147 +0x5841 0x613e +0x5842 0x6128 +0x5843 0x6127 +0x5844 0x614a +0x5845 0x613f +0x5846 0x613c +0x5847 0x612c +0x5848 0x6134 +0x5849 0x613d +0x584a 0x6142 +0x584b 0x6144 +0x584c 0x6173 +0x584d 0x6177 +0x584e 0x6158 +0x584f 0x6159 +0x5850 0x615a +0x5851 0x616b +0x5852 0x6174 +0x5853 0x616f +0x5854 0x6165 +0x5855 0x6171 +0x5856 0x615f +0x5857 0x615d +0x5858 0x6153 +0x5859 0x6175 +0x585a 0x6199 +0x585b 0x6196 +0x585c 0x6187 +0x585d 0x61ac +0x585e 0x6194 +0x585f 0x619a +0x5860 0x618a +0x5861 0x6191 +0x5862 0x61ab +0x5863 0x61ae +0x5864 0x61cc +0x5865 0x61ca +0x5866 0x61c9 +0x5867 0x61f7 +0x5868 0x61c8 +0x5869 0x61c3 +0x586a 0x61c6 +0x586b 0x61ba +0x586c 0x61cb +0x586d 0x7f79 +0x586e 0x61cd +0x586f 0x61e6 +0x5870 0x61e3 +0x5871 0x61f6 +0x5872 0x61fa +0x5873 0x61f4 +0x5874 0x61ff +0x5875 0x61fd +0x5876 0x61fc +0x5877 0x61fe +0x5878 0x6200 +0x5879 0x6208 +0x587a 0x6209 +0x587b 0x620d +0x587c 0x620c +0x587d 0x6214 +0x587e 0x621b +0x5921 0x621e +0x5922 0x6221 +0x5923 0x622a +0x5924 0x622e +0x5925 0x6230 +0x5926 0x6232 +0x5927 0x6233 +0x5928 0x6241 +0x5929 0x624e +0x592a 0x625e +0x592b 0x6263 +0x592c 0x625b +0x592d 0x6260 +0x592e 0x6268 +0x592f 0x627c +0x5930 0x6282 +0x5931 0x6289 +0x5932 0x627e +0x5933 0x6292 +0x5934 0x6293 +0x5935 0x6296 +0x5936 0x62d4 +0x5937 0x6283 +0x5938 0x6294 +0x5939 0x62d7 +0x593a 0x62d1 +0x593b 0x62bb +0x593c 0x62cf +0x593d 0x62ff +0x593e 0x62c6 +0x593f 0x64d4 +0x5940 0x62c8 +0x5941 0x62dc +0x5942 0x62cc +0x5943 0x62ca +0x5944 0x62c2 +0x5945 0x62c7 +0x5946 0x629b +0x5947 0x62c9 +0x5948 0x630c +0x5949 0x62ee +0x594a 0x62f1 +0x594b 0x6327 +0x594c 0x6302 +0x594d 0x6308 +0x594e 0x62ef +0x594f 0x62f5 +0x5950 0x6350 +0x5951 0x633e +0x5952 0x634d +0x5953 0x641c +0x5954 0x634f +0x5955 0x6396 +0x5956 0x638e +0x5957 0x6380 +0x5958 0x63ab +0x5959 0x6376 +0x595a 0x63a3 +0x595b 0x638f +0x595c 0x6389 +0x595d 0x639f +0x595e 0x63b5 +0x595f 0x636b +0x5960 0x6369 +0x5961 0x63be +0x5962 0x63e9 +0x5963 0x63c0 +0x5964 0x63c6 +0x5965 0x63e3 +0x5966 0x63c9 +0x5967 0x63d2 +0x5968 0x63f6 +0x5969 0x63c4 +0x596a 0x6416 +0x596b 0x6434 +0x596c 0x6406 +0x596d 0x6413 +0x596e 0x6426 +0x596f 0x6436 +0x5970 0x651d +0x5971 0x6417 +0x5972 0x6428 +0x5973 0x640f +0x5974 0x6467 +0x5975 0x646f +0x5976 0x6476 +0x5977 0x644e +0x5978 0x652a +0x5979 0x6495 +0x597a 0x6493 +0x597b 0x64a5 +0x597c 0x64a9 +0x597d 0x6488 +0x597e 0x64bc +0x5a21 0x64da +0x5a22 0x64d2 +0x5a23 0x64c5 +0x5a24 0x64c7 +0x5a25 0x64bb +0x5a26 0x64d8 +0x5a27 0x64c2 +0x5a28 0x64f1 +0x5a29 0x64e7 +0x5a2a 0x8209 +0x5a2b 0x64e0 +0x5a2c 0x64e1 +0x5a2d 0x62ac +0x5a2e 0x64e3 +0x5a2f 0x64ef +0x5a30 0x652c +0x5a31 0x64f6 +0x5a32 0x64f4 +0x5a33 0x64f2 +0x5a34 0x64fa +0x5a35 0x6500 +0x5a36 0x64fd +0x5a37 0x6518 +0x5a38 0x651c +0x5a39 0x6505 +0x5a3a 0x6524 +0x5a3b 0x6523 +0x5a3c 0x652b +0x5a3d 0x6534 +0x5a3e 0x6535 +0x5a3f 0x6537 +0x5a40 0x6536 +0x5a41 0x6538 +0x5a42 0x754b +0x5a43 0x6548 +0x5a44 0x6556 +0x5a45 0x6555 +0x5a46 0x654d +0x5a47 0x6558 +0x5a48 0x655e +0x5a49 0x655d +0x5a4a 0x6572 +0x5a4b 0x6578 +0x5a4c 0x6582 +0x5a4d 0x6583 +0x5a4e 0x8b8a +0x5a4f 0x659b +0x5a50 0x659f +0x5a51 0x65ab +0x5a52 0x65b7 +0x5a53 0x65c3 +0x5a54 0x65c6 +0x5a55 0x65c1 +0x5a56 0x65c4 +0x5a57 0x65cc +0x5a58 0x65d2 +0x5a59 0x65db +0x5a5a 0x65d9 +0x5a5b 0x65e0 +0x5a5c 0x65e1 +0x5a5d 0x65f1 +0x5a5e 0x6772 +0x5a5f 0x660a +0x5a60 0x6603 +0x5a61 0x65fb +0x5a62 0x6773 +0x5a63 0x6635 +0x5a64 0x6636 +0x5a65 0x6634 +0x5a66 0x661c +0x5a67 0x664f +0x5a68 0x6644 +0x5a69 0x6649 +0x5a6a 0x6641 +0x5a6b 0x665e +0x5a6c 0x665d +0x5a6d 0x6664 +0x5a6e 0x6667 +0x5a6f 0x6668 +0x5a70 0x665f +0x5a71 0x6662 +0x5a72 0x6670 +0x5a73 0x6683 +0x5a74 0x6688 +0x5a75 0x668e +0x5a76 0x6689 +0x5a77 0x6684 +0x5a78 0x6698 +0x5a79 0x669d +0x5a7a 0x66c1 +0x5a7b 0x66b9 +0x5a7c 0x66c9 +0x5a7d 0x66be +0x5a7e 0x66bc +0x5b21 0x66c4 +0x5b22 0x66b8 +0x5b23 0x66d6 +0x5b24 0x66da +0x5b25 0x66e0 +0x5b26 0x663f +0x5b27 0x66e6 +0x5b28 0x66e9 +0x5b29 0x66f0 +0x5b2a 0x66f5 +0x5b2b 0x66f7 +0x5b2c 0x670f +0x5b2d 0x6716 +0x5b2e 0x671e +0x5b2f 0x6726 +0x5b30 0x6727 +0x5b31 0x9738 +0x5b32 0x672e +0x5b33 0x673f +0x5b34 0x6736 +0x5b35 0x6741 +0x5b36 0x6738 +0x5b37 0x6737 +0x5b38 0x6746 +0x5b39 0x675e +0x5b3a 0x6760 +0x5b3b 0x6759 +0x5b3c 0x6763 +0x5b3d 0x6764 +0x5b3e 0x6789 +0x5b3f 0x6770 +0x5b40 0x67a9 +0x5b41 0x677c +0x5b42 0x676a +0x5b43 0x678c +0x5b44 0x678b +0x5b45 0x67a6 +0x5b46 0x67a1 +0x5b47 0x6785 +0x5b48 0x67b7 +0x5b49 0x67ef +0x5b4a 0x67b4 +0x5b4b 0x67ec +0x5b4c 0x67b3 +0x5b4d 0x67e9 +0x5b4e 0x67b8 +0x5b4f 0x67e4 +0x5b50 0x67de +0x5b51 0x67dd +0x5b52 0x67e2 +0x5b53 0x67ee +0x5b54 0x67b9 +0x5b55 0x67ce +0x5b56 0x67c6 +0x5b57 0x67e7 +0x5b58 0x6a9c +0x5b59 0x681e +0x5b5a 0x6846 +0x5b5b 0x6829 +0x5b5c 0x6840 +0x5b5d 0x684d +0x5b5e 0x6832 +0x5b5f 0x684e +0x5b60 0x68b3 +0x5b61 0x682b +0x5b62 0x6859 +0x5b63 0x6863 +0x5b64 0x6877 +0x5b65 0x687f +0x5b66 0x689f +0x5b67 0x688f +0x5b68 0x68ad +0x5b69 0x6894 +0x5b6a 0x689d +0x5b6b 0x689b +0x5b6c 0x6883 +0x5b6d 0x6aae +0x5b6e 0x68b9 +0x5b6f 0x6874 +0x5b70 0x68b5 +0x5b71 0x68a0 +0x5b72 0x68ba +0x5b73 0x690f +0x5b74 0x688d +0x5b75 0x687e +0x5b76 0x6901 +0x5b77 0x68ca +0x5b78 0x6908 +0x5b79 0x68d8 +0x5b7a 0x6922 +0x5b7b 0x6926 +0x5b7c 0x68e1 +0x5b7d 0x690c +0x5b7e 0x68cd +0x5c21 0x68d4 +0x5c22 0x68e7 +0x5c23 0x68d5 +0x5c24 0x6936 +0x5c25 0x6912 +0x5c26 0x6904 +0x5c27 0x68d7 +0x5c28 0x68e3 +0x5c29 0x6925 +0x5c2a 0x68f9 +0x5c2b 0x68e0 +0x5c2c 0x68ef +0x5c2d 0x6928 +0x5c2e 0x692a +0x5c2f 0x691a +0x5c30 0x6923 +0x5c31 0x6921 +0x5c32 0x68c6 +0x5c33 0x6979 +0x5c34 0x6977 +0x5c35 0x695c +0x5c36 0x6978 +0x5c37 0x696b +0x5c38 0x6954 +0x5c39 0x697e +0x5c3a 0x696e +0x5c3b 0x6939 +0x5c3c 0x6974 +0x5c3d 0x693d +0x5c3e 0x6959 +0x5c3f 0x6930 +0x5c40 0x6961 +0x5c41 0x695e +0x5c42 0x695d +0x5c43 0x6981 +0x5c44 0x696a +0x5c45 0x69b2 +0x5c46 0x69ae +0x5c47 0x69d0 +0x5c48 0x69bf +0x5c49 0x69c1 +0x5c4a 0x69d3 +0x5c4b 0x69be +0x5c4c 0x69ce +0x5c4d 0x5be8 +0x5c4e 0x69ca +0x5c4f 0x69dd +0x5c50 0x69bb +0x5c51 0x69c3 +0x5c52 0x69a7 +0x5c53 0x6a2e +0x5c54 0x6991 +0x5c55 0x69a0 +0x5c56 0x699c +0x5c57 0x6995 +0x5c58 0x69b4 +0x5c59 0x69de +0x5c5a 0x69e8 +0x5c5b 0x6a02 +0x5c5c 0x6a1b +0x5c5d 0x69ff +0x5c5e 0x6b0a +0x5c5f 0x69f9 +0x5c60 0x69f2 +0x5c61 0x69e7 +0x5c62 0x6a05 +0x5c63 0x69b1 +0x5c64 0x6a1e +0x5c65 0x69ed +0x5c66 0x6a14 +0x5c67 0x69eb +0x5c68 0x6a0a +0x5c69 0x6a12 +0x5c6a 0x6ac1 +0x5c6b 0x6a23 +0x5c6c 0x6a13 +0x5c6d 0x6a44 +0x5c6e 0x6a0c +0x5c6f 0x6a72 +0x5c70 0x6a36 +0x5c71 0x6a78 +0x5c72 0x6a47 +0x5c73 0x6a62 +0x5c74 0x6a59 +0x5c75 0x6a66 +0x5c76 0x6a48 +0x5c77 0x6a38 +0x5c78 0x6a22 +0x5c79 0x6a90 +0x5c7a 0x6a8d +0x5c7b 0x6aa0 +0x5c7c 0x6a84 +0x5c7d 0x6aa2 +0x5c7e 0x6aa3 +0x5d21 0x6a97 +0x5d22 0x8617 +0x5d23 0x6abb +0x5d24 0x6ac3 +0x5d25 0x6ac2 +0x5d26 0x6ab8 +0x5d27 0x6ab3 +0x5d28 0x6aac +0x5d29 0x6ade +0x5d2a 0x6ad1 +0x5d2b 0x6adf +0x5d2c 0x6aaa +0x5d2d 0x6ada +0x5d2e 0x6aea +0x5d2f 0x6afb +0x5d30 0x6b05 +0x5d31 0x8616 +0x5d32 0x6afa +0x5d33 0x6b12 +0x5d34 0x6b16 +0x5d35 0x9b31 +0x5d36 0x6b1f +0x5d37 0x6b38 +0x5d38 0x6b37 +0x5d39 0x76dc +0x5d3a 0x6b39 +0x5d3b 0x98ee +0x5d3c 0x6b47 +0x5d3d 0x6b43 +0x5d3e 0x6b49 +0x5d3f 0x6b50 +0x5d40 0x6b59 +0x5d41 0x6b54 +0x5d42 0x6b5b +0x5d43 0x6b5f +0x5d44 0x6b61 +0x5d45 0x6b78 +0x5d46 0x6b79 +0x5d47 0x6b7f +0x5d48 0x6b80 +0x5d49 0x6b84 +0x5d4a 0x6b83 +0x5d4b 0x6b8d +0x5d4c 0x6b98 +0x5d4d 0x6b95 +0x5d4e 0x6b9e +0x5d4f 0x6ba4 +0x5d50 0x6baa +0x5d51 0x6bab +0x5d52 0x6baf +0x5d53 0x6bb2 +0x5d54 0x6bb1 +0x5d55 0x6bb3 +0x5d56 0x6bb7 +0x5d57 0x6bbc +0x5d58 0x6bc6 +0x5d59 0x6bcb +0x5d5a 0x6bd3 +0x5d5b 0x6bdf +0x5d5c 0x6bec +0x5d5d 0x6beb +0x5d5e 0x6bf3 +0x5d5f 0x6bef +0x5d60 0x9ebe +0x5d61 0x6c08 +0x5d62 0x6c13 +0x5d63 0x6c14 +0x5d64 0x6c1b +0x5d65 0x6c24 +0x5d66 0x6c23 +0x5d67 0x6c5e +0x5d68 0x6c55 +0x5d69 0x6c62 +0x5d6a 0x6c6a +0x5d6b 0x6c82 +0x5d6c 0x6c8d +0x5d6d 0x6c9a +0x5d6e 0x6c81 +0x5d6f 0x6c9b +0x5d70 0x6c7e +0x5d71 0x6c68 +0x5d72 0x6c73 +0x5d73 0x6c92 +0x5d74 0x6c90 +0x5d75 0x6cc4 +0x5d76 0x6cf1 +0x5d77 0x6cd3 +0x5d78 0x6cbd +0x5d79 0x6cd7 +0x5d7a 0x6cc5 +0x5d7b 0x6cdd +0x5d7c 0x6cae +0x5d7d 0x6cb1 +0x5d7e 0x6cbe +0x5e21 0x6cba +0x5e22 0x6cdb +0x5e23 0x6cef +0x5e24 0x6cd9 +0x5e25 0x6cea +0x5e26 0x6d1f +0x5e27 0x884d +0x5e28 0x6d36 +0x5e29 0x6d2b +0x5e2a 0x6d3d +0x5e2b 0x6d38 +0x5e2c 0x6d19 +0x5e2d 0x6d35 +0x5e2e 0x6d33 +0x5e2f 0x6d12 +0x5e30 0x6d0c +0x5e31 0x6d63 +0x5e32 0x6d93 +0x5e33 0x6d64 +0x5e34 0x6d5a +0x5e35 0x6d79 +0x5e36 0x6d59 +0x5e37 0x6d8e +0x5e38 0x6d95 +0x5e39 0x6fe4 +0x5e3a 0x6d85 +0x5e3b 0x6df9 +0x5e3c 0x6e15 +0x5e3d 0x6e0a +0x5e3e 0x6db5 +0x5e3f 0x6dc7 +0x5e40 0x6de6 +0x5e41 0x6db8 +0x5e42 0x6dc6 +0x5e43 0x6dec +0x5e44 0x6dde +0x5e45 0x6dcc +0x5e46 0x6de8 +0x5e47 0x6dd2 +0x5e48 0x6dc5 +0x5e49 0x6dfa +0x5e4a 0x6dd9 +0x5e4b 0x6de4 +0x5e4c 0x6dd5 +0x5e4d 0x6dea +0x5e4e 0x6dee +0x5e4f 0x6e2d +0x5e50 0x6e6e +0x5e51 0x6e2e +0x5e52 0x6e19 +0x5e53 0x6e72 +0x5e54 0x6e5f +0x5e55 0x6e3e +0x5e56 0x6e23 +0x5e57 0x6e6b +0x5e58 0x6e2b +0x5e59 0x6e76 +0x5e5a 0x6e4d +0x5e5b 0x6e1f +0x5e5c 0x6e43 +0x5e5d 0x6e3a +0x5e5e 0x6e4e +0x5e5f 0x6e24 +0x5e60 0x6eff +0x5e61 0x6e1d +0x5e62 0x6e38 +0x5e63 0x6e82 +0x5e64 0x6eaa +0x5e65 0x6e98 +0x5e66 0x6ec9 +0x5e67 0x6eb7 +0x5e68 0x6ed3 +0x5e69 0x6ebd +0x5e6a 0x6eaf +0x5e6b 0x6ec4 +0x5e6c 0x6eb2 +0x5e6d 0x6ed4 +0x5e6e 0x6ed5 +0x5e6f 0x6e8f +0x5e70 0x6ea5 +0x5e71 0x6ec2 +0x5e72 0x6e9f +0x5e73 0x6f41 +0x5e74 0x6f11 +0x5e75 0x704c +0x5e76 0x6eec +0x5e77 0x6ef8 +0x5e78 0x6efe +0x5e79 0x6f3f +0x5e7a 0x6ef2 +0x5e7b 0x6f31 +0x5e7c 0x6eef +0x5e7d 0x6f32 +0x5e7e 0x6ecc +0x5f21 0x6f3e +0x5f22 0x6f13 +0x5f23 0x6ef7 +0x5f24 0x6f86 +0x5f25 0x6f7a +0x5f26 0x6f78 +0x5f27 0x6f81 +0x5f28 0x6f80 +0x5f29 0x6f6f +0x5f2a 0x6f5b +0x5f2b 0x6ff3 +0x5f2c 0x6f6d +0x5f2d 0x6f82 +0x5f2e 0x6f7c +0x5f2f 0x6f58 +0x5f30 0x6f8e +0x5f31 0x6f91 +0x5f32 0x6fc2 +0x5f33 0x6f66 +0x5f34 0x6fb3 +0x5f35 0x6fa3 +0x5f36 0x6fa1 +0x5f37 0x6fa4 +0x5f38 0x6fb9 +0x5f39 0x6fc6 +0x5f3a 0x6faa +0x5f3b 0x6fdf +0x5f3c 0x6fd5 +0x5f3d 0x6fec +0x5f3e 0x6fd4 +0x5f3f 0x6fd8 +0x5f40 0x6ff1 +0x5f41 0x6fee +0x5f42 0x6fdb +0x5f43 0x7009 +0x5f44 0x700b +0x5f45 0x6ffa +0x5f46 0x7011 +0x5f47 0x7001 +0x5f48 0x700f +0x5f49 0x6ffe +0x5f4a 0x701b +0x5f4b 0x701a +0x5f4c 0x6f74 +0x5f4d 0x701d +0x5f4e 0x7018 +0x5f4f 0x701f +0x5f50 0x7030 +0x5f51 0x703e +0x5f52 0x7032 +0x5f53 0x7051 +0x5f54 0x7063 +0x5f55 0x7099 +0x5f56 0x7092 +0x5f57 0x70af +0x5f58 0x70f1 +0x5f59 0x70ac +0x5f5a 0x70b8 +0x5f5b 0x70b3 +0x5f5c 0x70ae +0x5f5d 0x70df +0x5f5e 0x70cb +0x5f5f 0x70dd +0x5f60 0x70d9 +0x5f61 0x7109 +0x5f62 0x70fd +0x5f63 0x711c +0x5f64 0x7119 +0x5f65 0x7165 +0x5f66 0x7155 +0x5f67 0x7188 +0x5f68 0x7166 +0x5f69 0x7162 +0x5f6a 0x714c +0x5f6b 0x7156 +0x5f6c 0x716c +0x5f6d 0x718f +0x5f6e 0x71fb +0x5f6f 0x7184 +0x5f70 0x7195 +0x5f71 0x71a8 +0x5f72 0x71ac +0x5f73 0x71d7 +0x5f74 0x71b9 +0x5f75 0x71be +0x5f76 0x71d2 +0x5f77 0x71c9 +0x5f78 0x71d4 +0x5f79 0x71ce +0x5f7a 0x71e0 +0x5f7b 0x71ec +0x5f7c 0x71e7 +0x5f7d 0x71f5 +0x5f7e 0x71fc +0x6021 0x71f9 +0x6022 0x71ff +0x6023 0x720d +0x6024 0x7210 +0x6025 0x721b +0x6026 0x7228 +0x6027 0x722d +0x6028 0x722c +0x6029 0x7230 +0x602a 0x7232 +0x602b 0x723b +0x602c 0x723c +0x602d 0x723f +0x602e 0x7240 +0x602f 0x7246 +0x6030 0x724b +0x6031 0x7258 +0x6032 0x7274 +0x6033 0x727e +0x6034 0x7282 +0x6035 0x7281 +0x6036 0x7287 +0x6037 0x7292 +0x6038 0x7296 +0x6039 0x72a2 +0x603a 0x72a7 +0x603b 0x72b9 +0x603c 0x72b2 +0x603d 0x72c3 +0x603e 0x72c6 +0x603f 0x72c4 +0x6040 0x72ce +0x6041 0x72d2 +0x6042 0x72e2 +0x6043 0x72e0 +0x6044 0x72e1 +0x6045 0x72f9 +0x6046 0x72f7 +0x6047 0x500f +0x6048 0x7317 +0x6049 0x730a +0x604a 0x731c +0x604b 0x7316 +0x604c 0x731d +0x604d 0x7334 +0x604e 0x732f +0x604f 0x7329 +0x6050 0x7325 +0x6051 0x733e +0x6052 0x734e +0x6053 0x734f +0x6054 0x9ed8 +0x6055 0x7357 +0x6056 0x736a +0x6057 0x7368 +0x6058 0x7370 +0x6059 0x7378 +0x605a 0x7375 +0x605b 0x737b +0x605c 0x737a +0x605d 0x73c8 +0x605e 0x73b3 +0x605f 0x73ce +0x6060 0x73bb +0x6061 0x73c0 +0x6062 0x73e5 +0x6063 0x73ee +0x6064 0x73de +0x6065 0x74a2 +0x6066 0x7405 +0x6067 0x746f +0x6068 0x7425 +0x6069 0x73f8 +0x606a 0x7432 +0x606b 0x743a +0x606c 0x7455 +0x606d 0x743f +0x606e 0x745f +0x606f 0x7459 +0x6070 0x7441 +0x6071 0x745c +0x6072 0x7469 +0x6073 0x7470 +0x6074 0x7463 +0x6075 0x746a +0x6076 0x7476 +0x6077 0x747e +0x6078 0x748b +0x6079 0x749e +0x607a 0x74a7 +0x607b 0x74ca +0x607c 0x74cf +0x607d 0x74d4 +0x607e 0x73f1 +0x6121 0x74e0 +0x6122 0x74e3 +0x6123 0x74e7 +0x6124 0x74e9 +0x6125 0x74ee +0x6126 0x74f2 +0x6127 0x74f0 +0x6128 0x74f1 +0x6129 0x74f8 +0x612a 0x74f7 +0x612b 0x7504 +0x612c 0x7503 +0x612d 0x7505 +0x612e 0x750c +0x612f 0x750e +0x6130 0x750d +0x6131 0x7515 +0x6132 0x7513 +0x6133 0x751e +0x6134 0x7526 +0x6135 0x752c +0x6136 0x753c +0x6137 0x7544 +0x6138 0x754d +0x6139 0x754a +0x613a 0x7549 +0x613b 0x755b +0x613c 0x7546 +0x613d 0x755a +0x613e 0x7569 +0x613f 0x7564 +0x6140 0x7567 +0x6141 0x756b +0x6142 0x756d +0x6143 0x7578 +0x6144 0x7576 +0x6145 0x7586 +0x6146 0x7587 +0x6147 0x7574 +0x6148 0x758a +0x6149 0x7589 +0x614a 0x7582 +0x614b 0x7594 +0x614c 0x759a +0x614d 0x759d +0x614e 0x75a5 +0x614f 0x75a3 +0x6150 0x75c2 +0x6151 0x75b3 +0x6152 0x75c3 +0x6153 0x75b5 +0x6154 0x75bd +0x6155 0x75b8 +0x6156 0x75bc +0x6157 0x75b1 +0x6158 0x75cd +0x6159 0x75ca +0x615a 0x75d2 +0x615b 0x75d9 +0x615c 0x75e3 +0x615d 0x75de +0x615e 0x75fe +0x615f 0x75ff +0x6160 0x75fc +0x6161 0x7601 +0x6162 0x75f0 +0x6163 0x75fa +0x6164 0x75f2 +0x6165 0x75f3 +0x6166 0x760b +0x6167 0x760d +0x6168 0x7609 +0x6169 0x761f +0x616a 0x7627 +0x616b 0x7620 +0x616c 0x7621 +0x616d 0x7622 +0x616e 0x7624 +0x616f 0x7634 +0x6170 0x7630 +0x6171 0x763b +0x6172 0x7647 +0x6173 0x7648 +0x6174 0x7646 +0x6175 0x765c +0x6176 0x7658 +0x6177 0x7661 +0x6178 0x7662 +0x6179 0x7668 +0x617a 0x7669 +0x617b 0x766a +0x617c 0x7667 +0x617d 0x766c +0x617e 0x7670 +0x6221 0x7672 +0x6222 0x7676 +0x6223 0x7678 +0x6224 0x767c +0x6225 0x7680 +0x6226 0x7683 +0x6227 0x7688 +0x6228 0x768b +0x6229 0x768e +0x622a 0x7696 +0x622b 0x7693 +0x622c 0x7699 +0x622d 0x769a +0x622e 0x76b0 +0x622f 0x76b4 +0x6230 0x76b8 +0x6231 0x76b9 +0x6232 0x76ba +0x6233 0x76c2 +0x6234 0x76cd +0x6235 0x76d6 +0x6236 0x76d2 +0x6237 0x76de +0x6238 0x76e1 +0x6239 0x76e5 +0x623a 0x76e7 +0x623b 0x76ea +0x623c 0x862f +0x623d 0x76fb +0x623e 0x7708 +0x623f 0x7707 +0x6240 0x7704 +0x6241 0x7729 +0x6242 0x7724 +0x6243 0x771e +0x6244 0x7725 +0x6245 0x7726 +0x6246 0x771b +0x6247 0x7737 +0x6248 0x7738 +0x6249 0x7747 +0x624a 0x775a +0x624b 0x7768 +0x624c 0x776b +0x624d 0x775b +0x624e 0x7765 +0x624f 0x777f +0x6250 0x777e +0x6251 0x7779 +0x6252 0x778e +0x6253 0x778b +0x6254 0x7791 +0x6255 0x77a0 +0x6256 0x779e +0x6257 0x77b0 +0x6258 0x77b6 +0x6259 0x77b9 +0x625a 0x77bf +0x625b 0x77bc +0x625c 0x77bd +0x625d 0x77bb +0x625e 0x77c7 +0x625f 0x77cd +0x6260 0x77d7 +0x6261 0x77da +0x6262 0x77dc +0x6263 0x77e3 +0x6264 0x77ee +0x6265 0x77fc +0x6266 0x780c +0x6267 0x7812 +0x6268 0x7926 +0x6269 0x7820 +0x626a 0x792a +0x626b 0x7845 +0x626c 0x788e +0x626d 0x7874 +0x626e 0x7886 +0x626f 0x787c +0x6270 0x789a +0x6271 0x788c +0x6272 0x78a3 +0x6273 0x78b5 +0x6274 0x78aa +0x6275 0x78af +0x6276 0x78d1 +0x6277 0x78c6 +0x6278 0x78cb +0x6279 0x78d4 +0x627a 0x78be +0x627b 0x78bc +0x627c 0x78c5 +0x627d 0x78ca +0x627e 0x78ec +0x6321 0x78e7 +0x6322 0x78da +0x6323 0x78fd +0x6324 0x78f4 +0x6325 0x7907 +0x6326 0x7912 +0x6327 0x7911 +0x6328 0x7919 +0x6329 0x792c +0x632a 0x792b +0x632b 0x7940 +0x632c 0x7960 +0x632d 0x7957 +0x632e 0x795f +0x632f 0x795a +0x6330 0x7955 +0x6331 0x7953 +0x6332 0x797a +0x6333 0x797f +0x6334 0x798a +0x6335 0x799d +0x6336 0x79a7 +0x6337 0x9f4b +0x6338 0x79aa +0x6339 0x79ae +0x633a 0x79b3 +0x633b 0x79b9 +0x633c 0x79ba +0x633d 0x79c9 +0x633e 0x79d5 +0x633f 0x79e7 +0x6340 0x79ec +0x6341 0x79e1 +0x6342 0x79e3 +0x6343 0x7a08 +0x6344 0x7a0d +0x6345 0x7a18 +0x6346 0x7a19 +0x6347 0x7a20 +0x6348 0x7a1f +0x6349 0x7980 +0x634a 0x7a31 +0x634b 0x7a3b +0x634c 0x7a3e +0x634d 0x7a37 +0x634e 0x7a43 +0x634f 0x7a57 +0x6350 0x7a49 +0x6351 0x7a61 +0x6352 0x7a62 +0x6353 0x7a69 +0x6354 0x9f9d +0x6355 0x7a70 +0x6356 0x7a79 +0x6357 0x7a7d +0x6358 0x7a88 +0x6359 0x7a97 +0x635a 0x7a95 +0x635b 0x7a98 +0x635c 0x7a96 +0x635d 0x7aa9 +0x635e 0x7ac8 +0x635f 0x7ab0 +0x6360 0x7ab6 +0x6361 0x7ac5 +0x6362 0x7ac4 +0x6363 0x7abf +0x6364 0x9083 +0x6365 0x7ac7 +0x6366 0x7aca +0x6367 0x7acd +0x6368 0x7acf +0x6369 0x7ad5 +0x636a 0x7ad3 +0x636b 0x7ad9 +0x636c 0x7ada +0x636d 0x7add +0x636e 0x7ae1 +0x636f 0x7ae2 +0x6370 0x7ae6 +0x6371 0x7aed +0x6372 0x7af0 +0x6373 0x7b02 +0x6374 0x7b0f +0x6375 0x7b0a +0x6376 0x7b06 +0x6377 0x7b33 +0x6378 0x7b18 +0x6379 0x7b19 +0x637a 0x7b1e +0x637b 0x7b35 +0x637c 0x7b28 +0x637d 0x7b36 +0x637e 0x7b50 +0x6421 0x7b7a +0x6422 0x7b04 +0x6423 0x7b4d +0x6424 0x7b0b +0x6425 0x7b4c +0x6426 0x7b45 +0x6427 0x7b75 +0x6428 0x7b65 +0x6429 0x7b74 +0x642a 0x7b67 +0x642b 0x7b70 +0x642c 0x7b71 +0x642d 0x7b6c +0x642e 0x7b6e +0x642f 0x7b9d +0x6430 0x7b98 +0x6431 0x7b9f +0x6432 0x7b8d +0x6433 0x7b9c +0x6434 0x7b9a +0x6435 0x7b8b +0x6436 0x7b92 +0x6437 0x7b8f +0x6438 0x7b5d +0x6439 0x7b99 +0x643a 0x7bcb +0x643b 0x7bc1 +0x643c 0x7bcc +0x643d 0x7bcf +0x643e 0x7bb4 +0x643f 0x7bc6 +0x6440 0x7bdd +0x6441 0x7be9 +0x6442 0x7c11 +0x6443 0x7c14 +0x6444 0x7be6 +0x6445 0x7be5 +0x6446 0x7c60 +0x6447 0x7c00 +0x6448 0x7c07 +0x6449 0x7c13 +0x644a 0x7bf3 +0x644b 0x7bf7 +0x644c 0x7c17 +0x644d 0x7c0d +0x644e 0x7bf6 +0x644f 0x7c23 +0x6450 0x7c27 +0x6451 0x7c2a +0x6452 0x7c1f +0x6453 0x7c37 +0x6454 0x7c2b +0x6455 0x7c3d +0x6456 0x7c4c +0x6457 0x7c43 +0x6458 0x7c54 +0x6459 0x7c4f +0x645a 0x7c40 +0x645b 0x7c50 +0x645c 0x7c58 +0x645d 0x7c5f +0x645e 0x7c64 +0x645f 0x7c56 +0x6460 0x7c65 +0x6461 0x7c6c +0x6462 0x7c75 +0x6463 0x7c83 +0x6464 0x7c90 +0x6465 0x7ca4 +0x6466 0x7cad +0x6467 0x7ca2 +0x6468 0x7cab +0x6469 0x7ca1 +0x646a 0x7ca8 +0x646b 0x7cb3 +0x646c 0x7cb2 +0x646d 0x7cb1 +0x646e 0x7cae +0x646f 0x7cb9 +0x6470 0x7cbd +0x6471 0x7cc0 +0x6472 0x7cc5 +0x6473 0x7cc2 +0x6474 0x7cd8 +0x6475 0x7cd2 +0x6476 0x7cdc +0x6477 0x7ce2 +0x6478 0x9b3b +0x6479 0x7cef +0x647a 0x7cf2 +0x647b 0x7cf4 +0x647c 0x7cf6 +0x647d 0x7cfa +0x647e 0x7d06 +0x6521 0x7d02 +0x6522 0x7d1c +0x6523 0x7d15 +0x6524 0x7d0a +0x6525 0x7d45 +0x6526 0x7d4b +0x6527 0x7d2e +0x6528 0x7d32 +0x6529 0x7d3f +0x652a 0x7d35 +0x652b 0x7d46 +0x652c 0x7d73 +0x652d 0x7d56 +0x652e 0x7d4e +0x652f 0x7d72 +0x6530 0x7d68 +0x6531 0x7d6e +0x6532 0x7d4f +0x6533 0x7d63 +0x6534 0x7d93 +0x6535 0x7d89 +0x6536 0x7d5b +0x6537 0x7d8f +0x6538 0x7d7d +0x6539 0x7d9b +0x653a 0x7dba +0x653b 0x7dae +0x653c 0x7da3 +0x653d 0x7db5 +0x653e 0x7dc7 +0x653f 0x7dbd +0x6540 0x7dab +0x6541 0x7e3d +0x6542 0x7da2 +0x6543 0x7daf +0x6544 0x7ddc +0x6545 0x7db8 +0x6546 0x7d9f +0x6547 0x7db0 +0x6548 0x7dd8 +0x6549 0x7ddd +0x654a 0x7de4 +0x654b 0x7dde +0x654c 0x7dfb +0x654d 0x7df2 +0x654e 0x7de1 +0x654f 0x7e05 +0x6550 0x7e0a +0x6551 0x7e23 +0x6552 0x7e21 +0x6553 0x7e12 +0x6554 0x7e31 +0x6555 0x7e1f +0x6556 0x7e09 +0x6557 0x7e0b +0x6558 0x7e22 +0x6559 0x7e46 +0x655a 0x7e66 +0x655b 0x7e3b +0x655c 0x7e35 +0x655d 0x7e39 +0x655e 0x7e43 +0x655f 0x7e37 +0x6560 0x7e32 +0x6561 0x7e3a +0x6562 0x7e67 +0x6563 0x7e5d +0x6564 0x7e56 +0x6565 0x7e5e +0x6566 0x7e59 +0x6567 0x7e5a +0x6568 0x7e79 +0x6569 0x7e6a +0x656a 0x7e69 +0x656b 0x7e7c +0x656c 0x7e7b +0x656d 0x7e83 +0x656e 0x7dd5 +0x656f 0x7e7d +0x6570 0x8fae +0x6571 0x7e7f +0x6572 0x7e88 +0x6573 0x7e89 +0x6574 0x7e8c +0x6575 0x7e92 +0x6576 0x7e90 +0x6577 0x7e93 +0x6578 0x7e94 +0x6579 0x7e96 +0x657a 0x7e8e +0x657b 0x7e9b +0x657c 0x7e9c +0x657d 0x7f38 +0x657e 0x7f3a +0x6621 0x7f45 +0x6622 0x7f4c +0x6623 0x7f4d +0x6624 0x7f4e +0x6625 0x7f50 +0x6626 0x7f51 +0x6627 0x7f55 +0x6628 0x7f54 +0x6629 0x7f58 +0x662a 0x7f5f +0x662b 0x7f60 +0x662c 0x7f68 +0x662d 0x7f69 +0x662e 0x7f67 +0x662f 0x7f78 +0x6630 0x7f82 +0x6631 0x7f86 +0x6632 0x7f83 +0x6633 0x7f88 +0x6634 0x7f87 +0x6635 0x7f8c +0x6636 0x7f94 +0x6637 0x7f9e +0x6638 0x7f9d +0x6639 0x7f9a +0x663a 0x7fa3 +0x663b 0x7faf +0x663c 0x7fb2 +0x663d 0x7fb9 +0x663e 0x7fae +0x663f 0x7fb6 +0x6640 0x7fb8 +0x6641 0x8b71 +0x6642 0x7fc5 +0x6643 0x7fc6 +0x6644 0x7fca +0x6645 0x7fd5 +0x6646 0x7fd4 +0x6647 0x7fe1 +0x6648 0x7fe6 +0x6649 0x7fe9 +0x664a 0x7ff3 +0x664b 0x7ff9 +0x664c 0x98dc +0x664d 0x8006 +0x664e 0x8004 +0x664f 0x800b +0x6650 0x8012 +0x6651 0x8018 +0x6652 0x8019 +0x6653 0x801c +0x6654 0x8021 +0x6655 0x8028 +0x6656 0x803f +0x6657 0x803b +0x6658 0x804a +0x6659 0x8046 +0x665a 0x8052 +0x665b 0x8058 +0x665c 0x805a +0x665d 0x805f +0x665e 0x8062 +0x665f 0x8068 +0x6660 0x8073 +0x6661 0x8072 +0x6662 0x8070 +0x6663 0x8076 +0x6664 0x8079 +0x6665 0x807d +0x6666 0x807f +0x6667 0x8084 +0x6668 0x8086 +0x6669 0x8085 +0x666a 0x809b +0x666b 0x8093 +0x666c 0x809a +0x666d 0x80ad +0x666e 0x5190 +0x666f 0x80ac +0x6670 0x80db +0x6671 0x80e5 +0x6672 0x80d9 +0x6673 0x80dd +0x6674 0x80c4 +0x6675 0x80da +0x6676 0x80d6 +0x6677 0x8109 +0x6678 0x80ef +0x6679 0x80f1 +0x667a 0x811b +0x667b 0x8129 +0x667c 0x8123 +0x667d 0x812f +0x667e 0x814b +0x6721 0x968b +0x6722 0x8146 +0x6723 0x813e +0x6724 0x8153 +0x6725 0x8151 +0x6726 0x80fc +0x6727 0x8171 +0x6728 0x816e +0x6729 0x8165 +0x672a 0x8166 +0x672b 0x8174 +0x672c 0x8183 +0x672d 0x8188 +0x672e 0x818a +0x672f 0x8180 +0x6730 0x8182 +0x6731 0x81a0 +0x6732 0x8195 +0x6733 0x81a4 +0x6734 0x81a3 +0x6735 0x815f +0x6736 0x8193 +0x6737 0x81a9 +0x6738 0x81b0 +0x6739 0x81b5 +0x673a 0x81be +0x673b 0x81b8 +0x673c 0x81bd +0x673d 0x81c0 +0x673e 0x81c2 +0x673f 0x81ba +0x6740 0x81c9 +0x6741 0x81cd +0x6742 0x81d1 +0x6743 0x81d9 +0x6744 0x81d8 +0x6745 0x81c8 +0x6746 0x81da +0x6747 0x81df +0x6748 0x81e0 +0x6749 0x81e7 +0x674a 0x81fa +0x674b 0x81fb +0x674c 0x81fe +0x674d 0x8201 +0x674e 0x8202 +0x674f 0x8205 +0x6750 0x8207 +0x6751 0x820a +0x6752 0x820d +0x6753 0x8210 +0x6754 0x8216 +0x6755 0x8229 +0x6756 0x822b +0x6757 0x8238 +0x6758 0x8233 +0x6759 0x8240 +0x675a 0x8259 +0x675b 0x8258 +0x675c 0x825d +0x675d 0x825a +0x675e 0x825f +0x675f 0x8264 +0x6760 0x8262 +0x6761 0x8268 +0x6762 0x826a +0x6763 0x826b +0x6764 0x822e +0x6765 0x8271 +0x6766 0x8277 +0x6767 0x8278 +0x6768 0x827e +0x6769 0x828d +0x676a 0x8292 +0x676b 0x82ab +0x676c 0x829f +0x676d 0x82bb +0x676e 0x82ac +0x676f 0x82e1 +0x6770 0x82e3 +0x6771 0x82df +0x6772 0x82d2 +0x6773 0x82f4 +0x6774 0x82f3 +0x6775 0x82fa +0x6776 0x8393 +0x6777 0x8303 +0x6778 0x82fb +0x6779 0x82f9 +0x677a 0x82de +0x677b 0x8306 +0x677c 0x82dc +0x677d 0x8309 +0x677e 0x82d9 +0x6821 0x8335 +0x6822 0x8334 +0x6823 0x8316 +0x6824 0x8332 +0x6825 0x8331 +0x6826 0x8340 +0x6827 0x8339 +0x6828 0x8350 +0x6829 0x8345 +0x682a 0x832f +0x682b 0x832b +0x682c 0x8317 +0x682d 0x8318 +0x682e 0x8385 +0x682f 0x839a +0x6830 0x83aa +0x6831 0x839f +0x6832 0x83a2 +0x6833 0x8396 +0x6834 0x8323 +0x6835 0x838e +0x6836 0x8387 +0x6837 0x838a +0x6838 0x837c +0x6839 0x83b5 +0x683a 0x8373 +0x683b 0x8375 +0x683c 0x83a0 +0x683d 0x8389 +0x683e 0x83a8 +0x683f 0x83f4 +0x6840 0x8413 +0x6841 0x83eb +0x6842 0x83ce +0x6843 0x83fd +0x6844 0x8403 +0x6845 0x83d8 +0x6846 0x840b +0x6847 0x83c1 +0x6848 0x83f7 +0x6849 0x8407 +0x684a 0x83e0 +0x684b 0x83f2 +0x684c 0x840d +0x684d 0x8422 +0x684e 0x8420 +0x684f 0x83bd +0x6850 0x8438 +0x6851 0x8506 +0x6852 0x83fb +0x6853 0x846d +0x6854 0x842a +0x6855 0x843c +0x6856 0x855a +0x6857 0x8484 +0x6858 0x8477 +0x6859 0x846b +0x685a 0x84ad +0x685b 0x846e +0x685c 0x8482 +0x685d 0x8469 +0x685e 0x8446 +0x685f 0x842c +0x6860 0x846f +0x6861 0x8479 +0x6862 0x8435 +0x6863 0x84ca +0x6864 0x8462 +0x6865 0x84b9 +0x6866 0x84bf +0x6867 0x849f +0x6868 0x84d9 +0x6869 0x84cd +0x686a 0x84bb +0x686b 0x84da +0x686c 0x84d0 +0x686d 0x84c1 +0x686e 0x84c6 +0x686f 0x84d6 +0x6870 0x84a1 +0x6871 0x8521 +0x6872 0x84ff +0x6873 0x84f4 +0x6874 0x8517 +0x6875 0x8518 +0x6876 0x852c +0x6877 0x851f +0x6878 0x8515 +0x6879 0x8514 +0x687a 0x84fc +0x687b 0x8540 +0x687c 0x8563 +0x687d 0x8558 +0x687e 0x8548 +0x6921 0x8541 +0x6922 0x8602 +0x6923 0x854b +0x6924 0x8555 +0x6925 0x8580 +0x6926 0x85a4 +0x6927 0x8588 +0x6928 0x8591 +0x6929 0x858a +0x692a 0x85a8 +0x692b 0x856d +0x692c 0x8594 +0x692d 0x859b +0x692e 0x85ea +0x692f 0x8587 +0x6930 0x859c +0x6931 0x8577 +0x6932 0x857e +0x6933 0x8590 +0x6934 0x85c9 +0x6935 0x85ba +0x6936 0x85cf +0x6937 0x85b9 +0x6938 0x85d0 +0x6939 0x85d5 +0x693a 0x85dd +0x693b 0x85e5 +0x693c 0x85dc +0x693d 0x85f9 +0x693e 0x860a +0x693f 0x8613 +0x6940 0x860b +0x6941 0x85fe +0x6942 0x85fa +0x6943 0x8606 +0x6944 0x8622 +0x6945 0x861a +0x6946 0x8630 +0x6947 0x863f +0x6948 0x864d +0x6949 0x4e55 +0x694a 0x8654 +0x694b 0x865f +0x694c 0x8667 +0x694d 0x8671 +0x694e 0x8693 +0x694f 0x86a3 +0x6950 0x86a9 +0x6951 0x86aa +0x6952 0x868b +0x6953 0x868c +0x6954 0x86b6 +0x6955 0x86af +0x6956 0x86c4 +0x6957 0x86c6 +0x6958 0x86b0 +0x6959 0x86c9 +0x695a 0x8823 +0x695b 0x86ab +0x695c 0x86d4 +0x695d 0x86de +0x695e 0x86e9 +0x695f 0x86ec +0x6960 0x86df +0x6961 0x86db +0x6962 0x86ef +0x6963 0x8712 +0x6964 0x8706 +0x6965 0x8708 +0x6966 0x8700 +0x6967 0x8703 +0x6968 0x86fb +0x6969 0x8711 +0x696a 0x8709 +0x696b 0x870d +0x696c 0x86f9 +0x696d 0x870a +0x696e 0x8734 +0x696f 0x873f +0x6970 0x8737 +0x6971 0x873b +0x6972 0x8725 +0x6973 0x8729 +0x6974 0x871a +0x6975 0x8760 +0x6976 0x875f +0x6977 0x8778 +0x6978 0x874c +0x6979 0x874e +0x697a 0x8774 +0x697b 0x8757 +0x697c 0x8768 +0x697d 0x876e +0x697e 0x8759 +0x6a21 0x8753 +0x6a22 0x8763 +0x6a23 0x876a +0x6a24 0x8805 +0x6a25 0x87a2 +0x6a26 0x879f +0x6a27 0x8782 +0x6a28 0x87af +0x6a29 0x87cb +0x6a2a 0x87bd +0x6a2b 0x87c0 +0x6a2c 0x87d0 +0x6a2d 0x96d6 +0x6a2e 0x87ab +0x6a2f 0x87c4 +0x6a30 0x87b3 +0x6a31 0x87c7 +0x6a32 0x87c6 +0x6a33 0x87bb +0x6a34 0x87ef +0x6a35 0x87f2 +0x6a36 0x87e0 +0x6a37 0x880f +0x6a38 0x880d +0x6a39 0x87fe +0x6a3a 0x87f6 +0x6a3b 0x87f7 +0x6a3c 0x880e +0x6a3d 0x87d2 +0x6a3e 0x8811 +0x6a3f 0x8816 +0x6a40 0x8815 +0x6a41 0x8822 +0x6a42 0x8821 +0x6a43 0x8831 +0x6a44 0x8836 +0x6a45 0x8839 +0x6a46 0x8827 +0x6a47 0x883b +0x6a48 0x8844 +0x6a49 0x8842 +0x6a4a 0x8852 +0x6a4b 0x8859 +0x6a4c 0x885e +0x6a4d 0x8862 +0x6a4e 0x886b +0x6a4f 0x8881 +0x6a50 0x887e +0x6a51 0x889e +0x6a52 0x8875 +0x6a53 0x887d +0x6a54 0x88b5 +0x6a55 0x8872 +0x6a56 0x8882 +0x6a57 0x8897 +0x6a58 0x8892 +0x6a59 0x88ae +0x6a5a 0x8899 +0x6a5b 0x88a2 +0x6a5c 0x888d +0x6a5d 0x88a4 +0x6a5e 0x88b0 +0x6a5f 0x88bf +0x6a60 0x88b1 +0x6a61 0x88c3 +0x6a62 0x88c4 +0x6a63 0x88d4 +0x6a64 0x88d8 +0x6a65 0x88d9 +0x6a66 0x88dd +0x6a67 0x88f9 +0x6a68 0x8902 +0x6a69 0x88fc +0x6a6a 0x88f4 +0x6a6b 0x88e8 +0x6a6c 0x88f2 +0x6a6d 0x8904 +0x6a6e 0x890c +0x6a6f 0x890a +0x6a70 0x8913 +0x6a71 0x8943 +0x6a72 0x891e +0x6a73 0x8925 +0x6a74 0x892a +0x6a75 0x892b +0x6a76 0x8941 +0x6a77 0x8944 +0x6a78 0x893b +0x6a79 0x8936 +0x6a7a 0x8938 +0x6a7b 0x894c +0x6a7c 0x891d +0x6a7d 0x8960 +0x6a7e 0x895e +0x6b21 0x8966 +0x6b22 0x8964 +0x6b23 0x896d +0x6b24 0x896a +0x6b25 0x896f +0x6b26 0x8974 +0x6b27 0x8977 +0x6b28 0x897e +0x6b29 0x8983 +0x6b2a 0x8988 +0x6b2b 0x898a +0x6b2c 0x8993 +0x6b2d 0x8998 +0x6b2e 0x89a1 +0x6b2f 0x89a9 +0x6b30 0x89a6 +0x6b31 0x89ac +0x6b32 0x89af +0x6b33 0x89b2 +0x6b34 0x89ba +0x6b35 0x89bd +0x6b36 0x89bf +0x6b37 0x89c0 +0x6b38 0x89da +0x6b39 0x89dc +0x6b3a 0x89dd +0x6b3b 0x89e7 +0x6b3c 0x89f4 +0x6b3d 0x89f8 +0x6b3e 0x8a03 +0x6b3f 0x8a16 +0x6b40 0x8a10 +0x6b41 0x8a0c +0x6b42 0x8a1b +0x6b43 0x8a1d +0x6b44 0x8a25 +0x6b45 0x8a36 +0x6b46 0x8a41 +0x6b47 0x8a5b +0x6b48 0x8a52 +0x6b49 0x8a46 +0x6b4a 0x8a48 +0x6b4b 0x8a7c +0x6b4c 0x8a6d +0x6b4d 0x8a6c +0x6b4e 0x8a62 +0x6b4f 0x8a85 +0x6b50 0x8a82 +0x6b51 0x8a84 +0x6b52 0x8aa8 +0x6b53 0x8aa1 +0x6b54 0x8a91 +0x6b55 0x8aa5 +0x6b56 0x8aa6 +0x6b57 0x8a9a +0x6b58 0x8aa3 +0x6b59 0x8ac4 +0x6b5a 0x8acd +0x6b5b 0x8ac2 +0x6b5c 0x8ada +0x6b5d 0x8aeb +0x6b5e 0x8af3 +0x6b5f 0x8ae7 +0x6b60 0x8ae4 +0x6b61 0x8af1 +0x6b62 0x8b14 +0x6b63 0x8ae0 +0x6b64 0x8ae2 +0x6b65 0x8af7 +0x6b66 0x8ade +0x6b67 0x8adb +0x6b68 0x8b0c +0x6b69 0x8b07 +0x6b6a 0x8b1a +0x6b6b 0x8ae1 +0x6b6c 0x8b16 +0x6b6d 0x8b10 +0x6b6e 0x8b17 +0x6b6f 0x8b20 +0x6b70 0x8b33 +0x6b71 0x97ab +0x6b72 0x8b26 +0x6b73 0x8b2b +0x6b74 0x8b3e +0x6b75 0x8b28 +0x6b76 0x8b41 +0x6b77 0x8b4c +0x6b78 0x8b4f +0x6b79 0x8b4e +0x6b7a 0x8b49 +0x6b7b 0x8b56 +0x6b7c 0x8b5b +0x6b7d 0x8b5a +0x6b7e 0x8b6b +0x6c21 0x8b5f +0x6c22 0x8b6c +0x6c23 0x8b6f +0x6c24 0x8b74 +0x6c25 0x8b7d +0x6c26 0x8b80 +0x6c27 0x8b8c +0x6c28 0x8b8e +0x6c29 0x8b92 +0x6c2a 0x8b93 +0x6c2b 0x8b96 +0x6c2c 0x8b99 +0x6c2d 0x8b9a +0x6c2e 0x8c3a +0x6c2f 0x8c41 +0x6c30 0x8c3f +0x6c31 0x8c48 +0x6c32 0x8c4c +0x6c33 0x8c4e +0x6c34 0x8c50 +0x6c35 0x8c55 +0x6c36 0x8c62 +0x6c37 0x8c6c +0x6c38 0x8c78 +0x6c39 0x8c7a +0x6c3a 0x8c82 +0x6c3b 0x8c89 +0x6c3c 0x8c85 +0x6c3d 0x8c8a +0x6c3e 0x8c8d +0x6c3f 0x8c8e +0x6c40 0x8c94 +0x6c41 0x8c7c +0x6c42 0x8c98 +0x6c43 0x621d +0x6c44 0x8cad +0x6c45 0x8caa +0x6c46 0x8cbd +0x6c47 0x8cb2 +0x6c48 0x8cb3 +0x6c49 0x8cae +0x6c4a 0x8cb6 +0x6c4b 0x8cc8 +0x6c4c 0x8cc1 +0x6c4d 0x8ce4 +0x6c4e 0x8ce3 +0x6c4f 0x8cda +0x6c50 0x8cfd +0x6c51 0x8cfa +0x6c52 0x8cfb +0x6c53 0x8d04 +0x6c54 0x8d05 +0x6c55 0x8d0a +0x6c56 0x8d07 +0x6c57 0x8d0f +0x6c58 0x8d0d +0x6c59 0x8d10 +0x6c5a 0x9f4e +0x6c5b 0x8d13 +0x6c5c 0x8ccd +0x6c5d 0x8d14 +0x6c5e 0x8d16 +0x6c5f 0x8d67 +0x6c60 0x8d6d +0x6c61 0x8d71 +0x6c62 0x8d73 +0x6c63 0x8d81 +0x6c64 0x8d99 +0x6c65 0x8dc2 +0x6c66 0x8dbe +0x6c67 0x8dba +0x6c68 0x8dcf +0x6c69 0x8dda +0x6c6a 0x8dd6 +0x6c6b 0x8dcc +0x6c6c 0x8ddb +0x6c6d 0x8dcb +0x6c6e 0x8dea +0x6c6f 0x8deb +0x6c70 0x8ddf +0x6c71 0x8de3 +0x6c72 0x8dfc +0x6c73 0x8e08 +0x6c74 0x8e09 +0x6c75 0x8dff +0x6c76 0x8e1d +0x6c77 0x8e1e +0x6c78 0x8e10 +0x6c79 0x8e1f +0x6c7a 0x8e42 +0x6c7b 0x8e35 +0x6c7c 0x8e30 +0x6c7d 0x8e34 +0x6c7e 0x8e4a +0x6d21 0x8e47 +0x6d22 0x8e49 +0x6d23 0x8e4c +0x6d24 0x8e50 +0x6d25 0x8e48 +0x6d26 0x8e59 +0x6d27 0x8e64 +0x6d28 0x8e60 +0x6d29 0x8e2a +0x6d2a 0x8e63 +0x6d2b 0x8e55 +0x6d2c 0x8e76 +0x6d2d 0x8e72 +0x6d2e 0x8e7c +0x6d2f 0x8e81 +0x6d30 0x8e87 +0x6d31 0x8e85 +0x6d32 0x8e84 +0x6d33 0x8e8b +0x6d34 0x8e8a +0x6d35 0x8e93 +0x6d36 0x8e91 +0x6d37 0x8e94 +0x6d38 0x8e99 +0x6d39 0x8eaa +0x6d3a 0x8ea1 +0x6d3b 0x8eac +0x6d3c 0x8eb0 +0x6d3d 0x8ec6 +0x6d3e 0x8eb1 +0x6d3f 0x8ebe +0x6d40 0x8ec5 +0x6d41 0x8ec8 +0x6d42 0x8ecb +0x6d43 0x8edb +0x6d44 0x8ee3 +0x6d45 0x8efc +0x6d46 0x8efb +0x6d47 0x8eeb +0x6d48 0x8efe +0x6d49 0x8f0a +0x6d4a 0x8f05 +0x6d4b 0x8f15 +0x6d4c 0x8f12 +0x6d4d 0x8f19 +0x6d4e 0x8f13 +0x6d4f 0x8f1c +0x6d50 0x8f1f +0x6d51 0x8f1b +0x6d52 0x8f0c +0x6d53 0x8f26 +0x6d54 0x8f33 +0x6d55 0x8f3b +0x6d56 0x8f39 +0x6d57 0x8f45 +0x6d58 0x8f42 +0x6d59 0x8f3e +0x6d5a 0x8f4c +0x6d5b 0x8f49 +0x6d5c 0x8f46 +0x6d5d 0x8f4e +0x6d5e 0x8f57 +0x6d5f 0x8f5c +0x6d60 0x8f62 +0x6d61 0x8f63 +0x6d62 0x8f64 +0x6d63 0x8f9c +0x6d64 0x8f9f +0x6d65 0x8fa3 +0x6d66 0x8fad +0x6d67 0x8faf +0x6d68 0x8fb7 +0x6d69 0x8fda +0x6d6a 0x8fe5 +0x6d6b 0x8fe2 +0x6d6c 0x8fea +0x6d6d 0x8fef +0x6d6e 0x9087 +0x6d6f 0x8ff4 +0x6d70 0x9005 +0x6d71 0x8ff9 +0x6d72 0x8ffa +0x6d73 0x9011 +0x6d74 0x9015 +0x6d75 0x9021 +0x6d76 0x900d +0x6d77 0x901e +0x6d78 0x9016 +0x6d79 0x900b +0x6d7a 0x9027 +0x6d7b 0x9036 +0x6d7c 0x9035 +0x6d7d 0x9039 +0x6d7e 0x8ff8 +0x6e21 0x904f +0x6e22 0x9050 +0x6e23 0x9051 +0x6e24 0x9052 +0x6e25 0x900e +0x6e26 0x9049 +0x6e27 0x903e +0x6e28 0x9056 +0x6e29 0x9058 +0x6e2a 0x905e +0x6e2b 0x9068 +0x6e2c 0x906f +0x6e2d 0x9076 +0x6e2e 0x96a8 +0x6e2f 0x9072 +0x6e30 0x9082 +0x6e31 0x907d +0x6e32 0x9081 +0x6e33 0x9080 +0x6e34 0x908a +0x6e35 0x9089 +0x6e36 0x908f +0x6e37 0x90a8 +0x6e38 0x90af +0x6e39 0x90b1 +0x6e3a 0x90b5 +0x6e3b 0x90e2 +0x6e3c 0x90e4 +0x6e3d 0x6248 +0x6e3e 0x90db +0x6e3f 0x9102 +0x6e40 0x9112 +0x6e41 0x9119 +0x6e42 0x9132 +0x6e43 0x9130 +0x6e44 0x914a +0x6e45 0x9156 +0x6e46 0x9158 +0x6e47 0x9163 +0x6e48 0x9165 +0x6e49 0x9169 +0x6e4a 0x9173 +0x6e4b 0x9172 +0x6e4c 0x918b +0x6e4d 0x9189 +0x6e4e 0x9182 +0x6e4f 0x91a2 +0x6e50 0x91ab +0x6e51 0x91af +0x6e52 0x91aa +0x6e53 0x91b5 +0x6e54 0x91b4 +0x6e55 0x91ba +0x6e56 0x91c0 +0x6e57 0x91c1 +0x6e58 0x91c9 +0x6e59 0x91cb +0x6e5a 0x91d0 +0x6e5b 0x91d6 +0x6e5c 0x91df +0x6e5d 0x91e1 +0x6e5e 0x91db +0x6e5f 0x91fc +0x6e60 0x91f5 +0x6e61 0x91f6 +0x6e62 0x921e +0x6e63 0x91ff +0x6e64 0x9214 +0x6e65 0x922c +0x6e66 0x9215 +0x6e67 0x9211 +0x6e68 0x925e +0x6e69 0x9257 +0x6e6a 0x9245 +0x6e6b 0x9249 +0x6e6c 0x9264 +0x6e6d 0x9248 +0x6e6e 0x9295 +0x6e6f 0x923f +0x6e70 0x924b +0x6e71 0x9250 +0x6e72 0x929c +0x6e73 0x9296 +0x6e74 0x9293 +0x6e75 0x929b +0x6e76 0x925a +0x6e77 0x92cf +0x6e78 0x92b9 +0x6e79 0x92b7 +0x6e7a 0x92e9 +0x6e7b 0x930f +0x6e7c 0x92fa +0x6e7d 0x9344 +0x6e7e 0x932e +0x6f21 0x9319 +0x6f22 0x9322 +0x6f23 0x931a +0x6f24 0x9323 +0x6f25 0x933a +0x6f26 0x9335 +0x6f27 0x933b +0x6f28 0x935c +0x6f29 0x9360 +0x6f2a 0x937c +0x6f2b 0x936e +0x6f2c 0x9356 +0x6f2d 0x93b0 +0x6f2e 0x93ac +0x6f2f 0x93ad +0x6f30 0x9394 +0x6f31 0x93b9 +0x6f32 0x93d6 +0x6f33 0x93d7 +0x6f34 0x93e8 +0x6f35 0x93e5 +0x6f36 0x93d8 +0x6f37 0x93c3 +0x6f38 0x93dd +0x6f39 0x93d0 +0x6f3a 0x93c8 +0x6f3b 0x93e4 +0x6f3c 0x941a +0x6f3d 0x9414 +0x6f3e 0x9413 +0x6f3f 0x9403 +0x6f40 0x9407 +0x6f41 0x9410 +0x6f42 0x9436 +0x6f43 0x942b +0x6f44 0x9435 +0x6f45 0x9421 +0x6f46 0x943a +0x6f47 0x9441 +0x6f48 0x9452 +0x6f49 0x9444 +0x6f4a 0x945b +0x6f4b 0x9460 +0x6f4c 0x9462 +0x6f4d 0x945e +0x6f4e 0x946a +0x6f4f 0x9229 +0x6f50 0x9470 +0x6f51 0x9475 +0x6f52 0x9477 +0x6f53 0x947d +0x6f54 0x945a +0x6f55 0x947c +0x6f56 0x947e +0x6f57 0x9481 +0x6f58 0x947f +0x6f59 0x9582 +0x6f5a 0x9587 +0x6f5b 0x958a +0x6f5c 0x9594 +0x6f5d 0x9596 +0x6f5e 0x9598 +0x6f5f 0x9599 +0x6f60 0x95a0 +0x6f61 0x95a8 +0x6f62 0x95a7 +0x6f63 0x95ad +0x6f64 0x95bc +0x6f65 0x95bb +0x6f66 0x95b9 +0x6f67 0x95be +0x6f68 0x95ca +0x6f69 0x6ff6 +0x6f6a 0x95c3 +0x6f6b 0x95cd +0x6f6c 0x95cc +0x6f6d 0x95d5 +0x6f6e 0x95d4 +0x6f6f 0x95d6 +0x6f70 0x95dc +0x6f71 0x95e1 +0x6f72 0x95e5 +0x6f73 0x95e2 +0x6f74 0x9621 +0x6f75 0x9628 +0x6f76 0x962e +0x6f77 0x962f +0x6f78 0x9642 +0x6f79 0x964c +0x6f7a 0x964f +0x6f7b 0x964b +0x6f7c 0x9677 +0x6f7d 0x965c +0x6f7e 0x965e +0x7021 0x965d +0x7022 0x965f +0x7023 0x9666 +0x7024 0x9672 +0x7025 0x966c +0x7026 0x968d +0x7027 0x9698 +0x7028 0x9695 +0x7029 0x9697 +0x702a 0x96aa +0x702b 0x96a7 +0x702c 0x96b1 +0x702d 0x96b2 +0x702e 0x96b0 +0x702f 0x96b4 +0x7030 0x96b6 +0x7031 0x96b8 +0x7032 0x96b9 +0x7033 0x96ce +0x7034 0x96cb +0x7035 0x96c9 +0x7036 0x96cd +0x7037 0x894d +0x7038 0x96dc +0x7039 0x970d +0x703a 0x96d5 +0x703b 0x96f9 +0x703c 0x9704 +0x703d 0x9706 +0x703e 0x9708 +0x703f 0x9713 +0x7040 0x970e +0x7041 0x9711 +0x7042 0x970f +0x7043 0x9716 +0x7044 0x9719 +0x7045 0x9724 +0x7046 0x972a +0x7047 0x9730 +0x7048 0x9739 +0x7049 0x973d +0x704a 0x973e +0x704b 0x9744 +0x704c 0x9746 +0x704d 0x9748 +0x704e 0x9742 +0x704f 0x9749 +0x7050 0x975c +0x7051 0x9760 +0x7052 0x9764 +0x7053 0x9766 +0x7054 0x9768 +0x7055 0x52d2 +0x7056 0x976b +0x7057 0x9771 +0x7058 0x9779 +0x7059 0x9785 +0x705a 0x977c +0x705b 0x9781 +0x705c 0x977a +0x705d 0x9786 +0x705e 0x978b +0x705f 0x978f +0x7060 0x9790 +0x7061 0x979c +0x7062 0x97a8 +0x7063 0x97a6 +0x7064 0x97a3 +0x7065 0x97b3 +0x7066 0x97b4 +0x7067 0x97c3 +0x7068 0x97c6 +0x7069 0x97c8 +0x706a 0x97cb +0x706b 0x97dc +0x706c 0x97ed +0x706d 0x9f4f +0x706e 0x97f2 +0x706f 0x7adf +0x7070 0x97f6 +0x7071 0x97f5 +0x7072 0x980f +0x7073 0x980c +0x7074 0x9838 +0x7075 0x9824 +0x7076 0x9821 +0x7077 0x9837 +0x7078 0x983d +0x7079 0x9846 +0x707a 0x984f +0x707b 0x984b +0x707c 0x986b +0x707d 0x986f +0x707e 0x9870 +0x7121 0x9871 +0x7122 0x9874 +0x7123 0x9873 +0x7124 0x98aa +0x7125 0x98af +0x7126 0x98b1 +0x7127 0x98b6 +0x7128 0x98c4 +0x7129 0x98c3 +0x712a 0x98c6 +0x712b 0x98e9 +0x712c 0x98eb +0x712d 0x9903 +0x712e 0x9909 +0x712f 0x9912 +0x7130 0x9914 +0x7131 0x9918 +0x7132 0x9921 +0x7133 0x991d +0x7134 0x991e +0x7135 0x9924 +0x7136 0x9920 +0x7137 0x992c +0x7138 0x992e +0x7139 0x993d +0x713a 0x993e +0x713b 0x9942 +0x713c 0x9949 +0x713d 0x9945 +0x713e 0x9950 +0x713f 0x994b +0x7140 0x9951 +0x7141 0x9952 +0x7142 0x994c +0x7143 0x9955 +0x7144 0x9997 +0x7145 0x9998 +0x7146 0x99a5 +0x7147 0x99ad +0x7148 0x99ae +0x7149 0x99bc +0x714a 0x99df +0x714b 0x99db +0x714c 0x99dd +0x714d 0x99d8 +0x714e 0x99d1 +0x714f 0x99ed +0x7150 0x99ee +0x7151 0x99f1 +0x7152 0x99f2 +0x7153 0x99fb +0x7154 0x99f8 +0x7155 0x9a01 +0x7156 0x9a0f +0x7157 0x9a05 +0x7158 0x99e2 +0x7159 0x9a19 +0x715a 0x9a2b +0x715b 0x9a37 +0x715c 0x9a45 +0x715d 0x9a42 +0x715e 0x9a40 +0x715f 0x9a43 +0x7160 0x9a3e +0x7161 0x9a55 +0x7162 0x9a4d +0x7163 0x9a5b +0x7164 0x9a57 +0x7165 0x9a5f +0x7166 0x9a62 +0x7167 0x9a65 +0x7168 0x9a64 +0x7169 0x9a69 +0x716a 0x9a6b +0x716b 0x9a6a +0x716c 0x9aad +0x716d 0x9ab0 +0x716e 0x9abc +0x716f 0x9ac0 +0x7170 0x9acf +0x7171 0x9ad1 +0x7172 0x9ad3 +0x7173 0x9ad4 +0x7174 0x9ade +0x7175 0x9adf +0x7176 0x9ae2 +0x7177 0x9ae3 +0x7178 0x9ae6 +0x7179 0x9aef +0x717a 0x9aeb +0x717b 0x9aee +0x717c 0x9af4 +0x717d 0x9af1 +0x717e 0x9af7 +0x7221 0x9afb +0x7222 0x9b06 +0x7223 0x9b18 +0x7224 0x9b1a +0x7225 0x9b1f +0x7226 0x9b22 +0x7227 0x9b23 +0x7228 0x9b25 +0x7229 0x9b27 +0x722a 0x9b28 +0x722b 0x9b29 +0x722c 0x9b2a +0x722d 0x9b2e +0x722e 0x9b2f +0x722f 0x9b32 +0x7230 0x9b44 +0x7231 0x9b43 +0x7232 0x9b4f +0x7233 0x9b4d +0x7234 0x9b4e +0x7235 0x9b51 +0x7236 0x9b58 +0x7237 0x9b74 +0x7238 0x9b93 +0x7239 0x9b83 +0x723a 0x9b91 +0x723b 0x9b96 +0x723c 0x9b97 +0x723d 0x9b9f +0x723e 0x9ba0 +0x723f 0x9ba8 +0x7240 0x9bb4 +0x7241 0x9bc0 +0x7242 0x9bca +0x7243 0x9bb9 +0x7244 0x9bc6 +0x7245 0x9bcf +0x7246 0x9bd1 +0x7247 0x9bd2 +0x7248 0x9be3 +0x7249 0x9be2 +0x724a 0x9be4 +0x724b 0x9bd4 +0x724c 0x9be1 +0x724d 0x9c3a +0x724e 0x9bf2 +0x724f 0x9bf1 +0x7250 0x9bf0 +0x7251 0x9c15 +0x7252 0x9c14 +0x7253 0x9c09 +0x7254 0x9c13 +0x7255 0x9c0c +0x7256 0x9c06 +0x7257 0x9c08 +0x7258 0x9c12 +0x7259 0x9c0a +0x725a 0x9c04 +0x725b 0x9c2e +0x725c 0x9c1b +0x725d 0x9c25 +0x725e 0x9c24 +0x725f 0x9c21 +0x7260 0x9c30 +0x7261 0x9c47 +0x7262 0x9c32 +0x7263 0x9c46 +0x7264 0x9c3e +0x7265 0x9c5a +0x7266 0x9c60 +0x7267 0x9c67 +0x7268 0x9c76 +0x7269 0x9c78 +0x726a 0x9ce7 +0x726b 0x9cec +0x726c 0x9cf0 +0x726d 0x9d09 +0x726e 0x9d08 +0x726f 0x9ceb +0x7270 0x9d03 +0x7271 0x9d06 +0x7272 0x9d2a +0x7273 0x9d26 +0x7274 0x9daf +0x7275 0x9d23 +0x7276 0x9d1f +0x7277 0x9d44 +0x7278 0x9d15 +0x7279 0x9d12 +0x727a 0x9d41 +0x727b 0x9d3f +0x727c 0x9d3e +0x727d 0x9d46 +0x727e 0x9d48 +0x7321 0x9d5d +0x7322 0x9d5e +0x7323 0x9d64 +0x7324 0x9d51 +0x7325 0x9d50 +0x7326 0x9d59 +0x7327 0x9d72 +0x7328 0x9d89 +0x7329 0x9d87 +0x732a 0x9dab +0x732b 0x9d6f +0x732c 0x9d7a +0x732d 0x9d9a +0x732e 0x9da4 +0x732f 0x9da9 +0x7330 0x9db2 +0x7331 0x9dc4 +0x7332 0x9dc1 +0x7333 0x9dbb +0x7334 0x9db8 +0x7335 0x9dba +0x7336 0x9dc6 +0x7337 0x9dcf +0x7338 0x9dc2 +0x7339 0x9dd9 +0x733a 0x9dd3 +0x733b 0x9df8 +0x733c 0x9de6 +0x733d 0x9ded +0x733e 0x9def +0x733f 0x9dfd +0x7340 0x9e1a +0x7341 0x9e1b +0x7342 0x9e1e +0x7343 0x9e75 +0x7344 0x9e79 +0x7345 0x9e7d +0x7346 0x9e81 +0x7347 0x9e88 +0x7348 0x9e8b +0x7349 0x9e8c +0x734a 0x9e92 +0x734b 0x9e95 +0x734c 0x9e91 +0x734d 0x9e9d +0x734e 0x9ea5 +0x734f 0x9ea9 +0x7350 0x9eb8 +0x7351 0x9eaa +0x7352 0x9ead +0x7353 0x9761 +0x7354 0x9ecc +0x7355 0x9ece +0x7356 0x9ecf +0x7357 0x9ed0 +0x7358 0x9ed4 +0x7359 0x9edc +0x735a 0x9ede +0x735b 0x9edd +0x735c 0x9ee0 +0x735d 0x9ee5 +0x735e 0x9ee8 +0x735f 0x9eef +0x7360 0x9ef4 +0x7361 0x9ef6 +0x7362 0x9ef7 +0x7363 0x9ef9 +0x7364 0x9efb +0x7365 0x9efc +0x7366 0x9efd +0x7367 0x9f07 +0x7368 0x9f08 +0x7369 0x76b7 +0x736a 0x9f15 +0x736b 0x9f21 +0x736c 0x9f2c +0x736d 0x9f3e +0x736e 0x9f4a +0x736f 0x9f52 +0x7370 0x9f54 +0x7371 0x9f63 +0x7372 0x9f5f +0x7373 0x9f60 +0x7374 0x9f61 +0x7375 0x9f66 +0x7376 0x9f67 +0x7377 0x9f6c +0x7378 0x9f6a +0x7379 0x9f77 +0x737a 0x9f72 +0x737b 0x9f76 +0x737c 0x9f95 +0x737d 0x9f9c +0x737e 0x9fa0 +0x7421 0x582f +0x7422 0x69c7 +0x7423 0x9059 +0x7424 0x7464 +0x7425 0x51dc +0x7426 0x7199 +0x7921 0x7e8a +0x7922 0x891c +0x7923 0x9348 +0x7924 0x9288 +0x7925 0x84dc +0x7926 0x4fc9 +0x7927 0x70bb +0x7928 0x6631 +0x7929 0x68c8 +0x792a 0x92f9 +0x792b 0x66fb +0x792c 0x5f45 +0x792d 0x4e28 +0x792e 0x4ee1 +0x792f 0x4efc +0x7930 0x4f00 +0x7931 0x4f03 +0x7932 0x4f39 +0x7933 0x4f56 +0x7934 0x4f92 +0x7935 0x4f8a +0x7936 0x4f9a +0x7937 0x4f94 +0x7938 0x4fcd +0x7939 0x5040 +0x793a 0x5022 +0x793b 0x4fff +0x793c 0x501e +0x793d 0x5046 +0x793e 0x5070 +0x793f 0x5042 +0x7940 0x5094 +0x7941 0x50f4 +0x7942 0x50d8 +0x7943 0x514a +0x7944 0x5164 +0x7945 0x519d +0x7946 0x51be +0x7947 0x51ec +0x7948 0x5215 +0x7949 0x529c +0x794a 0x52a6 +0x794b 0x52c0 +0x794c 0x52db +0x794d 0x5300 +0x794e 0x5307 +0x794f 0x5324 +0x7950 0x5372 +0x7951 0x5393 +0x7952 0x53b2 +0x7953 0x53dd +0x7954 0xfa0e +0x7955 0x549c +0x7956 0x548a +0x7957 0x54a9 +0x7958 0x54ff +0x7959 0x5586 +0x795a 0x5759 +0x795b 0x5765 +0x795c 0x57ac +0x795d 0x57c8 +0x795e 0x57c7 +0x795f 0xfa0f +0x7960 0xfa10 +0x7961 0x589e +0x7962 0x58b2 +0x7963 0x590b +0x7964 0x5953 +0x7965 0x595b +0x7966 0x595d +0x7967 0x5963 +0x7968 0x59a4 +0x7969 0x59ba +0x796a 0x5b56 +0x796b 0x5bc0 +0x796c 0x752f +0x796d 0x5bd8 +0x796e 0x5bec +0x796f 0x5c1e +0x7970 0x5ca6 +0x7971 0x5cba +0x7972 0x5cf5 +0x7973 0x5d27 +0x7974 0x5d53 +0x7975 0xfa11 +0x7976 0x5d42 +0x7977 0x5d6d +0x7978 0x5db8 +0x7979 0x5db9 +0x797a 0x5dd0 +0x797b 0x5f21 +0x797c 0x5f34 +0x797d 0x5f67 +0x797e 0x5fb7 +0x7a21 0x5fde +0x7a22 0x605d +0x7a23 0x6085 +0x7a24 0x608a +0x7a25 0x60de +0x7a26 0x60d5 +0x7a27 0x6120 +0x7a28 0x60f2 +0x7a29 0x6111 +0x7a2a 0x6137 +0x7a2b 0x6130 +0x7a2c 0x6198 +0x7a2d 0x6213 +0x7a2e 0x62a6 +0x7a2f 0x63f5 +0x7a30 0x6460 +0x7a31 0x649d +0x7a32 0x64ce +0x7a33 0x654e +0x7a34 0x6600 +0x7a35 0x6615 +0x7a36 0x663b +0x7a37 0x6609 +0x7a38 0x662e +0x7a39 0x661e +0x7a3a 0x6624 +0x7a3b 0x6665 +0x7a3c 0x6657 +0x7a3d 0x6659 +0x7a3e 0xfa12 +0x7a3f 0x6673 +0x7a40 0x6699 +0x7a41 0x66a0 +0x7a42 0x66b2 +0x7a43 0x66bf +0x7a44 0x66fa +0x7a45 0x670e +0x7a46 0xf929 +0x7a47 0x6766 +0x7a48 0x67bb +0x7a49 0x6852 +0x7a4a 0x67c0 +0x7a4b 0x6801 +0x7a4c 0x6844 +0x7a4d 0x68cf +0x7a4e 0xfa13 +0x7a4f 0x6968 +0x7a50 0xfa14 +0x7a51 0x6998 +0x7a52 0x69e2 +0x7a53 0x6a30 +0x7a54 0x6a6b +0x7a55 0x6a46 +0x7a56 0x6a73 +0x7a57 0x6a7e +0x7a58 0x6ae2 +0x7a59 0x6ae4 +0x7a5a 0x6bd6 +0x7a5b 0x6c3f +0x7a5c 0x6c5c +0x7a5d 0x6c86 +0x7a5e 0x6c6f +0x7a5f 0x6cda +0x7a60 0x6d04 +0x7a61 0x6d87 +0x7a62 0x6d6f +0x7a63 0x6d96 +0x7a64 0x6dac +0x7a65 0x6dcf +0x7a66 0x6df8 +0x7a67 0x6df2 +0x7a68 0x6dfc +0x7a69 0x6e39 +0x7a6a 0x6e5c +0x7a6b 0x6e27 +0x7a6c 0x6e3c +0x7a6d 0x6ebf +0x7a6e 0x6f88 +0x7a6f 0x6fb5 +0x7a70 0x6ff5 +0x7a71 0x7005 +0x7a72 0x7007 +0x7a73 0x7028 +0x7a74 0x7085 +0x7a75 0x70ab +0x7a76 0x710f +0x7a77 0x7104 +0x7a78 0x715c +0x7a79 0x7146 +0x7a7a 0x7147 +0x7a7b 0xfa15 +0x7a7c 0x71c1 +0x7a7d 0x71fe +0x7a7e 0x72b1 +0x7b21 0x72be +0x7b22 0x7324 +0x7b23 0xfa16 +0x7b24 0x7377 +0x7b25 0x73bd +0x7b26 0x73c9 +0x7b27 0x73d6 +0x7b28 0x73e3 +0x7b29 0x73d2 +0x7b2a 0x7407 +0x7b2b 0x73f5 +0x7b2c 0x7426 +0x7b2d 0x742a +0x7b2e 0x7429 +0x7b2f 0x742e +0x7b30 0x7462 +0x7b31 0x7489 +0x7b32 0x749f +0x7b33 0x7501 +0x7b34 0x756f +0x7b35 0x7682 +0x7b36 0x769c +0x7b37 0x769e +0x7b38 0x769b +0x7b39 0x76a6 +0x7b3a 0xfa17 +0x7b3b 0x7746 +0x7b3c 0x52af +0x7b3d 0x7821 +0x7b3e 0x784e +0x7b3f 0x7864 +0x7b40 0x787a +0x7b41 0x7930 +0x7b42 0xfa18 +0x7b43 0xfa19 +0x7b44 0xfa1a +0x7b45 0x7994 +0x7b46 0xfa1b +0x7b47 0x799b +0x7b48 0x7ad1 +0x7b49 0x7ae7 +0x7b4a 0xfa1c +0x7b4b 0x7aeb +0x7b4c 0x7b9e +0x7b4d 0xfa1d +0x7b4e 0x7d48 +0x7b4f 0x7d5c +0x7b50 0x7db7 +0x7b51 0x7da0 +0x7b52 0x7dd6 +0x7b53 0x7e52 +0x7b54 0x7f47 +0x7b55 0x7fa1 +0x7b56 0xfa1e +0x7b57 0x8301 +0x7b58 0x8362 +0x7b59 0x837f +0x7b5a 0x83c7 +0x7b5b 0x83f6 +0x7b5c 0x8448 +0x7b5d 0x84b4 +0x7b5e 0x8553 +0x7b5f 0x8559 +0x7b60 0x856b +0x7b61 0xfa1f +0x7b62 0x85b0 +0x7b63 0xfa20 +0x7b64 0xfa21 +0x7b65 0x8807 +0x7b66 0x88f5 +0x7b67 0x8a12 +0x7b68 0x8a37 +0x7b69 0x8a79 +0x7b6a 0x8aa7 +0x7b6b 0x8abe +0x7b6c 0x8adf +0x7b6d 0xfa22 +0x7b6e 0x8af6 +0x7b6f 0x8b53 +0x7b70 0x8b7f +0x7b71 0x8cf0 +0x7b72 0x8cf4 +0x7b73 0x8d12 +0x7b74 0x8d76 +0x7b75 0xfa23 +0x7b76 0x8ecf +0x7b77 0xfa24 +0x7b78 0xfa25 +0x7b79 0x9067 +0x7b7a 0x90de +0x7b7b 0xfa26 +0x7b7c 0x9115 +0x7b7d 0x9127 +0x7b7e 0x91da +0x7c21 0x91d7 +0x7c22 0x91de +0x7c23 0x91ed +0x7c24 0x91ee +0x7c25 0x91e4 +0x7c26 0x91e5 +0x7c27 0x9206 +0x7c28 0x9210 +0x7c29 0x920a +0x7c2a 0x923a +0x7c2b 0x9240 +0x7c2c 0x923c +0x7c2d 0x924e +0x7c2e 0x9259 +0x7c2f 0x9251 +0x7c30 0x9239 +0x7c31 0x9267 +0x7c32 0x92a7 +0x7c33 0x9277 +0x7c34 0x9278 +0x7c35 0x92e7 +0x7c36 0x92d7 +0x7c37 0x92d9 +0x7c38 0x92d0 +0x7c39 0xfa27 +0x7c3a 0x92d5 +0x7c3b 0x92e0 +0x7c3c 0x92d3 +0x7c3d 0x9325 +0x7c3e 0x9321 +0x7c3f 0x92fb +0x7c40 0xfa28 +0x7c41 0x931e +0x7c42 0x92ff +0x7c43 0x931d +0x7c44 0x9302 +0x7c45 0x9370 +0x7c46 0x9357 +0x7c47 0x93a4 +0x7c48 0x93c6 +0x7c49 0x93de +0x7c4a 0x93f8 +0x7c4b 0x9431 +0x7c4c 0x9445 +0x7c4d 0x9448 +0x7c4e 0x9592 +0x7c4f 0xf9dc +0x7c50 0xfa29 +0x7c51 0x969d +0x7c52 0x96af +0x7c53 0x9733 +0x7c54 0x973b +0x7c55 0x9743 +0x7c56 0x974d +0x7c57 0x974f +0x7c58 0x9751 +0x7c59 0x9755 +0x7c5a 0x9857 +0x7c5b 0x9865 +0x7c5c 0xfa2a +0x7c5d 0xfa2b +0x7c5e 0x9927 +0x7c5f 0xfa2c +0x7c60 0x999e +0x7c61 0x9a4e +0x7c62 0x9ad9 +0x7c63 0x9adc +0x7c64 0x9b75 +0x7c65 0x9b72 +0x7c66 0x9b8f +0x7c67 0x9bb1 +0x7c68 0x9bbb +0x7c69 0x9c00 +0x7c6a 0x9d70 +0x7c6b 0x9d6b +0x7c6c 0xfa2d +0x7c6d 0x9e19 +0x7c6e 0x9ed1 +0x7c71 0x2170 +0x7c72 0x2171 +0x7c73 0x2172 +0x7c74 0x2173 +0x7c75 0x2174 +0x7c76 0x2175 +0x7c77 0x2176 +0x7c78 0x2177 +0x7c79 0x2178 +0x7c7a 0x2179 +0x7c7b 0xffe2 +0x7c7c 0xffe4 +0x7c7d 0xff07 +0x7c7e 0xff02 diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0208_MS932.nr b/jdk/make/tools/CharsetMapping/JIS_X_0208_MS932.nr new file mode 100644 index 00000000000..00c73c59b37 --- /dev/null +++ b/jdk/make/tools/CharsetMapping/JIS_X_0208_MS932.nr @@ -0,0 +1,10 @@ +0x224c 0xffe2 +0x225d 0x22a5 +0x2265 0x221a +0x2269 0x222b +0x2d70 0x2252 +0x2d71 0x2261 +0x2d77 0x2220 +0x2d7a 0x2235 +0x2d7b 0x2229 +0x2d7c 0x222a diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0208_Solaris.map b/jdk/make/tools/CharsetMapping/JIS_X_0208_Solaris.map new file mode 100644 index 00000000000..e7dc6a0dde9 --- /dev/null +++ b/jdk/make/tools/CharsetMapping/JIS_X_0208_Solaris.map @@ -0,0 +1,851 @@ +# +# Generated from JIS_X_0208_De/Encoder +# +# added 0x2129 entry, which is the "replacement" for 0208 +0x2129 0xff1f +# +0x2d21 0x2460 +0x2d22 0x2461 +0x2d23 0x2462 +0x2d24 0x2463 +0x2d25 0x2464 +0x2d26 0x2465 +0x2d27 0x2466 +0x2d28 0x2467 +0x2d29 0x2468 +0x2d2a 0x2469 +0x2d2b 0x246a +0x2d2c 0x246b +0x2d2d 0x246c +0x2d2e 0x246d +0x2d2f 0x246e +0x2d30 0x246f +0x2d31 0x2470 +0x2d32 0x2471 +0x2d33 0x2472 +0x2d34 0x2473 +0x2d35 0x2160 +0x2d36 0x2161 +0x2d37 0x2162 +0x2d38 0x2163 +0x2d39 0x2164 +0x2d3a 0x2165 +0x2d3b 0x2166 +0x2d3c 0x2167 +0x2d3d 0x2168 +0x2d3e 0x2169 +0x2d40 0x3349 +0x2d41 0x3314 +0x2d42 0x3322 +0x2d43 0x334d +0x2d44 0x3318 +0x2d45 0x3327 +0x2d46 0x3303 +0x2d47 0x3336 +0x2d48 0x3351 +0x2d49 0x3357 +0x2d4a 0x330d +0x2d4b 0x3326 +0x2d4c 0x3323 +0x2d4d 0x332b +0x2d4e 0x334a +0x2d4f 0x333b +0x2d50 0x339c +0x2d51 0x339d +0x2d52 0x339e +0x2d53 0x338e +0x2d54 0x338f +0x2d55 0x33c4 +0x2d56 0x33a1 +0x2d5f 0x337b +0x2d60 0x301d +0x2d61 0x301f +0x2d62 0x2116 +0x2d63 0x33cd +0x2d64 0x2121 +0x2d65 0x32a4 +0x2d66 0x32a5 +0x2d67 0x32a6 +0x2d68 0x32a7 +0x2d69 0x32a8 +0x2d6a 0x3231 +0x2d6b 0x3232 +0x2d6c 0x3239 +0x2d6d 0x337e +0x2d6e 0x337d +0x2d6f 0x337c +0x2d70 0x2252 +0x2d71 0x2261 +0x2d72 0x222b +0x2d73 0x222e +0x2d74 0x2211 +0x2d75 0x221a +0x2d76 0x22a5 +0x2d77 0x2220 +0x2d78 0x221f +0x2d79 0x22bf +0x2d7a 0x2235 +0x2d7b 0x2229 +0x2d7c 0x222a +0x7921 0x7e8a +0x7922 0x891c +0x7923 0x9348 +0x7924 0x9288 +0x7925 0x84dc +0x7926 0x4fc9 +0x7927 0x70bb +0x7928 0x6631 +0x7929 0x68c8 +0x792a 0x92f9 +0x792b 0x66fb +0x792c 0x5f45 +0x792d 0x4e28 +0x792e 0x4ee1 +0x792f 0x4efc +0x7930 0x4f00 +0x7931 0x4f03 +0x7932 0x4f39 +0x7933 0x4f56 +0x7934 0x4f92 +0x7935 0x4f8a +0x7936 0x4f9a +0x7937 0x4f94 +0x7938 0x4fcd +0x7939 0x5040 +0x793a 0x5022 +0x793b 0x4fff +0x793c 0x501e +0x793d 0x5046 +0x793e 0x5070 +0x793f 0x5042 +0x7940 0x5094 +0x7941 0x50f4 +0x7942 0x50d8 +0x7943 0x514a +0x7944 0x5164 +0x7945 0x519d +0x7946 0x51be +0x7947 0x51ec +0x7948 0x5215 +0x7949 0x529c +0x794a 0x52a6 +0x794b 0x52c0 +0x794c 0x52db +0x794d 0x5300 +0x794e 0x5307 +0x794f 0x5324 +0x7950 0x5372 +0x7951 0x5393 +0x7952 0x53b2 +0x7953 0x53dd +0x7954 0xfa0e +0x7955 0x549c +0x7956 0x548a +0x7957 0x54a9 +0x7958 0x54ff +0x7959 0x5586 +0x795a 0x5759 +0x795b 0x5765 +0x795c 0x57ac +0x795d 0x57c8 +0x795e 0x57c7 +0x795f 0xfa0f +0x7960 0xfa10 +0x7961 0x589e +0x7962 0x58b2 +0x7963 0x590b +0x7964 0x5953 +0x7965 0x595b +0x7966 0x595d +0x7967 0x5963 +0x7968 0x59a4 +0x7969 0x59ba +0x796a 0x5b56 +0x796b 0x5bc0 +0x796c 0x752f +0x796d 0x5bd8 +0x796e 0x5bec +0x796f 0x5c1e +0x7970 0x5ca6 +0x7971 0x5cba +0x7972 0x5cf5 +0x7973 0x5d27 +0x7974 0x5d53 +0x7975 0xfa11 +0x7976 0x5d42 +0x7977 0x5d6d +0x7978 0x5db8 +0x7979 0x5db9 +0x797a 0x5dd0 +0x797b 0x5f21 +0x797c 0x5f34 +0x797d 0x5f67 +0x797e 0x5fb7 +0x7a21 0x5fde +0x7a22 0x605d +0x7a23 0x6085 +0x7a24 0x608a +0x7a25 0x60de +0x7a26 0x60d5 +0x7a27 0x6120 +0x7a28 0x60f2 +0x7a29 0x6111 +0x7a2a 0x6137 +0x7a2b 0x6130 +0x7a2c 0x6198 +0x7a2d 0x6213 +0x7a2e 0x62a6 +0x7a2f 0x63f5 +0x7a30 0x6460 +0x7a31 0x649d +0x7a32 0x64ce +0x7a33 0x654e +0x7a34 0x6600 +0x7a35 0x6615 +0x7a36 0x663b +0x7a37 0x6609 +0x7a38 0x662e +0x7a39 0x661e +0x7a3a 0x6624 +0x7a3b 0x6665 +0x7a3c 0x6657 +0x7a3d 0x6659 +0x7a3e 0xfa12 +0x7a3f 0x6673 +0x7a40 0x6699 +0x7a41 0x66a0 +0x7a42 0x66b2 +0x7a43 0x66bf +0x7a44 0x66fa +0x7a45 0x670e +0x7a46 0xf929 +0x7a47 0x6766 +0x7a48 0x67bb +0x7a49 0x6852 +0x7a4a 0x67c0 +0x7a4b 0x6801 +0x7a4c 0x6844 +0x7a4d 0x68cf +0x7a4e 0xfa13 +0x7a4f 0x6968 +0x7a50 0xfa14 +0x7a51 0x6998 +0x7a52 0x69e2 +0x7a53 0x6a30 +0x7a54 0x6a6b +0x7a55 0x6a46 +0x7a56 0x6a73 +0x7a57 0x6a7e +0x7a58 0x6ae2 +0x7a59 0x6ae4 +0x7a5a 0x6bd6 +0x7a5b 0x6c3f +0x7a5c 0x6c5c +0x7a5d 0x6c86 +0x7a5e 0x6c6f +0x7a5f 0x6cda +0x7a60 0x6d04 +0x7a61 0x6d87 +0x7a62 0x6d6f +0x7a63 0x6d96 +0x7a64 0x6dac +0x7a65 0x6dcf +0x7a66 0x6df8 +0x7a67 0x6df2 +0x7a68 0x6dfc +0x7a69 0x6e39 +0x7a6a 0x6e5c +0x7a6b 0x6e27 +0x7a6c 0x6e3c +0x7a6d 0x6ebf +0x7a6e 0x6f88 +0x7a6f 0x6fb5 +0x7a70 0x6ff5 +0x7a71 0x7005 +0x7a72 0x7007 +0x7a73 0x7028 +0x7a74 0x7085 +0x7a75 0x70ab +0x7a76 0x710f +0x7a77 0x7104 +0x7a78 0x715c +0x7a79 0x7146 +0x7a7a 0x7147 +0x7a7b 0xfa15 +0x7a7c 0x71c1 +0x7a7d 0x71fe +0x7a7e 0x72b1 +0x7b21 0x72be +0x7b22 0x7324 +0x7b23 0xfa16 +0x7b24 0x7377 +0x7b25 0x73bd +0x7b26 0x73c9 +0x7b27 0x73d6 +0x7b28 0x73e3 +0x7b29 0x73d2 +0x7b2a 0x7407 +0x7b2b 0x73f5 +0x7b2c 0x7426 +0x7b2d 0x742a +0x7b2e 0x7429 +0x7b2f 0x742e +0x7b30 0x7462 +0x7b31 0x7489 +0x7b32 0x749f +0x7b33 0x7501 +0x7b34 0x756f +0x7b35 0x7682 +0x7b36 0x769c +0x7b37 0x769e +0x7b38 0x769b +0x7b39 0x76a6 +0x7b3a 0xfa17 +0x7b3b 0x7746 +0x7b3c 0x52af +0x7b3d 0x7821 +0x7b3e 0x784e +0x7b3f 0x7864 +0x7b40 0x787a +0x7b41 0x7930 +0x7b42 0xfa18 +0x7b43 0xfa19 +0x7b44 0xfa1a +0x7b45 0x7994 +0x7b46 0xfa1b +0x7b47 0x799b +0x7b48 0x7ad1 +0x7b49 0x7ae7 +0x7b4a 0xfa1c +0x7b4b 0x7aeb +0x7b4c 0x7b9e +0x7b4d 0xfa1d +0x7b4e 0x7d48 +0x7b4f 0x7d5c +0x7b50 0x7db7 +0x7b51 0x7da0 +0x7b52 0x7dd6 +0x7b53 0x7e52 +0x7b54 0x7f47 +0x7b55 0x7fa1 +0x7b56 0xfa1e +0x7b57 0x8301 +0x7b58 0x8362 +0x7b59 0x837f +0x7b5a 0x83c7 +0x7b5b 0x83f6 +0x7b5c 0x8448 +0x7b5d 0x84b4 +0x7b5e 0x8553 +0x7b5f 0x8559 +0x7b60 0x856b +0x7b61 0xfa1f +0x7b62 0x85b0 +0x7b63 0xfa20 +0x7b64 0xfa21 +0x7b65 0x8807 +0x7b66 0x88f5 +0x7b67 0x8a12 +0x7b68 0x8a37 +0x7b69 0x8a79 +0x7b6a 0x8aa7 +0x7b6b 0x8abe +0x7b6c 0x8adf +0x7b6d 0xfa22 +0x7b6e 0x8af6 +0x7b6f 0x8b53 +0x7b70 0x8b7f +0x7b71 0x8cf0 +0x7b72 0x8cf4 +0x7b73 0x8d12 +0x7b74 0x8d76 +0x7b75 0xfa23 +0x7b76 0x8ecf +0x7b77 0xfa24 +0x7b78 0xfa25 +0x7b79 0x9067 +0x7b7a 0x90de +0x7b7b 0xfa26 +0x7b7c 0x9115 +0x7b7d 0x9127 +0x7b7e 0x91da +0x7c21 0x91d7 +0x7c22 0x91de +0x7c23 0x91ed +0x7c24 0x91ee +0x7c25 0x91e4 +0x7c26 0x91e5 +0x7c27 0x9206 +0x7c28 0x9210 +0x7c29 0x920a +0x7c2a 0x923a +0x7c2b 0x9240 +0x7c2c 0x923c +0x7c2d 0x924e +0x7c2e 0x9259 +0x7c2f 0x9251 +0x7c30 0x9239 +0x7c31 0x9267 +0x7c32 0x92a7 +0x7c33 0x9277 +0x7c34 0x9278 +0x7c35 0x92e7 +0x7c36 0x92d7 +0x7c37 0x92d9 +0x7c38 0x92d0 +0x7c39 0xfa27 +0x7c3a 0x92d5 +0x7c3b 0x92e0 +0x7c3c 0x92d3 +0x7c3d 0x9325 +0x7c3e 0x9321 +0x7c3f 0x92fb +0x7c40 0xfa28 +0x7c41 0x931e +0x7c42 0x92ff +0x7c43 0x931d +0x7c44 0x9302 +0x7c45 0x9370 +0x7c46 0x9357 +0x7c47 0x93a4 +0x7c48 0x93c6 +0x7c49 0x93de +0x7c4a 0x93f8 +0x7c4b 0x9431 +0x7c4c 0x9445 +0x7c4d 0x9448 +0x7c4e 0x9592 +0x7c4f 0xf9dc +0x7c50 0xfa29 +0x7c51 0x969d +0x7c52 0x96af +0x7c53 0x9733 +0x7c54 0x973b +0x7c55 0x9743 +0x7c56 0x974d +0x7c57 0x974f +0x7c58 0x9751 +0x7c59 0x9755 +0x7c5a 0x9857 +0x7c5b 0x9865 +0x7c5c 0xfa2a +0x7c5d 0xfa2b +0x7c5e 0x9927 +0x7c5f 0xfa2c +0x7c60 0x999e +0x7c61 0x9a4e +0x7c62 0x9ad9 +0x7c63 0x9adc +0x7c64 0x9b75 +0x7c65 0x9b72 +0x7c66 0x9b8f +0x7c67 0x9bb1 +0x7c68 0x9bbb +0x7c69 0x9c00 +0x7c6a 0x9d70 +0x7c6b 0x9d6b +0x7c6c 0xfa2d +0x7c6d 0x9e19 +0x7c6e 0x9ed1 +0x7c71 0x2170 +0x7c72 0x2171 +0x7c73 0x2172 +0x7c74 0x2173 +0x7c75 0x2174 +0x7c76 0x2175 +0x7c77 0x2176 +0x7c78 0x2177 +0x7c79 0x2178 +0x7c7a 0x2179 +0x7c7b 0x3052 +0x7c7c 0x00a6 +0x7c7d 0xff07 +0x7c7e 0xff02 +0x9321 0x2170 +0x9322 0x2171 +0x9323 0x2172 +0x9324 0x2173 +0x9325 0x2174 +0x9326 0x2175 +0x9327 0x2176 +0x9328 0x2177 +0x9329 0x2178 +0x932a 0x2179 +0x932b 0x2160 +0x932c 0x2161 +0x932d 0x2162 +0x932e 0x2163 +0x932f 0x2164 +0x9330 0x2165 +0x9331 0x2166 +0x9332 0x2167 +0x9333 0x2168 +0x9334 0x2169 +0x9335 0x3052 +0x9336 0x00a6 +0x9337 0xff07 +0x9338 0xff02 +0x9339 0x3231 +0x933a 0x2116 +0x933b 0x2121 +0x933c 0x306e +0x933d 0x7e8a +0x933e 0x891c +0x933f 0x9348 +0x9340 0x9288 +0x9341 0x84dc +0x9342 0x4fc9 +0x9343 0x70bb +0x9344 0x6631 +0x9345 0x68c8 +0x9346 0x92f9 +0x9347 0x66fb +0x9348 0x5f45 +0x9349 0x4e28 +0x934a 0x4ee1 +0x934b 0x4efc +0x934c 0x4f00 +0x934d 0x4f03 +0x934e 0x4f39 +0x934f 0x4f56 +0x9350 0x4f92 +0x9351 0x4f8a +0x9352 0x4f9a +0x9353 0x4f94 +0x9354 0x4fcd +0x9355 0x5040 +0x9356 0x5022 +0x9357 0x4fff +0x9358 0x501e +0x9359 0x5046 +0x935a 0x5070 +0x935b 0x5042 +0x935c 0x5094 +0x935d 0x50f4 +0x935e 0x50d8 +0x935f 0x514a +0x9360 0x5164 +0x9361 0x519d +0x9362 0x51be +0x9363 0x51ec +0x9364 0x5215 +0x9365 0x529c +0x9366 0x52a6 +0x9367 0x52c0 +0x9368 0x52db +0x9369 0x5300 +0x936a 0x5307 +0x936b 0x5324 +0x936c 0x5372 +0x936d 0x5393 +0x936e 0x53b2 +0x936f 0x53dd +0x9370 0xfa0e +0x9371 0x549c +0x9372 0x548a +0x9373 0x54a9 +0x9374 0x54ff +0x9375 0x5586 +0x9376 0x5759 +0x9377 0x5765 +0x9378 0x57ac +0x9379 0x57c8 +0x937a 0x57c7 +0x937b 0xfa0f +0x937c 0xfa10 +0x937d 0x589e +0x937e 0x58b2 +0x9421 0x590b +0x9422 0x5953 +0x9423 0x595b +0x9424 0x595d +0x9425 0x5963 +0x9426 0x59a4 +0x9427 0x59ba +0x9428 0x5b56 +0x9429 0x5bc0 +0x942a 0x752f +0x942b 0x5bd8 +0x942c 0x5bec +0x942d 0x5c1e +0x942e 0x5ca6 +0x942f 0x5cba +0x9430 0x5cf5 +0x9431 0x5d27 +0x9432 0x5d53 +0x9433 0xfa11 +0x9434 0x5d42 +0x9435 0x5d6d +0x9436 0x5db8 +0x9437 0x5db9 +0x9438 0x5dd0 +0x9439 0x5f21 +0x943a 0x5f34 +0x943b 0x5f67 +0x943c 0x5fb7 +0x943d 0x5fde +0x943e 0x605d +0x943f 0x6085 +0x9440 0x608a +0x9441 0x60de +0x9442 0x60d5 +0x9443 0x6120 +0x9444 0x60f2 +0x9445 0x6111 +0x9446 0x6137 +0x9447 0x6130 +0x9448 0x6198 +0x9449 0x6213 +0x944a 0x62a6 +0x944b 0x63f5 +0x944c 0x6460 +0x944d 0x649d +0x944e 0x64ce +0x944f 0x654e +0x9450 0x6600 +0x9451 0x6615 +0x9452 0x663b +0x9453 0x6609 +0x9454 0x662e +0x9455 0x661e +0x9456 0x6624 +0x9457 0x6665 +0x9458 0x6657 +0x9459 0x6659 +0x945a 0xfa12 +0x945b 0x6673 +0x945c 0x6699 +0x945d 0x66a0 +0x945e 0x66b2 +0x945f 0x66bf +0x9460 0x66fa +0x9461 0x670e +0x9462 0xf929 +0x9463 0x6766 +0x9464 0x67bb +0x9465 0x6852 +0x9466 0x67c0 +0x9467 0x6801 +0x9468 0x6844 +0x9469 0x68cf +0x946a 0xfa13 +0x946b 0x6968 +0x946c 0xfa14 +0x946d 0x6998 +0x946e 0x69e2 +0x946f 0x6a30 +0x9470 0x6a6b +0x9471 0x6a46 +0x9472 0x6a73 +0x9473 0x6a7e +0x9474 0x6ae2 +0x9475 0x6ae4 +0x9476 0x6bd6 +0x9477 0x6c3f +0x9478 0x6c5c +0x9479 0x6c86 +0x947a 0x6c6f +0x947b 0x6cda +0x947c 0x6d04 +0x947d 0x6d87 +0x947e 0x6d6f +0x9521 0x6d96 +0x9522 0x6dac +0x9523 0x6dcf +0x9524 0x6df8 +0x9525 0x6df2 +0x9526 0x6dfc +0x9527 0x6e39 +0x9528 0x6e5c +0x9529 0x6e27 +0x952a 0x6e3c +0x952b 0x6ebf +0x952c 0x6f88 +0x952d 0x6fb5 +0x952e 0x6ff5 +0x952f 0x7005 +0x9530 0x7007 +0x9531 0x7028 +0x9532 0x7085 +0x9533 0x70ab +0x9534 0x710f +0x9535 0x7104 +0x9536 0x715c +0x9537 0x7146 +0x9538 0x7147 +0x9539 0xfa15 +0x953a 0x71c1 +0x953b 0x71fe +0x953c 0x72b1 +0x953d 0x72be +0x953e 0x7324 +0x953f 0xfa16 +0x9540 0x7377 +0x9541 0x73bd +0x9542 0x73c9 +0x9543 0x73d6 +0x9544 0x73e3 +0x9545 0x73d2 +0x9546 0x7407 +0x9547 0x73f5 +0x9548 0x7426 +0x9549 0x742a +0x954a 0x7429 +0x954b 0x742e +0x954c 0x7462 +0x954d 0x7489 +0x954e 0x749f +0x954f 0x7501 +0x9550 0x756f +0x9551 0x7682 +0x9552 0x769c +0x9553 0x769e +0x9554 0x769b +0x9555 0x76a6 +0x9556 0xfa17 +0x9557 0x7746 +0x9558 0x52af +0x9559 0x7821 +0x955a 0x784e +0x955b 0x7864 +0x955c 0x787a +0x955d 0x7930 +0x955e 0xfa18 +0x955f 0xfa19 +0x9560 0xfa1a +0x9561 0x7994 +0x9562 0xfa1b +0x9563 0x799b +0x9564 0x7ad1 +0x9565 0x7ae7 +0x9566 0xfa1c +0x9567 0x7aeb +0x9568 0x7b9e +0x9569 0xfa1d +0x956a 0x7d48 +0x956b 0x7d5c +0x956c 0x7db7 +0x956d 0x7da0 +0x956e 0x7dd6 +0x956f 0x7e52 +0x9570 0x7f47 +0x9571 0x7fa1 +0x9572 0xfa1e +0x9573 0x8301 +0x9574 0x8362 +0x9575 0x837f +0x9576 0x83c7 +0x9577 0x83f6 +0x9578 0x8448 +0x9579 0x84b4 +0x957a 0x8553 +0x957b 0x8559 +0x957c 0x856b +0x957d 0xfa1f +0x957e 0x85b0 +0x9621 0xfa20 +0x9622 0xfa21 +0x9623 0x8807 +0x9624 0x88f5 +0x9625 0x8a12 +0x9626 0x8a37 +0x9627 0x8a79 +0x9628 0x8aa7 +0x9629 0x8abe +0x962a 0x8adf +0x962b 0xfa22 +0x962c 0x8af6 +0x962d 0x8b53 +0x962e 0x8b7f +0x962f 0x8cf0 +0x9630 0x8cf4 +0x9631 0x8d12 +0x9632 0x8d76 +0x9633 0xfa23 +0x9634 0x8ecf +0x9635 0xfa24 +0x9636 0xfa25 +0x9637 0x9067 +0x9638 0x90de +0x9639 0xfa26 +0x963a 0x9115 +0x963b 0x9127 +0x963c 0x91da +0x963d 0x91d7 +0x963e 0x91de +0x963f 0x91ed +0x9640 0x91ee +0x9641 0x91e4 +0x9642 0x91e5 +0x9643 0x9206 +0x9644 0x9210 +0x9645 0x920a +0x9646 0x923a +0x9647 0x9240 +0x9648 0x923c +0x9649 0x924e +0x964a 0x9259 +0x964b 0x9251 +0x964c 0x9239 +0x964d 0x9267 +0x964e 0x92a7 +0x964f 0x9277 +0x9650 0x9278 +0x9651 0x92e7 +0x9652 0x92d7 +0x9653 0x92d9 +0x9654 0x92d0 +0x9655 0xfa27 +0x9656 0x92d5 +0x9657 0x92e0 +0x9658 0x92d3 +0x9659 0x9325 +0x965a 0x9321 +0x965b 0x92fb +0x965c 0xfa28 +0x965d 0x931e +0x965e 0x92ff +0x965f 0x931d +0x9660 0x9302 +0x9661 0x9370 +0x9662 0x9357 +0x9663 0x93a4 +0x9664 0x93c6 +0x9665 0x93de +0x9666 0x93f8 +0x9667 0x9431 +0x9668 0x9445 +0x9669 0x9448 +0x966a 0x9592 +0x966b 0xf9dc +0x966c 0xfa29 +0x966d 0x969d +0x966e 0x96af +0x966f 0x9733 +0x9670 0x973b +0x9671 0x9743 +0x9672 0x974d +0x9673 0x974f +0x9674 0x9751 +0x9675 0x9755 +0x9676 0x9857 +0x9677 0x9865 +0x9678 0xfa2a +0x9679 0xfa2b +0x967a 0x9927 +0x967b 0xfa2c +0x967c 0x999e +0x967d 0x9a4e +0x967e 0x9ad9 +0x9721 0x9adc +0x9722 0x9b75 +0x9723 0x9b72 +0x9724 0x9b8f +0x9725 0x9bb1 +0x9726 0x9bbb +0x9727 0x9c00 +0x9728 0x9d70 +0x9729 0x9d6b +0x972a 0xfa2d +0x972b 0x9e19 +0x972c 0x9ed1 diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0208_Solaris.nr b/jdk/make/tools/CharsetMapping/JIS_X_0208_Solaris.nr new file mode 100644 index 00000000000..5a34b6421fb --- /dev/null +++ b/jdk/make/tools/CharsetMapping/JIS_X_0208_Solaris.nr @@ -0,0 +1,387 @@ +0x7921 0x7e8a +0x7922 0x891c +0x7923 0x9348 +0x7924 0x9288 +0x7925 0x84dc +0x7926 0x4fc9 +0x7927 0x70bb +0x7928 0x6631 +0x7929 0x68c8 +0x792a 0x92f9 +0x792b 0x66fb +0x792c 0x5f45 +0x792d 0x4e28 +0x792e 0x4ee1 +0x792f 0x4efc +0x7930 0x4f00 +0x7931 0x4f03 +0x7932 0x4f39 +0x7933 0x4f56 +0x7934 0x4f92 +0x7935 0x4f8a +0x7936 0x4f9a +0x7937 0x4f94 +0x7938 0x4fcd +0x7939 0x5040 +0x793a 0x5022 +0x793b 0x4fff +0x793c 0x501e +0x793d 0x5046 +0x793e 0x5070 +0x793f 0x5042 +0x7940 0x5094 +0x7941 0x50f4 +0x7942 0x50d8 +0x7943 0x514a +0x7944 0x5164 +0x7945 0x519d +0x7946 0x51be +0x7947 0x51ec +0x7948 0x5215 +0x7949 0x529c +0x794a 0x52a6 +0x794b 0x52c0 +0x794c 0x52db +0x794d 0x5300 +0x794e 0x5307 +0x794f 0x5324 +0x7950 0x5372 +0x7951 0x5393 +0x7952 0x53b2 +0x7953 0x53dd +0x7954 0xfa0e +0x7955 0x549c +0x7956 0x548a +0x7957 0x54a9 +0x7958 0x54ff +0x7959 0x5586 +0x795a 0x5759 +0x795b 0x5765 +0x795c 0x57ac +0x795d 0x57c8 +0x795e 0x57c7 +0x795f 0xfa0f +0x7960 0xfa10 +0x7961 0x589e +0x7962 0x58b2 +0x7963 0x590b +0x7964 0x5953 +0x7965 0x595b +0x7966 0x595d +0x7967 0x5963 +0x7968 0x59a4 +0x7969 0x59ba +0x796a 0x5b56 +0x796b 0x5bc0 +0x796c 0x752f +0x796d 0x5bd8 +0x796e 0x5bec +0x796f 0x5c1e +0x7970 0x5ca6 +0x7971 0x5cba +0x7972 0x5cf5 +0x7973 0x5d27 +0x7974 0x5d53 +0x7975 0xfa11 +0x7976 0x5d42 +0x7977 0x5d6d +0x7978 0x5db8 +0x7979 0x5db9 +0x797a 0x5dd0 +0x797b 0x5f21 +0x797c 0x5f34 +0x797d 0x5f67 +0x797e 0x5fb7 +0x7a21 0x5fde +0x7a22 0x605d +0x7a23 0x6085 +0x7a24 0x608a +0x7a25 0x60de +0x7a26 0x60d5 +0x7a27 0x6120 +0x7a28 0x60f2 +0x7a29 0x6111 +0x7a2a 0x6137 +0x7a2b 0x6130 +0x7a2c 0x6198 +0x7a2d 0x6213 +0x7a2e 0x62a6 +0x7a2f 0x63f5 +0x7a30 0x6460 +0x7a31 0x649d +0x7a32 0x64ce +0x7a33 0x654e +0x7a34 0x6600 +0x7a35 0x6615 +0x7a36 0x663b +0x7a37 0x6609 +0x7a38 0x662e +0x7a39 0x661e +0x7a3a 0x6624 +0x7a3b 0x6665 +0x7a3c 0x6657 +0x7a3d 0x6659 +0x7a3e 0xfa12 +0x7a3f 0x6673 +0x7a40 0x6699 +0x7a41 0x66a0 +0x7a42 0x66b2 +0x7a43 0x66bf +0x7a44 0x66fa +0x7a45 0x670e +0x7a46 0xf929 +0x7a47 0x6766 +0x7a48 0x67bb +0x7a49 0x6852 +0x7a4a 0x67c0 +0x7a4b 0x6801 +0x7a4c 0x6844 +0x7a4d 0x68cf +0x7a4e 0xfa13 +0x7a4f 0x6968 +0x7a50 0xfa14 +0x7a51 0x6998 +0x7a52 0x69e2 +0x7a53 0x6a30 +0x7a54 0x6a6b +0x7a55 0x6a46 +0x7a56 0x6a73 +0x7a57 0x6a7e +0x7a58 0x6ae2 +0x7a59 0x6ae4 +0x7a5a 0x6bd6 +0x7a5b 0x6c3f +0x7a5c 0x6c5c +0x7a5d 0x6c86 +0x7a5e 0x6c6f +0x7a5f 0x6cda +0x7a60 0x6d04 +0x7a61 0x6d87 +0x7a62 0x6d6f +0x7a63 0x6d96 +0x7a64 0x6dac +0x7a65 0x6dcf +0x7a66 0x6df8 +0x7a67 0x6df2 +0x7a68 0x6dfc +0x7a69 0x6e39 +0x7a6a 0x6e5c +0x7a6b 0x6e27 +0x7a6c 0x6e3c +0x7a6d 0x6ebf +0x7a6e 0x6f88 +0x7a6f 0x6fb5 +0x7a70 0x6ff5 +0x7a71 0x7005 +0x7a72 0x7007 +0x7a73 0x7028 +0x7a74 0x7085 +0x7a75 0x70ab +0x7a76 0x710f +0x7a77 0x7104 +0x7a78 0x715c +0x7a79 0x7146 +0x7a7a 0x7147 +0x7a7b 0xfa15 +0x7a7c 0x71c1 +0x7a7d 0x71fe +0x7a7e 0x72b1 +0x7b21 0x72be +0x7b22 0x7324 +0x7b23 0xfa16 +0x7b24 0x7377 +0x7b25 0x73bd +0x7b26 0x73c9 +0x7b27 0x73d6 +0x7b28 0x73e3 +0x7b29 0x73d2 +0x7b2a 0x7407 +0x7b2b 0x73f5 +0x7b2c 0x7426 +0x7b2d 0x742a +0x7b2e 0x7429 +0x7b2f 0x742e +0x7b30 0x7462 +0x7b31 0x7489 +0x7b32 0x749f +0x7b33 0x7501 +0x7b34 0x756f +0x7b35 0x7682 +0x7b36 0x769c +0x7b37 0x769e +0x7b38 0x769b +0x7b39 0x76a6 +0x7b3a 0xfa17 +0x7b3b 0x7746 +0x7b3c 0x52af +0x7b3d 0x7821 +0x7b3e 0x784e +0x7b3f 0x7864 +0x7b40 0x787a +0x7b41 0x7930 +0x7b42 0xfa18 +0x7b43 0xfa19 +0x7b44 0xfa1a +0x7b45 0x7994 +0x7b46 0xfa1b +0x7b47 0x799b +0x7b48 0x7ad1 +0x7b49 0x7ae7 +0x7b4a 0xfa1c +0x7b4b 0x7aeb +0x7b4c 0x7b9e +0x7b4d 0xfa1d +0x7b4e 0x7d48 +0x7b4f 0x7d5c +0x7b50 0x7db7 +0x7b51 0x7da0 +0x7b52 0x7dd6 +0x7b53 0x7e52 +0x7b54 0x7f47 +0x7b55 0x7fa1 +0x7b56 0xfa1e +0x7b57 0x8301 +0x7b58 0x8362 +0x7b59 0x837f +0x7b5a 0x83c7 +0x7b5b 0x83f6 +0x7b5c 0x8448 +0x7b5d 0x84b4 +0x7b5e 0x8553 +0x7b5f 0x8559 +0x7b60 0x856b +0x7b61 0xfa1f +0x7b62 0x85b0 +0x7b63 0xfa20 +0x7b64 0xfa21 +0x7b65 0x8807 +0x7b66 0x88f5 +0x7b67 0x8a12 +0x7b68 0x8a37 +0x7b69 0x8a79 +0x7b6a 0x8aa7 +0x7b6b 0x8abe +0x7b6c 0x8adf +0x7b6d 0xfa22 +0x7b6e 0x8af6 +0x7b6f 0x8b53 +0x7b70 0x8b7f +0x7b71 0x8cf0 +0x7b72 0x8cf4 +0x7b73 0x8d12 +0x7b74 0x8d76 +0x7b75 0xfa23 +0x7b76 0x8ecf +0x7b77 0xfa24 +0x7b78 0xfa25 +0x7b79 0x9067 +0x7b7a 0x90de +0x7b7b 0xfa26 +0x7b7c 0x9115 +0x7b7d 0x9127 +0x7b7e 0x91da +0x7c21 0x91d7 +0x7c22 0x91de +0x7c23 0x91ed +0x7c24 0x91ee +0x7c25 0x91e4 +0x7c26 0x91e5 +0x7c27 0x9206 +0x7c28 0x9210 +0x7c29 0x920a +0x7c2a 0x923a +0x7c2b 0x9240 +0x7c2c 0x923c +0x7c2d 0x924e +0x7c2e 0x9259 +0x7c2f 0x9251 +0x7c30 0x9239 +0x7c31 0x9267 +0x7c32 0x92a7 +0x7c33 0x9277 +0x7c34 0x9278 +0x7c35 0x92e7 +0x7c36 0x92d7 +0x7c37 0x92d9 +0x7c38 0x92d0 +0x7c39 0xfa27 +0x7c3a 0x92d5 +0x7c3b 0x92e0 +0x7c3c 0x92d3 +0x7c3d 0x9325 +0x7c3e 0x9321 +0x7c3f 0x92fb +0x7c40 0xfa28 +0x7c41 0x931e +0x7c42 0x92ff +0x7c43 0x931d +0x7c44 0x9302 +0x7c45 0x9370 +0x7c46 0x9357 +0x7c47 0x93a4 +0x7c48 0x93c6 +0x7c49 0x93de +0x7c4a 0x93f8 +0x7c4b 0x9431 +0x7c4c 0x9445 +0x7c4d 0x9448 +0x7c4e 0x9592 +0x7c4f 0xf9dc +0x7c50 0xfa29 +0x7c51 0x969d +0x7c52 0x96af +0x7c53 0x9733 +0x7c54 0x973b +0x7c55 0x9743 +0x7c56 0x974d +0x7c57 0x974f +0x7c58 0x9751 +0x7c59 0x9755 +0x7c5a 0x9857 +0x7c5b 0x9865 +0x7c5c 0xfa2a +0x7c5d 0xfa2b +0x7c5e 0x9927 +0x7c5f 0xfa2c +0x7c60 0x999e +0x7c61 0x9a4e +0x7c62 0x9ad9 +0x7c63 0x9adc +0x7c64 0x9b75 +0x7c65 0x9b72 +0x7c66 0x9b8f +0x7c67 0x9bb1 +0x7c68 0x9bbb +0x7c69 0x9c00 +0x7c6a 0x9d70 +0x7c6b 0x9d6b +0x7c6c 0xfa2d +0x7c6d 0x9e19 +0x7c6e 0x9ed1 +0x7c71 0x2170 +0x7c72 0x2171 +0x7c73 0x2172 +0x7c74 0x2173 +0x7c75 0x2174 +0x7c76 0x2175 +0x7c77 0x2176 +0x7c78 0x2177 +0x7c79 0x2178 +0x7c7a 0x2179 +0x7c7b 0x3052 +0x7c7c 0x00a6 +0x7c7d 0xff07 +0x7c7e 0xff02 +0x932b 0x2160 +0x932c 0x2161 +0x932d 0x2162 +0x932e 0x2163 +0x932f 0x2164 +0x9330 0x2165 +0x9331 0x2166 +0x9332 0x2167 +0x9333 0x2168 +0x9334 0x2169 +0x9339 0x3231 +0x933a 0x2116 +0x933b 0x2121 diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0212.map b/jdk/make/tools/CharsetMapping/JIS_X_0212.map new file mode 100644 index 00000000000..316f4be21b3 --- /dev/null +++ b/jdk/make/tools/CharsetMapping/JIS_X_0212.map @@ -0,0 +1,6067 @@ +0x222f 0x02d8 +0x2230 0x02c7 +0x2231 0x00b8 +0x2232 0x02d9 +0x2233 0x02dd +0x2234 0x00af +0x2235 0x02db +0x2236 0x02da +0x2237 0xff5e +0x2238 0x0384 +0x2239 0x0385 +0x2242 0x00a1 +0x2243 0x00a6 +0x2244 0x00bf +0x226b 0x00ba +0x226c 0x00aa +0x226d 0x00a9 +0x226e 0x00ae +0x226f 0x2122 +0x2270 0x00a4 +0x2271 0x2116 +0x2661 0x0386 +0x2662 0x0388 +0x2663 0x0389 +0x2664 0x038a +0x2665 0x03aa +0x2667 0x038c +0x2669 0x038e +0x266a 0x03ab +0x266c 0x038f +0x2671 0x03ac +0x2672 0x03ad +0x2673 0x03ae +0x2674 0x03af +0x2675 0x03ca +0x2676 0x0390 +0x2677 0x03cc +0x2678 0x03c2 +0x2679 0x03cd +0x267a 0x03cb +0x267b 0x03b0 +0x267c 0x03ce +0x2742 0x0402 +0x2743 0x0403 +0x2744 0x0404 +0x2745 0x0405 +0x2746 0x0406 +0x2747 0x0407 +0x2748 0x0408 +0x2749 0x0409 +0x274a 0x040a +0x274b 0x040b +0x274c 0x040c +0x274d 0x040e +0x274e 0x040f +0x2772 0x0452 +0x2773 0x0453 +0x2774 0x0454 +0x2775 0x0455 +0x2776 0x0456 +0x2777 0x0457 +0x2778 0x0458 +0x2779 0x0459 +0x277a 0x045a +0x277b 0x045b +0x277c 0x045c +0x277d 0x045e +0x277e 0x045f +0x2921 0x00c6 +0x2922 0x0110 +0x2924 0x0126 +0x2926 0x0132 +0x2928 0x0141 +0x2929 0x013f +0x292b 0x014a +0x292c 0x00d8 +0x292d 0x0152 +0x292f 0x0166 +0x2930 0x00de +0x2941 0x00e6 +0x2942 0x0111 +0x2943 0x00f0 +0x2944 0x0127 +0x2945 0x0131 +0x2946 0x0133 +0x2947 0x0138 +0x2948 0x0142 +0x2949 0x0140 +0x294a 0x0149 +0x294b 0x014b +0x294c 0x00f8 +0x294d 0x0153 +0x294e 0x00df +0x294f 0x0167 +0x2950 0x00fe +0x2a21 0x00c1 +0x2a22 0x00c0 +0x2a23 0x00c4 +0x2a24 0x00c2 +0x2a25 0x0102 +0x2a26 0x01cd +0x2a27 0x0100 +0x2a28 0x0104 +0x2a29 0x00c5 +0x2a2a 0x00c3 +0x2a2b 0x0106 +0x2a2c 0x0108 +0x2a2d 0x010c +0x2a2e 0x00c7 +0x2a2f 0x010a +0x2a30 0x010e +0x2a31 0x00c9 +0x2a32 0x00c8 +0x2a33 0x00cb +0x2a34 0x00ca +0x2a35 0x011a +0x2a36 0x0116 +0x2a37 0x0112 +0x2a38 0x0118 +0x2a3a 0x011c +0x2a3b 0x011e +0x2a3c 0x0122 +0x2a3d 0x0120 +0x2a3e 0x0124 +0x2a3f 0x00cd +0x2a40 0x00cc +0x2a41 0x00cf +0x2a42 0x00ce +0x2a43 0x01cf +0x2a44 0x0130 +0x2a45 0x012a +0x2a46 0x012e +0x2a47 0x0128 +0x2a48 0x0134 +0x2a49 0x0136 +0x2a4a 0x0139 +0x2a4b 0x013d +0x2a4c 0x013b +0x2a4d 0x0143 +0x2a4e 0x0147 +0x2a4f 0x0145 +0x2a50 0x00d1 +0x2a51 0x00d3 +0x2a52 0x00d2 +0x2a53 0x00d6 +0x2a54 0x00d4 +0x2a55 0x01d1 +0x2a56 0x0150 +0x2a57 0x014c +0x2a58 0x00d5 +0x2a59 0x0154 +0x2a5a 0x0158 +0x2a5b 0x0156 +0x2a5c 0x015a +0x2a5d 0x015c +0x2a5e 0x0160 +0x2a5f 0x015e +0x2a60 0x0164 +0x2a61 0x0162 +0x2a62 0x00da +0x2a63 0x00d9 +0x2a64 0x00dc +0x2a65 0x00db +0x2a66 0x016c +0x2a67 0x01d3 +0x2a68 0x0170 +0x2a69 0x016a +0x2a6a 0x0172 +0x2a6b 0x016e +0x2a6c 0x0168 +0x2a6d 0x01d7 +0x2a6e 0x01db +0x2a6f 0x01d9 +0x2a70 0x01d5 +0x2a71 0x0174 +0x2a72 0x00dd +0x2a73 0x0178 +0x2a74 0x0176 +0x2a75 0x0179 +0x2a76 0x017d +0x2a77 0x017b +0x2b21 0x00e1 +0x2b22 0x00e0 +0x2b23 0x00e4 +0x2b24 0x00e2 +0x2b25 0x0103 +0x2b26 0x01ce +0x2b27 0x0101 +0x2b28 0x0105 +0x2b29 0x00e5 +0x2b2a 0x00e3 +0x2b2b 0x0107 +0x2b2c 0x0109 +0x2b2d 0x010d +0x2b2e 0x00e7 +0x2b2f 0x010b +0x2b30 0x010f +0x2b31 0x00e9 +0x2b32 0x00e8 +0x2b33 0x00eb +0x2b34 0x00ea +0x2b35 0x011b +0x2b36 0x0117 +0x2b37 0x0113 +0x2b38 0x0119 +0x2b39 0x01f5 +0x2b3a 0x011d +0x2b3b 0x011f +0x2b3d 0x0121 +0x2b3e 0x0125 +0x2b3f 0x00ed +0x2b40 0x00ec +0x2b41 0x00ef +0x2b42 0x00ee +0x2b43 0x01d0 +0x2b45 0x012b +0x2b46 0x012f +0x2b47 0x0129 +0x2b48 0x0135 +0x2b49 0x0137 +0x2b4a 0x013a +0x2b4b 0x013e +0x2b4c 0x013c +0x2b4d 0x0144 +0x2b4e 0x0148 +0x2b4f 0x0146 +0x2b50 0x00f1 +0x2b51 0x00f3 +0x2b52 0x00f2 +0x2b53 0x00f6 +0x2b54 0x00f4 +0x2b55 0x01d2 +0x2b56 0x0151 +0x2b57 0x014d +0x2b58 0x00f5 +0x2b59 0x0155 +0x2b5a 0x0159 +0x2b5b 0x0157 +0x2b5c 0x015b +0x2b5d 0x015d +0x2b5e 0x0161 +0x2b5f 0x015f +0x2b60 0x0165 +0x2b61 0x0163 +0x2b62 0x00fa +0x2b63 0x00f9 +0x2b64 0x00fc +0x2b65 0x00fb +0x2b66 0x016d +0x2b67 0x01d4 +0x2b68 0x0171 +0x2b69 0x016b +0x2b6a 0x0173 +0x2b6b 0x016f +0x2b6c 0x0169 +0x2b6d 0x01d8 +0x2b6e 0x01dc +0x2b6f 0x01da +0x2b70 0x01d6 +0x2b71 0x0175 +0x2b72 0x00fd +0x2b73 0x00ff +0x2b74 0x0177 +0x2b75 0x017a +0x2b76 0x017e +0x2b77 0x017c +0x3021 0x4e02 +0x3022 0x4e04 +0x3023 0x4e05 +0x3024 0x4e0c +0x3025 0x4e12 +0x3026 0x4e1f +0x3027 0x4e23 +0x3028 0x4e24 +0x3029 0x4e28 +0x302a 0x4e2b +0x302b 0x4e2e +0x302c 0x4e2f +0x302d 0x4e30 +0x302e 0x4e35 +0x302f 0x4e40 +0x3030 0x4e41 +0x3031 0x4e44 +0x3032 0x4e47 +0x3033 0x4e51 +0x3034 0x4e5a +0x3035 0x4e5c +0x3036 0x4e63 +0x3037 0x4e68 +0x3038 0x4e69 +0x3039 0x4e74 +0x303a 0x4e75 +0x303b 0x4e79 +0x303c 0x4e7f +0x303d 0x4e8d +0x303e 0x4e96 +0x303f 0x4e97 +0x3040 0x4e9d +0x3041 0x4eaf +0x3042 0x4eb9 +0x3043 0x4ec3 +0x3044 0x4ed0 +0x3045 0x4eda +0x3046 0x4edb +0x3047 0x4ee0 +0x3048 0x4ee1 +0x3049 0x4ee2 +0x304a 0x4ee8 +0x304b 0x4eef +0x304c 0x4ef1 +0x304d 0x4ef3 +0x304e 0x4ef5 +0x304f 0x4efd +0x3050 0x4efe +0x3051 0x4eff +0x3052 0x4f00 +0x3053 0x4f02 +0x3054 0x4f03 +0x3055 0x4f08 +0x3056 0x4f0b +0x3057 0x4f0c +0x3058 0x4f12 +0x3059 0x4f15 +0x305a 0x4f16 +0x305b 0x4f17 +0x305c 0x4f19 +0x305d 0x4f2e +0x305e 0x4f31 +0x305f 0x4f60 +0x3060 0x4f33 +0x3061 0x4f35 +0x3062 0x4f37 +0x3063 0x4f39 +0x3064 0x4f3b +0x3065 0x4f3e +0x3066 0x4f40 +0x3067 0x4f42 +0x3068 0x4f48 +0x3069 0x4f49 +0x306a 0x4f4b +0x306b 0x4f4c +0x306c 0x4f52 +0x306d 0x4f54 +0x306e 0x4f56 +0x306f 0x4f58 +0x3070 0x4f5f +0x3071 0x4f63 +0x3072 0x4f6a +0x3073 0x4f6c +0x3074 0x4f6e +0x3075 0x4f71 +0x3076 0x4f77 +0x3077 0x4f78 +0x3078 0x4f79 +0x3079 0x4f7a +0x307a 0x4f7d +0x307b 0x4f7e +0x307c 0x4f81 +0x307d 0x4f82 +0x307e 0x4f84 +0x3121 0x4f85 +0x3122 0x4f89 +0x3123 0x4f8a +0x3124 0x4f8c +0x3125 0x4f8e +0x3126 0x4f90 +0x3127 0x4f92 +0x3128 0x4f93 +0x3129 0x4f94 +0x312a 0x4f97 +0x312b 0x4f99 +0x312c 0x4f9a +0x312d 0x4f9e +0x312e 0x4f9f +0x312f 0x4fb2 +0x3130 0x4fb7 +0x3131 0x4fb9 +0x3132 0x4fbb +0x3133 0x4fbc +0x3134 0x4fbd +0x3135 0x4fbe +0x3136 0x4fc0 +0x3137 0x4fc1 +0x3138 0x4fc5 +0x3139 0x4fc6 +0x313a 0x4fc8 +0x313b 0x4fc9 +0x313c 0x4fcb +0x313d 0x4fcc +0x313e 0x4fcd +0x313f 0x4fcf +0x3140 0x4fd2 +0x3141 0x4fdc +0x3142 0x4fe0 +0x3143 0x4fe2 +0x3144 0x4ff0 +0x3145 0x4ff2 +0x3146 0x4ffc +0x3147 0x4ffd +0x3148 0x4fff +0x3149 0x5000 +0x314a 0x5001 +0x314b 0x5004 +0x314c 0x5007 +0x314d 0x500a +0x314e 0x500c +0x314f 0x500e +0x3150 0x5010 +0x3151 0x5013 +0x3152 0x5017 +0x3153 0x5018 +0x3154 0x501b +0x3155 0x501c +0x3156 0x501d +0x3157 0x501e +0x3158 0x5022 +0x3159 0x5027 +0x315a 0x502e +0x315b 0x5030 +0x315c 0x5032 +0x315d 0x5033 +0x315e 0x5035 +0x315f 0x5040 +0x3160 0x5041 +0x3161 0x5042 +0x3162 0x5045 +0x3163 0x5046 +0x3164 0x504a +0x3165 0x504c +0x3166 0x504e +0x3167 0x5051 +0x3168 0x5052 +0x3169 0x5053 +0x316a 0x5057 +0x316b 0x5059 +0x316c 0x505f +0x316d 0x5060 +0x316e 0x5062 +0x316f 0x5063 +0x3170 0x5066 +0x3171 0x5067 +0x3172 0x506a +0x3173 0x506d +0x3174 0x5070 +0x3175 0x5071 +0x3176 0x503b +0x3177 0x5081 +0x3178 0x5083 +0x3179 0x5084 +0x317a 0x5086 +0x317b 0x508a +0x317c 0x508e +0x317d 0x508f +0x317e 0x5090 +0x3221 0x5092 +0x3222 0x5093 +0x3223 0x5094 +0x3224 0x5096 +0x3225 0x509b +0x3226 0x509c +0x3227 0x509e +0x3228 0x509f +0x3229 0x50a0 +0x322a 0x50a1 +0x322b 0x50a2 +0x322c 0x50aa +0x322d 0x50af +0x322e 0x50b0 +0x322f 0x50b9 +0x3230 0x50ba +0x3231 0x50bd +0x3232 0x50c0 +0x3233 0x50c3 +0x3234 0x50c4 +0x3235 0x50c7 +0x3236 0x50cc +0x3237 0x50ce +0x3238 0x50d0 +0x3239 0x50d3 +0x323a 0x50d4 +0x323b 0x50d8 +0x323c 0x50dc +0x323d 0x50dd +0x323e 0x50df +0x323f 0x50e2 +0x3240 0x50e4 +0x3241 0x50e6 +0x3242 0x50e8 +0x3243 0x50e9 +0x3244 0x50ef +0x3245 0x50f1 +0x3246 0x50f6 +0x3247 0x50fa +0x3248 0x50fe +0x3249 0x5103 +0x324a 0x5106 +0x324b 0x5107 +0x324c 0x5108 +0x324d 0x510b +0x324e 0x510c +0x324f 0x510d +0x3250 0x510e +0x3251 0x50f2 +0x3252 0x5110 +0x3253 0x5117 +0x3254 0x5119 +0x3255 0x511b +0x3256 0x511c +0x3257 0x511d +0x3258 0x511e +0x3259 0x5123 +0x325a 0x5127 +0x325b 0x5128 +0x325c 0x512c +0x325d 0x512d +0x325e 0x512f +0x325f 0x5131 +0x3260 0x5133 +0x3261 0x5134 +0x3262 0x5135 +0x3263 0x5138 +0x3264 0x5139 +0x3265 0x5142 +0x3266 0x514a +0x3267 0x514f +0x3268 0x5153 +0x3269 0x5155 +0x326a 0x5157 +0x326b 0x5158 +0x326c 0x515f +0x326d 0x5164 +0x326e 0x5166 +0x326f 0x517e +0x3270 0x5183 +0x3271 0x5184 +0x3272 0x518b +0x3273 0x518e +0x3274 0x5198 +0x3275 0x519d +0x3276 0x51a1 +0x3277 0x51a3 +0x3278 0x51ad +0x3279 0x51b8 +0x327a 0x51ba +0x327b 0x51bc +0x327c 0x51be +0x327d 0x51bf +0x327e 0x51c2 +0x3321 0x51c8 +0x3322 0x51cf +0x3323 0x51d1 +0x3324 0x51d2 +0x3325 0x51d3 +0x3326 0x51d5 +0x3327 0x51d8 +0x3328 0x51de +0x3329 0x51e2 +0x332a 0x51e5 +0x332b 0x51ee +0x332c 0x51f2 +0x332d 0x51f3 +0x332e 0x51f4 +0x332f 0x51f7 +0x3330 0x5201 +0x3331 0x5202 +0x3332 0x5205 +0x3333 0x5212 +0x3334 0x5213 +0x3335 0x5215 +0x3336 0x5216 +0x3337 0x5218 +0x3338 0x5222 +0x3339 0x5228 +0x333a 0x5231 +0x333b 0x5232 +0x333c 0x5235 +0x333d 0x523c +0x333e 0x5245 +0x333f 0x5249 +0x3340 0x5255 +0x3341 0x5257 +0x3342 0x5258 +0x3343 0x525a +0x3344 0x525c +0x3345 0x525f +0x3346 0x5260 +0x3347 0x5261 +0x3348 0x5266 +0x3349 0x526e +0x334a 0x5277 +0x334b 0x5278 +0x334c 0x5279 +0x334d 0x5280 +0x334e 0x5282 +0x334f 0x5285 +0x3350 0x528a +0x3351 0x528c +0x3352 0x5293 +0x3353 0x5295 +0x3354 0x5296 +0x3355 0x5297 +0x3356 0x5298 +0x3357 0x529a +0x3358 0x529c +0x3359 0x52a4 +0x335a 0x52a5 +0x335b 0x52a6 +0x335c 0x52a7 +0x335d 0x52af +0x335e 0x52b0 +0x335f 0x52b6 +0x3360 0x52b7 +0x3361 0x52b8 +0x3362 0x52ba +0x3363 0x52bb +0x3364 0x52bd +0x3365 0x52c0 +0x3366 0x52c4 +0x3367 0x52c6 +0x3368 0x52c8 +0x3369 0x52cc +0x336a 0x52cf +0x336b 0x52d1 +0x336c 0x52d4 +0x336d 0x52d6 +0x336e 0x52db +0x336f 0x52dc +0x3370 0x52e1 +0x3371 0x52e5 +0x3372 0x52e8 +0x3373 0x52e9 +0x3374 0x52ea +0x3375 0x52ec +0x3376 0x52f0 +0x3377 0x52f1 +0x3378 0x52f4 +0x3379 0x52f6 +0x337a 0x52f7 +0x337b 0x5300 +0x337c 0x5303 +0x337d 0x530a +0x337e 0x530b +0x3421 0x530c +0x3422 0x5311 +0x3423 0x5313 +0x3424 0x5318 +0x3425 0x531b +0x3426 0x531c +0x3427 0x531e +0x3428 0x531f +0x3429 0x5325 +0x342a 0x5327 +0x342b 0x5328 +0x342c 0x5329 +0x342d 0x532b +0x342e 0x532c +0x342f 0x532d +0x3430 0x5330 +0x3431 0x5332 +0x3432 0x5335 +0x3433 0x533c +0x3434 0x533d +0x3435 0x533e +0x3436 0x5342 +0x3437 0x534c +0x3438 0x534b +0x3439 0x5359 +0x343a 0x535b +0x343b 0x5361 +0x343c 0x5363 +0x343d 0x5365 +0x343e 0x536c +0x343f 0x536d +0x3440 0x5372 +0x3441 0x5379 +0x3442 0x537e +0x3443 0x5383 +0x3444 0x5387 +0x3445 0x5388 +0x3446 0x538e +0x3447 0x5393 +0x3448 0x5394 +0x3449 0x5399 +0x344a 0x539d +0x344b 0x53a1 +0x344c 0x53a4 +0x344d 0x53aa +0x344e 0x53ab +0x344f 0x53af +0x3450 0x53b2 +0x3451 0x53b4 +0x3452 0x53b5 +0x3453 0x53b7 +0x3454 0x53b8 +0x3455 0x53ba +0x3456 0x53bd +0x3457 0x53c0 +0x3458 0x53c5 +0x3459 0x53cf +0x345a 0x53d2 +0x345b 0x53d3 +0x345c 0x53d5 +0x345d 0x53da +0x345e 0x53dd +0x345f 0x53de +0x3460 0x53e0 +0x3461 0x53e6 +0x3462 0x53e7 +0x3463 0x53f5 +0x3464 0x5402 +0x3465 0x5413 +0x3466 0x541a +0x3467 0x5421 +0x3468 0x5427 +0x3469 0x5428 +0x346a 0x542a +0x346b 0x542f +0x346c 0x5431 +0x346d 0x5434 +0x346e 0x5435 +0x346f 0x5443 +0x3470 0x5444 +0x3471 0x5447 +0x3472 0x544d +0x3473 0x544f +0x3474 0x545e +0x3475 0x5462 +0x3476 0x5464 +0x3477 0x5466 +0x3478 0x5467 +0x3479 0x5469 +0x347a 0x546b +0x347b 0x546d +0x347c 0x546e +0x347d 0x5474 +0x347e 0x547f +0x3521 0x5481 +0x3522 0x5483 +0x3523 0x5485 +0x3524 0x5488 +0x3525 0x5489 +0x3526 0x548d +0x3527 0x5491 +0x3528 0x5495 +0x3529 0x5496 +0x352a 0x549c +0x352b 0x549f +0x352c 0x54a1 +0x352d 0x54a6 +0x352e 0x54a7 +0x352f 0x54a9 +0x3530 0x54aa +0x3531 0x54ad +0x3532 0x54ae +0x3533 0x54b1 +0x3534 0x54b7 +0x3535 0x54b9 +0x3536 0x54ba +0x3537 0x54bb +0x3538 0x54bf +0x3539 0x54c6 +0x353a 0x54ca +0x353b 0x54cd +0x353c 0x54ce +0x353d 0x54e0 +0x353e 0x54ea +0x353f 0x54ec +0x3540 0x54ef +0x3541 0x54f6 +0x3542 0x54fc +0x3543 0x54fe +0x3544 0x54ff +0x3545 0x5500 +0x3546 0x5501 +0x3547 0x5505 +0x3548 0x5508 +0x3549 0x5509 +0x354a 0x550c +0x354b 0x550d +0x354c 0x550e +0x354d 0x5515 +0x354e 0x552a +0x354f 0x552b +0x3550 0x5532 +0x3551 0x5535 +0x3552 0x5536 +0x3553 0x553b +0x3554 0x553c +0x3555 0x553d +0x3556 0x5541 +0x3557 0x5547 +0x3558 0x5549 +0x3559 0x554a +0x355a 0x554d +0x355b 0x5550 +0x355c 0x5551 +0x355d 0x5558 +0x355e 0x555a +0x355f 0x555b +0x3560 0x555e +0x3561 0x5560 +0x3562 0x5561 +0x3563 0x5564 +0x3564 0x5566 +0x3565 0x557f +0x3566 0x5581 +0x3567 0x5582 +0x3568 0x5586 +0x3569 0x5588 +0x356a 0x558e +0x356b 0x558f +0x356c 0x5591 +0x356d 0x5592 +0x356e 0x5593 +0x356f 0x5594 +0x3570 0x5597 +0x3571 0x55a3 +0x3572 0x55a4 +0x3573 0x55ad +0x3574 0x55b2 +0x3575 0x55bf +0x3576 0x55c1 +0x3577 0x55c3 +0x3578 0x55c6 +0x3579 0x55c9 +0x357a 0x55cb +0x357b 0x55cc +0x357c 0x55ce +0x357d 0x55d1 +0x357e 0x55d2 +0x3621 0x55d3 +0x3622 0x55d7 +0x3623 0x55d8 +0x3624 0x55db +0x3625 0x55de +0x3626 0x55e2 +0x3627 0x55e9 +0x3628 0x55f6 +0x3629 0x55ff +0x362a 0x5605 +0x362b 0x5608 +0x362c 0x560a +0x362d 0x560d +0x362e 0x560e +0x362f 0x560f +0x3630 0x5610 +0x3631 0x5611 +0x3632 0x5612 +0x3633 0x5619 +0x3634 0x562c +0x3635 0x5630 +0x3636 0x5633 +0x3637 0x5635 +0x3638 0x5637 +0x3639 0x5639 +0x363a 0x563b +0x363b 0x563c +0x363c 0x563d +0x363d 0x563f +0x363e 0x5640 +0x363f 0x5641 +0x3640 0x5643 +0x3641 0x5644 +0x3642 0x5646 +0x3643 0x5649 +0x3644 0x564b +0x3645 0x564d +0x3646 0x564f +0x3647 0x5654 +0x3648 0x565e +0x3649 0x5660 +0x364a 0x5661 +0x364b 0x5662 +0x364c 0x5663 +0x364d 0x5666 +0x364e 0x5669 +0x364f 0x566d +0x3650 0x566f +0x3651 0x5671 +0x3652 0x5672 +0x3653 0x5675 +0x3654 0x5684 +0x3655 0x5685 +0x3656 0x5688 +0x3657 0x568b +0x3658 0x568c +0x3659 0x5695 +0x365a 0x5699 +0x365b 0x569a +0x365c 0x569d +0x365d 0x569e +0x365e 0x569f +0x365f 0x56a6 +0x3660 0x56a7 +0x3661 0x56a8 +0x3662 0x56a9 +0x3663 0x56ab +0x3664 0x56ac +0x3665 0x56ad +0x3666 0x56b1 +0x3667 0x56b3 +0x3668 0x56b7 +0x3669 0x56be +0x366a 0x56c5 +0x366b 0x56c9 +0x366c 0x56ca +0x366d 0x56cb +0x366e 0x56cf +0x366f 0x56d0 +0x3670 0x56cc +0x3671 0x56cd +0x3672 0x56d9 +0x3673 0x56dc +0x3674 0x56dd +0x3675 0x56df +0x3676 0x56e1 +0x3677 0x56e4 +0x3678 0x56e5 +0x3679 0x56e6 +0x367a 0x56e7 +0x367b 0x56e8 +0x367c 0x56f1 +0x367d 0x56eb +0x367e 0x56ed +0x3721 0x56f6 +0x3722 0x56f7 +0x3723 0x5701 +0x3724 0x5702 +0x3725 0x5707 +0x3726 0x570a +0x3727 0x570c +0x3728 0x5711 +0x3729 0x5715 +0x372a 0x571a +0x372b 0x571b +0x372c 0x571d +0x372d 0x5720 +0x372e 0x5722 +0x372f 0x5723 +0x3730 0x5724 +0x3731 0x5725 +0x3732 0x5729 +0x3733 0x572a +0x3734 0x572c +0x3735 0x572e +0x3736 0x572f +0x3737 0x5733 +0x3738 0x5734 +0x3739 0x573d +0x373a 0x573e +0x373b 0x573f +0x373c 0x5745 +0x373d 0x5746 +0x373e 0x574c +0x373f 0x574d +0x3740 0x5752 +0x3741 0x5762 +0x3742 0x5765 +0x3743 0x5767 +0x3744 0x5768 +0x3745 0x576b +0x3746 0x576d +0x3747 0x576e +0x3748 0x576f +0x3749 0x5770 +0x374a 0x5771 +0x374b 0x5773 +0x374c 0x5774 +0x374d 0x5775 +0x374e 0x5777 +0x374f 0x5779 +0x3750 0x577a +0x3751 0x577b +0x3752 0x577c +0x3753 0x577e +0x3754 0x5781 +0x3755 0x5783 +0x3756 0x578c +0x3757 0x5794 +0x3758 0x5797 +0x3759 0x5799 +0x375a 0x579a +0x375b 0x579c +0x375c 0x579d +0x375d 0x579e +0x375e 0x579f +0x375f 0x57a1 +0x3760 0x5795 +0x3761 0x57a7 +0x3762 0x57a8 +0x3763 0x57a9 +0x3764 0x57ac +0x3765 0x57b8 +0x3766 0x57bd +0x3767 0x57c7 +0x3768 0x57c8 +0x3769 0x57cc +0x376a 0x57cf +0x376b 0x57d5 +0x376c 0x57dd +0x376d 0x57de +0x376e 0x57e4 +0x376f 0x57e6 +0x3770 0x57e7 +0x3771 0x57e9 +0x3772 0x57ed +0x3773 0x57f0 +0x3774 0x57f5 +0x3775 0x57f6 +0x3776 0x57f8 +0x3777 0x57fd +0x3778 0x57fe +0x3779 0x57ff +0x377a 0x5803 +0x377b 0x5804 +0x377c 0x5808 +0x377d 0x5809 +0x377e 0x57e1 +0x3821 0x580c +0x3822 0x580d +0x3823 0x581b +0x3824 0x581e +0x3825 0x581f +0x3826 0x5820 +0x3827 0x5826 +0x3828 0x5827 +0x3829 0x582d +0x382a 0x5832 +0x382b 0x5839 +0x382c 0x583f +0x382d 0x5849 +0x382e 0x584c +0x382f 0x584d +0x3830 0x584f +0x3831 0x5850 +0x3832 0x5855 +0x3833 0x585f +0x3834 0x5861 +0x3835 0x5864 +0x3836 0x5867 +0x3837 0x5868 +0x3838 0x5878 +0x3839 0x587c +0x383a 0x587f +0x383b 0x5880 +0x383c 0x5881 +0x383d 0x5887 +0x383e 0x5888 +0x383f 0x5889 +0x3840 0x588a +0x3841 0x588c +0x3842 0x588d +0x3843 0x588f +0x3844 0x5890 +0x3845 0x5894 +0x3846 0x5896 +0x3847 0x589d +0x3848 0x58a0 +0x3849 0x58a1 +0x384a 0x58a2 +0x384b 0x58a6 +0x384c 0x58a9 +0x384d 0x58b1 +0x384e 0x58b2 +0x384f 0x58c4 +0x3850 0x58bc +0x3851 0x58c2 +0x3852 0x58c8 +0x3853 0x58cd +0x3854 0x58ce +0x3855 0x58d0 +0x3856 0x58d2 +0x3857 0x58d4 +0x3858 0x58d6 +0x3859 0x58da +0x385a 0x58dd +0x385b 0x58e1 +0x385c 0x58e2 +0x385d 0x58e9 +0x385e 0x58f3 +0x385f 0x5905 +0x3860 0x5906 +0x3861 0x590b +0x3862 0x590c +0x3863 0x5912 +0x3864 0x5913 +0x3865 0x5914 +0x3866 0x8641 +0x3867 0x591d +0x3868 0x5921 +0x3869 0x5923 +0x386a 0x5924 +0x386b 0x5928 +0x386c 0x592f +0x386d 0x5930 +0x386e 0x5933 +0x386f 0x5935 +0x3870 0x5936 +0x3871 0x593f +0x3872 0x5943 +0x3873 0x5946 +0x3874 0x5952 +0x3875 0x5953 +0x3876 0x5959 +0x3877 0x595b +0x3878 0x595d +0x3879 0x595e +0x387a 0x595f +0x387b 0x5961 +0x387c 0x5963 +0x387d 0x596b +0x387e 0x596d +0x3921 0x596f +0x3922 0x5972 +0x3923 0x5975 +0x3924 0x5976 +0x3925 0x5979 +0x3926 0x597b +0x3927 0x597c +0x3928 0x598b +0x3929 0x598c +0x392a 0x598e +0x392b 0x5992 +0x392c 0x5995 +0x392d 0x5997 +0x392e 0x599f +0x392f 0x59a4 +0x3930 0x59a7 +0x3931 0x59ad +0x3932 0x59ae +0x3933 0x59af +0x3934 0x59b0 +0x3935 0x59b3 +0x3936 0x59b7 +0x3937 0x59ba +0x3938 0x59bc +0x3939 0x59c1 +0x393a 0x59c3 +0x393b 0x59c4 +0x393c 0x59c8 +0x393d 0x59ca +0x393e 0x59cd +0x393f 0x59d2 +0x3940 0x59dd +0x3941 0x59de +0x3942 0x59df +0x3943 0x59e3 +0x3944 0x59e4 +0x3945 0x59e7 +0x3946 0x59ee +0x3947 0x59ef +0x3948 0x59f1 +0x3949 0x59f2 +0x394a 0x59f4 +0x394b 0x59f7 +0x394c 0x5a00 +0x394d 0x5a04 +0x394e 0x5a0c +0x394f 0x5a0d +0x3950 0x5a0e +0x3951 0x5a12 +0x3952 0x5a13 +0x3953 0x5a1e +0x3954 0x5a23 +0x3955 0x5a24 +0x3956 0x5a27 +0x3957 0x5a28 +0x3958 0x5a2a +0x3959 0x5a2d +0x395a 0x5a30 +0x395b 0x5a44 +0x395c 0x5a45 +0x395d 0x5a47 +0x395e 0x5a48 +0x395f 0x5a4c +0x3960 0x5a50 +0x3961 0x5a55 +0x3962 0x5a5e +0x3963 0x5a63 +0x3964 0x5a65 +0x3965 0x5a67 +0x3966 0x5a6d +0x3967 0x5a77 +0x3968 0x5a7a +0x3969 0x5a7b +0x396a 0x5a7e +0x396b 0x5a8b +0x396c 0x5a90 +0x396d 0x5a93 +0x396e 0x5a96 +0x396f 0x5a99 +0x3970 0x5a9c +0x3971 0x5a9e +0x3972 0x5a9f +0x3973 0x5aa0 +0x3974 0x5aa2 +0x3975 0x5aa7 +0x3976 0x5aac +0x3977 0x5ab1 +0x3978 0x5ab2 +0x3979 0x5ab3 +0x397a 0x5ab5 +0x397b 0x5ab8 +0x397c 0x5aba +0x397d 0x5abb +0x397e 0x5abf +0x3a21 0x5ac4 +0x3a22 0x5ac6 +0x3a23 0x5ac8 +0x3a24 0x5acf +0x3a25 0x5ada +0x3a26 0x5adc +0x3a27 0x5ae0 +0x3a28 0x5ae5 +0x3a29 0x5aea +0x3a2a 0x5aee +0x3a2b 0x5af5 +0x3a2c 0x5af6 +0x3a2d 0x5afd +0x3a2e 0x5b00 +0x3a2f 0x5b01 +0x3a30 0x5b08 +0x3a31 0x5b17 +0x3a32 0x5b34 +0x3a33 0x5b19 +0x3a34 0x5b1b +0x3a35 0x5b1d +0x3a36 0x5b21 +0x3a37 0x5b25 +0x3a38 0x5b2d +0x3a39 0x5b38 +0x3a3a 0x5b41 +0x3a3b 0x5b4b +0x3a3c 0x5b4c +0x3a3d 0x5b52 +0x3a3e 0x5b56 +0x3a3f 0x5b5e +0x3a40 0x5b68 +0x3a41 0x5b6e +0x3a42 0x5b6f +0x3a43 0x5b7c +0x3a44 0x5b7d +0x3a45 0x5b7e +0x3a46 0x5b7f +0x3a47 0x5b81 +0x3a48 0x5b84 +0x3a49 0x5b86 +0x3a4a 0x5b8a +0x3a4b 0x5b8e +0x3a4c 0x5b90 +0x3a4d 0x5b91 +0x3a4e 0x5b93 +0x3a4f 0x5b94 +0x3a50 0x5b96 +0x3a51 0x5ba8 +0x3a52 0x5ba9 +0x3a53 0x5bac +0x3a54 0x5bad +0x3a55 0x5baf +0x3a56 0x5bb1 +0x3a57 0x5bb2 +0x3a58 0x5bb7 +0x3a59 0x5bba +0x3a5a 0x5bbc +0x3a5b 0x5bc0 +0x3a5c 0x5bc1 +0x3a5d 0x5bcd +0x3a5e 0x5bcf +0x3a5f 0x5bd6 +0x3a60 0x5bd7 +0x3a61 0x5bd8 +0x3a62 0x5bd9 +0x3a63 0x5bda +0x3a64 0x5be0 +0x3a65 0x5bef +0x3a66 0x5bf1 +0x3a67 0x5bf4 +0x3a68 0x5bfd +0x3a69 0x5c0c +0x3a6a 0x5c17 +0x3a6b 0x5c1e +0x3a6c 0x5c1f +0x3a6d 0x5c23 +0x3a6e 0x5c26 +0x3a6f 0x5c29 +0x3a70 0x5c2b +0x3a71 0x5c2c +0x3a72 0x5c2e +0x3a73 0x5c30 +0x3a74 0x5c32 +0x3a75 0x5c35 +0x3a76 0x5c36 +0x3a77 0x5c59 +0x3a78 0x5c5a +0x3a79 0x5c5c +0x3a7a 0x5c62 +0x3a7b 0x5c63 +0x3a7c 0x5c67 +0x3a7d 0x5c68 +0x3a7e 0x5c69 +0x3b21 0x5c6d +0x3b22 0x5c70 +0x3b23 0x5c74 +0x3b24 0x5c75 +0x3b25 0x5c7a +0x3b26 0x5c7b +0x3b27 0x5c7c +0x3b28 0x5c7d +0x3b29 0x5c87 +0x3b2a 0x5c88 +0x3b2b 0x5c8a +0x3b2c 0x5c8f +0x3b2d 0x5c92 +0x3b2e 0x5c9d +0x3b2f 0x5c9f +0x3b30 0x5ca0 +0x3b31 0x5ca2 +0x3b32 0x5ca3 +0x3b33 0x5ca6 +0x3b34 0x5caa +0x3b35 0x5cb2 +0x3b36 0x5cb4 +0x3b37 0x5cb5 +0x3b38 0x5cba +0x3b39 0x5cc9 +0x3b3a 0x5ccb +0x3b3b 0x5cd2 +0x3b3c 0x5cdd +0x3b3d 0x5cd7 +0x3b3e 0x5cee +0x3b3f 0x5cf1 +0x3b40 0x5cf2 +0x3b41 0x5cf4 +0x3b42 0x5d01 +0x3b43 0x5d06 +0x3b44 0x5d0d +0x3b45 0x5d12 +0x3b46 0x5d2b +0x3b47 0x5d23 +0x3b48 0x5d24 +0x3b49 0x5d26 +0x3b4a 0x5d27 +0x3b4b 0x5d31 +0x3b4c 0x5d34 +0x3b4d 0x5d39 +0x3b4e 0x5d3d +0x3b4f 0x5d3f +0x3b50 0x5d42 +0x3b51 0x5d43 +0x3b52 0x5d46 +0x3b53 0x5d48 +0x3b54 0x5d55 +0x3b55 0x5d51 +0x3b56 0x5d59 +0x3b57 0x5d4a +0x3b58 0x5d5f +0x3b59 0x5d60 +0x3b5a 0x5d61 +0x3b5b 0x5d62 +0x3b5c 0x5d64 +0x3b5d 0x5d6a +0x3b5e 0x5d6d +0x3b5f 0x5d70 +0x3b60 0x5d79 +0x3b61 0x5d7a +0x3b62 0x5d7e +0x3b63 0x5d7f +0x3b64 0x5d81 +0x3b65 0x5d83 +0x3b66 0x5d88 +0x3b67 0x5d8a +0x3b68 0x5d92 +0x3b69 0x5d93 +0x3b6a 0x5d94 +0x3b6b 0x5d95 +0x3b6c 0x5d99 +0x3b6d 0x5d9b +0x3b6e 0x5d9f +0x3b6f 0x5da0 +0x3b70 0x5da7 +0x3b71 0x5dab +0x3b72 0x5db0 +0x3b73 0x5db4 +0x3b74 0x5db8 +0x3b75 0x5db9 +0x3b76 0x5dc3 +0x3b77 0x5dc7 +0x3b78 0x5dcb +0x3b79 0x5dd0 +0x3b7a 0x5dce +0x3b7b 0x5dd8 +0x3b7c 0x5dd9 +0x3b7d 0x5de0 +0x3b7e 0x5de4 +0x3c21 0x5de9 +0x3c22 0x5df8 +0x3c23 0x5df9 +0x3c24 0x5e00 +0x3c25 0x5e07 +0x3c26 0x5e0d +0x3c27 0x5e12 +0x3c28 0x5e14 +0x3c29 0x5e15 +0x3c2a 0x5e18 +0x3c2b 0x5e1f +0x3c2c 0x5e20 +0x3c2d 0x5e2e +0x3c2e 0x5e28 +0x3c2f 0x5e32 +0x3c30 0x5e35 +0x3c31 0x5e3e +0x3c32 0x5e4b +0x3c33 0x5e50 +0x3c34 0x5e49 +0x3c35 0x5e51 +0x3c36 0x5e56 +0x3c37 0x5e58 +0x3c38 0x5e5b +0x3c39 0x5e5c +0x3c3a 0x5e5e +0x3c3b 0x5e68 +0x3c3c 0x5e6a +0x3c3d 0x5e6b +0x3c3e 0x5e6c +0x3c3f 0x5e6d +0x3c40 0x5e6e +0x3c41 0x5e70 +0x3c42 0x5e80 +0x3c43 0x5e8b +0x3c44 0x5e8e +0x3c45 0x5ea2 +0x3c46 0x5ea4 +0x3c47 0x5ea5 +0x3c48 0x5ea8 +0x3c49 0x5eaa +0x3c4a 0x5eac +0x3c4b 0x5eb1 +0x3c4c 0x5eb3 +0x3c4d 0x5ebd +0x3c4e 0x5ebe +0x3c4f 0x5ebf +0x3c50 0x5ec6 +0x3c51 0x5ecc +0x3c52 0x5ecb +0x3c53 0x5ece +0x3c54 0x5ed1 +0x3c55 0x5ed2 +0x3c56 0x5ed4 +0x3c57 0x5ed5 +0x3c58 0x5edc +0x3c59 0x5ede +0x3c5a 0x5ee5 +0x3c5b 0x5eeb +0x3c5c 0x5f02 +0x3c5d 0x5f06 +0x3c5e 0x5f07 +0x3c5f 0x5f08 +0x3c60 0x5f0e +0x3c61 0x5f19 +0x3c62 0x5f1c +0x3c63 0x5f1d +0x3c64 0x5f21 +0x3c65 0x5f22 +0x3c66 0x5f23 +0x3c67 0x5f24 +0x3c68 0x5f28 +0x3c69 0x5f2b +0x3c6a 0x5f2c +0x3c6b 0x5f2e +0x3c6c 0x5f30 +0x3c6d 0x5f34 +0x3c6e 0x5f36 +0x3c6f 0x5f3b +0x3c70 0x5f3d +0x3c71 0x5f3f +0x3c72 0x5f40 +0x3c73 0x5f44 +0x3c74 0x5f45 +0x3c75 0x5f47 +0x3c76 0x5f4d +0x3c77 0x5f50 +0x3c78 0x5f54 +0x3c79 0x5f58 +0x3c7a 0x5f5b +0x3c7b 0x5f60 +0x3c7c 0x5f63 +0x3c7d 0x5f64 +0x3c7e 0x5f67 +0x3d21 0x5f6f +0x3d22 0x5f72 +0x3d23 0x5f74 +0x3d24 0x5f75 +0x3d25 0x5f78 +0x3d26 0x5f7a +0x3d27 0x5f7d +0x3d28 0x5f7e +0x3d29 0x5f89 +0x3d2a 0x5f8d +0x3d2b 0x5f8f +0x3d2c 0x5f96 +0x3d2d 0x5f9c +0x3d2e 0x5f9d +0x3d2f 0x5fa2 +0x3d30 0x5fa7 +0x3d31 0x5fab +0x3d32 0x5fa4 +0x3d33 0x5fac +0x3d34 0x5faf +0x3d35 0x5fb0 +0x3d36 0x5fb1 +0x3d37 0x5fb8 +0x3d38 0x5fc4 +0x3d39 0x5fc7 +0x3d3a 0x5fc8 +0x3d3b 0x5fc9 +0x3d3c 0x5fcb +0x3d3d 0x5fd0 +0x3d3e 0x5fd1 +0x3d3f 0x5fd2 +0x3d40 0x5fd3 +0x3d41 0x5fd4 +0x3d42 0x5fde +0x3d43 0x5fe1 +0x3d44 0x5fe2 +0x3d45 0x5fe8 +0x3d46 0x5fe9 +0x3d47 0x5fea +0x3d48 0x5fec +0x3d49 0x5fed +0x3d4a 0x5fee +0x3d4b 0x5fef +0x3d4c 0x5ff2 +0x3d4d 0x5ff3 +0x3d4e 0x5ff6 +0x3d4f 0x5ffa +0x3d50 0x5ffc +0x3d51 0x6007 +0x3d52 0x600a +0x3d53 0x600d +0x3d54 0x6013 +0x3d55 0x6014 +0x3d56 0x6017 +0x3d57 0x6018 +0x3d58 0x601a +0x3d59 0x601f +0x3d5a 0x6024 +0x3d5b 0x602d +0x3d5c 0x6033 +0x3d5d 0x6035 +0x3d5e 0x6040 +0x3d5f 0x6047 +0x3d60 0x6048 +0x3d61 0x6049 +0x3d62 0x604c +0x3d63 0x6051 +0x3d64 0x6054 +0x3d65 0x6056 +0x3d66 0x6057 +0x3d67 0x605d +0x3d68 0x6061 +0x3d69 0x6067 +0x3d6a 0x6071 +0x3d6b 0x607e +0x3d6c 0x607f +0x3d6d 0x6082 +0x3d6e 0x6086 +0x3d6f 0x6088 +0x3d70 0x608a +0x3d71 0x608e +0x3d72 0x6091 +0x3d73 0x6093 +0x3d74 0x6095 +0x3d75 0x6098 +0x3d76 0x609d +0x3d77 0x609e +0x3d78 0x60a2 +0x3d79 0x60a4 +0x3d7a 0x60a5 +0x3d7b 0x60a8 +0x3d7c 0x60b0 +0x3d7d 0x60b1 +0x3d7e 0x60b7 +0x3e21 0x60bb +0x3e22 0x60be +0x3e23 0x60c2 +0x3e24 0x60c4 +0x3e25 0x60c8 +0x3e26 0x60c9 +0x3e27 0x60ca +0x3e28 0x60cb +0x3e29 0x60ce +0x3e2a 0x60cf +0x3e2b 0x60d4 +0x3e2c 0x60d5 +0x3e2d 0x60d9 +0x3e2e 0x60db +0x3e2f 0x60dd +0x3e30 0x60de +0x3e31 0x60e2 +0x3e32 0x60e5 +0x3e33 0x60f2 +0x3e34 0x60f5 +0x3e35 0x60f8 +0x3e36 0x60fc +0x3e37 0x60fd +0x3e38 0x6102 +0x3e39 0x6107 +0x3e3a 0x610a +0x3e3b 0x610c +0x3e3c 0x6110 +0x3e3d 0x6111 +0x3e3e 0x6112 +0x3e3f 0x6113 +0x3e40 0x6114 +0x3e41 0x6116 +0x3e42 0x6117 +0x3e43 0x6119 +0x3e44 0x611c +0x3e45 0x611e +0x3e46 0x6122 +0x3e47 0x612a +0x3e48 0x612b +0x3e49 0x6130 +0x3e4a 0x6131 +0x3e4b 0x6135 +0x3e4c 0x6136 +0x3e4d 0x6137 +0x3e4e 0x6139 +0x3e4f 0x6141 +0x3e50 0x6145 +0x3e51 0x6146 +0x3e52 0x6149 +0x3e53 0x615e +0x3e54 0x6160 +0x3e55 0x616c +0x3e56 0x6172 +0x3e57 0x6178 +0x3e58 0x617b +0x3e59 0x617c +0x3e5a 0x617f +0x3e5b 0x6180 +0x3e5c 0x6181 +0x3e5d 0x6183 +0x3e5e 0x6184 +0x3e5f 0x618b +0x3e60 0x618d +0x3e61 0x6192 +0x3e62 0x6193 +0x3e63 0x6197 +0x3e64 0x6198 +0x3e65 0x619c +0x3e66 0x619d +0x3e67 0x619f +0x3e68 0x61a0 +0x3e69 0x61a5 +0x3e6a 0x61a8 +0x3e6b 0x61aa +0x3e6c 0x61ad +0x3e6d 0x61b8 +0x3e6e 0x61b9 +0x3e6f 0x61bc +0x3e70 0x61c0 +0x3e71 0x61c1 +0x3e72 0x61c2 +0x3e73 0x61ce +0x3e74 0x61cf +0x3e75 0x61d5 +0x3e76 0x61dc +0x3e77 0x61dd +0x3e78 0x61de +0x3e79 0x61df +0x3e7a 0x61e1 +0x3e7b 0x61e2 +0x3e7c 0x61e7 +0x3e7d 0x61e9 +0x3e7e 0x61e5 +0x3f21 0x61ec +0x3f22 0x61ed +0x3f23 0x61ef +0x3f24 0x6201 +0x3f25 0x6203 +0x3f26 0x6204 +0x3f27 0x6207 +0x3f28 0x6213 +0x3f29 0x6215 +0x3f2a 0x621c +0x3f2b 0x6220 +0x3f2c 0x6222 +0x3f2d 0x6223 +0x3f2e 0x6227 +0x3f2f 0x6229 +0x3f30 0x622b +0x3f31 0x6239 +0x3f32 0x623d +0x3f33 0x6242 +0x3f34 0x6243 +0x3f35 0x6244 +0x3f36 0x6246 +0x3f37 0x624c +0x3f38 0x6250 +0x3f39 0x6251 +0x3f3a 0x6252 +0x3f3b 0x6254 +0x3f3c 0x6256 +0x3f3d 0x625a +0x3f3e 0x625c +0x3f3f 0x6264 +0x3f40 0x626d +0x3f41 0x626f +0x3f42 0x6273 +0x3f43 0x627a +0x3f44 0x627d +0x3f45 0x628d +0x3f46 0x628e +0x3f47 0x628f +0x3f48 0x6290 +0x3f49 0x62a6 +0x3f4a 0x62a8 +0x3f4b 0x62b3 +0x3f4c 0x62b6 +0x3f4d 0x62b7 +0x3f4e 0x62ba +0x3f4f 0x62be +0x3f50 0x62bf +0x3f51 0x62c4 +0x3f52 0x62ce +0x3f53 0x62d5 +0x3f54 0x62d6 +0x3f55 0x62da +0x3f56 0x62ea +0x3f57 0x62f2 +0x3f58 0x62f4 +0x3f59 0x62fc +0x3f5a 0x62fd +0x3f5b 0x6303 +0x3f5c 0x6304 +0x3f5d 0x630a +0x3f5e 0x630b +0x3f5f 0x630d +0x3f60 0x6310 +0x3f61 0x6313 +0x3f62 0x6316 +0x3f63 0x6318 +0x3f64 0x6329 +0x3f65 0x632a +0x3f66 0x632d +0x3f67 0x6335 +0x3f68 0x6336 +0x3f69 0x6339 +0x3f6a 0x633c +0x3f6b 0x6341 +0x3f6c 0x6342 +0x3f6d 0x6343 +0x3f6e 0x6344 +0x3f6f 0x6346 +0x3f70 0x634a +0x3f71 0x634b +0x3f72 0x634e +0x3f73 0x6352 +0x3f74 0x6353 +0x3f75 0x6354 +0x3f76 0x6358 +0x3f77 0x635b +0x3f78 0x6365 +0x3f79 0x6366 +0x3f7a 0x636c +0x3f7b 0x636d +0x3f7c 0x6371 +0x3f7d 0x6374 +0x3f7e 0x6375 +0x4021 0x6378 +0x4022 0x637c +0x4023 0x637d +0x4024 0x637f +0x4025 0x6382 +0x4026 0x6384 +0x4027 0x6387 +0x4028 0x638a +0x4029 0x6390 +0x402a 0x6394 +0x402b 0x6395 +0x402c 0x6399 +0x402d 0x639a +0x402e 0x639e +0x402f 0x63a4 +0x4030 0x63a6 +0x4031 0x63ad +0x4032 0x63ae +0x4033 0x63af +0x4034 0x63bd +0x4035 0x63c1 +0x4036 0x63c5 +0x4037 0x63c8 +0x4038 0x63ce +0x4039 0x63d1 +0x403a 0x63d3 +0x403b 0x63d4 +0x403c 0x63d5 +0x403d 0x63dc +0x403e 0x63e0 +0x403f 0x63e5 +0x4040 0x63ea +0x4041 0x63ec +0x4042 0x63f2 +0x4043 0x63f3 +0x4044 0x63f5 +0x4045 0x63f8 +0x4046 0x63f9 +0x4047 0x6409 +0x4048 0x640a +0x4049 0x6410 +0x404a 0x6412 +0x404b 0x6414 +0x404c 0x6418 +0x404d 0x641e +0x404e 0x6420 +0x404f 0x6422 +0x4050 0x6424 +0x4051 0x6425 +0x4052 0x6429 +0x4053 0x642a +0x4054 0x642f +0x4055 0x6430 +0x4056 0x6435 +0x4057 0x643d +0x4058 0x643f +0x4059 0x644b +0x405a 0x644f +0x405b 0x6451 +0x405c 0x6452 +0x405d 0x6453 +0x405e 0x6454 +0x405f 0x645a +0x4060 0x645b +0x4061 0x645c +0x4062 0x645d +0x4063 0x645f +0x4064 0x6460 +0x4065 0x6461 +0x4066 0x6463 +0x4067 0x646d +0x4068 0x6473 +0x4069 0x6474 +0x406a 0x647b +0x406b 0x647d +0x406c 0x6485 +0x406d 0x6487 +0x406e 0x648f +0x406f 0x6490 +0x4070 0x6491 +0x4071 0x6498 +0x4072 0x6499 +0x4073 0x649b +0x4074 0x649d +0x4075 0x649f +0x4076 0x64a1 +0x4077 0x64a3 +0x4078 0x64a6 +0x4079 0x64a8 +0x407a 0x64ac +0x407b 0x64b3 +0x407c 0x64bd +0x407d 0x64be +0x407e 0x64bf +0x4121 0x64c4 +0x4122 0x64c9 +0x4123 0x64ca +0x4124 0x64cb +0x4125 0x64cc +0x4126 0x64ce +0x4127 0x64d0 +0x4128 0x64d1 +0x4129 0x64d5 +0x412a 0x64d7 +0x412b 0x64e4 +0x412c 0x64e5 +0x412d 0x64e9 +0x412e 0x64ea +0x412f 0x64ed +0x4130 0x64f0 +0x4131 0x64f5 +0x4132 0x64f7 +0x4133 0x64fb +0x4134 0x64ff +0x4135 0x6501 +0x4136 0x6504 +0x4137 0x6508 +0x4138 0x6509 +0x4139 0x650a +0x413a 0x650f +0x413b 0x6513 +0x413c 0x6514 +0x413d 0x6516 +0x413e 0x6519 +0x413f 0x651b +0x4140 0x651e +0x4141 0x651f +0x4142 0x6522 +0x4143 0x6526 +0x4144 0x6529 +0x4145 0x652e +0x4146 0x6531 +0x4147 0x653a +0x4148 0x653c +0x4149 0x653d +0x414a 0x6543 +0x414b 0x6547 +0x414c 0x6549 +0x414d 0x6550 +0x414e 0x6552 +0x414f 0x6554 +0x4150 0x655f +0x4151 0x6560 +0x4152 0x6567 +0x4153 0x656b +0x4154 0x657a +0x4155 0x657d +0x4156 0x6581 +0x4157 0x6585 +0x4158 0x658a +0x4159 0x6592 +0x415a 0x6595 +0x415b 0x6598 +0x415c 0x659d +0x415d 0x65a0 +0x415e 0x65a3 +0x415f 0x65a6 +0x4160 0x65ae +0x4161 0x65b2 +0x4162 0x65b3 +0x4163 0x65b4 +0x4164 0x65bf +0x4165 0x65c2 +0x4166 0x65c8 +0x4167 0x65c9 +0x4168 0x65ce +0x4169 0x65d0 +0x416a 0x65d4 +0x416b 0x65d6 +0x416c 0x65d8 +0x416d 0x65df +0x416e 0x65f0 +0x416f 0x65f2 +0x4170 0x65f4 +0x4171 0x65f5 +0x4172 0x65f9 +0x4173 0x65fe +0x4174 0x65ff +0x4175 0x6600 +0x4176 0x6604 +0x4177 0x6608 +0x4178 0x6609 +0x4179 0x660d +0x417a 0x6611 +0x417b 0x6612 +0x417c 0x6615 +0x417d 0x6616 +0x417e 0x661d +0x4221 0x661e +0x4222 0x6621 +0x4223 0x6622 +0x4224 0x6623 +0x4225 0x6624 +0x4226 0x6626 +0x4227 0x6629 +0x4228 0x662a +0x4229 0x662b +0x422a 0x662c +0x422b 0x662e +0x422c 0x6630 +0x422d 0x6631 +0x422e 0x6633 +0x422f 0x6639 +0x4230 0x6637 +0x4231 0x6640 +0x4232 0x6645 +0x4233 0x6646 +0x4234 0x664a +0x4235 0x664c +0x4236 0x6651 +0x4237 0x664e +0x4238 0x6657 +0x4239 0x6658 +0x423a 0x6659 +0x423b 0x665b +0x423c 0x665c +0x423d 0x6660 +0x423e 0x6661 +0x423f 0x66fb +0x4240 0x666a +0x4241 0x666b +0x4242 0x666c +0x4243 0x667e +0x4244 0x6673 +0x4245 0x6675 +0x4246 0x667f +0x4247 0x6677 +0x4248 0x6678 +0x4249 0x6679 +0x424a 0x667b +0x424b 0x6680 +0x424c 0x667c +0x424d 0x668b +0x424e 0x668c +0x424f 0x668d +0x4250 0x6690 +0x4251 0x6692 +0x4252 0x6699 +0x4253 0x669a +0x4254 0x669b +0x4255 0x669c +0x4256 0x669f +0x4257 0x66a0 +0x4258 0x66a4 +0x4259 0x66ad +0x425a 0x66b1 +0x425b 0x66b2 +0x425c 0x66b5 +0x425d 0x66bb +0x425e 0x66bf +0x425f 0x66c0 +0x4260 0x66c2 +0x4261 0x66c3 +0x4262 0x66c8 +0x4263 0x66cc +0x4264 0x66ce +0x4265 0x66cf +0x4266 0x66d4 +0x4267 0x66db +0x4268 0x66df +0x4269 0x66e8 +0x426a 0x66eb +0x426b 0x66ec +0x426c 0x66ee +0x426d 0x66fa +0x426e 0x6705 +0x426f 0x6707 +0x4270 0x670e +0x4271 0x6713 +0x4272 0x6719 +0x4273 0x671c +0x4274 0x6720 +0x4275 0x6722 +0x4276 0x6733 +0x4277 0x673e +0x4278 0x6745 +0x4279 0x6747 +0x427a 0x6748 +0x427b 0x674c +0x427c 0x6754 +0x427d 0x6755 +0x427e 0x675d +0x4321 0x6766 +0x4322 0x676c +0x4323 0x676e +0x4324 0x6774 +0x4325 0x6776 +0x4326 0x677b +0x4327 0x6781 +0x4328 0x6784 +0x4329 0x678e +0x432a 0x678f +0x432b 0x6791 +0x432c 0x6793 +0x432d 0x6796 +0x432e 0x6798 +0x432f 0x6799 +0x4330 0x679b +0x4331 0x67b0 +0x4332 0x67b1 +0x4333 0x67b2 +0x4334 0x67b5 +0x4335 0x67bb +0x4336 0x67bc +0x4337 0x67bd +0x4338 0x67f9 +0x4339 0x67c0 +0x433a 0x67c2 +0x433b 0x67c3 +0x433c 0x67c5 +0x433d 0x67c8 +0x433e 0x67c9 +0x433f 0x67d2 +0x4340 0x67d7 +0x4341 0x67d9 +0x4342 0x67dc +0x4343 0x67e1 +0x4344 0x67e6 +0x4345 0x67f0 +0x4346 0x67f2 +0x4347 0x67f6 +0x4348 0x67f7 +0x4349 0x6852 +0x434a 0x6814 +0x434b 0x6819 +0x434c 0x681d +0x434d 0x681f +0x434e 0x6828 +0x434f 0x6827 +0x4350 0x682c +0x4351 0x682d +0x4352 0x682f +0x4353 0x6830 +0x4354 0x6831 +0x4355 0x6833 +0x4356 0x683b +0x4357 0x683f +0x4358 0x6844 +0x4359 0x6845 +0x435a 0x684a +0x435b 0x684c +0x435c 0x6855 +0x435d 0x6857 +0x435e 0x6858 +0x435f 0x685b +0x4360 0x686b +0x4361 0x686e +0x4362 0x686f +0x4363 0x6870 +0x4364 0x6871 +0x4365 0x6872 +0x4366 0x6875 +0x4367 0x6879 +0x4368 0x687a +0x4369 0x687b +0x436a 0x687c +0x436b 0x6882 +0x436c 0x6884 +0x436d 0x6886 +0x436e 0x6888 +0x436f 0x6896 +0x4370 0x6898 +0x4371 0x689a +0x4372 0x689c +0x4373 0x68a1 +0x4374 0x68a3 +0x4375 0x68a5 +0x4376 0x68a9 +0x4377 0x68aa +0x4378 0x68ae +0x4379 0x68b2 +0x437a 0x68bb +0x437b 0x68c5 +0x437c 0x68c8 +0x437d 0x68cc +0x437e 0x68cf +0x4421 0x68d0 +0x4422 0x68d1 +0x4423 0x68d3 +0x4424 0x68d6 +0x4425 0x68d9 +0x4426 0x68dc +0x4427 0x68dd +0x4428 0x68e5 +0x4429 0x68e8 +0x442a 0x68ea +0x442b 0x68eb +0x442c 0x68ec +0x442d 0x68ed +0x442e 0x68f0 +0x442f 0x68f1 +0x4430 0x68f5 +0x4431 0x68f6 +0x4432 0x68fb +0x4433 0x68fc +0x4434 0x68fd +0x4435 0x6906 +0x4436 0x6909 +0x4437 0x690a +0x4438 0x6910 +0x4439 0x6911 +0x443a 0x6913 +0x443b 0x6916 +0x443c 0x6917 +0x443d 0x6931 +0x443e 0x6933 +0x443f 0x6935 +0x4440 0x6938 +0x4441 0x693b +0x4442 0x6942 +0x4443 0x6945 +0x4444 0x6949 +0x4445 0x694e +0x4446 0x6957 +0x4447 0x695b +0x4448 0x6963 +0x4449 0x6964 +0x444a 0x6965 +0x444b 0x6966 +0x444c 0x6968 +0x444d 0x6969 +0x444e 0x696c +0x444f 0x6970 +0x4450 0x6971 +0x4451 0x6972 +0x4452 0x697a +0x4453 0x697b +0x4454 0x697f +0x4455 0x6980 +0x4456 0x698d +0x4457 0x6992 +0x4458 0x6996 +0x4459 0x6998 +0x445a 0x69a1 +0x445b 0x69a5 +0x445c 0x69a6 +0x445d 0x69a8 +0x445e 0x69ab +0x445f 0x69ad +0x4460 0x69af +0x4461 0x69b7 +0x4462 0x69b8 +0x4463 0x69ba +0x4464 0x69bc +0x4465 0x69c5 +0x4466 0x69c8 +0x4467 0x69d1 +0x4468 0x69d6 +0x4469 0x69d7 +0x446a 0x69e2 +0x446b 0x69e5 +0x446c 0x69ee +0x446d 0x69ef +0x446e 0x69f1 +0x446f 0x69f3 +0x4470 0x69f5 +0x4471 0x69fe +0x4472 0x6a00 +0x4473 0x6a01 +0x4474 0x6a03 +0x4475 0x6a0f +0x4476 0x6a11 +0x4477 0x6a15 +0x4478 0x6a1a +0x4479 0x6a1d +0x447a 0x6a20 +0x447b 0x6a24 +0x447c 0x6a28 +0x447d 0x6a30 +0x447e 0x6a32 +0x4521 0x6a34 +0x4522 0x6a37 +0x4523 0x6a3b +0x4524 0x6a3e +0x4525 0x6a3f +0x4526 0x6a45 +0x4527 0x6a46 +0x4528 0x6a49 +0x4529 0x6a4a +0x452a 0x6a4e +0x452b 0x6a50 +0x452c 0x6a51 +0x452d 0x6a52 +0x452e 0x6a55 +0x452f 0x6a56 +0x4530 0x6a5b +0x4531 0x6a64 +0x4532 0x6a67 +0x4533 0x6a6a +0x4534 0x6a71 +0x4535 0x6a73 +0x4536 0x6a7e +0x4537 0x6a81 +0x4538 0x6a83 +0x4539 0x6a86 +0x453a 0x6a87 +0x453b 0x6a89 +0x453c 0x6a8b +0x453d 0x6a91 +0x453e 0x6a9b +0x453f 0x6a9d +0x4540 0x6a9e +0x4541 0x6a9f +0x4542 0x6aa5 +0x4543 0x6aab +0x4544 0x6aaf +0x4545 0x6ab0 +0x4546 0x6ab1 +0x4547 0x6ab4 +0x4548 0x6abd +0x4549 0x6abe +0x454a 0x6abf +0x454b 0x6ac6 +0x454c 0x6ac9 +0x454d 0x6ac8 +0x454e 0x6acc +0x454f 0x6ad0 +0x4550 0x6ad4 +0x4551 0x6ad5 +0x4552 0x6ad6 +0x4553 0x6adc +0x4554 0x6add +0x4555 0x6ae4 +0x4556 0x6ae7 +0x4557 0x6aec +0x4558 0x6af0 +0x4559 0x6af1 +0x455a 0x6af2 +0x455b 0x6afc +0x455c 0x6afd +0x455d 0x6b02 +0x455e 0x6b03 +0x455f 0x6b06 +0x4560 0x6b07 +0x4561 0x6b09 +0x4562 0x6b0f +0x4563 0x6b10 +0x4564 0x6b11 +0x4565 0x6b17 +0x4566 0x6b1b +0x4567 0x6b1e +0x4568 0x6b24 +0x4569 0x6b28 +0x456a 0x6b2b +0x456b 0x6b2c +0x456c 0x6b2f +0x456d 0x6b35 +0x456e 0x6b36 +0x456f 0x6b3b +0x4570 0x6b3f +0x4571 0x6b46 +0x4572 0x6b4a +0x4573 0x6b4d +0x4574 0x6b52 +0x4575 0x6b56 +0x4576 0x6b58 +0x4577 0x6b5d +0x4578 0x6b60 +0x4579 0x6b67 +0x457a 0x6b6b +0x457b 0x6b6e +0x457c 0x6b70 +0x457d 0x6b75 +0x457e 0x6b7d +0x4621 0x6b7e +0x4622 0x6b82 +0x4623 0x6b85 +0x4624 0x6b97 +0x4625 0x6b9b +0x4626 0x6b9f +0x4627 0x6ba0 +0x4628 0x6ba2 +0x4629 0x6ba3 +0x462a 0x6ba8 +0x462b 0x6ba9 +0x462c 0x6bac +0x462d 0x6bad +0x462e 0x6bae +0x462f 0x6bb0 +0x4630 0x6bb8 +0x4631 0x6bb9 +0x4632 0x6bbd +0x4633 0x6bbe +0x4634 0x6bc3 +0x4635 0x6bc4 +0x4636 0x6bc9 +0x4637 0x6bcc +0x4638 0x6bd6 +0x4639 0x6bda +0x463a 0x6be1 +0x463b 0x6be3 +0x463c 0x6be6 +0x463d 0x6be7 +0x463e 0x6bee +0x463f 0x6bf1 +0x4640 0x6bf7 +0x4641 0x6bf9 +0x4642 0x6bff +0x4643 0x6c02 +0x4644 0x6c04 +0x4645 0x6c05 +0x4646 0x6c09 +0x4647 0x6c0d +0x4648 0x6c0e +0x4649 0x6c10 +0x464a 0x6c12 +0x464b 0x6c19 +0x464c 0x6c1f +0x464d 0x6c26 +0x464e 0x6c27 +0x464f 0x6c28 +0x4650 0x6c2c +0x4651 0x6c2e +0x4652 0x6c33 +0x4653 0x6c35 +0x4654 0x6c36 +0x4655 0x6c3a +0x4656 0x6c3b +0x4657 0x6c3f +0x4658 0x6c4a +0x4659 0x6c4b +0x465a 0x6c4d +0x465b 0x6c4f +0x465c 0x6c52 +0x465d 0x6c54 +0x465e 0x6c59 +0x465f 0x6c5b +0x4660 0x6c5c +0x4661 0x6c6b +0x4662 0x6c6d +0x4663 0x6c6f +0x4664 0x6c74 +0x4665 0x6c76 +0x4666 0x6c78 +0x4667 0x6c79 +0x4668 0x6c7b +0x4669 0x6c85 +0x466a 0x6c86 +0x466b 0x6c87 +0x466c 0x6c89 +0x466d 0x6c94 +0x466e 0x6c95 +0x466f 0x6c97 +0x4670 0x6c98 +0x4671 0x6c9c +0x4672 0x6c9f +0x4673 0x6cb0 +0x4674 0x6cb2 +0x4675 0x6cb4 +0x4676 0x6cc2 +0x4677 0x6cc6 +0x4678 0x6ccd +0x4679 0x6ccf +0x467a 0x6cd0 +0x467b 0x6cd1 +0x467c 0x6cd2 +0x467d 0x6cd4 +0x467e 0x6cd6 +0x4721 0x6cda +0x4722 0x6cdc +0x4723 0x6ce0 +0x4724 0x6ce7 +0x4725 0x6ce9 +0x4726 0x6ceb +0x4727 0x6cec +0x4728 0x6cee +0x4729 0x6cf2 +0x472a 0x6cf4 +0x472b 0x6d04 +0x472c 0x6d07 +0x472d 0x6d0a +0x472e 0x6d0e +0x472f 0x6d0f +0x4730 0x6d11 +0x4731 0x6d13 +0x4732 0x6d1a +0x4733 0x6d26 +0x4734 0x6d27 +0x4735 0x6d28 +0x4736 0x6c67 +0x4737 0x6d2e +0x4738 0x6d2f +0x4739 0x6d31 +0x473a 0x6d39 +0x473b 0x6d3c +0x473c 0x6d3f +0x473d 0x6d57 +0x473e 0x6d5e +0x473f 0x6d5f +0x4740 0x6d61 +0x4741 0x6d65 +0x4742 0x6d67 +0x4743 0x6d6f +0x4744 0x6d70 +0x4745 0x6d7c +0x4746 0x6d82 +0x4747 0x6d87 +0x4748 0x6d91 +0x4749 0x6d92 +0x474a 0x6d94 +0x474b 0x6d96 +0x474c 0x6d97 +0x474d 0x6d98 +0x474e 0x6daa +0x474f 0x6dac +0x4750 0x6db4 +0x4751 0x6db7 +0x4752 0x6db9 +0x4753 0x6dbd +0x4754 0x6dbf +0x4755 0x6dc4 +0x4756 0x6dc8 +0x4757 0x6dca +0x4758 0x6dce +0x4759 0x6dcf +0x475a 0x6dd6 +0x475b 0x6ddb +0x475c 0x6ddd +0x475d 0x6ddf +0x475e 0x6de0 +0x475f 0x6de2 +0x4760 0x6de5 +0x4761 0x6de9 +0x4762 0x6def +0x4763 0x6df0 +0x4764 0x6df4 +0x4765 0x6df6 +0x4766 0x6dfc +0x4767 0x6e00 +0x4768 0x6e04 +0x4769 0x6e1e +0x476a 0x6e22 +0x476b 0x6e27 +0x476c 0x6e32 +0x476d 0x6e36 +0x476e 0x6e39 +0x476f 0x6e3b +0x4770 0x6e3c +0x4771 0x6e44 +0x4772 0x6e45 +0x4773 0x6e48 +0x4774 0x6e49 +0x4775 0x6e4b +0x4776 0x6e4f +0x4777 0x6e51 +0x4778 0x6e52 +0x4779 0x6e53 +0x477a 0x6e54 +0x477b 0x6e57 +0x477c 0x6e5c +0x477d 0x6e5d +0x477e 0x6e5e +0x4821 0x6e62 +0x4822 0x6e63 +0x4823 0x6e68 +0x4824 0x6e73 +0x4825 0x6e7b +0x4826 0x6e7d +0x4827 0x6e8d +0x4828 0x6e93 +0x4829 0x6e99 +0x482a 0x6ea0 +0x482b 0x6ea7 +0x482c 0x6ead +0x482d 0x6eae +0x482e 0x6eb1 +0x482f 0x6eb3 +0x4830 0x6ebb +0x4831 0x6ebf +0x4832 0x6ec0 +0x4833 0x6ec1 +0x4834 0x6ec3 +0x4835 0x6ec7 +0x4836 0x6ec8 +0x4837 0x6eca +0x4838 0x6ecd +0x4839 0x6ece +0x483a 0x6ecf +0x483b 0x6eeb +0x483c 0x6eed +0x483d 0x6eee +0x483e 0x6ef9 +0x483f 0x6efb +0x4840 0x6efd +0x4841 0x6f04 +0x4842 0x6f08 +0x4843 0x6f0a +0x4844 0x6f0c +0x4845 0x6f0d +0x4846 0x6f16 +0x4847 0x6f18 +0x4848 0x6f1a +0x4849 0x6f1b +0x484a 0x6f26 +0x484b 0x6f29 +0x484c 0x6f2a +0x484d 0x6f2f +0x484e 0x6f30 +0x484f 0x6f33 +0x4850 0x6f36 +0x4851 0x6f3b +0x4852 0x6f3c +0x4853 0x6f2d +0x4854 0x6f4f +0x4855 0x6f51 +0x4856 0x6f52 +0x4857 0x6f53 +0x4858 0x6f57 +0x4859 0x6f59 +0x485a 0x6f5a +0x485b 0x6f5d +0x485c 0x6f5e +0x485d 0x6f61 +0x485e 0x6f62 +0x485f 0x6f68 +0x4860 0x6f6c +0x4861 0x6f7d +0x4862 0x6f7e +0x4863 0x6f83 +0x4864 0x6f87 +0x4865 0x6f88 +0x4866 0x6f8b +0x4867 0x6f8c +0x4868 0x6f8d +0x4869 0x6f90 +0x486a 0x6f92 +0x486b 0x6f93 +0x486c 0x6f94 +0x486d 0x6f96 +0x486e 0x6f9a +0x486f 0x6f9f +0x4870 0x6fa0 +0x4871 0x6fa5 +0x4872 0x6fa6 +0x4873 0x6fa7 +0x4874 0x6fa8 +0x4875 0x6fae +0x4876 0x6faf +0x4877 0x6fb0 +0x4878 0x6fb5 +0x4879 0x6fb6 +0x487a 0x6fbc +0x487b 0x6fc5 +0x487c 0x6fc7 +0x487d 0x6fc8 +0x487e 0x6fca +0x4921 0x6fda +0x4922 0x6fde +0x4923 0x6fe8 +0x4924 0x6fe9 +0x4925 0x6ff0 +0x4926 0x6ff5 +0x4927 0x6ff9 +0x4928 0x6ffc +0x4929 0x6ffd +0x492a 0x7000 +0x492b 0x7005 +0x492c 0x7006 +0x492d 0x7007 +0x492e 0x700d +0x492f 0x7017 +0x4930 0x7020 +0x4931 0x7023 +0x4932 0x702f +0x4933 0x7034 +0x4934 0x7037 +0x4935 0x7039 +0x4936 0x703c +0x4937 0x7043 +0x4938 0x7044 +0x4939 0x7048 +0x493a 0x7049 +0x493b 0x704a +0x493c 0x704b +0x493d 0x7054 +0x493e 0x7055 +0x493f 0x705d +0x4940 0x705e +0x4941 0x704e +0x4942 0x7064 +0x4943 0x7065 +0x4944 0x706c +0x4945 0x706e +0x4946 0x7075 +0x4947 0x7076 +0x4948 0x707e +0x4949 0x7081 +0x494a 0x7085 +0x494b 0x7086 +0x494c 0x7094 +0x494d 0x7095 +0x494e 0x7096 +0x494f 0x7097 +0x4950 0x7098 +0x4951 0x709b +0x4952 0x70a4 +0x4953 0x70ab +0x4954 0x70b0 +0x4955 0x70b1 +0x4956 0x70b4 +0x4957 0x70b7 +0x4958 0x70ca +0x4959 0x70d1 +0x495a 0x70d3 +0x495b 0x70d4 +0x495c 0x70d5 +0x495d 0x70d6 +0x495e 0x70d8 +0x495f 0x70dc +0x4960 0x70e4 +0x4961 0x70fa +0x4962 0x7103 +0x4963 0x7104 +0x4964 0x7105 +0x4965 0x7106 +0x4966 0x7107 +0x4967 0x710b +0x4968 0x710c +0x4969 0x710f +0x496a 0x711e +0x496b 0x7120 +0x496c 0x712b +0x496d 0x712d +0x496e 0x712f +0x496f 0x7130 +0x4970 0x7131 +0x4971 0x7138 +0x4972 0x7141 +0x4973 0x7145 +0x4974 0x7146 +0x4975 0x7147 +0x4976 0x714a +0x4977 0x714b +0x4978 0x7150 +0x4979 0x7152 +0x497a 0x7157 +0x497b 0x715a +0x497c 0x715c +0x497d 0x715e +0x497e 0x7160 +0x4a21 0x7168 +0x4a22 0x7179 +0x4a23 0x7180 +0x4a24 0x7185 +0x4a25 0x7187 +0x4a26 0x718c +0x4a27 0x7192 +0x4a28 0x719a +0x4a29 0x719b +0x4a2a 0x71a0 +0x4a2b 0x71a2 +0x4a2c 0x71af +0x4a2d 0x71b0 +0x4a2e 0x71b2 +0x4a2f 0x71b3 +0x4a30 0x71ba +0x4a31 0x71bf +0x4a32 0x71c0 +0x4a33 0x71c1 +0x4a34 0x71c4 +0x4a35 0x71cb +0x4a36 0x71cc +0x4a37 0x71d3 +0x4a38 0x71d6 +0x4a39 0x71d9 +0x4a3a 0x71da +0x4a3b 0x71dc +0x4a3c 0x71f8 +0x4a3d 0x71fe +0x4a3e 0x7200 +0x4a3f 0x7207 +0x4a40 0x7208 +0x4a41 0x7209 +0x4a42 0x7213 +0x4a43 0x7217 +0x4a44 0x721a +0x4a45 0x721d +0x4a46 0x721f +0x4a47 0x7224 +0x4a48 0x722b +0x4a49 0x722f +0x4a4a 0x7234 +0x4a4b 0x7238 +0x4a4c 0x7239 +0x4a4d 0x7241 +0x4a4e 0x7242 +0x4a4f 0x7243 +0x4a50 0x7245 +0x4a51 0x724e +0x4a52 0x724f +0x4a53 0x7250 +0x4a54 0x7253 +0x4a55 0x7255 +0x4a56 0x7256 +0x4a57 0x725a +0x4a58 0x725c +0x4a59 0x725e +0x4a5a 0x7260 +0x4a5b 0x7263 +0x4a5c 0x7268 +0x4a5d 0x726b +0x4a5e 0x726e +0x4a5f 0x726f +0x4a60 0x7271 +0x4a61 0x7277 +0x4a62 0x7278 +0x4a63 0x727b +0x4a64 0x727c +0x4a65 0x727f +0x4a66 0x7284 +0x4a67 0x7289 +0x4a68 0x728d +0x4a69 0x728e +0x4a6a 0x7293 +0x4a6b 0x729b +0x4a6c 0x72a8 +0x4a6d 0x72ad +0x4a6e 0x72ae +0x4a6f 0x72b1 +0x4a70 0x72b4 +0x4a71 0x72be +0x4a72 0x72c1 +0x4a73 0x72c7 +0x4a74 0x72c9 +0x4a75 0x72cc +0x4a76 0x72d5 +0x4a77 0x72d6 +0x4a78 0x72d8 +0x4a79 0x72df +0x4a7a 0x72e5 +0x4a7b 0x72f3 +0x4a7c 0x72f4 +0x4a7d 0x72fa +0x4a7e 0x72fb +0x4b21 0x72fe +0x4b22 0x7302 +0x4b23 0x7304 +0x4b24 0x7305 +0x4b25 0x7307 +0x4b26 0x730b +0x4b27 0x730d +0x4b28 0x7312 +0x4b29 0x7313 +0x4b2a 0x7318 +0x4b2b 0x7319 +0x4b2c 0x731e +0x4b2d 0x7322 +0x4b2e 0x7324 +0x4b2f 0x7327 +0x4b30 0x7328 +0x4b31 0x732c +0x4b32 0x7331 +0x4b33 0x7332 +0x4b34 0x7335 +0x4b35 0x733a +0x4b36 0x733b +0x4b37 0x733d +0x4b38 0x7343 +0x4b39 0x734d +0x4b3a 0x7350 +0x4b3b 0x7352 +0x4b3c 0x7356 +0x4b3d 0x7358 +0x4b3e 0x735d +0x4b3f 0x735e +0x4b40 0x735f +0x4b41 0x7360 +0x4b42 0x7366 +0x4b43 0x7367 +0x4b44 0x7369 +0x4b45 0x736b +0x4b46 0x736c +0x4b47 0x736e +0x4b48 0x736f +0x4b49 0x7371 +0x4b4a 0x7377 +0x4b4b 0x7379 +0x4b4c 0x737c +0x4b4d 0x7380 +0x4b4e 0x7381 +0x4b4f 0x7383 +0x4b50 0x7385 +0x4b51 0x7386 +0x4b52 0x738e +0x4b53 0x7390 +0x4b54 0x7393 +0x4b55 0x7395 +0x4b56 0x7397 +0x4b57 0x7398 +0x4b58 0x739c +0x4b59 0x739e +0x4b5a 0x739f +0x4b5b 0x73a0 +0x4b5c 0x73a2 +0x4b5d 0x73a5 +0x4b5e 0x73a6 +0x4b5f 0x73aa +0x4b60 0x73ab +0x4b61 0x73ad +0x4b62 0x73b5 +0x4b63 0x73b7 +0x4b64 0x73b9 +0x4b65 0x73bc +0x4b66 0x73bd +0x4b67 0x73bf +0x4b68 0x73c5 +0x4b69 0x73c6 +0x4b6a 0x73c9 +0x4b6b 0x73cb +0x4b6c 0x73cc +0x4b6d 0x73cf +0x4b6e 0x73d2 +0x4b6f 0x73d3 +0x4b70 0x73d6 +0x4b71 0x73d9 +0x4b72 0x73dd +0x4b73 0x73e1 +0x4b74 0x73e3 +0x4b75 0x73e6 +0x4b76 0x73e7 +0x4b77 0x73e9 +0x4b78 0x73f4 +0x4b79 0x73f5 +0x4b7a 0x73f7 +0x4b7b 0x73f9 +0x4b7c 0x73fa +0x4b7d 0x73fb +0x4b7e 0x73fd +0x4c21 0x73ff +0x4c22 0x7400 +0x4c23 0x7401 +0x4c24 0x7404 +0x4c25 0x7407 +0x4c26 0x740a +0x4c27 0x7411 +0x4c28 0x741a +0x4c29 0x741b +0x4c2a 0x7424 +0x4c2b 0x7426 +0x4c2c 0x7428 +0x4c2d 0x7429 +0x4c2e 0x742a +0x4c2f 0x742b +0x4c30 0x742c +0x4c31 0x742d +0x4c32 0x742e +0x4c33 0x742f +0x4c34 0x7430 +0x4c35 0x7431 +0x4c36 0x7439 +0x4c37 0x7440 +0x4c38 0x7443 +0x4c39 0x7444 +0x4c3a 0x7446 +0x4c3b 0x7447 +0x4c3c 0x744b +0x4c3d 0x744d +0x4c3e 0x7451 +0x4c3f 0x7452 +0x4c40 0x7457 +0x4c41 0x745d +0x4c42 0x7462 +0x4c43 0x7466 +0x4c44 0x7467 +0x4c45 0x7468 +0x4c46 0x746b +0x4c47 0x746d +0x4c48 0x746e +0x4c49 0x7471 +0x4c4a 0x7472 +0x4c4b 0x7480 +0x4c4c 0x7481 +0x4c4d 0x7485 +0x4c4e 0x7486 +0x4c4f 0x7487 +0x4c50 0x7489 +0x4c51 0x748f +0x4c52 0x7490 +0x4c53 0x7491 +0x4c54 0x7492 +0x4c55 0x7498 +0x4c56 0x7499 +0x4c57 0x749a +0x4c58 0x749c +0x4c59 0x749f +0x4c5a 0x74a0 +0x4c5b 0x74a1 +0x4c5c 0x74a3 +0x4c5d 0x74a6 +0x4c5e 0x74a8 +0x4c5f 0x74a9 +0x4c60 0x74aa +0x4c61 0x74ab +0x4c62 0x74ae +0x4c63 0x74af +0x4c64 0x74b1 +0x4c65 0x74b2 +0x4c66 0x74b5 +0x4c67 0x74b9 +0x4c68 0x74bb +0x4c69 0x74bf +0x4c6a 0x74c8 +0x4c6b 0x74c9 +0x4c6c 0x74cc +0x4c6d 0x74d0 +0x4c6e 0x74d3 +0x4c6f 0x74d8 +0x4c70 0x74da +0x4c71 0x74db +0x4c72 0x74de +0x4c73 0x74df +0x4c74 0x74e4 +0x4c75 0x74e8 +0x4c76 0x74ea +0x4c77 0x74eb +0x4c78 0x74ef +0x4c79 0x74f4 +0x4c7a 0x74fa +0x4c7b 0x74fb +0x4c7c 0x74fc +0x4c7d 0x74ff +0x4c7e 0x7506 +0x4d21 0x7512 +0x4d22 0x7516 +0x4d23 0x7517 +0x4d24 0x7520 +0x4d25 0x7521 +0x4d26 0x7524 +0x4d27 0x7527 +0x4d28 0x7529 +0x4d29 0x752a +0x4d2a 0x752f +0x4d2b 0x7536 +0x4d2c 0x7539 +0x4d2d 0x753d +0x4d2e 0x753e +0x4d2f 0x753f +0x4d30 0x7540 +0x4d31 0x7543 +0x4d32 0x7547 +0x4d33 0x7548 +0x4d34 0x754e +0x4d35 0x7550 +0x4d36 0x7552 +0x4d37 0x7557 +0x4d38 0x755e +0x4d39 0x755f +0x4d3a 0x7561 +0x4d3b 0x756f +0x4d3c 0x7571 +0x4d3d 0x7579 +0x4d3e 0x757a +0x4d3f 0x757b +0x4d40 0x757c +0x4d41 0x757d +0x4d42 0x757e +0x4d43 0x7581 +0x4d44 0x7585 +0x4d45 0x7590 +0x4d46 0x7592 +0x4d47 0x7593 +0x4d48 0x7595 +0x4d49 0x7599 +0x4d4a 0x759c +0x4d4b 0x75a2 +0x4d4c 0x75a4 +0x4d4d 0x75b4 +0x4d4e 0x75ba +0x4d4f 0x75bf +0x4d50 0x75c0 +0x4d51 0x75c1 +0x4d52 0x75c4 +0x4d53 0x75c6 +0x4d54 0x75cc +0x4d55 0x75ce +0x4d56 0x75cf +0x4d57 0x75d7 +0x4d58 0x75dc +0x4d59 0x75df +0x4d5a 0x75e0 +0x4d5b 0x75e1 +0x4d5c 0x75e4 +0x4d5d 0x75e7 +0x4d5e 0x75ec +0x4d5f 0x75ee +0x4d60 0x75ef +0x4d61 0x75f1 +0x4d62 0x75f9 +0x4d63 0x7600 +0x4d64 0x7602 +0x4d65 0x7603 +0x4d66 0x7604 +0x4d67 0x7607 +0x4d68 0x7608 +0x4d69 0x760a +0x4d6a 0x760c +0x4d6b 0x760f +0x4d6c 0x7612 +0x4d6d 0x7613 +0x4d6e 0x7615 +0x4d6f 0x7616 +0x4d70 0x7619 +0x4d71 0x761b +0x4d72 0x761c +0x4d73 0x761d +0x4d74 0x761e +0x4d75 0x7623 +0x4d76 0x7625 +0x4d77 0x7626 +0x4d78 0x7629 +0x4d79 0x762d +0x4d7a 0x7632 +0x4d7b 0x7633 +0x4d7c 0x7635 +0x4d7d 0x7638 +0x4d7e 0x7639 +0x4e21 0x763a +0x4e22 0x763c +0x4e23 0x764a +0x4e24 0x7640 +0x4e25 0x7641 +0x4e26 0x7643 +0x4e27 0x7644 +0x4e28 0x7645 +0x4e29 0x7649 +0x4e2a 0x764b +0x4e2b 0x7655 +0x4e2c 0x7659 +0x4e2d 0x765f +0x4e2e 0x7664 +0x4e2f 0x7665 +0x4e30 0x766d +0x4e31 0x766e +0x4e32 0x766f +0x4e33 0x7671 +0x4e34 0x7674 +0x4e35 0x7681 +0x4e36 0x7685 +0x4e37 0x768c +0x4e38 0x768d +0x4e39 0x7695 +0x4e3a 0x769b +0x4e3b 0x769c +0x4e3c 0x769d +0x4e3d 0x769f +0x4e3e 0x76a0 +0x4e3f 0x76a2 +0x4e40 0x76a3 +0x4e41 0x76a4 +0x4e42 0x76a5 +0x4e43 0x76a6 +0x4e44 0x76a7 +0x4e45 0x76a8 +0x4e46 0x76aa +0x4e47 0x76ad +0x4e48 0x76bd +0x4e49 0x76c1 +0x4e4a 0x76c5 +0x4e4b 0x76c9 +0x4e4c 0x76cb +0x4e4d 0x76cc +0x4e4e 0x76ce +0x4e4f 0x76d4 +0x4e50 0x76d9 +0x4e51 0x76e0 +0x4e52 0x76e6 +0x4e53 0x76e8 +0x4e54 0x76ec +0x4e55 0x76f0 +0x4e56 0x76f1 +0x4e57 0x76f6 +0x4e58 0x76f9 +0x4e59 0x76fc +0x4e5a 0x7700 +0x4e5b 0x7706 +0x4e5c 0x770a +0x4e5d 0x770e +0x4e5e 0x7712 +0x4e5f 0x7714 +0x4e60 0x7715 +0x4e61 0x7717 +0x4e62 0x7719 +0x4e63 0x771a +0x4e64 0x771c +0x4e65 0x7722 +0x4e66 0x7728 +0x4e67 0x772d +0x4e68 0x772e +0x4e69 0x772f +0x4e6a 0x7734 +0x4e6b 0x7735 +0x4e6c 0x7736 +0x4e6d 0x7739 +0x4e6e 0x773d +0x4e6f 0x773e +0x4e70 0x7742 +0x4e71 0x7745 +0x4e72 0x7746 +0x4e73 0x774a +0x4e74 0x774d +0x4e75 0x774e +0x4e76 0x774f +0x4e77 0x7752 +0x4e78 0x7756 +0x4e79 0x7757 +0x4e7a 0x775c +0x4e7b 0x775e +0x4e7c 0x775f +0x4e7d 0x7760 +0x4e7e 0x7762 +0x4f21 0x7764 +0x4f22 0x7767 +0x4f23 0x776a +0x4f24 0x776c +0x4f25 0x7770 +0x4f26 0x7772 +0x4f27 0x7773 +0x4f28 0x7774 +0x4f29 0x777a +0x4f2a 0x777d +0x4f2b 0x7780 +0x4f2c 0x7784 +0x4f2d 0x778c +0x4f2e 0x778d +0x4f2f 0x7794 +0x4f30 0x7795 +0x4f31 0x7796 +0x4f32 0x779a +0x4f33 0x779f +0x4f34 0x77a2 +0x4f35 0x77a7 +0x4f36 0x77aa +0x4f37 0x77ae +0x4f38 0x77af +0x4f39 0x77b1 +0x4f3a 0x77b5 +0x4f3b 0x77be +0x4f3c 0x77c3 +0x4f3d 0x77c9 +0x4f3e 0x77d1 +0x4f3f 0x77d2 +0x4f40 0x77d5 +0x4f41 0x77d9 +0x4f42 0x77de +0x4f43 0x77df +0x4f44 0x77e0 +0x4f45 0x77e4 +0x4f46 0x77e6 +0x4f47 0x77ea +0x4f48 0x77ec +0x4f49 0x77f0 +0x4f4a 0x77f1 +0x4f4b 0x77f4 +0x4f4c 0x77f8 +0x4f4d 0x77fb +0x4f4e 0x7805 +0x4f4f 0x7806 +0x4f50 0x7809 +0x4f51 0x780d +0x4f52 0x780e +0x4f53 0x7811 +0x4f54 0x781d +0x4f55 0x7821 +0x4f56 0x7822 +0x4f57 0x7823 +0x4f58 0x782d +0x4f59 0x782e +0x4f5a 0x7830 +0x4f5b 0x7835 +0x4f5c 0x7837 +0x4f5d 0x7843 +0x4f5e 0x7844 +0x4f5f 0x7847 +0x4f60 0x7848 +0x4f61 0x784c +0x4f62 0x784e +0x4f63 0x7852 +0x4f64 0x785c +0x4f65 0x785e +0x4f66 0x7860 +0x4f67 0x7861 +0x4f68 0x7863 +0x4f69 0x7864 +0x4f6a 0x7868 +0x4f6b 0x786a +0x4f6c 0x786e +0x4f6d 0x787a +0x4f6e 0x787e +0x4f6f 0x788a +0x4f70 0x788f +0x4f71 0x7894 +0x4f72 0x7898 +0x4f73 0x78a1 +0x4f74 0x789d +0x4f75 0x789e +0x4f76 0x789f +0x4f77 0x78a4 +0x4f78 0x78a8 +0x4f79 0x78ac +0x4f7a 0x78ad +0x4f7b 0x78b0 +0x4f7c 0x78b1 +0x4f7d 0x78b2 +0x4f7e 0x78b3 +0x5021 0x78bb +0x5022 0x78bd +0x5023 0x78bf +0x5024 0x78c7 +0x5025 0x78c8 +0x5026 0x78c9 +0x5027 0x78cc +0x5028 0x78ce +0x5029 0x78d2 +0x502a 0x78d3 +0x502b 0x78d5 +0x502c 0x78d6 +0x502d 0x78e4 +0x502e 0x78db +0x502f 0x78df +0x5030 0x78e0 +0x5031 0x78e1 +0x5032 0x78e6 +0x5033 0x78ea +0x5034 0x78f2 +0x5035 0x78f3 +0x5036 0x7900 +0x5037 0x78f6 +0x5038 0x78f7 +0x5039 0x78fa +0x503a 0x78fb +0x503b 0x78ff +0x503c 0x7906 +0x503d 0x790c +0x503e 0x7910 +0x503f 0x791a +0x5040 0x791c +0x5041 0x791e +0x5042 0x791f +0x5043 0x7920 +0x5044 0x7925 +0x5045 0x7927 +0x5046 0x7929 +0x5047 0x792d +0x5048 0x7931 +0x5049 0x7934 +0x504a 0x7935 +0x504b 0x793b +0x504c 0x793d +0x504d 0x793f +0x504e 0x7944 +0x504f 0x7945 +0x5050 0x7946 +0x5051 0x794a +0x5052 0x794b +0x5053 0x794f +0x5054 0x7951 +0x5055 0x7954 +0x5056 0x7958 +0x5057 0x795b +0x5058 0x795c +0x5059 0x7967 +0x505a 0x7969 +0x505b 0x796b +0x505c 0x7972 +0x505d 0x7979 +0x505e 0x797b +0x505f 0x797c +0x5060 0x797e +0x5061 0x798b +0x5062 0x798c +0x5063 0x7991 +0x5064 0x7993 +0x5065 0x7994 +0x5066 0x7995 +0x5067 0x7996 +0x5068 0x7998 +0x5069 0x799b +0x506a 0x799c +0x506b 0x79a1 +0x506c 0x79a8 +0x506d 0x79a9 +0x506e 0x79ab +0x506f 0x79af +0x5070 0x79b1 +0x5071 0x79b4 +0x5072 0x79b8 +0x5073 0x79bb +0x5074 0x79c2 +0x5075 0x79c4 +0x5076 0x79c7 +0x5077 0x79c8 +0x5078 0x79ca +0x5079 0x79cf +0x507a 0x79d4 +0x507b 0x79d6 +0x507c 0x79da +0x507d 0x79dd +0x507e 0x79de +0x5121 0x79e0 +0x5122 0x79e2 +0x5123 0x79e5 +0x5124 0x79ea +0x5125 0x79eb +0x5126 0x79ed +0x5127 0x79f1 +0x5128 0x79f8 +0x5129 0x79fc +0x512a 0x7a02 +0x512b 0x7a03 +0x512c 0x7a07 +0x512d 0x7a09 +0x512e 0x7a0a +0x512f 0x7a0c +0x5130 0x7a11 +0x5131 0x7a15 +0x5132 0x7a1b +0x5133 0x7a1e +0x5134 0x7a21 +0x5135 0x7a27 +0x5136 0x7a2b +0x5137 0x7a2d +0x5138 0x7a2f +0x5139 0x7a30 +0x513a 0x7a34 +0x513b 0x7a35 +0x513c 0x7a38 +0x513d 0x7a39 +0x513e 0x7a3a +0x513f 0x7a44 +0x5140 0x7a45 +0x5141 0x7a47 +0x5142 0x7a48 +0x5143 0x7a4c +0x5144 0x7a55 +0x5145 0x7a56 +0x5146 0x7a59 +0x5147 0x7a5c +0x5148 0x7a5d +0x5149 0x7a5f +0x514a 0x7a60 +0x514b 0x7a65 +0x514c 0x7a67 +0x514d 0x7a6a +0x514e 0x7a6d +0x514f 0x7a75 +0x5150 0x7a78 +0x5151 0x7a7e +0x5152 0x7a80 +0x5153 0x7a82 +0x5154 0x7a85 +0x5155 0x7a86 +0x5156 0x7a8a +0x5157 0x7a8b +0x5158 0x7a90 +0x5159 0x7a91 +0x515a 0x7a94 +0x515b 0x7a9e +0x515c 0x7aa0 +0x515d 0x7aa3 +0x515e 0x7aac +0x515f 0x7ab3 +0x5160 0x7ab5 +0x5161 0x7ab9 +0x5162 0x7abb +0x5163 0x7abc +0x5164 0x7ac6 +0x5165 0x7ac9 +0x5166 0x7acc +0x5167 0x7ace +0x5168 0x7ad1 +0x5169 0x7adb +0x516a 0x7ae8 +0x516b 0x7ae9 +0x516c 0x7aeb +0x516d 0x7aec +0x516e 0x7af1 +0x516f 0x7af4 +0x5170 0x7afb +0x5171 0x7afd +0x5172 0x7afe +0x5173 0x7b07 +0x5174 0x7b14 +0x5175 0x7b1f +0x5176 0x7b23 +0x5177 0x7b27 +0x5178 0x7b29 +0x5179 0x7b2a +0x517a 0x7b2b +0x517b 0x7b2d +0x517c 0x7b2e +0x517d 0x7b2f +0x517e 0x7b30 +0x5221 0x7b31 +0x5222 0x7b34 +0x5223 0x7b3d +0x5224 0x7b3f +0x5225 0x7b40 +0x5226 0x7b41 +0x5227 0x7b47 +0x5228 0x7b4e +0x5229 0x7b55 +0x522a 0x7b60 +0x522b 0x7b64 +0x522c 0x7b66 +0x522d 0x7b69 +0x522e 0x7b6a +0x522f 0x7b6d +0x5230 0x7b6f +0x5231 0x7b72 +0x5232 0x7b73 +0x5233 0x7b77 +0x5234 0x7b84 +0x5235 0x7b89 +0x5236 0x7b8e +0x5237 0x7b90 +0x5238 0x7b91 +0x5239 0x7b96 +0x523a 0x7b9b +0x523b 0x7b9e +0x523c 0x7ba0 +0x523d 0x7ba5 +0x523e 0x7bac +0x523f 0x7baf +0x5240 0x7bb0 +0x5241 0x7bb2 +0x5242 0x7bb5 +0x5243 0x7bb6 +0x5244 0x7bba +0x5245 0x7bbb +0x5246 0x7bbc +0x5247 0x7bbd +0x5248 0x7bc2 +0x5249 0x7bc5 +0x524a 0x7bc8 +0x524b 0x7bca +0x524c 0x7bd4 +0x524d 0x7bd6 +0x524e 0x7bd7 +0x524f 0x7bd9 +0x5250 0x7bda +0x5251 0x7bdb +0x5252 0x7be8 +0x5253 0x7bea +0x5254 0x7bf2 +0x5255 0x7bf4 +0x5256 0x7bf5 +0x5257 0x7bf8 +0x5258 0x7bf9 +0x5259 0x7bfa +0x525a 0x7bfc +0x525b 0x7bfe +0x525c 0x7c01 +0x525d 0x7c02 +0x525e 0x7c03 +0x525f 0x7c04 +0x5260 0x7c06 +0x5261 0x7c09 +0x5262 0x7c0b +0x5263 0x7c0c +0x5264 0x7c0e +0x5265 0x7c0f +0x5266 0x7c19 +0x5267 0x7c1b +0x5268 0x7c20 +0x5269 0x7c25 +0x526a 0x7c26 +0x526b 0x7c28 +0x526c 0x7c2c +0x526d 0x7c31 +0x526e 0x7c33 +0x526f 0x7c34 +0x5270 0x7c36 +0x5271 0x7c39 +0x5272 0x7c3a +0x5273 0x7c46 +0x5274 0x7c4a +0x5275 0x7c55 +0x5276 0x7c51 +0x5277 0x7c52 +0x5278 0x7c53 +0x5279 0x7c59 +0x527a 0x7c5a +0x527b 0x7c5b +0x527c 0x7c5c +0x527d 0x7c5d +0x527e 0x7c5e +0x5321 0x7c61 +0x5322 0x7c63 +0x5323 0x7c67 +0x5324 0x7c69 +0x5325 0x7c6d +0x5326 0x7c6e +0x5327 0x7c70 +0x5328 0x7c72 +0x5329 0x7c79 +0x532a 0x7c7c +0x532b 0x7c7d +0x532c 0x7c86 +0x532d 0x7c87 +0x532e 0x7c8f +0x532f 0x7c94 +0x5330 0x7c9e +0x5331 0x7ca0 +0x5332 0x7ca6 +0x5333 0x7cb0 +0x5334 0x7cb6 +0x5335 0x7cb7 +0x5336 0x7cba +0x5337 0x7cbb +0x5338 0x7cbc +0x5339 0x7cbf +0x533a 0x7cc4 +0x533b 0x7cc7 +0x533c 0x7cc8 +0x533d 0x7cc9 +0x533e 0x7ccd +0x533f 0x7ccf +0x5340 0x7cd3 +0x5341 0x7cd4 +0x5342 0x7cd5 +0x5343 0x7cd7 +0x5344 0x7cd9 +0x5345 0x7cda +0x5346 0x7cdd +0x5347 0x7ce6 +0x5348 0x7ce9 +0x5349 0x7ceb +0x534a 0x7cf5 +0x534b 0x7d03 +0x534c 0x7d07 +0x534d 0x7d08 +0x534e 0x7d09 +0x534f 0x7d0f +0x5350 0x7d11 +0x5351 0x7d12 +0x5352 0x7d13 +0x5353 0x7d16 +0x5354 0x7d1d +0x5355 0x7d1e +0x5356 0x7d23 +0x5357 0x7d26 +0x5358 0x7d2a +0x5359 0x7d2d +0x535a 0x7d31 +0x535b 0x7d3c +0x535c 0x7d3d +0x535d 0x7d3e +0x535e 0x7d40 +0x535f 0x7d41 +0x5360 0x7d47 +0x5361 0x7d48 +0x5362 0x7d4d +0x5363 0x7d51 +0x5364 0x7d53 +0x5365 0x7d57 +0x5366 0x7d59 +0x5367 0x7d5a +0x5368 0x7d5c +0x5369 0x7d5d +0x536a 0x7d65 +0x536b 0x7d67 +0x536c 0x7d6a +0x536d 0x7d70 +0x536e 0x7d78 +0x536f 0x7d7a +0x5370 0x7d7b +0x5371 0x7d7f +0x5372 0x7d81 +0x5373 0x7d82 +0x5374 0x7d83 +0x5375 0x7d85 +0x5376 0x7d86 +0x5377 0x7d88 +0x5378 0x7d8b +0x5379 0x7d8c +0x537a 0x7d8d +0x537b 0x7d91 +0x537c 0x7d96 +0x537d 0x7d97 +0x537e 0x7d9d +0x5421 0x7d9e +0x5422 0x7da6 +0x5423 0x7da7 +0x5424 0x7daa +0x5425 0x7db3 +0x5426 0x7db6 +0x5427 0x7db7 +0x5428 0x7db9 +0x5429 0x7dc2 +0x542a 0x7dc3 +0x542b 0x7dc4 +0x542c 0x7dc5 +0x542d 0x7dc6 +0x542e 0x7dcc +0x542f 0x7dcd +0x5430 0x7dce +0x5431 0x7dd7 +0x5432 0x7dd9 +0x5433 0x7e00 +0x5434 0x7de2 +0x5435 0x7de5 +0x5436 0x7de6 +0x5437 0x7dea +0x5438 0x7deb +0x5439 0x7ded +0x543a 0x7df1 +0x543b 0x7df5 +0x543c 0x7df6 +0x543d 0x7df9 +0x543e 0x7dfa +0x543f 0x7e08 +0x5440 0x7e10 +0x5441 0x7e11 +0x5442 0x7e15 +0x5443 0x7e17 +0x5444 0x7e1c +0x5445 0x7e1d +0x5446 0x7e20 +0x5447 0x7e27 +0x5448 0x7e28 +0x5449 0x7e2c +0x544a 0x7e2d +0x544b 0x7e2f +0x544c 0x7e33 +0x544d 0x7e36 +0x544e 0x7e3f +0x544f 0x7e44 +0x5450 0x7e45 +0x5451 0x7e47 +0x5452 0x7e4e +0x5453 0x7e50 +0x5454 0x7e52 +0x5455 0x7e58 +0x5456 0x7e5f +0x5457 0x7e61 +0x5458 0x7e62 +0x5459 0x7e65 +0x545a 0x7e6b +0x545b 0x7e6e +0x545c 0x7e6f +0x545d 0x7e73 +0x545e 0x7e78 +0x545f 0x7e7e +0x5460 0x7e81 +0x5461 0x7e86 +0x5462 0x7e87 +0x5463 0x7e8a +0x5464 0x7e8d +0x5465 0x7e91 +0x5466 0x7e95 +0x5467 0x7e98 +0x5468 0x7e9a +0x5469 0x7e9d +0x546a 0x7e9e +0x546b 0x7f3c +0x546c 0x7f3b +0x546d 0x7f3d +0x546e 0x7f3e +0x546f 0x7f3f +0x5470 0x7f43 +0x5471 0x7f44 +0x5472 0x7f47 +0x5473 0x7f4f +0x5474 0x7f52 +0x5475 0x7f53 +0x5476 0x7f5b +0x5477 0x7f5c +0x5478 0x7f5d +0x5479 0x7f61 +0x547a 0x7f63 +0x547b 0x7f64 +0x547c 0x7f65 +0x547d 0x7f66 +0x547e 0x7f6d +0x5521 0x7f71 +0x5522 0x7f7d +0x5523 0x7f7e +0x5524 0x7f7f +0x5525 0x7f80 +0x5526 0x7f8b +0x5527 0x7f8d +0x5528 0x7f8f +0x5529 0x7f90 +0x552a 0x7f91 +0x552b 0x7f96 +0x552c 0x7f97 +0x552d 0x7f9c +0x552e 0x7fa1 +0x552f 0x7fa2 +0x5530 0x7fa6 +0x5531 0x7faa +0x5532 0x7fad +0x5533 0x7fb4 +0x5534 0x7fbc +0x5535 0x7fbf +0x5536 0x7fc0 +0x5537 0x7fc3 +0x5538 0x7fc8 +0x5539 0x7fce +0x553a 0x7fcf +0x553b 0x7fdb +0x553c 0x7fdf +0x553d 0x7fe3 +0x553e 0x7fe5 +0x553f 0x7fe8 +0x5540 0x7fec +0x5541 0x7fee +0x5542 0x7fef +0x5543 0x7ff2 +0x5544 0x7ffa +0x5545 0x7ffd +0x5546 0x7ffe +0x5547 0x7fff +0x5548 0x8007 +0x5549 0x8008 +0x554a 0x800a +0x554b 0x800d +0x554c 0x800e +0x554d 0x800f +0x554e 0x8011 +0x554f 0x8013 +0x5550 0x8014 +0x5551 0x8016 +0x5552 0x801d +0x5553 0x801e +0x5554 0x801f +0x5555 0x8020 +0x5556 0x8024 +0x5557 0x8026 +0x5558 0x802c +0x5559 0x802e +0x555a 0x8030 +0x555b 0x8034 +0x555c 0x8035 +0x555d 0x8037 +0x555e 0x8039 +0x555f 0x803a +0x5560 0x803c +0x5561 0x803e +0x5562 0x8040 +0x5563 0x8044 +0x5564 0x8060 +0x5565 0x8064 +0x5566 0x8066 +0x5567 0x806d +0x5568 0x8071 +0x5569 0x8075 +0x556a 0x8081 +0x556b 0x8088 +0x556c 0x808e +0x556d 0x809c +0x556e 0x809e +0x556f 0x80a6 +0x5570 0x80a7 +0x5571 0x80ab +0x5572 0x80b8 +0x5573 0x80b9 +0x5574 0x80c8 +0x5575 0x80cd +0x5576 0x80cf +0x5577 0x80d2 +0x5578 0x80d4 +0x5579 0x80d5 +0x557a 0x80d7 +0x557b 0x80d8 +0x557c 0x80e0 +0x557d 0x80ed +0x557e 0x80ee +0x5621 0x80f0 +0x5622 0x80f2 +0x5623 0x80f3 +0x5624 0x80f6 +0x5625 0x80f9 +0x5626 0x80fa +0x5627 0x80fe +0x5628 0x8103 +0x5629 0x810b +0x562a 0x8116 +0x562b 0x8117 +0x562c 0x8118 +0x562d 0x811c +0x562e 0x811e +0x562f 0x8120 +0x5630 0x8124 +0x5631 0x8127 +0x5632 0x812c +0x5633 0x8130 +0x5634 0x8135 +0x5635 0x813a +0x5636 0x813c +0x5637 0x8145 +0x5638 0x8147 +0x5639 0x814a +0x563a 0x814c +0x563b 0x8152 +0x563c 0x8157 +0x563d 0x8160 +0x563e 0x8161 +0x563f 0x8167 +0x5640 0x8168 +0x5641 0x8169 +0x5642 0x816d +0x5643 0x816f +0x5644 0x8177 +0x5645 0x8181 +0x5646 0x8190 +0x5647 0x8184 +0x5648 0x8185 +0x5649 0x8186 +0x564a 0x818b +0x564b 0x818e +0x564c 0x8196 +0x564d 0x8198 +0x564e 0x819b +0x564f 0x819e +0x5650 0x81a2 +0x5651 0x81ae +0x5652 0x81b2 +0x5653 0x81b4 +0x5654 0x81bb +0x5655 0x81cb +0x5656 0x81c3 +0x5657 0x81c5 +0x5658 0x81ca +0x5659 0x81ce +0x565a 0x81cf +0x565b 0x81d5 +0x565c 0x81d7 +0x565d 0x81db +0x565e 0x81dd +0x565f 0x81de +0x5660 0x81e1 +0x5661 0x81e4 +0x5662 0x81eb +0x5663 0x81ec +0x5664 0x81f0 +0x5665 0x81f1 +0x5666 0x81f2 +0x5667 0x81f5 +0x5668 0x81f6 +0x5669 0x81f8 +0x566a 0x81f9 +0x566b 0x81fd +0x566c 0x81ff +0x566d 0x8200 +0x566e 0x8203 +0x566f 0x820f +0x5670 0x8213 +0x5671 0x8214 +0x5672 0x8219 +0x5673 0x821a +0x5674 0x821d +0x5675 0x8221 +0x5676 0x8222 +0x5677 0x8228 +0x5678 0x8232 +0x5679 0x8234 +0x567a 0x823a +0x567b 0x8243 +0x567c 0x8244 +0x567d 0x8245 +0x567e 0x8246 +0x5721 0x824b +0x5722 0x824e +0x5723 0x824f +0x5724 0x8251 +0x5725 0x8256 +0x5726 0x825c +0x5727 0x8260 +0x5728 0x8263 +0x5729 0x8267 +0x572a 0x826d +0x572b 0x8274 +0x572c 0x827b +0x572d 0x827d +0x572e 0x827f +0x572f 0x8280 +0x5730 0x8281 +0x5731 0x8283 +0x5732 0x8284 +0x5733 0x8287 +0x5734 0x8289 +0x5735 0x828a +0x5736 0x828e +0x5737 0x8291 +0x5738 0x8294 +0x5739 0x8296 +0x573a 0x8298 +0x573b 0x829a +0x573c 0x829b +0x573d 0x82a0 +0x573e 0x82a1 +0x573f 0x82a3 +0x5740 0x82a4 +0x5741 0x82a7 +0x5742 0x82a8 +0x5743 0x82a9 +0x5744 0x82aa +0x5745 0x82ae +0x5746 0x82b0 +0x5747 0x82b2 +0x5748 0x82b4 +0x5749 0x82b7 +0x574a 0x82ba +0x574b 0x82bc +0x574c 0x82be +0x574d 0x82bf +0x574e 0x82c6 +0x574f 0x82d0 +0x5750 0x82d5 +0x5751 0x82da +0x5752 0x82e0 +0x5753 0x82e2 +0x5754 0x82e4 +0x5755 0x82e8 +0x5756 0x82ea +0x5757 0x82ed +0x5758 0x82ef +0x5759 0x82f6 +0x575a 0x82f7 +0x575b 0x82fd +0x575c 0x82fe +0x575d 0x8300 +0x575e 0x8301 +0x575f 0x8307 +0x5760 0x8308 +0x5761 0x830a +0x5762 0x830b +0x5763 0x8354 +0x5764 0x831b +0x5765 0x831d +0x5766 0x831e +0x5767 0x831f +0x5768 0x8321 +0x5769 0x8322 +0x576a 0x832c +0x576b 0x832d +0x576c 0x832e +0x576d 0x8330 +0x576e 0x8333 +0x576f 0x8337 +0x5770 0x833a +0x5771 0x833c +0x5772 0x833d +0x5773 0x8342 +0x5774 0x8343 +0x5775 0x8344 +0x5776 0x8347 +0x5777 0x834d +0x5778 0x834e +0x5779 0x8351 +0x577a 0x8355 +0x577b 0x8356 +0x577c 0x8357 +0x577d 0x8370 +0x577e 0x8378 +0x5821 0x837d +0x5822 0x837f +0x5823 0x8380 +0x5824 0x8382 +0x5825 0x8384 +0x5826 0x8386 +0x5827 0x838d +0x5828 0x8392 +0x5829 0x8394 +0x582a 0x8395 +0x582b 0x8398 +0x582c 0x8399 +0x582d 0x839b +0x582e 0x839c +0x582f 0x839d +0x5830 0x83a6 +0x5831 0x83a7 +0x5832 0x83a9 +0x5833 0x83ac +0x5834 0x83be +0x5835 0x83bf +0x5836 0x83c0 +0x5837 0x83c7 +0x5838 0x83c9 +0x5839 0x83cf +0x583a 0x83d0 +0x583b 0x83d1 +0x583c 0x83d4 +0x583d 0x83dd +0x583e 0x8353 +0x583f 0x83e8 +0x5840 0x83ea +0x5841 0x83f6 +0x5842 0x83f8 +0x5843 0x83f9 +0x5844 0x83fc +0x5845 0x8401 +0x5846 0x8406 +0x5847 0x840a +0x5848 0x840f +0x5849 0x8411 +0x584a 0x8415 +0x584b 0x8419 +0x584c 0x83ad +0x584d 0x842f +0x584e 0x8439 +0x584f 0x8445 +0x5850 0x8447 +0x5851 0x8448 +0x5852 0x844a +0x5853 0x844d +0x5854 0x844f +0x5855 0x8451 +0x5856 0x8452 +0x5857 0x8456 +0x5858 0x8458 +0x5859 0x8459 +0x585a 0x845a +0x585b 0x845c +0x585c 0x8460 +0x585d 0x8464 +0x585e 0x8465 +0x585f 0x8467 +0x5860 0x846a +0x5861 0x8470 +0x5862 0x8473 +0x5863 0x8474 +0x5864 0x8476 +0x5865 0x8478 +0x5866 0x847c +0x5867 0x847d +0x5868 0x8481 +0x5869 0x8485 +0x586a 0x8492 +0x586b 0x8493 +0x586c 0x8495 +0x586d 0x849e +0x586e 0x84a6 +0x586f 0x84a8 +0x5870 0x84a9 +0x5871 0x84aa +0x5872 0x84af +0x5873 0x84b1 +0x5874 0x84b4 +0x5875 0x84ba +0x5876 0x84bd +0x5877 0x84be +0x5878 0x84c0 +0x5879 0x84c2 +0x587a 0x84c7 +0x587b 0x84c8 +0x587c 0x84cc +0x587d 0x84cf +0x587e 0x84d3 +0x5921 0x84dc +0x5922 0x84e7 +0x5923 0x84ea +0x5924 0x84ef +0x5925 0x84f0 +0x5926 0x84f1 +0x5927 0x84f2 +0x5928 0x84f7 +0x5929 0x8532 +0x592a 0x84fa +0x592b 0x84fb +0x592c 0x84fd +0x592d 0x8502 +0x592e 0x8503 +0x592f 0x8507 +0x5930 0x850c +0x5931 0x850e +0x5932 0x8510 +0x5933 0x851c +0x5934 0x851e +0x5935 0x8522 +0x5936 0x8523 +0x5937 0x8524 +0x5938 0x8525 +0x5939 0x8527 +0x593a 0x852a +0x593b 0x852b +0x593c 0x852f +0x593d 0x8533 +0x593e 0x8534 +0x593f 0x8536 +0x5940 0x853f +0x5941 0x8546 +0x5942 0x854f +0x5943 0x8550 +0x5944 0x8551 +0x5945 0x8552 +0x5946 0x8553 +0x5947 0x8556 +0x5948 0x8559 +0x5949 0x855c +0x594a 0x855d +0x594b 0x855e +0x594c 0x855f +0x594d 0x8560 +0x594e 0x8561 +0x594f 0x8562 +0x5950 0x8564 +0x5951 0x856b +0x5952 0x856f +0x5953 0x8579 +0x5954 0x857a +0x5955 0x857b +0x5956 0x857d +0x5957 0x857f +0x5958 0x8581 +0x5959 0x8585 +0x595a 0x8586 +0x595b 0x8589 +0x595c 0x858b +0x595d 0x858c +0x595e 0x858f +0x595f 0x8593 +0x5960 0x8598 +0x5961 0x859d +0x5962 0x859f +0x5963 0x85a0 +0x5964 0x85a2 +0x5965 0x85a5 +0x5966 0x85a7 +0x5967 0x85b4 +0x5968 0x85b6 +0x5969 0x85b7 +0x596a 0x85b8 +0x596b 0x85bc +0x596c 0x85bd +0x596d 0x85be +0x596e 0x85bf +0x596f 0x85c2 +0x5970 0x85c7 +0x5971 0x85ca +0x5972 0x85cb +0x5973 0x85ce +0x5974 0x85ad +0x5975 0x85d8 +0x5976 0x85da +0x5977 0x85df +0x5978 0x85e0 +0x5979 0x85e6 +0x597a 0x85e8 +0x597b 0x85ed +0x597c 0x85f3 +0x597d 0x85f6 +0x597e 0x85fc +0x5a21 0x85ff +0x5a22 0x8600 +0x5a23 0x8604 +0x5a24 0x8605 +0x5a25 0x860d +0x5a26 0x860e +0x5a27 0x8610 +0x5a28 0x8611 +0x5a29 0x8612 +0x5a2a 0x8618 +0x5a2b 0x8619 +0x5a2c 0x861b +0x5a2d 0x861e +0x5a2e 0x8621 +0x5a2f 0x8627 +0x5a30 0x8629 +0x5a31 0x8636 +0x5a32 0x8638 +0x5a33 0x863a +0x5a34 0x863c +0x5a35 0x863d +0x5a36 0x8640 +0x5a37 0x8642 +0x5a38 0x8646 +0x5a39 0x8652 +0x5a3a 0x8653 +0x5a3b 0x8656 +0x5a3c 0x8657 +0x5a3d 0x8658 +0x5a3e 0x8659 +0x5a3f 0x865d +0x5a40 0x8660 +0x5a41 0x8661 +0x5a42 0x8662 +0x5a43 0x8663 +0x5a44 0x8664 +0x5a45 0x8669 +0x5a46 0x866c +0x5a47 0x866f +0x5a48 0x8675 +0x5a49 0x8676 +0x5a4a 0x8677 +0x5a4b 0x867a +0x5a4c 0x868d +0x5a4d 0x8691 +0x5a4e 0x8696 +0x5a4f 0x8698 +0x5a50 0x869a +0x5a51 0x869c +0x5a52 0x86a1 +0x5a53 0x86a6 +0x5a54 0x86a7 +0x5a55 0x86a8 +0x5a56 0x86ad +0x5a57 0x86b1 +0x5a58 0x86b3 +0x5a59 0x86b4 +0x5a5a 0x86b5 +0x5a5b 0x86b7 +0x5a5c 0x86b8 +0x5a5d 0x86b9 +0x5a5e 0x86bf +0x5a5f 0x86c0 +0x5a60 0x86c1 +0x5a61 0x86c3 +0x5a62 0x86c5 +0x5a63 0x86d1 +0x5a64 0x86d2 +0x5a65 0x86d5 +0x5a66 0x86d7 +0x5a67 0x86da +0x5a68 0x86dc +0x5a69 0x86e0 +0x5a6a 0x86e3 +0x5a6b 0x86e5 +0x5a6c 0x86e7 +0x5a6d 0x8688 +0x5a6e 0x86fa +0x5a6f 0x86fc +0x5a70 0x86fd +0x5a71 0x8704 +0x5a72 0x8705 +0x5a73 0x8707 +0x5a74 0x870b +0x5a75 0x870e +0x5a76 0x870f +0x5a77 0x8710 +0x5a78 0x8713 +0x5a79 0x8714 +0x5a7a 0x8719 +0x5a7b 0x871e +0x5a7c 0x871f +0x5a7d 0x8721 +0x5a7e 0x8723 +0x5b21 0x8728 +0x5b22 0x872e +0x5b23 0x872f +0x5b24 0x8731 +0x5b25 0x8732 +0x5b26 0x8739 +0x5b27 0x873a +0x5b28 0x873c +0x5b29 0x873d +0x5b2a 0x873e +0x5b2b 0x8740 +0x5b2c 0x8743 +0x5b2d 0x8745 +0x5b2e 0x874d +0x5b2f 0x8758 +0x5b30 0x875d +0x5b31 0x8761 +0x5b32 0x8764 +0x5b33 0x8765 +0x5b34 0x876f +0x5b35 0x8771 +0x5b36 0x8772 +0x5b37 0x877b +0x5b38 0x8783 +0x5b39 0x8784 +0x5b3a 0x8785 +0x5b3b 0x8786 +0x5b3c 0x8787 +0x5b3d 0x8788 +0x5b3e 0x8789 +0x5b3f 0x878b +0x5b40 0x878c +0x5b41 0x8790 +0x5b42 0x8793 +0x5b43 0x8795 +0x5b44 0x8797 +0x5b45 0x8798 +0x5b46 0x8799 +0x5b47 0x879e +0x5b48 0x87a0 +0x5b49 0x87a3 +0x5b4a 0x87a7 +0x5b4b 0x87ac +0x5b4c 0x87ad +0x5b4d 0x87ae +0x5b4e 0x87b1 +0x5b4f 0x87b5 +0x5b50 0x87be +0x5b51 0x87bf +0x5b52 0x87c1 +0x5b53 0x87c8 +0x5b54 0x87c9 +0x5b55 0x87ca +0x5b56 0x87ce +0x5b57 0x87d5 +0x5b58 0x87d6 +0x5b59 0x87d9 +0x5b5a 0x87da +0x5b5b 0x87dc +0x5b5c 0x87df +0x5b5d 0x87e2 +0x5b5e 0x87e3 +0x5b5f 0x87e4 +0x5b60 0x87ea +0x5b61 0x87eb +0x5b62 0x87ed +0x5b63 0x87f1 +0x5b64 0x87f3 +0x5b65 0x87f8 +0x5b66 0x87fa +0x5b67 0x87ff +0x5b68 0x8801 +0x5b69 0x8803 +0x5b6a 0x8806 +0x5b6b 0x8809 +0x5b6c 0x880a +0x5b6d 0x880b +0x5b6e 0x8810 +0x5b6f 0x8819 +0x5b70 0x8812 +0x5b71 0x8813 +0x5b72 0x8814 +0x5b73 0x8818 +0x5b74 0x881a +0x5b75 0x881b +0x5b76 0x881c +0x5b77 0x881e +0x5b78 0x881f +0x5b79 0x8828 +0x5b7a 0x882d +0x5b7b 0x882e +0x5b7c 0x8830 +0x5b7d 0x8832 +0x5b7e 0x8835 +0x5c21 0x883a +0x5c22 0x883c +0x5c23 0x8841 +0x5c24 0x8843 +0x5c25 0x8845 +0x5c26 0x8848 +0x5c27 0x8849 +0x5c28 0x884a +0x5c29 0x884b +0x5c2a 0x884e +0x5c2b 0x8851 +0x5c2c 0x8855 +0x5c2d 0x8856 +0x5c2e 0x8858 +0x5c2f 0x885a +0x5c30 0x885c +0x5c31 0x885f +0x5c32 0x8860 +0x5c33 0x8864 +0x5c34 0x8869 +0x5c35 0x8871 +0x5c36 0x8879 +0x5c37 0x887b +0x5c38 0x8880 +0x5c39 0x8898 +0x5c3a 0x889a +0x5c3b 0x889b +0x5c3c 0x889c +0x5c3d 0x889f +0x5c3e 0x88a0 +0x5c3f 0x88a8 +0x5c40 0x88aa +0x5c41 0x88ba +0x5c42 0x88bd +0x5c43 0x88be +0x5c44 0x88c0 +0x5c45 0x88ca +0x5c46 0x88cb +0x5c47 0x88cc +0x5c48 0x88cd +0x5c49 0x88ce +0x5c4a 0x88d1 +0x5c4b 0x88d2 +0x5c4c 0x88d3 +0x5c4d 0x88db +0x5c4e 0x88de +0x5c4f 0x88e7 +0x5c50 0x88ef +0x5c51 0x88f0 +0x5c52 0x88f1 +0x5c53 0x88f5 +0x5c54 0x88f7 +0x5c55 0x8901 +0x5c56 0x8906 +0x5c57 0x890d +0x5c58 0x890e +0x5c59 0x890f +0x5c5a 0x8915 +0x5c5b 0x8916 +0x5c5c 0x8918 +0x5c5d 0x8919 +0x5c5e 0x891a +0x5c5f 0x891c +0x5c60 0x8920 +0x5c61 0x8926 +0x5c62 0x8927 +0x5c63 0x8928 +0x5c64 0x8930 +0x5c65 0x8931 +0x5c66 0x8932 +0x5c67 0x8935 +0x5c68 0x8939 +0x5c69 0x893a +0x5c6a 0x893e +0x5c6b 0x8940 +0x5c6c 0x8942 +0x5c6d 0x8945 +0x5c6e 0x8946 +0x5c6f 0x8949 +0x5c70 0x894f +0x5c71 0x8952 +0x5c72 0x8957 +0x5c73 0x895a +0x5c74 0x895b +0x5c75 0x895c +0x5c76 0x8961 +0x5c77 0x8962 +0x5c78 0x8963 +0x5c79 0x896b +0x5c7a 0x896e +0x5c7b 0x8970 +0x5c7c 0x8973 +0x5c7d 0x8975 +0x5c7e 0x897a +0x5d21 0x897b +0x5d22 0x897c +0x5d23 0x897d +0x5d24 0x8989 +0x5d25 0x898d +0x5d26 0x8990 +0x5d27 0x8994 +0x5d28 0x8995 +0x5d29 0x899b +0x5d2a 0x899c +0x5d2b 0x899f +0x5d2c 0x89a0 +0x5d2d 0x89a5 +0x5d2e 0x89b0 +0x5d2f 0x89b4 +0x5d30 0x89b5 +0x5d31 0x89b6 +0x5d32 0x89b7 +0x5d33 0x89bc +0x5d34 0x89d4 +0x5d35 0x89d5 +0x5d36 0x89d6 +0x5d37 0x89d7 +0x5d38 0x89d8 +0x5d39 0x89e5 +0x5d3a 0x89e9 +0x5d3b 0x89eb +0x5d3c 0x89ed +0x5d3d 0x89f1 +0x5d3e 0x89f3 +0x5d3f 0x89f6 +0x5d40 0x89f9 +0x5d41 0x89fd +0x5d42 0x89ff +0x5d43 0x8a04 +0x5d44 0x8a05 +0x5d45 0x8a07 +0x5d46 0x8a0f +0x5d47 0x8a11 +0x5d48 0x8a12 +0x5d49 0x8a14 +0x5d4a 0x8a15 +0x5d4b 0x8a1e +0x5d4c 0x8a20 +0x5d4d 0x8a22 +0x5d4e 0x8a24 +0x5d4f 0x8a26 +0x5d50 0x8a2b +0x5d51 0x8a2c +0x5d52 0x8a2f +0x5d53 0x8a35 +0x5d54 0x8a37 +0x5d55 0x8a3d +0x5d56 0x8a3e +0x5d57 0x8a40 +0x5d58 0x8a43 +0x5d59 0x8a45 +0x5d5a 0x8a47 +0x5d5b 0x8a49 +0x5d5c 0x8a4d +0x5d5d 0x8a4e +0x5d5e 0x8a53 +0x5d5f 0x8a56 +0x5d60 0x8a57 +0x5d61 0x8a58 +0x5d62 0x8a5c +0x5d63 0x8a5d +0x5d64 0x8a61 +0x5d65 0x8a65 +0x5d66 0x8a67 +0x5d67 0x8a75 +0x5d68 0x8a76 +0x5d69 0x8a77 +0x5d6a 0x8a79 +0x5d6b 0x8a7a +0x5d6c 0x8a7b +0x5d6d 0x8a7e +0x5d6e 0x8a7f +0x5d6f 0x8a80 +0x5d70 0x8a83 +0x5d71 0x8a86 +0x5d72 0x8a8b +0x5d73 0x8a8f +0x5d74 0x8a90 +0x5d75 0x8a92 +0x5d76 0x8a96 +0x5d77 0x8a97 +0x5d78 0x8a99 +0x5d79 0x8a9f +0x5d7a 0x8aa7 +0x5d7b 0x8aa9 +0x5d7c 0x8aae +0x5d7d 0x8aaf +0x5d7e 0x8ab3 +0x5e21 0x8ab6 +0x5e22 0x8ab7 +0x5e23 0x8abb +0x5e24 0x8abe +0x5e25 0x8ac3 +0x5e26 0x8ac6 +0x5e27 0x8ac8 +0x5e28 0x8ac9 +0x5e29 0x8aca +0x5e2a 0x8ad1 +0x5e2b 0x8ad3 +0x5e2c 0x8ad4 +0x5e2d 0x8ad5 +0x5e2e 0x8ad7 +0x5e2f 0x8add +0x5e30 0x8adf +0x5e31 0x8aec +0x5e32 0x8af0 +0x5e33 0x8af4 +0x5e34 0x8af5 +0x5e35 0x8af6 +0x5e36 0x8afc +0x5e37 0x8aff +0x5e38 0x8b05 +0x5e39 0x8b06 +0x5e3a 0x8b0b +0x5e3b 0x8b11 +0x5e3c 0x8b1c +0x5e3d 0x8b1e +0x5e3e 0x8b1f +0x5e3f 0x8b0a +0x5e40 0x8b2d +0x5e41 0x8b30 +0x5e42 0x8b37 +0x5e43 0x8b3c +0x5e44 0x8b42 +0x5e45 0x8b43 +0x5e46 0x8b44 +0x5e47 0x8b45 +0x5e48 0x8b46 +0x5e49 0x8b48 +0x5e4a 0x8b52 +0x5e4b 0x8b53 +0x5e4c 0x8b54 +0x5e4d 0x8b59 +0x5e4e 0x8b4d +0x5e4f 0x8b5e +0x5e50 0x8b63 +0x5e51 0x8b6d +0x5e52 0x8b76 +0x5e53 0x8b78 +0x5e54 0x8b79 +0x5e55 0x8b7c +0x5e56 0x8b7e +0x5e57 0x8b81 +0x5e58 0x8b84 +0x5e59 0x8b85 +0x5e5a 0x8b8b +0x5e5b 0x8b8d +0x5e5c 0x8b8f +0x5e5d 0x8b94 +0x5e5e 0x8b95 +0x5e5f 0x8b9c +0x5e60 0x8b9e +0x5e61 0x8b9f +0x5e62 0x8c38 +0x5e63 0x8c39 +0x5e64 0x8c3d +0x5e65 0x8c3e +0x5e66 0x8c45 +0x5e67 0x8c47 +0x5e68 0x8c49 +0x5e69 0x8c4b +0x5e6a 0x8c4f +0x5e6b 0x8c51 +0x5e6c 0x8c53 +0x5e6d 0x8c54 +0x5e6e 0x8c57 +0x5e6f 0x8c58 +0x5e70 0x8c5b +0x5e71 0x8c5d +0x5e72 0x8c59 +0x5e73 0x8c63 +0x5e74 0x8c64 +0x5e75 0x8c66 +0x5e76 0x8c68 +0x5e77 0x8c69 +0x5e78 0x8c6d +0x5e79 0x8c73 +0x5e7a 0x8c75 +0x5e7b 0x8c76 +0x5e7c 0x8c7b +0x5e7d 0x8c7e +0x5e7e 0x8c86 +0x5f21 0x8c87 +0x5f22 0x8c8b +0x5f23 0x8c90 +0x5f24 0x8c92 +0x5f25 0x8c93 +0x5f26 0x8c99 +0x5f27 0x8c9b +0x5f28 0x8c9c +0x5f29 0x8ca4 +0x5f2a 0x8cb9 +0x5f2b 0x8cba +0x5f2c 0x8cc5 +0x5f2d 0x8cc6 +0x5f2e 0x8cc9 +0x5f2f 0x8ccb +0x5f30 0x8ccf +0x5f31 0x8cd6 +0x5f32 0x8cd5 +0x5f33 0x8cd9 +0x5f34 0x8cdd +0x5f35 0x8ce1 +0x5f36 0x8ce8 +0x5f37 0x8cec +0x5f38 0x8cef +0x5f39 0x8cf0 +0x5f3a 0x8cf2 +0x5f3b 0x8cf5 +0x5f3c 0x8cf7 +0x5f3d 0x8cf8 +0x5f3e 0x8cfe +0x5f3f 0x8cff +0x5f40 0x8d01 +0x5f41 0x8d03 +0x5f42 0x8d09 +0x5f43 0x8d12 +0x5f44 0x8d17 +0x5f45 0x8d1b +0x5f46 0x8d65 +0x5f47 0x8d69 +0x5f48 0x8d6c +0x5f49 0x8d6e +0x5f4a 0x8d7f +0x5f4b 0x8d82 +0x5f4c 0x8d84 +0x5f4d 0x8d88 +0x5f4e 0x8d8d +0x5f4f 0x8d90 +0x5f50 0x8d91 +0x5f51 0x8d95 +0x5f52 0x8d9e +0x5f53 0x8d9f +0x5f54 0x8da0 +0x5f55 0x8da6 +0x5f56 0x8dab +0x5f57 0x8dac +0x5f58 0x8daf +0x5f59 0x8db2 +0x5f5a 0x8db5 +0x5f5b 0x8db7 +0x5f5c 0x8db9 +0x5f5d 0x8dbb +0x5f5e 0x8dc0 +0x5f5f 0x8dc5 +0x5f60 0x8dc6 +0x5f61 0x8dc7 +0x5f62 0x8dc8 +0x5f63 0x8dca +0x5f64 0x8dce +0x5f65 0x8dd1 +0x5f66 0x8dd4 +0x5f67 0x8dd5 +0x5f68 0x8dd7 +0x5f69 0x8dd9 +0x5f6a 0x8de4 +0x5f6b 0x8de5 +0x5f6c 0x8de7 +0x5f6d 0x8dec +0x5f6e 0x8df0 +0x5f6f 0x8dbc +0x5f70 0x8df1 +0x5f71 0x8df2 +0x5f72 0x8df4 +0x5f73 0x8dfd +0x5f74 0x8e01 +0x5f75 0x8e04 +0x5f76 0x8e05 +0x5f77 0x8e06 +0x5f78 0x8e0b +0x5f79 0x8e11 +0x5f7a 0x8e14 +0x5f7b 0x8e16 +0x5f7c 0x8e20 +0x5f7d 0x8e21 +0x5f7e 0x8e22 +0x6021 0x8e23 +0x6022 0x8e26 +0x6023 0x8e27 +0x6024 0x8e31 +0x6025 0x8e33 +0x6026 0x8e36 +0x6027 0x8e37 +0x6028 0x8e38 +0x6029 0x8e39 +0x602a 0x8e3d +0x602b 0x8e40 +0x602c 0x8e41 +0x602d 0x8e4b +0x602e 0x8e4d +0x602f 0x8e4e +0x6030 0x8e4f +0x6031 0x8e54 +0x6032 0x8e5b +0x6033 0x8e5c +0x6034 0x8e5d +0x6035 0x8e5e +0x6036 0x8e61 +0x6037 0x8e62 +0x6038 0x8e69 +0x6039 0x8e6c +0x603a 0x8e6d +0x603b 0x8e6f +0x603c 0x8e70 +0x603d 0x8e71 +0x603e 0x8e79 +0x603f 0x8e7a +0x6040 0x8e7b +0x6041 0x8e82 +0x6042 0x8e83 +0x6043 0x8e89 +0x6044 0x8e90 +0x6045 0x8e92 +0x6046 0x8e95 +0x6047 0x8e9a +0x6048 0x8e9b +0x6049 0x8e9d +0x604a 0x8e9e +0x604b 0x8ea2 +0x604c 0x8ea7 +0x604d 0x8ea9 +0x604e 0x8ead +0x604f 0x8eae +0x6050 0x8eb3 +0x6051 0x8eb5 +0x6052 0x8eba +0x6053 0x8ebb +0x6054 0x8ec0 +0x6055 0x8ec1 +0x6056 0x8ec3 +0x6057 0x8ec4 +0x6058 0x8ec7 +0x6059 0x8ecf +0x605a 0x8ed1 +0x605b 0x8ed4 +0x605c 0x8edc +0x605d 0x8ee8 +0x605e 0x8eee +0x605f 0x8ef0 +0x6060 0x8ef1 +0x6061 0x8ef7 +0x6062 0x8ef9 +0x6063 0x8efa +0x6064 0x8eed +0x6065 0x8f00 +0x6066 0x8f02 +0x6067 0x8f07 +0x6068 0x8f08 +0x6069 0x8f0f +0x606a 0x8f10 +0x606b 0x8f16 +0x606c 0x8f17 +0x606d 0x8f18 +0x606e 0x8f1e +0x606f 0x8f20 +0x6070 0x8f21 +0x6071 0x8f23 +0x6072 0x8f25 +0x6073 0x8f27 +0x6074 0x8f28 +0x6075 0x8f2c +0x6076 0x8f2d +0x6077 0x8f2e +0x6078 0x8f34 +0x6079 0x8f35 +0x607a 0x8f36 +0x607b 0x8f37 +0x607c 0x8f3a +0x607d 0x8f40 +0x607e 0x8f41 +0x6121 0x8f43 +0x6122 0x8f47 +0x6123 0x8f4f +0x6124 0x8f51 +0x6125 0x8f52 +0x6126 0x8f53 +0x6127 0x8f54 +0x6128 0x8f55 +0x6129 0x8f58 +0x612a 0x8f5d +0x612b 0x8f5e +0x612c 0x8f65 +0x612d 0x8f9d +0x612e 0x8fa0 +0x612f 0x8fa1 +0x6130 0x8fa4 +0x6131 0x8fa5 +0x6132 0x8fa6 +0x6133 0x8fb5 +0x6134 0x8fb6 +0x6135 0x8fb8 +0x6136 0x8fbe +0x6137 0x8fc0 +0x6138 0x8fc1 +0x6139 0x8fc6 +0x613a 0x8fca +0x613b 0x8fcb +0x613c 0x8fcd +0x613d 0x8fd0 +0x613e 0x8fd2 +0x613f 0x8fd3 +0x6140 0x8fd5 +0x6141 0x8fe0 +0x6142 0x8fe3 +0x6143 0x8fe4 +0x6144 0x8fe8 +0x6145 0x8fee +0x6146 0x8ff1 +0x6147 0x8ff5 +0x6148 0x8ff6 +0x6149 0x8ffb +0x614a 0x8ffe +0x614b 0x9002 +0x614c 0x9004 +0x614d 0x9008 +0x614e 0x900c +0x614f 0x9018 +0x6150 0x901b +0x6151 0x9028 +0x6152 0x9029 +0x6153 0x902f +0x6154 0x902a +0x6155 0x902c +0x6156 0x902d +0x6157 0x9033 +0x6158 0x9034 +0x6159 0x9037 +0x615a 0x903f +0x615b 0x9043 +0x615c 0x9044 +0x615d 0x904c +0x615e 0x905b +0x615f 0x905d +0x6160 0x9062 +0x6161 0x9066 +0x6162 0x9067 +0x6163 0x906c +0x6164 0x9070 +0x6165 0x9074 +0x6166 0x9079 +0x6167 0x9085 +0x6168 0x9088 +0x6169 0x908b +0x616a 0x908c +0x616b 0x908e +0x616c 0x9090 +0x616d 0x9095 +0x616e 0x9097 +0x616f 0x9098 +0x6170 0x9099 +0x6171 0x909b +0x6172 0x90a0 +0x6173 0x90a1 +0x6174 0x90a2 +0x6175 0x90a5 +0x6176 0x90b0 +0x6177 0x90b2 +0x6178 0x90b3 +0x6179 0x90b4 +0x617a 0x90b6 +0x617b 0x90bd +0x617c 0x90cc +0x617d 0x90be +0x617e 0x90c3 +0x6221 0x90c4 +0x6222 0x90c5 +0x6223 0x90c7 +0x6224 0x90c8 +0x6225 0x90d5 +0x6226 0x90d7 +0x6227 0x90d8 +0x6228 0x90d9 +0x6229 0x90dc +0x622a 0x90dd +0x622b 0x90df +0x622c 0x90e5 +0x622d 0x90d2 +0x622e 0x90f6 +0x622f 0x90eb +0x6230 0x90ef +0x6231 0x90f0 +0x6232 0x90f4 +0x6233 0x90fe +0x6234 0x90ff +0x6235 0x9100 +0x6236 0x9104 +0x6237 0x9105 +0x6238 0x9106 +0x6239 0x9108 +0x623a 0x910d +0x623b 0x9110 +0x623c 0x9114 +0x623d 0x9116 +0x623e 0x9117 +0x623f 0x9118 +0x6240 0x911a +0x6241 0x911c +0x6242 0x911e +0x6243 0x9120 +0x6244 0x9125 +0x6245 0x9122 +0x6246 0x9123 +0x6247 0x9127 +0x6248 0x9129 +0x6249 0x912e +0x624a 0x912f +0x624b 0x9131 +0x624c 0x9134 +0x624d 0x9136 +0x624e 0x9137 +0x624f 0x9139 +0x6250 0x913a +0x6251 0x913c +0x6252 0x913d +0x6253 0x9143 +0x6254 0x9147 +0x6255 0x9148 +0x6256 0x914f +0x6257 0x9153 +0x6258 0x9157 +0x6259 0x9159 +0x625a 0x915a +0x625b 0x915b +0x625c 0x9161 +0x625d 0x9164 +0x625e 0x9167 +0x625f 0x916d +0x6260 0x9174 +0x6261 0x9179 +0x6262 0x917a +0x6263 0x917b +0x6264 0x9181 +0x6265 0x9183 +0x6266 0x9185 +0x6267 0x9186 +0x6268 0x918a +0x6269 0x918e +0x626a 0x9191 +0x626b 0x9193 +0x626c 0x9194 +0x626d 0x9195 +0x626e 0x9198 +0x626f 0x919e +0x6270 0x91a1 +0x6271 0x91a6 +0x6272 0x91a8 +0x6273 0x91ac +0x6274 0x91ad +0x6275 0x91ae +0x6276 0x91b0 +0x6277 0x91b1 +0x6278 0x91b2 +0x6279 0x91b3 +0x627a 0x91b6 +0x627b 0x91bb +0x627c 0x91bc +0x627d 0x91bd +0x627e 0x91bf +0x6321 0x91c2 +0x6322 0x91c3 +0x6323 0x91c5 +0x6324 0x91d3 +0x6325 0x91d4 +0x6326 0x91d7 +0x6327 0x91d9 +0x6328 0x91da +0x6329 0x91de +0x632a 0x91e4 +0x632b 0x91e5 +0x632c 0x91e9 +0x632d 0x91ea +0x632e 0x91ec +0x632f 0x91ed +0x6330 0x91ee +0x6331 0x91ef +0x6332 0x91f0 +0x6333 0x91f1 +0x6334 0x91f7 +0x6335 0x91f9 +0x6336 0x91fb +0x6337 0x91fd +0x6338 0x9200 +0x6339 0x9201 +0x633a 0x9204 +0x633b 0x9205 +0x633c 0x9206 +0x633d 0x9207 +0x633e 0x9209 +0x633f 0x920a +0x6340 0x920c +0x6341 0x9210 +0x6342 0x9212 +0x6343 0x9213 +0x6344 0x9216 +0x6345 0x9218 +0x6346 0x921c +0x6347 0x921d +0x6348 0x9223 +0x6349 0x9224 +0x634a 0x9225 +0x634b 0x9226 +0x634c 0x9228 +0x634d 0x922e +0x634e 0x922f +0x634f 0x9230 +0x6350 0x9233 +0x6351 0x9235 +0x6352 0x9236 +0x6353 0x9238 +0x6354 0x9239 +0x6355 0x923a +0x6356 0x923c +0x6357 0x923e +0x6358 0x9240 +0x6359 0x9242 +0x635a 0x9243 +0x635b 0x9246 +0x635c 0x9247 +0x635d 0x924a +0x635e 0x924d +0x635f 0x924e +0x6360 0x924f +0x6361 0x9251 +0x6362 0x9258 +0x6363 0x9259 +0x6364 0x925c +0x6365 0x925d +0x6366 0x9260 +0x6367 0x9261 +0x6368 0x9265 +0x6369 0x9267 +0x636a 0x9268 +0x636b 0x9269 +0x636c 0x926e +0x636d 0x926f +0x636e 0x9270 +0x636f 0x9275 +0x6370 0x9276 +0x6371 0x9277 +0x6372 0x9278 +0x6373 0x9279 +0x6374 0x927b +0x6375 0x927c +0x6376 0x927d +0x6377 0x927f +0x6378 0x9288 +0x6379 0x9289 +0x637a 0x928a +0x637b 0x928d +0x637c 0x928e +0x637d 0x9292 +0x637e 0x9297 +0x6421 0x9299 +0x6422 0x929f +0x6423 0x92a0 +0x6424 0x92a4 +0x6425 0x92a5 +0x6426 0x92a7 +0x6427 0x92a8 +0x6428 0x92ab +0x6429 0x92af +0x642a 0x92b2 +0x642b 0x92b6 +0x642c 0x92b8 +0x642d 0x92ba +0x642e 0x92bb +0x642f 0x92bc +0x6430 0x92bd +0x6431 0x92bf +0x6432 0x92c0 +0x6433 0x92c1 +0x6434 0x92c2 +0x6435 0x92c3 +0x6436 0x92c5 +0x6437 0x92c6 +0x6438 0x92c7 +0x6439 0x92c8 +0x643a 0x92cb +0x643b 0x92cc +0x643c 0x92cd +0x643d 0x92ce +0x643e 0x92d0 +0x643f 0x92d3 +0x6440 0x92d5 +0x6441 0x92d7 +0x6442 0x92d8 +0x6443 0x92d9 +0x6444 0x92dc +0x6445 0x92dd +0x6446 0x92df +0x6447 0x92e0 +0x6448 0x92e1 +0x6449 0x92e3 +0x644a 0x92e5 +0x644b 0x92e7 +0x644c 0x92e8 +0x644d 0x92ec +0x644e 0x92ee +0x644f 0x92f0 +0x6450 0x92f9 +0x6451 0x92fb +0x6452 0x92ff +0x6453 0x9300 +0x6454 0x9302 +0x6455 0x9308 +0x6456 0x930d +0x6457 0x9311 +0x6458 0x9314 +0x6459 0x9315 +0x645a 0x931c +0x645b 0x931d +0x645c 0x931e +0x645d 0x931f +0x645e 0x9321 +0x645f 0x9324 +0x6460 0x9325 +0x6461 0x9327 +0x6462 0x9329 +0x6463 0x932a +0x6464 0x9333 +0x6465 0x9334 +0x6466 0x9336 +0x6467 0x9337 +0x6468 0x9347 +0x6469 0x9348 +0x646a 0x9349 +0x646b 0x9350 +0x646c 0x9351 +0x646d 0x9352 +0x646e 0x9355 +0x646f 0x9357 +0x6470 0x9358 +0x6471 0x935a +0x6472 0x935e +0x6473 0x9364 +0x6474 0x9365 +0x6475 0x9367 +0x6476 0x9369 +0x6477 0x936a +0x6478 0x936d +0x6479 0x936f +0x647a 0x9370 +0x647b 0x9371 +0x647c 0x9373 +0x647d 0x9374 +0x647e 0x9376 +0x6521 0x937a +0x6522 0x937d +0x6523 0x937f +0x6524 0x9380 +0x6525 0x9381 +0x6526 0x9382 +0x6527 0x9388 +0x6528 0x938a +0x6529 0x938b +0x652a 0x938d +0x652b 0x938f +0x652c 0x9392 +0x652d 0x9395 +0x652e 0x9398 +0x652f 0x939b +0x6530 0x939e +0x6531 0x93a1 +0x6532 0x93a3 +0x6533 0x93a4 +0x6534 0x93a6 +0x6535 0x93a8 +0x6536 0x93ab +0x6537 0x93b4 +0x6538 0x93b5 +0x6539 0x93b6 +0x653a 0x93ba +0x653b 0x93a9 +0x653c 0x93c1 +0x653d 0x93c4 +0x653e 0x93c5 +0x653f 0x93c6 +0x6540 0x93c7 +0x6541 0x93c9 +0x6542 0x93ca +0x6543 0x93cb +0x6544 0x93cc +0x6545 0x93cd +0x6546 0x93d3 +0x6547 0x93d9 +0x6548 0x93dc +0x6549 0x93de +0x654a 0x93df +0x654b 0x93e2 +0x654c 0x93e6 +0x654d 0x93e7 +0x654e 0x93f9 +0x654f 0x93f7 +0x6550 0x93f8 +0x6551 0x93fa +0x6552 0x93fb +0x6553 0x93fd +0x6554 0x9401 +0x6555 0x9402 +0x6556 0x9404 +0x6557 0x9408 +0x6558 0x9409 +0x6559 0x940d +0x655a 0x940e +0x655b 0x940f +0x655c 0x9415 +0x655d 0x9416 +0x655e 0x9417 +0x655f 0x941f +0x6560 0x942e +0x6561 0x942f +0x6562 0x9431 +0x6563 0x9432 +0x6564 0x9433 +0x6565 0x9434 +0x6566 0x943b +0x6567 0x943f +0x6568 0x943d +0x6569 0x9443 +0x656a 0x9445 +0x656b 0x9448 +0x656c 0x944a +0x656d 0x944c +0x656e 0x9455 +0x656f 0x9459 +0x6570 0x945c +0x6571 0x945f +0x6572 0x9461 +0x6573 0x9463 +0x6574 0x9468 +0x6575 0x946b +0x6576 0x946d +0x6577 0x946e +0x6578 0x946f +0x6579 0x9471 +0x657a 0x9472 +0x657b 0x9484 +0x657c 0x9483 +0x657d 0x9578 +0x657e 0x9579 +0x6621 0x957e +0x6622 0x9584 +0x6623 0x9588 +0x6624 0x958c +0x6625 0x958d +0x6626 0x958e +0x6627 0x959d +0x6628 0x959e +0x6629 0x959f +0x662a 0x95a1 +0x662b 0x95a6 +0x662c 0x95a9 +0x662d 0x95ab +0x662e 0x95ac +0x662f 0x95b4 +0x6630 0x95b6 +0x6631 0x95ba +0x6632 0x95bd +0x6633 0x95bf +0x6634 0x95c6 +0x6635 0x95c8 +0x6636 0x95c9 +0x6637 0x95cb +0x6638 0x95d0 +0x6639 0x95d1 +0x663a 0x95d2 +0x663b 0x95d3 +0x663c 0x95d9 +0x663d 0x95da +0x663e 0x95dd +0x663f 0x95de +0x6640 0x95df +0x6641 0x95e0 +0x6642 0x95e4 +0x6643 0x95e6 +0x6644 0x961d +0x6645 0x961e +0x6646 0x9622 +0x6647 0x9624 +0x6648 0x9625 +0x6649 0x9626 +0x664a 0x962c +0x664b 0x9631 +0x664c 0x9633 +0x664d 0x9637 +0x664e 0x9638 +0x664f 0x9639 +0x6650 0x963a +0x6651 0x963c +0x6652 0x963d +0x6653 0x9641 +0x6654 0x9652 +0x6655 0x9654 +0x6656 0x9656 +0x6657 0x9657 +0x6658 0x9658 +0x6659 0x9661 +0x665a 0x966e +0x665b 0x9674 +0x665c 0x967b +0x665d 0x967c +0x665e 0x967e +0x665f 0x967f +0x6660 0x9681 +0x6661 0x9682 +0x6662 0x9683 +0x6663 0x9684 +0x6664 0x9689 +0x6665 0x9691 +0x6666 0x9696 +0x6667 0x969a +0x6668 0x969d +0x6669 0x969f +0x666a 0x96a4 +0x666b 0x96a5 +0x666c 0x96a6 +0x666d 0x96a9 +0x666e 0x96ae +0x666f 0x96af +0x6670 0x96b3 +0x6671 0x96ba +0x6672 0x96ca +0x6673 0x96d2 +0x6674 0x5db2 +0x6675 0x96d8 +0x6676 0x96da +0x6677 0x96dd +0x6678 0x96de +0x6679 0x96df +0x667a 0x96e9 +0x667b 0x96ef +0x667c 0x96f1 +0x667d 0x96fa +0x667e 0x9702 +0x6721 0x9703 +0x6722 0x9705 +0x6723 0x9709 +0x6724 0x971a +0x6725 0x971b +0x6726 0x971d +0x6727 0x9721 +0x6728 0x9722 +0x6729 0x9723 +0x672a 0x9728 +0x672b 0x9731 +0x672c 0x9733 +0x672d 0x9741 +0x672e 0x9743 +0x672f 0x974a +0x6730 0x974e +0x6731 0x974f +0x6732 0x9755 +0x6733 0x9757 +0x6734 0x9758 +0x6735 0x975a +0x6736 0x975b +0x6737 0x9763 +0x6738 0x9767 +0x6739 0x976a +0x673a 0x976e +0x673b 0x9773 +0x673c 0x9776 +0x673d 0x9777 +0x673e 0x9778 +0x673f 0x977b +0x6740 0x977d +0x6741 0x977f +0x6742 0x9780 +0x6743 0x9789 +0x6744 0x9795 +0x6745 0x9796 +0x6746 0x9797 +0x6747 0x9799 +0x6748 0x979a +0x6749 0x979e +0x674a 0x979f +0x674b 0x97a2 +0x674c 0x97ac +0x674d 0x97ae +0x674e 0x97b1 +0x674f 0x97b2 +0x6750 0x97b5 +0x6751 0x97b6 +0x6752 0x97b8 +0x6753 0x97b9 +0x6754 0x97ba +0x6755 0x97bc +0x6756 0x97be +0x6757 0x97bf +0x6758 0x97c1 +0x6759 0x97c4 +0x675a 0x97c5 +0x675b 0x97c7 +0x675c 0x97c9 +0x675d 0x97ca +0x675e 0x97cc +0x675f 0x97cd +0x6760 0x97ce +0x6761 0x97d0 +0x6762 0x97d1 +0x6763 0x97d4 +0x6764 0x97d7 +0x6765 0x97d8 +0x6766 0x97d9 +0x6767 0x97dd +0x6768 0x97de +0x6769 0x97e0 +0x676a 0x97db +0x676b 0x97e1 +0x676c 0x97e4 +0x676d 0x97ef +0x676e 0x97f1 +0x676f 0x97f4 +0x6770 0x97f7 +0x6771 0x97f8 +0x6772 0x97fa +0x6773 0x9807 +0x6774 0x980a +0x6775 0x9819 +0x6776 0x980d +0x6777 0x980e +0x6778 0x9814 +0x6779 0x9816 +0x677a 0x981c +0x677b 0x981e +0x677c 0x9820 +0x677d 0x9823 +0x677e 0x9826 +0x6821 0x982b +0x6822 0x982e +0x6823 0x982f +0x6824 0x9830 +0x6825 0x9832 +0x6826 0x9833 +0x6827 0x9835 +0x6828 0x9825 +0x6829 0x983e +0x682a 0x9844 +0x682b 0x9847 +0x682c 0x984a +0x682d 0x9851 +0x682e 0x9852 +0x682f 0x9853 +0x6830 0x9856 +0x6831 0x9857 +0x6832 0x9859 +0x6833 0x985a +0x6834 0x9862 +0x6835 0x9863 +0x6836 0x9865 +0x6837 0x9866 +0x6838 0x986a +0x6839 0x986c +0x683a 0x98ab +0x683b 0x98ad +0x683c 0x98ae +0x683d 0x98b0 +0x683e 0x98b4 +0x683f 0x98b7 +0x6840 0x98b8 +0x6841 0x98ba +0x6842 0x98bb +0x6843 0x98bf +0x6844 0x98c2 +0x6845 0x98c5 +0x6846 0x98c8 +0x6847 0x98cc +0x6848 0x98e1 +0x6849 0x98e3 +0x684a 0x98e5 +0x684b 0x98e6 +0x684c 0x98e7 +0x684d 0x98ea +0x684e 0x98f3 +0x684f 0x98f6 +0x6850 0x9902 +0x6851 0x9907 +0x6852 0x9908 +0x6853 0x9911 +0x6854 0x9915 +0x6855 0x9916 +0x6856 0x9917 +0x6857 0x991a +0x6858 0x991b +0x6859 0x991c +0x685a 0x991f +0x685b 0x9922 +0x685c 0x9926 +0x685d 0x9927 +0x685e 0x992b +0x685f 0x9931 +0x6860 0x9932 +0x6861 0x9933 +0x6862 0x9934 +0x6863 0x9935 +0x6864 0x9939 +0x6865 0x993a +0x6866 0x993b +0x6867 0x993c +0x6868 0x9940 +0x6869 0x9941 +0x686a 0x9946 +0x686b 0x9947 +0x686c 0x9948 +0x686d 0x994d +0x686e 0x994e +0x686f 0x9954 +0x6870 0x9958 +0x6871 0x9959 +0x6872 0x995b +0x6873 0x995c +0x6874 0x995e +0x6875 0x995f +0x6876 0x9960 +0x6877 0x999b +0x6878 0x999d +0x6879 0x999f +0x687a 0x99a6 +0x687b 0x99b0 +0x687c 0x99b1 +0x687d 0x99b2 +0x687e 0x99b5 +0x6921 0x99b9 +0x6922 0x99ba +0x6923 0x99bd +0x6924 0x99bf +0x6925 0x99c3 +0x6926 0x99c9 +0x6927 0x99d3 +0x6928 0x99d4 +0x6929 0x99d9 +0x692a 0x99da +0x692b 0x99dc +0x692c 0x99de +0x692d 0x99e7 +0x692e 0x99ea +0x692f 0x99eb +0x6930 0x99ec +0x6931 0x99f0 +0x6932 0x99f4 +0x6933 0x99f5 +0x6934 0x99f9 +0x6935 0x99fd +0x6936 0x99fe +0x6937 0x9a02 +0x6938 0x9a03 +0x6939 0x9a04 +0x693a 0x9a0b +0x693b 0x9a0c +0x693c 0x9a10 +0x693d 0x9a11 +0x693e 0x9a16 +0x693f 0x9a1e +0x6940 0x9a20 +0x6941 0x9a22 +0x6942 0x9a23 +0x6943 0x9a24 +0x6944 0x9a27 +0x6945 0x9a2d +0x6946 0x9a2e +0x6947 0x9a33 +0x6948 0x9a35 +0x6949 0x9a36 +0x694a 0x9a38 +0x694b 0x9a47 +0x694c 0x9a41 +0x694d 0x9a44 +0x694e 0x9a4a +0x694f 0x9a4b +0x6950 0x9a4c +0x6951 0x9a4e +0x6952 0x9a51 +0x6953 0x9a54 +0x6954 0x9a56 +0x6955 0x9a5d +0x6956 0x9aaa +0x6957 0x9aac +0x6958 0x9aae +0x6959 0x9aaf +0x695a 0x9ab2 +0x695b 0x9ab4 +0x695c 0x9ab5 +0x695d 0x9ab6 +0x695e 0x9ab9 +0x695f 0x9abb +0x6960 0x9abe +0x6961 0x9abf +0x6962 0x9ac1 +0x6963 0x9ac3 +0x6964 0x9ac6 +0x6965 0x9ac8 +0x6966 0x9ace +0x6967 0x9ad0 +0x6968 0x9ad2 +0x6969 0x9ad5 +0x696a 0x9ad6 +0x696b 0x9ad7 +0x696c 0x9adb +0x696d 0x9adc +0x696e 0x9ae0 +0x696f 0x9ae4 +0x6970 0x9ae5 +0x6971 0x9ae7 +0x6972 0x9ae9 +0x6973 0x9aec +0x6974 0x9af2 +0x6975 0x9af3 +0x6976 0x9af5 +0x6977 0x9af9 +0x6978 0x9afa +0x6979 0x9afd +0x697a 0x9aff +0x697b 0x9b00 +0x697c 0x9b01 +0x697d 0x9b02 +0x697e 0x9b03 +0x6a21 0x9b04 +0x6a22 0x9b05 +0x6a23 0x9b08 +0x6a24 0x9b09 +0x6a25 0x9b0b +0x6a26 0x9b0c +0x6a27 0x9b0d +0x6a28 0x9b0e +0x6a29 0x9b10 +0x6a2a 0x9b12 +0x6a2b 0x9b16 +0x6a2c 0x9b19 +0x6a2d 0x9b1b +0x6a2e 0x9b1c +0x6a2f 0x9b20 +0x6a30 0x9b26 +0x6a31 0x9b2b +0x6a32 0x9b2d +0x6a33 0x9b33 +0x6a34 0x9b34 +0x6a35 0x9b35 +0x6a36 0x9b37 +0x6a37 0x9b39 +0x6a38 0x9b3a +0x6a39 0x9b3d +0x6a3a 0x9b48 +0x6a3b 0x9b4b +0x6a3c 0x9b4c +0x6a3d 0x9b55 +0x6a3e 0x9b56 +0x6a3f 0x9b57 +0x6a40 0x9b5b +0x6a41 0x9b5e +0x6a42 0x9b61 +0x6a43 0x9b63 +0x6a44 0x9b65 +0x6a45 0x9b66 +0x6a46 0x9b68 +0x6a47 0x9b6a +0x6a48 0x9b6b +0x6a49 0x9b6c +0x6a4a 0x9b6d +0x6a4b 0x9b6e +0x6a4c 0x9b73 +0x6a4d 0x9b75 +0x6a4e 0x9b77 +0x6a4f 0x9b78 +0x6a50 0x9b79 +0x6a51 0x9b7f +0x6a52 0x9b80 +0x6a53 0x9b84 +0x6a54 0x9b85 +0x6a55 0x9b86 +0x6a56 0x9b87 +0x6a57 0x9b89 +0x6a58 0x9b8a +0x6a59 0x9b8b +0x6a5a 0x9b8d +0x6a5b 0x9b8f +0x6a5c 0x9b90 +0x6a5d 0x9b94 +0x6a5e 0x9b9a +0x6a5f 0x9b9d +0x6a60 0x9b9e +0x6a61 0x9ba6 +0x6a62 0x9ba7 +0x6a63 0x9ba9 +0x6a64 0x9bac +0x6a65 0x9bb0 +0x6a66 0x9bb1 +0x6a67 0x9bb2 +0x6a68 0x9bb7 +0x6a69 0x9bb8 +0x6a6a 0x9bbb +0x6a6b 0x9bbc +0x6a6c 0x9bbe +0x6a6d 0x9bbf +0x6a6e 0x9bc1 +0x6a6f 0x9bc7 +0x6a70 0x9bc8 +0x6a71 0x9bce +0x6a72 0x9bd0 +0x6a73 0x9bd7 +0x6a74 0x9bd8 +0x6a75 0x9bdd +0x6a76 0x9bdf +0x6a77 0x9be5 +0x6a78 0x9be7 +0x6a79 0x9bea +0x6a7a 0x9beb +0x6a7b 0x9bef +0x6a7c 0x9bf3 +0x6a7d 0x9bf7 +0x6a7e 0x9bf8 +0x6b21 0x9bf9 +0x6b22 0x9bfa +0x6b23 0x9bfd +0x6b24 0x9bff +0x6b25 0x9c00 +0x6b26 0x9c02 +0x6b27 0x9c0b +0x6b28 0x9c0f +0x6b29 0x9c11 +0x6b2a 0x9c16 +0x6b2b 0x9c18 +0x6b2c 0x9c19 +0x6b2d 0x9c1a +0x6b2e 0x9c1c +0x6b2f 0x9c1e +0x6b30 0x9c22 +0x6b31 0x9c23 +0x6b32 0x9c26 +0x6b33 0x9c27 +0x6b34 0x9c28 +0x6b35 0x9c29 +0x6b36 0x9c2a +0x6b37 0x9c31 +0x6b38 0x9c35 +0x6b39 0x9c36 +0x6b3a 0x9c37 +0x6b3b 0x9c3d +0x6b3c 0x9c41 +0x6b3d 0x9c43 +0x6b3e 0x9c44 +0x6b3f 0x9c45 +0x6b40 0x9c49 +0x6b41 0x9c4a +0x6b42 0x9c4e +0x6b43 0x9c4f +0x6b44 0x9c50 +0x6b45 0x9c53 +0x6b46 0x9c54 +0x6b47 0x9c56 +0x6b48 0x9c58 +0x6b49 0x9c5b +0x6b4a 0x9c5d +0x6b4b 0x9c5e +0x6b4c 0x9c5f +0x6b4d 0x9c63 +0x6b4e 0x9c69 +0x6b4f 0x9c6a +0x6b50 0x9c5c +0x6b51 0x9c6b +0x6b52 0x9c68 +0x6b53 0x9c6e +0x6b54 0x9c70 +0x6b55 0x9c72 +0x6b56 0x9c75 +0x6b57 0x9c77 +0x6b58 0x9c7b +0x6b59 0x9ce6 +0x6b5a 0x9cf2 +0x6b5b 0x9cf7 +0x6b5c 0x9cf9 +0x6b5d 0x9d0b +0x6b5e 0x9d02 +0x6b5f 0x9d11 +0x6b60 0x9d17 +0x6b61 0x9d18 +0x6b62 0x9d1c +0x6b63 0x9d1d +0x6b64 0x9d1e +0x6b65 0x9d2f +0x6b66 0x9d30 +0x6b67 0x9d32 +0x6b68 0x9d33 +0x6b69 0x9d34 +0x6b6a 0x9d3a +0x6b6b 0x9d3c +0x6b6c 0x9d45 +0x6b6d 0x9d3d +0x6b6e 0x9d42 +0x6b6f 0x9d43 +0x6b70 0x9d47 +0x6b71 0x9d4a +0x6b72 0x9d53 +0x6b73 0x9d54 +0x6b74 0x9d5f +0x6b75 0x9d63 +0x6b76 0x9d62 +0x6b77 0x9d65 +0x6b78 0x9d69 +0x6b79 0x9d6a +0x6b7a 0x9d6b +0x6b7b 0x9d70 +0x6b7c 0x9d76 +0x6b7d 0x9d77 +0x6b7e 0x9d7b +0x6c21 0x9d7c +0x6c22 0x9d7e +0x6c23 0x9d83 +0x6c24 0x9d84 +0x6c25 0x9d86 +0x6c26 0x9d8a +0x6c27 0x9d8d +0x6c28 0x9d8e +0x6c29 0x9d92 +0x6c2a 0x9d93 +0x6c2b 0x9d95 +0x6c2c 0x9d96 +0x6c2d 0x9d97 +0x6c2e 0x9d98 +0x6c2f 0x9da1 +0x6c30 0x9daa +0x6c31 0x9dac +0x6c32 0x9dae +0x6c33 0x9db1 +0x6c34 0x9db5 +0x6c35 0x9db9 +0x6c36 0x9dbc +0x6c37 0x9dbf +0x6c38 0x9dc3 +0x6c39 0x9dc7 +0x6c3a 0x9dc9 +0x6c3b 0x9dca +0x6c3c 0x9dd4 +0x6c3d 0x9dd5 +0x6c3e 0x9dd6 +0x6c3f 0x9dd7 +0x6c40 0x9dda +0x6c41 0x9dde +0x6c42 0x9ddf +0x6c43 0x9de0 +0x6c44 0x9de5 +0x6c45 0x9de7 +0x6c46 0x9de9 +0x6c47 0x9deb +0x6c48 0x9dee +0x6c49 0x9df0 +0x6c4a 0x9df3 +0x6c4b 0x9df4 +0x6c4c 0x9dfe +0x6c4d 0x9e0a +0x6c4e 0x9e02 +0x6c4f 0x9e07 +0x6c50 0x9e0e +0x6c51 0x9e10 +0x6c52 0x9e11 +0x6c53 0x9e12 +0x6c54 0x9e15 +0x6c55 0x9e16 +0x6c56 0x9e19 +0x6c57 0x9e1c +0x6c58 0x9e1d +0x6c59 0x9e7a +0x6c5a 0x9e7b +0x6c5b 0x9e7c +0x6c5c 0x9e80 +0x6c5d 0x9e82 +0x6c5e 0x9e83 +0x6c5f 0x9e84 +0x6c60 0x9e85 +0x6c61 0x9e87 +0x6c62 0x9e8e +0x6c63 0x9e8f +0x6c64 0x9e96 +0x6c65 0x9e98 +0x6c66 0x9e9b +0x6c67 0x9e9e +0x6c68 0x9ea4 +0x6c69 0x9ea8 +0x6c6a 0x9eac +0x6c6b 0x9eae +0x6c6c 0x9eaf +0x6c6d 0x9eb0 +0x6c6e 0x9eb3 +0x6c6f 0x9eb4 +0x6c70 0x9eb5 +0x6c71 0x9ec6 +0x6c72 0x9ec8 +0x6c73 0x9ecb +0x6c74 0x9ed5 +0x6c75 0x9edf +0x6c76 0x9ee4 +0x6c77 0x9ee7 +0x6c78 0x9eec +0x6c79 0x9eed +0x6c7a 0x9eee +0x6c7b 0x9ef0 +0x6c7c 0x9ef1 +0x6c7d 0x9ef2 +0x6c7e 0x9ef5 +0x6d21 0x9ef8 +0x6d22 0x9eff +0x6d23 0x9f02 +0x6d24 0x9f03 +0x6d25 0x9f09 +0x6d26 0x9f0f +0x6d27 0x9f10 +0x6d28 0x9f11 +0x6d29 0x9f12 +0x6d2a 0x9f14 +0x6d2b 0x9f16 +0x6d2c 0x9f17 +0x6d2d 0x9f19 +0x6d2e 0x9f1a +0x6d2f 0x9f1b +0x6d30 0x9f1f +0x6d31 0x9f22 +0x6d32 0x9f26 +0x6d33 0x9f2a +0x6d34 0x9f2b +0x6d35 0x9f2f +0x6d36 0x9f31 +0x6d37 0x9f32 +0x6d38 0x9f34 +0x6d39 0x9f37 +0x6d3a 0x9f39 +0x6d3b 0x9f3a +0x6d3c 0x9f3c +0x6d3d 0x9f3d +0x6d3e 0x9f3f +0x6d3f 0x9f41 +0x6d40 0x9f43 +0x6d41 0x9f44 +0x6d42 0x9f45 +0x6d43 0x9f46 +0x6d44 0x9f47 +0x6d45 0x9f53 +0x6d46 0x9f55 +0x6d47 0x9f56 +0x6d48 0x9f57 +0x6d49 0x9f58 +0x6d4a 0x9f5a +0x6d4b 0x9f5d +0x6d4c 0x9f5e +0x6d4d 0x9f68 +0x6d4e 0x9f69 +0x6d4f 0x9f6d +0x6d50 0x9f6e +0x6d51 0x9f6f +0x6d52 0x9f70 +0x6d53 0x9f71 +0x6d54 0x9f73 +0x6d55 0x9f75 +0x6d56 0x9f7a +0x6d57 0x9f7d +0x6d58 0x9f8f +0x6d59 0x9f90 +0x6d5a 0x9f91 +0x6d5b 0x9f92 +0x6d5c 0x9f94 +0x6d5d 0x9f96 +0x6d5e 0x9f97 +0x6d5f 0x9f9e +0x6d60 0x9fa1 +0x6d61 0x9fa2 +0x6d62 0x9fa3 +0x6d63 0x9fa5 diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0212_MS5022X.map b/jdk/make/tools/CharsetMapping/JIS_X_0212_MS5022X.map new file mode 100644 index 00000000000..3f955eb1870 --- /dev/null +++ b/jdk/make/tools/CharsetMapping/JIS_X_0212_MS5022X.map @@ -0,0 +1,7105 @@ +# +# +# Entries after 0x6d63 only exist in c2b mappting table +# generated from JIS_X_0212_MS5022X_Encoder. Added here +# to make them round-trip +# +0x222f 0x02d8 +0x2230 0x02c7 +0x2231 0x00b8 +0x2232 0x02d9 +0x2233 0x02dd +0x2234 0x00af +0x2235 0x02db +0x2236 0x02da +0x2237 0xff5e +0x2238 0x0384 +0x2239 0x0385 +0x2242 0x00a1 +0x2243 0x00a6 +0x2244 0x00bf +0x226b 0x00ba +0x226c 0x00aa +0x226d 0x00a9 +0x226e 0x00ae +0x226f 0x2122 +0x2270 0x00a4 +0x2271 0x2116 +0x2661 0x0386 +0x2662 0x0388 +0x2663 0x0389 +0x2664 0x038a +0x2665 0x03aa +0x2667 0x038c +0x2669 0x038e +0x266a 0x03ab +0x266c 0x038f +0x2671 0x03ac +0x2672 0x03ad +0x2673 0x03ae +0x2674 0x03af +0x2675 0x03ca +0x2676 0x0390 +0x2677 0x03cc +0x2678 0x03c2 +0x2679 0x03cd +0x267a 0x03cb +0x267b 0x03b0 +0x267c 0x03ce +0x2742 0x0402 +0x2743 0x0403 +0x2744 0x0404 +0x2745 0x0405 +0x2746 0x0406 +0x2747 0x0407 +0x2748 0x0408 +0x2749 0x0409 +0x274a 0x040a +0x274b 0x040b +0x274c 0x040c +0x274d 0x040e +0x274e 0x040f +0x2772 0x0452 +0x2773 0x0453 +0x2774 0x0454 +0x2775 0x0455 +0x2776 0x0456 +0x2777 0x0457 +0x2778 0x0458 +0x2779 0x0459 +0x277a 0x045a +0x277b 0x045b +0x277c 0x045c +0x277d 0x045e +0x277e 0x045f +0x2921 0x00c6 +0x2922 0x0110 +0x2924 0x0126 +0x2926 0x0132 +0x2928 0x0141 +0x2929 0x013f +0x292b 0x014a +0x292c 0x00d8 +0x292d 0x0152 +0x292f 0x0166 +0x2930 0x00de +0x2941 0x00e6 +0x2942 0x0111 +0x2943 0x00f0 +0x2944 0x0127 +0x2945 0x0131 +0x2946 0x0133 +0x2947 0x0138 +0x2948 0x0142 +0x2949 0x0140 +0x294a 0x0149 +0x294b 0x014b +0x294c 0x00f8 +0x294d 0x0153 +0x294e 0x00df +0x294f 0x0167 +0x2950 0x00fe +0x2a21 0x00c1 +0x2a22 0x00c0 +0x2a23 0x00c4 +0x2a24 0x00c2 +0x2a25 0x0102 +0x2a26 0x01cd +0x2a27 0x0100 +0x2a28 0x0104 +0x2a29 0x00c5 +0x2a2a 0x00c3 +0x2a2b 0x0106 +0x2a2c 0x0108 +0x2a2d 0x010c +0x2a2e 0x00c7 +0x2a2f 0x010a +0x2a30 0x010e +0x2a31 0x00c9 +0x2a32 0x00c8 +0x2a33 0x00cb +0x2a34 0x00ca +0x2a35 0x011a +0x2a36 0x0116 +0x2a37 0x0112 +0x2a38 0x0118 +0x2a3a 0x011c +0x2a3b 0x011e +0x2a3c 0x0122 +0x2a3d 0x0120 +0x2a3e 0x0124 +0x2a3f 0x00cd +0x2a40 0x00cc +0x2a41 0x00cf +0x2a42 0x00ce +0x2a43 0x01cf +0x2a44 0x0130 +0x2a45 0x012a +0x2a46 0x012e +0x2a47 0x0128 +0x2a48 0x0134 +0x2a49 0x0136 +0x2a4a 0x0139 +0x2a4b 0x013d +0x2a4c 0x013b +0x2a4d 0x0143 +0x2a4e 0x0147 +0x2a4f 0x0145 +0x2a50 0x00d1 +0x2a51 0x00d3 +0x2a52 0x00d2 +0x2a53 0x00d6 +0x2a54 0x00d4 +0x2a55 0x01d1 +0x2a56 0x0150 +0x2a57 0x014c +0x2a58 0x00d5 +0x2a59 0x0154 +0x2a5a 0x0158 +0x2a5b 0x0156 +0x2a5c 0x015a +0x2a5d 0x015c +0x2a5e 0x0160 +0x2a5f 0x015e +0x2a60 0x0164 +0x2a61 0x0162 +0x2a62 0x00da +0x2a63 0x00d9 +0x2a64 0x00dc +0x2a65 0x00db +0x2a66 0x016c +0x2a67 0x01d3 +0x2a68 0x0170 +0x2a69 0x016a +0x2a6a 0x0172 +0x2a6b 0x016e +0x2a6c 0x0168 +0x2a6d 0x01d7 +0x2a6e 0x01db +0x2a6f 0x01d9 +0x2a70 0x01d5 +0x2a71 0x0174 +0x2a72 0x00dd +0x2a73 0x0178 +0x2a74 0x0176 +0x2a75 0x0179 +0x2a76 0x017d +0x2a77 0x017b +0x2b21 0x00e1 +0x2b22 0x00e0 +0x2b23 0x00e4 +0x2b24 0x00e2 +0x2b25 0x0103 +0x2b26 0x01ce +0x2b27 0x0101 +0x2b28 0x0105 +0x2b29 0x00e5 +0x2b2a 0x00e3 +0x2b2b 0x0107 +0x2b2c 0x0109 +0x2b2d 0x010d +0x2b2e 0x00e7 +0x2b2f 0x010b +0x2b30 0x010f +0x2b31 0x00e9 +0x2b32 0x00e8 +0x2b33 0x00eb +0x2b34 0x00ea +0x2b35 0x011b +0x2b36 0x0117 +0x2b37 0x0113 +0x2b38 0x0119 +0x2b39 0x01f5 +0x2b3a 0x011d +0x2b3b 0x011f +0x2b3d 0x0121 +0x2b3e 0x0125 +0x2b3f 0x00ed +0x2b40 0x00ec +0x2b41 0x00ef +0x2b42 0x00ee +0x2b43 0x01d0 +0x2b45 0x012b +0x2b46 0x012f +0x2b47 0x0129 +0x2b48 0x0135 +0x2b49 0x0137 +0x2b4a 0x013a +0x2b4b 0x013e +0x2b4c 0x013c +0x2b4d 0x0144 +0x2b4e 0x0148 +0x2b4f 0x0146 +0x2b50 0x00f1 +0x2b51 0x00f3 +0x2b52 0x00f2 +0x2b53 0x00f6 +0x2b54 0x00f4 +0x2b55 0x01d2 +0x2b56 0x0151 +0x2b57 0x014d +0x2b58 0x00f5 +0x2b59 0x0155 +0x2b5a 0x0159 +0x2b5b 0x0157 +0x2b5c 0x015b +0x2b5d 0x015d +0x2b5e 0x0161 +0x2b5f 0x015f +0x2b60 0x0165 +0x2b61 0x0163 +0x2b62 0x00fa +0x2b63 0x00f9 +0x2b64 0x00fc +0x2b65 0x00fb +0x2b66 0x016d +0x2b67 0x01d4 +0x2b68 0x0171 +0x2b69 0x016b +0x2b6a 0x0173 +0x2b6b 0x016f +0x2b6c 0x0169 +0x2b6d 0x01d8 +0x2b6e 0x01dc +0x2b6f 0x01da +0x2b70 0x01d6 +0x2b71 0x0175 +0x2b72 0x00fd +0x2b73 0x00ff +0x2b74 0x0177 +0x2b75 0x017a +0x2b76 0x017e +0x2b77 0x017c +0x3021 0x4e02 +0x3022 0x4e04 +0x3023 0x4e05 +0x3024 0x4e0c +0x3025 0x4e12 +0x3026 0x4e1f +0x3027 0x4e23 +0x3028 0x4e24 +0x3029 0x4e28 +0x302a 0x4e2b +0x302b 0x4e2e +0x302c 0x4e2f +0x302d 0x4e30 +0x302e 0x4e35 +0x302f 0x4e40 +0x3030 0x4e41 +0x3031 0x4e44 +0x3032 0x4e47 +0x3033 0x4e51 +0x3034 0x4e5a +0x3035 0x4e5c +0x3036 0x4e63 +0x3037 0x4e68 +0x3038 0x4e69 +0x3039 0x4e74 +0x303a 0x4e75 +0x303b 0x4e79 +0x303c 0x4e7f +0x303d 0x4e8d +0x303e 0x4e96 +0x303f 0x4e97 +0x3040 0x4e9d +0x3041 0x4eaf +0x3042 0x4eb9 +0x3043 0x4ec3 +0x3044 0x4ed0 +0x3045 0x4eda +0x3046 0x4edb +0x3047 0x4ee0 +0x3048 0x4ee1 +0x3049 0x4ee2 +0x304a 0x4ee8 +0x304b 0x4eef +0x304c 0x4ef1 +0x304d 0x4ef3 +0x304e 0x4ef5 +0x304f 0x4efd +0x3050 0x4efe +0x3051 0x4eff +0x3052 0x4f00 +0x3053 0x4f02 +0x3054 0x4f03 +0x3055 0x4f08 +0x3056 0x4f0b +0x3057 0x4f0c +0x3058 0x4f12 +0x3059 0x4f15 +0x305a 0x4f16 +0x305b 0x4f17 +0x305c 0x4f19 +0x305d 0x4f2e +0x305e 0x4f31 +0x305f 0x4f60 +0x3060 0x4f33 +0x3061 0x4f35 +0x3062 0x4f37 +0x3063 0x4f39 +0x3064 0x4f3b +0x3065 0x4f3e +0x3066 0x4f40 +0x3067 0x4f42 +0x3068 0x4f48 +0x3069 0x4f49 +0x306a 0x4f4b +0x306b 0x4f4c +0x306c 0x4f52 +0x306d 0x4f54 +0x306e 0x4f56 +0x306f 0x4f58 +0x3070 0x4f5f +0x3071 0x4f63 +0x3072 0x4f6a +0x3073 0x4f6c +0x3074 0x4f6e +0x3075 0x4f71 +0x3076 0x4f77 +0x3077 0x4f78 +0x3078 0x4f79 +0x3079 0x4f7a +0x307a 0x4f7d +0x307b 0x4f7e +0x307c 0x4f81 +0x307d 0x4f82 +0x307e 0x4f84 +0x3121 0x4f85 +0x3122 0x4f89 +0x3123 0x4f8a +0x3124 0x4f8c +0x3125 0x4f8e +0x3126 0x4f90 +0x3127 0x4f92 +0x3128 0x4f93 +0x3129 0x4f94 +0x312a 0x4f97 +0x312b 0x4f99 +0x312c 0x4f9a +0x312d 0x4f9e +0x312e 0x4f9f +0x312f 0x4fb2 +0x3130 0x4fb7 +0x3131 0x4fb9 +0x3132 0x4fbb +0x3133 0x4fbc +0x3134 0x4fbd +0x3135 0x4fbe +0x3136 0x4fc0 +0x3137 0x4fc1 +0x3138 0x4fc5 +0x3139 0x4fc6 +0x313a 0x4fc8 +0x313b 0x4fc9 +0x313c 0x4fcb +0x313d 0x4fcc +0x313e 0x4fcd +0x313f 0x4fcf +0x3140 0x4fd2 +0x3141 0x4fdc +0x3142 0x4fe0 +0x3143 0x4fe2 +0x3144 0x4ff0 +0x3145 0x4ff2 +0x3146 0x4ffc +0x3147 0x4ffd +0x3148 0x4fff +0x3149 0x5000 +0x314a 0x5001 +0x314b 0x5004 +0x314c 0x5007 +0x314d 0x500a +0x314e 0x500c +0x314f 0x500e +0x3150 0x5010 +0x3151 0x5013 +0x3152 0x5017 +0x3153 0x5018 +0x3154 0x501b +0x3155 0x501c +0x3156 0x501d +0x3157 0x501e +0x3158 0x5022 +0x3159 0x5027 +0x315a 0x502e +0x315b 0x5030 +0x315c 0x5032 +0x315d 0x5033 +0x315e 0x5035 +0x315f 0x5040 +0x3160 0x5041 +0x3161 0x5042 +0x3162 0x5045 +0x3163 0x5046 +0x3164 0x504a +0x3165 0x504c +0x3166 0x504e +0x3167 0x5051 +0x3168 0x5052 +0x3169 0x5053 +0x316a 0x5057 +0x316b 0x5059 +0x316c 0x505f +0x316d 0x5060 +0x316e 0x5062 +0x316f 0x5063 +0x3170 0x5066 +0x3171 0x5067 +0x3172 0x506a +0x3173 0x506d +0x3174 0x5070 +0x3175 0x5071 +0x3176 0x503b +0x3177 0x5081 +0x3178 0x5083 +0x3179 0x5084 +0x317a 0x5086 +0x317b 0x508a +0x317c 0x508e +0x317d 0x508f +0x317e 0x5090 +0x3221 0x5092 +0x3222 0x5093 +0x3223 0x5094 +0x3224 0x5096 +0x3225 0x509b +0x3226 0x509c +0x3227 0x509e +0x3228 0x509f +0x3229 0x50a0 +0x322a 0x50a1 +0x322b 0x50a2 +0x322c 0x50aa +0x322d 0x50af +0x322e 0x50b0 +0x322f 0x50b9 +0x3230 0x50ba +0x3231 0x50bd +0x3232 0x50c0 +0x3233 0x50c3 +0x3234 0x50c4 +0x3235 0x50c7 +0x3236 0x50cc +0x3237 0x50ce +0x3238 0x50d0 +0x3239 0x50d3 +0x323a 0x50d4 +0x323b 0x50d8 +0x323c 0x50dc +0x323d 0x50dd +0x323e 0x50df +0x323f 0x50e2 +0x3240 0x50e4 +0x3241 0x50e6 +0x3242 0x50e8 +0x3243 0x50e9 +0x3244 0x50ef +0x3245 0x50f1 +0x3246 0x50f6 +0x3247 0x50fa +0x3248 0x50fe +0x3249 0x5103 +0x324a 0x5106 +0x324b 0x5107 +0x324c 0x5108 +0x324d 0x510b +0x324e 0x510c +0x324f 0x510d +0x3250 0x510e +0x3251 0x50f2 +0x3252 0x5110 +0x3253 0x5117 +0x3254 0x5119 +0x3255 0x511b +0x3256 0x511c +0x3257 0x511d +0x3258 0x511e +0x3259 0x5123 +0x325a 0x5127 +0x325b 0x5128 +0x325c 0x512c +0x325d 0x512d +0x325e 0x512f +0x325f 0x5131 +0x3260 0x5133 +0x3261 0x5134 +0x3262 0x5135 +0x3263 0x5138 +0x3264 0x5139 +0x3265 0x5142 +0x3266 0x514a +0x3267 0x514f +0x3268 0x5153 +0x3269 0x5155 +0x326a 0x5157 +0x326b 0x5158 +0x326c 0x515f +0x326d 0x5164 +0x326e 0x5166 +0x326f 0x517e +0x3270 0x5183 +0x3271 0x5184 +0x3272 0x518b +0x3273 0x518e +0x3274 0x5198 +0x3275 0x519d +0x3276 0x51a1 +0x3277 0x51a3 +0x3278 0x51ad +0x3279 0x51b8 +0x327a 0x51ba +0x327b 0x51bc +0x327c 0x51be +0x327d 0x51bf +0x327e 0x51c2 +0x3321 0x51c8 +0x3322 0x51cf +0x3323 0x51d1 +0x3324 0x51d2 +0x3325 0x51d3 +0x3326 0x51d5 +0x3327 0x51d8 +0x3328 0x51de +0x3329 0x51e2 +0x332a 0x51e5 +0x332b 0x51ee +0x332c 0x51f2 +0x332d 0x51f3 +0x332e 0x51f4 +0x332f 0x51f7 +0x3330 0x5201 +0x3331 0x5202 +0x3332 0x5205 +0x3333 0x5212 +0x3334 0x5213 +0x3335 0x5215 +0x3336 0x5216 +0x3337 0x5218 +0x3338 0x5222 +0x3339 0x5228 +0x333a 0x5231 +0x333b 0x5232 +0x333c 0x5235 +0x333d 0x523c +0x333e 0x5245 +0x333f 0x5249 +0x3340 0x5255 +0x3341 0x5257 +0x3342 0x5258 +0x3343 0x525a +0x3344 0x525c +0x3345 0x525f +0x3346 0x5260 +0x3347 0x5261 +0x3348 0x5266 +0x3349 0x526e +0x334a 0x5277 +0x334b 0x5278 +0x334c 0x5279 +0x334d 0x5280 +0x334e 0x5282 +0x334f 0x5285 +0x3350 0x528a +0x3351 0x528c +0x3352 0x5293 +0x3353 0x5295 +0x3354 0x5296 +0x3355 0x5297 +0x3356 0x5298 +0x3357 0x529a +0x3358 0x529c +0x3359 0x52a4 +0x335a 0x52a5 +0x335b 0x52a6 +0x335c 0x52a7 +0x335d 0x52af +0x335e 0x52b0 +0x335f 0x52b6 +0x3360 0x52b7 +0x3361 0x52b8 +0x3362 0x52ba +0x3363 0x52bb +0x3364 0x52bd +0x3365 0x52c0 +0x3366 0x52c4 +0x3367 0x52c6 +0x3368 0x52c8 +0x3369 0x52cc +0x336a 0x52cf +0x336b 0x52d1 +0x336c 0x52d4 +0x336d 0x52d6 +0x336e 0x52db +0x336f 0x52dc +0x3370 0x52e1 +0x3371 0x52e5 +0x3372 0x52e8 +0x3373 0x52e9 +0x3374 0x52ea +0x3375 0x52ec +0x3376 0x52f0 +0x3377 0x52f1 +0x3378 0x52f4 +0x3379 0x52f6 +0x337a 0x52f7 +0x337b 0x5300 +0x337c 0x5303 +0x337d 0x530a +0x337e 0x530b +0x3421 0x530c +0x3422 0x5311 +0x3423 0x5313 +0x3424 0x5318 +0x3425 0x531b +0x3426 0x531c +0x3427 0x531e +0x3428 0x531f +0x3429 0x5325 +0x342a 0x5327 +0x342b 0x5328 +0x342c 0x5329 +0x342d 0x532b +0x342e 0x532c +0x342f 0x532d +0x3430 0x5330 +0x3431 0x5332 +0x3432 0x5335 +0x3433 0x533c +0x3434 0x533d +0x3435 0x533e +0x3436 0x5342 +0x3437 0x534c +0x3438 0x534b +0x3439 0x5359 +0x343a 0x535b +0x343b 0x5361 +0x343c 0x5363 +0x343d 0x5365 +0x343e 0x536c +0x343f 0x536d +0x3440 0x5372 +0x3441 0x5379 +0x3442 0x537e +0x3443 0x5383 +0x3444 0x5387 +0x3445 0x5388 +0x3446 0x538e +0x3447 0x5393 +0x3448 0x5394 +0x3449 0x5399 +0x344a 0x539d +0x344b 0x53a1 +0x344c 0x53a4 +0x344d 0x53aa +0x344e 0x53ab +0x344f 0x53af +0x3450 0x53b2 +0x3451 0x53b4 +0x3452 0x53b5 +0x3453 0x53b7 +0x3454 0x53b8 +0x3455 0x53ba +0x3456 0x53bd +0x3457 0x53c0 +0x3458 0x53c5 +0x3459 0x53cf +0x345a 0x53d2 +0x345b 0x53d3 +0x345c 0x53d5 +0x345d 0x53da +0x345e 0x53dd +0x345f 0x53de +0x3460 0x53e0 +0x3461 0x53e6 +0x3462 0x53e7 +0x3463 0x53f5 +0x3464 0x5402 +0x3465 0x5413 +0x3466 0x541a +0x3467 0x5421 +0x3468 0x5427 +0x3469 0x5428 +0x346a 0x542a +0x346b 0x542f +0x346c 0x5431 +0x346d 0x5434 +0x346e 0x5435 +0x346f 0x5443 +0x3470 0x5444 +0x3471 0x5447 +0x3472 0x544d +0x3473 0x544f +0x3474 0x545e +0x3475 0x5462 +0x3476 0x5464 +0x3477 0x5466 +0x3478 0x5467 +0x3479 0x5469 +0x347a 0x546b +0x347b 0x546d +0x347c 0x546e +0x347d 0x5474 +0x347e 0x547f +0x3521 0x5481 +0x3522 0x5483 +0x3523 0x5485 +0x3524 0x5488 +0x3525 0x5489 +0x3526 0x548d +0x3527 0x5491 +0x3528 0x5495 +0x3529 0x5496 +0x352a 0x549c +0x352b 0x549f +0x352c 0x54a1 +0x352d 0x54a6 +0x352e 0x54a7 +0x352f 0x54a9 +0x3530 0x54aa +0x3531 0x54ad +0x3532 0x54ae +0x3533 0x54b1 +0x3534 0x54b7 +0x3535 0x54b9 +0x3536 0x54ba +0x3537 0x54bb +0x3538 0x54bf +0x3539 0x54c6 +0x353a 0x54ca +0x353b 0x54cd +0x353c 0x54ce +0x353d 0x54e0 +0x353e 0x54ea +0x353f 0x54ec +0x3540 0x54ef +0x3541 0x54f6 +0x3542 0x54fc +0x3543 0x54fe +0x3544 0x54ff +0x3545 0x5500 +0x3546 0x5501 +0x3547 0x5505 +0x3548 0x5508 +0x3549 0x5509 +0x354a 0x550c +0x354b 0x550d +0x354c 0x550e +0x354d 0x5515 +0x354e 0x552a +0x354f 0x552b +0x3550 0x5532 +0x3551 0x5535 +0x3552 0x5536 +0x3553 0x553b +0x3554 0x553c +0x3555 0x553d +0x3556 0x5541 +0x3557 0x5547 +0x3558 0x5549 +0x3559 0x554a +0x355a 0x554d +0x355b 0x5550 +0x355c 0x5551 +0x355d 0x5558 +0x355e 0x555a +0x355f 0x555b +0x3560 0x555e +0x3561 0x5560 +0x3562 0x5561 +0x3563 0x5564 +0x3564 0x5566 +0x3565 0x557f +0x3566 0x5581 +0x3567 0x5582 +0x3568 0x5586 +0x3569 0x5588 +0x356a 0x558e +0x356b 0x558f +0x356c 0x5591 +0x356d 0x5592 +0x356e 0x5593 +0x356f 0x5594 +0x3570 0x5597 +0x3571 0x55a3 +0x3572 0x55a4 +0x3573 0x55ad +0x3574 0x55b2 +0x3575 0x55bf +0x3576 0x55c1 +0x3577 0x55c3 +0x3578 0x55c6 +0x3579 0x55c9 +0x357a 0x55cb +0x357b 0x55cc +0x357c 0x55ce +0x357d 0x55d1 +0x357e 0x55d2 +0x3621 0x55d3 +0x3622 0x55d7 +0x3623 0x55d8 +0x3624 0x55db +0x3625 0x55de +0x3626 0x55e2 +0x3627 0x55e9 +0x3628 0x55f6 +0x3629 0x55ff +0x362a 0x5605 +0x362b 0x5608 +0x362c 0x560a +0x362d 0x560d +0x362e 0x560e +0x362f 0x560f +0x3630 0x5610 +0x3631 0x5611 +0x3632 0x5612 +0x3633 0x5619 +0x3634 0x562c +0x3635 0x5630 +0x3636 0x5633 +0x3637 0x5635 +0x3638 0x5637 +0x3639 0x5639 +0x363a 0x563b +0x363b 0x563c +0x363c 0x563d +0x363d 0x563f +0x363e 0x5640 +0x363f 0x5641 +0x3640 0x5643 +0x3641 0x5644 +0x3642 0x5646 +0x3643 0x5649 +0x3644 0x564b +0x3645 0x564d +0x3646 0x564f +0x3647 0x5654 +0x3648 0x565e +0x3649 0x5660 +0x364a 0x5661 +0x364b 0x5662 +0x364c 0x5663 +0x364d 0x5666 +0x364e 0x5669 +0x364f 0x566d +0x3650 0x566f +0x3651 0x5671 +0x3652 0x5672 +0x3653 0x5675 +0x3654 0x5684 +0x3655 0x5685 +0x3656 0x5688 +0x3657 0x568b +0x3658 0x568c +0x3659 0x5695 +0x365a 0x5699 +0x365b 0x569a +0x365c 0x569d +0x365d 0x569e +0x365e 0x569f +0x365f 0x56a6 +0x3660 0x56a7 +0x3661 0x56a8 +0x3662 0x56a9 +0x3663 0x56ab +0x3664 0x56ac +0x3665 0x56ad +0x3666 0x56b1 +0x3667 0x56b3 +0x3668 0x56b7 +0x3669 0x56be +0x366a 0x56c5 +0x366b 0x56c9 +0x366c 0x56ca +0x366d 0x56cb +0x366e 0x56cf +0x366f 0x56d0 +0x3670 0x56cc +0x3671 0x56cd +0x3672 0x56d9 +0x3673 0x56dc +0x3674 0x56dd +0x3675 0x56df +0x3676 0x56e1 +0x3677 0x56e4 +0x3678 0x56e5 +0x3679 0x56e6 +0x367a 0x56e7 +0x367b 0x56e8 +0x367c 0x56f1 +0x367d 0x56eb +0x367e 0x56ed +0x3721 0x56f6 +0x3722 0x56f7 +0x3723 0x5701 +0x3724 0x5702 +0x3725 0x5707 +0x3726 0x570a +0x3727 0x570c +0x3728 0x5711 +0x3729 0x5715 +0x372a 0x571a +0x372b 0x571b +0x372c 0x571d +0x372d 0x5720 +0x372e 0x5722 +0x372f 0x5723 +0x3730 0x5724 +0x3731 0x5725 +0x3732 0x5729 +0x3733 0x572a +0x3734 0x572c +0x3735 0x572e +0x3736 0x572f +0x3737 0x5733 +0x3738 0x5734 +0x3739 0x573d +0x373a 0x573e +0x373b 0x573f +0x373c 0x5745 +0x373d 0x5746 +0x373e 0x574c +0x373f 0x574d +0x3740 0x5752 +0x3741 0x5762 +0x3742 0x5765 +0x3743 0x5767 +0x3744 0x5768 +0x3745 0x576b +0x3746 0x576d +0x3747 0x576e +0x3748 0x576f +0x3749 0x5770 +0x374a 0x5771 +0x374b 0x5773 +0x374c 0x5774 +0x374d 0x5775 +0x374e 0x5777 +0x374f 0x5779 +0x3750 0x577a +0x3751 0x577b +0x3752 0x577c +0x3753 0x577e +0x3754 0x5781 +0x3755 0x5783 +0x3756 0x578c +0x3757 0x5794 +0x3758 0x5797 +0x3759 0x5799 +0x375a 0x579a +0x375b 0x579c +0x375c 0x579d +0x375d 0x579e +0x375e 0x579f +0x375f 0x57a1 +0x3760 0x5795 +0x3761 0x57a7 +0x3762 0x57a8 +0x3763 0x57a9 +0x3764 0x57ac +0x3765 0x57b8 +0x3766 0x57bd +0x3767 0x57c7 +0x3768 0x57c8 +0x3769 0x57cc +0x376a 0x57cf +0x376b 0x57d5 +0x376c 0x57dd +0x376d 0x57de +0x376e 0x57e4 +0x376f 0x57e6 +0x3770 0x57e7 +0x3771 0x57e9 +0x3772 0x57ed +0x3773 0x57f0 +0x3774 0x57f5 +0x3775 0x57f6 +0x3776 0x57f8 +0x3777 0x57fd +0x3778 0x57fe +0x3779 0x57ff +0x377a 0x5803 +0x377b 0x5804 +0x377c 0x5808 +0x377d 0x5809 +0x377e 0x57e1 +0x3821 0x580c +0x3822 0x580d +0x3823 0x581b +0x3824 0x581e +0x3825 0x581f +0x3826 0x5820 +0x3827 0x5826 +0x3828 0x5827 +0x3829 0x582d +0x382a 0x5832 +0x382b 0x5839 +0x382c 0x583f +0x382d 0x5849 +0x382e 0x584c +0x382f 0x584d +0x3830 0x584f +0x3831 0x5850 +0x3832 0x5855 +0x3833 0x585f +0x3834 0x5861 +0x3835 0x5864 +0x3836 0x5867 +0x3837 0x5868 +0x3838 0x5878 +0x3839 0x587c +0x383a 0x587f +0x383b 0x5880 +0x383c 0x5881 +0x383d 0x5887 +0x383e 0x5888 +0x383f 0x5889 +0x3840 0x588a +0x3841 0x588c +0x3842 0x588d +0x3843 0x588f +0x3844 0x5890 +0x3845 0x5894 +0x3846 0x5896 +0x3847 0x589d +0x3848 0x58a0 +0x3849 0x58a1 +0x384a 0x58a2 +0x384b 0x58a6 +0x384c 0x58a9 +0x384d 0x58b1 +0x384e 0x58b2 +0x384f 0x58c4 +0x3850 0x58bc +0x3851 0x58c2 +0x3852 0x58c8 +0x3853 0x58cd +0x3854 0x58ce +0x3855 0x58d0 +0x3856 0x58d2 +0x3857 0x58d4 +0x3858 0x58d6 +0x3859 0x58da +0x385a 0x58dd +0x385b 0x58e1 +0x385c 0x58e2 +0x385d 0x58e9 +0x385e 0x58f3 +0x385f 0x5905 +0x3860 0x5906 +0x3861 0x590b +0x3862 0x590c +0x3863 0x5912 +0x3864 0x5913 +0x3865 0x5914 +0x3866 0x8641 +0x3867 0x591d +0x3868 0x5921 +0x3869 0x5923 +0x386a 0x5924 +0x386b 0x5928 +0x386c 0x592f +0x386d 0x5930 +0x386e 0x5933 +0x386f 0x5935 +0x3870 0x5936 +0x3871 0x593f +0x3872 0x5943 +0x3873 0x5946 +0x3874 0x5952 +0x3875 0x5953 +0x3876 0x5959 +0x3877 0x595b +0x3878 0x595d +0x3879 0x595e +0x387a 0x595f +0x387b 0x5961 +0x387c 0x5963 +0x387d 0x596b +0x387e 0x596d +0x3921 0x596f +0x3922 0x5972 +0x3923 0x5975 +0x3924 0x5976 +0x3925 0x5979 +0x3926 0x597b +0x3927 0x597c +0x3928 0x598b +0x3929 0x598c +0x392a 0x598e +0x392b 0x5992 +0x392c 0x5995 +0x392d 0x5997 +0x392e 0x599f +0x392f 0x59a4 +0x3930 0x59a7 +0x3931 0x59ad +0x3932 0x59ae +0x3933 0x59af +0x3934 0x59b0 +0x3935 0x59b3 +0x3936 0x59b7 +0x3937 0x59ba +0x3938 0x59bc +0x3939 0x59c1 +0x393a 0x59c3 +0x393b 0x59c4 +0x393c 0x59c8 +0x393d 0x59ca +0x393e 0x59cd +0x393f 0x59d2 +0x3940 0x59dd +0x3941 0x59de +0x3942 0x59df +0x3943 0x59e3 +0x3944 0x59e4 +0x3945 0x59e7 +0x3946 0x59ee +0x3947 0x59ef +0x3948 0x59f1 +0x3949 0x59f2 +0x394a 0x59f4 +0x394b 0x59f7 +0x394c 0x5a00 +0x394d 0x5a04 +0x394e 0x5a0c +0x394f 0x5a0d +0x3950 0x5a0e +0x3951 0x5a12 +0x3952 0x5a13 +0x3953 0x5a1e +0x3954 0x5a23 +0x3955 0x5a24 +0x3956 0x5a27 +0x3957 0x5a28 +0x3958 0x5a2a +0x3959 0x5a2d +0x395a 0x5a30 +0x395b 0x5a44 +0x395c 0x5a45 +0x395d 0x5a47 +0x395e 0x5a48 +0x395f 0x5a4c +0x3960 0x5a50 +0x3961 0x5a55 +0x3962 0x5a5e +0x3963 0x5a63 +0x3964 0x5a65 +0x3965 0x5a67 +0x3966 0x5a6d +0x3967 0x5a77 +0x3968 0x5a7a +0x3969 0x5a7b +0x396a 0x5a7e +0x396b 0x5a8b +0x396c 0x5a90 +0x396d 0x5a93 +0x396e 0x5a96 +0x396f 0x5a99 +0x3970 0x5a9c +0x3971 0x5a9e +0x3972 0x5a9f +0x3973 0x5aa0 +0x3974 0x5aa2 +0x3975 0x5aa7 +0x3976 0x5aac +0x3977 0x5ab1 +0x3978 0x5ab2 +0x3979 0x5ab3 +0x397a 0x5ab5 +0x397b 0x5ab8 +0x397c 0x5aba +0x397d 0x5abb +0x397e 0x5abf +0x3a21 0x5ac4 +0x3a22 0x5ac6 +0x3a23 0x5ac8 +0x3a24 0x5acf +0x3a25 0x5ada +0x3a26 0x5adc +0x3a27 0x5ae0 +0x3a28 0x5ae5 +0x3a29 0x5aea +0x3a2a 0x5aee +0x3a2b 0x5af5 +0x3a2c 0x5af6 +0x3a2d 0x5afd +0x3a2e 0x5b00 +0x3a2f 0x5b01 +0x3a30 0x5b08 +0x3a31 0x5b17 +0x3a32 0x5b34 +0x3a33 0x5b19 +0x3a34 0x5b1b +0x3a35 0x5b1d +0x3a36 0x5b21 +0x3a37 0x5b25 +0x3a38 0x5b2d +0x3a39 0x5b38 +0x3a3a 0x5b41 +0x3a3b 0x5b4b +0x3a3c 0x5b4c +0x3a3d 0x5b52 +0x3a3e 0x5b56 +0x3a3f 0x5b5e +0x3a40 0x5b68 +0x3a41 0x5b6e +0x3a42 0x5b6f +0x3a43 0x5b7c +0x3a44 0x5b7d +0x3a45 0x5b7e +0x3a46 0x5b7f +0x3a47 0x5b81 +0x3a48 0x5b84 +0x3a49 0x5b86 +0x3a4a 0x5b8a +0x3a4b 0x5b8e +0x3a4c 0x5b90 +0x3a4d 0x5b91 +0x3a4e 0x5b93 +0x3a4f 0x5b94 +0x3a50 0x5b96 +0x3a51 0x5ba8 +0x3a52 0x5ba9 +0x3a53 0x5bac +0x3a54 0x5bad +0x3a55 0x5baf +0x3a56 0x5bb1 +0x3a57 0x5bb2 +0x3a58 0x5bb7 +0x3a59 0x5bba +0x3a5a 0x5bbc +0x3a5b 0x5bc0 +0x3a5c 0x5bc1 +0x3a5d 0x5bcd +0x3a5e 0x5bcf +0x3a5f 0x5bd6 +0x3a60 0x5bd7 +0x3a61 0x5bd8 +0x3a62 0x5bd9 +0x3a63 0x5bda +0x3a64 0x5be0 +0x3a65 0x5bef +0x3a66 0x5bf1 +0x3a67 0x5bf4 +0x3a68 0x5bfd +0x3a69 0x5c0c +0x3a6a 0x5c17 +0x3a6b 0x5c1e +0x3a6c 0x5c1f +0x3a6d 0x5c23 +0x3a6e 0x5c26 +0x3a6f 0x5c29 +0x3a70 0x5c2b +0x3a71 0x5c2c +0x3a72 0x5c2e +0x3a73 0x5c30 +0x3a74 0x5c32 +0x3a75 0x5c35 +0x3a76 0x5c36 +0x3a77 0x5c59 +0x3a78 0x5c5a +0x3a79 0x5c5c +0x3a7a 0x5c62 +0x3a7b 0x5c63 +0x3a7c 0x5c67 +0x3a7d 0x5c68 +0x3a7e 0x5c69 +0x3b21 0x5c6d +0x3b22 0x5c70 +0x3b23 0x5c74 +0x3b24 0x5c75 +0x3b25 0x5c7a +0x3b26 0x5c7b +0x3b27 0x5c7c +0x3b28 0x5c7d +0x3b29 0x5c87 +0x3b2a 0x5c88 +0x3b2b 0x5c8a +0x3b2c 0x5c8f +0x3b2d 0x5c92 +0x3b2e 0x5c9d +0x3b2f 0x5c9f +0x3b30 0x5ca0 +0x3b31 0x5ca2 +0x3b32 0x5ca3 +0x3b33 0x5ca6 +0x3b34 0x5caa +0x3b35 0x5cb2 +0x3b36 0x5cb4 +0x3b37 0x5cb5 +0x3b38 0x5cba +0x3b39 0x5cc9 +0x3b3a 0x5ccb +0x3b3b 0x5cd2 +0x3b3c 0x5cdd +0x3b3d 0x5cd7 +0x3b3e 0x5cee +0x3b3f 0x5cf1 +0x3b40 0x5cf2 +0x3b41 0x5cf4 +0x3b42 0x5d01 +0x3b43 0x5d06 +0x3b44 0x5d0d +0x3b45 0x5d12 +0x3b46 0x5d2b +0x3b47 0x5d23 +0x3b48 0x5d24 +0x3b49 0x5d26 +0x3b4a 0x5d27 +0x3b4b 0x5d31 +0x3b4c 0x5d34 +0x3b4d 0x5d39 +0x3b4e 0x5d3d +0x3b4f 0x5d3f +0x3b50 0x5d42 +0x3b51 0x5d43 +0x3b52 0x5d46 +0x3b53 0x5d48 +0x3b54 0x5d55 +0x3b55 0x5d51 +0x3b56 0x5d59 +0x3b57 0x5d4a +0x3b58 0x5d5f +0x3b59 0x5d60 +0x3b5a 0x5d61 +0x3b5b 0x5d62 +0x3b5c 0x5d64 +0x3b5d 0x5d6a +0x3b5e 0x5d6d +0x3b5f 0x5d70 +0x3b60 0x5d79 +0x3b61 0x5d7a +0x3b62 0x5d7e +0x3b63 0x5d7f +0x3b64 0x5d81 +0x3b65 0x5d83 +0x3b66 0x5d88 +0x3b67 0x5d8a +0x3b68 0x5d92 +0x3b69 0x5d93 +0x3b6a 0x5d94 +0x3b6b 0x5d95 +0x3b6c 0x5d99 +0x3b6d 0x5d9b +0x3b6e 0x5d9f +0x3b6f 0x5da0 +0x3b70 0x5da7 +0x3b71 0x5dab +0x3b72 0x5db0 +0x3b73 0x5db4 +0x3b74 0x5db8 +0x3b75 0x5db9 +0x3b76 0x5dc3 +0x3b77 0x5dc7 +0x3b78 0x5dcb +0x3b79 0x5dd0 +0x3b7a 0x5dce +0x3b7b 0x5dd8 +0x3b7c 0x5dd9 +0x3b7d 0x5de0 +0x3b7e 0x5de4 +0x3c21 0x5de9 +0x3c22 0x5df8 +0x3c23 0x5df9 +0x3c24 0x5e00 +0x3c25 0x5e07 +0x3c26 0x5e0d +0x3c27 0x5e12 +0x3c28 0x5e14 +0x3c29 0x5e15 +0x3c2a 0x5e18 +0x3c2b 0x5e1f +0x3c2c 0x5e20 +0x3c2d 0x5e2e +0x3c2e 0x5e28 +0x3c2f 0x5e32 +0x3c30 0x5e35 +0x3c31 0x5e3e +0x3c32 0x5e4b +0x3c33 0x5e50 +0x3c34 0x5e49 +0x3c35 0x5e51 +0x3c36 0x5e56 +0x3c37 0x5e58 +0x3c38 0x5e5b +0x3c39 0x5e5c +0x3c3a 0x5e5e +0x3c3b 0x5e68 +0x3c3c 0x5e6a +0x3c3d 0x5e6b +0x3c3e 0x5e6c +0x3c3f 0x5e6d +0x3c40 0x5e6e +0x3c41 0x5e70 +0x3c42 0x5e80 +0x3c43 0x5e8b +0x3c44 0x5e8e +0x3c45 0x5ea2 +0x3c46 0x5ea4 +0x3c47 0x5ea5 +0x3c48 0x5ea8 +0x3c49 0x5eaa +0x3c4a 0x5eac +0x3c4b 0x5eb1 +0x3c4c 0x5eb3 +0x3c4d 0x5ebd +0x3c4e 0x5ebe +0x3c4f 0x5ebf +0x3c50 0x5ec6 +0x3c51 0x5ecc +0x3c52 0x5ecb +0x3c53 0x5ece +0x3c54 0x5ed1 +0x3c55 0x5ed2 +0x3c56 0x5ed4 +0x3c57 0x5ed5 +0x3c58 0x5edc +0x3c59 0x5ede +0x3c5a 0x5ee5 +0x3c5b 0x5eeb +0x3c5c 0x5f02 +0x3c5d 0x5f06 +0x3c5e 0x5f07 +0x3c5f 0x5f08 +0x3c60 0x5f0e +0x3c61 0x5f19 +0x3c62 0x5f1c +0x3c63 0x5f1d +0x3c64 0x5f21 +0x3c65 0x5f22 +0x3c66 0x5f23 +0x3c67 0x5f24 +0x3c68 0x5f28 +0x3c69 0x5f2b +0x3c6a 0x5f2c +0x3c6b 0x5f2e +0x3c6c 0x5f30 +0x3c6d 0x5f34 +0x3c6e 0x5f36 +0x3c6f 0x5f3b +0x3c70 0x5f3d +0x3c71 0x5f3f +0x3c72 0x5f40 +0x3c73 0x5f44 +0x3c74 0x5f45 +0x3c75 0x5f47 +0x3c76 0x5f4d +0x3c77 0x5f50 +0x3c78 0x5f54 +0x3c79 0x5f58 +0x3c7a 0x5f5b +0x3c7b 0x5f60 +0x3c7c 0x5f63 +0x3c7d 0x5f64 +0x3c7e 0x5f67 +0x3d21 0x5f6f +0x3d22 0x5f72 +0x3d23 0x5f74 +0x3d24 0x5f75 +0x3d25 0x5f78 +0x3d26 0x5f7a +0x3d27 0x5f7d +0x3d28 0x5f7e +0x3d29 0x5f89 +0x3d2a 0x5f8d +0x3d2b 0x5f8f +0x3d2c 0x5f96 +0x3d2d 0x5f9c +0x3d2e 0x5f9d +0x3d2f 0x5fa2 +0x3d30 0x5fa7 +0x3d31 0x5fab +0x3d32 0x5fa4 +0x3d33 0x5fac +0x3d34 0x5faf +0x3d35 0x5fb0 +0x3d36 0x5fb1 +0x3d37 0x5fb8 +0x3d38 0x5fc4 +0x3d39 0x5fc7 +0x3d3a 0x5fc8 +0x3d3b 0x5fc9 +0x3d3c 0x5fcb +0x3d3d 0x5fd0 +0x3d3e 0x5fd1 +0x3d3f 0x5fd2 +0x3d40 0x5fd3 +0x3d41 0x5fd4 +0x3d42 0x5fde +0x3d43 0x5fe1 +0x3d44 0x5fe2 +0x3d45 0x5fe8 +0x3d46 0x5fe9 +0x3d47 0x5fea +0x3d48 0x5fec +0x3d49 0x5fed +0x3d4a 0x5fee +0x3d4b 0x5fef +0x3d4c 0x5ff2 +0x3d4d 0x5ff3 +0x3d4e 0x5ff6 +0x3d4f 0x5ffa +0x3d50 0x5ffc +0x3d51 0x6007 +0x3d52 0x600a +0x3d53 0x600d +0x3d54 0x6013 +0x3d55 0x6014 +0x3d56 0x6017 +0x3d57 0x6018 +0x3d58 0x601a +0x3d59 0x601f +0x3d5a 0x6024 +0x3d5b 0x602d +0x3d5c 0x6033 +0x3d5d 0x6035 +0x3d5e 0x6040 +0x3d5f 0x6047 +0x3d60 0x6048 +0x3d61 0x6049 +0x3d62 0x604c +0x3d63 0x6051 +0x3d64 0x6054 +0x3d65 0x6056 +0x3d66 0x6057 +0x3d67 0x605d +0x3d68 0x6061 +0x3d69 0x6067 +0x3d6a 0x6071 +0x3d6b 0x607e +0x3d6c 0x607f +0x3d6d 0x6082 +0x3d6e 0x6086 +0x3d6f 0x6088 +0x3d70 0x608a +0x3d71 0x608e +0x3d72 0x6091 +0x3d73 0x6093 +0x3d74 0x6095 +0x3d75 0x6098 +0x3d76 0x609d +0x3d77 0x609e +0x3d78 0x60a2 +0x3d79 0x60a4 +0x3d7a 0x60a5 +0x3d7b 0x60a8 +0x3d7c 0x60b0 +0x3d7d 0x60b1 +0x3d7e 0x60b7 +0x3e21 0x60bb +0x3e22 0x60be +0x3e23 0x60c2 +0x3e24 0x60c4 +0x3e25 0x60c8 +0x3e26 0x60c9 +0x3e27 0x60ca +0x3e28 0x60cb +0x3e29 0x60ce +0x3e2a 0x60cf +0x3e2b 0x60d4 +0x3e2c 0x60d5 +0x3e2d 0x60d9 +0x3e2e 0x60db +0x3e2f 0x60dd +0x3e30 0x60de +0x3e31 0x60e2 +0x3e32 0x60e5 +0x3e33 0x60f2 +0x3e34 0x60f5 +0x3e35 0x60f8 +0x3e36 0x60fc +0x3e37 0x60fd +0x3e38 0x6102 +0x3e39 0x6107 +0x3e3a 0x610a +0x3e3b 0x610c +0x3e3c 0x6110 +0x3e3d 0x6111 +0x3e3e 0x6112 +0x3e3f 0x6113 +0x3e40 0x6114 +0x3e41 0x6116 +0x3e42 0x6117 +0x3e43 0x6119 +0x3e44 0x611c +0x3e45 0x611e +0x3e46 0x6122 +0x3e47 0x612a +0x3e48 0x612b +0x3e49 0x6130 +0x3e4a 0x6131 +0x3e4b 0x6135 +0x3e4c 0x6136 +0x3e4d 0x6137 +0x3e4e 0x6139 +0x3e4f 0x6141 +0x3e50 0x6145 +0x3e51 0x6146 +0x3e52 0x6149 +0x3e53 0x615e +0x3e54 0x6160 +0x3e55 0x616c +0x3e56 0x6172 +0x3e57 0x6178 +0x3e58 0x617b +0x3e59 0x617c +0x3e5a 0x617f +0x3e5b 0x6180 +0x3e5c 0x6181 +0x3e5d 0x6183 +0x3e5e 0x6184 +0x3e5f 0x618b +0x3e60 0x618d +0x3e61 0x6192 +0x3e62 0x6193 +0x3e63 0x6197 +0x3e64 0x6198 +0x3e65 0x619c +0x3e66 0x619d +0x3e67 0x619f +0x3e68 0x61a0 +0x3e69 0x61a5 +0x3e6a 0x61a8 +0x3e6b 0x61aa +0x3e6c 0x61ad +0x3e6d 0x61b8 +0x3e6e 0x61b9 +0x3e6f 0x61bc +0x3e70 0x61c0 +0x3e71 0x61c1 +0x3e72 0x61c2 +0x3e73 0x61ce +0x3e74 0x61cf +0x3e75 0x61d5 +0x3e76 0x61dc +0x3e77 0x61dd +0x3e78 0x61de +0x3e79 0x61df +0x3e7a 0x61e1 +0x3e7b 0x61e2 +0x3e7c 0x61e7 +0x3e7d 0x61e9 +0x3e7e 0x61e5 +0x3f21 0x61ec +0x3f22 0x61ed +0x3f23 0x61ef +0x3f24 0x6201 +0x3f25 0x6203 +0x3f26 0x6204 +0x3f27 0x6207 +0x3f28 0x6213 +0x3f29 0x6215 +0x3f2a 0x621c +0x3f2b 0x6220 +0x3f2c 0x6222 +0x3f2d 0x6223 +0x3f2e 0x6227 +0x3f2f 0x6229 +0x3f30 0x622b +0x3f31 0x6239 +0x3f32 0x623d +0x3f33 0x6242 +0x3f34 0x6243 +0x3f35 0x6244 +0x3f36 0x6246 +0x3f37 0x624c +0x3f38 0x6250 +0x3f39 0x6251 +0x3f3a 0x6252 +0x3f3b 0x6254 +0x3f3c 0x6256 +0x3f3d 0x625a +0x3f3e 0x625c +0x3f3f 0x6264 +0x3f40 0x626d +0x3f41 0x626f +0x3f42 0x6273 +0x3f43 0x627a +0x3f44 0x627d +0x3f45 0x628d +0x3f46 0x628e +0x3f47 0x628f +0x3f48 0x6290 +0x3f49 0x62a6 +0x3f4a 0x62a8 +0x3f4b 0x62b3 +0x3f4c 0x62b6 +0x3f4d 0x62b7 +0x3f4e 0x62ba +0x3f4f 0x62be +0x3f50 0x62bf +0x3f51 0x62c4 +0x3f52 0x62ce +0x3f53 0x62d5 +0x3f54 0x62d6 +0x3f55 0x62da +0x3f56 0x62ea +0x3f57 0x62f2 +0x3f58 0x62f4 +0x3f59 0x62fc +0x3f5a 0x62fd +0x3f5b 0x6303 +0x3f5c 0x6304 +0x3f5d 0x630a +0x3f5e 0x630b +0x3f5f 0x630d +0x3f60 0x6310 +0x3f61 0x6313 +0x3f62 0x6316 +0x3f63 0x6318 +0x3f64 0x6329 +0x3f65 0x632a +0x3f66 0x632d +0x3f67 0x6335 +0x3f68 0x6336 +0x3f69 0x6339 +0x3f6a 0x633c +0x3f6b 0x6341 +0x3f6c 0x6342 +0x3f6d 0x6343 +0x3f6e 0x6344 +0x3f6f 0x6346 +0x3f70 0x634a +0x3f71 0x634b +0x3f72 0x634e +0x3f73 0x6352 +0x3f74 0x6353 +0x3f75 0x6354 +0x3f76 0x6358 +0x3f77 0x635b +0x3f78 0x6365 +0x3f79 0x6366 +0x3f7a 0x636c +0x3f7b 0x636d +0x3f7c 0x6371 +0x3f7d 0x6374 +0x3f7e 0x6375 +0x4021 0x6378 +0x4022 0x637c +0x4023 0x637d +0x4024 0x637f +0x4025 0x6382 +0x4026 0x6384 +0x4027 0x6387 +0x4028 0x638a +0x4029 0x6390 +0x402a 0x6394 +0x402b 0x6395 +0x402c 0x6399 +0x402d 0x639a +0x402e 0x639e +0x402f 0x63a4 +0x4030 0x63a6 +0x4031 0x63ad +0x4032 0x63ae +0x4033 0x63af +0x4034 0x63bd +0x4035 0x63c1 +0x4036 0x63c5 +0x4037 0x63c8 +0x4038 0x63ce +0x4039 0x63d1 +0x403a 0x63d3 +0x403b 0x63d4 +0x403c 0x63d5 +0x403d 0x63dc +0x403e 0x63e0 +0x403f 0x63e5 +0x4040 0x63ea +0x4041 0x63ec +0x4042 0x63f2 +0x4043 0x63f3 +0x4044 0x63f5 +0x4045 0x63f8 +0x4046 0x63f9 +0x4047 0x6409 +0x4048 0x640a +0x4049 0x6410 +0x404a 0x6412 +0x404b 0x6414 +0x404c 0x6418 +0x404d 0x641e +0x404e 0x6420 +0x404f 0x6422 +0x4050 0x6424 +0x4051 0x6425 +0x4052 0x6429 +0x4053 0x642a +0x4054 0x642f +0x4055 0x6430 +0x4056 0x6435 +0x4057 0x643d +0x4058 0x643f +0x4059 0x644b +0x405a 0x644f +0x405b 0x6451 +0x405c 0x6452 +0x405d 0x6453 +0x405e 0x6454 +0x405f 0x645a +0x4060 0x645b +0x4061 0x645c +0x4062 0x645d +0x4063 0x645f +0x4064 0x6460 +0x4065 0x6461 +0x4066 0x6463 +0x4067 0x646d +0x4068 0x6473 +0x4069 0x6474 +0x406a 0x647b +0x406b 0x647d +0x406c 0x6485 +0x406d 0x6487 +0x406e 0x648f +0x406f 0x6490 +0x4070 0x6491 +0x4071 0x6498 +0x4072 0x6499 +0x4073 0x649b +0x4074 0x649d +0x4075 0x649f +0x4076 0x64a1 +0x4077 0x64a3 +0x4078 0x64a6 +0x4079 0x64a8 +0x407a 0x64ac +0x407b 0x64b3 +0x407c 0x64bd +0x407d 0x64be +0x407e 0x64bf +0x4121 0x64c4 +0x4122 0x64c9 +0x4123 0x64ca +0x4124 0x64cb +0x4125 0x64cc +0x4126 0x64ce +0x4127 0x64d0 +0x4128 0x64d1 +0x4129 0x64d5 +0x412a 0x64d7 +0x412b 0x64e4 +0x412c 0x64e5 +0x412d 0x64e9 +0x412e 0x64ea +0x412f 0x64ed +0x4130 0x64f0 +0x4131 0x64f5 +0x4132 0x64f7 +0x4133 0x64fb +0x4134 0x64ff +0x4135 0x6501 +0x4136 0x6504 +0x4137 0x6508 +0x4138 0x6509 +0x4139 0x650a +0x413a 0x650f +0x413b 0x6513 +0x413c 0x6514 +0x413d 0x6516 +0x413e 0x6519 +0x413f 0x651b +0x4140 0x651e +0x4141 0x651f +0x4142 0x6522 +0x4143 0x6526 +0x4144 0x6529 +0x4145 0x652e +0x4146 0x6531 +0x4147 0x653a +0x4148 0x653c +0x4149 0x653d +0x414a 0x6543 +0x414b 0x6547 +0x414c 0x6549 +0x414d 0x6550 +0x414e 0x6552 +0x414f 0x6554 +0x4150 0x655f +0x4151 0x6560 +0x4152 0x6567 +0x4153 0x656b +0x4154 0x657a +0x4155 0x657d +0x4156 0x6581 +0x4157 0x6585 +0x4158 0x658a +0x4159 0x6592 +0x415a 0x6595 +0x415b 0x6598 +0x415c 0x659d +0x415d 0x65a0 +0x415e 0x65a3 +0x415f 0x65a6 +0x4160 0x65ae +0x4161 0x65b2 +0x4162 0x65b3 +0x4163 0x65b4 +0x4164 0x65bf +0x4165 0x65c2 +0x4166 0x65c8 +0x4167 0x65c9 +0x4168 0x65ce +0x4169 0x65d0 +0x416a 0x65d4 +0x416b 0x65d6 +0x416c 0x65d8 +0x416d 0x65df +0x416e 0x65f0 +0x416f 0x65f2 +0x4170 0x65f4 +0x4171 0x65f5 +0x4172 0x65f9 +0x4173 0x65fe +0x4174 0x65ff +0x4175 0x6600 +0x4176 0x6604 +0x4177 0x6608 +0x4178 0x6609 +0x4179 0x660d +0x417a 0x6611 +0x417b 0x6612 +0x417c 0x6615 +0x417d 0x6616 +0x417e 0x661d +0x4221 0x661e +0x4222 0x6621 +0x4223 0x6622 +0x4224 0x6623 +0x4225 0x6624 +0x4226 0x6626 +0x4227 0x6629 +0x4228 0x662a +0x4229 0x662b +0x422a 0x662c +0x422b 0x662e +0x422c 0x6630 +0x422d 0x6631 +0x422e 0x6633 +0x422f 0x6639 +0x4230 0x6637 +0x4231 0x6640 +0x4232 0x6645 +0x4233 0x6646 +0x4234 0x664a +0x4235 0x664c +0x4236 0x6651 +0x4237 0x664e +0x4238 0x6657 +0x4239 0x6658 +0x423a 0x6659 +0x423b 0x665b +0x423c 0x665c +0x423d 0x6660 +0x423e 0x6661 +0x423f 0x66fb +0x4240 0x666a +0x4241 0x666b +0x4242 0x666c +0x4243 0x667e +0x4244 0x6673 +0x4245 0x6675 +0x4246 0x667f +0x4247 0x6677 +0x4248 0x6678 +0x4249 0x6679 +0x424a 0x667b +0x424b 0x6680 +0x424c 0x667c +0x424d 0x668b +0x424e 0x668c +0x424f 0x668d +0x4250 0x6690 +0x4251 0x6692 +0x4252 0x6699 +0x4253 0x669a +0x4254 0x669b +0x4255 0x669c +0x4256 0x669f +0x4257 0x66a0 +0x4258 0x66a4 +0x4259 0x66ad +0x425a 0x66b1 +0x425b 0x66b2 +0x425c 0x66b5 +0x425d 0x66bb +0x425e 0x66bf +0x425f 0x66c0 +0x4260 0x66c2 +0x4261 0x66c3 +0x4262 0x66c8 +0x4263 0x66cc +0x4264 0x66ce +0x4265 0x66cf +0x4266 0x66d4 +0x4267 0x66db +0x4268 0x66df +0x4269 0x66e8 +0x426a 0x66eb +0x426b 0x66ec +0x426c 0x66ee +0x426d 0x66fa +0x426e 0x6705 +0x426f 0x6707 +0x4270 0x670e +0x4271 0x6713 +0x4272 0x6719 +0x4273 0x671c +0x4274 0x6720 +0x4275 0x6722 +0x4276 0x6733 +0x4277 0x673e +0x4278 0x6745 +0x4279 0x6747 +0x427a 0x6748 +0x427b 0x674c +0x427c 0x6754 +0x427d 0x6755 +0x427e 0x675d +0x4321 0x6766 +0x4322 0x676c +0x4323 0x676e +0x4324 0x6774 +0x4325 0x6776 +0x4326 0x677b +0x4327 0x6781 +0x4328 0x6784 +0x4329 0x678e +0x432a 0x678f +0x432b 0x6791 +0x432c 0x6793 +0x432d 0x6796 +0x432e 0x6798 +0x432f 0x6799 +0x4330 0x679b +0x4331 0x67b0 +0x4332 0x67b1 +0x4333 0x67b2 +0x4334 0x67b5 +0x4335 0x67bb +0x4336 0x67bc +0x4337 0x67bd +0x4338 0x67f9 +0x4339 0x67c0 +0x433a 0x67c2 +0x433b 0x67c3 +0x433c 0x67c5 +0x433d 0x67c8 +0x433e 0x67c9 +0x433f 0x67d2 +0x4340 0x67d7 +0x4341 0x67d9 +0x4342 0x67dc +0x4343 0x67e1 +0x4344 0x67e6 +0x4345 0x67f0 +0x4346 0x67f2 +0x4347 0x67f6 +0x4348 0x67f7 +0x4349 0x6852 +0x434a 0x6814 +0x434b 0x6819 +0x434c 0x681d +0x434d 0x681f +0x434e 0x6828 +0x434f 0x6827 +0x4350 0x682c +0x4351 0x682d +0x4352 0x682f +0x4353 0x6830 +0x4354 0x6831 +0x4355 0x6833 +0x4356 0x683b +0x4357 0x683f +0x4358 0x6844 +0x4359 0x6845 +0x435a 0x684a +0x435b 0x684c +0x435c 0x6855 +0x435d 0x6857 +0x435e 0x6858 +0x435f 0x685b +0x4360 0x686b +0x4361 0x686e +0x4362 0x686f +0x4363 0x6870 +0x4364 0x6871 +0x4365 0x6872 +0x4366 0x6875 +0x4367 0x6879 +0x4368 0x687a +0x4369 0x687b +0x436a 0x687c +0x436b 0x6882 +0x436c 0x6884 +0x436d 0x6886 +0x436e 0x6888 +0x436f 0x6896 +0x4370 0x6898 +0x4371 0x689a +0x4372 0x689c +0x4373 0x68a1 +0x4374 0x68a3 +0x4375 0x68a5 +0x4376 0x68a9 +0x4377 0x68aa +0x4378 0x68ae +0x4379 0x68b2 +0x437a 0x68bb +0x437b 0x68c5 +0x437c 0x68c8 +0x437d 0x68cc +0x437e 0x68cf +0x4421 0x68d0 +0x4422 0x68d1 +0x4423 0x68d3 +0x4424 0x68d6 +0x4425 0x68d9 +0x4426 0x68dc +0x4427 0x68dd +0x4428 0x68e5 +0x4429 0x68e8 +0x442a 0x68ea +0x442b 0x68eb +0x442c 0x68ec +0x442d 0x68ed +0x442e 0x68f0 +0x442f 0x68f1 +0x4430 0x68f5 +0x4431 0x68f6 +0x4432 0x68fb +0x4433 0x68fc +0x4434 0x68fd +0x4435 0x6906 +0x4436 0x6909 +0x4437 0x690a +0x4438 0x6910 +0x4439 0x6911 +0x443a 0x6913 +0x443b 0x6916 +0x443c 0x6917 +0x443d 0x6931 +0x443e 0x6933 +0x443f 0x6935 +0x4440 0x6938 +0x4441 0x693b +0x4442 0x6942 +0x4443 0x6945 +0x4444 0x6949 +0x4445 0x694e +0x4446 0x6957 +0x4447 0x695b +0x4448 0x6963 +0x4449 0x6964 +0x444a 0x6965 +0x444b 0x6966 +0x444c 0x6968 +0x444d 0x6969 +0x444e 0x696c +0x444f 0x6970 +0x4450 0x6971 +0x4451 0x6972 +0x4452 0x697a +0x4453 0x697b +0x4454 0x697f +0x4455 0x6980 +0x4456 0x698d +0x4457 0x6992 +0x4458 0x6996 +0x4459 0x6998 +0x445a 0x69a1 +0x445b 0x69a5 +0x445c 0x69a6 +0x445d 0x69a8 +0x445e 0x69ab +0x445f 0x69ad +0x4460 0x69af +0x4461 0x69b7 +0x4462 0x69b8 +0x4463 0x69ba +0x4464 0x69bc +0x4465 0x69c5 +0x4466 0x69c8 +0x4467 0x69d1 +0x4468 0x69d6 +0x4469 0x69d7 +0x446a 0x69e2 +0x446b 0x69e5 +0x446c 0x69ee +0x446d 0x69ef +0x446e 0x69f1 +0x446f 0x69f3 +0x4470 0x69f5 +0x4471 0x69fe +0x4472 0x6a00 +0x4473 0x6a01 +0x4474 0x6a03 +0x4475 0x6a0f +0x4476 0x6a11 +0x4477 0x6a15 +0x4478 0x6a1a +0x4479 0x6a1d +0x447a 0x6a20 +0x447b 0x6a24 +0x447c 0x6a28 +0x447d 0x6a30 +0x447e 0x6a32 +0x4521 0x6a34 +0x4522 0x6a37 +0x4523 0x6a3b +0x4524 0x6a3e +0x4525 0x6a3f +0x4526 0x6a45 +0x4527 0x6a46 +0x4528 0x6a49 +0x4529 0x6a4a +0x452a 0x6a4e +0x452b 0x6a50 +0x452c 0x6a51 +0x452d 0x6a52 +0x452e 0x6a55 +0x452f 0x6a56 +0x4530 0x6a5b +0x4531 0x6a64 +0x4532 0x6a67 +0x4533 0x6a6a +0x4534 0x6a71 +0x4535 0x6a73 +0x4536 0x6a7e +0x4537 0x6a81 +0x4538 0x6a83 +0x4539 0x6a86 +0x453a 0x6a87 +0x453b 0x6a89 +0x453c 0x6a8b +0x453d 0x6a91 +0x453e 0x6a9b +0x453f 0x6a9d +0x4540 0x6a9e +0x4541 0x6a9f +0x4542 0x6aa5 +0x4543 0x6aab +0x4544 0x6aaf +0x4545 0x6ab0 +0x4546 0x6ab1 +0x4547 0x6ab4 +0x4548 0x6abd +0x4549 0x6abe +0x454a 0x6abf +0x454b 0x6ac6 +0x454c 0x6ac9 +0x454d 0x6ac8 +0x454e 0x6acc +0x454f 0x6ad0 +0x4550 0x6ad4 +0x4551 0x6ad5 +0x4552 0x6ad6 +0x4553 0x6adc +0x4554 0x6add +0x4555 0x6ae4 +0x4556 0x6ae7 +0x4557 0x6aec +0x4558 0x6af0 +0x4559 0x6af1 +0x455a 0x6af2 +0x455b 0x6afc +0x455c 0x6afd +0x455d 0x6b02 +0x455e 0x6b03 +0x455f 0x6b06 +0x4560 0x6b07 +0x4561 0x6b09 +0x4562 0x6b0f +0x4563 0x6b10 +0x4564 0x6b11 +0x4565 0x6b17 +0x4566 0x6b1b +0x4567 0x6b1e +0x4568 0x6b24 +0x4569 0x6b28 +0x456a 0x6b2b +0x456b 0x6b2c +0x456c 0x6b2f +0x456d 0x6b35 +0x456e 0x6b36 +0x456f 0x6b3b +0x4570 0x6b3f +0x4571 0x6b46 +0x4572 0x6b4a +0x4573 0x6b4d +0x4574 0x6b52 +0x4575 0x6b56 +0x4576 0x6b58 +0x4577 0x6b5d +0x4578 0x6b60 +0x4579 0x6b67 +0x457a 0x6b6b +0x457b 0x6b6e +0x457c 0x6b70 +0x457d 0x6b75 +0x457e 0x6b7d +0x4621 0x6b7e +0x4622 0x6b82 +0x4623 0x6b85 +0x4624 0x6b97 +0x4625 0x6b9b +0x4626 0x6b9f +0x4627 0x6ba0 +0x4628 0x6ba2 +0x4629 0x6ba3 +0x462a 0x6ba8 +0x462b 0x6ba9 +0x462c 0x6bac +0x462d 0x6bad +0x462e 0x6bae +0x462f 0x6bb0 +0x4630 0x6bb8 +0x4631 0x6bb9 +0x4632 0x6bbd +0x4633 0x6bbe +0x4634 0x6bc3 +0x4635 0x6bc4 +0x4636 0x6bc9 +0x4637 0x6bcc +0x4638 0x6bd6 +0x4639 0x6bda +0x463a 0x6be1 +0x463b 0x6be3 +0x463c 0x6be6 +0x463d 0x6be7 +0x463e 0x6bee +0x463f 0x6bf1 +0x4640 0x6bf7 +0x4641 0x6bf9 +0x4642 0x6bff +0x4643 0x6c02 +0x4644 0x6c04 +0x4645 0x6c05 +0x4646 0x6c09 +0x4647 0x6c0d +0x4648 0x6c0e +0x4649 0x6c10 +0x464a 0x6c12 +0x464b 0x6c19 +0x464c 0x6c1f +0x464d 0x6c26 +0x464e 0x6c27 +0x464f 0x6c28 +0x4650 0x6c2c +0x4651 0x6c2e +0x4652 0x6c33 +0x4653 0x6c35 +0x4654 0x6c36 +0x4655 0x6c3a +0x4656 0x6c3b +0x4657 0x6c3f +0x4658 0x6c4a +0x4659 0x6c4b +0x465a 0x6c4d +0x465b 0x6c4f +0x465c 0x6c52 +0x465d 0x6c54 +0x465e 0x6c59 +0x465f 0x6c5b +0x4660 0x6c5c +0x4661 0x6c6b +0x4662 0x6c6d +0x4663 0x6c6f +0x4664 0x6c74 +0x4665 0x6c76 +0x4666 0x6c78 +0x4667 0x6c79 +0x4668 0x6c7b +0x4669 0x6c85 +0x466a 0x6c86 +0x466b 0x6c87 +0x466c 0x6c89 +0x466d 0x6c94 +0x466e 0x6c95 +0x466f 0x6c97 +0x4670 0x6c98 +0x4671 0x6c9c +0x4672 0x6c9f +0x4673 0x6cb0 +0x4674 0x6cb2 +0x4675 0x6cb4 +0x4676 0x6cc2 +0x4677 0x6cc6 +0x4678 0x6ccd +0x4679 0x6ccf +0x467a 0x6cd0 +0x467b 0x6cd1 +0x467c 0x6cd2 +0x467d 0x6cd4 +0x467e 0x6cd6 +0x4721 0x6cda +0x4722 0x6cdc +0x4723 0x6ce0 +0x4724 0x6ce7 +0x4725 0x6ce9 +0x4726 0x6ceb +0x4727 0x6cec +0x4728 0x6cee +0x4729 0x6cf2 +0x472a 0x6cf4 +0x472b 0x6d04 +0x472c 0x6d07 +0x472d 0x6d0a +0x472e 0x6d0e +0x472f 0x6d0f +0x4730 0x6d11 +0x4731 0x6d13 +0x4732 0x6d1a +0x4733 0x6d26 +0x4734 0x6d27 +0x4735 0x6d28 +0x4736 0x6c67 +0x4737 0x6d2e +0x4738 0x6d2f +0x4739 0x6d31 +0x473a 0x6d39 +0x473b 0x6d3c +0x473c 0x6d3f +0x473d 0x6d57 +0x473e 0x6d5e +0x473f 0x6d5f +0x4740 0x6d61 +0x4741 0x6d65 +0x4742 0x6d67 +0x4743 0x6d6f +0x4744 0x6d70 +0x4745 0x6d7c +0x4746 0x6d82 +0x4747 0x6d87 +0x4748 0x6d91 +0x4749 0x6d92 +0x474a 0x6d94 +0x474b 0x6d96 +0x474c 0x6d97 +0x474d 0x6d98 +0x474e 0x6daa +0x474f 0x6dac +0x4750 0x6db4 +0x4751 0x6db7 +0x4752 0x6db9 +0x4753 0x6dbd +0x4754 0x6dbf +0x4755 0x6dc4 +0x4756 0x6dc8 +0x4757 0x6dca +0x4758 0x6dce +0x4759 0x6dcf +0x475a 0x6dd6 +0x475b 0x6ddb +0x475c 0x6ddd +0x475d 0x6ddf +0x475e 0x6de0 +0x475f 0x6de2 +0x4760 0x6de5 +0x4761 0x6de9 +0x4762 0x6def +0x4763 0x6df0 +0x4764 0x6df4 +0x4765 0x6df6 +0x4766 0x6dfc +0x4767 0x6e00 +0x4768 0x6e04 +0x4769 0x6e1e +0x476a 0x6e22 +0x476b 0x6e27 +0x476c 0x6e32 +0x476d 0x6e36 +0x476e 0x6e39 +0x476f 0x6e3b +0x4770 0x6e3c +0x4771 0x6e44 +0x4772 0x6e45 +0x4773 0x6e48 +0x4774 0x6e49 +0x4775 0x6e4b +0x4776 0x6e4f +0x4777 0x6e51 +0x4778 0x6e52 +0x4779 0x6e53 +0x477a 0x6e54 +0x477b 0x6e57 +0x477c 0x6e5c +0x477d 0x6e5d +0x477e 0x6e5e +0x4821 0x6e62 +0x4822 0x6e63 +0x4823 0x6e68 +0x4824 0x6e73 +0x4825 0x6e7b +0x4826 0x6e7d +0x4827 0x6e8d +0x4828 0x6e93 +0x4829 0x6e99 +0x482a 0x6ea0 +0x482b 0x6ea7 +0x482c 0x6ead +0x482d 0x6eae +0x482e 0x6eb1 +0x482f 0x6eb3 +0x4830 0x6ebb +0x4831 0x6ebf +0x4832 0x6ec0 +0x4833 0x6ec1 +0x4834 0x6ec3 +0x4835 0x6ec7 +0x4836 0x6ec8 +0x4837 0x6eca +0x4838 0x6ecd +0x4839 0x6ece +0x483a 0x6ecf +0x483b 0x6eeb +0x483c 0x6eed +0x483d 0x6eee +0x483e 0x6ef9 +0x483f 0x6efb +0x4840 0x6efd +0x4841 0x6f04 +0x4842 0x6f08 +0x4843 0x6f0a +0x4844 0x6f0c +0x4845 0x6f0d +0x4846 0x6f16 +0x4847 0x6f18 +0x4848 0x6f1a +0x4849 0x6f1b +0x484a 0x6f26 +0x484b 0x6f29 +0x484c 0x6f2a +0x484d 0x6f2f +0x484e 0x6f30 +0x484f 0x6f33 +0x4850 0x6f36 +0x4851 0x6f3b +0x4852 0x6f3c +0x4853 0x6f2d +0x4854 0x6f4f +0x4855 0x6f51 +0x4856 0x6f52 +0x4857 0x6f53 +0x4858 0x6f57 +0x4859 0x6f59 +0x485a 0x6f5a +0x485b 0x6f5d +0x485c 0x6f5e +0x485d 0x6f61 +0x485e 0x6f62 +0x485f 0x6f68 +0x4860 0x6f6c +0x4861 0x6f7d +0x4862 0x6f7e +0x4863 0x6f83 +0x4864 0x6f87 +0x4865 0x6f88 +0x4866 0x6f8b +0x4867 0x6f8c +0x4868 0x6f8d +0x4869 0x6f90 +0x486a 0x6f92 +0x486b 0x6f93 +0x486c 0x6f94 +0x486d 0x6f96 +0x486e 0x6f9a +0x486f 0x6f9f +0x4870 0x6fa0 +0x4871 0x6fa5 +0x4872 0x6fa6 +0x4873 0x6fa7 +0x4874 0x6fa8 +0x4875 0x6fae +0x4876 0x6faf +0x4877 0x6fb0 +0x4878 0x6fb5 +0x4879 0x6fb6 +0x487a 0x6fbc +0x487b 0x6fc5 +0x487c 0x6fc7 +0x487d 0x6fc8 +0x487e 0x6fca +0x4921 0x6fda +0x4922 0x6fde +0x4923 0x6fe8 +0x4924 0x6fe9 +0x4925 0x6ff0 +0x4926 0x6ff5 +0x4927 0x6ff9 +0x4928 0x6ffc +0x4929 0x6ffd +0x492a 0x7000 +0x492b 0x7005 +0x492c 0x7006 +0x492d 0x7007 +0x492e 0x700d +0x492f 0x7017 +0x4930 0x7020 +0x4931 0x7023 +0x4932 0x702f +0x4933 0x7034 +0x4934 0x7037 +0x4935 0x7039 +0x4936 0x703c +0x4937 0x7043 +0x4938 0x7044 +0x4939 0x7048 +0x493a 0x7049 +0x493b 0x704a +0x493c 0x704b +0x493d 0x7054 +0x493e 0x7055 +0x493f 0x705d +0x4940 0x705e +0x4941 0x704e +0x4942 0x7064 +0x4943 0x7065 +0x4944 0x706c +0x4945 0x706e +0x4946 0x7075 +0x4947 0x7076 +0x4948 0x707e +0x4949 0x7081 +0x494a 0x7085 +0x494b 0x7086 +0x494c 0x7094 +0x494d 0x7095 +0x494e 0x7096 +0x494f 0x7097 +0x4950 0x7098 +0x4951 0x709b +0x4952 0x70a4 +0x4953 0x70ab +0x4954 0x70b0 +0x4955 0x70b1 +0x4956 0x70b4 +0x4957 0x70b7 +0x4958 0x70ca +0x4959 0x70d1 +0x495a 0x70d3 +0x495b 0x70d4 +0x495c 0x70d5 +0x495d 0x70d6 +0x495e 0x70d8 +0x495f 0x70dc +0x4960 0x70e4 +0x4961 0x70fa +0x4962 0x7103 +0x4963 0x7104 +0x4964 0x7105 +0x4965 0x7106 +0x4966 0x7107 +0x4967 0x710b +0x4968 0x710c +0x4969 0x710f +0x496a 0x711e +0x496b 0x7120 +0x496c 0x712b +0x496d 0x712d +0x496e 0x712f +0x496f 0x7130 +0x4970 0x7131 +0x4971 0x7138 +0x4972 0x7141 +0x4973 0x7145 +0x4974 0x7146 +0x4975 0x7147 +0x4976 0x714a +0x4977 0x714b +0x4978 0x7150 +0x4979 0x7152 +0x497a 0x7157 +0x497b 0x715a +0x497c 0x715c +0x497d 0x715e +0x497e 0x7160 +0x4a21 0x7168 +0x4a22 0x7179 +0x4a23 0x7180 +0x4a24 0x7185 +0x4a25 0x7187 +0x4a26 0x718c +0x4a27 0x7192 +0x4a28 0x719a +0x4a29 0x719b +0x4a2a 0x71a0 +0x4a2b 0x71a2 +0x4a2c 0x71af +0x4a2d 0x71b0 +0x4a2e 0x71b2 +0x4a2f 0x71b3 +0x4a30 0x71ba +0x4a31 0x71bf +0x4a32 0x71c0 +0x4a33 0x71c1 +0x4a34 0x71c4 +0x4a35 0x71cb +0x4a36 0x71cc +0x4a37 0x71d3 +0x4a38 0x71d6 +0x4a39 0x71d9 +0x4a3a 0x71da +0x4a3b 0x71dc +0x4a3c 0x71f8 +0x4a3d 0x71fe +0x4a3e 0x7200 +0x4a3f 0x7207 +0x4a40 0x7208 +0x4a41 0x7209 +0x4a42 0x7213 +0x4a43 0x7217 +0x4a44 0x721a +0x4a45 0x721d +0x4a46 0x721f +0x4a47 0x7224 +0x4a48 0x722b +0x4a49 0x722f +0x4a4a 0x7234 +0x4a4b 0x7238 +0x4a4c 0x7239 +0x4a4d 0x7241 +0x4a4e 0x7242 +0x4a4f 0x7243 +0x4a50 0x7245 +0x4a51 0x724e +0x4a52 0x724f +0x4a53 0x7250 +0x4a54 0x7253 +0x4a55 0x7255 +0x4a56 0x7256 +0x4a57 0x725a +0x4a58 0x725c +0x4a59 0x725e +0x4a5a 0x7260 +0x4a5b 0x7263 +0x4a5c 0x7268 +0x4a5d 0x726b +0x4a5e 0x726e +0x4a5f 0x726f +0x4a60 0x7271 +0x4a61 0x7277 +0x4a62 0x7278 +0x4a63 0x727b +0x4a64 0x727c +0x4a65 0x727f +0x4a66 0x7284 +0x4a67 0x7289 +0x4a68 0x728d +0x4a69 0x728e +0x4a6a 0x7293 +0x4a6b 0x729b +0x4a6c 0x72a8 +0x4a6d 0x72ad +0x4a6e 0x72ae +0x4a6f 0x72b1 +0x4a70 0x72b4 +0x4a71 0x72be +0x4a72 0x72c1 +0x4a73 0x72c7 +0x4a74 0x72c9 +0x4a75 0x72cc +0x4a76 0x72d5 +0x4a77 0x72d6 +0x4a78 0x72d8 +0x4a79 0x72df +0x4a7a 0x72e5 +0x4a7b 0x72f3 +0x4a7c 0x72f4 +0x4a7d 0x72fa +0x4a7e 0x72fb +0x4b21 0x72fe +0x4b22 0x7302 +0x4b23 0x7304 +0x4b24 0x7305 +0x4b25 0x7307 +0x4b26 0x730b +0x4b27 0x730d +0x4b28 0x7312 +0x4b29 0x7313 +0x4b2a 0x7318 +0x4b2b 0x7319 +0x4b2c 0x731e +0x4b2d 0x7322 +0x4b2e 0x7324 +0x4b2f 0x7327 +0x4b30 0x7328 +0x4b31 0x732c +0x4b32 0x7331 +0x4b33 0x7332 +0x4b34 0x7335 +0x4b35 0x733a +0x4b36 0x733b +0x4b37 0x733d +0x4b38 0x7343 +0x4b39 0x734d +0x4b3a 0x7350 +0x4b3b 0x7352 +0x4b3c 0x7356 +0x4b3d 0x7358 +0x4b3e 0x735d +0x4b3f 0x735e +0x4b40 0x735f +0x4b41 0x7360 +0x4b42 0x7366 +0x4b43 0x7367 +0x4b44 0x7369 +0x4b45 0x736b +0x4b46 0x736c +0x4b47 0x736e +0x4b48 0x736f +0x4b49 0x7371 +0x4b4a 0x7377 +0x4b4b 0x7379 +0x4b4c 0x737c +0x4b4d 0x7380 +0x4b4e 0x7381 +0x4b4f 0x7383 +0x4b50 0x7385 +0x4b51 0x7386 +0x4b52 0x738e +0x4b53 0x7390 +0x4b54 0x7393 +0x4b55 0x7395 +0x4b56 0x7397 +0x4b57 0x7398 +0x4b58 0x739c +0x4b59 0x739e +0x4b5a 0x739f +0x4b5b 0x73a0 +0x4b5c 0x73a2 +0x4b5d 0x73a5 +0x4b5e 0x73a6 +0x4b5f 0x73aa +0x4b60 0x73ab +0x4b61 0x73ad +0x4b62 0x73b5 +0x4b63 0x73b7 +0x4b64 0x73b9 +0x4b65 0x73bc +0x4b66 0x73bd +0x4b67 0x73bf +0x4b68 0x73c5 +0x4b69 0x73c6 +0x4b6a 0x73c9 +0x4b6b 0x73cb +0x4b6c 0x73cc +0x4b6d 0x73cf +0x4b6e 0x73d2 +0x4b6f 0x73d3 +0x4b70 0x73d6 +0x4b71 0x73d9 +0x4b72 0x73dd +0x4b73 0x73e1 +0x4b74 0x73e3 +0x4b75 0x73e6 +0x4b76 0x73e7 +0x4b77 0x73e9 +0x4b78 0x73f4 +0x4b79 0x73f5 +0x4b7a 0x73f7 +0x4b7b 0x73f9 +0x4b7c 0x73fa +0x4b7d 0x73fb +0x4b7e 0x73fd +0x4c21 0x73ff +0x4c22 0x7400 +0x4c23 0x7401 +0x4c24 0x7404 +0x4c25 0x7407 +0x4c26 0x740a +0x4c27 0x7411 +0x4c28 0x741a +0x4c29 0x741b +0x4c2a 0x7424 +0x4c2b 0x7426 +0x4c2c 0x7428 +0x4c2d 0x7429 +0x4c2e 0x742a +0x4c2f 0x742b +0x4c30 0x742c +0x4c31 0x742d +0x4c32 0x742e +0x4c33 0x742f +0x4c34 0x7430 +0x4c35 0x7431 +0x4c36 0x7439 +0x4c37 0x7440 +0x4c38 0x7443 +0x4c39 0x7444 +0x4c3a 0x7446 +0x4c3b 0x7447 +0x4c3c 0x744b +0x4c3d 0x744d +0x4c3e 0x7451 +0x4c3f 0x7452 +0x4c40 0x7457 +0x4c41 0x745d +0x4c42 0x7462 +0x4c43 0x7466 +0x4c44 0x7467 +0x4c45 0x7468 +0x4c46 0x746b +0x4c47 0x746d +0x4c48 0x746e +0x4c49 0x7471 +0x4c4a 0x7472 +0x4c4b 0x7480 +0x4c4c 0x7481 +0x4c4d 0x7485 +0x4c4e 0x7486 +0x4c4f 0x7487 +0x4c50 0x7489 +0x4c51 0x748f +0x4c52 0x7490 +0x4c53 0x7491 +0x4c54 0x7492 +0x4c55 0x7498 +0x4c56 0x7499 +0x4c57 0x749a +0x4c58 0x749c +0x4c59 0x749f +0x4c5a 0x74a0 +0x4c5b 0x74a1 +0x4c5c 0x74a3 +0x4c5d 0x74a6 +0x4c5e 0x74a8 +0x4c5f 0x74a9 +0x4c60 0x74aa +0x4c61 0x74ab +0x4c62 0x74ae +0x4c63 0x74af +0x4c64 0x74b1 +0x4c65 0x74b2 +0x4c66 0x74b5 +0x4c67 0x74b9 +0x4c68 0x74bb +0x4c69 0x74bf +0x4c6a 0x74c8 +0x4c6b 0x74c9 +0x4c6c 0x74cc +0x4c6d 0x74d0 +0x4c6e 0x74d3 +0x4c6f 0x74d8 +0x4c70 0x74da +0x4c71 0x74db +0x4c72 0x74de +0x4c73 0x74df +0x4c74 0x74e4 +0x4c75 0x74e8 +0x4c76 0x74ea +0x4c77 0x74eb +0x4c78 0x74ef +0x4c79 0x74f4 +0x4c7a 0x74fa +0x4c7b 0x74fb +0x4c7c 0x74fc +0x4c7d 0x74ff +0x4c7e 0x7506 +0x4d21 0x7512 +0x4d22 0x7516 +0x4d23 0x7517 +0x4d24 0x7520 +0x4d25 0x7521 +0x4d26 0x7524 +0x4d27 0x7527 +0x4d28 0x7529 +0x4d29 0x752a +0x4d2a 0x752f +0x4d2b 0x7536 +0x4d2c 0x7539 +0x4d2d 0x753d +0x4d2e 0x753e +0x4d2f 0x753f +0x4d30 0x7540 +0x4d31 0x7543 +0x4d32 0x7547 +0x4d33 0x7548 +0x4d34 0x754e +0x4d35 0x7550 +0x4d36 0x7552 +0x4d37 0x7557 +0x4d38 0x755e +0x4d39 0x755f +0x4d3a 0x7561 +0x4d3b 0x756f +0x4d3c 0x7571 +0x4d3d 0x7579 +0x4d3e 0x757a +0x4d3f 0x757b +0x4d40 0x757c +0x4d41 0x757d +0x4d42 0x757e +0x4d43 0x7581 +0x4d44 0x7585 +0x4d45 0x7590 +0x4d46 0x7592 +0x4d47 0x7593 +0x4d48 0x7595 +0x4d49 0x7599 +0x4d4a 0x759c +0x4d4b 0x75a2 +0x4d4c 0x75a4 +0x4d4d 0x75b4 +0x4d4e 0x75ba +0x4d4f 0x75bf +0x4d50 0x75c0 +0x4d51 0x75c1 +0x4d52 0x75c4 +0x4d53 0x75c6 +0x4d54 0x75cc +0x4d55 0x75ce +0x4d56 0x75cf +0x4d57 0x75d7 +0x4d58 0x75dc +0x4d59 0x75df +0x4d5a 0x75e0 +0x4d5b 0x75e1 +0x4d5c 0x75e4 +0x4d5d 0x75e7 +0x4d5e 0x75ec +0x4d5f 0x75ee +0x4d60 0x75ef +0x4d61 0x75f1 +0x4d62 0x75f9 +0x4d63 0x7600 +0x4d64 0x7602 +0x4d65 0x7603 +0x4d66 0x7604 +0x4d67 0x7607 +0x4d68 0x7608 +0x4d69 0x760a +0x4d6a 0x760c +0x4d6b 0x760f +0x4d6c 0x7612 +0x4d6d 0x7613 +0x4d6e 0x7615 +0x4d6f 0x7616 +0x4d70 0x7619 +0x4d71 0x761b +0x4d72 0x761c +0x4d73 0x761d +0x4d74 0x761e +0x4d75 0x7623 +0x4d76 0x7625 +0x4d77 0x7626 +0x4d78 0x7629 +0x4d79 0x762d +0x4d7a 0x7632 +0x4d7b 0x7633 +0x4d7c 0x7635 +0x4d7d 0x7638 +0x4d7e 0x7639 +0x4e21 0x763a +0x4e22 0x763c +0x4e23 0x764a +0x4e24 0x7640 +0x4e25 0x7641 +0x4e26 0x7643 +0x4e27 0x7644 +0x4e28 0x7645 +0x4e29 0x7649 +0x4e2a 0x764b +0x4e2b 0x7655 +0x4e2c 0x7659 +0x4e2d 0x765f +0x4e2e 0x7664 +0x4e2f 0x7665 +0x4e30 0x766d +0x4e31 0x766e +0x4e32 0x766f +0x4e33 0x7671 +0x4e34 0x7674 +0x4e35 0x7681 +0x4e36 0x7685 +0x4e37 0x768c +0x4e38 0x768d +0x4e39 0x7695 +0x4e3a 0x769b +0x4e3b 0x769c +0x4e3c 0x769d +0x4e3d 0x769f +0x4e3e 0x76a0 +0x4e3f 0x76a2 +0x4e40 0x76a3 +0x4e41 0x76a4 +0x4e42 0x76a5 +0x4e43 0x76a6 +0x4e44 0x76a7 +0x4e45 0x76a8 +0x4e46 0x76aa +0x4e47 0x76ad +0x4e48 0x76bd +0x4e49 0x76c1 +0x4e4a 0x76c5 +0x4e4b 0x76c9 +0x4e4c 0x76cb +0x4e4d 0x76cc +0x4e4e 0x76ce +0x4e4f 0x76d4 +0x4e50 0x76d9 +0x4e51 0x76e0 +0x4e52 0x76e6 +0x4e53 0x76e8 +0x4e54 0x76ec +0x4e55 0x76f0 +0x4e56 0x76f1 +0x4e57 0x76f6 +0x4e58 0x76f9 +0x4e59 0x76fc +0x4e5a 0x7700 +0x4e5b 0x7706 +0x4e5c 0x770a +0x4e5d 0x770e +0x4e5e 0x7712 +0x4e5f 0x7714 +0x4e60 0x7715 +0x4e61 0x7717 +0x4e62 0x7719 +0x4e63 0x771a +0x4e64 0x771c +0x4e65 0x7722 +0x4e66 0x7728 +0x4e67 0x772d +0x4e68 0x772e +0x4e69 0x772f +0x4e6a 0x7734 +0x4e6b 0x7735 +0x4e6c 0x7736 +0x4e6d 0x7739 +0x4e6e 0x773d +0x4e6f 0x773e +0x4e70 0x7742 +0x4e71 0x7745 +0x4e72 0x7746 +0x4e73 0x774a +0x4e74 0x774d +0x4e75 0x774e +0x4e76 0x774f +0x4e77 0x7752 +0x4e78 0x7756 +0x4e79 0x7757 +0x4e7a 0x775c +0x4e7b 0x775e +0x4e7c 0x775f +0x4e7d 0x7760 +0x4e7e 0x7762 +0x4f21 0x7764 +0x4f22 0x7767 +0x4f23 0x776a +0x4f24 0x776c +0x4f25 0x7770 +0x4f26 0x7772 +0x4f27 0x7773 +0x4f28 0x7774 +0x4f29 0x777a +0x4f2a 0x777d +0x4f2b 0x7780 +0x4f2c 0x7784 +0x4f2d 0x778c +0x4f2e 0x778d +0x4f2f 0x7794 +0x4f30 0x7795 +0x4f31 0x7796 +0x4f32 0x779a +0x4f33 0x779f +0x4f34 0x77a2 +0x4f35 0x77a7 +0x4f36 0x77aa +0x4f37 0x77ae +0x4f38 0x77af +0x4f39 0x77b1 +0x4f3a 0x77b5 +0x4f3b 0x77be +0x4f3c 0x77c3 +0x4f3d 0x77c9 +0x4f3e 0x77d1 +0x4f3f 0x77d2 +0x4f40 0x77d5 +0x4f41 0x77d9 +0x4f42 0x77de +0x4f43 0x77df +0x4f44 0x77e0 +0x4f45 0x77e4 +0x4f46 0x77e6 +0x4f47 0x77ea +0x4f48 0x77ec +0x4f49 0x77f0 +0x4f4a 0x77f1 +0x4f4b 0x77f4 +0x4f4c 0x77f8 +0x4f4d 0x77fb +0x4f4e 0x7805 +0x4f4f 0x7806 +0x4f50 0x7809 +0x4f51 0x780d +0x4f52 0x780e +0x4f53 0x7811 +0x4f54 0x781d +0x4f55 0x7821 +0x4f56 0x7822 +0x4f57 0x7823 +0x4f58 0x782d +0x4f59 0x782e +0x4f5a 0x7830 +0x4f5b 0x7835 +0x4f5c 0x7837 +0x4f5d 0x7843 +0x4f5e 0x7844 +0x4f5f 0x7847 +0x4f60 0x7848 +0x4f61 0x784c +0x4f62 0x784e +0x4f63 0x7852 +0x4f64 0x785c +0x4f65 0x785e +0x4f66 0x7860 +0x4f67 0x7861 +0x4f68 0x7863 +0x4f69 0x7864 +0x4f6a 0x7868 +0x4f6b 0x786a +0x4f6c 0x786e +0x4f6d 0x787a +0x4f6e 0x787e +0x4f6f 0x788a +0x4f70 0x788f +0x4f71 0x7894 +0x4f72 0x7898 +0x4f73 0x78a1 +0x4f74 0x789d +0x4f75 0x789e +0x4f76 0x789f +0x4f77 0x78a4 +0x4f78 0x78a8 +0x4f79 0x78ac +0x4f7a 0x78ad +0x4f7b 0x78b0 +0x4f7c 0x78b1 +0x4f7d 0x78b2 +0x4f7e 0x78b3 +0x5021 0x78bb +0x5022 0x78bd +0x5023 0x78bf +0x5024 0x78c7 +0x5025 0x78c8 +0x5026 0x78c9 +0x5027 0x78cc +0x5028 0x78ce +0x5029 0x78d2 +0x502a 0x78d3 +0x502b 0x78d5 +0x502c 0x78d6 +0x502d 0x78e4 +0x502e 0x78db +0x502f 0x78df +0x5030 0x78e0 +0x5031 0x78e1 +0x5032 0x78e6 +0x5033 0x78ea +0x5034 0x78f2 +0x5035 0x78f3 +0x5036 0x7900 +0x5037 0x78f6 +0x5038 0x78f7 +0x5039 0x78fa +0x503a 0x78fb +0x503b 0x78ff +0x503c 0x7906 +0x503d 0x790c +0x503e 0x7910 +0x503f 0x791a +0x5040 0x791c +0x5041 0x791e +0x5042 0x791f +0x5043 0x7920 +0x5044 0x7925 +0x5045 0x7927 +0x5046 0x7929 +0x5047 0x792d +0x5048 0x7931 +0x5049 0x7934 +0x504a 0x7935 +0x504b 0x793b +0x504c 0x793d +0x504d 0x793f +0x504e 0x7944 +0x504f 0x7945 +0x5050 0x7946 +0x5051 0x794a +0x5052 0x794b +0x5053 0x794f +0x5054 0x7951 +0x5055 0x7954 +0x5056 0x7958 +0x5057 0x795b +0x5058 0x795c +0x5059 0x7967 +0x505a 0x7969 +0x505b 0x796b +0x505c 0x7972 +0x505d 0x7979 +0x505e 0x797b +0x505f 0x797c +0x5060 0x797e +0x5061 0x798b +0x5062 0x798c +0x5063 0x7991 +0x5064 0x7993 +0x5065 0x7994 +0x5066 0x7995 +0x5067 0x7996 +0x5068 0x7998 +0x5069 0x799b +0x506a 0x799c +0x506b 0x79a1 +0x506c 0x79a8 +0x506d 0x79a9 +0x506e 0x79ab +0x506f 0x79af +0x5070 0x79b1 +0x5071 0x79b4 +0x5072 0x79b8 +0x5073 0x79bb +0x5074 0x79c2 +0x5075 0x79c4 +0x5076 0x79c7 +0x5077 0x79c8 +0x5078 0x79ca +0x5079 0x79cf +0x507a 0x79d4 +0x507b 0x79d6 +0x507c 0x79da +0x507d 0x79dd +0x507e 0x79de +0x5121 0x79e0 +0x5122 0x79e2 +0x5123 0x79e5 +0x5124 0x79ea +0x5125 0x79eb +0x5126 0x79ed +0x5127 0x79f1 +0x5128 0x79f8 +0x5129 0x79fc +0x512a 0x7a02 +0x512b 0x7a03 +0x512c 0x7a07 +0x512d 0x7a09 +0x512e 0x7a0a +0x512f 0x7a0c +0x5130 0x7a11 +0x5131 0x7a15 +0x5132 0x7a1b +0x5133 0x7a1e +0x5134 0x7a21 +0x5135 0x7a27 +0x5136 0x7a2b +0x5137 0x7a2d +0x5138 0x7a2f +0x5139 0x7a30 +0x513a 0x7a34 +0x513b 0x7a35 +0x513c 0x7a38 +0x513d 0x7a39 +0x513e 0x7a3a +0x513f 0x7a44 +0x5140 0x7a45 +0x5141 0x7a47 +0x5142 0x7a48 +0x5143 0x7a4c +0x5144 0x7a55 +0x5145 0x7a56 +0x5146 0x7a59 +0x5147 0x7a5c +0x5148 0x7a5d +0x5149 0x7a5f +0x514a 0x7a60 +0x514b 0x7a65 +0x514c 0x7a67 +0x514d 0x7a6a +0x514e 0x7a6d +0x514f 0x7a75 +0x5150 0x7a78 +0x5151 0x7a7e +0x5152 0x7a80 +0x5153 0x7a82 +0x5154 0x7a85 +0x5155 0x7a86 +0x5156 0x7a8a +0x5157 0x7a8b +0x5158 0x7a90 +0x5159 0x7a91 +0x515a 0x7a94 +0x515b 0x7a9e +0x515c 0x7aa0 +0x515d 0x7aa3 +0x515e 0x7aac +0x515f 0x7ab3 +0x5160 0x7ab5 +0x5161 0x7ab9 +0x5162 0x7abb +0x5163 0x7abc +0x5164 0x7ac6 +0x5165 0x7ac9 +0x5166 0x7acc +0x5167 0x7ace +0x5168 0x7ad1 +0x5169 0x7adb +0x516a 0x7ae8 +0x516b 0x7ae9 +0x516c 0x7aeb +0x516d 0x7aec +0x516e 0x7af1 +0x516f 0x7af4 +0x5170 0x7afb +0x5171 0x7afd +0x5172 0x7afe +0x5173 0x7b07 +0x5174 0x7b14 +0x5175 0x7b1f +0x5176 0x7b23 +0x5177 0x7b27 +0x5178 0x7b29 +0x5179 0x7b2a +0x517a 0x7b2b +0x517b 0x7b2d +0x517c 0x7b2e +0x517d 0x7b2f +0x517e 0x7b30 +0x5221 0x7b31 +0x5222 0x7b34 +0x5223 0x7b3d +0x5224 0x7b3f +0x5225 0x7b40 +0x5226 0x7b41 +0x5227 0x7b47 +0x5228 0x7b4e +0x5229 0x7b55 +0x522a 0x7b60 +0x522b 0x7b64 +0x522c 0x7b66 +0x522d 0x7b69 +0x522e 0x7b6a +0x522f 0x7b6d +0x5230 0x7b6f +0x5231 0x7b72 +0x5232 0x7b73 +0x5233 0x7b77 +0x5234 0x7b84 +0x5235 0x7b89 +0x5236 0x7b8e +0x5237 0x7b90 +0x5238 0x7b91 +0x5239 0x7b96 +0x523a 0x7b9b +0x523b 0x7b9e +0x523c 0x7ba0 +0x523d 0x7ba5 +0x523e 0x7bac +0x523f 0x7baf +0x5240 0x7bb0 +0x5241 0x7bb2 +0x5242 0x7bb5 +0x5243 0x7bb6 +0x5244 0x7bba +0x5245 0x7bbb +0x5246 0x7bbc +0x5247 0x7bbd +0x5248 0x7bc2 +0x5249 0x7bc5 +0x524a 0x7bc8 +0x524b 0x7bca +0x524c 0x7bd4 +0x524d 0x7bd6 +0x524e 0x7bd7 +0x524f 0x7bd9 +0x5250 0x7bda +0x5251 0x7bdb +0x5252 0x7be8 +0x5253 0x7bea +0x5254 0x7bf2 +0x5255 0x7bf4 +0x5256 0x7bf5 +0x5257 0x7bf8 +0x5258 0x7bf9 +0x5259 0x7bfa +0x525a 0x7bfc +0x525b 0x7bfe +0x525c 0x7c01 +0x525d 0x7c02 +0x525e 0x7c03 +0x525f 0x7c04 +0x5260 0x7c06 +0x5261 0x7c09 +0x5262 0x7c0b +0x5263 0x7c0c +0x5264 0x7c0e +0x5265 0x7c0f +0x5266 0x7c19 +0x5267 0x7c1b +0x5268 0x7c20 +0x5269 0x7c25 +0x526a 0x7c26 +0x526b 0x7c28 +0x526c 0x7c2c +0x526d 0x7c31 +0x526e 0x7c33 +0x526f 0x7c34 +0x5270 0x7c36 +0x5271 0x7c39 +0x5272 0x7c3a +0x5273 0x7c46 +0x5274 0x7c4a +0x5275 0x7c55 +0x5276 0x7c51 +0x5277 0x7c52 +0x5278 0x7c53 +0x5279 0x7c59 +0x527a 0x7c5a +0x527b 0x7c5b +0x527c 0x7c5c +0x527d 0x7c5d +0x527e 0x7c5e +0x5321 0x7c61 +0x5322 0x7c63 +0x5323 0x7c67 +0x5324 0x7c69 +0x5325 0x7c6d +0x5326 0x7c6e +0x5327 0x7c70 +0x5328 0x7c72 +0x5329 0x7c79 +0x532a 0x7c7c +0x532b 0x7c7d +0x532c 0x7c86 +0x532d 0x7c87 +0x532e 0x7c8f +0x532f 0x7c94 +0x5330 0x7c9e +0x5331 0x7ca0 +0x5332 0x7ca6 +0x5333 0x7cb0 +0x5334 0x7cb6 +0x5335 0x7cb7 +0x5336 0x7cba +0x5337 0x7cbb +0x5338 0x7cbc +0x5339 0x7cbf +0x533a 0x7cc4 +0x533b 0x7cc7 +0x533c 0x7cc8 +0x533d 0x7cc9 +0x533e 0x7ccd +0x533f 0x7ccf +0x5340 0x7cd3 +0x5341 0x7cd4 +0x5342 0x7cd5 +0x5343 0x7cd7 +0x5344 0x7cd9 +0x5345 0x7cda +0x5346 0x7cdd +0x5347 0x7ce6 +0x5348 0x7ce9 +0x5349 0x7ceb +0x534a 0x7cf5 +0x534b 0x7d03 +0x534c 0x7d07 +0x534d 0x7d08 +0x534e 0x7d09 +0x534f 0x7d0f +0x5350 0x7d11 +0x5351 0x7d12 +0x5352 0x7d13 +0x5353 0x7d16 +0x5354 0x7d1d +0x5355 0x7d1e +0x5356 0x7d23 +0x5357 0x7d26 +0x5358 0x7d2a +0x5359 0x7d2d +0x535a 0x7d31 +0x535b 0x7d3c +0x535c 0x7d3d +0x535d 0x7d3e +0x535e 0x7d40 +0x535f 0x7d41 +0x5360 0x7d47 +0x5361 0x7d48 +0x5362 0x7d4d +0x5363 0x7d51 +0x5364 0x7d53 +0x5365 0x7d57 +0x5366 0x7d59 +0x5367 0x7d5a +0x5368 0x7d5c +0x5369 0x7d5d +0x536a 0x7d65 +0x536b 0x7d67 +0x536c 0x7d6a +0x536d 0x7d70 +0x536e 0x7d78 +0x536f 0x7d7a +0x5370 0x7d7b +0x5371 0x7d7f +0x5372 0x7d81 +0x5373 0x7d82 +0x5374 0x7d83 +0x5375 0x7d85 +0x5376 0x7d86 +0x5377 0x7d88 +0x5378 0x7d8b +0x5379 0x7d8c +0x537a 0x7d8d +0x537b 0x7d91 +0x537c 0x7d96 +0x537d 0x7d97 +0x537e 0x7d9d +0x5421 0x7d9e +0x5422 0x7da6 +0x5423 0x7da7 +0x5424 0x7daa +0x5425 0x7db3 +0x5426 0x7db6 +0x5427 0x7db7 +0x5428 0x7db9 +0x5429 0x7dc2 +0x542a 0x7dc3 +0x542b 0x7dc4 +0x542c 0x7dc5 +0x542d 0x7dc6 +0x542e 0x7dcc +0x542f 0x7dcd +0x5430 0x7dce +0x5431 0x7dd7 +0x5432 0x7dd9 +0x5433 0x7e00 +0x5434 0x7de2 +0x5435 0x7de5 +0x5436 0x7de6 +0x5437 0x7dea +0x5438 0x7deb +0x5439 0x7ded +0x543a 0x7df1 +0x543b 0x7df5 +0x543c 0x7df6 +0x543d 0x7df9 +0x543e 0x7dfa +0x543f 0x7e08 +0x5440 0x7e10 +0x5441 0x7e11 +0x5442 0x7e15 +0x5443 0x7e17 +0x5444 0x7e1c +0x5445 0x7e1d +0x5446 0x7e20 +0x5447 0x7e27 +0x5448 0x7e28 +0x5449 0x7e2c +0x544a 0x7e2d +0x544b 0x7e2f +0x544c 0x7e33 +0x544d 0x7e36 +0x544e 0x7e3f +0x544f 0x7e44 +0x5450 0x7e45 +0x5451 0x7e47 +0x5452 0x7e4e +0x5453 0x7e50 +0x5454 0x7e52 +0x5455 0x7e58 +0x5456 0x7e5f +0x5457 0x7e61 +0x5458 0x7e62 +0x5459 0x7e65 +0x545a 0x7e6b +0x545b 0x7e6e +0x545c 0x7e6f +0x545d 0x7e73 +0x545e 0x7e78 +0x545f 0x7e7e +0x5460 0x7e81 +0x5461 0x7e86 +0x5462 0x7e87 +0x5463 0x7e8a +0x5464 0x7e8d +0x5465 0x7e91 +0x5466 0x7e95 +0x5467 0x7e98 +0x5468 0x7e9a +0x5469 0x7e9d +0x546a 0x7e9e +0x546b 0x7f3c +0x546c 0x7f3b +0x546d 0x7f3d +0x546e 0x7f3e +0x546f 0x7f3f +0x5470 0x7f43 +0x5471 0x7f44 +0x5472 0x7f47 +0x5473 0x7f4f +0x5474 0x7f52 +0x5475 0x7f53 +0x5476 0x7f5b +0x5477 0x7f5c +0x5478 0x7f5d +0x5479 0x7f61 +0x547a 0x7f63 +0x547b 0x7f64 +0x547c 0x7f65 +0x547d 0x7f66 +0x547e 0x7f6d +0x5521 0x7f71 +0x5522 0x7f7d +0x5523 0x7f7e +0x5524 0x7f7f +0x5525 0x7f80 +0x5526 0x7f8b +0x5527 0x7f8d +0x5528 0x7f8f +0x5529 0x7f90 +0x552a 0x7f91 +0x552b 0x7f96 +0x552c 0x7f97 +0x552d 0x7f9c +0x552e 0x7fa1 +0x552f 0x7fa2 +0x5530 0x7fa6 +0x5531 0x7faa +0x5532 0x7fad +0x5533 0x7fb4 +0x5534 0x7fbc +0x5535 0x7fbf +0x5536 0x7fc0 +0x5537 0x7fc3 +0x5538 0x7fc8 +0x5539 0x7fce +0x553a 0x7fcf +0x553b 0x7fdb +0x553c 0x7fdf +0x553d 0x7fe3 +0x553e 0x7fe5 +0x553f 0x7fe8 +0x5540 0x7fec +0x5541 0x7fee +0x5542 0x7fef +0x5543 0x7ff2 +0x5544 0x7ffa +0x5545 0x7ffd +0x5546 0x7ffe +0x5547 0x7fff +0x5548 0x8007 +0x5549 0x8008 +0x554a 0x800a +0x554b 0x800d +0x554c 0x800e +0x554d 0x800f +0x554e 0x8011 +0x554f 0x8013 +0x5550 0x8014 +0x5551 0x8016 +0x5552 0x801d +0x5553 0x801e +0x5554 0x801f +0x5555 0x8020 +0x5556 0x8024 +0x5557 0x8026 +0x5558 0x802c +0x5559 0x802e +0x555a 0x8030 +0x555b 0x8034 +0x555c 0x8035 +0x555d 0x8037 +0x555e 0x8039 +0x555f 0x803a +0x5560 0x803c +0x5561 0x803e +0x5562 0x8040 +0x5563 0x8044 +0x5564 0x8060 +0x5565 0x8064 +0x5566 0x8066 +0x5567 0x806d +0x5568 0x8071 +0x5569 0x8075 +0x556a 0x8081 +0x556b 0x8088 +0x556c 0x808e +0x556d 0x809c +0x556e 0x809e +0x556f 0x80a6 +0x5570 0x80a7 +0x5571 0x80ab +0x5572 0x80b8 +0x5573 0x80b9 +0x5574 0x80c8 +0x5575 0x80cd +0x5576 0x80cf +0x5577 0x80d2 +0x5578 0x80d4 +0x5579 0x80d5 +0x557a 0x80d7 +0x557b 0x80d8 +0x557c 0x80e0 +0x557d 0x80ed +0x557e 0x80ee +0x5621 0x80f0 +0x5622 0x80f2 +0x5623 0x80f3 +0x5624 0x80f6 +0x5625 0x80f9 +0x5626 0x80fa +0x5627 0x80fe +0x5628 0x8103 +0x5629 0x810b +0x562a 0x8116 +0x562b 0x8117 +0x562c 0x8118 +0x562d 0x811c +0x562e 0x811e +0x562f 0x8120 +0x5630 0x8124 +0x5631 0x8127 +0x5632 0x812c +0x5633 0x8130 +0x5634 0x8135 +0x5635 0x813a +0x5636 0x813c +0x5637 0x8145 +0x5638 0x8147 +0x5639 0x814a +0x563a 0x814c +0x563b 0x8152 +0x563c 0x8157 +0x563d 0x8160 +0x563e 0x8161 +0x563f 0x8167 +0x5640 0x8168 +0x5641 0x8169 +0x5642 0x816d +0x5643 0x816f +0x5644 0x8177 +0x5645 0x8181 +0x5646 0x8190 +0x5647 0x8184 +0x5648 0x8185 +0x5649 0x8186 +0x564a 0x818b +0x564b 0x818e +0x564c 0x8196 +0x564d 0x8198 +0x564e 0x819b +0x564f 0x819e +0x5650 0x81a2 +0x5651 0x81ae +0x5652 0x81b2 +0x5653 0x81b4 +0x5654 0x81bb +0x5655 0x81cb +0x5656 0x81c3 +0x5657 0x81c5 +0x5658 0x81ca +0x5659 0x81ce +0x565a 0x81cf +0x565b 0x81d5 +0x565c 0x81d7 +0x565d 0x81db +0x565e 0x81dd +0x565f 0x81de +0x5660 0x81e1 +0x5661 0x81e4 +0x5662 0x81eb +0x5663 0x81ec +0x5664 0x81f0 +0x5665 0x81f1 +0x5666 0x81f2 +0x5667 0x81f5 +0x5668 0x81f6 +0x5669 0x81f8 +0x566a 0x81f9 +0x566b 0x81fd +0x566c 0x81ff +0x566d 0x8200 +0x566e 0x8203 +0x566f 0x820f +0x5670 0x8213 +0x5671 0x8214 +0x5672 0x8219 +0x5673 0x821a +0x5674 0x821d +0x5675 0x8221 +0x5676 0x8222 +0x5677 0x8228 +0x5678 0x8232 +0x5679 0x8234 +0x567a 0x823a +0x567b 0x8243 +0x567c 0x8244 +0x567d 0x8245 +0x567e 0x8246 +0x5721 0x824b +0x5722 0x824e +0x5723 0x824f +0x5724 0x8251 +0x5725 0x8256 +0x5726 0x825c +0x5727 0x8260 +0x5728 0x8263 +0x5729 0x8267 +0x572a 0x826d +0x572b 0x8274 +0x572c 0x827b +0x572d 0x827d +0x572e 0x827f +0x572f 0x8280 +0x5730 0x8281 +0x5731 0x8283 +0x5732 0x8284 +0x5733 0x8287 +0x5734 0x8289 +0x5735 0x828a +0x5736 0x828e +0x5737 0x8291 +0x5738 0x8294 +0x5739 0x8296 +0x573a 0x8298 +0x573b 0x829a +0x573c 0x829b +0x573d 0x82a0 +0x573e 0x82a1 +0x573f 0x82a3 +0x5740 0x82a4 +0x5741 0x82a7 +0x5742 0x82a8 +0x5743 0x82a9 +0x5744 0x82aa +0x5745 0x82ae +0x5746 0x82b0 +0x5747 0x82b2 +0x5748 0x82b4 +0x5749 0x82b7 +0x574a 0x82ba +0x574b 0x82bc +0x574c 0x82be +0x574d 0x82bf +0x574e 0x82c6 +0x574f 0x82d0 +0x5750 0x82d5 +0x5751 0x82da +0x5752 0x82e0 +0x5753 0x82e2 +0x5754 0x82e4 +0x5755 0x82e8 +0x5756 0x82ea +0x5757 0x82ed +0x5758 0x82ef +0x5759 0x82f6 +0x575a 0x82f7 +0x575b 0x82fd +0x575c 0x82fe +0x575d 0x8300 +0x575e 0x8301 +0x575f 0x8307 +0x5760 0x8308 +0x5761 0x830a +0x5762 0x830b +0x5763 0x8354 +0x5764 0x831b +0x5765 0x831d +0x5766 0x831e +0x5767 0x831f +0x5768 0x8321 +0x5769 0x8322 +0x576a 0x832c +0x576b 0x832d +0x576c 0x832e +0x576d 0x8330 +0x576e 0x8333 +0x576f 0x8337 +0x5770 0x833a +0x5771 0x833c +0x5772 0x833d +0x5773 0x8342 +0x5774 0x8343 +0x5775 0x8344 +0x5776 0x8347 +0x5777 0x834d +0x5778 0x834e +0x5779 0x8351 +0x577a 0x8355 +0x577b 0x8356 +0x577c 0x8357 +0x577d 0x8370 +0x577e 0x8378 +0x5821 0x837d +0x5822 0x837f +0x5823 0x8380 +0x5824 0x8382 +0x5825 0x8384 +0x5826 0x8386 +0x5827 0x838d +0x5828 0x8392 +0x5829 0x8394 +0x582a 0x8395 +0x582b 0x8398 +0x582c 0x8399 +0x582d 0x839b +0x582e 0x839c +0x582f 0x839d +0x5830 0x83a6 +0x5831 0x83a7 +0x5832 0x83a9 +0x5833 0x83ac +0x5834 0x83be +0x5835 0x83bf +0x5836 0x83c0 +0x5837 0x83c7 +0x5838 0x83c9 +0x5839 0x83cf +0x583a 0x83d0 +0x583b 0x83d1 +0x583c 0x83d4 +0x583d 0x83dd +0x583e 0x8353 +0x583f 0x83e8 +0x5840 0x83ea +0x5841 0x83f6 +0x5842 0x83f8 +0x5843 0x83f9 +0x5844 0x83fc +0x5845 0x8401 +0x5846 0x8406 +0x5847 0x840a +0x5848 0x840f +0x5849 0x8411 +0x584a 0x8415 +0x584b 0x8419 +0x584c 0x83ad +0x584d 0x842f +0x584e 0x8439 +0x584f 0x8445 +0x5850 0x8447 +0x5851 0x8448 +0x5852 0x844a +0x5853 0x844d +0x5854 0x844f +0x5855 0x8451 +0x5856 0x8452 +0x5857 0x8456 +0x5858 0x8458 +0x5859 0x8459 +0x585a 0x845a +0x585b 0x845c +0x585c 0x8460 +0x585d 0x8464 +0x585e 0x8465 +0x585f 0x8467 +0x5860 0x846a +0x5861 0x8470 +0x5862 0x8473 +0x5863 0x8474 +0x5864 0x8476 +0x5865 0x8478 +0x5866 0x847c +0x5867 0x847d +0x5868 0x8481 +0x5869 0x8485 +0x586a 0x8492 +0x586b 0x8493 +0x586c 0x8495 +0x586d 0x849e +0x586e 0x84a6 +0x586f 0x84a8 +0x5870 0x84a9 +0x5871 0x84aa +0x5872 0x84af +0x5873 0x84b1 +0x5874 0x84b4 +0x5875 0x84ba +0x5876 0x84bd +0x5877 0x84be +0x5878 0x84c0 +0x5879 0x84c2 +0x587a 0x84c7 +0x587b 0x84c8 +0x587c 0x84cc +0x587d 0x84cf +0x587e 0x84d3 +0x5921 0x84dc +0x5922 0x84e7 +0x5923 0x84ea +0x5924 0x84ef +0x5925 0x84f0 +0x5926 0x84f1 +0x5927 0x84f2 +0x5928 0x84f7 +0x5929 0x8532 +0x592a 0x84fa +0x592b 0x84fb +0x592c 0x84fd +0x592d 0x8502 +0x592e 0x8503 +0x592f 0x8507 +0x5930 0x850c +0x5931 0x850e +0x5932 0x8510 +0x5933 0x851c +0x5934 0x851e +0x5935 0x8522 +0x5936 0x8523 +0x5937 0x8524 +0x5938 0x8525 +0x5939 0x8527 +0x593a 0x852a +0x593b 0x852b +0x593c 0x852f +0x593d 0x8533 +0x593e 0x8534 +0x593f 0x8536 +0x5940 0x853f +0x5941 0x8546 +0x5942 0x854f +0x5943 0x8550 +0x5944 0x8551 +0x5945 0x8552 +0x5946 0x8553 +0x5947 0x8556 +0x5948 0x8559 +0x5949 0x855c +0x594a 0x855d +0x594b 0x855e +0x594c 0x855f +0x594d 0x8560 +0x594e 0x8561 +0x594f 0x8562 +0x5950 0x8564 +0x5951 0x856b +0x5952 0x856f +0x5953 0x8579 +0x5954 0x857a +0x5955 0x857b +0x5956 0x857d +0x5957 0x857f +0x5958 0x8581 +0x5959 0x8585 +0x595a 0x8586 +0x595b 0x8589 +0x595c 0x858b +0x595d 0x858c +0x595e 0x858f +0x595f 0x8593 +0x5960 0x8598 +0x5961 0x859d +0x5962 0x859f +0x5963 0x85a0 +0x5964 0x85a2 +0x5965 0x85a5 +0x5966 0x85a7 +0x5967 0x85b4 +0x5968 0x85b6 +0x5969 0x85b7 +0x596a 0x85b8 +0x596b 0x85bc +0x596c 0x85bd +0x596d 0x85be +0x596e 0x85bf +0x596f 0x85c2 +0x5970 0x85c7 +0x5971 0x85ca +0x5972 0x85cb +0x5973 0x85ce +0x5974 0x85ad +0x5975 0x85d8 +0x5976 0x85da +0x5977 0x85df +0x5978 0x85e0 +0x5979 0x85e6 +0x597a 0x85e8 +0x597b 0x85ed +0x597c 0x85f3 +0x597d 0x85f6 +0x597e 0x85fc +0x5a21 0x85ff +0x5a22 0x8600 +0x5a23 0x8604 +0x5a24 0x8605 +0x5a25 0x860d +0x5a26 0x860e +0x5a27 0x8610 +0x5a28 0x8611 +0x5a29 0x8612 +0x5a2a 0x8618 +0x5a2b 0x8619 +0x5a2c 0x861b +0x5a2d 0x861e +0x5a2e 0x8621 +0x5a2f 0x8627 +0x5a30 0x8629 +0x5a31 0x8636 +0x5a32 0x8638 +0x5a33 0x863a +0x5a34 0x863c +0x5a35 0x863d +0x5a36 0x8640 +0x5a37 0x8642 +0x5a38 0x8646 +0x5a39 0x8652 +0x5a3a 0x8653 +0x5a3b 0x8656 +0x5a3c 0x8657 +0x5a3d 0x8658 +0x5a3e 0x8659 +0x5a3f 0x865d +0x5a40 0x8660 +0x5a41 0x8661 +0x5a42 0x8662 +0x5a43 0x8663 +0x5a44 0x8664 +0x5a45 0x8669 +0x5a46 0x866c +0x5a47 0x866f +0x5a48 0x8675 +0x5a49 0x8676 +0x5a4a 0x8677 +0x5a4b 0x867a +0x5a4c 0x868d +0x5a4d 0x8691 +0x5a4e 0x8696 +0x5a4f 0x8698 +0x5a50 0x869a +0x5a51 0x869c +0x5a52 0x86a1 +0x5a53 0x86a6 +0x5a54 0x86a7 +0x5a55 0x86a8 +0x5a56 0x86ad +0x5a57 0x86b1 +0x5a58 0x86b3 +0x5a59 0x86b4 +0x5a5a 0x86b5 +0x5a5b 0x86b7 +0x5a5c 0x86b8 +0x5a5d 0x86b9 +0x5a5e 0x86bf +0x5a5f 0x86c0 +0x5a60 0x86c1 +0x5a61 0x86c3 +0x5a62 0x86c5 +0x5a63 0x86d1 +0x5a64 0x86d2 +0x5a65 0x86d5 +0x5a66 0x86d7 +0x5a67 0x86da +0x5a68 0x86dc +0x5a69 0x86e0 +0x5a6a 0x86e3 +0x5a6b 0x86e5 +0x5a6c 0x86e7 +0x5a6d 0x8688 +0x5a6e 0x86fa +0x5a6f 0x86fc +0x5a70 0x86fd +0x5a71 0x8704 +0x5a72 0x8705 +0x5a73 0x8707 +0x5a74 0x870b +0x5a75 0x870e +0x5a76 0x870f +0x5a77 0x8710 +0x5a78 0x8713 +0x5a79 0x8714 +0x5a7a 0x8719 +0x5a7b 0x871e +0x5a7c 0x871f +0x5a7d 0x8721 +0x5a7e 0x8723 +0x5b21 0x8728 +0x5b22 0x872e +0x5b23 0x872f +0x5b24 0x8731 +0x5b25 0x8732 +0x5b26 0x8739 +0x5b27 0x873a +0x5b28 0x873c +0x5b29 0x873d +0x5b2a 0x873e +0x5b2b 0x8740 +0x5b2c 0x8743 +0x5b2d 0x8745 +0x5b2e 0x874d +0x5b2f 0x8758 +0x5b30 0x875d +0x5b31 0x8761 +0x5b32 0x8764 +0x5b33 0x8765 +0x5b34 0x876f +0x5b35 0x8771 +0x5b36 0x8772 +0x5b37 0x877b +0x5b38 0x8783 +0x5b39 0x8784 +0x5b3a 0x8785 +0x5b3b 0x8786 +0x5b3c 0x8787 +0x5b3d 0x8788 +0x5b3e 0x8789 +0x5b3f 0x878b +0x5b40 0x878c +0x5b41 0x8790 +0x5b42 0x8793 +0x5b43 0x8795 +0x5b44 0x8797 +0x5b45 0x8798 +0x5b46 0x8799 +0x5b47 0x879e +0x5b48 0x87a0 +0x5b49 0x87a3 +0x5b4a 0x87a7 +0x5b4b 0x87ac +0x5b4c 0x87ad +0x5b4d 0x87ae +0x5b4e 0x87b1 +0x5b4f 0x87b5 +0x5b50 0x87be +0x5b51 0x87bf +0x5b52 0x87c1 +0x5b53 0x87c8 +0x5b54 0x87c9 +0x5b55 0x87ca +0x5b56 0x87ce +0x5b57 0x87d5 +0x5b58 0x87d6 +0x5b59 0x87d9 +0x5b5a 0x87da +0x5b5b 0x87dc +0x5b5c 0x87df +0x5b5d 0x87e2 +0x5b5e 0x87e3 +0x5b5f 0x87e4 +0x5b60 0x87ea +0x5b61 0x87eb +0x5b62 0x87ed +0x5b63 0x87f1 +0x5b64 0x87f3 +0x5b65 0x87f8 +0x5b66 0x87fa +0x5b67 0x87ff +0x5b68 0x8801 +0x5b69 0x8803 +0x5b6a 0x8806 +0x5b6b 0x8809 +0x5b6c 0x880a +0x5b6d 0x880b +0x5b6e 0x8810 +0x5b6f 0x8819 +0x5b70 0x8812 +0x5b71 0x8813 +0x5b72 0x8814 +0x5b73 0x8818 +0x5b74 0x881a +0x5b75 0x881b +0x5b76 0x881c +0x5b77 0x881e +0x5b78 0x881f +0x5b79 0x8828 +0x5b7a 0x882d +0x5b7b 0x882e +0x5b7c 0x8830 +0x5b7d 0x8832 +0x5b7e 0x8835 +0x5c21 0x883a +0x5c22 0x883c +0x5c23 0x8841 +0x5c24 0x8843 +0x5c25 0x8845 +0x5c26 0x8848 +0x5c27 0x8849 +0x5c28 0x884a +0x5c29 0x884b +0x5c2a 0x884e +0x5c2b 0x8851 +0x5c2c 0x8855 +0x5c2d 0x8856 +0x5c2e 0x8858 +0x5c2f 0x885a +0x5c30 0x885c +0x5c31 0x885f +0x5c32 0x8860 +0x5c33 0x8864 +0x5c34 0x8869 +0x5c35 0x8871 +0x5c36 0x8879 +0x5c37 0x887b +0x5c38 0x8880 +0x5c39 0x8898 +0x5c3a 0x889a +0x5c3b 0x889b +0x5c3c 0x889c +0x5c3d 0x889f +0x5c3e 0x88a0 +0x5c3f 0x88a8 +0x5c40 0x88aa +0x5c41 0x88ba +0x5c42 0x88bd +0x5c43 0x88be +0x5c44 0x88c0 +0x5c45 0x88ca +0x5c46 0x88cb +0x5c47 0x88cc +0x5c48 0x88cd +0x5c49 0x88ce +0x5c4a 0x88d1 +0x5c4b 0x88d2 +0x5c4c 0x88d3 +0x5c4d 0x88db +0x5c4e 0x88de +0x5c4f 0x88e7 +0x5c50 0x88ef +0x5c51 0x88f0 +0x5c52 0x88f1 +0x5c53 0x88f5 +0x5c54 0x88f7 +0x5c55 0x8901 +0x5c56 0x8906 +0x5c57 0x890d +0x5c58 0x890e +0x5c59 0x890f +0x5c5a 0x8915 +0x5c5b 0x8916 +0x5c5c 0x8918 +0x5c5d 0x8919 +0x5c5e 0x891a +0x5c5f 0x891c +0x5c60 0x8920 +0x5c61 0x8926 +0x5c62 0x8927 +0x5c63 0x8928 +0x5c64 0x8930 +0x5c65 0x8931 +0x5c66 0x8932 +0x5c67 0x8935 +0x5c68 0x8939 +0x5c69 0x893a +0x5c6a 0x893e +0x5c6b 0x8940 +0x5c6c 0x8942 +0x5c6d 0x8945 +0x5c6e 0x8946 +0x5c6f 0x8949 +0x5c70 0x894f +0x5c71 0x8952 +0x5c72 0x8957 +0x5c73 0x895a +0x5c74 0x895b +0x5c75 0x895c +0x5c76 0x8961 +0x5c77 0x8962 +0x5c78 0x8963 +0x5c79 0x896b +0x5c7a 0x896e +0x5c7b 0x8970 +0x5c7c 0x8973 +0x5c7d 0x8975 +0x5c7e 0x897a +0x5d21 0x897b +0x5d22 0x897c +0x5d23 0x897d +0x5d24 0x8989 +0x5d25 0x898d +0x5d26 0x8990 +0x5d27 0x8994 +0x5d28 0x8995 +0x5d29 0x899b +0x5d2a 0x899c +0x5d2b 0x899f +0x5d2c 0x89a0 +0x5d2d 0x89a5 +0x5d2e 0x89b0 +0x5d2f 0x89b4 +0x5d30 0x89b5 +0x5d31 0x89b6 +0x5d32 0x89b7 +0x5d33 0x89bc +0x5d34 0x89d4 +0x5d35 0x89d5 +0x5d36 0x89d6 +0x5d37 0x89d7 +0x5d38 0x89d8 +0x5d39 0x89e5 +0x5d3a 0x89e9 +0x5d3b 0x89eb +0x5d3c 0x89ed +0x5d3d 0x89f1 +0x5d3e 0x89f3 +0x5d3f 0x89f6 +0x5d40 0x89f9 +0x5d41 0x89fd +0x5d42 0x89ff +0x5d43 0x8a04 +0x5d44 0x8a05 +0x5d45 0x8a07 +0x5d46 0x8a0f +0x5d47 0x8a11 +0x5d48 0x8a12 +0x5d49 0x8a14 +0x5d4a 0x8a15 +0x5d4b 0x8a1e +0x5d4c 0x8a20 +0x5d4d 0x8a22 +0x5d4e 0x8a24 +0x5d4f 0x8a26 +0x5d50 0x8a2b +0x5d51 0x8a2c +0x5d52 0x8a2f +0x5d53 0x8a35 +0x5d54 0x8a37 +0x5d55 0x8a3d +0x5d56 0x8a3e +0x5d57 0x8a40 +0x5d58 0x8a43 +0x5d59 0x8a45 +0x5d5a 0x8a47 +0x5d5b 0x8a49 +0x5d5c 0x8a4d +0x5d5d 0x8a4e +0x5d5e 0x8a53 +0x5d5f 0x8a56 +0x5d60 0x8a57 +0x5d61 0x8a58 +0x5d62 0x8a5c +0x5d63 0x8a5d +0x5d64 0x8a61 +0x5d65 0x8a65 +0x5d66 0x8a67 +0x5d67 0x8a75 +0x5d68 0x8a76 +0x5d69 0x8a77 +0x5d6a 0x8a79 +0x5d6b 0x8a7a +0x5d6c 0x8a7b +0x5d6d 0x8a7e +0x5d6e 0x8a7f +0x5d6f 0x8a80 +0x5d70 0x8a83 +0x5d71 0x8a86 +0x5d72 0x8a8b +0x5d73 0x8a8f +0x5d74 0x8a90 +0x5d75 0x8a92 +0x5d76 0x8a96 +0x5d77 0x8a97 +0x5d78 0x8a99 +0x5d79 0x8a9f +0x5d7a 0x8aa7 +0x5d7b 0x8aa9 +0x5d7c 0x8aae +0x5d7d 0x8aaf +0x5d7e 0x8ab3 +0x5e21 0x8ab6 +0x5e22 0x8ab7 +0x5e23 0x8abb +0x5e24 0x8abe +0x5e25 0x8ac3 +0x5e26 0x8ac6 +0x5e27 0x8ac8 +0x5e28 0x8ac9 +0x5e29 0x8aca +0x5e2a 0x8ad1 +0x5e2b 0x8ad3 +0x5e2c 0x8ad4 +0x5e2d 0x8ad5 +0x5e2e 0x8ad7 +0x5e2f 0x8add +0x5e30 0x8adf +0x5e31 0x8aec +0x5e32 0x8af0 +0x5e33 0x8af4 +0x5e34 0x8af5 +0x5e35 0x8af6 +0x5e36 0x8afc +0x5e37 0x8aff +0x5e38 0x8b05 +0x5e39 0x8b06 +0x5e3a 0x8b0b +0x5e3b 0x8b11 +0x5e3c 0x8b1c +0x5e3d 0x8b1e +0x5e3e 0x8b1f +0x5e3f 0x8b0a +0x5e40 0x8b2d +0x5e41 0x8b30 +0x5e42 0x8b37 +0x5e43 0x8b3c +0x5e44 0x8b42 +0x5e45 0x8b43 +0x5e46 0x8b44 +0x5e47 0x8b45 +0x5e48 0x8b46 +0x5e49 0x8b48 +0x5e4a 0x8b52 +0x5e4b 0x8b53 +0x5e4c 0x8b54 +0x5e4d 0x8b59 +0x5e4e 0x8b4d +0x5e4f 0x8b5e +0x5e50 0x8b63 +0x5e51 0x8b6d +0x5e52 0x8b76 +0x5e53 0x8b78 +0x5e54 0x8b79 +0x5e55 0x8b7c +0x5e56 0x8b7e +0x5e57 0x8b81 +0x5e58 0x8b84 +0x5e59 0x8b85 +0x5e5a 0x8b8b +0x5e5b 0x8b8d +0x5e5c 0x8b8f +0x5e5d 0x8b94 +0x5e5e 0x8b95 +0x5e5f 0x8b9c +0x5e60 0x8b9e +0x5e61 0x8b9f +0x5e62 0x8c38 +0x5e63 0x8c39 +0x5e64 0x8c3d +0x5e65 0x8c3e +0x5e66 0x8c45 +0x5e67 0x8c47 +0x5e68 0x8c49 +0x5e69 0x8c4b +0x5e6a 0x8c4f +0x5e6b 0x8c51 +0x5e6c 0x8c53 +0x5e6d 0x8c54 +0x5e6e 0x8c57 +0x5e6f 0x8c58 +0x5e70 0x8c5b +0x5e71 0x8c5d +0x5e72 0x8c59 +0x5e73 0x8c63 +0x5e74 0x8c64 +0x5e75 0x8c66 +0x5e76 0x8c68 +0x5e77 0x8c69 +0x5e78 0x8c6d +0x5e79 0x8c73 +0x5e7a 0x8c75 +0x5e7b 0x8c76 +0x5e7c 0x8c7b +0x5e7d 0x8c7e +0x5e7e 0x8c86 +0x5f21 0x8c87 +0x5f22 0x8c8b +0x5f23 0x8c90 +0x5f24 0x8c92 +0x5f25 0x8c93 +0x5f26 0x8c99 +0x5f27 0x8c9b +0x5f28 0x8c9c +0x5f29 0x8ca4 +0x5f2a 0x8cb9 +0x5f2b 0x8cba +0x5f2c 0x8cc5 +0x5f2d 0x8cc6 +0x5f2e 0x8cc9 +0x5f2f 0x8ccb +0x5f30 0x8ccf +0x5f31 0x8cd6 +0x5f32 0x8cd5 +0x5f33 0x8cd9 +0x5f34 0x8cdd +0x5f35 0x8ce1 +0x5f36 0x8ce8 +0x5f37 0x8cec +0x5f38 0x8cef +0x5f39 0x8cf0 +0x5f3a 0x8cf2 +0x5f3b 0x8cf5 +0x5f3c 0x8cf7 +0x5f3d 0x8cf8 +0x5f3e 0x8cfe +0x5f3f 0x8cff +0x5f40 0x8d01 +0x5f41 0x8d03 +0x5f42 0x8d09 +0x5f43 0x8d12 +0x5f44 0x8d17 +0x5f45 0x8d1b +0x5f46 0x8d65 +0x5f47 0x8d69 +0x5f48 0x8d6c +0x5f49 0x8d6e +0x5f4a 0x8d7f +0x5f4b 0x8d82 +0x5f4c 0x8d84 +0x5f4d 0x8d88 +0x5f4e 0x8d8d +0x5f4f 0x8d90 +0x5f50 0x8d91 +0x5f51 0x8d95 +0x5f52 0x8d9e +0x5f53 0x8d9f +0x5f54 0x8da0 +0x5f55 0x8da6 +0x5f56 0x8dab +0x5f57 0x8dac +0x5f58 0x8daf +0x5f59 0x8db2 +0x5f5a 0x8db5 +0x5f5b 0x8db7 +0x5f5c 0x8db9 +0x5f5d 0x8dbb +0x5f5e 0x8dc0 +0x5f5f 0x8dc5 +0x5f60 0x8dc6 +0x5f61 0x8dc7 +0x5f62 0x8dc8 +0x5f63 0x8dca +0x5f64 0x8dce +0x5f65 0x8dd1 +0x5f66 0x8dd4 +0x5f67 0x8dd5 +0x5f68 0x8dd7 +0x5f69 0x8dd9 +0x5f6a 0x8de4 +0x5f6b 0x8de5 +0x5f6c 0x8de7 +0x5f6d 0x8dec +0x5f6e 0x8df0 +0x5f6f 0x8dbc +0x5f70 0x8df1 +0x5f71 0x8df2 +0x5f72 0x8df4 +0x5f73 0x8dfd +0x5f74 0x8e01 +0x5f75 0x8e04 +0x5f76 0x8e05 +0x5f77 0x8e06 +0x5f78 0x8e0b +0x5f79 0x8e11 +0x5f7a 0x8e14 +0x5f7b 0x8e16 +0x5f7c 0x8e20 +0x5f7d 0x8e21 +0x5f7e 0x8e22 +0x6021 0x8e23 +0x6022 0x8e26 +0x6023 0x8e27 +0x6024 0x8e31 +0x6025 0x8e33 +0x6026 0x8e36 +0x6027 0x8e37 +0x6028 0x8e38 +0x6029 0x8e39 +0x602a 0x8e3d +0x602b 0x8e40 +0x602c 0x8e41 +0x602d 0x8e4b +0x602e 0x8e4d +0x602f 0x8e4e +0x6030 0x8e4f +0x6031 0x8e54 +0x6032 0x8e5b +0x6033 0x8e5c +0x6034 0x8e5d +0x6035 0x8e5e +0x6036 0x8e61 +0x6037 0x8e62 +0x6038 0x8e69 +0x6039 0x8e6c +0x603a 0x8e6d +0x603b 0x8e6f +0x603c 0x8e70 +0x603d 0x8e71 +0x603e 0x8e79 +0x603f 0x8e7a +0x6040 0x8e7b +0x6041 0x8e82 +0x6042 0x8e83 +0x6043 0x8e89 +0x6044 0x8e90 +0x6045 0x8e92 +0x6046 0x8e95 +0x6047 0x8e9a +0x6048 0x8e9b +0x6049 0x8e9d +0x604a 0x8e9e +0x604b 0x8ea2 +0x604c 0x8ea7 +0x604d 0x8ea9 +0x604e 0x8ead +0x604f 0x8eae +0x6050 0x8eb3 +0x6051 0x8eb5 +0x6052 0x8eba +0x6053 0x8ebb +0x6054 0x8ec0 +0x6055 0x8ec1 +0x6056 0x8ec3 +0x6057 0x8ec4 +0x6058 0x8ec7 +0x6059 0x8ecf +0x605a 0x8ed1 +0x605b 0x8ed4 +0x605c 0x8edc +0x605d 0x8ee8 +0x605e 0x8eee +0x605f 0x8ef0 +0x6060 0x8ef1 +0x6061 0x8ef7 +0x6062 0x8ef9 +0x6063 0x8efa +0x6064 0x8eed +0x6065 0x8f00 +0x6066 0x8f02 +0x6067 0x8f07 +0x6068 0x8f08 +0x6069 0x8f0f +0x606a 0x8f10 +0x606b 0x8f16 +0x606c 0x8f17 +0x606d 0x8f18 +0x606e 0x8f1e +0x606f 0x8f20 +0x6070 0x8f21 +0x6071 0x8f23 +0x6072 0x8f25 +0x6073 0x8f27 +0x6074 0x8f28 +0x6075 0x8f2c +0x6076 0x8f2d +0x6077 0x8f2e +0x6078 0x8f34 +0x6079 0x8f35 +0x607a 0x8f36 +0x607b 0x8f37 +0x607c 0x8f3a +0x607d 0x8f40 +0x607e 0x8f41 +0x6121 0x8f43 +0x6122 0x8f47 +0x6123 0x8f4f +0x6124 0x8f51 +0x6125 0x8f52 +0x6126 0x8f53 +0x6127 0x8f54 +0x6128 0x8f55 +0x6129 0x8f58 +0x612a 0x8f5d +0x612b 0x8f5e +0x612c 0x8f65 +0x612d 0x8f9d +0x612e 0x8fa0 +0x612f 0x8fa1 +0x6130 0x8fa4 +0x6131 0x8fa5 +0x6132 0x8fa6 +0x6133 0x8fb5 +0x6134 0x8fb6 +0x6135 0x8fb8 +0x6136 0x8fbe +0x6137 0x8fc0 +0x6138 0x8fc1 +0x6139 0x8fc6 +0x613a 0x8fca +0x613b 0x8fcb +0x613c 0x8fcd +0x613d 0x8fd0 +0x613e 0x8fd2 +0x613f 0x8fd3 +0x6140 0x8fd5 +0x6141 0x8fe0 +0x6142 0x8fe3 +0x6143 0x8fe4 +0x6144 0x8fe8 +0x6145 0x8fee +0x6146 0x8ff1 +0x6147 0x8ff5 +0x6148 0x8ff6 +0x6149 0x8ffb +0x614a 0x8ffe +0x614b 0x9002 +0x614c 0x9004 +0x614d 0x9008 +0x614e 0x900c +0x614f 0x9018 +0x6150 0x901b +0x6151 0x9028 +0x6152 0x9029 +0x6153 0x902f +0x6154 0x902a +0x6155 0x902c +0x6156 0x902d +0x6157 0x9033 +0x6158 0x9034 +0x6159 0x9037 +0x615a 0x903f +0x615b 0x9043 +0x615c 0x9044 +0x615d 0x904c +0x615e 0x905b +0x615f 0x905d +0x6160 0x9062 +0x6161 0x9066 +0x6162 0x9067 +0x6163 0x906c +0x6164 0x9070 +0x6165 0x9074 +0x6166 0x9079 +0x6167 0x9085 +0x6168 0x9088 +0x6169 0x908b +0x616a 0x908c +0x616b 0x908e +0x616c 0x9090 +0x616d 0x9095 +0x616e 0x9097 +0x616f 0x9098 +0x6170 0x9099 +0x6171 0x909b +0x6172 0x90a0 +0x6173 0x90a1 +0x6174 0x90a2 +0x6175 0x90a5 +0x6176 0x90b0 +0x6177 0x90b2 +0x6178 0x90b3 +0x6179 0x90b4 +0x617a 0x90b6 +0x617b 0x90bd +0x617c 0x90cc +0x617d 0x90be +0x617e 0x90c3 +0x6221 0x90c4 +0x6222 0x90c5 +0x6223 0x90c7 +0x6224 0x90c8 +0x6225 0x90d5 +0x6226 0x90d7 +0x6227 0x90d8 +0x6228 0x90d9 +0x6229 0x90dc +0x622a 0x90dd +0x622b 0x90df +0x622c 0x90e5 +0x622d 0x90d2 +0x622e 0x90f6 +0x622f 0x90eb +0x6230 0x90ef +0x6231 0x90f0 +0x6232 0x90f4 +0x6233 0x90fe +0x6234 0x90ff +0x6235 0x9100 +0x6236 0x9104 +0x6237 0x9105 +0x6238 0x9106 +0x6239 0x9108 +0x623a 0x910d +0x623b 0x9110 +0x623c 0x9114 +0x623d 0x9116 +0x623e 0x9117 +0x623f 0x9118 +0x6240 0x911a +0x6241 0x911c +0x6242 0x911e +0x6243 0x9120 +0x6244 0x9125 +0x6245 0x9122 +0x6246 0x9123 +0x6247 0x9127 +0x6248 0x9129 +0x6249 0x912e +0x624a 0x912f +0x624b 0x9131 +0x624c 0x9134 +0x624d 0x9136 +0x624e 0x9137 +0x624f 0x9139 +0x6250 0x913a +0x6251 0x913c +0x6252 0x913d +0x6253 0x9143 +0x6254 0x9147 +0x6255 0x9148 +0x6256 0x914f +0x6257 0x9153 +0x6258 0x9157 +0x6259 0x9159 +0x625a 0x915a +0x625b 0x915b +0x625c 0x9161 +0x625d 0x9164 +0x625e 0x9167 +0x625f 0x916d +0x6260 0x9174 +0x6261 0x9179 +0x6262 0x917a +0x6263 0x917b +0x6264 0x9181 +0x6265 0x9183 +0x6266 0x9185 +0x6267 0x9186 +0x6268 0x918a +0x6269 0x918e +0x626a 0x9191 +0x626b 0x9193 +0x626c 0x9194 +0x626d 0x9195 +0x626e 0x9198 +0x626f 0x919e +0x6270 0x91a1 +0x6271 0x91a6 +0x6272 0x91a8 +0x6273 0x91ac +0x6274 0x91ad +0x6275 0x91ae +0x6276 0x91b0 +0x6277 0x91b1 +0x6278 0x91b2 +0x6279 0x91b3 +0x627a 0x91b6 +0x627b 0x91bb +0x627c 0x91bc +0x627d 0x91bd +0x627e 0x91bf +0x6321 0x91c2 +0x6322 0x91c3 +0x6323 0x91c5 +0x6324 0x91d3 +0x6325 0x91d4 +0x6326 0x91d7 +0x6327 0x91d9 +0x6328 0x91da +0x6329 0x91de +0x632a 0x91e4 +0x632b 0x91e5 +0x632c 0x91e9 +0x632d 0x91ea +0x632e 0x91ec +0x632f 0x91ed +0x6330 0x91ee +0x6331 0x91ef +0x6332 0x91f0 +0x6333 0x91f1 +0x6334 0x91f7 +0x6335 0x91f9 +0x6336 0x91fb +0x6337 0x91fd +0x6338 0x9200 +0x6339 0x9201 +0x633a 0x9204 +0x633b 0x9205 +0x633c 0x9206 +0x633d 0x9207 +0x633e 0x9209 +0x633f 0x920a +0x6340 0x920c +0x6341 0x9210 +0x6342 0x9212 +0x6343 0x9213 +0x6344 0x9216 +0x6345 0x9218 +0x6346 0x921c +0x6347 0x921d +0x6348 0x9223 +0x6349 0x9224 +0x634a 0x9225 +0x634b 0x9226 +0x634c 0x9228 +0x634d 0x922e +0x634e 0x922f +0x634f 0x9230 +0x6350 0x9233 +0x6351 0x9235 +0x6352 0x9236 +0x6353 0x9238 +0x6354 0x9239 +0x6355 0x923a +0x6356 0x923c +0x6357 0x923e +0x6358 0x9240 +0x6359 0x9242 +0x635a 0x9243 +0x635b 0x9246 +0x635c 0x9247 +0x635d 0x924a +0x635e 0x924d +0x635f 0x924e +0x6360 0x924f +0x6361 0x9251 +0x6362 0x9258 +0x6363 0x9259 +0x6364 0x925c +0x6365 0x925d +0x6366 0x9260 +0x6367 0x9261 +0x6368 0x9265 +0x6369 0x9267 +0x636a 0x9268 +0x636b 0x9269 +0x636c 0x926e +0x636d 0x926f +0x636e 0x9270 +0x636f 0x9275 +0x6370 0x9276 +0x6371 0x9277 +0x6372 0x9278 +0x6373 0x9279 +0x6374 0x927b +0x6375 0x927c +0x6376 0x927d +0x6377 0x927f +0x6378 0x9288 +0x6379 0x9289 +0x637a 0x928a +0x637b 0x928d +0x637c 0x928e +0x637d 0x9292 +0x637e 0x9297 +0x6421 0x9299 +0x6422 0x929f +0x6423 0x92a0 +0x6424 0x92a4 +0x6425 0x92a5 +0x6426 0x92a7 +0x6427 0x92a8 +0x6428 0x92ab +0x6429 0x92af +0x642a 0x92b2 +0x642b 0x92b6 +0x642c 0x92b8 +0x642d 0x92ba +0x642e 0x92bb +0x642f 0x92bc +0x6430 0x92bd +0x6431 0x92bf +0x6432 0x92c0 +0x6433 0x92c1 +0x6434 0x92c2 +0x6435 0x92c3 +0x6436 0x92c5 +0x6437 0x92c6 +0x6438 0x92c7 +0x6439 0x92c8 +0x643a 0x92cb +0x643b 0x92cc +0x643c 0x92cd +0x643d 0x92ce +0x643e 0x92d0 +0x643f 0x92d3 +0x6440 0x92d5 +0x6441 0x92d7 +0x6442 0x92d8 +0x6443 0x92d9 +0x6444 0x92dc +0x6445 0x92dd +0x6446 0x92df +0x6447 0x92e0 +0x6448 0x92e1 +0x6449 0x92e3 +0x644a 0x92e5 +0x644b 0x92e7 +0x644c 0x92e8 +0x644d 0x92ec +0x644e 0x92ee +0x644f 0x92f0 +0x6450 0x92f9 +0x6451 0x92fb +0x6452 0x92ff +0x6453 0x9300 +0x6454 0x9302 +0x6455 0x9308 +0x6456 0x930d +0x6457 0x9311 +0x6458 0x9314 +0x6459 0x9315 +0x645a 0x931c +0x645b 0x931d +0x645c 0x931e +0x645d 0x931f +0x645e 0x9321 +0x645f 0x9324 +0x6460 0x9325 +0x6461 0x9327 +0x6462 0x9329 +0x6463 0x932a +0x6464 0x9333 +0x6465 0x9334 +0x6466 0x9336 +0x6467 0x9337 +0x6468 0x9347 +0x6469 0x9348 +0x646a 0x9349 +0x646b 0x9350 +0x646c 0x9351 +0x646d 0x9352 +0x646e 0x9355 +0x646f 0x9357 +0x6470 0x9358 +0x6471 0x935a +0x6472 0x935e +0x6473 0x9364 +0x6474 0x9365 +0x6475 0x9367 +0x6476 0x9369 +0x6477 0x936a +0x6478 0x936d +0x6479 0x936f +0x647a 0x9370 +0x647b 0x9371 +0x647c 0x9373 +0x647d 0x9374 +0x647e 0x9376 +0x6521 0x937a +0x6522 0x937d +0x6523 0x937f +0x6524 0x9380 +0x6525 0x9381 +0x6526 0x9382 +0x6527 0x9388 +0x6528 0x938a +0x6529 0x938b +0x652a 0x938d +0x652b 0x938f +0x652c 0x9392 +0x652d 0x9395 +0x652e 0x9398 +0x652f 0x939b +0x6530 0x939e +0x6531 0x93a1 +0x6532 0x93a3 +0x6533 0x93a4 +0x6534 0x93a6 +0x6535 0x93a8 +0x6536 0x93ab +0x6537 0x93b4 +0x6538 0x93b5 +0x6539 0x93b6 +0x653a 0x93ba +0x653b 0x93a9 +0x653c 0x93c1 +0x653d 0x93c4 +0x653e 0x93c5 +0x653f 0x93c6 +0x6540 0x93c7 +0x6541 0x93c9 +0x6542 0x93ca +0x6543 0x93cb +0x6544 0x93cc +0x6545 0x93cd +0x6546 0x93d3 +0x6547 0x93d9 +0x6548 0x93dc +0x6549 0x93de +0x654a 0x93df +0x654b 0x93e2 +0x654c 0x93e6 +0x654d 0x93e7 +0x654e 0x93f9 +0x654f 0x93f7 +0x6550 0x93f8 +0x6551 0x93fa +0x6552 0x93fb +0x6553 0x93fd +0x6554 0x9401 +0x6555 0x9402 +0x6556 0x9404 +0x6557 0x9408 +0x6558 0x9409 +0x6559 0x940d +0x655a 0x940e +0x655b 0x940f +0x655c 0x9415 +0x655d 0x9416 +0x655e 0x9417 +0x655f 0x941f +0x6560 0x942e +0x6561 0x942f +0x6562 0x9431 +0x6563 0x9432 +0x6564 0x9433 +0x6565 0x9434 +0x6566 0x943b +0x6567 0x943f +0x6568 0x943d +0x6569 0x9443 +0x656a 0x9445 +0x656b 0x9448 +0x656c 0x944a +0x656d 0x944c +0x656e 0x9455 +0x656f 0x9459 +0x6570 0x945c +0x6571 0x945f +0x6572 0x9461 +0x6573 0x9463 +0x6574 0x9468 +0x6575 0x946b +0x6576 0x946d +0x6577 0x946e +0x6578 0x946f +0x6579 0x9471 +0x657a 0x9472 +0x657b 0x9484 +0x657c 0x9483 +0x657d 0x9578 +0x657e 0x9579 +0x6621 0x957e +0x6622 0x9584 +0x6623 0x9588 +0x6624 0x958c +0x6625 0x958d +0x6626 0x958e +0x6627 0x959d +0x6628 0x959e +0x6629 0x959f +0x662a 0x95a1 +0x662b 0x95a6 +0x662c 0x95a9 +0x662d 0x95ab +0x662e 0x95ac +0x662f 0x95b4 +0x6630 0x95b6 +0x6631 0x95ba +0x6632 0x95bd +0x6633 0x95bf +0x6634 0x95c6 +0x6635 0x95c8 +0x6636 0x95c9 +0x6637 0x95cb +0x6638 0x95d0 +0x6639 0x95d1 +0x663a 0x95d2 +0x663b 0x95d3 +0x663c 0x95d9 +0x663d 0x95da +0x663e 0x95dd +0x663f 0x95de +0x6640 0x95df +0x6641 0x95e0 +0x6642 0x95e4 +0x6643 0x95e6 +0x6644 0x961d +0x6645 0x961e +0x6646 0x9622 +0x6647 0x9624 +0x6648 0x9625 +0x6649 0x9626 +0x664a 0x962c +0x664b 0x9631 +0x664c 0x9633 +0x664d 0x9637 +0x664e 0x9638 +0x664f 0x9639 +0x6650 0x963a +0x6651 0x963c +0x6652 0x963d +0x6653 0x9641 +0x6654 0x9652 +0x6655 0x9654 +0x6656 0x9656 +0x6657 0x9657 +0x6658 0x9658 +0x6659 0x9661 +0x665a 0x966e +0x665b 0x9674 +0x665c 0x967b +0x665d 0x967c +0x665e 0x967e +0x665f 0x967f +0x6660 0x9681 +0x6661 0x9682 +0x6662 0x9683 +0x6663 0x9684 +0x6664 0x9689 +0x6665 0x9691 +0x6666 0x9696 +0x6667 0x969a +0x6668 0x969d +0x6669 0x969f +0x666a 0x96a4 +0x666b 0x96a5 +0x666c 0x96a6 +0x666d 0x96a9 +0x666e 0x96ae +0x666f 0x96af +0x6670 0x96b3 +0x6671 0x96ba +0x6672 0x96ca +0x6673 0x96d2 +0x6674 0x5db2 +0x6675 0x96d8 +0x6676 0x96da +0x6677 0x96dd +0x6678 0x96de +0x6679 0x96df +0x667a 0x96e9 +0x667b 0x96ef +0x667c 0x96f1 +0x667d 0x96fa +0x667e 0x9702 +0x6721 0x9703 +0x6722 0x9705 +0x6723 0x9709 +0x6724 0x971a +0x6725 0x971b +0x6726 0x971d +0x6727 0x9721 +0x6728 0x9722 +0x6729 0x9723 +0x672a 0x9728 +0x672b 0x9731 +0x672c 0x9733 +0x672d 0x9741 +0x672e 0x9743 +0x672f 0x974a +0x6730 0x974e +0x6731 0x974f +0x6732 0x9755 +0x6733 0x9757 +0x6734 0x9758 +0x6735 0x975a +0x6736 0x975b +0x6737 0x9763 +0x6738 0x9767 +0x6739 0x976a +0x673a 0x976e +0x673b 0x9773 +0x673c 0x9776 +0x673d 0x9777 +0x673e 0x9778 +0x673f 0x977b +0x6740 0x977d +0x6741 0x977f +0x6742 0x9780 +0x6743 0x9789 +0x6744 0x9795 +0x6745 0x9796 +0x6746 0x9797 +0x6747 0x9799 +0x6748 0x979a +0x6749 0x979e +0x674a 0x979f +0x674b 0x97a2 +0x674c 0x97ac +0x674d 0x97ae +0x674e 0x97b1 +0x674f 0x97b2 +0x6750 0x97b5 +0x6751 0x97b6 +0x6752 0x97b8 +0x6753 0x97b9 +0x6754 0x97ba +0x6755 0x97bc +0x6756 0x97be +0x6757 0x97bf +0x6758 0x97c1 +0x6759 0x97c4 +0x675a 0x97c5 +0x675b 0x97c7 +0x675c 0x97c9 +0x675d 0x97ca +0x675e 0x97cc +0x675f 0x97cd +0x6760 0x97ce +0x6761 0x97d0 +0x6762 0x97d1 +0x6763 0x97d4 +0x6764 0x97d7 +0x6765 0x97d8 +0x6766 0x97d9 +0x6767 0x97dd +0x6768 0x97de +0x6769 0x97e0 +0x676a 0x97db +0x676b 0x97e1 +0x676c 0x97e4 +0x676d 0x97ef +0x676e 0x97f1 +0x676f 0x97f4 +0x6770 0x97f7 +0x6771 0x97f8 +0x6772 0x97fa +0x6773 0x9807 +0x6774 0x980a +0x6775 0x9819 +0x6776 0x980d +0x6777 0x980e +0x6778 0x9814 +0x6779 0x9816 +0x677a 0x981c +0x677b 0x981e +0x677c 0x9820 +0x677d 0x9823 +0x677e 0x9826 +0x6821 0x982b +0x6822 0x982e +0x6823 0x982f +0x6824 0x9830 +0x6825 0x9832 +0x6826 0x9833 +0x6827 0x9835 +0x6828 0x9825 +0x6829 0x983e +0x682a 0x9844 +0x682b 0x9847 +0x682c 0x984a +0x682d 0x9851 +0x682e 0x9852 +0x682f 0x9853 +0x6830 0x9856 +0x6831 0x9857 +0x6832 0x9859 +0x6833 0x985a +0x6834 0x9862 +0x6835 0x9863 +0x6836 0x9865 +0x6837 0x9866 +0x6838 0x986a +0x6839 0x986c +0x683a 0x98ab +0x683b 0x98ad +0x683c 0x98ae +0x683d 0x98b0 +0x683e 0x98b4 +0x683f 0x98b7 +0x6840 0x98b8 +0x6841 0x98ba +0x6842 0x98bb +0x6843 0x98bf +0x6844 0x98c2 +0x6845 0x98c5 +0x6846 0x98c8 +0x6847 0x98cc +0x6848 0x98e1 +0x6849 0x98e3 +0x684a 0x98e5 +0x684b 0x98e6 +0x684c 0x98e7 +0x684d 0x98ea +0x684e 0x98f3 +0x684f 0x98f6 +0x6850 0x9902 +0x6851 0x9907 +0x6852 0x9908 +0x6853 0x9911 +0x6854 0x9915 +0x6855 0x9916 +0x6856 0x9917 +0x6857 0x991a +0x6858 0x991b +0x6859 0x991c +0x685a 0x991f +0x685b 0x9922 +0x685c 0x9926 +0x685d 0x9927 +0x685e 0x992b +0x685f 0x9931 +0x6860 0x9932 +0x6861 0x9933 +0x6862 0x9934 +0x6863 0x9935 +0x6864 0x9939 +0x6865 0x993a +0x6866 0x993b +0x6867 0x993c +0x6868 0x9940 +0x6869 0x9941 +0x686a 0x9946 +0x686b 0x9947 +0x686c 0x9948 +0x686d 0x994d +0x686e 0x994e +0x686f 0x9954 +0x6870 0x9958 +0x6871 0x9959 +0x6872 0x995b +0x6873 0x995c +0x6874 0x995e +0x6875 0x995f +0x6876 0x9960 +0x6877 0x999b +0x6878 0x999d +0x6879 0x999f +0x687a 0x99a6 +0x687b 0x99b0 +0x687c 0x99b1 +0x687d 0x99b2 +0x687e 0x99b5 +0x6921 0x99b9 +0x6922 0x99ba +0x6923 0x99bd +0x6924 0x99bf +0x6925 0x99c3 +0x6926 0x99c9 +0x6927 0x99d3 +0x6928 0x99d4 +0x6929 0x99d9 +0x692a 0x99da +0x692b 0x99dc +0x692c 0x99de +0x692d 0x99e7 +0x692e 0x99ea +0x692f 0x99eb +0x6930 0x99ec +0x6931 0x99f0 +0x6932 0x99f4 +0x6933 0x99f5 +0x6934 0x99f9 +0x6935 0x99fd +0x6936 0x99fe +0x6937 0x9a02 +0x6938 0x9a03 +0x6939 0x9a04 +0x693a 0x9a0b +0x693b 0x9a0c +0x693c 0x9a10 +0x693d 0x9a11 +0x693e 0x9a16 +0x693f 0x9a1e +0x6940 0x9a20 +0x6941 0x9a22 +0x6942 0x9a23 +0x6943 0x9a24 +0x6944 0x9a27 +0x6945 0x9a2d +0x6946 0x9a2e +0x6947 0x9a33 +0x6948 0x9a35 +0x6949 0x9a36 +0x694a 0x9a38 +0x694b 0x9a47 +0x694c 0x9a41 +0x694d 0x9a44 +0x694e 0x9a4a +0x694f 0x9a4b +0x6950 0x9a4c +0x6951 0x9a4e +0x6952 0x9a51 +0x6953 0x9a54 +0x6954 0x9a56 +0x6955 0x9a5d +0x6956 0x9aaa +0x6957 0x9aac +0x6958 0x9aae +0x6959 0x9aaf +0x695a 0x9ab2 +0x695b 0x9ab4 +0x695c 0x9ab5 +0x695d 0x9ab6 +0x695e 0x9ab9 +0x695f 0x9abb +0x6960 0x9abe +0x6961 0x9abf +0x6962 0x9ac1 +0x6963 0x9ac3 +0x6964 0x9ac6 +0x6965 0x9ac8 +0x6966 0x9ace +0x6967 0x9ad0 +0x6968 0x9ad2 +0x6969 0x9ad5 +0x696a 0x9ad6 +0x696b 0x9ad7 +0x696c 0x9adb +0x696d 0x9adc +0x696e 0x9ae0 +0x696f 0x9ae4 +0x6970 0x9ae5 +0x6971 0x9ae7 +0x6972 0x9ae9 +0x6973 0x9aec +0x6974 0x9af2 +0x6975 0x9af3 +0x6976 0x9af5 +0x6977 0x9af9 +0x6978 0x9afa +0x6979 0x9afd +0x697a 0x9aff +0x697b 0x9b00 +0x697c 0x9b01 +0x697d 0x9b02 +0x697e 0x9b03 +0x6a21 0x9b04 +0x6a22 0x9b05 +0x6a23 0x9b08 +0x6a24 0x9b09 +0x6a25 0x9b0b +0x6a26 0x9b0c +0x6a27 0x9b0d +0x6a28 0x9b0e +0x6a29 0x9b10 +0x6a2a 0x9b12 +0x6a2b 0x9b16 +0x6a2c 0x9b19 +0x6a2d 0x9b1b +0x6a2e 0x9b1c +0x6a2f 0x9b20 +0x6a30 0x9b26 +0x6a31 0x9b2b +0x6a32 0x9b2d +0x6a33 0x9b33 +0x6a34 0x9b34 +0x6a35 0x9b35 +0x6a36 0x9b37 +0x6a37 0x9b39 +0x6a38 0x9b3a +0x6a39 0x9b3d +0x6a3a 0x9b48 +0x6a3b 0x9b4b +0x6a3c 0x9b4c +0x6a3d 0x9b55 +0x6a3e 0x9b56 +0x6a3f 0x9b57 +0x6a40 0x9b5b +0x6a41 0x9b5e +0x6a42 0x9b61 +0x6a43 0x9b63 +0x6a44 0x9b65 +0x6a45 0x9b66 +0x6a46 0x9b68 +0x6a47 0x9b6a +0x6a48 0x9b6b +0x6a49 0x9b6c +0x6a4a 0x9b6d +0x6a4b 0x9b6e +0x6a4c 0x9b73 +0x6a4d 0x9b75 +0x6a4e 0x9b77 +0x6a4f 0x9b78 +0x6a50 0x9b79 +0x6a51 0x9b7f +0x6a52 0x9b80 +0x6a53 0x9b84 +0x6a54 0x9b85 +0x6a55 0x9b86 +0x6a56 0x9b87 +0x6a57 0x9b89 +0x6a58 0x9b8a +0x6a59 0x9b8b +0x6a5a 0x9b8d +0x6a5b 0x9b8f +0x6a5c 0x9b90 +0x6a5d 0x9b94 +0x6a5e 0x9b9a +0x6a5f 0x9b9d +0x6a60 0x9b9e +0x6a61 0x9ba6 +0x6a62 0x9ba7 +0x6a63 0x9ba9 +0x6a64 0x9bac +0x6a65 0x9bb0 +0x6a66 0x9bb1 +0x6a67 0x9bb2 +0x6a68 0x9bb7 +0x6a69 0x9bb8 +0x6a6a 0x9bbb +0x6a6b 0x9bbc +0x6a6c 0x9bbe +0x6a6d 0x9bbf +0x6a6e 0x9bc1 +0x6a6f 0x9bc7 +0x6a70 0x9bc8 +0x6a71 0x9bce +0x6a72 0x9bd0 +0x6a73 0x9bd7 +0x6a74 0x9bd8 +0x6a75 0x9bdd +0x6a76 0x9bdf +0x6a77 0x9be5 +0x6a78 0x9be7 +0x6a79 0x9bea +0x6a7a 0x9beb +0x6a7b 0x9bef +0x6a7c 0x9bf3 +0x6a7d 0x9bf7 +0x6a7e 0x9bf8 +0x6b21 0x9bf9 +0x6b22 0x9bfa +0x6b23 0x9bfd +0x6b24 0x9bff +0x6b25 0x9c00 +0x6b26 0x9c02 +0x6b27 0x9c0b +0x6b28 0x9c0f +0x6b29 0x9c11 +0x6b2a 0x9c16 +0x6b2b 0x9c18 +0x6b2c 0x9c19 +0x6b2d 0x9c1a +0x6b2e 0x9c1c +0x6b2f 0x9c1e +0x6b30 0x9c22 +0x6b31 0x9c23 +0x6b32 0x9c26 +0x6b33 0x9c27 +0x6b34 0x9c28 +0x6b35 0x9c29 +0x6b36 0x9c2a +0x6b37 0x9c31 +0x6b38 0x9c35 +0x6b39 0x9c36 +0x6b3a 0x9c37 +0x6b3b 0x9c3d +0x6b3c 0x9c41 +0x6b3d 0x9c43 +0x6b3e 0x9c44 +0x6b3f 0x9c45 +0x6b40 0x9c49 +0x6b41 0x9c4a +0x6b42 0x9c4e +0x6b43 0x9c4f +0x6b44 0x9c50 +0x6b45 0x9c53 +0x6b46 0x9c54 +0x6b47 0x9c56 +0x6b48 0x9c58 +0x6b49 0x9c5b +0x6b4a 0x9c5d +0x6b4b 0x9c5e +0x6b4c 0x9c5f +0x6b4d 0x9c63 +0x6b4e 0x9c69 +0x6b4f 0x9c6a +0x6b50 0x9c5c +0x6b51 0x9c6b +0x6b52 0x9c68 +0x6b53 0x9c6e +0x6b54 0x9c70 +0x6b55 0x9c72 +0x6b56 0x9c75 +0x6b57 0x9c77 +0x6b58 0x9c7b +0x6b59 0x9ce6 +0x6b5a 0x9cf2 +0x6b5b 0x9cf7 +0x6b5c 0x9cf9 +0x6b5d 0x9d0b +0x6b5e 0x9d02 +0x6b5f 0x9d11 +0x6b60 0x9d17 +0x6b61 0x9d18 +0x6b62 0x9d1c +0x6b63 0x9d1d +0x6b64 0x9d1e +0x6b65 0x9d2f +0x6b66 0x9d30 +0x6b67 0x9d32 +0x6b68 0x9d33 +0x6b69 0x9d34 +0x6b6a 0x9d3a +0x6b6b 0x9d3c +0x6b6c 0x9d45 +0x6b6d 0x9d3d +0x6b6e 0x9d42 +0x6b6f 0x9d43 +0x6b70 0x9d47 +0x6b71 0x9d4a +0x6b72 0x9d53 +0x6b73 0x9d54 +0x6b74 0x9d5f +0x6b75 0x9d63 +0x6b76 0x9d62 +0x6b77 0x9d65 +0x6b78 0x9d69 +0x6b79 0x9d6a +0x6b7a 0x9d6b +0x6b7b 0x9d70 +0x6b7c 0x9d76 +0x6b7d 0x9d77 +0x6b7e 0x9d7b +0x6c21 0x9d7c +0x6c22 0x9d7e +0x6c23 0x9d83 +0x6c24 0x9d84 +0x6c25 0x9d86 +0x6c26 0x9d8a +0x6c27 0x9d8d +0x6c28 0x9d8e +0x6c29 0x9d92 +0x6c2a 0x9d93 +0x6c2b 0x9d95 +0x6c2c 0x9d96 +0x6c2d 0x9d97 +0x6c2e 0x9d98 +0x6c2f 0x9da1 +0x6c30 0x9daa +0x6c31 0x9dac +0x6c32 0x9dae +0x6c33 0x9db1 +0x6c34 0x9db5 +0x6c35 0x9db9 +0x6c36 0x9dbc +0x6c37 0x9dbf +0x6c38 0x9dc3 +0x6c39 0x9dc7 +0x6c3a 0x9dc9 +0x6c3b 0x9dca +0x6c3c 0x9dd4 +0x6c3d 0x9dd5 +0x6c3e 0x9dd6 +0x6c3f 0x9dd7 +0x6c40 0x9dda +0x6c41 0x9dde +0x6c42 0x9ddf +0x6c43 0x9de0 +0x6c44 0x9de5 +0x6c45 0x9de7 +0x6c46 0x9de9 +0x6c47 0x9deb +0x6c48 0x9dee +0x6c49 0x9df0 +0x6c4a 0x9df3 +0x6c4b 0x9df4 +0x6c4c 0x9dfe +0x6c4d 0x9e0a +0x6c4e 0x9e02 +0x6c4f 0x9e07 +0x6c50 0x9e0e +0x6c51 0x9e10 +0x6c52 0x9e11 +0x6c53 0x9e12 +0x6c54 0x9e15 +0x6c55 0x9e16 +0x6c56 0x9e19 +0x6c57 0x9e1c +0x6c58 0x9e1d +0x6c59 0x9e7a +0x6c5a 0x9e7b +0x6c5b 0x9e7c +0x6c5c 0x9e80 +0x6c5d 0x9e82 +0x6c5e 0x9e83 +0x6c5f 0x9e84 +0x6c60 0x9e85 +0x6c61 0x9e87 +0x6c62 0x9e8e +0x6c63 0x9e8f +0x6c64 0x9e96 +0x6c65 0x9e98 +0x6c66 0x9e9b +0x6c67 0x9e9e +0x6c68 0x9ea4 +0x6c69 0x9ea8 +0x6c6a 0x9eac +0x6c6b 0x9eae +0x6c6c 0x9eaf +0x6c6d 0x9eb0 +0x6c6e 0x9eb3 +0x6c6f 0x9eb4 +0x6c70 0x9eb5 +0x6c71 0x9ec6 +0x6c72 0x9ec8 +0x6c73 0x9ecb +0x6c74 0x9ed5 +0x6c75 0x9edf +0x6c76 0x9ee4 +0x6c77 0x9ee7 +0x6c78 0x9eec +0x6c79 0x9eed +0x6c7a 0x9eee +0x6c7b 0x9ef0 +0x6c7c 0x9ef1 +0x6c7d 0x9ef2 +0x6c7e 0x9ef5 +0x6d21 0x9ef8 +0x6d22 0x9eff +0x6d23 0x9f02 +0x6d24 0x9f03 +0x6d25 0x9f09 +0x6d26 0x9f0f +0x6d27 0x9f10 +0x6d28 0x9f11 +0x6d29 0x9f12 +0x6d2a 0x9f14 +0x6d2b 0x9f16 +0x6d2c 0x9f17 +0x6d2d 0x9f19 +0x6d2e 0x9f1a +0x6d2f 0x9f1b +0x6d30 0x9f1f +0x6d31 0x9f22 +0x6d32 0x9f26 +0x6d33 0x9f2a +0x6d34 0x9f2b +0x6d35 0x9f2f +0x6d36 0x9f31 +0x6d37 0x9f32 +0x6d38 0x9f34 +0x6d39 0x9f37 +0x6d3a 0x9f39 +0x6d3b 0x9f3a +0x6d3c 0x9f3c +0x6d3d 0x9f3d +0x6d3e 0x9f3f +0x6d3f 0x9f41 +0x6d40 0x9f43 +0x6d41 0x9f44 +0x6d42 0x9f45 +0x6d43 0x9f46 +0x6d44 0x9f47 +0x6d45 0x9f53 +0x6d46 0x9f55 +0x6d47 0x9f56 +0x6d48 0x9f57 +0x6d49 0x9f58 +0x6d4a 0x9f5a +0x6d4b 0x9f5d +0x6d4c 0x9f5e +0x6d4d 0x9f68 +0x6d4e 0x9f69 +0x6d4f 0x9f6d +0x6d50 0x9f6e +0x6d51 0x9f6f +0x6d52 0x9f70 +0x6d53 0x9f71 +0x6d54 0x9f73 +0x6d55 0x9f75 +0x6d56 0x9f7a +0x6d57 0x9f7d +0x6d58 0x9f8f +0x6d59 0x9f90 +0x6d5a 0x9f91 +0x6d5b 0x9f92 +0x6d5c 0x9f94 +0x6d5d 0x9f96 +0x6d5e 0x9f97 +0x6d5f 0x9f9e +0x6d60 0x9fa1 +0x6d61 0x9fa2 +0x6d62 0x9fa3 +0x6d63 0x9fa5 +0x7321 0x2170 +0x7322 0x2171 +0x7323 0x2172 +0x7324 0x2173 +0x7325 0x2174 +0x7326 0x2175 +0x7327 0x2176 +0x7328 0x2177 +0x7329 0x2178 +0x732a 0x2179 +0x7335 0xff07 +0x7336 0xff02 +0x733a 0x70bb +0x733b 0x4efc +0x733c 0x50f4 +0x733d 0x51ec +0x733e 0x5307 +0x733f 0x5324 +0x7340 0xfa0e +0x7341 0x548a +0x7342 0x5759 +0x7343 0xfa0f +0x7344 0xfa10 +0x7345 0x589e +0x7346 0x5bec +0x7347 0x5cf5 +0x7348 0x5d53 +0x7349 0xfa11 +0x734a 0x5fb7 +0x734b 0x6085 +0x734c 0x6120 +0x734d 0x654e +0x734f 0x6665 +0x7350 0xfa12 +0x7351 0xf929 +0x7352 0x6801 +0x7353 0xfa13 +0x7354 0xfa14 +0x7355 0x6a6b +0x7356 0x6ae2 +0x7357 0x6df8 +0x7358 0x6df2 +0x7359 0x7028 +0x735a 0xfa15 +0x735b 0xfa16 +0x735c 0x7501 +0x735d 0x7682 +0x735e 0x769e +0x735f 0xfa17 +0x7360 0x7930 +0x7361 0xfa18 +0x7362 0xfa19 +0x7363 0xfa1a +0x7364 0xfa1b +0x7365 0x7ae7 +0x7366 0xfa1c +0x7367 0xfa1d +0x7368 0x7da0 +0x7369 0x7dd6 +0x736a 0xfa1e +0x736b 0x8362 +0x736c 0xfa1f +0x736d 0x85b0 +0x736e 0xfa20 +0x736f 0xfa21 +0x7370 0x8807 +0x7371 0xfa22 +0x7372 0x8b7f +0x7373 0x8cf4 +0x7374 0x8d76 +0x7375 0xfa23 +0x7376 0xfa24 +0x7377 0xfa25 +0x7378 0x90de +0x7379 0xfa26 +0x737a 0x9115 +0x737b 0xfa27 +0x737c 0xfa28 +0x737d 0x9592 +0x737e 0xf9dc +0x7421 0xfa29 +0x7422 0x973b +0x7424 0x9751 +0x7425 0xfa2a +0x7426 0xfa2b +0x7427 0xfa2c +0x7428 0x999e +0x7429 0x9ad9 +0x742a 0x9b72 +0x742b 0xfa2d +0x742c 0x9ed1 +0x7463 0x974d +0x7521 0xe3ac +0x7522 0xe3ad +0x7523 0xe3ae +0x7524 0xe3af +0x7525 0xe3b0 +0x7526 0xe3b1 +0x7527 0xe3b2 +0x7528 0xe3b3 +0x7529 0xe3b4 +0x752a 0xe3b5 +0x752b 0xe3b6 +0x752c 0xe3b7 +0x752d 0xe3b8 +0x752e 0xe3b9 +0x752f 0xe3ba +0x7530 0xe3bb +0x7531 0xe3bc +0x7532 0xe3bd +0x7533 0xe3be +0x7534 0xe3bf +0x7535 0xe3c0 +0x7536 0xe3c1 +0x7537 0xe3c2 +0x7538 0xe3c3 +0x7539 0xe3c4 +0x753a 0xe3c5 +0x753b 0xe3c6 +0x753c 0xe3c7 +0x753d 0xe3c8 +0x753e 0xe3c9 +0x753f 0xe3ca +0x7540 0xe3cb +0x7541 0xe3cc +0x7542 0xe3cd +0x7543 0xe3ce +0x7544 0xe3cf +0x7545 0xe3d0 +0x7546 0xe3d1 +0x7547 0xe3d2 +0x7548 0xe3d3 +0x7549 0xe3d4 +0x754a 0xe3d5 +0x754b 0xe3d6 +0x754c 0xe3d7 +0x754d 0xe3d8 +0x754e 0xe3d9 +0x754f 0xe3da +0x7550 0xe3db +0x7551 0xe3dc +0x7552 0xe3dd +0x7553 0xe3de +0x7554 0xe3df +0x7555 0xe3e0 +0x7556 0xe3e1 +0x7557 0xe3e2 +0x7558 0xe3e3 +0x7559 0xe3e4 +0x755a 0xe3e5 +0x755b 0xe3e6 +0x755c 0xe3e7 +0x755d 0xe3e8 +0x755e 0xe3e9 +0x755f 0xe3ea +0x7560 0xe3eb +0x7561 0xe3ec +0x7562 0xe3ed +0x7563 0xe3ee +0x7564 0xe3ef +0x7565 0xe3f0 +0x7566 0xe3f1 +0x7567 0xe3f2 +0x7568 0xe3f3 +0x7569 0xe3f4 +0x756a 0xe3f5 +0x756b 0xe3f6 +0x756c 0xe3f7 +0x756d 0xe3f8 +0x756e 0xe3f9 +0x756f 0xe3fa +0x7570 0xe3fb +0x7571 0xe3fc +0x7572 0xe3fd +0x7573 0xe3fe +0x7574 0xe3ff +0x7575 0xe400 +0x7576 0xe401 +0x7577 0xe402 +0x7578 0xe403 +0x7579 0xe404 +0x757a 0xe405 +0x757b 0xe406 +0x757c 0xe407 +0x757d 0xe408 +0x757e 0xe409 +0x7621 0xe40a +0x7622 0xe40b +0x7623 0xe40c +0x7624 0xe40d +0x7625 0xe40e +0x7626 0xe40f +0x7627 0xe410 +0x7628 0xe411 +0x7629 0xe412 +0x762a 0xe413 +0x762b 0xe414 +0x762c 0xe415 +0x762d 0xe416 +0x762e 0xe417 +0x762f 0xe418 +0x7630 0xe419 +0x7631 0xe41a +0x7632 0xe41b +0x7633 0xe41c +0x7634 0xe41d +0x7635 0xe41e +0x7636 0xe41f +0x7637 0xe420 +0x7638 0xe421 +0x7639 0xe422 +0x763a 0xe423 +0x763b 0xe424 +0x763c 0xe425 +0x763d 0xe426 +0x763e 0xe427 +0x763f 0xe428 +0x7640 0xe429 +0x7641 0xe42a +0x7642 0xe42b +0x7643 0xe42c +0x7644 0xe42d +0x7645 0xe42e +0x7646 0xe42f +0x7647 0xe430 +0x7648 0xe431 +0x7649 0xe432 +0x764a 0xe433 +0x764b 0xe434 +0x764c 0xe435 +0x764d 0xe436 +0x764e 0xe437 +0x764f 0xe438 +0x7650 0xe439 +0x7651 0xe43a +0x7652 0xe43b +0x7653 0xe43c +0x7654 0xe43d +0x7655 0xe43e +0x7656 0xe43f +0x7657 0xe440 +0x7658 0xe441 +0x7659 0xe442 +0x765a 0xe443 +0x765b 0xe444 +0x765c 0xe445 +0x765d 0xe446 +0x765e 0xe447 +0x765f 0xe448 +0x7660 0xe449 +0x7661 0xe44a +0x7662 0xe44b +0x7663 0xe44c +0x7664 0xe44d +0x7665 0xe44e +0x7666 0xe44f +0x7667 0xe450 +0x7668 0xe451 +0x7669 0xe452 +0x766a 0xe453 +0x766b 0xe454 +0x766c 0xe455 +0x766d 0xe456 +0x766e 0xe457 +0x766f 0xe458 +0x7670 0xe459 +0x7671 0xe45a +0x7672 0xe45b +0x7673 0xe45c +0x7674 0xe45d +0x7675 0xe45e +0x7676 0xe45f +0x7677 0xe460 +0x7678 0xe461 +0x7679 0xe462 +0x767a 0xe463 +0x767b 0xe464 +0x767c 0xe465 +0x767d 0xe466 +0x767e 0xe467 +0x7721 0xe468 +0x7722 0xe469 +0x7723 0xe46a +0x7724 0xe46b +0x7725 0xe46c +0x7726 0xe46d +0x7727 0xe46e +0x7728 0xe46f +0x7729 0xe470 +0x772a 0xe471 +0x772b 0xe472 +0x772c 0xe473 +0x772d 0xe474 +0x772e 0xe475 +0x772f 0xe476 +0x7730 0xe477 +0x7731 0xe478 +0x7732 0xe479 +0x7733 0xe47a +0x7734 0xe47b +0x7735 0xe47c +0x7736 0xe47d +0x7737 0xe47e +0x7738 0xe47f +0x7739 0xe480 +0x773a 0xe481 +0x773b 0xe482 +0x773c 0xe483 +0x773d 0xe484 +0x773e 0xe485 +0x773f 0xe486 +0x7740 0xe487 +0x7741 0xe488 +0x7742 0xe489 +0x7743 0xe48a +0x7744 0xe48b +0x7745 0xe48c +0x7746 0xe48d +0x7747 0xe48e +0x7748 0xe48f +0x7749 0xe490 +0x774a 0xe491 +0x774b 0xe492 +0x774c 0xe493 +0x774d 0xe494 +0x774e 0xe495 +0x774f 0xe496 +0x7750 0xe497 +0x7751 0xe498 +0x7752 0xe499 +0x7753 0xe49a +0x7754 0xe49b +0x7755 0xe49c +0x7756 0xe49d +0x7757 0xe49e +0x7758 0xe49f +0x7759 0xe4a0 +0x775a 0xe4a1 +0x775b 0xe4a2 +0x775c 0xe4a3 +0x775d 0xe4a4 +0x775e 0xe4a5 +0x775f 0xe4a6 +0x7760 0xe4a7 +0x7761 0xe4a8 +0x7762 0xe4a9 +0x7763 0xe4aa +0x7764 0xe4ab +0x7765 0xe4ac +0x7766 0xe4ad +0x7767 0xe4ae +0x7768 0xe4af +0x7769 0xe4b0 +0x776a 0xe4b1 +0x776b 0xe4b2 +0x776c 0xe4b3 +0x776d 0xe4b4 +0x776e 0xe4b5 +0x776f 0xe4b6 +0x7770 0xe4b7 +0x7771 0xe4b8 +0x7772 0xe4b9 +0x7773 0xe4ba +0x7774 0xe4bb +0x7775 0xe4bc +0x7776 0xe4bd +0x7777 0xe4be +0x7778 0xe4bf +0x7779 0xe4c0 +0x777a 0xe4c1 +0x777b 0xe4c2 +0x777c 0xe4c3 +0x777d 0xe4c4 +0x777e 0xe4c5 +0x7821 0xe4c6 +0x7822 0xe4c7 +0x7823 0xe4c8 +0x7824 0xe4c9 +0x7825 0xe4ca +0x7826 0xe4cb +0x7827 0xe4cc +0x7828 0xe4cd +0x7829 0xe4ce +0x782a 0xe4cf +0x782b 0xe4d0 +0x782c 0xe4d1 +0x782d 0xe4d2 +0x782e 0xe4d3 +0x782f 0xe4d4 +0x7830 0xe4d5 +0x7831 0xe4d6 +0x7832 0xe4d7 +0x7833 0xe4d8 +0x7834 0xe4d9 +0x7835 0xe4da +0x7836 0xe4db +0x7837 0xe4dc +0x7838 0xe4dd +0x7839 0xe4de +0x783a 0xe4df +0x783b 0xe4e0 +0x783c 0xe4e1 +0x783d 0xe4e2 +0x783e 0xe4e3 +0x783f 0xe4e4 +0x7840 0xe4e5 +0x7841 0xe4e6 +0x7842 0xe4e7 +0x7843 0xe4e8 +0x7844 0xe4e9 +0x7845 0xe4ea +0x7846 0xe4eb +0x7847 0xe4ec +0x7848 0xe4ed +0x7849 0xe4ee +0x784a 0xe4ef +0x784b 0xe4f0 +0x784c 0xe4f1 +0x784d 0xe4f2 +0x784e 0xe4f3 +0x784f 0xe4f4 +0x7850 0xe4f5 +0x7851 0xe4f6 +0x7852 0xe4f7 +0x7853 0xe4f8 +0x7854 0xe4f9 +0x7855 0xe4fa +0x7856 0xe4fb +0x7857 0xe4fc +0x7858 0xe4fd +0x7859 0xe4fe +0x785a 0xe4ff +0x785b 0xe500 +0x785c 0xe501 +0x785d 0xe502 +0x785e 0xe503 +0x785f 0xe504 +0x7860 0xe505 +0x7861 0xe506 +0x7862 0xe507 +0x7863 0xe508 +0x7864 0xe509 +0x7865 0xe50a +0x7866 0xe50b +0x7867 0xe50c +0x7868 0xe50d +0x7869 0xe50e +0x786a 0xe50f +0x786b 0xe510 +0x786c 0xe511 +0x786d 0xe512 +0x786e 0xe513 +0x786f 0xe514 +0x7870 0xe515 +0x7871 0xe516 +0x7872 0xe517 +0x7873 0xe518 +0x7874 0xe519 +0x7875 0xe51a +0x7876 0xe51b +0x7877 0xe51c +0x7878 0xe51d +0x7879 0xe51e +0x787a 0xe51f +0x787b 0xe520 +0x787c 0xe521 +0x787d 0xe522 +0x787e 0xe523 +0x7921 0xe524 +0x7922 0xe525 +0x7923 0xe526 +0x7924 0xe527 +0x7925 0xe528 +0x7926 0xe529 +0x7927 0xe52a +0x7928 0xe52b +0x7929 0xe52c +0x792a 0xe52d +0x792b 0xe52e +0x792c 0xe52f +0x792d 0xe530 +0x792e 0xe531 +0x792f 0xe532 +0x7930 0xe533 +0x7931 0xe534 +0x7932 0xe535 +0x7933 0xe536 +0x7934 0xe537 +0x7935 0xe538 +0x7936 0xe539 +0x7937 0xe53a +0x7938 0xe53b +0x7939 0xe53c +0x793a 0xe53d +0x793b 0xe53e +0x793c 0xe53f +0x793d 0xe540 +0x793e 0xe541 +0x793f 0xe542 +0x7940 0xe543 +0x7941 0xe544 +0x7942 0xe545 +0x7943 0xe546 +0x7944 0xe547 +0x7945 0xe548 +0x7946 0xe549 +0x7947 0xe54a +0x7948 0xe54b +0x7949 0xe54c +0x794a 0xe54d +0x794b 0xe54e +0x794c 0xe54f +0x794d 0xe550 +0x794e 0xe551 +0x794f 0xe552 +0x7950 0xe553 +0x7951 0xe554 +0x7952 0xe555 +0x7953 0xe556 +0x7954 0xe557 +0x7955 0xe558 +0x7956 0xe559 +0x7957 0xe55a +0x7958 0xe55b +0x7959 0xe55c +0x795a 0xe55d +0x795b 0xe55e +0x795c 0xe55f +0x795d 0xe560 +0x795e 0xe561 +0x795f 0xe562 +0x7960 0xe563 +0x7961 0xe564 +0x7962 0xe565 +0x7963 0xe566 +0x7964 0xe567 +0x7965 0xe568 +0x7966 0xe569 +0x7967 0xe56a +0x7968 0xe56b +0x7969 0xe56c +0x796a 0xe56d +0x796b 0xe56e +0x796c 0xe56f +0x796d 0xe570 +0x796e 0xe571 +0x796f 0xe572 +0x7970 0xe573 +0x7971 0xe574 +0x7972 0xe575 +0x7973 0xe576 +0x7974 0xe577 +0x7975 0xe578 +0x7976 0xe579 +0x7977 0xe57a +0x7978 0xe57b +0x7979 0xe57c +0x797a 0xe57d +0x797b 0xe57e +0x797c 0xe57f +0x797d 0xe580 +0x797e 0xe581 +0x7a21 0xe582 +0x7a22 0xe583 +0x7a23 0xe584 +0x7a24 0xe585 +0x7a25 0xe586 +0x7a26 0xe587 +0x7a27 0xe588 +0x7a28 0xe589 +0x7a29 0xe58a +0x7a2a 0xe58b +0x7a2b 0xe58c +0x7a2c 0xe58d +0x7a2d 0xe58e +0x7a2e 0xe58f +0x7a2f 0xe590 +0x7a30 0xe591 +0x7a31 0xe592 +0x7a32 0xe593 +0x7a33 0xe594 +0x7a34 0xe595 +0x7a35 0xe596 +0x7a36 0xe597 +0x7a37 0xe598 +0x7a38 0xe599 +0x7a39 0xe59a +0x7a3a 0xe59b +0x7a3b 0xe59c +0x7a3c 0xe59d +0x7a3d 0xe59e +0x7a3e 0xe59f +0x7a3f 0xe5a0 +0x7a40 0xe5a1 +0x7a41 0xe5a2 +0x7a42 0xe5a3 +0x7a43 0xe5a4 +0x7a44 0xe5a5 +0x7a45 0xe5a6 +0x7a46 0xe5a7 +0x7a47 0xe5a8 +0x7a48 0xe5a9 +0x7a49 0xe5aa +0x7a4a 0xe5ab +0x7a4b 0xe5ac +0x7a4c 0xe5ad +0x7a4d 0xe5ae +0x7a4e 0xe5af +0x7a4f 0xe5b0 +0x7a50 0xe5b1 +0x7a51 0xe5b2 +0x7a52 0xe5b3 +0x7a53 0xe5b4 +0x7a54 0xe5b5 +0x7a55 0xe5b6 +0x7a56 0xe5b7 +0x7a57 0xe5b8 +0x7a58 0xe5b9 +0x7a59 0xe5ba +0x7a5a 0xe5bb +0x7a5b 0xe5bc +0x7a5c 0xe5bd +0x7a5d 0xe5be +0x7a5e 0xe5bf +0x7a5f 0xe5c0 +0x7a60 0xe5c1 +0x7a61 0xe5c2 +0x7a62 0xe5c3 +0x7a63 0xe5c4 +0x7a64 0xe5c5 +0x7a65 0xe5c6 +0x7a66 0xe5c7 +0x7a67 0xe5c8 +0x7a68 0xe5c9 +0x7a69 0xe5ca +0x7a6a 0xe5cb +0x7a6b 0xe5cc +0x7a6c 0xe5cd +0x7a6d 0xe5ce +0x7a6e 0xe5cf +0x7a6f 0xe5d0 +0x7a70 0xe5d1 +0x7a71 0xe5d2 +0x7a72 0xe5d3 +0x7a73 0xe5d4 +0x7a74 0xe5d5 +0x7a75 0xe5d6 +0x7a76 0xe5d7 +0x7a77 0xe5d8 +0x7a78 0xe5d9 +0x7a79 0xe5da +0x7a7a 0xe5db +0x7a7b 0xe5dc +0x7a7c 0xe5dd +0x7a7d 0xe5de +0x7a7e 0xe5df +0x7b21 0xe5e0 +0x7b22 0xe5e1 +0x7b23 0xe5e2 +0x7b24 0xe5e3 +0x7b25 0xe5e4 +0x7b26 0xe5e5 +0x7b27 0xe5e6 +0x7b28 0xe5e7 +0x7b29 0xe5e8 +0x7b2a 0xe5e9 +0x7b2b 0xe5ea +0x7b2c 0xe5eb +0x7b2d 0xe5ec +0x7b2e 0xe5ed +0x7b2f 0xe5ee +0x7b30 0xe5ef +0x7b31 0xe5f0 +0x7b32 0xe5f1 +0x7b33 0xe5f2 +0x7b34 0xe5f3 +0x7b35 0xe5f4 +0x7b36 0xe5f5 +0x7b37 0xe5f6 +0x7b38 0xe5f7 +0x7b39 0xe5f8 +0x7b3a 0xe5f9 +0x7b3b 0xe5fa +0x7b3c 0xe5fb +0x7b3d 0xe5fc +0x7b3e 0xe5fd +0x7b3f 0xe5fe +0x7b40 0xe5ff +0x7b41 0xe600 +0x7b42 0xe601 +0x7b43 0xe602 +0x7b44 0xe603 +0x7b45 0xe604 +0x7b46 0xe605 +0x7b47 0xe606 +0x7b48 0xe607 +0x7b49 0xe608 +0x7b4a 0xe609 +0x7b4b 0xe60a +0x7b4c 0xe60b +0x7b4d 0xe60c +0x7b4e 0xe60d +0x7b4f 0xe60e +0x7b50 0xe60f +0x7b51 0xe610 +0x7b52 0xe611 +0x7b53 0xe612 +0x7b54 0xe613 +0x7b55 0xe614 +0x7b56 0xe615 +0x7b57 0xe616 +0x7b58 0xe617 +0x7b59 0xe618 +0x7b5a 0xe619 +0x7b5b 0xe61a +0x7b5c 0xe61b +0x7b5d 0xe61c +0x7b5e 0xe61d +0x7b5f 0xe61e +0x7b60 0xe61f +0x7b61 0xe620 +0x7b62 0xe621 +0x7b63 0xe622 +0x7b64 0xe623 +0x7b65 0xe624 +0x7b66 0xe625 +0x7b67 0xe626 +0x7b68 0xe627 +0x7b69 0xe628 +0x7b6a 0xe629 +0x7b6b 0xe62a +0x7b6c 0xe62b +0x7b6d 0xe62c +0x7b6e 0xe62d +0x7b6f 0xe62e +0x7b70 0xe62f +0x7b71 0xe630 +0x7b72 0xe631 +0x7b73 0xe632 +0x7b74 0xe633 +0x7b75 0xe634 +0x7b76 0xe635 +0x7b77 0xe636 +0x7b78 0xe637 +0x7b79 0xe638 +0x7b7a 0xe639 +0x7b7b 0xe63a +0x7b7c 0xe63b +0x7b7d 0xe63c +0x7b7e 0xe63d +0x7c21 0xe63e +0x7c22 0xe63f +0x7c23 0xe640 +0x7c24 0xe641 +0x7c25 0xe642 +0x7c26 0xe643 +0x7c27 0xe644 +0x7c28 0xe645 +0x7c29 0xe646 +0x7c2a 0xe647 +0x7c2b 0xe648 +0x7c2c 0xe649 +0x7c2d 0xe64a +0x7c2e 0xe64b +0x7c2f 0xe64c +0x7c30 0xe64d +0x7c31 0xe64e +0x7c32 0xe64f +0x7c33 0xe650 +0x7c34 0xe651 +0x7c35 0xe652 +0x7c36 0xe653 +0x7c37 0xe654 +0x7c38 0xe655 +0x7c39 0xe656 +0x7c3a 0xe657 +0x7c3b 0xe658 +0x7c3c 0xe659 +0x7c3d 0xe65a +0x7c3e 0xe65b +0x7c3f 0xe65c +0x7c40 0xe65d +0x7c41 0xe65e +0x7c42 0xe65f +0x7c43 0xe660 +0x7c44 0xe661 +0x7c45 0xe662 +0x7c46 0xe663 +0x7c47 0xe664 +0x7c48 0xe665 +0x7c49 0xe666 +0x7c4a 0xe667 +0x7c4b 0xe668 +0x7c4c 0xe669 +0x7c4d 0xe66a +0x7c4e 0xe66b +0x7c4f 0xe66c +0x7c50 0xe66d +0x7c51 0xe66e +0x7c52 0xe66f +0x7c53 0xe670 +0x7c54 0xe671 +0x7c55 0xe672 +0x7c56 0xe673 +0x7c57 0xe674 +0x7c58 0xe675 +0x7c59 0xe676 +0x7c5a 0xe677 +0x7c5b 0xe678 +0x7c5c 0xe679 +0x7c5d 0xe67a +0x7c5e 0xe67b +0x7c5f 0xe67c +0x7c60 0xe67d +0x7c61 0xe67e +0x7c62 0xe67f +0x7c63 0xe680 +0x7c64 0xe681 +0x7c65 0xe682 +0x7c66 0xe683 +0x7c67 0xe684 +0x7c68 0xe685 +0x7c69 0xe686 +0x7c6a 0xe687 +0x7c6b 0xe688 +0x7c6c 0xe689 +0x7c6d 0xe68a +0x7c6e 0xe68b +0x7c6f 0xe68c +0x7c70 0xe68d +0x7c71 0xe68e +0x7c72 0xe68f +0x7c73 0xe690 +0x7c74 0xe691 +0x7c75 0xe692 +0x7c76 0xe693 +0x7c77 0xe694 +0x7c78 0xe695 +0x7c79 0xe696 +0x7c7a 0xe697 +0x7c7b 0xe698 +0x7c7c 0xe699 +0x7c7d 0xe69a +0x7c7e 0xe69b +0x7d21 0xe69c +0x7d22 0xe69d +0x7d23 0xe69e +0x7d24 0xe69f +0x7d25 0xe6a0 +0x7d26 0xe6a1 +0x7d27 0xe6a2 +0x7d28 0xe6a3 +0x7d29 0xe6a4 +0x7d2a 0xe6a5 +0x7d2b 0xe6a6 +0x7d2c 0xe6a7 +0x7d2d 0xe6a8 +0x7d2e 0xe6a9 +0x7d2f 0xe6aa +0x7d30 0xe6ab +0x7d31 0xe6ac +0x7d32 0xe6ad +0x7d33 0xe6ae +0x7d34 0xe6af +0x7d35 0xe6b0 +0x7d36 0xe6b1 +0x7d37 0xe6b2 +0x7d38 0xe6b3 +0x7d39 0xe6b4 +0x7d3a 0xe6b5 +0x7d3b 0xe6b6 +0x7d3c 0xe6b7 +0x7d3d 0xe6b8 +0x7d3e 0xe6b9 +0x7d3f 0xe6ba +0x7d40 0xe6bb +0x7d41 0xe6bc +0x7d42 0xe6bd +0x7d43 0xe6be +0x7d44 0xe6bf +0x7d45 0xe6c0 +0x7d46 0xe6c1 +0x7d47 0xe6c2 +0x7d48 0xe6c3 +0x7d49 0xe6c4 +0x7d4a 0xe6c5 +0x7d4b 0xe6c6 +0x7d4c 0xe6c7 +0x7d4d 0xe6c8 +0x7d4e 0xe6c9 +0x7d4f 0xe6ca +0x7d50 0xe6cb +0x7d51 0xe6cc +0x7d52 0xe6cd +0x7d53 0xe6ce +0x7d54 0xe6cf +0x7d55 0xe6d0 +0x7d56 0xe6d1 +0x7d57 0xe6d2 +0x7d58 0xe6d3 +0x7d59 0xe6d4 +0x7d5a 0xe6d5 +0x7d5b 0xe6d6 +0x7d5c 0xe6d7 +0x7d5d 0xe6d8 +0x7d5e 0xe6d9 +0x7d5f 0xe6da +0x7d60 0xe6db +0x7d61 0xe6dc +0x7d62 0xe6dd +0x7d63 0xe6de +0x7d64 0xe6df +0x7d65 0xe6e0 +0x7d66 0xe6e1 +0x7d67 0xe6e2 +0x7d68 0xe6e3 +0x7d69 0xe6e4 +0x7d6a 0xe6e5 +0x7d6b 0xe6e6 +0x7d6c 0xe6e7 +0x7d6d 0xe6e8 +0x7d6e 0xe6e9 +0x7d6f 0xe6ea +0x7d70 0xe6eb +0x7d71 0xe6ec +0x7d72 0xe6ed +0x7d73 0xe6ee +0x7d74 0xe6ef +0x7d75 0xe6f0 +0x7d76 0xe6f1 +0x7d77 0xe6f2 +0x7d78 0xe6f3 +0x7d79 0xe6f4 +0x7d7a 0xe6f5 +0x7d7b 0xe6f6 +0x7d7c 0xe6f7 +0x7d7d 0xe6f8 +0x7d7e 0xe6f9 +0x7e21 0xe6fa +0x7e22 0xe6fb +0x7e23 0xe6fc +0x7e24 0xe6fd +0x7e25 0xe6fe +0x7e26 0xe6ff +0x7e27 0xe700 +0x7e28 0xe701 +0x7e29 0xe702 +0x7e2a 0xe703 +0x7e2b 0xe704 +0x7e2c 0xe705 +0x7e2d 0xe706 +0x7e2e 0xe707 +0x7e2f 0xe708 +0x7e30 0xe709 +0x7e31 0xe70a +0x7e32 0xe70b +0x7e33 0xe70c +0x7e34 0xe70d +0x7e35 0xe70e +0x7e36 0xe70f +0x7e37 0xe710 +0x7e38 0xe711 +0x7e39 0xe712 +0x7e3a 0xe713 +0x7e3b 0xe714 +0x7e3c 0xe715 +0x7e3d 0xe716 +0x7e3e 0xe717 +0x7e3f 0xe718 +0x7e40 0xe719 +0x7e41 0xe71a +0x7e42 0xe71b +0x7e43 0xe71c +0x7e44 0xe71d +0x7e45 0xe71e +0x7e46 0xe71f +0x7e47 0xe720 +0x7e48 0xe721 +0x7e49 0xe722 +0x7e4a 0xe723 +0x7e4b 0xe724 +0x7e4c 0xe725 +0x7e4d 0xe726 +0x7e4e 0xe727 +0x7e4f 0xe728 +0x7e50 0xe729 +0x7e51 0xe72a +0x7e52 0xe72b +0x7e53 0xe72c +0x7e54 0xe72d +0x7e55 0xe72e +0x7e56 0xe72f +0x7e57 0xe730 +0x7e58 0xe731 +0x7e59 0xe732 +0x7e5a 0xe733 +0x7e5b 0xe734 +0x7e5c 0xe735 +0x7e5d 0xe736 +0x7e5e 0xe737 +0x7e5f 0xe738 +0x7e60 0xe739 +0x7e61 0xe73a +0x7e62 0xe73b +0x7e63 0xe73c +0x7e64 0xe73d +0x7e65 0xe73e +0x7e66 0xe73f +0x7e67 0xe740 +0x7e68 0xe741 +0x7e69 0xe742 +0x7e6a 0xe743 +0x7e6b 0xe744 +0x7e6c 0xe745 +0x7e6d 0xe746 +0x7e6e 0xe747 +0x7e6f 0xe748 +0x7e70 0xe749 +0x7e71 0xe74a +0x7e72 0xe74b +0x7e73 0xe74c +0x7e74 0xe74d +0x7e75 0xe74e +0x7e76 0xe74f +0x7e77 0xe750 +0x7e78 0xe751 +0x7e79 0xe752 +0x7e7a 0xe753 +0x7e7b 0xe754 +0x7e7c 0xe755 +0x7e7d 0xe756 +0x7e7e 0xe757 diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0212_Solaris.map b/jdk/make/tools/CharsetMapping/JIS_X_0212_Solaris.map new file mode 100644 index 00000000000..27d450dcf53 --- /dev/null +++ b/jdk/make/tools/CharsetMapping/JIS_X_0212_Solaris.map @@ -0,0 +1,6211 @@ +# This mapping table is based on two mappings (b2c and c2b) from +# from JIS_X_0212_Solaris_Decoder and JIS_X_0212_Solaris_Encoder. +# +# mapping b2c (from JIS_X_0212_Solaris_Decoder) has following +# entries that don't exist in c2b. +# +# 0x737d 0x2160 +# 0x737e 0x2161 +# 0x7421 0x2162 +# 0x7422 0x2163 +# 0x7423 0x2164 +# 0x7424 0x2165 +# 0x7425 0x2166 +# 0x7426 0x2167 +# 0x7427 0x2168 +# 0x7428 0x2169 +# 0x742b 0x3231 +# 0x742c 0x2116 +# 0x742d 0x2121 +# +# except the "0x742c -> 0x2116" entry, it appears these +# entries are just missed from the c2b, I added them in +# as the round-trip entries. +# +# b2c and c2b all have entry "0x2271 <-> 0x2116", so the +# "0x742c -> 0x2116" entry is moved to the .nr table. +# +# mapping (c2b) generated from JIS_X_0212_Solaris_Encoder has +# two "dup" entries +# +# 0x2271 <- 0xf600 +# 0x2271 <- 0x2116 +# +# 0xf600 is in Unicode private area. This actually is the only +# code point in private area, I would assume this is a mistake +# from the early day. The 0x2271 <- 0xf600 is removed from this +# mapping table +# +0x222f 0x02d8 +0x2230 0x02c7 +0x2231 0x00b8 +0x2232 0x02d9 +0x2233 0x02dd +0x2234 0x00af +0x2235 0x02db +0x2236 0x02da +0x2237 0xff5e +0x2238 0x0384 +0x2239 0x0385 +0x2242 0x00a1 +0x2243 0x00a6 +0x2244 0x00bf +0x226b 0x00ba +0x226c 0x00aa +0x226d 0x00a9 +0x226e 0x00ae +0x226f 0x2122 +0x2270 0x00a4 +0x2271 0x2116 +0x2661 0x0386 +0x2662 0x0388 +0x2663 0x0389 +0x2664 0x038a +0x2665 0x03aa +0x2667 0x038c +0x2669 0x038e +0x266a 0x03ab +0x266c 0x038f +0x2671 0x03ac +0x2672 0x03ad +0x2673 0x03ae +0x2674 0x03af +0x2675 0x03ca +0x2676 0x0390 +0x2677 0x03cc +0x2678 0x03c2 +0x2679 0x03cd +0x267a 0x03cb +0x267b 0x03b0 +0x267c 0x03ce +0x2742 0x0402 +0x2743 0x0403 +0x2744 0x0404 +0x2745 0x0405 +0x2746 0x0406 +0x2747 0x0407 +0x2748 0x0408 +0x2749 0x0409 +0x274a 0x040a +0x274b 0x040b +0x274c 0x040c +0x274d 0x040e +0x274e 0x040f +0x2772 0x0452 +0x2773 0x0453 +0x2774 0x0454 +0x2775 0x0455 +0x2776 0x0456 +0x2777 0x0457 +0x2778 0x0458 +0x2779 0x0459 +0x277a 0x045a +0x277b 0x045b +0x277c 0x045c +0x277d 0x045e +0x277e 0x045f +0x2921 0x00c6 +0x2922 0x0110 +0x2924 0x0126 +0x2926 0x0132 +0x2928 0x0141 +0x2929 0x013f +0x292b 0x014a +0x292c 0x00d8 +0x292d 0x0152 +0x292f 0x0166 +0x2930 0x00de +0x2941 0x00e6 +0x2942 0x0111 +0x2943 0x00f0 +0x2944 0x0127 +0x2945 0x0131 +0x2946 0x0133 +0x2947 0x0138 +0x2948 0x0142 +0x2949 0x0140 +0x294a 0x0149 +0x294b 0x014b +0x294c 0x00f8 +0x294d 0x0153 +0x294e 0x00df +0x294f 0x0167 +0x2950 0x00fe +0x2a21 0x00c1 +0x2a22 0x00c0 +0x2a23 0x00c4 +0x2a24 0x00c2 +0x2a25 0x0102 +0x2a26 0x01cd +0x2a27 0x0100 +0x2a28 0x0104 +0x2a29 0x00c5 +0x2a2a 0x00c3 +0x2a2b 0x0106 +0x2a2c 0x0108 +0x2a2d 0x010c +0x2a2e 0x00c7 +0x2a2f 0x010a +0x2a30 0x010e +0x2a31 0x00c9 +0x2a32 0x00c8 +0x2a33 0x00cb +0x2a34 0x00ca +0x2a35 0x011a +0x2a36 0x0116 +0x2a37 0x0112 +0x2a38 0x0118 +0x2a3a 0x011c +0x2a3b 0x011e +0x2a3c 0x0122 +0x2a3d 0x0120 +0x2a3e 0x0124 +0x2a3f 0x00cd +0x2a40 0x00cc +0x2a41 0x00cf +0x2a42 0x00ce +0x2a43 0x01cf +0x2a44 0x0130 +0x2a45 0x012a +0x2a46 0x012e +0x2a47 0x0128 +0x2a48 0x0134 +0x2a49 0x0136 +0x2a4a 0x0139 +0x2a4b 0x013d +0x2a4c 0x013b +0x2a4d 0x0143 +0x2a4e 0x0147 +0x2a4f 0x0145 +0x2a50 0x00d1 +0x2a51 0x00d3 +0x2a52 0x00d2 +0x2a53 0x00d6 +0x2a54 0x00d4 +0x2a55 0x01d1 +0x2a56 0x0150 +0x2a57 0x014c +0x2a58 0x00d5 +0x2a59 0x0154 +0x2a5a 0x0158 +0x2a5b 0x0156 +0x2a5c 0x015a +0x2a5d 0x015c +0x2a5e 0x0160 +0x2a5f 0x015e +0x2a60 0x0164 +0x2a61 0x0162 +0x2a62 0x00da +0x2a63 0x00d9 +0x2a64 0x00dc +0x2a65 0x00db +0x2a66 0x016c +0x2a67 0x01d3 +0x2a68 0x0170 +0x2a69 0x016a +0x2a6a 0x0172 +0x2a6b 0x016e +0x2a6c 0x0168 +0x2a6d 0x01d7 +0x2a6e 0x01db +0x2a6f 0x01d9 +0x2a70 0x01d5 +0x2a71 0x0174 +0x2a72 0x00dd +0x2a73 0x0178 +0x2a74 0x0176 +0x2a75 0x0179 +0x2a76 0x017d +0x2a77 0x017b +0x2b21 0x00e1 +0x2b22 0x00e0 +0x2b23 0x00e4 +0x2b24 0x00e2 +0x2b25 0x0103 +0x2b26 0x01ce +0x2b27 0x0101 +0x2b28 0x0105 +0x2b29 0x00e5 +0x2b2a 0x00e3 +0x2b2b 0x0107 +0x2b2c 0x0109 +0x2b2d 0x010d +0x2b2e 0x00e7 +0x2b2f 0x010b +0x2b30 0x010f +0x2b31 0x00e9 +0x2b32 0x00e8 +0x2b33 0x00eb +0x2b34 0x00ea +0x2b35 0x011b +0x2b36 0x0117 +0x2b37 0x0113 +0x2b38 0x0119 +0x2b39 0x01f5 +0x2b3a 0x011d +0x2b3b 0x011f +0x2b3d 0x0121 +0x2b3e 0x0125 +0x2b3f 0x00ed +0x2b40 0x00ec +0x2b41 0x00ef +0x2b42 0x00ee +0x2b43 0x01d0 +0x2b45 0x012b +0x2b46 0x012f +0x2b47 0x0129 +0x2b48 0x0135 +0x2b49 0x0137 +0x2b4a 0x013a +0x2b4b 0x013e +0x2b4c 0x013c +0x2b4d 0x0144 +0x2b4e 0x0148 +0x2b4f 0x0146 +0x2b50 0x00f1 +0x2b51 0x00f3 +0x2b52 0x00f2 +0x2b53 0x00f6 +0x2b54 0x00f4 +0x2b55 0x01d2 +0x2b56 0x0151 +0x2b57 0x014d +0x2b58 0x00f5 +0x2b59 0x0155 +0x2b5a 0x0159 +0x2b5b 0x0157 +0x2b5c 0x015b +0x2b5d 0x015d +0x2b5e 0x0161 +0x2b5f 0x015f +0x2b60 0x0165 +0x2b61 0x0163 +0x2b62 0x00fa +0x2b63 0x00f9 +0x2b64 0x00fc +0x2b65 0x00fb +0x2b66 0x016d +0x2b67 0x01d4 +0x2b68 0x0171 +0x2b69 0x016b +0x2b6a 0x0173 +0x2b6b 0x016f +0x2b6c 0x0169 +0x2b6d 0x01d8 +0x2b6e 0x01dc +0x2b6f 0x01da +0x2b70 0x01d6 +0x2b71 0x0175 +0x2b72 0x00fd +0x2b73 0x00ff +0x2b74 0x0177 +0x2b75 0x017a +0x2b76 0x017e +0x2b77 0x017c +0x3021 0x4e02 +0x3022 0x4e04 +0x3023 0x4e05 +0x3024 0x4e0c +0x3025 0x4e12 +0x3026 0x4e1f +0x3027 0x4e23 +0x3028 0x4e24 +0x3029 0x4e28 +0x302a 0x4e2b +0x302b 0x4e2e +0x302c 0x4e2f +0x302d 0x4e30 +0x302e 0x4e35 +0x302f 0x4e40 +0x3030 0x4e41 +0x3031 0x4e44 +0x3032 0x4e47 +0x3033 0x4e51 +0x3034 0x4e5a +0x3035 0x4e5c +0x3036 0x4e63 +0x3037 0x4e68 +0x3038 0x4e69 +0x3039 0x4e74 +0x303a 0x4e75 +0x303b 0x4e79 +0x303c 0x4e7f +0x303d 0x4e8d +0x303e 0x4e96 +0x303f 0x4e97 +0x3040 0x4e9d +0x3041 0x4eaf +0x3042 0x4eb9 +0x3043 0x4ec3 +0x3044 0x4ed0 +0x3045 0x4eda +0x3046 0x4edb +0x3047 0x4ee0 +0x3048 0x4ee1 +0x3049 0x4ee2 +0x304a 0x4ee8 +0x304b 0x4eef +0x304c 0x4ef1 +0x304d 0x4ef3 +0x304e 0x4ef5 +0x304f 0x4efd +0x3050 0x4efe +0x3051 0x4eff +0x3052 0x4f00 +0x3053 0x4f02 +0x3054 0x4f03 +0x3055 0x4f08 +0x3056 0x4f0b +0x3057 0x4f0c +0x3058 0x4f12 +0x3059 0x4f15 +0x305a 0x4f16 +0x305b 0x4f17 +0x305c 0x4f19 +0x305d 0x4f2e +0x305e 0x4f31 +0x305f 0x4f60 +0x3060 0x4f33 +0x3061 0x4f35 +0x3062 0x4f37 +0x3063 0x4f39 +0x3064 0x4f3b +0x3065 0x4f3e +0x3066 0x4f40 +0x3067 0x4f42 +0x3068 0x4f48 +0x3069 0x4f49 +0x306a 0x4f4b +0x306b 0x4f4c +0x306c 0x4f52 +0x306d 0x4f54 +0x306e 0x4f56 +0x306f 0x4f58 +0x3070 0x4f5f +0x3071 0x4f63 +0x3072 0x4f6a +0x3073 0x4f6c +0x3074 0x4f6e +0x3075 0x4f71 +0x3076 0x4f77 +0x3077 0x4f78 +0x3078 0x4f79 +0x3079 0x4f7a +0x307a 0x4f7d +0x307b 0x4f7e +0x307c 0x4f81 +0x307d 0x4f82 +0x307e 0x4f84 +0x3121 0x4f85 +0x3122 0x4f89 +0x3123 0x4f8a +0x3124 0x4f8c +0x3125 0x4f8e +0x3126 0x4f90 +0x3127 0x4f92 +0x3128 0x4f93 +0x3129 0x4f94 +0x312a 0x4f97 +0x312b 0x4f99 +0x312c 0x4f9a +0x312d 0x4f9e +0x312e 0x4f9f +0x312f 0x4fb2 +0x3130 0x4fb7 +0x3131 0x4fb9 +0x3132 0x4fbb +0x3133 0x4fbc +0x3134 0x4fbd +0x3135 0x4fbe +0x3136 0x4fc0 +0x3137 0x4fc1 +0x3138 0x4fc5 +0x3139 0x4fc6 +0x313a 0x4fc8 +0x313b 0x4fc9 +0x313c 0x4fcb +0x313d 0x4fcc +0x313e 0x4fcd +0x313f 0x4fcf +0x3140 0x4fd2 +0x3141 0x4fdc +0x3142 0x4fe0 +0x3143 0x4fe2 +0x3144 0x4ff0 +0x3145 0x4ff2 +0x3146 0x4ffc +0x3147 0x4ffd +0x3148 0x4fff +0x3149 0x5000 +0x314a 0x5001 +0x314b 0x5004 +0x314c 0x5007 +0x314d 0x500a +0x314e 0x500c +0x314f 0x500e +0x3150 0x5010 +0x3151 0x5013 +0x3152 0x5017 +0x3153 0x5018 +0x3154 0x501b +0x3155 0x501c +0x3156 0x501d +0x3157 0x501e +0x3158 0x5022 +0x3159 0x5027 +0x315a 0x502e +0x315b 0x5030 +0x315c 0x5032 +0x315d 0x5033 +0x315e 0x5035 +0x315f 0x5040 +0x3160 0x5041 +0x3161 0x5042 +0x3162 0x5045 +0x3163 0x5046 +0x3164 0x504a +0x3165 0x504c +0x3166 0x504e +0x3167 0x5051 +0x3168 0x5052 +0x3169 0x5053 +0x316a 0x5057 +0x316b 0x5059 +0x316c 0x505f +0x316d 0x5060 +0x316e 0x5062 +0x316f 0x5063 +0x3170 0x5066 +0x3171 0x5067 +0x3172 0x506a +0x3173 0x506d +0x3174 0x5070 +0x3175 0x5071 +0x3176 0x503b +0x3177 0x5081 +0x3178 0x5083 +0x3179 0x5084 +0x317a 0x5086 +0x317b 0x508a +0x317c 0x508e +0x317d 0x508f +0x317e 0x5090 +0x3221 0x5092 +0x3222 0x5093 +0x3223 0x5094 +0x3224 0x5096 +0x3225 0x509b +0x3226 0x509c +0x3227 0x509e +0x3228 0x509f +0x3229 0x50a0 +0x322a 0x50a1 +0x322b 0x50a2 +0x322c 0x50aa +0x322d 0x50af +0x322e 0x50b0 +0x322f 0x50b9 +0x3230 0x50ba +0x3231 0x50bd +0x3232 0x50c0 +0x3233 0x50c3 +0x3234 0x50c4 +0x3235 0x50c7 +0x3236 0x50cc +0x3237 0x50ce +0x3238 0x50d0 +0x3239 0x50d3 +0x323a 0x50d4 +0x323b 0x50d8 +0x323c 0x50dc +0x323d 0x50dd +0x323e 0x50df +0x323f 0x50e2 +0x3240 0x50e4 +0x3241 0x50e6 +0x3242 0x50e8 +0x3243 0x50e9 +0x3244 0x50ef +0x3245 0x50f1 +0x3246 0x50f6 +0x3247 0x50fa +0x3248 0x50fe +0x3249 0x5103 +0x324a 0x5106 +0x324b 0x5107 +0x324c 0x5108 +0x324d 0x510b +0x324e 0x510c +0x324f 0x510d +0x3250 0x510e +0x3251 0x50f2 +0x3252 0x5110 +0x3253 0x5117 +0x3254 0x5119 +0x3255 0x511b +0x3256 0x511c +0x3257 0x511d +0x3258 0x511e +0x3259 0x5123 +0x325a 0x5127 +0x325b 0x5128 +0x325c 0x512c +0x325d 0x512d +0x325e 0x512f +0x325f 0x5131 +0x3260 0x5133 +0x3261 0x5134 +0x3262 0x5135 +0x3263 0x5138 +0x3264 0x5139 +0x3265 0x5142 +0x3266 0x514a +0x3267 0x514f +0x3268 0x5153 +0x3269 0x5155 +0x326a 0x5157 +0x326b 0x5158 +0x326c 0x515f +0x326d 0x5164 +0x326e 0x5166 +0x326f 0x517e +0x3270 0x5183 +0x3271 0x5184 +0x3272 0x518b +0x3273 0x518e +0x3274 0x5198 +0x3275 0x519d +0x3276 0x51a1 +0x3277 0x51a3 +0x3278 0x51ad +0x3279 0x51b8 +0x327a 0x51ba +0x327b 0x51bc +0x327c 0x51be +0x327d 0x51bf +0x327e 0x51c2 +0x3321 0x51c8 +0x3322 0x51cf +0x3323 0x51d1 +0x3324 0x51d2 +0x3325 0x51d3 +0x3326 0x51d5 +0x3327 0x51d8 +0x3328 0x51de +0x3329 0x51e2 +0x332a 0x51e5 +0x332b 0x51ee +0x332c 0x51f2 +0x332d 0x51f3 +0x332e 0x51f4 +0x332f 0x51f7 +0x3330 0x5201 +0x3331 0x5202 +0x3332 0x5205 +0x3333 0x5212 +0x3334 0x5213 +0x3335 0x5215 +0x3336 0x5216 +0x3337 0x5218 +0x3338 0x5222 +0x3339 0x5228 +0x333a 0x5231 +0x333b 0x5232 +0x333c 0x5235 +0x333d 0x523c +0x333e 0x5245 +0x333f 0x5249 +0x3340 0x5255 +0x3341 0x5257 +0x3342 0x5258 +0x3343 0x525a +0x3344 0x525c +0x3345 0x525f +0x3346 0x5260 +0x3347 0x5261 +0x3348 0x5266 +0x3349 0x526e +0x334a 0x5277 +0x334b 0x5278 +0x334c 0x5279 +0x334d 0x5280 +0x334e 0x5282 +0x334f 0x5285 +0x3350 0x528a +0x3351 0x528c +0x3352 0x5293 +0x3353 0x5295 +0x3354 0x5296 +0x3355 0x5297 +0x3356 0x5298 +0x3357 0x529a +0x3358 0x529c +0x3359 0x52a4 +0x335a 0x52a5 +0x335b 0x52a6 +0x335c 0x52a7 +0x335d 0x52af +0x335e 0x52b0 +0x335f 0x52b6 +0x3360 0x52b7 +0x3361 0x52b8 +0x3362 0x52ba +0x3363 0x52bb +0x3364 0x52bd +0x3365 0x52c0 +0x3366 0x52c4 +0x3367 0x52c6 +0x3368 0x52c8 +0x3369 0x52cc +0x336a 0x52cf +0x336b 0x52d1 +0x336c 0x52d4 +0x336d 0x52d6 +0x336e 0x52db +0x336f 0x52dc +0x3370 0x52e1 +0x3371 0x52e5 +0x3372 0x52e8 +0x3373 0x52e9 +0x3374 0x52ea +0x3375 0x52ec +0x3376 0x52f0 +0x3377 0x52f1 +0x3378 0x52f4 +0x3379 0x52f6 +0x337a 0x52f7 +0x337b 0x5300 +0x337c 0x5303 +0x337d 0x530a +0x337e 0x530b +0x3421 0x530c +0x3422 0x5311 +0x3423 0x5313 +0x3424 0x5318 +0x3425 0x531b +0x3426 0x531c +0x3427 0x531e +0x3428 0x531f +0x3429 0x5325 +0x342a 0x5327 +0x342b 0x5328 +0x342c 0x5329 +0x342d 0x532b +0x342e 0x532c +0x342f 0x532d +0x3430 0x5330 +0x3431 0x5332 +0x3432 0x5335 +0x3433 0x533c +0x3434 0x533d +0x3435 0x533e +0x3436 0x5342 +0x3437 0x534c +0x3438 0x534b +0x3439 0x5359 +0x343a 0x535b +0x343b 0x5361 +0x343c 0x5363 +0x343d 0x5365 +0x343e 0x536c +0x343f 0x536d +0x3440 0x5372 +0x3441 0x5379 +0x3442 0x537e +0x3443 0x5383 +0x3444 0x5387 +0x3445 0x5388 +0x3446 0x538e +0x3447 0x5393 +0x3448 0x5394 +0x3449 0x5399 +0x344a 0x539d +0x344b 0x53a1 +0x344c 0x53a4 +0x344d 0x53aa +0x344e 0x53ab +0x344f 0x53af +0x3450 0x53b2 +0x3451 0x53b4 +0x3452 0x53b5 +0x3453 0x53b7 +0x3454 0x53b8 +0x3455 0x53ba +0x3456 0x53bd +0x3457 0x53c0 +0x3458 0x53c5 +0x3459 0x53cf +0x345a 0x53d2 +0x345b 0x53d3 +0x345c 0x53d5 +0x345d 0x53da +0x345e 0x53dd +0x345f 0x53de +0x3460 0x53e0 +0x3461 0x53e6 +0x3462 0x53e7 +0x3463 0x53f5 +0x3464 0x5402 +0x3465 0x5413 +0x3466 0x541a +0x3467 0x5421 +0x3468 0x5427 +0x3469 0x5428 +0x346a 0x542a +0x346b 0x542f +0x346c 0x5431 +0x346d 0x5434 +0x346e 0x5435 +0x346f 0x5443 +0x3470 0x5444 +0x3471 0x5447 +0x3472 0x544d +0x3473 0x544f +0x3474 0x545e +0x3475 0x5462 +0x3476 0x5464 +0x3477 0x5466 +0x3478 0x5467 +0x3479 0x5469 +0x347a 0x546b +0x347b 0x546d +0x347c 0x546e +0x347d 0x5474 +0x347e 0x547f +0x3521 0x5481 +0x3522 0x5483 +0x3523 0x5485 +0x3524 0x5488 +0x3525 0x5489 +0x3526 0x548d +0x3527 0x5491 +0x3528 0x5495 +0x3529 0x5496 +0x352a 0x549c +0x352b 0x549f +0x352c 0x54a1 +0x352d 0x54a6 +0x352e 0x54a7 +0x352f 0x54a9 +0x3530 0x54aa +0x3531 0x54ad +0x3532 0x54ae +0x3533 0x54b1 +0x3534 0x54b7 +0x3535 0x54b9 +0x3536 0x54ba +0x3537 0x54bb +0x3538 0x54bf +0x3539 0x54c6 +0x353a 0x54ca +0x353b 0x54cd +0x353c 0x54ce +0x353d 0x54e0 +0x353e 0x54ea +0x353f 0x54ec +0x3540 0x54ef +0x3541 0x54f6 +0x3542 0x54fc +0x3543 0x54fe +0x3544 0x54ff +0x3545 0x5500 +0x3546 0x5501 +0x3547 0x5505 +0x3548 0x5508 +0x3549 0x5509 +0x354a 0x550c +0x354b 0x550d +0x354c 0x550e +0x354d 0x5515 +0x354e 0x552a +0x354f 0x552b +0x3550 0x5532 +0x3551 0x5535 +0x3552 0x5536 +0x3553 0x553b +0x3554 0x553c +0x3555 0x553d +0x3556 0x5541 +0x3557 0x5547 +0x3558 0x5549 +0x3559 0x554a +0x355a 0x554d +0x355b 0x5550 +0x355c 0x5551 +0x355d 0x5558 +0x355e 0x555a +0x355f 0x555b +0x3560 0x555e +0x3561 0x5560 +0x3562 0x5561 +0x3563 0x5564 +0x3564 0x5566 +0x3565 0x557f +0x3566 0x5581 +0x3567 0x5582 +0x3568 0x5586 +0x3569 0x5588 +0x356a 0x558e +0x356b 0x558f +0x356c 0x5591 +0x356d 0x5592 +0x356e 0x5593 +0x356f 0x5594 +0x3570 0x5597 +0x3571 0x55a3 +0x3572 0x55a4 +0x3573 0x55ad +0x3574 0x55b2 +0x3575 0x55bf +0x3576 0x55c1 +0x3577 0x55c3 +0x3578 0x55c6 +0x3579 0x55c9 +0x357a 0x55cb +0x357b 0x55cc +0x357c 0x55ce +0x357d 0x55d1 +0x357e 0x55d2 +0x3621 0x55d3 +0x3622 0x55d7 +0x3623 0x55d8 +0x3624 0x55db +0x3625 0x55de +0x3626 0x55e2 +0x3627 0x55e9 +0x3628 0x55f6 +0x3629 0x55ff +0x362a 0x5605 +0x362b 0x5608 +0x362c 0x560a +0x362d 0x560d +0x362e 0x560e +0x362f 0x560f +0x3630 0x5610 +0x3631 0x5611 +0x3632 0x5612 +0x3633 0x5619 +0x3634 0x562c +0x3635 0x5630 +0x3636 0x5633 +0x3637 0x5635 +0x3638 0x5637 +0x3639 0x5639 +0x363a 0x563b +0x363b 0x563c +0x363c 0x563d +0x363d 0x563f +0x363e 0x5640 +0x363f 0x5641 +0x3640 0x5643 +0x3641 0x5644 +0x3642 0x5646 +0x3643 0x5649 +0x3644 0x564b +0x3645 0x564d +0x3646 0x564f +0x3647 0x5654 +0x3648 0x565e +0x3649 0x5660 +0x364a 0x5661 +0x364b 0x5662 +0x364c 0x5663 +0x364d 0x5666 +0x364e 0x5669 +0x364f 0x566d +0x3650 0x566f +0x3651 0x5671 +0x3652 0x5672 +0x3653 0x5675 +0x3654 0x5684 +0x3655 0x5685 +0x3656 0x5688 +0x3657 0x568b +0x3658 0x568c +0x3659 0x5695 +0x365a 0x5699 +0x365b 0x569a +0x365c 0x569d +0x365d 0x569e +0x365e 0x569f +0x365f 0x56a6 +0x3660 0x56a7 +0x3661 0x56a8 +0x3662 0x56a9 +0x3663 0x56ab +0x3664 0x56ac +0x3665 0x56ad +0x3666 0x56b1 +0x3667 0x56b3 +0x3668 0x56b7 +0x3669 0x56be +0x366a 0x56c5 +0x366b 0x56c9 +0x366c 0x56ca +0x366d 0x56cb +0x366e 0x56cf +0x366f 0x56d0 +0x3670 0x56cc +0x3671 0x56cd +0x3672 0x56d9 +0x3673 0x56dc +0x3674 0x56dd +0x3675 0x56df +0x3676 0x56e1 +0x3677 0x56e4 +0x3678 0x56e5 +0x3679 0x56e6 +0x367a 0x56e7 +0x367b 0x56e8 +0x367c 0x56f1 +0x367d 0x56eb +0x367e 0x56ed +0x3721 0x56f6 +0x3722 0x56f7 +0x3723 0x5701 +0x3724 0x5702 +0x3725 0x5707 +0x3726 0x570a +0x3727 0x570c +0x3728 0x5711 +0x3729 0x5715 +0x372a 0x571a +0x372b 0x571b +0x372c 0x571d +0x372d 0x5720 +0x372e 0x5722 +0x372f 0x5723 +0x3730 0x5724 +0x3731 0x5725 +0x3732 0x5729 +0x3733 0x572a +0x3734 0x572c +0x3735 0x572e +0x3736 0x572f +0x3737 0x5733 +0x3738 0x5734 +0x3739 0x573d +0x373a 0x573e +0x373b 0x573f +0x373c 0x5745 +0x373d 0x5746 +0x373e 0x574c +0x373f 0x574d +0x3740 0x5752 +0x3741 0x5762 +0x3742 0x5765 +0x3743 0x5767 +0x3744 0x5768 +0x3745 0x576b +0x3746 0x576d +0x3747 0x576e +0x3748 0x576f +0x3749 0x5770 +0x374a 0x5771 +0x374b 0x5773 +0x374c 0x5774 +0x374d 0x5775 +0x374e 0x5777 +0x374f 0x5779 +0x3750 0x577a +0x3751 0x577b +0x3752 0x577c +0x3753 0x577e +0x3754 0x5781 +0x3755 0x5783 +0x3756 0x578c +0x3757 0x5794 +0x3758 0x5797 +0x3759 0x5799 +0x375a 0x579a +0x375b 0x579c +0x375c 0x579d +0x375d 0x579e +0x375e 0x579f +0x375f 0x57a1 +0x3760 0x5795 +0x3761 0x57a7 +0x3762 0x57a8 +0x3763 0x57a9 +0x3764 0x57ac +0x3765 0x57b8 +0x3766 0x57bd +0x3767 0x57c7 +0x3768 0x57c8 +0x3769 0x57cc +0x376a 0x57cf +0x376b 0x57d5 +0x376c 0x57dd +0x376d 0x57de +0x376e 0x57e4 +0x376f 0x57e6 +0x3770 0x57e7 +0x3771 0x57e9 +0x3772 0x57ed +0x3773 0x57f0 +0x3774 0x57f5 +0x3775 0x57f6 +0x3776 0x57f8 +0x3777 0x57fd +0x3778 0x57fe +0x3779 0x57ff +0x377a 0x5803 +0x377b 0x5804 +0x377c 0x5808 +0x377d 0x5809 +0x377e 0x57e1 +0x3821 0x580c +0x3822 0x580d +0x3823 0x581b +0x3824 0x581e +0x3825 0x581f +0x3826 0x5820 +0x3827 0x5826 +0x3828 0x5827 +0x3829 0x582d +0x382a 0x5832 +0x382b 0x5839 +0x382c 0x583f +0x382d 0x5849 +0x382e 0x584c +0x382f 0x584d +0x3830 0x584f +0x3831 0x5850 +0x3832 0x5855 +0x3833 0x585f +0x3834 0x5861 +0x3835 0x5864 +0x3836 0x5867 +0x3837 0x5868 +0x3838 0x5878 +0x3839 0x587c +0x383a 0x587f +0x383b 0x5880 +0x383c 0x5881 +0x383d 0x5887 +0x383e 0x5888 +0x383f 0x5889 +0x3840 0x588a +0x3841 0x588c +0x3842 0x588d +0x3843 0x588f +0x3844 0x5890 +0x3845 0x5894 +0x3846 0x5896 +0x3847 0x589d +0x3848 0x58a0 +0x3849 0x58a1 +0x384a 0x58a2 +0x384b 0x58a6 +0x384c 0x58a9 +0x384d 0x58b1 +0x384e 0x58b2 +0x384f 0x58c4 +0x3850 0x58bc +0x3851 0x58c2 +0x3852 0x58c8 +0x3853 0x58cd +0x3854 0x58ce +0x3855 0x58d0 +0x3856 0x58d2 +0x3857 0x58d4 +0x3858 0x58d6 +0x3859 0x58da +0x385a 0x58dd +0x385b 0x58e1 +0x385c 0x58e2 +0x385d 0x58e9 +0x385e 0x58f3 +0x385f 0x5905 +0x3860 0x5906 +0x3861 0x590b +0x3862 0x590c +0x3863 0x5912 +0x3864 0x5913 +0x3865 0x5914 +0x3866 0x8641 +0x3867 0x591d +0x3868 0x5921 +0x3869 0x5923 +0x386a 0x5924 +0x386b 0x5928 +0x386c 0x592f +0x386d 0x5930 +0x386e 0x5933 +0x386f 0x5935 +0x3870 0x5936 +0x3871 0x593f +0x3872 0x5943 +0x3873 0x5946 +0x3874 0x5952 +0x3875 0x5953 +0x3876 0x5959 +0x3877 0x595b +0x3878 0x595d +0x3879 0x595e +0x387a 0x595f +0x387b 0x5961 +0x387c 0x5963 +0x387d 0x596b +0x387e 0x596d +0x3921 0x596f +0x3922 0x5972 +0x3923 0x5975 +0x3924 0x5976 +0x3925 0x5979 +0x3926 0x597b +0x3927 0x597c +0x3928 0x598b +0x3929 0x598c +0x392a 0x598e +0x392b 0x5992 +0x392c 0x5995 +0x392d 0x5997 +0x392e 0x599f +0x392f 0x59a4 +0x3930 0x59a7 +0x3931 0x59ad +0x3932 0x59ae +0x3933 0x59af +0x3934 0x59b0 +0x3935 0x59b3 +0x3936 0x59b7 +0x3937 0x59ba +0x3938 0x59bc +0x3939 0x59c1 +0x393a 0x59c3 +0x393b 0x59c4 +0x393c 0x59c8 +0x393d 0x59ca +0x393e 0x59cd +0x393f 0x59d2 +0x3940 0x59dd +0x3941 0x59de +0x3942 0x59df +0x3943 0x59e3 +0x3944 0x59e4 +0x3945 0x59e7 +0x3946 0x59ee +0x3947 0x59ef +0x3948 0x59f1 +0x3949 0x59f2 +0x394a 0x59f4 +0x394b 0x59f7 +0x394c 0x5a00 +0x394d 0x5a04 +0x394e 0x5a0c +0x394f 0x5a0d +0x3950 0x5a0e +0x3951 0x5a12 +0x3952 0x5a13 +0x3953 0x5a1e +0x3954 0x5a23 +0x3955 0x5a24 +0x3956 0x5a27 +0x3957 0x5a28 +0x3958 0x5a2a +0x3959 0x5a2d +0x395a 0x5a30 +0x395b 0x5a44 +0x395c 0x5a45 +0x395d 0x5a47 +0x395e 0x5a48 +0x395f 0x5a4c +0x3960 0x5a50 +0x3961 0x5a55 +0x3962 0x5a5e +0x3963 0x5a63 +0x3964 0x5a65 +0x3965 0x5a67 +0x3966 0x5a6d +0x3967 0x5a77 +0x3968 0x5a7a +0x3969 0x5a7b +0x396a 0x5a7e +0x396b 0x5a8b +0x396c 0x5a90 +0x396d 0x5a93 +0x396e 0x5a96 +0x396f 0x5a99 +0x3970 0x5a9c +0x3971 0x5a9e +0x3972 0x5a9f +0x3973 0x5aa0 +0x3974 0x5aa2 +0x3975 0x5aa7 +0x3976 0x5aac +0x3977 0x5ab1 +0x3978 0x5ab2 +0x3979 0x5ab3 +0x397a 0x5ab5 +0x397b 0x5ab8 +0x397c 0x5aba +0x397d 0x5abb +0x397e 0x5abf +0x3a21 0x5ac4 +0x3a22 0x5ac6 +0x3a23 0x5ac8 +0x3a24 0x5acf +0x3a25 0x5ada +0x3a26 0x5adc +0x3a27 0x5ae0 +0x3a28 0x5ae5 +0x3a29 0x5aea +0x3a2a 0x5aee +0x3a2b 0x5af5 +0x3a2c 0x5af6 +0x3a2d 0x5afd +0x3a2e 0x5b00 +0x3a2f 0x5b01 +0x3a30 0x5b08 +0x3a31 0x5b17 +0x3a32 0x5b34 +0x3a33 0x5b19 +0x3a34 0x5b1b +0x3a35 0x5b1d +0x3a36 0x5b21 +0x3a37 0x5b25 +0x3a38 0x5b2d +0x3a39 0x5b38 +0x3a3a 0x5b41 +0x3a3b 0x5b4b +0x3a3c 0x5b4c +0x3a3d 0x5b52 +0x3a3e 0x5b56 +0x3a3f 0x5b5e +0x3a40 0x5b68 +0x3a41 0x5b6e +0x3a42 0x5b6f +0x3a43 0x5b7c +0x3a44 0x5b7d +0x3a45 0x5b7e +0x3a46 0x5b7f +0x3a47 0x5b81 +0x3a48 0x5b84 +0x3a49 0x5b86 +0x3a4a 0x5b8a +0x3a4b 0x5b8e +0x3a4c 0x5b90 +0x3a4d 0x5b91 +0x3a4e 0x5b93 +0x3a4f 0x5b94 +0x3a50 0x5b96 +0x3a51 0x5ba8 +0x3a52 0x5ba9 +0x3a53 0x5bac +0x3a54 0x5bad +0x3a55 0x5baf +0x3a56 0x5bb1 +0x3a57 0x5bb2 +0x3a58 0x5bb7 +0x3a59 0x5bba +0x3a5a 0x5bbc +0x3a5b 0x5bc0 +0x3a5c 0x5bc1 +0x3a5d 0x5bcd +0x3a5e 0x5bcf +0x3a5f 0x5bd6 +0x3a60 0x5bd7 +0x3a61 0x5bd8 +0x3a62 0x5bd9 +0x3a63 0x5bda +0x3a64 0x5be0 +0x3a65 0x5bef +0x3a66 0x5bf1 +0x3a67 0x5bf4 +0x3a68 0x5bfd +0x3a69 0x5c0c +0x3a6a 0x5c17 +0x3a6b 0x5c1e +0x3a6c 0x5c1f +0x3a6d 0x5c23 +0x3a6e 0x5c26 +0x3a6f 0x5c29 +0x3a70 0x5c2b +0x3a71 0x5c2c +0x3a72 0x5c2e +0x3a73 0x5c30 +0x3a74 0x5c32 +0x3a75 0x5c35 +0x3a76 0x5c36 +0x3a77 0x5c59 +0x3a78 0x5c5a +0x3a79 0x5c5c +0x3a7a 0x5c62 +0x3a7b 0x5c63 +0x3a7c 0x5c67 +0x3a7d 0x5c68 +0x3a7e 0x5c69 +0x3b21 0x5c6d +0x3b22 0x5c70 +0x3b23 0x5c74 +0x3b24 0x5c75 +0x3b25 0x5c7a +0x3b26 0x5c7b +0x3b27 0x5c7c +0x3b28 0x5c7d +0x3b29 0x5c87 +0x3b2a 0x5c88 +0x3b2b 0x5c8a +0x3b2c 0x5c8f +0x3b2d 0x5c92 +0x3b2e 0x5c9d +0x3b2f 0x5c9f +0x3b30 0x5ca0 +0x3b31 0x5ca2 +0x3b32 0x5ca3 +0x3b33 0x5ca6 +0x3b34 0x5caa +0x3b35 0x5cb2 +0x3b36 0x5cb4 +0x3b37 0x5cb5 +0x3b38 0x5cba +0x3b39 0x5cc9 +0x3b3a 0x5ccb +0x3b3b 0x5cd2 +0x3b3c 0x5cdd +0x3b3d 0x5cd7 +0x3b3e 0x5cee +0x3b3f 0x5cf1 +0x3b40 0x5cf2 +0x3b41 0x5cf4 +0x3b42 0x5d01 +0x3b43 0x5d06 +0x3b44 0x5d0d +0x3b45 0x5d12 +0x3b46 0x5d2b +0x3b47 0x5d23 +0x3b48 0x5d24 +0x3b49 0x5d26 +0x3b4a 0x5d27 +0x3b4b 0x5d31 +0x3b4c 0x5d34 +0x3b4d 0x5d39 +0x3b4e 0x5d3d +0x3b4f 0x5d3f +0x3b50 0x5d42 +0x3b51 0x5d43 +0x3b52 0x5d46 +0x3b53 0x5d48 +0x3b54 0x5d55 +0x3b55 0x5d51 +0x3b56 0x5d59 +0x3b57 0x5d4a +0x3b58 0x5d5f +0x3b59 0x5d60 +0x3b5a 0x5d61 +0x3b5b 0x5d62 +0x3b5c 0x5d64 +0x3b5d 0x5d6a +0x3b5e 0x5d6d +0x3b5f 0x5d70 +0x3b60 0x5d79 +0x3b61 0x5d7a +0x3b62 0x5d7e +0x3b63 0x5d7f +0x3b64 0x5d81 +0x3b65 0x5d83 +0x3b66 0x5d88 +0x3b67 0x5d8a +0x3b68 0x5d92 +0x3b69 0x5d93 +0x3b6a 0x5d94 +0x3b6b 0x5d95 +0x3b6c 0x5d99 +0x3b6d 0x5d9b +0x3b6e 0x5d9f +0x3b6f 0x5da0 +0x3b70 0x5da7 +0x3b71 0x5dab +0x3b72 0x5db0 +0x3b73 0x5db4 +0x3b74 0x5db8 +0x3b75 0x5db9 +0x3b76 0x5dc3 +0x3b77 0x5dc7 +0x3b78 0x5dcb +0x3b79 0x5dd0 +0x3b7a 0x5dce +0x3b7b 0x5dd8 +0x3b7c 0x5dd9 +0x3b7d 0x5de0 +0x3b7e 0x5de4 +0x3c21 0x5de9 +0x3c22 0x5df8 +0x3c23 0x5df9 +0x3c24 0x5e00 +0x3c25 0x5e07 +0x3c26 0x5e0d +0x3c27 0x5e12 +0x3c28 0x5e14 +0x3c29 0x5e15 +0x3c2a 0x5e18 +0x3c2b 0x5e1f +0x3c2c 0x5e20 +0x3c2d 0x5e2e +0x3c2e 0x5e28 +0x3c2f 0x5e32 +0x3c30 0x5e35 +0x3c31 0x5e3e +0x3c32 0x5e4b +0x3c33 0x5e50 +0x3c34 0x5e49 +0x3c35 0x5e51 +0x3c36 0x5e56 +0x3c37 0x5e58 +0x3c38 0x5e5b +0x3c39 0x5e5c +0x3c3a 0x5e5e +0x3c3b 0x5e68 +0x3c3c 0x5e6a +0x3c3d 0x5e6b +0x3c3e 0x5e6c +0x3c3f 0x5e6d +0x3c40 0x5e6e +0x3c41 0x5e70 +0x3c42 0x5e80 +0x3c43 0x5e8b +0x3c44 0x5e8e +0x3c45 0x5ea2 +0x3c46 0x5ea4 +0x3c47 0x5ea5 +0x3c48 0x5ea8 +0x3c49 0x5eaa +0x3c4a 0x5eac +0x3c4b 0x5eb1 +0x3c4c 0x5eb3 +0x3c4d 0x5ebd +0x3c4e 0x5ebe +0x3c4f 0x5ebf +0x3c50 0x5ec6 +0x3c51 0x5ecc +0x3c52 0x5ecb +0x3c53 0x5ece +0x3c54 0x5ed1 +0x3c55 0x5ed2 +0x3c56 0x5ed4 +0x3c57 0x5ed5 +0x3c58 0x5edc +0x3c59 0x5ede +0x3c5a 0x5ee5 +0x3c5b 0x5eeb +0x3c5c 0x5f02 +0x3c5d 0x5f06 +0x3c5e 0x5f07 +0x3c5f 0x5f08 +0x3c60 0x5f0e +0x3c61 0x5f19 +0x3c62 0x5f1c +0x3c63 0x5f1d +0x3c64 0x5f21 +0x3c65 0x5f22 +0x3c66 0x5f23 +0x3c67 0x5f24 +0x3c68 0x5f28 +0x3c69 0x5f2b +0x3c6a 0x5f2c +0x3c6b 0x5f2e +0x3c6c 0x5f30 +0x3c6d 0x5f34 +0x3c6e 0x5f36 +0x3c6f 0x5f3b +0x3c70 0x5f3d +0x3c71 0x5f3f +0x3c72 0x5f40 +0x3c73 0x5f44 +0x3c74 0x5f45 +0x3c75 0x5f47 +0x3c76 0x5f4d +0x3c77 0x5f50 +0x3c78 0x5f54 +0x3c79 0x5f58 +0x3c7a 0x5f5b +0x3c7b 0x5f60 +0x3c7c 0x5f63 +0x3c7d 0x5f64 +0x3c7e 0x5f67 +0x3d21 0x5f6f +0x3d22 0x5f72 +0x3d23 0x5f74 +0x3d24 0x5f75 +0x3d25 0x5f78 +0x3d26 0x5f7a +0x3d27 0x5f7d +0x3d28 0x5f7e +0x3d29 0x5f89 +0x3d2a 0x5f8d +0x3d2b 0x5f8f +0x3d2c 0x5f96 +0x3d2d 0x5f9c +0x3d2e 0x5f9d +0x3d2f 0x5fa2 +0x3d30 0x5fa7 +0x3d31 0x5fab +0x3d32 0x5fa4 +0x3d33 0x5fac +0x3d34 0x5faf +0x3d35 0x5fb0 +0x3d36 0x5fb1 +0x3d37 0x5fb8 +0x3d38 0x5fc4 +0x3d39 0x5fc7 +0x3d3a 0x5fc8 +0x3d3b 0x5fc9 +0x3d3c 0x5fcb +0x3d3d 0x5fd0 +0x3d3e 0x5fd1 +0x3d3f 0x5fd2 +0x3d40 0x5fd3 +0x3d41 0x5fd4 +0x3d42 0x5fde +0x3d43 0x5fe1 +0x3d44 0x5fe2 +0x3d45 0x5fe8 +0x3d46 0x5fe9 +0x3d47 0x5fea +0x3d48 0x5fec +0x3d49 0x5fed +0x3d4a 0x5fee +0x3d4b 0x5fef +0x3d4c 0x5ff2 +0x3d4d 0x5ff3 +0x3d4e 0x5ff6 +0x3d4f 0x5ffa +0x3d50 0x5ffc +0x3d51 0x6007 +0x3d52 0x600a +0x3d53 0x600d +0x3d54 0x6013 +0x3d55 0x6014 +0x3d56 0x6017 +0x3d57 0x6018 +0x3d58 0x601a +0x3d59 0x601f +0x3d5a 0x6024 +0x3d5b 0x602d +0x3d5c 0x6033 +0x3d5d 0x6035 +0x3d5e 0x6040 +0x3d5f 0x6047 +0x3d60 0x6048 +0x3d61 0x6049 +0x3d62 0x604c +0x3d63 0x6051 +0x3d64 0x6054 +0x3d65 0x6056 +0x3d66 0x6057 +0x3d67 0x605d +0x3d68 0x6061 +0x3d69 0x6067 +0x3d6a 0x6071 +0x3d6b 0x607e +0x3d6c 0x607f +0x3d6d 0x6082 +0x3d6e 0x6086 +0x3d6f 0x6088 +0x3d70 0x608a +0x3d71 0x608e +0x3d72 0x6091 +0x3d73 0x6093 +0x3d74 0x6095 +0x3d75 0x6098 +0x3d76 0x609d +0x3d77 0x609e +0x3d78 0x60a2 +0x3d79 0x60a4 +0x3d7a 0x60a5 +0x3d7b 0x60a8 +0x3d7c 0x60b0 +0x3d7d 0x60b1 +0x3d7e 0x60b7 +0x3e21 0x60bb +0x3e22 0x60be +0x3e23 0x60c2 +0x3e24 0x60c4 +0x3e25 0x60c8 +0x3e26 0x60c9 +0x3e27 0x60ca +0x3e28 0x60cb +0x3e29 0x60ce +0x3e2a 0x60cf +0x3e2b 0x60d4 +0x3e2c 0x60d5 +0x3e2d 0x60d9 +0x3e2e 0x60db +0x3e2f 0x60dd +0x3e30 0x60de +0x3e31 0x60e2 +0x3e32 0x60e5 +0x3e33 0x60f2 +0x3e34 0x60f5 +0x3e35 0x60f8 +0x3e36 0x60fc +0x3e37 0x60fd +0x3e38 0x6102 +0x3e39 0x6107 +0x3e3a 0x610a +0x3e3b 0x610c +0x3e3c 0x6110 +0x3e3d 0x6111 +0x3e3e 0x6112 +0x3e3f 0x6113 +0x3e40 0x6114 +0x3e41 0x6116 +0x3e42 0x6117 +0x3e43 0x6119 +0x3e44 0x611c +0x3e45 0x611e +0x3e46 0x6122 +0x3e47 0x612a +0x3e48 0x612b +0x3e49 0x6130 +0x3e4a 0x6131 +0x3e4b 0x6135 +0x3e4c 0x6136 +0x3e4d 0x6137 +0x3e4e 0x6139 +0x3e4f 0x6141 +0x3e50 0x6145 +0x3e51 0x6146 +0x3e52 0x6149 +0x3e53 0x615e +0x3e54 0x6160 +0x3e55 0x616c +0x3e56 0x6172 +0x3e57 0x6178 +0x3e58 0x617b +0x3e59 0x617c +0x3e5a 0x617f +0x3e5b 0x6180 +0x3e5c 0x6181 +0x3e5d 0x6183 +0x3e5e 0x6184 +0x3e5f 0x618b +0x3e60 0x618d +0x3e61 0x6192 +0x3e62 0x6193 +0x3e63 0x6197 +0x3e64 0x6198 +0x3e65 0x619c +0x3e66 0x619d +0x3e67 0x619f +0x3e68 0x61a0 +0x3e69 0x61a5 +0x3e6a 0x61a8 +0x3e6b 0x61aa +0x3e6c 0x61ad +0x3e6d 0x61b8 +0x3e6e 0x61b9 +0x3e6f 0x61bc +0x3e70 0x61c0 +0x3e71 0x61c1 +0x3e72 0x61c2 +0x3e73 0x61ce +0x3e74 0x61cf +0x3e75 0x61d5 +0x3e76 0x61dc +0x3e77 0x61dd +0x3e78 0x61de +0x3e79 0x61df +0x3e7a 0x61e1 +0x3e7b 0x61e2 +0x3e7c 0x61e7 +0x3e7d 0x61e9 +0x3e7e 0x61e5 +0x3f21 0x61ec +0x3f22 0x61ed +0x3f23 0x61ef +0x3f24 0x6201 +0x3f25 0x6203 +0x3f26 0x6204 +0x3f27 0x6207 +0x3f28 0x6213 +0x3f29 0x6215 +0x3f2a 0x621c +0x3f2b 0x6220 +0x3f2c 0x6222 +0x3f2d 0x6223 +0x3f2e 0x6227 +0x3f2f 0x6229 +0x3f30 0x622b +0x3f31 0x6239 +0x3f32 0x623d +0x3f33 0x6242 +0x3f34 0x6243 +0x3f35 0x6244 +0x3f36 0x6246 +0x3f37 0x624c +0x3f38 0x6250 +0x3f39 0x6251 +0x3f3a 0x6252 +0x3f3b 0x6254 +0x3f3c 0x6256 +0x3f3d 0x625a +0x3f3e 0x625c +0x3f3f 0x6264 +0x3f40 0x626d +0x3f41 0x626f +0x3f42 0x6273 +0x3f43 0x627a +0x3f44 0x627d +0x3f45 0x628d +0x3f46 0x628e +0x3f47 0x628f +0x3f48 0x6290 +0x3f49 0x62a6 +0x3f4a 0x62a8 +0x3f4b 0x62b3 +0x3f4c 0x62b6 +0x3f4d 0x62b7 +0x3f4e 0x62ba +0x3f4f 0x62be +0x3f50 0x62bf +0x3f51 0x62c4 +0x3f52 0x62ce +0x3f53 0x62d5 +0x3f54 0x62d6 +0x3f55 0x62da +0x3f56 0x62ea +0x3f57 0x62f2 +0x3f58 0x62f4 +0x3f59 0x62fc +0x3f5a 0x62fd +0x3f5b 0x6303 +0x3f5c 0x6304 +0x3f5d 0x630a +0x3f5e 0x630b +0x3f5f 0x630d +0x3f60 0x6310 +0x3f61 0x6313 +0x3f62 0x6316 +0x3f63 0x6318 +0x3f64 0x6329 +0x3f65 0x632a +0x3f66 0x632d +0x3f67 0x6335 +0x3f68 0x6336 +0x3f69 0x6339 +0x3f6a 0x633c +0x3f6b 0x6341 +0x3f6c 0x6342 +0x3f6d 0x6343 +0x3f6e 0x6344 +0x3f6f 0x6346 +0x3f70 0x634a +0x3f71 0x634b +0x3f72 0x634e +0x3f73 0x6352 +0x3f74 0x6353 +0x3f75 0x6354 +0x3f76 0x6358 +0x3f77 0x635b +0x3f78 0x6365 +0x3f79 0x6366 +0x3f7a 0x636c +0x3f7b 0x636d +0x3f7c 0x6371 +0x3f7d 0x6374 +0x3f7e 0x6375 +0x4021 0x6378 +0x4022 0x637c +0x4023 0x637d +0x4024 0x637f +0x4025 0x6382 +0x4026 0x6384 +0x4027 0x6387 +0x4028 0x638a +0x4029 0x6390 +0x402a 0x6394 +0x402b 0x6395 +0x402c 0x6399 +0x402d 0x639a +0x402e 0x639e +0x402f 0x63a4 +0x4030 0x63a6 +0x4031 0x63ad +0x4032 0x63ae +0x4033 0x63af +0x4034 0x63bd +0x4035 0x63c1 +0x4036 0x63c5 +0x4037 0x63c8 +0x4038 0x63ce +0x4039 0x63d1 +0x403a 0x63d3 +0x403b 0x63d4 +0x403c 0x63d5 +0x403d 0x63dc +0x403e 0x63e0 +0x403f 0x63e5 +0x4040 0x63ea +0x4041 0x63ec +0x4042 0x63f2 +0x4043 0x63f3 +0x4044 0x63f5 +0x4045 0x63f8 +0x4046 0x63f9 +0x4047 0x6409 +0x4048 0x640a +0x4049 0x6410 +0x404a 0x6412 +0x404b 0x6414 +0x404c 0x6418 +0x404d 0x641e +0x404e 0x6420 +0x404f 0x6422 +0x4050 0x6424 +0x4051 0x6425 +0x4052 0x6429 +0x4053 0x642a +0x4054 0x642f +0x4055 0x6430 +0x4056 0x6435 +0x4057 0x643d +0x4058 0x643f +0x4059 0x644b +0x405a 0x644f +0x405b 0x6451 +0x405c 0x6452 +0x405d 0x6453 +0x405e 0x6454 +0x405f 0x645a +0x4060 0x645b +0x4061 0x645c +0x4062 0x645d +0x4063 0x645f +0x4064 0x6460 +0x4065 0x6461 +0x4066 0x6463 +0x4067 0x646d +0x4068 0x6473 +0x4069 0x6474 +0x406a 0x647b +0x406b 0x647d +0x406c 0x6485 +0x406d 0x6487 +0x406e 0x648f +0x406f 0x6490 +0x4070 0x6491 +0x4071 0x6498 +0x4072 0x6499 +0x4073 0x649b +0x4074 0x649d +0x4075 0x649f +0x4076 0x64a1 +0x4077 0x64a3 +0x4078 0x64a6 +0x4079 0x64a8 +0x407a 0x64ac +0x407b 0x64b3 +0x407c 0x64bd +0x407d 0x64be +0x407e 0x64bf +0x4121 0x64c4 +0x4122 0x64c9 +0x4123 0x64ca +0x4124 0x64cb +0x4125 0x64cc +0x4126 0x64ce +0x4127 0x64d0 +0x4128 0x64d1 +0x4129 0x64d5 +0x412a 0x64d7 +0x412b 0x64e4 +0x412c 0x64e5 +0x412d 0x64e9 +0x412e 0x64ea +0x412f 0x64ed +0x4130 0x64f0 +0x4131 0x64f5 +0x4132 0x64f7 +0x4133 0x64fb +0x4134 0x64ff +0x4135 0x6501 +0x4136 0x6504 +0x4137 0x6508 +0x4138 0x6509 +0x4139 0x650a +0x413a 0x650f +0x413b 0x6513 +0x413c 0x6514 +0x413d 0x6516 +0x413e 0x6519 +0x413f 0x651b +0x4140 0x651e +0x4141 0x651f +0x4142 0x6522 +0x4143 0x6526 +0x4144 0x6529 +0x4145 0x652e +0x4146 0x6531 +0x4147 0x653a +0x4148 0x653c +0x4149 0x653d +0x414a 0x6543 +0x414b 0x6547 +0x414c 0x6549 +0x414d 0x6550 +0x414e 0x6552 +0x414f 0x6554 +0x4150 0x655f +0x4151 0x6560 +0x4152 0x6567 +0x4153 0x656b +0x4154 0x657a +0x4155 0x657d +0x4156 0x6581 +0x4157 0x6585 +0x4158 0x658a +0x4159 0x6592 +0x415a 0x6595 +0x415b 0x6598 +0x415c 0x659d +0x415d 0x65a0 +0x415e 0x65a3 +0x415f 0x65a6 +0x4160 0x65ae +0x4161 0x65b2 +0x4162 0x65b3 +0x4163 0x65b4 +0x4164 0x65bf +0x4165 0x65c2 +0x4166 0x65c8 +0x4167 0x65c9 +0x4168 0x65ce +0x4169 0x65d0 +0x416a 0x65d4 +0x416b 0x65d6 +0x416c 0x65d8 +0x416d 0x65df +0x416e 0x65f0 +0x416f 0x65f2 +0x4170 0x65f4 +0x4171 0x65f5 +0x4172 0x65f9 +0x4173 0x65fe +0x4174 0x65ff +0x4175 0x6600 +0x4176 0x6604 +0x4177 0x6608 +0x4178 0x6609 +0x4179 0x660d +0x417a 0x6611 +0x417b 0x6612 +0x417c 0x6615 +0x417d 0x6616 +0x417e 0x661d +0x4221 0x661e +0x4222 0x6621 +0x4223 0x6622 +0x4224 0x6623 +0x4225 0x6624 +0x4226 0x6626 +0x4227 0x6629 +0x4228 0x662a +0x4229 0x662b +0x422a 0x662c +0x422b 0x662e +0x422c 0x6630 +0x422d 0x6631 +0x422e 0x6633 +0x422f 0x6639 +0x4230 0x6637 +0x4231 0x6640 +0x4232 0x6645 +0x4233 0x6646 +0x4234 0x664a +0x4235 0x664c +0x4236 0x6651 +0x4237 0x664e +0x4238 0x6657 +0x4239 0x6658 +0x423a 0x6659 +0x423b 0x665b +0x423c 0x665c +0x423d 0x6660 +0x423e 0x6661 +0x423f 0x66fb +0x4240 0x666a +0x4241 0x666b +0x4242 0x666c +0x4243 0x667e +0x4244 0x6673 +0x4245 0x6675 +0x4246 0x667f +0x4247 0x6677 +0x4248 0x6678 +0x4249 0x6679 +0x424a 0x667b +0x424b 0x6680 +0x424c 0x667c +0x424d 0x668b +0x424e 0x668c +0x424f 0x668d +0x4250 0x6690 +0x4251 0x6692 +0x4252 0x6699 +0x4253 0x669a +0x4254 0x669b +0x4255 0x669c +0x4256 0x669f +0x4257 0x66a0 +0x4258 0x66a4 +0x4259 0x66ad +0x425a 0x66b1 +0x425b 0x66b2 +0x425c 0x66b5 +0x425d 0x66bb +0x425e 0x66bf +0x425f 0x66c0 +0x4260 0x66c2 +0x4261 0x66c3 +0x4262 0x66c8 +0x4263 0x66cc +0x4264 0x66ce +0x4265 0x66cf +0x4266 0x66d4 +0x4267 0x66db +0x4268 0x66df +0x4269 0x66e8 +0x426a 0x66eb +0x426b 0x66ec +0x426c 0x66ee +0x426d 0x66fa +0x426e 0x6705 +0x426f 0x6707 +0x4270 0x670e +0x4271 0x6713 +0x4272 0x6719 +0x4273 0x671c +0x4274 0x6720 +0x4275 0x6722 +0x4276 0x6733 +0x4277 0x673e +0x4278 0x6745 +0x4279 0x6747 +0x427a 0x6748 +0x427b 0x674c +0x427c 0x6754 +0x427d 0x6755 +0x427e 0x675d +0x4321 0x6766 +0x4322 0x676c +0x4323 0x676e +0x4324 0x6774 +0x4325 0x6776 +0x4326 0x677b +0x4327 0x6781 +0x4328 0x6784 +0x4329 0x678e +0x432a 0x678f +0x432b 0x6791 +0x432c 0x6793 +0x432d 0x6796 +0x432e 0x6798 +0x432f 0x6799 +0x4330 0x679b +0x4331 0x67b0 +0x4332 0x67b1 +0x4333 0x67b2 +0x4334 0x67b5 +0x4335 0x67bb +0x4336 0x67bc +0x4337 0x67bd +0x4338 0x67f9 +0x4339 0x67c0 +0x433a 0x67c2 +0x433b 0x67c3 +0x433c 0x67c5 +0x433d 0x67c8 +0x433e 0x67c9 +0x433f 0x67d2 +0x4340 0x67d7 +0x4341 0x67d9 +0x4342 0x67dc +0x4343 0x67e1 +0x4344 0x67e6 +0x4345 0x67f0 +0x4346 0x67f2 +0x4347 0x67f6 +0x4348 0x67f7 +0x4349 0x6852 +0x434a 0x6814 +0x434b 0x6819 +0x434c 0x681d +0x434d 0x681f +0x434e 0x6828 +0x434f 0x6827 +0x4350 0x682c +0x4351 0x682d +0x4352 0x682f +0x4353 0x6830 +0x4354 0x6831 +0x4355 0x6833 +0x4356 0x683b +0x4357 0x683f +0x4358 0x6844 +0x4359 0x6845 +0x435a 0x684a +0x435b 0x684c +0x435c 0x6855 +0x435d 0x6857 +0x435e 0x6858 +0x435f 0x685b +0x4360 0x686b +0x4361 0x686e +0x4362 0x686f +0x4363 0x6870 +0x4364 0x6871 +0x4365 0x6872 +0x4366 0x6875 +0x4367 0x6879 +0x4368 0x687a +0x4369 0x687b +0x436a 0x687c +0x436b 0x6882 +0x436c 0x6884 +0x436d 0x6886 +0x436e 0x6888 +0x436f 0x6896 +0x4370 0x6898 +0x4371 0x689a +0x4372 0x689c +0x4373 0x68a1 +0x4374 0x68a3 +0x4375 0x68a5 +0x4376 0x68a9 +0x4377 0x68aa +0x4378 0x68ae +0x4379 0x68b2 +0x437a 0x68bb +0x437b 0x68c5 +0x437c 0x68c8 +0x437d 0x68cc +0x437e 0x68cf +0x4421 0x68d0 +0x4422 0x68d1 +0x4423 0x68d3 +0x4424 0x68d6 +0x4425 0x68d9 +0x4426 0x68dc +0x4427 0x68dd +0x4428 0x68e5 +0x4429 0x68e8 +0x442a 0x68ea +0x442b 0x68eb +0x442c 0x68ec +0x442d 0x68ed +0x442e 0x68f0 +0x442f 0x68f1 +0x4430 0x68f5 +0x4431 0x68f6 +0x4432 0x68fb +0x4433 0x68fc +0x4434 0x68fd +0x4435 0x6906 +0x4436 0x6909 +0x4437 0x690a +0x4438 0x6910 +0x4439 0x6911 +0x443a 0x6913 +0x443b 0x6916 +0x443c 0x6917 +0x443d 0x6931 +0x443e 0x6933 +0x443f 0x6935 +0x4440 0x6938 +0x4441 0x693b +0x4442 0x6942 +0x4443 0x6945 +0x4444 0x6949 +0x4445 0x694e +0x4446 0x6957 +0x4447 0x695b +0x4448 0x6963 +0x4449 0x6964 +0x444a 0x6965 +0x444b 0x6966 +0x444c 0x6968 +0x444d 0x6969 +0x444e 0x696c +0x444f 0x6970 +0x4450 0x6971 +0x4451 0x6972 +0x4452 0x697a +0x4453 0x697b +0x4454 0x697f +0x4455 0x6980 +0x4456 0x698d +0x4457 0x6992 +0x4458 0x6996 +0x4459 0x6998 +0x445a 0x69a1 +0x445b 0x69a5 +0x445c 0x69a6 +0x445d 0x69a8 +0x445e 0x69ab +0x445f 0x69ad +0x4460 0x69af +0x4461 0x69b7 +0x4462 0x69b8 +0x4463 0x69ba +0x4464 0x69bc +0x4465 0x69c5 +0x4466 0x69c8 +0x4467 0x69d1 +0x4468 0x69d6 +0x4469 0x69d7 +0x446a 0x69e2 +0x446b 0x69e5 +0x446c 0x69ee +0x446d 0x69ef +0x446e 0x69f1 +0x446f 0x69f3 +0x4470 0x69f5 +0x4471 0x69fe +0x4472 0x6a00 +0x4473 0x6a01 +0x4474 0x6a03 +0x4475 0x6a0f +0x4476 0x6a11 +0x4477 0x6a15 +0x4478 0x6a1a +0x4479 0x6a1d +0x447a 0x6a20 +0x447b 0x6a24 +0x447c 0x6a28 +0x447d 0x6a30 +0x447e 0x6a32 +0x4521 0x6a34 +0x4522 0x6a37 +0x4523 0x6a3b +0x4524 0x6a3e +0x4525 0x6a3f +0x4526 0x6a45 +0x4527 0x6a46 +0x4528 0x6a49 +0x4529 0x6a4a +0x452a 0x6a4e +0x452b 0x6a50 +0x452c 0x6a51 +0x452d 0x6a52 +0x452e 0x6a55 +0x452f 0x6a56 +0x4530 0x6a5b +0x4531 0x6a64 +0x4532 0x6a67 +0x4533 0x6a6a +0x4534 0x6a71 +0x4535 0x6a73 +0x4536 0x6a7e +0x4537 0x6a81 +0x4538 0x6a83 +0x4539 0x6a86 +0x453a 0x6a87 +0x453b 0x6a89 +0x453c 0x6a8b +0x453d 0x6a91 +0x453e 0x6a9b +0x453f 0x6a9d +0x4540 0x6a9e +0x4541 0x6a9f +0x4542 0x6aa5 +0x4543 0x6aab +0x4544 0x6aaf +0x4545 0x6ab0 +0x4546 0x6ab1 +0x4547 0x6ab4 +0x4548 0x6abd +0x4549 0x6abe +0x454a 0x6abf +0x454b 0x6ac6 +0x454c 0x6ac9 +0x454d 0x6ac8 +0x454e 0x6acc +0x454f 0x6ad0 +0x4550 0x6ad4 +0x4551 0x6ad5 +0x4552 0x6ad6 +0x4553 0x6adc +0x4554 0x6add +0x4555 0x6ae4 +0x4556 0x6ae7 +0x4557 0x6aec +0x4558 0x6af0 +0x4559 0x6af1 +0x455a 0x6af2 +0x455b 0x6afc +0x455c 0x6afd +0x455d 0x6b02 +0x455e 0x6b03 +0x455f 0x6b06 +0x4560 0x6b07 +0x4561 0x6b09 +0x4562 0x6b0f +0x4563 0x6b10 +0x4564 0x6b11 +0x4565 0x6b17 +0x4566 0x6b1b +0x4567 0x6b1e +0x4568 0x6b24 +0x4569 0x6b28 +0x456a 0x6b2b +0x456b 0x6b2c +0x456c 0x6b2f +0x456d 0x6b35 +0x456e 0x6b36 +0x456f 0x6b3b +0x4570 0x6b3f +0x4571 0x6b46 +0x4572 0x6b4a +0x4573 0x6b4d +0x4574 0x6b52 +0x4575 0x6b56 +0x4576 0x6b58 +0x4577 0x6b5d +0x4578 0x6b60 +0x4579 0x6b67 +0x457a 0x6b6b +0x457b 0x6b6e +0x457c 0x6b70 +0x457d 0x6b75 +0x457e 0x6b7d +0x4621 0x6b7e +0x4622 0x6b82 +0x4623 0x6b85 +0x4624 0x6b97 +0x4625 0x6b9b +0x4626 0x6b9f +0x4627 0x6ba0 +0x4628 0x6ba2 +0x4629 0x6ba3 +0x462a 0x6ba8 +0x462b 0x6ba9 +0x462c 0x6bac +0x462d 0x6bad +0x462e 0x6bae +0x462f 0x6bb0 +0x4630 0x6bb8 +0x4631 0x6bb9 +0x4632 0x6bbd +0x4633 0x6bbe +0x4634 0x6bc3 +0x4635 0x6bc4 +0x4636 0x6bc9 +0x4637 0x6bcc +0x4638 0x6bd6 +0x4639 0x6bda +0x463a 0x6be1 +0x463b 0x6be3 +0x463c 0x6be6 +0x463d 0x6be7 +0x463e 0x6bee +0x463f 0x6bf1 +0x4640 0x6bf7 +0x4641 0x6bf9 +0x4642 0x6bff +0x4643 0x6c02 +0x4644 0x6c04 +0x4645 0x6c05 +0x4646 0x6c09 +0x4647 0x6c0d +0x4648 0x6c0e +0x4649 0x6c10 +0x464a 0x6c12 +0x464b 0x6c19 +0x464c 0x6c1f +0x464d 0x6c26 +0x464e 0x6c27 +0x464f 0x6c28 +0x4650 0x6c2c +0x4651 0x6c2e +0x4652 0x6c33 +0x4653 0x6c35 +0x4654 0x6c36 +0x4655 0x6c3a +0x4656 0x6c3b +0x4657 0x6c3f +0x4658 0x6c4a +0x4659 0x6c4b +0x465a 0x6c4d +0x465b 0x6c4f +0x465c 0x6c52 +0x465d 0x6c54 +0x465e 0x6c59 +0x465f 0x6c5b +0x4660 0x6c5c +0x4661 0x6c6b +0x4662 0x6c6d +0x4663 0x6c6f +0x4664 0x6c74 +0x4665 0x6c76 +0x4666 0x6c78 +0x4667 0x6c79 +0x4668 0x6c7b +0x4669 0x6c85 +0x466a 0x6c86 +0x466b 0x6c87 +0x466c 0x6c89 +0x466d 0x6c94 +0x466e 0x6c95 +0x466f 0x6c97 +0x4670 0x6c98 +0x4671 0x6c9c +0x4672 0x6c9f +0x4673 0x6cb0 +0x4674 0x6cb2 +0x4675 0x6cb4 +0x4676 0x6cc2 +0x4677 0x6cc6 +0x4678 0x6ccd +0x4679 0x6ccf +0x467a 0x6cd0 +0x467b 0x6cd1 +0x467c 0x6cd2 +0x467d 0x6cd4 +0x467e 0x6cd6 +0x4721 0x6cda +0x4722 0x6cdc +0x4723 0x6ce0 +0x4724 0x6ce7 +0x4725 0x6ce9 +0x4726 0x6ceb +0x4727 0x6cec +0x4728 0x6cee +0x4729 0x6cf2 +0x472a 0x6cf4 +0x472b 0x6d04 +0x472c 0x6d07 +0x472d 0x6d0a +0x472e 0x6d0e +0x472f 0x6d0f +0x4730 0x6d11 +0x4731 0x6d13 +0x4732 0x6d1a +0x4733 0x6d26 +0x4734 0x6d27 +0x4735 0x6d28 +0x4736 0x6c67 +0x4737 0x6d2e +0x4738 0x6d2f +0x4739 0x6d31 +0x473a 0x6d39 +0x473b 0x6d3c +0x473c 0x6d3f +0x473d 0x6d57 +0x473e 0x6d5e +0x473f 0x6d5f +0x4740 0x6d61 +0x4741 0x6d65 +0x4742 0x6d67 +0x4743 0x6d6f +0x4744 0x6d70 +0x4745 0x6d7c +0x4746 0x6d82 +0x4747 0x6d87 +0x4748 0x6d91 +0x4749 0x6d92 +0x474a 0x6d94 +0x474b 0x6d96 +0x474c 0x6d97 +0x474d 0x6d98 +0x474e 0x6daa +0x474f 0x6dac +0x4750 0x6db4 +0x4751 0x6db7 +0x4752 0x6db9 +0x4753 0x6dbd +0x4754 0x6dbf +0x4755 0x6dc4 +0x4756 0x6dc8 +0x4757 0x6dca +0x4758 0x6dce +0x4759 0x6dcf +0x475a 0x6dd6 +0x475b 0x6ddb +0x475c 0x6ddd +0x475d 0x6ddf +0x475e 0x6de0 +0x475f 0x6de2 +0x4760 0x6de5 +0x4761 0x6de9 +0x4762 0x6def +0x4763 0x6df0 +0x4764 0x6df4 +0x4765 0x6df6 +0x4766 0x6dfc +0x4767 0x6e00 +0x4768 0x6e04 +0x4769 0x6e1e +0x476a 0x6e22 +0x476b 0x6e27 +0x476c 0x6e32 +0x476d 0x6e36 +0x476e 0x6e39 +0x476f 0x6e3b +0x4770 0x6e3c +0x4771 0x6e44 +0x4772 0x6e45 +0x4773 0x6e48 +0x4774 0x6e49 +0x4775 0x6e4b +0x4776 0x6e4f +0x4777 0x6e51 +0x4778 0x6e52 +0x4779 0x6e53 +0x477a 0x6e54 +0x477b 0x6e57 +0x477c 0x6e5c +0x477d 0x6e5d +0x477e 0x6e5e +0x4821 0x6e62 +0x4822 0x6e63 +0x4823 0x6e68 +0x4824 0x6e73 +0x4825 0x6e7b +0x4826 0x6e7d +0x4827 0x6e8d +0x4828 0x6e93 +0x4829 0x6e99 +0x482a 0x6ea0 +0x482b 0x6ea7 +0x482c 0x6ead +0x482d 0x6eae +0x482e 0x6eb1 +0x482f 0x6eb3 +0x4830 0x6ebb +0x4831 0x6ebf +0x4832 0x6ec0 +0x4833 0x6ec1 +0x4834 0x6ec3 +0x4835 0x6ec7 +0x4836 0x6ec8 +0x4837 0x6eca +0x4838 0x6ecd +0x4839 0x6ece +0x483a 0x6ecf +0x483b 0x6eeb +0x483c 0x6eed +0x483d 0x6eee +0x483e 0x6ef9 +0x483f 0x6efb +0x4840 0x6efd +0x4841 0x6f04 +0x4842 0x6f08 +0x4843 0x6f0a +0x4844 0x6f0c +0x4845 0x6f0d +0x4846 0x6f16 +0x4847 0x6f18 +0x4848 0x6f1a +0x4849 0x6f1b +0x484a 0x6f26 +0x484b 0x6f29 +0x484c 0x6f2a +0x484d 0x6f2f +0x484e 0x6f30 +0x484f 0x6f33 +0x4850 0x6f36 +0x4851 0x6f3b +0x4852 0x6f3c +0x4853 0x6f2d +0x4854 0x6f4f +0x4855 0x6f51 +0x4856 0x6f52 +0x4857 0x6f53 +0x4858 0x6f57 +0x4859 0x6f59 +0x485a 0x6f5a +0x485b 0x6f5d +0x485c 0x6f5e +0x485d 0x6f61 +0x485e 0x6f62 +0x485f 0x6f68 +0x4860 0x6f6c +0x4861 0x6f7d +0x4862 0x6f7e +0x4863 0x6f83 +0x4864 0x6f87 +0x4865 0x6f88 +0x4866 0x6f8b +0x4867 0x6f8c +0x4868 0x6f8d +0x4869 0x6f90 +0x486a 0x6f92 +0x486b 0x6f93 +0x486c 0x6f94 +0x486d 0x6f96 +0x486e 0x6f9a +0x486f 0x6f9f +0x4870 0x6fa0 +0x4871 0x6fa5 +0x4872 0x6fa6 +0x4873 0x6fa7 +0x4874 0x6fa8 +0x4875 0x6fae +0x4876 0x6faf +0x4877 0x6fb0 +0x4878 0x6fb5 +0x4879 0x6fb6 +0x487a 0x6fbc +0x487b 0x6fc5 +0x487c 0x6fc7 +0x487d 0x6fc8 +0x487e 0x6fca +0x4921 0x6fda +0x4922 0x6fde +0x4923 0x6fe8 +0x4924 0x6fe9 +0x4925 0x6ff0 +0x4926 0x6ff5 +0x4927 0x6ff9 +0x4928 0x6ffc +0x4929 0x6ffd +0x492a 0x7000 +0x492b 0x7005 +0x492c 0x7006 +0x492d 0x7007 +0x492e 0x700d +0x492f 0x7017 +0x4930 0x7020 +0x4931 0x7023 +0x4932 0x702f +0x4933 0x7034 +0x4934 0x7037 +0x4935 0x7039 +0x4936 0x703c +0x4937 0x7043 +0x4938 0x7044 +0x4939 0x7048 +0x493a 0x7049 +0x493b 0x704a +0x493c 0x704b +0x493d 0x7054 +0x493e 0x7055 +0x493f 0x705d +0x4940 0x705e +0x4941 0x704e +0x4942 0x7064 +0x4943 0x7065 +0x4944 0x706c +0x4945 0x706e +0x4946 0x7075 +0x4947 0x7076 +0x4948 0x707e +0x4949 0x7081 +0x494a 0x7085 +0x494b 0x7086 +0x494c 0x7094 +0x494d 0x7095 +0x494e 0x7096 +0x494f 0x7097 +0x4950 0x7098 +0x4951 0x709b +0x4952 0x70a4 +0x4953 0x70ab +0x4954 0x70b0 +0x4955 0x70b1 +0x4956 0x70b4 +0x4957 0x70b7 +0x4958 0x70ca +0x4959 0x70d1 +0x495a 0x70d3 +0x495b 0x70d4 +0x495c 0x70d5 +0x495d 0x70d6 +0x495e 0x70d8 +0x495f 0x70dc +0x4960 0x70e4 +0x4961 0x70fa +0x4962 0x7103 +0x4963 0x7104 +0x4964 0x7105 +0x4965 0x7106 +0x4966 0x7107 +0x4967 0x710b +0x4968 0x710c +0x4969 0x710f +0x496a 0x711e +0x496b 0x7120 +0x496c 0x712b +0x496d 0x712d +0x496e 0x712f +0x496f 0x7130 +0x4970 0x7131 +0x4971 0x7138 +0x4972 0x7141 +0x4973 0x7145 +0x4974 0x7146 +0x4975 0x7147 +0x4976 0x714a +0x4977 0x714b +0x4978 0x7150 +0x4979 0x7152 +0x497a 0x7157 +0x497b 0x715a +0x497c 0x715c +0x497d 0x715e +0x497e 0x7160 +0x4a21 0x7168 +0x4a22 0x7179 +0x4a23 0x7180 +0x4a24 0x7185 +0x4a25 0x7187 +0x4a26 0x718c +0x4a27 0x7192 +0x4a28 0x719a +0x4a29 0x719b +0x4a2a 0x71a0 +0x4a2b 0x71a2 +0x4a2c 0x71af +0x4a2d 0x71b0 +0x4a2e 0x71b2 +0x4a2f 0x71b3 +0x4a30 0x71ba +0x4a31 0x71bf +0x4a32 0x71c0 +0x4a33 0x71c1 +0x4a34 0x71c4 +0x4a35 0x71cb +0x4a36 0x71cc +0x4a37 0x71d3 +0x4a38 0x71d6 +0x4a39 0x71d9 +0x4a3a 0x71da +0x4a3b 0x71dc +0x4a3c 0x71f8 +0x4a3d 0x71fe +0x4a3e 0x7200 +0x4a3f 0x7207 +0x4a40 0x7208 +0x4a41 0x7209 +0x4a42 0x7213 +0x4a43 0x7217 +0x4a44 0x721a +0x4a45 0x721d +0x4a46 0x721f +0x4a47 0x7224 +0x4a48 0x722b +0x4a49 0x722f +0x4a4a 0x7234 +0x4a4b 0x7238 +0x4a4c 0x7239 +0x4a4d 0x7241 +0x4a4e 0x7242 +0x4a4f 0x7243 +0x4a50 0x7245 +0x4a51 0x724e +0x4a52 0x724f +0x4a53 0x7250 +0x4a54 0x7253 +0x4a55 0x7255 +0x4a56 0x7256 +0x4a57 0x725a +0x4a58 0x725c +0x4a59 0x725e +0x4a5a 0x7260 +0x4a5b 0x7263 +0x4a5c 0x7268 +0x4a5d 0x726b +0x4a5e 0x726e +0x4a5f 0x726f +0x4a60 0x7271 +0x4a61 0x7277 +0x4a62 0x7278 +0x4a63 0x727b +0x4a64 0x727c +0x4a65 0x727f +0x4a66 0x7284 +0x4a67 0x7289 +0x4a68 0x728d +0x4a69 0x728e +0x4a6a 0x7293 +0x4a6b 0x729b +0x4a6c 0x72a8 +0x4a6d 0x72ad +0x4a6e 0x72ae +0x4a6f 0x72b1 +0x4a70 0x72b4 +0x4a71 0x72be +0x4a72 0x72c1 +0x4a73 0x72c7 +0x4a74 0x72c9 +0x4a75 0x72cc +0x4a76 0x72d5 +0x4a77 0x72d6 +0x4a78 0x72d8 +0x4a79 0x72df +0x4a7a 0x72e5 +0x4a7b 0x72f3 +0x4a7c 0x72f4 +0x4a7d 0x72fa +0x4a7e 0x72fb +0x4b21 0x72fe +0x4b22 0x7302 +0x4b23 0x7304 +0x4b24 0x7305 +0x4b25 0x7307 +0x4b26 0x730b +0x4b27 0x730d +0x4b28 0x7312 +0x4b29 0x7313 +0x4b2a 0x7318 +0x4b2b 0x7319 +0x4b2c 0x731e +0x4b2d 0x7322 +0x4b2e 0x7324 +0x4b2f 0x7327 +0x4b30 0x7328 +0x4b31 0x732c +0x4b32 0x7331 +0x4b33 0x7332 +0x4b34 0x7335 +0x4b35 0x733a +0x4b36 0x733b +0x4b37 0x733d +0x4b38 0x7343 +0x4b39 0x734d +0x4b3a 0x7350 +0x4b3b 0x7352 +0x4b3c 0x7356 +0x4b3d 0x7358 +0x4b3e 0x735d +0x4b3f 0x735e +0x4b40 0x735f +0x4b41 0x7360 +0x4b42 0x7366 +0x4b43 0x7367 +0x4b44 0x7369 +0x4b45 0x736b +0x4b46 0x736c +0x4b47 0x736e +0x4b48 0x736f +0x4b49 0x7371 +0x4b4a 0x7377 +0x4b4b 0x7379 +0x4b4c 0x737c +0x4b4d 0x7380 +0x4b4e 0x7381 +0x4b4f 0x7383 +0x4b50 0x7385 +0x4b51 0x7386 +0x4b52 0x738e +0x4b53 0x7390 +0x4b54 0x7393 +0x4b55 0x7395 +0x4b56 0x7397 +0x4b57 0x7398 +0x4b58 0x739c +0x4b59 0x739e +0x4b5a 0x739f +0x4b5b 0x73a0 +0x4b5c 0x73a2 +0x4b5d 0x73a5 +0x4b5e 0x73a6 +0x4b5f 0x73aa +0x4b60 0x73ab +0x4b61 0x73ad +0x4b62 0x73b5 +0x4b63 0x73b7 +0x4b64 0x73b9 +0x4b65 0x73bc +0x4b66 0x73bd +0x4b67 0x73bf +0x4b68 0x73c5 +0x4b69 0x73c6 +0x4b6a 0x73c9 +0x4b6b 0x73cb +0x4b6c 0x73cc +0x4b6d 0x73cf +0x4b6e 0x73d2 +0x4b6f 0x73d3 +0x4b70 0x73d6 +0x4b71 0x73d9 +0x4b72 0x73dd +0x4b73 0x73e1 +0x4b74 0x73e3 +0x4b75 0x73e6 +0x4b76 0x73e7 +0x4b77 0x73e9 +0x4b78 0x73f4 +0x4b79 0x73f5 +0x4b7a 0x73f7 +0x4b7b 0x73f9 +0x4b7c 0x73fa +0x4b7d 0x73fb +0x4b7e 0x73fd +0x4c21 0x73ff +0x4c22 0x7400 +0x4c23 0x7401 +0x4c24 0x7404 +0x4c25 0x7407 +0x4c26 0x740a +0x4c27 0x7411 +0x4c28 0x741a +0x4c29 0x741b +0x4c2a 0x7424 +0x4c2b 0x7426 +0x4c2c 0x7428 +0x4c2d 0x7429 +0x4c2e 0x742a +0x4c2f 0x742b +0x4c30 0x742c +0x4c31 0x742d +0x4c32 0x742e +0x4c33 0x742f +0x4c34 0x7430 +0x4c35 0x7431 +0x4c36 0x7439 +0x4c37 0x7440 +0x4c38 0x7443 +0x4c39 0x7444 +0x4c3a 0x7446 +0x4c3b 0x7447 +0x4c3c 0x744b +0x4c3d 0x744d +0x4c3e 0x7451 +0x4c3f 0x7452 +0x4c40 0x7457 +0x4c41 0x745d +0x4c42 0x7462 +0x4c43 0x7466 +0x4c44 0x7467 +0x4c45 0x7468 +0x4c46 0x746b +0x4c47 0x746d +0x4c48 0x746e +0x4c49 0x7471 +0x4c4a 0x7472 +0x4c4b 0x7480 +0x4c4c 0x7481 +0x4c4d 0x7485 +0x4c4e 0x7486 +0x4c4f 0x7487 +0x4c50 0x7489 +0x4c51 0x748f +0x4c52 0x7490 +0x4c53 0x7491 +0x4c54 0x7492 +0x4c55 0x7498 +0x4c56 0x7499 +0x4c57 0x749a +0x4c58 0x749c +0x4c59 0x749f +0x4c5a 0x74a0 +0x4c5b 0x74a1 +0x4c5c 0x74a3 +0x4c5d 0x74a6 +0x4c5e 0x74a8 +0x4c5f 0x74a9 +0x4c60 0x74aa +0x4c61 0x74ab +0x4c62 0x74ae +0x4c63 0x74af +0x4c64 0x74b1 +0x4c65 0x74b2 +0x4c66 0x74b5 +0x4c67 0x74b9 +0x4c68 0x74bb +0x4c69 0x74bf +0x4c6a 0x74c8 +0x4c6b 0x74c9 +0x4c6c 0x74cc +0x4c6d 0x74d0 +0x4c6e 0x74d3 +0x4c6f 0x74d8 +0x4c70 0x74da +0x4c71 0x74db +0x4c72 0x74de +0x4c73 0x74df +0x4c74 0x74e4 +0x4c75 0x74e8 +0x4c76 0x74ea +0x4c77 0x74eb +0x4c78 0x74ef +0x4c79 0x74f4 +0x4c7a 0x74fa +0x4c7b 0x74fb +0x4c7c 0x74fc +0x4c7d 0x74ff +0x4c7e 0x7506 +0x4d21 0x7512 +0x4d22 0x7516 +0x4d23 0x7517 +0x4d24 0x7520 +0x4d25 0x7521 +0x4d26 0x7524 +0x4d27 0x7527 +0x4d28 0x7529 +0x4d29 0x752a +0x4d2a 0x752f +0x4d2b 0x7536 +0x4d2c 0x7539 +0x4d2d 0x753d +0x4d2e 0x753e +0x4d2f 0x753f +0x4d30 0x7540 +0x4d31 0x7543 +0x4d32 0x7547 +0x4d33 0x7548 +0x4d34 0x754e +0x4d35 0x7550 +0x4d36 0x7552 +0x4d37 0x7557 +0x4d38 0x755e +0x4d39 0x755f +0x4d3a 0x7561 +0x4d3b 0x756f +0x4d3c 0x7571 +0x4d3d 0x7579 +0x4d3e 0x757a +0x4d3f 0x757b +0x4d40 0x757c +0x4d41 0x757d +0x4d42 0x757e +0x4d43 0x7581 +0x4d44 0x7585 +0x4d45 0x7590 +0x4d46 0x7592 +0x4d47 0x7593 +0x4d48 0x7595 +0x4d49 0x7599 +0x4d4a 0x759c +0x4d4b 0x75a2 +0x4d4c 0x75a4 +0x4d4d 0x75b4 +0x4d4e 0x75ba +0x4d4f 0x75bf +0x4d50 0x75c0 +0x4d51 0x75c1 +0x4d52 0x75c4 +0x4d53 0x75c6 +0x4d54 0x75cc +0x4d55 0x75ce +0x4d56 0x75cf +0x4d57 0x75d7 +0x4d58 0x75dc +0x4d59 0x75df +0x4d5a 0x75e0 +0x4d5b 0x75e1 +0x4d5c 0x75e4 +0x4d5d 0x75e7 +0x4d5e 0x75ec +0x4d5f 0x75ee +0x4d60 0x75ef +0x4d61 0x75f1 +0x4d62 0x75f9 +0x4d63 0x7600 +0x4d64 0x7602 +0x4d65 0x7603 +0x4d66 0x7604 +0x4d67 0x7607 +0x4d68 0x7608 +0x4d69 0x760a +0x4d6a 0x760c +0x4d6b 0x760f +0x4d6c 0x7612 +0x4d6d 0x7613 +0x4d6e 0x7615 +0x4d6f 0x7616 +0x4d70 0x7619 +0x4d71 0x761b +0x4d72 0x761c +0x4d73 0x761d +0x4d74 0x761e +0x4d75 0x7623 +0x4d76 0x7625 +0x4d77 0x7626 +0x4d78 0x7629 +0x4d79 0x762d +0x4d7a 0x7632 +0x4d7b 0x7633 +0x4d7c 0x7635 +0x4d7d 0x7638 +0x4d7e 0x7639 +0x4e21 0x763a +0x4e22 0x763c +0x4e23 0x764a +0x4e24 0x7640 +0x4e25 0x7641 +0x4e26 0x7643 +0x4e27 0x7644 +0x4e28 0x7645 +0x4e29 0x7649 +0x4e2a 0x764b +0x4e2b 0x7655 +0x4e2c 0x7659 +0x4e2d 0x765f +0x4e2e 0x7664 +0x4e2f 0x7665 +0x4e30 0x766d +0x4e31 0x766e +0x4e32 0x766f +0x4e33 0x7671 +0x4e34 0x7674 +0x4e35 0x7681 +0x4e36 0x7685 +0x4e37 0x768c +0x4e38 0x768d +0x4e39 0x7695 +0x4e3a 0x769b +0x4e3b 0x769c +0x4e3c 0x769d +0x4e3d 0x769f +0x4e3e 0x76a0 +0x4e3f 0x76a2 +0x4e40 0x76a3 +0x4e41 0x76a4 +0x4e42 0x76a5 +0x4e43 0x76a6 +0x4e44 0x76a7 +0x4e45 0x76a8 +0x4e46 0x76aa +0x4e47 0x76ad +0x4e48 0x76bd +0x4e49 0x76c1 +0x4e4a 0x76c5 +0x4e4b 0x76c9 +0x4e4c 0x76cb +0x4e4d 0x76cc +0x4e4e 0x76ce +0x4e4f 0x76d4 +0x4e50 0x76d9 +0x4e51 0x76e0 +0x4e52 0x76e6 +0x4e53 0x76e8 +0x4e54 0x76ec +0x4e55 0x76f0 +0x4e56 0x76f1 +0x4e57 0x76f6 +0x4e58 0x76f9 +0x4e59 0x76fc +0x4e5a 0x7700 +0x4e5b 0x7706 +0x4e5c 0x770a +0x4e5d 0x770e +0x4e5e 0x7712 +0x4e5f 0x7714 +0x4e60 0x7715 +0x4e61 0x7717 +0x4e62 0x7719 +0x4e63 0x771a +0x4e64 0x771c +0x4e65 0x7722 +0x4e66 0x7728 +0x4e67 0x772d +0x4e68 0x772e +0x4e69 0x772f +0x4e6a 0x7734 +0x4e6b 0x7735 +0x4e6c 0x7736 +0x4e6d 0x7739 +0x4e6e 0x773d +0x4e6f 0x773e +0x4e70 0x7742 +0x4e71 0x7745 +0x4e72 0x7746 +0x4e73 0x774a +0x4e74 0x774d +0x4e75 0x774e +0x4e76 0x774f +0x4e77 0x7752 +0x4e78 0x7756 +0x4e79 0x7757 +0x4e7a 0x775c +0x4e7b 0x775e +0x4e7c 0x775f +0x4e7d 0x7760 +0x4e7e 0x7762 +0x4f21 0x7764 +0x4f22 0x7767 +0x4f23 0x776a +0x4f24 0x776c +0x4f25 0x7770 +0x4f26 0x7772 +0x4f27 0x7773 +0x4f28 0x7774 +0x4f29 0x777a +0x4f2a 0x777d +0x4f2b 0x7780 +0x4f2c 0x7784 +0x4f2d 0x778c +0x4f2e 0x778d +0x4f2f 0x7794 +0x4f30 0x7795 +0x4f31 0x7796 +0x4f32 0x779a +0x4f33 0x779f +0x4f34 0x77a2 +0x4f35 0x77a7 +0x4f36 0x77aa +0x4f37 0x77ae +0x4f38 0x77af +0x4f39 0x77b1 +0x4f3a 0x77b5 +0x4f3b 0x77be +0x4f3c 0x77c3 +0x4f3d 0x77c9 +0x4f3e 0x77d1 +0x4f3f 0x77d2 +0x4f40 0x77d5 +0x4f41 0x77d9 +0x4f42 0x77de +0x4f43 0x77df +0x4f44 0x77e0 +0x4f45 0x77e4 +0x4f46 0x77e6 +0x4f47 0x77ea +0x4f48 0x77ec +0x4f49 0x77f0 +0x4f4a 0x77f1 +0x4f4b 0x77f4 +0x4f4c 0x77f8 +0x4f4d 0x77fb +0x4f4e 0x7805 +0x4f4f 0x7806 +0x4f50 0x7809 +0x4f51 0x780d +0x4f52 0x780e +0x4f53 0x7811 +0x4f54 0x781d +0x4f55 0x7821 +0x4f56 0x7822 +0x4f57 0x7823 +0x4f58 0x782d +0x4f59 0x782e +0x4f5a 0x7830 +0x4f5b 0x7835 +0x4f5c 0x7837 +0x4f5d 0x7843 +0x4f5e 0x7844 +0x4f5f 0x7847 +0x4f60 0x7848 +0x4f61 0x784c +0x4f62 0x784e +0x4f63 0x7852 +0x4f64 0x785c +0x4f65 0x785e +0x4f66 0x7860 +0x4f67 0x7861 +0x4f68 0x7863 +0x4f69 0x7864 +0x4f6a 0x7868 +0x4f6b 0x786a +0x4f6c 0x786e +0x4f6d 0x787a +0x4f6e 0x787e +0x4f6f 0x788a +0x4f70 0x788f +0x4f71 0x7894 +0x4f72 0x7898 +0x4f73 0x78a1 +0x4f74 0x789d +0x4f75 0x789e +0x4f76 0x789f +0x4f77 0x78a4 +0x4f78 0x78a8 +0x4f79 0x78ac +0x4f7a 0x78ad +0x4f7b 0x78b0 +0x4f7c 0x78b1 +0x4f7d 0x78b2 +0x4f7e 0x78b3 +0x5021 0x78bb +0x5022 0x78bd +0x5023 0x78bf +0x5024 0x78c7 +0x5025 0x78c8 +0x5026 0x78c9 +0x5027 0x78cc +0x5028 0x78ce +0x5029 0x78d2 +0x502a 0x78d3 +0x502b 0x78d5 +0x502c 0x78d6 +0x502d 0x78e4 +0x502e 0x78db +0x502f 0x78df +0x5030 0x78e0 +0x5031 0x78e1 +0x5032 0x78e6 +0x5033 0x78ea +0x5034 0x78f2 +0x5035 0x78f3 +0x5036 0x7900 +0x5037 0x78f6 +0x5038 0x78f7 +0x5039 0x78fa +0x503a 0x78fb +0x503b 0x78ff +0x503c 0x7906 +0x503d 0x790c +0x503e 0x7910 +0x503f 0x791a +0x5040 0x791c +0x5041 0x791e +0x5042 0x791f +0x5043 0x7920 +0x5044 0x7925 +0x5045 0x7927 +0x5046 0x7929 +0x5047 0x792d +0x5048 0x7931 +0x5049 0x7934 +0x504a 0x7935 +0x504b 0x793b +0x504c 0x793d +0x504d 0x793f +0x504e 0x7944 +0x504f 0x7945 +0x5050 0x7946 +0x5051 0x794a +0x5052 0x794b +0x5053 0x794f +0x5054 0x7951 +0x5055 0x7954 +0x5056 0x7958 +0x5057 0x795b +0x5058 0x795c +0x5059 0x7967 +0x505a 0x7969 +0x505b 0x796b +0x505c 0x7972 +0x505d 0x7979 +0x505e 0x797b +0x505f 0x797c +0x5060 0x797e +0x5061 0x798b +0x5062 0x798c +0x5063 0x7991 +0x5064 0x7993 +0x5065 0x7994 +0x5066 0x7995 +0x5067 0x7996 +0x5068 0x7998 +0x5069 0x799b +0x506a 0x799c +0x506b 0x79a1 +0x506c 0x79a8 +0x506d 0x79a9 +0x506e 0x79ab +0x506f 0x79af +0x5070 0x79b1 +0x5071 0x79b4 +0x5072 0x79b8 +0x5073 0x79bb +0x5074 0x79c2 +0x5075 0x79c4 +0x5076 0x79c7 +0x5077 0x79c8 +0x5078 0x79ca +0x5079 0x79cf +0x507a 0x79d4 +0x507b 0x79d6 +0x507c 0x79da +0x507d 0x79dd +0x507e 0x79de +0x5121 0x79e0 +0x5122 0x79e2 +0x5123 0x79e5 +0x5124 0x79ea +0x5125 0x79eb +0x5126 0x79ed +0x5127 0x79f1 +0x5128 0x79f8 +0x5129 0x79fc +0x512a 0x7a02 +0x512b 0x7a03 +0x512c 0x7a07 +0x512d 0x7a09 +0x512e 0x7a0a +0x512f 0x7a0c +0x5130 0x7a11 +0x5131 0x7a15 +0x5132 0x7a1b +0x5133 0x7a1e +0x5134 0x7a21 +0x5135 0x7a27 +0x5136 0x7a2b +0x5137 0x7a2d +0x5138 0x7a2f +0x5139 0x7a30 +0x513a 0x7a34 +0x513b 0x7a35 +0x513c 0x7a38 +0x513d 0x7a39 +0x513e 0x7a3a +0x513f 0x7a44 +0x5140 0x7a45 +0x5141 0x7a47 +0x5142 0x7a48 +0x5143 0x7a4c +0x5144 0x7a55 +0x5145 0x7a56 +0x5146 0x7a59 +0x5147 0x7a5c +0x5148 0x7a5d +0x5149 0x7a5f +0x514a 0x7a60 +0x514b 0x7a65 +0x514c 0x7a67 +0x514d 0x7a6a +0x514e 0x7a6d +0x514f 0x7a75 +0x5150 0x7a78 +0x5151 0x7a7e +0x5152 0x7a80 +0x5153 0x7a82 +0x5154 0x7a85 +0x5155 0x7a86 +0x5156 0x7a8a +0x5157 0x7a8b +0x5158 0x7a90 +0x5159 0x7a91 +0x515a 0x7a94 +0x515b 0x7a9e +0x515c 0x7aa0 +0x515d 0x7aa3 +0x515e 0x7aac +0x515f 0x7ab3 +0x5160 0x7ab5 +0x5161 0x7ab9 +0x5162 0x7abb +0x5163 0x7abc +0x5164 0x7ac6 +0x5165 0x7ac9 +0x5166 0x7acc +0x5167 0x7ace +0x5168 0x7ad1 +0x5169 0x7adb +0x516a 0x7ae8 +0x516b 0x7ae9 +0x516c 0x7aeb +0x516d 0x7aec +0x516e 0x7af1 +0x516f 0x7af4 +0x5170 0x7afb +0x5171 0x7afd +0x5172 0x7afe +0x5173 0x7b07 +0x5174 0x7b14 +0x5175 0x7b1f +0x5176 0x7b23 +0x5177 0x7b27 +0x5178 0x7b29 +0x5179 0x7b2a +0x517a 0x7b2b +0x517b 0x7b2d +0x517c 0x7b2e +0x517d 0x7b2f +0x517e 0x7b30 +0x5221 0x7b31 +0x5222 0x7b34 +0x5223 0x7b3d +0x5224 0x7b3f +0x5225 0x7b40 +0x5226 0x7b41 +0x5227 0x7b47 +0x5228 0x7b4e +0x5229 0x7b55 +0x522a 0x7b60 +0x522b 0x7b64 +0x522c 0x7b66 +0x522d 0x7b69 +0x522e 0x7b6a +0x522f 0x7b6d +0x5230 0x7b6f +0x5231 0x7b72 +0x5232 0x7b73 +0x5233 0x7b77 +0x5234 0x7b84 +0x5235 0x7b89 +0x5236 0x7b8e +0x5237 0x7b90 +0x5238 0x7b91 +0x5239 0x7b96 +0x523a 0x7b9b +0x523b 0x7b9e +0x523c 0x7ba0 +0x523d 0x7ba5 +0x523e 0x7bac +0x523f 0x7baf +0x5240 0x7bb0 +0x5241 0x7bb2 +0x5242 0x7bb5 +0x5243 0x7bb6 +0x5244 0x7bba +0x5245 0x7bbb +0x5246 0x7bbc +0x5247 0x7bbd +0x5248 0x7bc2 +0x5249 0x7bc5 +0x524a 0x7bc8 +0x524b 0x7bca +0x524c 0x7bd4 +0x524d 0x7bd6 +0x524e 0x7bd7 +0x524f 0x7bd9 +0x5250 0x7bda +0x5251 0x7bdb +0x5252 0x7be8 +0x5253 0x7bea +0x5254 0x7bf2 +0x5255 0x7bf4 +0x5256 0x7bf5 +0x5257 0x7bf8 +0x5258 0x7bf9 +0x5259 0x7bfa +0x525a 0x7bfc +0x525b 0x7bfe +0x525c 0x7c01 +0x525d 0x7c02 +0x525e 0x7c03 +0x525f 0x7c04 +0x5260 0x7c06 +0x5261 0x7c09 +0x5262 0x7c0b +0x5263 0x7c0c +0x5264 0x7c0e +0x5265 0x7c0f +0x5266 0x7c19 +0x5267 0x7c1b +0x5268 0x7c20 +0x5269 0x7c25 +0x526a 0x7c26 +0x526b 0x7c28 +0x526c 0x7c2c +0x526d 0x7c31 +0x526e 0x7c33 +0x526f 0x7c34 +0x5270 0x7c36 +0x5271 0x7c39 +0x5272 0x7c3a +0x5273 0x7c46 +0x5274 0x7c4a +0x5275 0x7c55 +0x5276 0x7c51 +0x5277 0x7c52 +0x5278 0x7c53 +0x5279 0x7c59 +0x527a 0x7c5a +0x527b 0x7c5b +0x527c 0x7c5c +0x527d 0x7c5d +0x527e 0x7c5e +0x5321 0x7c61 +0x5322 0x7c63 +0x5323 0x7c67 +0x5324 0x7c69 +0x5325 0x7c6d +0x5326 0x7c6e +0x5327 0x7c70 +0x5328 0x7c72 +0x5329 0x7c79 +0x532a 0x7c7c +0x532b 0x7c7d +0x532c 0x7c86 +0x532d 0x7c87 +0x532e 0x7c8f +0x532f 0x7c94 +0x5330 0x7c9e +0x5331 0x7ca0 +0x5332 0x7ca6 +0x5333 0x7cb0 +0x5334 0x7cb6 +0x5335 0x7cb7 +0x5336 0x7cba +0x5337 0x7cbb +0x5338 0x7cbc +0x5339 0x7cbf +0x533a 0x7cc4 +0x533b 0x7cc7 +0x533c 0x7cc8 +0x533d 0x7cc9 +0x533e 0x7ccd +0x533f 0x7ccf +0x5340 0x7cd3 +0x5341 0x7cd4 +0x5342 0x7cd5 +0x5343 0x7cd7 +0x5344 0x7cd9 +0x5345 0x7cda +0x5346 0x7cdd +0x5347 0x7ce6 +0x5348 0x7ce9 +0x5349 0x7ceb +0x534a 0x7cf5 +0x534b 0x7d03 +0x534c 0x7d07 +0x534d 0x7d08 +0x534e 0x7d09 +0x534f 0x7d0f +0x5350 0x7d11 +0x5351 0x7d12 +0x5352 0x7d13 +0x5353 0x7d16 +0x5354 0x7d1d +0x5355 0x7d1e +0x5356 0x7d23 +0x5357 0x7d26 +0x5358 0x7d2a +0x5359 0x7d2d +0x535a 0x7d31 +0x535b 0x7d3c +0x535c 0x7d3d +0x535d 0x7d3e +0x535e 0x7d40 +0x535f 0x7d41 +0x5360 0x7d47 +0x5361 0x7d48 +0x5362 0x7d4d +0x5363 0x7d51 +0x5364 0x7d53 +0x5365 0x7d57 +0x5366 0x7d59 +0x5367 0x7d5a +0x5368 0x7d5c +0x5369 0x7d5d +0x536a 0x7d65 +0x536b 0x7d67 +0x536c 0x7d6a +0x536d 0x7d70 +0x536e 0x7d78 +0x536f 0x7d7a +0x5370 0x7d7b +0x5371 0x7d7f +0x5372 0x7d81 +0x5373 0x7d82 +0x5374 0x7d83 +0x5375 0x7d85 +0x5376 0x7d86 +0x5377 0x7d88 +0x5378 0x7d8b +0x5379 0x7d8c +0x537a 0x7d8d +0x537b 0x7d91 +0x537c 0x7d96 +0x537d 0x7d97 +0x537e 0x7d9d +0x5421 0x7d9e +0x5422 0x7da6 +0x5423 0x7da7 +0x5424 0x7daa +0x5425 0x7db3 +0x5426 0x7db6 +0x5427 0x7db7 +0x5428 0x7db9 +0x5429 0x7dc2 +0x542a 0x7dc3 +0x542b 0x7dc4 +0x542c 0x7dc5 +0x542d 0x7dc6 +0x542e 0x7dcc +0x542f 0x7dcd +0x5430 0x7dce +0x5431 0x7dd7 +0x5432 0x7dd9 +0x5433 0x7e00 +0x5434 0x7de2 +0x5435 0x7de5 +0x5436 0x7de6 +0x5437 0x7dea +0x5438 0x7deb +0x5439 0x7ded +0x543a 0x7df1 +0x543b 0x7df5 +0x543c 0x7df6 +0x543d 0x7df9 +0x543e 0x7dfa +0x543f 0x7e08 +0x5440 0x7e10 +0x5441 0x7e11 +0x5442 0x7e15 +0x5443 0x7e17 +0x5444 0x7e1c +0x5445 0x7e1d +0x5446 0x7e20 +0x5447 0x7e27 +0x5448 0x7e28 +0x5449 0x7e2c +0x544a 0x7e2d +0x544b 0x7e2f +0x544c 0x7e33 +0x544d 0x7e36 +0x544e 0x7e3f +0x544f 0x7e44 +0x5450 0x7e45 +0x5451 0x7e47 +0x5452 0x7e4e +0x5453 0x7e50 +0x5454 0x7e52 +0x5455 0x7e58 +0x5456 0x7e5f +0x5457 0x7e61 +0x5458 0x7e62 +0x5459 0x7e65 +0x545a 0x7e6b +0x545b 0x7e6e +0x545c 0x7e6f +0x545d 0x7e73 +0x545e 0x7e78 +0x545f 0x7e7e +0x5460 0x7e81 +0x5461 0x7e86 +0x5462 0x7e87 +0x5463 0x7e8a +0x5464 0x7e8d +0x5465 0x7e91 +0x5466 0x7e95 +0x5467 0x7e98 +0x5468 0x7e9a +0x5469 0x7e9d +0x546a 0x7e9e +0x546b 0x7f3c +0x546c 0x7f3b +0x546d 0x7f3d +0x546e 0x7f3e +0x546f 0x7f3f +0x5470 0x7f43 +0x5471 0x7f44 +0x5472 0x7f47 +0x5473 0x7f4f +0x5474 0x7f52 +0x5475 0x7f53 +0x5476 0x7f5b +0x5477 0x7f5c +0x5478 0x7f5d +0x5479 0x7f61 +0x547a 0x7f63 +0x547b 0x7f64 +0x547c 0x7f65 +0x547d 0x7f66 +0x547e 0x7f6d +0x5521 0x7f71 +0x5522 0x7f7d +0x5523 0x7f7e +0x5524 0x7f7f +0x5525 0x7f80 +0x5526 0x7f8b +0x5527 0x7f8d +0x5528 0x7f8f +0x5529 0x7f90 +0x552a 0x7f91 +0x552b 0x7f96 +0x552c 0x7f97 +0x552d 0x7f9c +0x552e 0x7fa1 +0x552f 0x7fa2 +0x5530 0x7fa6 +0x5531 0x7faa +0x5532 0x7fad +0x5533 0x7fb4 +0x5534 0x7fbc +0x5535 0x7fbf +0x5536 0x7fc0 +0x5537 0x7fc3 +0x5538 0x7fc8 +0x5539 0x7fce +0x553a 0x7fcf +0x553b 0x7fdb +0x553c 0x7fdf +0x553d 0x7fe3 +0x553e 0x7fe5 +0x553f 0x7fe8 +0x5540 0x7fec +0x5541 0x7fee +0x5542 0x7fef +0x5543 0x7ff2 +0x5544 0x7ffa +0x5545 0x7ffd +0x5546 0x7ffe +0x5547 0x7fff +0x5548 0x8007 +0x5549 0x8008 +0x554a 0x800a +0x554b 0x800d +0x554c 0x800e +0x554d 0x800f +0x554e 0x8011 +0x554f 0x8013 +0x5550 0x8014 +0x5551 0x8016 +0x5552 0x801d +0x5553 0x801e +0x5554 0x801f +0x5555 0x8020 +0x5556 0x8024 +0x5557 0x8026 +0x5558 0x802c +0x5559 0x802e +0x555a 0x8030 +0x555b 0x8034 +0x555c 0x8035 +0x555d 0x8037 +0x555e 0x8039 +0x555f 0x803a +0x5560 0x803c +0x5561 0x803e +0x5562 0x8040 +0x5563 0x8044 +0x5564 0x8060 +0x5565 0x8064 +0x5566 0x8066 +0x5567 0x806d +0x5568 0x8071 +0x5569 0x8075 +0x556a 0x8081 +0x556b 0x8088 +0x556c 0x808e +0x556d 0x809c +0x556e 0x809e +0x556f 0x80a6 +0x5570 0x80a7 +0x5571 0x80ab +0x5572 0x80b8 +0x5573 0x80b9 +0x5574 0x80c8 +0x5575 0x80cd +0x5576 0x80cf +0x5577 0x80d2 +0x5578 0x80d4 +0x5579 0x80d5 +0x557a 0x80d7 +0x557b 0x80d8 +0x557c 0x80e0 +0x557d 0x80ed +0x557e 0x80ee +0x5621 0x80f0 +0x5622 0x80f2 +0x5623 0x80f3 +0x5624 0x80f6 +0x5625 0x80f9 +0x5626 0x80fa +0x5627 0x80fe +0x5628 0x8103 +0x5629 0x810b +0x562a 0x8116 +0x562b 0x8117 +0x562c 0x8118 +0x562d 0x811c +0x562e 0x811e +0x562f 0x8120 +0x5630 0x8124 +0x5631 0x8127 +0x5632 0x812c +0x5633 0x8130 +0x5634 0x8135 +0x5635 0x813a +0x5636 0x813c +0x5637 0x8145 +0x5638 0x8147 +0x5639 0x814a +0x563a 0x814c +0x563b 0x8152 +0x563c 0x8157 +0x563d 0x8160 +0x563e 0x8161 +0x563f 0x8167 +0x5640 0x8168 +0x5641 0x8169 +0x5642 0x816d +0x5643 0x816f +0x5644 0x8177 +0x5645 0x8181 +0x5646 0x8190 +0x5647 0x8184 +0x5648 0x8185 +0x5649 0x8186 +0x564a 0x818b +0x564b 0x818e +0x564c 0x8196 +0x564d 0x8198 +0x564e 0x819b +0x564f 0x819e +0x5650 0x81a2 +0x5651 0x81ae +0x5652 0x81b2 +0x5653 0x81b4 +0x5654 0x81bb +0x5655 0x81cb +0x5656 0x81c3 +0x5657 0x81c5 +0x5658 0x81ca +0x5659 0x81ce +0x565a 0x81cf +0x565b 0x81d5 +0x565c 0x81d7 +0x565d 0x81db +0x565e 0x81dd +0x565f 0x81de +0x5660 0x81e1 +0x5661 0x81e4 +0x5662 0x81eb +0x5663 0x81ec +0x5664 0x81f0 +0x5665 0x81f1 +0x5666 0x81f2 +0x5667 0x81f5 +0x5668 0x81f6 +0x5669 0x81f8 +0x566a 0x81f9 +0x566b 0x81fd +0x566c 0x81ff +0x566d 0x8200 +0x566e 0x8203 +0x566f 0x820f +0x5670 0x8213 +0x5671 0x8214 +0x5672 0x8219 +0x5673 0x821a +0x5674 0x821d +0x5675 0x8221 +0x5676 0x8222 +0x5677 0x8228 +0x5678 0x8232 +0x5679 0x8234 +0x567a 0x823a +0x567b 0x8243 +0x567c 0x8244 +0x567d 0x8245 +0x567e 0x8246 +0x5721 0x824b +0x5722 0x824e +0x5723 0x824f +0x5724 0x8251 +0x5725 0x8256 +0x5726 0x825c +0x5727 0x8260 +0x5728 0x8263 +0x5729 0x8267 +0x572a 0x826d +0x572b 0x8274 +0x572c 0x827b +0x572d 0x827d +0x572e 0x827f +0x572f 0x8280 +0x5730 0x8281 +0x5731 0x8283 +0x5732 0x8284 +0x5733 0x8287 +0x5734 0x8289 +0x5735 0x828a +0x5736 0x828e +0x5737 0x8291 +0x5738 0x8294 +0x5739 0x8296 +0x573a 0x8298 +0x573b 0x829a +0x573c 0x829b +0x573d 0x82a0 +0x573e 0x82a1 +0x573f 0x82a3 +0x5740 0x82a4 +0x5741 0x82a7 +0x5742 0x82a8 +0x5743 0x82a9 +0x5744 0x82aa +0x5745 0x82ae +0x5746 0x82b0 +0x5747 0x82b2 +0x5748 0x82b4 +0x5749 0x82b7 +0x574a 0x82ba +0x574b 0x82bc +0x574c 0x82be +0x574d 0x82bf +0x574e 0x82c6 +0x574f 0x82d0 +0x5750 0x82d5 +0x5751 0x82da +0x5752 0x82e0 +0x5753 0x82e2 +0x5754 0x82e4 +0x5755 0x82e8 +0x5756 0x82ea +0x5757 0x82ed +0x5758 0x82ef +0x5759 0x82f6 +0x575a 0x82f7 +0x575b 0x82fd +0x575c 0x82fe +0x575d 0x8300 +0x575e 0x8301 +0x575f 0x8307 +0x5760 0x8308 +0x5761 0x830a +0x5762 0x830b +0x5763 0x8354 +0x5764 0x831b +0x5765 0x831d +0x5766 0x831e +0x5767 0x831f +0x5768 0x8321 +0x5769 0x8322 +0x576a 0x832c +0x576b 0x832d +0x576c 0x832e +0x576d 0x8330 +0x576e 0x8333 +0x576f 0x8337 +0x5770 0x833a +0x5771 0x833c +0x5772 0x833d +0x5773 0x8342 +0x5774 0x8343 +0x5775 0x8344 +0x5776 0x8347 +0x5777 0x834d +0x5778 0x834e +0x5779 0x8351 +0x577a 0x8355 +0x577b 0x8356 +0x577c 0x8357 +0x577d 0x8370 +0x577e 0x8378 +0x5821 0x837d +0x5822 0x837f +0x5823 0x8380 +0x5824 0x8382 +0x5825 0x8384 +0x5826 0x8386 +0x5827 0x838d +0x5828 0x8392 +0x5829 0x8394 +0x582a 0x8395 +0x582b 0x8398 +0x582c 0x8399 +0x582d 0x839b +0x582e 0x839c +0x582f 0x839d +0x5830 0x83a6 +0x5831 0x83a7 +0x5832 0x83a9 +0x5833 0x83ac +0x5834 0x83be +0x5835 0x83bf +0x5836 0x83c0 +0x5837 0x83c7 +0x5838 0x83c9 +0x5839 0x83cf +0x583a 0x83d0 +0x583b 0x83d1 +0x583c 0x83d4 +0x583d 0x83dd +0x583e 0x8353 +0x583f 0x83e8 +0x5840 0x83ea +0x5841 0x83f6 +0x5842 0x83f8 +0x5843 0x83f9 +0x5844 0x83fc +0x5845 0x8401 +0x5846 0x8406 +0x5847 0x840a +0x5848 0x840f +0x5849 0x8411 +0x584a 0x8415 +0x584b 0x8419 +0x584c 0x83ad +0x584d 0x842f +0x584e 0x8439 +0x584f 0x8445 +0x5850 0x8447 +0x5851 0x8448 +0x5852 0x844a +0x5853 0x844d +0x5854 0x844f +0x5855 0x8451 +0x5856 0x8452 +0x5857 0x8456 +0x5858 0x8458 +0x5859 0x8459 +0x585a 0x845a +0x585b 0x845c +0x585c 0x8460 +0x585d 0x8464 +0x585e 0x8465 +0x585f 0x8467 +0x5860 0x846a +0x5861 0x8470 +0x5862 0x8473 +0x5863 0x8474 +0x5864 0x8476 +0x5865 0x8478 +0x5866 0x847c +0x5867 0x847d +0x5868 0x8481 +0x5869 0x8485 +0x586a 0x8492 +0x586b 0x8493 +0x586c 0x8495 +0x586d 0x849e +0x586e 0x84a6 +0x586f 0x84a8 +0x5870 0x84a9 +0x5871 0x84aa +0x5872 0x84af +0x5873 0x84b1 +0x5874 0x84b4 +0x5875 0x84ba +0x5876 0x84bd +0x5877 0x84be +0x5878 0x84c0 +0x5879 0x84c2 +0x587a 0x84c7 +0x587b 0x84c8 +0x587c 0x84cc +0x587d 0x84cf +0x587e 0x84d3 +0x5921 0x84dc +0x5922 0x84e7 +0x5923 0x84ea +0x5924 0x84ef +0x5925 0x84f0 +0x5926 0x84f1 +0x5927 0x84f2 +0x5928 0x84f7 +0x5929 0x8532 +0x592a 0x84fa +0x592b 0x84fb +0x592c 0x84fd +0x592d 0x8502 +0x592e 0x8503 +0x592f 0x8507 +0x5930 0x850c +0x5931 0x850e +0x5932 0x8510 +0x5933 0x851c +0x5934 0x851e +0x5935 0x8522 +0x5936 0x8523 +0x5937 0x8524 +0x5938 0x8525 +0x5939 0x8527 +0x593a 0x852a +0x593b 0x852b +0x593c 0x852f +0x593d 0x8533 +0x593e 0x8534 +0x593f 0x8536 +0x5940 0x853f +0x5941 0x8546 +0x5942 0x854f +0x5943 0x8550 +0x5944 0x8551 +0x5945 0x8552 +0x5946 0x8553 +0x5947 0x8556 +0x5948 0x8559 +0x5949 0x855c +0x594a 0x855d +0x594b 0x855e +0x594c 0x855f +0x594d 0x8560 +0x594e 0x8561 +0x594f 0x8562 +0x5950 0x8564 +0x5951 0x856b +0x5952 0x856f +0x5953 0x8579 +0x5954 0x857a +0x5955 0x857b +0x5956 0x857d +0x5957 0x857f +0x5958 0x8581 +0x5959 0x8585 +0x595a 0x8586 +0x595b 0x8589 +0x595c 0x858b +0x595d 0x858c +0x595e 0x858f +0x595f 0x8593 +0x5960 0x8598 +0x5961 0x859d +0x5962 0x859f +0x5963 0x85a0 +0x5964 0x85a2 +0x5965 0x85a5 +0x5966 0x85a7 +0x5967 0x85b4 +0x5968 0x85b6 +0x5969 0x85b7 +0x596a 0x85b8 +0x596b 0x85bc +0x596c 0x85bd +0x596d 0x85be +0x596e 0x85bf +0x596f 0x85c2 +0x5970 0x85c7 +0x5971 0x85ca +0x5972 0x85cb +0x5973 0x85ce +0x5974 0x85ad +0x5975 0x85d8 +0x5976 0x85da +0x5977 0x85df +0x5978 0x85e0 +0x5979 0x85e6 +0x597a 0x85e8 +0x597b 0x85ed +0x597c 0x85f3 +0x597d 0x85f6 +0x597e 0x85fc +0x5a21 0x85ff +0x5a22 0x8600 +0x5a23 0x8604 +0x5a24 0x8605 +0x5a25 0x860d +0x5a26 0x860e +0x5a27 0x8610 +0x5a28 0x8611 +0x5a29 0x8612 +0x5a2a 0x8618 +0x5a2b 0x8619 +0x5a2c 0x861b +0x5a2d 0x861e +0x5a2e 0x8621 +0x5a2f 0x8627 +0x5a30 0x8629 +0x5a31 0x8636 +0x5a32 0x8638 +0x5a33 0x863a +0x5a34 0x863c +0x5a35 0x863d +0x5a36 0x8640 +0x5a37 0x8642 +0x5a38 0x8646 +0x5a39 0x8652 +0x5a3a 0x8653 +0x5a3b 0x8656 +0x5a3c 0x8657 +0x5a3d 0x8658 +0x5a3e 0x8659 +0x5a3f 0x865d +0x5a40 0x8660 +0x5a41 0x8661 +0x5a42 0x8662 +0x5a43 0x8663 +0x5a44 0x8664 +0x5a45 0x8669 +0x5a46 0x866c +0x5a47 0x866f +0x5a48 0x8675 +0x5a49 0x8676 +0x5a4a 0x8677 +0x5a4b 0x867a +0x5a4c 0x868d +0x5a4d 0x8691 +0x5a4e 0x8696 +0x5a4f 0x8698 +0x5a50 0x869a +0x5a51 0x869c +0x5a52 0x86a1 +0x5a53 0x86a6 +0x5a54 0x86a7 +0x5a55 0x86a8 +0x5a56 0x86ad +0x5a57 0x86b1 +0x5a58 0x86b3 +0x5a59 0x86b4 +0x5a5a 0x86b5 +0x5a5b 0x86b7 +0x5a5c 0x86b8 +0x5a5d 0x86b9 +0x5a5e 0x86bf +0x5a5f 0x86c0 +0x5a60 0x86c1 +0x5a61 0x86c3 +0x5a62 0x86c5 +0x5a63 0x86d1 +0x5a64 0x86d2 +0x5a65 0x86d5 +0x5a66 0x86d7 +0x5a67 0x86da +0x5a68 0x86dc +0x5a69 0x86e0 +0x5a6a 0x86e3 +0x5a6b 0x86e5 +0x5a6c 0x86e7 +0x5a6d 0x8688 +0x5a6e 0x86fa +0x5a6f 0x86fc +0x5a70 0x86fd +0x5a71 0x8704 +0x5a72 0x8705 +0x5a73 0x8707 +0x5a74 0x870b +0x5a75 0x870e +0x5a76 0x870f +0x5a77 0x8710 +0x5a78 0x8713 +0x5a79 0x8714 +0x5a7a 0x8719 +0x5a7b 0x871e +0x5a7c 0x871f +0x5a7d 0x8721 +0x5a7e 0x8723 +0x5b21 0x8728 +0x5b22 0x872e +0x5b23 0x872f +0x5b24 0x8731 +0x5b25 0x8732 +0x5b26 0x8739 +0x5b27 0x873a +0x5b28 0x873c +0x5b29 0x873d +0x5b2a 0x873e +0x5b2b 0x8740 +0x5b2c 0x8743 +0x5b2d 0x8745 +0x5b2e 0x874d +0x5b2f 0x8758 +0x5b30 0x875d +0x5b31 0x8761 +0x5b32 0x8764 +0x5b33 0x8765 +0x5b34 0x876f +0x5b35 0x8771 +0x5b36 0x8772 +0x5b37 0x877b +0x5b38 0x8783 +0x5b39 0x8784 +0x5b3a 0x8785 +0x5b3b 0x8786 +0x5b3c 0x8787 +0x5b3d 0x8788 +0x5b3e 0x8789 +0x5b3f 0x878b +0x5b40 0x878c +0x5b41 0x8790 +0x5b42 0x8793 +0x5b43 0x8795 +0x5b44 0x8797 +0x5b45 0x8798 +0x5b46 0x8799 +0x5b47 0x879e +0x5b48 0x87a0 +0x5b49 0x87a3 +0x5b4a 0x87a7 +0x5b4b 0x87ac +0x5b4c 0x87ad +0x5b4d 0x87ae +0x5b4e 0x87b1 +0x5b4f 0x87b5 +0x5b50 0x87be +0x5b51 0x87bf +0x5b52 0x87c1 +0x5b53 0x87c8 +0x5b54 0x87c9 +0x5b55 0x87ca +0x5b56 0x87ce +0x5b57 0x87d5 +0x5b58 0x87d6 +0x5b59 0x87d9 +0x5b5a 0x87da +0x5b5b 0x87dc +0x5b5c 0x87df +0x5b5d 0x87e2 +0x5b5e 0x87e3 +0x5b5f 0x87e4 +0x5b60 0x87ea +0x5b61 0x87eb +0x5b62 0x87ed +0x5b63 0x87f1 +0x5b64 0x87f3 +0x5b65 0x87f8 +0x5b66 0x87fa +0x5b67 0x87ff +0x5b68 0x8801 +0x5b69 0x8803 +0x5b6a 0x8806 +0x5b6b 0x8809 +0x5b6c 0x880a +0x5b6d 0x880b +0x5b6e 0x8810 +0x5b6f 0x8819 +0x5b70 0x8812 +0x5b71 0x8813 +0x5b72 0x8814 +0x5b73 0x8818 +0x5b74 0x881a +0x5b75 0x881b +0x5b76 0x881c +0x5b77 0x881e +0x5b78 0x881f +0x5b79 0x8828 +0x5b7a 0x882d +0x5b7b 0x882e +0x5b7c 0x8830 +0x5b7d 0x8832 +0x5b7e 0x8835 +0x5c21 0x883a +0x5c22 0x883c +0x5c23 0x8841 +0x5c24 0x8843 +0x5c25 0x8845 +0x5c26 0x8848 +0x5c27 0x8849 +0x5c28 0x884a +0x5c29 0x884b +0x5c2a 0x884e +0x5c2b 0x8851 +0x5c2c 0x8855 +0x5c2d 0x8856 +0x5c2e 0x8858 +0x5c2f 0x885a +0x5c30 0x885c +0x5c31 0x885f +0x5c32 0x8860 +0x5c33 0x8864 +0x5c34 0x8869 +0x5c35 0x8871 +0x5c36 0x8879 +0x5c37 0x887b +0x5c38 0x8880 +0x5c39 0x8898 +0x5c3a 0x889a +0x5c3b 0x889b +0x5c3c 0x889c +0x5c3d 0x889f +0x5c3e 0x88a0 +0x5c3f 0x88a8 +0x5c40 0x88aa +0x5c41 0x88ba +0x5c42 0x88bd +0x5c43 0x88be +0x5c44 0x88c0 +0x5c45 0x88ca +0x5c46 0x88cb +0x5c47 0x88cc +0x5c48 0x88cd +0x5c49 0x88ce +0x5c4a 0x88d1 +0x5c4b 0x88d2 +0x5c4c 0x88d3 +0x5c4d 0x88db +0x5c4e 0x88de +0x5c4f 0x88e7 +0x5c50 0x88ef +0x5c51 0x88f0 +0x5c52 0x88f1 +0x5c53 0x88f5 +0x5c54 0x88f7 +0x5c55 0x8901 +0x5c56 0x8906 +0x5c57 0x890d +0x5c58 0x890e +0x5c59 0x890f +0x5c5a 0x8915 +0x5c5b 0x8916 +0x5c5c 0x8918 +0x5c5d 0x8919 +0x5c5e 0x891a +0x5c5f 0x891c +0x5c60 0x8920 +0x5c61 0x8926 +0x5c62 0x8927 +0x5c63 0x8928 +0x5c64 0x8930 +0x5c65 0x8931 +0x5c66 0x8932 +0x5c67 0x8935 +0x5c68 0x8939 +0x5c69 0x893a +0x5c6a 0x893e +0x5c6b 0x8940 +0x5c6c 0x8942 +0x5c6d 0x8945 +0x5c6e 0x8946 +0x5c6f 0x8949 +0x5c70 0x894f +0x5c71 0x8952 +0x5c72 0x8957 +0x5c73 0x895a +0x5c74 0x895b +0x5c75 0x895c +0x5c76 0x8961 +0x5c77 0x8962 +0x5c78 0x8963 +0x5c79 0x896b +0x5c7a 0x896e +0x5c7b 0x8970 +0x5c7c 0x8973 +0x5c7d 0x8975 +0x5c7e 0x897a +0x5d21 0x897b +0x5d22 0x897c +0x5d23 0x897d +0x5d24 0x8989 +0x5d25 0x898d +0x5d26 0x8990 +0x5d27 0x8994 +0x5d28 0x8995 +0x5d29 0x899b +0x5d2a 0x899c +0x5d2b 0x899f +0x5d2c 0x89a0 +0x5d2d 0x89a5 +0x5d2e 0x89b0 +0x5d2f 0x89b4 +0x5d30 0x89b5 +0x5d31 0x89b6 +0x5d32 0x89b7 +0x5d33 0x89bc +0x5d34 0x89d4 +0x5d35 0x89d5 +0x5d36 0x89d6 +0x5d37 0x89d7 +0x5d38 0x89d8 +0x5d39 0x89e5 +0x5d3a 0x89e9 +0x5d3b 0x89eb +0x5d3c 0x89ed +0x5d3d 0x89f1 +0x5d3e 0x89f3 +0x5d3f 0x89f6 +0x5d40 0x89f9 +0x5d41 0x89fd +0x5d42 0x89ff +0x5d43 0x8a04 +0x5d44 0x8a05 +0x5d45 0x8a07 +0x5d46 0x8a0f +0x5d47 0x8a11 +0x5d48 0x8a12 +0x5d49 0x8a14 +0x5d4a 0x8a15 +0x5d4b 0x8a1e +0x5d4c 0x8a20 +0x5d4d 0x8a22 +0x5d4e 0x8a24 +0x5d4f 0x8a26 +0x5d50 0x8a2b +0x5d51 0x8a2c +0x5d52 0x8a2f +0x5d53 0x8a35 +0x5d54 0x8a37 +0x5d55 0x8a3d +0x5d56 0x8a3e +0x5d57 0x8a40 +0x5d58 0x8a43 +0x5d59 0x8a45 +0x5d5a 0x8a47 +0x5d5b 0x8a49 +0x5d5c 0x8a4d +0x5d5d 0x8a4e +0x5d5e 0x8a53 +0x5d5f 0x8a56 +0x5d60 0x8a57 +0x5d61 0x8a58 +0x5d62 0x8a5c +0x5d63 0x8a5d +0x5d64 0x8a61 +0x5d65 0x8a65 +0x5d66 0x8a67 +0x5d67 0x8a75 +0x5d68 0x8a76 +0x5d69 0x8a77 +0x5d6a 0x8a79 +0x5d6b 0x8a7a +0x5d6c 0x8a7b +0x5d6d 0x8a7e +0x5d6e 0x8a7f +0x5d6f 0x8a80 +0x5d70 0x8a83 +0x5d71 0x8a86 +0x5d72 0x8a8b +0x5d73 0x8a8f +0x5d74 0x8a90 +0x5d75 0x8a92 +0x5d76 0x8a96 +0x5d77 0x8a97 +0x5d78 0x8a99 +0x5d79 0x8a9f +0x5d7a 0x8aa7 +0x5d7b 0x8aa9 +0x5d7c 0x8aae +0x5d7d 0x8aaf +0x5d7e 0x8ab3 +0x5e21 0x8ab6 +0x5e22 0x8ab7 +0x5e23 0x8abb +0x5e24 0x8abe +0x5e25 0x8ac3 +0x5e26 0x8ac6 +0x5e27 0x8ac8 +0x5e28 0x8ac9 +0x5e29 0x8aca +0x5e2a 0x8ad1 +0x5e2b 0x8ad3 +0x5e2c 0x8ad4 +0x5e2d 0x8ad5 +0x5e2e 0x8ad7 +0x5e2f 0x8add +0x5e30 0x8adf +0x5e31 0x8aec +0x5e32 0x8af0 +0x5e33 0x8af4 +0x5e34 0x8af5 +0x5e35 0x8af6 +0x5e36 0x8afc +0x5e37 0x8aff +0x5e38 0x8b05 +0x5e39 0x8b06 +0x5e3a 0x8b0b +0x5e3b 0x8b11 +0x5e3c 0x8b1c +0x5e3d 0x8b1e +0x5e3e 0x8b1f +0x5e3f 0x8b0a +0x5e40 0x8b2d +0x5e41 0x8b30 +0x5e42 0x8b37 +0x5e43 0x8b3c +0x5e44 0x8b42 +0x5e45 0x8b43 +0x5e46 0x8b44 +0x5e47 0x8b45 +0x5e48 0x8b46 +0x5e49 0x8b48 +0x5e4a 0x8b52 +0x5e4b 0x8b53 +0x5e4c 0x8b54 +0x5e4d 0x8b59 +0x5e4e 0x8b4d +0x5e4f 0x8b5e +0x5e50 0x8b63 +0x5e51 0x8b6d +0x5e52 0x8b76 +0x5e53 0x8b78 +0x5e54 0x8b79 +0x5e55 0x8b7c +0x5e56 0x8b7e +0x5e57 0x8b81 +0x5e58 0x8b84 +0x5e59 0x8b85 +0x5e5a 0x8b8b +0x5e5b 0x8b8d +0x5e5c 0x8b8f +0x5e5d 0x8b94 +0x5e5e 0x8b95 +0x5e5f 0x8b9c +0x5e60 0x8b9e +0x5e61 0x8b9f +0x5e62 0x8c38 +0x5e63 0x8c39 +0x5e64 0x8c3d +0x5e65 0x8c3e +0x5e66 0x8c45 +0x5e67 0x8c47 +0x5e68 0x8c49 +0x5e69 0x8c4b +0x5e6a 0x8c4f +0x5e6b 0x8c51 +0x5e6c 0x8c53 +0x5e6d 0x8c54 +0x5e6e 0x8c57 +0x5e6f 0x8c58 +0x5e70 0x8c5b +0x5e71 0x8c5d +0x5e72 0x8c59 +0x5e73 0x8c63 +0x5e74 0x8c64 +0x5e75 0x8c66 +0x5e76 0x8c68 +0x5e77 0x8c69 +0x5e78 0x8c6d +0x5e79 0x8c73 +0x5e7a 0x8c75 +0x5e7b 0x8c76 +0x5e7c 0x8c7b +0x5e7d 0x8c7e +0x5e7e 0x8c86 +0x5f21 0x8c87 +0x5f22 0x8c8b +0x5f23 0x8c90 +0x5f24 0x8c92 +0x5f25 0x8c93 +0x5f26 0x8c99 +0x5f27 0x8c9b +0x5f28 0x8c9c +0x5f29 0x8ca4 +0x5f2a 0x8cb9 +0x5f2b 0x8cba +0x5f2c 0x8cc5 +0x5f2d 0x8cc6 +0x5f2e 0x8cc9 +0x5f2f 0x8ccb +0x5f30 0x8ccf +0x5f31 0x8cd6 +0x5f32 0x8cd5 +0x5f33 0x8cd9 +0x5f34 0x8cdd +0x5f35 0x8ce1 +0x5f36 0x8ce8 +0x5f37 0x8cec +0x5f38 0x8cef +0x5f39 0x8cf0 +0x5f3a 0x8cf2 +0x5f3b 0x8cf5 +0x5f3c 0x8cf7 +0x5f3d 0x8cf8 +0x5f3e 0x8cfe +0x5f3f 0x8cff +0x5f40 0x8d01 +0x5f41 0x8d03 +0x5f42 0x8d09 +0x5f43 0x8d12 +0x5f44 0x8d17 +0x5f45 0x8d1b +0x5f46 0x8d65 +0x5f47 0x8d69 +0x5f48 0x8d6c +0x5f49 0x8d6e +0x5f4a 0x8d7f +0x5f4b 0x8d82 +0x5f4c 0x8d84 +0x5f4d 0x8d88 +0x5f4e 0x8d8d +0x5f4f 0x8d90 +0x5f50 0x8d91 +0x5f51 0x8d95 +0x5f52 0x8d9e +0x5f53 0x8d9f +0x5f54 0x8da0 +0x5f55 0x8da6 +0x5f56 0x8dab +0x5f57 0x8dac +0x5f58 0x8daf +0x5f59 0x8db2 +0x5f5a 0x8db5 +0x5f5b 0x8db7 +0x5f5c 0x8db9 +0x5f5d 0x8dbb +0x5f5e 0x8dc0 +0x5f5f 0x8dc5 +0x5f60 0x8dc6 +0x5f61 0x8dc7 +0x5f62 0x8dc8 +0x5f63 0x8dca +0x5f64 0x8dce +0x5f65 0x8dd1 +0x5f66 0x8dd4 +0x5f67 0x8dd5 +0x5f68 0x8dd7 +0x5f69 0x8dd9 +0x5f6a 0x8de4 +0x5f6b 0x8de5 +0x5f6c 0x8de7 +0x5f6d 0x8dec +0x5f6e 0x8df0 +0x5f6f 0x8dbc +0x5f70 0x8df1 +0x5f71 0x8df2 +0x5f72 0x8df4 +0x5f73 0x8dfd +0x5f74 0x8e01 +0x5f75 0x8e04 +0x5f76 0x8e05 +0x5f77 0x8e06 +0x5f78 0x8e0b +0x5f79 0x8e11 +0x5f7a 0x8e14 +0x5f7b 0x8e16 +0x5f7c 0x8e20 +0x5f7d 0x8e21 +0x5f7e 0x8e22 +0x6021 0x8e23 +0x6022 0x8e26 +0x6023 0x8e27 +0x6024 0x8e31 +0x6025 0x8e33 +0x6026 0x8e36 +0x6027 0x8e37 +0x6028 0x8e38 +0x6029 0x8e39 +0x602a 0x8e3d +0x602b 0x8e40 +0x602c 0x8e41 +0x602d 0x8e4b +0x602e 0x8e4d +0x602f 0x8e4e +0x6030 0x8e4f +0x6031 0x8e54 +0x6032 0x8e5b +0x6033 0x8e5c +0x6034 0x8e5d +0x6035 0x8e5e +0x6036 0x8e61 +0x6037 0x8e62 +0x6038 0x8e69 +0x6039 0x8e6c +0x603a 0x8e6d +0x603b 0x8e6f +0x603c 0x8e70 +0x603d 0x8e71 +0x603e 0x8e79 +0x603f 0x8e7a +0x6040 0x8e7b +0x6041 0x8e82 +0x6042 0x8e83 +0x6043 0x8e89 +0x6044 0x8e90 +0x6045 0x8e92 +0x6046 0x8e95 +0x6047 0x8e9a +0x6048 0x8e9b +0x6049 0x8e9d +0x604a 0x8e9e +0x604b 0x8ea2 +0x604c 0x8ea7 +0x604d 0x8ea9 +0x604e 0x8ead +0x604f 0x8eae +0x6050 0x8eb3 +0x6051 0x8eb5 +0x6052 0x8eba +0x6053 0x8ebb +0x6054 0x8ec0 +0x6055 0x8ec1 +0x6056 0x8ec3 +0x6057 0x8ec4 +0x6058 0x8ec7 +0x6059 0x8ecf +0x605a 0x8ed1 +0x605b 0x8ed4 +0x605c 0x8edc +0x605d 0x8ee8 +0x605e 0x8eee +0x605f 0x8ef0 +0x6060 0x8ef1 +0x6061 0x8ef7 +0x6062 0x8ef9 +0x6063 0x8efa +0x6064 0x8eed +0x6065 0x8f00 +0x6066 0x8f02 +0x6067 0x8f07 +0x6068 0x8f08 +0x6069 0x8f0f +0x606a 0x8f10 +0x606b 0x8f16 +0x606c 0x8f17 +0x606d 0x8f18 +0x606e 0x8f1e +0x606f 0x8f20 +0x6070 0x8f21 +0x6071 0x8f23 +0x6072 0x8f25 +0x6073 0x8f27 +0x6074 0x8f28 +0x6075 0x8f2c +0x6076 0x8f2d +0x6077 0x8f2e +0x6078 0x8f34 +0x6079 0x8f35 +0x607a 0x8f36 +0x607b 0x8f37 +0x607c 0x8f3a +0x607d 0x8f40 +0x607e 0x8f41 +0x6121 0x8f43 +0x6122 0x8f47 +0x6123 0x8f4f +0x6124 0x8f51 +0x6125 0x8f52 +0x6126 0x8f53 +0x6127 0x8f54 +0x6128 0x8f55 +0x6129 0x8f58 +0x612a 0x8f5d +0x612b 0x8f5e +0x612c 0x8f65 +0x612d 0x8f9d +0x612e 0x8fa0 +0x612f 0x8fa1 +0x6130 0x8fa4 +0x6131 0x8fa5 +0x6132 0x8fa6 +0x6133 0x8fb5 +0x6134 0x8fb6 +0x6135 0x8fb8 +0x6136 0x8fbe +0x6137 0x8fc0 +0x6138 0x8fc1 +0x6139 0x8fc6 +0x613a 0x8fca +0x613b 0x8fcb +0x613c 0x8fcd +0x613d 0x8fd0 +0x613e 0x8fd2 +0x613f 0x8fd3 +0x6140 0x8fd5 +0x6141 0x8fe0 +0x6142 0x8fe3 +0x6143 0x8fe4 +0x6144 0x8fe8 +0x6145 0x8fee +0x6146 0x8ff1 +0x6147 0x8ff5 +0x6148 0x8ff6 +0x6149 0x8ffb +0x614a 0x8ffe +0x614b 0x9002 +0x614c 0x9004 +0x614d 0x9008 +0x614e 0x900c +0x614f 0x9018 +0x6150 0x901b +0x6151 0x9028 +0x6152 0x9029 +0x6153 0x902f +0x6154 0x902a +0x6155 0x902c +0x6156 0x902d +0x6157 0x9033 +0x6158 0x9034 +0x6159 0x9037 +0x615a 0x903f +0x615b 0x9043 +0x615c 0x9044 +0x615d 0x904c +0x615e 0x905b +0x615f 0x905d +0x6160 0x9062 +0x6161 0x9066 +0x6162 0x9067 +0x6163 0x906c +0x6164 0x9070 +0x6165 0x9074 +0x6166 0x9079 +0x6167 0x9085 +0x6168 0x9088 +0x6169 0x908b +0x616a 0x908c +0x616b 0x908e +0x616c 0x9090 +0x616d 0x9095 +0x616e 0x9097 +0x616f 0x9098 +0x6170 0x9099 +0x6171 0x909b +0x6172 0x90a0 +0x6173 0x90a1 +0x6174 0x90a2 +0x6175 0x90a5 +0x6176 0x90b0 +0x6177 0x90b2 +0x6178 0x90b3 +0x6179 0x90b4 +0x617a 0x90b6 +0x617b 0x90bd +0x617c 0x90cc +0x617d 0x90be +0x617e 0x90c3 +0x6221 0x90c4 +0x6222 0x90c5 +0x6223 0x90c7 +0x6224 0x90c8 +0x6225 0x90d5 +0x6226 0x90d7 +0x6227 0x90d8 +0x6228 0x90d9 +0x6229 0x90dc +0x622a 0x90dd +0x622b 0x90df +0x622c 0x90e5 +0x622d 0x90d2 +0x622e 0x90f6 +0x622f 0x90eb +0x6230 0x90ef +0x6231 0x90f0 +0x6232 0x90f4 +0x6233 0x90fe +0x6234 0x90ff +0x6235 0x9100 +0x6236 0x9104 +0x6237 0x9105 +0x6238 0x9106 +0x6239 0x9108 +0x623a 0x910d +0x623b 0x9110 +0x623c 0x9114 +0x623d 0x9116 +0x623e 0x9117 +0x623f 0x9118 +0x6240 0x911a +0x6241 0x911c +0x6242 0x911e +0x6243 0x9120 +0x6244 0x9125 +0x6245 0x9122 +0x6246 0x9123 +0x6247 0x9127 +0x6248 0x9129 +0x6249 0x912e +0x624a 0x912f +0x624b 0x9131 +0x624c 0x9134 +0x624d 0x9136 +0x624e 0x9137 +0x624f 0x9139 +0x6250 0x913a +0x6251 0x913c +0x6252 0x913d +0x6253 0x9143 +0x6254 0x9147 +0x6255 0x9148 +0x6256 0x914f +0x6257 0x9153 +0x6258 0x9157 +0x6259 0x9159 +0x625a 0x915a +0x625b 0x915b +0x625c 0x9161 +0x625d 0x9164 +0x625e 0x9167 +0x625f 0x916d +0x6260 0x9174 +0x6261 0x9179 +0x6262 0x917a +0x6263 0x917b +0x6264 0x9181 +0x6265 0x9183 +0x6266 0x9185 +0x6267 0x9186 +0x6268 0x918a +0x6269 0x918e +0x626a 0x9191 +0x626b 0x9193 +0x626c 0x9194 +0x626d 0x9195 +0x626e 0x9198 +0x626f 0x919e +0x6270 0x91a1 +0x6271 0x91a6 +0x6272 0x91a8 +0x6273 0x91ac +0x6274 0x91ad +0x6275 0x91ae +0x6276 0x91b0 +0x6277 0x91b1 +0x6278 0x91b2 +0x6279 0x91b3 +0x627a 0x91b6 +0x627b 0x91bb +0x627c 0x91bc +0x627d 0x91bd +0x627e 0x91bf +0x6321 0x91c2 +0x6322 0x91c3 +0x6323 0x91c5 +0x6324 0x91d3 +0x6325 0x91d4 +0x6326 0x91d7 +0x6327 0x91d9 +0x6328 0x91da +0x6329 0x91de +0x632a 0x91e4 +0x632b 0x91e5 +0x632c 0x91e9 +0x632d 0x91ea +0x632e 0x91ec +0x632f 0x91ed +0x6330 0x91ee +0x6331 0x91ef +0x6332 0x91f0 +0x6333 0x91f1 +0x6334 0x91f7 +0x6335 0x91f9 +0x6336 0x91fb +0x6337 0x91fd +0x6338 0x9200 +0x6339 0x9201 +0x633a 0x9204 +0x633b 0x9205 +0x633c 0x9206 +0x633d 0x9207 +0x633e 0x9209 +0x633f 0x920a +0x6340 0x920c +0x6341 0x9210 +0x6342 0x9212 +0x6343 0x9213 +0x6344 0x9216 +0x6345 0x9218 +0x6346 0x921c +0x6347 0x921d +0x6348 0x9223 +0x6349 0x9224 +0x634a 0x9225 +0x634b 0x9226 +0x634c 0x9228 +0x634d 0x922e +0x634e 0x922f +0x634f 0x9230 +0x6350 0x9233 +0x6351 0x9235 +0x6352 0x9236 +0x6353 0x9238 +0x6354 0x9239 +0x6355 0x923a +0x6356 0x923c +0x6357 0x923e +0x6358 0x9240 +0x6359 0x9242 +0x635a 0x9243 +0x635b 0x9246 +0x635c 0x9247 +0x635d 0x924a +0x635e 0x924d +0x635f 0x924e +0x6360 0x924f +0x6361 0x9251 +0x6362 0x9258 +0x6363 0x9259 +0x6364 0x925c +0x6365 0x925d +0x6366 0x9260 +0x6367 0x9261 +0x6368 0x9265 +0x6369 0x9267 +0x636a 0x9268 +0x636b 0x9269 +0x636c 0x926e +0x636d 0x926f +0x636e 0x9270 +0x636f 0x9275 +0x6370 0x9276 +0x6371 0x9277 +0x6372 0x9278 +0x6373 0x9279 +0x6374 0x927b +0x6375 0x927c +0x6376 0x927d +0x6377 0x927f +0x6378 0x9288 +0x6379 0x9289 +0x637a 0x928a +0x637b 0x928d +0x637c 0x928e +0x637d 0x9292 +0x637e 0x9297 +0x6421 0x9299 +0x6422 0x929f +0x6423 0x92a0 +0x6424 0x92a4 +0x6425 0x92a5 +0x6426 0x92a7 +0x6427 0x92a8 +0x6428 0x92ab +0x6429 0x92af +0x642a 0x92b2 +0x642b 0x92b6 +0x642c 0x92b8 +0x642d 0x92ba +0x642e 0x92bb +0x642f 0x92bc +0x6430 0x92bd +0x6431 0x92bf +0x6432 0x92c0 +0x6433 0x92c1 +0x6434 0x92c2 +0x6435 0x92c3 +0x6436 0x92c5 +0x6437 0x92c6 +0x6438 0x92c7 +0x6439 0x92c8 +0x643a 0x92cb +0x643b 0x92cc +0x643c 0x92cd +0x643d 0x92ce +0x643e 0x92d0 +0x643f 0x92d3 +0x6440 0x92d5 +0x6441 0x92d7 +0x6442 0x92d8 +0x6443 0x92d9 +0x6444 0x92dc +0x6445 0x92dd +0x6446 0x92df +0x6447 0x92e0 +0x6448 0x92e1 +0x6449 0x92e3 +0x644a 0x92e5 +0x644b 0x92e7 +0x644c 0x92e8 +0x644d 0x92ec +0x644e 0x92ee +0x644f 0x92f0 +0x6450 0x92f9 +0x6451 0x92fb +0x6452 0x92ff +0x6453 0x9300 +0x6454 0x9302 +0x6455 0x9308 +0x6456 0x930d +0x6457 0x9311 +0x6458 0x9314 +0x6459 0x9315 +0x645a 0x931c +0x645b 0x931d +0x645c 0x931e +0x645d 0x931f +0x645e 0x9321 +0x645f 0x9324 +0x6460 0x9325 +0x6461 0x9327 +0x6462 0x9329 +0x6463 0x932a +0x6464 0x9333 +0x6465 0x9334 +0x6466 0x9336 +0x6467 0x9337 +0x6468 0x9347 +0x6469 0x9348 +0x646a 0x9349 +0x646b 0x9350 +0x646c 0x9351 +0x646d 0x9352 +0x646e 0x9355 +0x646f 0x9357 +0x6470 0x9358 +0x6471 0x935a +0x6472 0x935e +0x6473 0x9364 +0x6474 0x9365 +0x6475 0x9367 +0x6476 0x9369 +0x6477 0x936a +0x6478 0x936d +0x6479 0x936f +0x647a 0x9370 +0x647b 0x9371 +0x647c 0x9373 +0x647d 0x9374 +0x647e 0x9376 +0x6521 0x937a +0x6522 0x937d +0x6523 0x937f +0x6524 0x9380 +0x6525 0x9381 +0x6526 0x9382 +0x6527 0x9388 +0x6528 0x938a +0x6529 0x938b +0x652a 0x938d +0x652b 0x938f +0x652c 0x9392 +0x652d 0x9395 +0x652e 0x9398 +0x652f 0x939b +0x6530 0x939e +0x6531 0x93a1 +0x6532 0x93a3 +0x6533 0x93a4 +0x6534 0x93a6 +0x6535 0x93a8 +0x6536 0x93ab +0x6537 0x93b4 +0x6538 0x93b5 +0x6539 0x93b6 +0x653a 0x93ba +0x653b 0x93a9 +0x653c 0x93c1 +0x653d 0x93c4 +0x653e 0x93c5 +0x653f 0x93c6 +0x6540 0x93c7 +0x6541 0x93c9 +0x6542 0x93ca +0x6543 0x93cb +0x6544 0x93cc +0x6545 0x93cd +0x6546 0x93d3 +0x6547 0x93d9 +0x6548 0x93dc +0x6549 0x93de +0x654a 0x93df +0x654b 0x93e2 +0x654c 0x93e6 +0x654d 0x93e7 +0x654e 0x93f9 +0x654f 0x93f7 +0x6550 0x93f8 +0x6551 0x93fa +0x6552 0x93fb +0x6553 0x93fd +0x6554 0x9401 +0x6555 0x9402 +0x6556 0x9404 +0x6557 0x9408 +0x6558 0x9409 +0x6559 0x940d +0x655a 0x940e +0x655b 0x940f +0x655c 0x9415 +0x655d 0x9416 +0x655e 0x9417 +0x655f 0x941f +0x6560 0x942e +0x6561 0x942f +0x6562 0x9431 +0x6563 0x9432 +0x6564 0x9433 +0x6565 0x9434 +0x6566 0x943b +0x6567 0x943f +0x6568 0x943d +0x6569 0x9443 +0x656a 0x9445 +0x656b 0x9448 +0x656c 0x944a +0x656d 0x944c +0x656e 0x9455 +0x656f 0x9459 +0x6570 0x945c +0x6571 0x945f +0x6572 0x9461 +0x6573 0x9463 +0x6574 0x9468 +0x6575 0x946b +0x6576 0x946d +0x6577 0x946e +0x6578 0x946f +0x6579 0x9471 +0x657a 0x9472 +0x657b 0x9484 +0x657c 0x9483 +0x657d 0x9578 +0x657e 0x9579 +0x6621 0x957e +0x6622 0x9584 +0x6623 0x9588 +0x6624 0x958c +0x6625 0x958d +0x6626 0x958e +0x6627 0x959d +0x6628 0x959e +0x6629 0x959f +0x662a 0x95a1 +0x662b 0x95a6 +0x662c 0x95a9 +0x662d 0x95ab +0x662e 0x95ac +0x662f 0x95b4 +0x6630 0x95b6 +0x6631 0x95ba +0x6632 0x95bd +0x6633 0x95bf +0x6634 0x95c6 +0x6635 0x95c8 +0x6636 0x95c9 +0x6637 0x95cb +0x6638 0x95d0 +0x6639 0x95d1 +0x663a 0x95d2 +0x663b 0x95d3 +0x663c 0x95d9 +0x663d 0x95da +0x663e 0x95dd +0x663f 0x95de +0x6640 0x95df +0x6641 0x95e0 +0x6642 0x95e4 +0x6643 0x95e6 +0x6644 0x961d +0x6645 0x961e +0x6646 0x9622 +0x6647 0x9624 +0x6648 0x9625 +0x6649 0x9626 +0x664a 0x962c +0x664b 0x9631 +0x664c 0x9633 +0x664d 0x9637 +0x664e 0x9638 +0x664f 0x9639 +0x6650 0x963a +0x6651 0x963c +0x6652 0x963d +0x6653 0x9641 +0x6654 0x9652 +0x6655 0x9654 +0x6656 0x9656 +0x6657 0x9657 +0x6658 0x9658 +0x6659 0x9661 +0x665a 0x966e +0x665b 0x9674 +0x665c 0x967b +0x665d 0x967c +0x665e 0x967e +0x665f 0x967f +0x6660 0x9681 +0x6661 0x9682 +0x6662 0x9683 +0x6663 0x9684 +0x6664 0x9689 +0x6665 0x9691 +0x6666 0x9696 +0x6667 0x969a +0x6668 0x969d +0x6669 0x969f +0x666a 0x96a4 +0x666b 0x96a5 +0x666c 0x96a6 +0x666d 0x96a9 +0x666e 0x96ae +0x666f 0x96af +0x6670 0x96b3 +0x6671 0x96ba +0x6672 0x96ca +0x6673 0x96d2 +0x6674 0x5db2 +0x6675 0x96d8 +0x6676 0x96da +0x6677 0x96dd +0x6678 0x96de +0x6679 0x96df +0x667a 0x96e9 +0x667b 0x96ef +0x667c 0x96f1 +0x667d 0x96fa +0x667e 0x9702 +0x6721 0x9703 +0x6722 0x9705 +0x6723 0x9709 +0x6724 0x971a +0x6725 0x971b +0x6726 0x971d +0x6727 0x9721 +0x6728 0x9722 +0x6729 0x9723 +0x672a 0x9728 +0x672b 0x9731 +0x672c 0x9733 +0x672d 0x9741 +0x672e 0x9743 +0x672f 0x974a +0x6730 0x974e +0x6731 0x974f +0x6732 0x9755 +0x6733 0x9757 +0x6734 0x9758 +0x6735 0x975a +0x6736 0x975b +0x6737 0x9763 +0x6738 0x9767 +0x6739 0x976a +0x673a 0x976e +0x673b 0x9773 +0x673c 0x9776 +0x673d 0x9777 +0x673e 0x9778 +0x673f 0x977b +0x6740 0x977d +0x6741 0x977f +0x6742 0x9780 +0x6743 0x9789 +0x6744 0x9795 +0x6745 0x9796 +0x6746 0x9797 +0x6747 0x9799 +0x6748 0x979a +0x6749 0x979e +0x674a 0x979f +0x674b 0x97a2 +0x674c 0x97ac +0x674d 0x97ae +0x674e 0x97b1 +0x674f 0x97b2 +0x6750 0x97b5 +0x6751 0x97b6 +0x6752 0x97b8 +0x6753 0x97b9 +0x6754 0x97ba +0x6755 0x97bc +0x6756 0x97be +0x6757 0x97bf +0x6758 0x97c1 +0x6759 0x97c4 +0x675a 0x97c5 +0x675b 0x97c7 +0x675c 0x97c9 +0x675d 0x97ca +0x675e 0x97cc +0x675f 0x97cd +0x6760 0x97ce +0x6761 0x97d0 +0x6762 0x97d1 +0x6763 0x97d4 +0x6764 0x97d7 +0x6765 0x97d8 +0x6766 0x97d9 +0x6767 0x97dd +0x6768 0x97de +0x6769 0x97e0 +0x676a 0x97db +0x676b 0x97e1 +0x676c 0x97e4 +0x676d 0x97ef +0x676e 0x97f1 +0x676f 0x97f4 +0x6770 0x97f7 +0x6771 0x97f8 +0x6772 0x97fa +0x6773 0x9807 +0x6774 0x980a +0x6775 0x9819 +0x6776 0x980d +0x6777 0x980e +0x6778 0x9814 +0x6779 0x9816 +0x677a 0x981c +0x677b 0x981e +0x677c 0x9820 +0x677d 0x9823 +0x677e 0x9826 +0x6821 0x982b +0x6822 0x982e +0x6823 0x982f +0x6824 0x9830 +0x6825 0x9832 +0x6826 0x9833 +0x6827 0x9835 +0x6828 0x9825 +0x6829 0x983e +0x682a 0x9844 +0x682b 0x9847 +0x682c 0x984a +0x682d 0x9851 +0x682e 0x9852 +0x682f 0x9853 +0x6830 0x9856 +0x6831 0x9857 +0x6832 0x9859 +0x6833 0x985a +0x6834 0x9862 +0x6835 0x9863 +0x6836 0x9865 +0x6837 0x9866 +0x6838 0x986a +0x6839 0x986c +0x683a 0x98ab +0x683b 0x98ad +0x683c 0x98ae +0x683d 0x98b0 +0x683e 0x98b4 +0x683f 0x98b7 +0x6840 0x98b8 +0x6841 0x98ba +0x6842 0x98bb +0x6843 0x98bf +0x6844 0x98c2 +0x6845 0x98c5 +0x6846 0x98c8 +0x6847 0x98cc +0x6848 0x98e1 +0x6849 0x98e3 +0x684a 0x98e5 +0x684b 0x98e6 +0x684c 0x98e7 +0x684d 0x98ea +0x684e 0x98f3 +0x684f 0x98f6 +0x6850 0x9902 +0x6851 0x9907 +0x6852 0x9908 +0x6853 0x9911 +0x6854 0x9915 +0x6855 0x9916 +0x6856 0x9917 +0x6857 0x991a +0x6858 0x991b +0x6859 0x991c +0x685a 0x991f +0x685b 0x9922 +0x685c 0x9926 +0x685d 0x9927 +0x685e 0x992b +0x685f 0x9931 +0x6860 0x9932 +0x6861 0x9933 +0x6862 0x9934 +0x6863 0x9935 +0x6864 0x9939 +0x6865 0x993a +0x6866 0x993b +0x6867 0x993c +0x6868 0x9940 +0x6869 0x9941 +0x686a 0x9946 +0x686b 0x9947 +0x686c 0x9948 +0x686d 0x994d +0x686e 0x994e +0x686f 0x9954 +0x6870 0x9958 +0x6871 0x9959 +0x6872 0x995b +0x6873 0x995c +0x6874 0x995e +0x6875 0x995f +0x6876 0x9960 +0x6877 0x999b +0x6878 0x999d +0x6879 0x999f +0x687a 0x99a6 +0x687b 0x99b0 +0x687c 0x99b1 +0x687d 0x99b2 +0x687e 0x99b5 +0x6921 0x99b9 +0x6922 0x99ba +0x6923 0x99bd +0x6924 0x99bf +0x6925 0x99c3 +0x6926 0x99c9 +0x6927 0x99d3 +0x6928 0x99d4 +0x6929 0x99d9 +0x692a 0x99da +0x692b 0x99dc +0x692c 0x99de +0x692d 0x99e7 +0x692e 0x99ea +0x692f 0x99eb +0x6930 0x99ec +0x6931 0x99f0 +0x6932 0x99f4 +0x6933 0x99f5 +0x6934 0x99f9 +0x6935 0x99fd +0x6936 0x99fe +0x6937 0x9a02 +0x6938 0x9a03 +0x6939 0x9a04 +0x693a 0x9a0b +0x693b 0x9a0c +0x693c 0x9a10 +0x693d 0x9a11 +0x693e 0x9a16 +0x693f 0x9a1e +0x6940 0x9a20 +0x6941 0x9a22 +0x6942 0x9a23 +0x6943 0x9a24 +0x6944 0x9a27 +0x6945 0x9a2d +0x6946 0x9a2e +0x6947 0x9a33 +0x6948 0x9a35 +0x6949 0x9a36 +0x694a 0x9a38 +0x694b 0x9a47 +0x694c 0x9a41 +0x694d 0x9a44 +0x694e 0x9a4a +0x694f 0x9a4b +0x6950 0x9a4c +0x6951 0x9a4e +0x6952 0x9a51 +0x6953 0x9a54 +0x6954 0x9a56 +0x6955 0x9a5d +0x6956 0x9aaa +0x6957 0x9aac +0x6958 0x9aae +0x6959 0x9aaf +0x695a 0x9ab2 +0x695b 0x9ab4 +0x695c 0x9ab5 +0x695d 0x9ab6 +0x695e 0x9ab9 +0x695f 0x9abb +0x6960 0x9abe +0x6961 0x9abf +0x6962 0x9ac1 +0x6963 0x9ac3 +0x6964 0x9ac6 +0x6965 0x9ac8 +0x6966 0x9ace +0x6967 0x9ad0 +0x6968 0x9ad2 +0x6969 0x9ad5 +0x696a 0x9ad6 +0x696b 0x9ad7 +0x696c 0x9adb +0x696d 0x9adc +0x696e 0x9ae0 +0x696f 0x9ae4 +0x6970 0x9ae5 +0x6971 0x9ae7 +0x6972 0x9ae9 +0x6973 0x9aec +0x6974 0x9af2 +0x6975 0x9af3 +0x6976 0x9af5 +0x6977 0x9af9 +0x6978 0x9afa +0x6979 0x9afd +0x697a 0x9aff +0x697b 0x9b00 +0x697c 0x9b01 +0x697d 0x9b02 +0x697e 0x9b03 +0x6a21 0x9b04 +0x6a22 0x9b05 +0x6a23 0x9b08 +0x6a24 0x9b09 +0x6a25 0x9b0b +0x6a26 0x9b0c +0x6a27 0x9b0d +0x6a28 0x9b0e +0x6a29 0x9b10 +0x6a2a 0x9b12 +0x6a2b 0x9b16 +0x6a2c 0x9b19 +0x6a2d 0x9b1b +0x6a2e 0x9b1c +0x6a2f 0x9b20 +0x6a30 0x9b26 +0x6a31 0x9b2b +0x6a32 0x9b2d +0x6a33 0x9b33 +0x6a34 0x9b34 +0x6a35 0x9b35 +0x6a36 0x9b37 +0x6a37 0x9b39 +0x6a38 0x9b3a +0x6a39 0x9b3d +0x6a3a 0x9b48 +0x6a3b 0x9b4b +0x6a3c 0x9b4c +0x6a3d 0x9b55 +0x6a3e 0x9b56 +0x6a3f 0x9b57 +0x6a40 0x9b5b +0x6a41 0x9b5e +0x6a42 0x9b61 +0x6a43 0x9b63 +0x6a44 0x9b65 +0x6a45 0x9b66 +0x6a46 0x9b68 +0x6a47 0x9b6a +0x6a48 0x9b6b +0x6a49 0x9b6c +0x6a4a 0x9b6d +0x6a4b 0x9b6e +0x6a4c 0x9b73 +0x6a4d 0x9b75 +0x6a4e 0x9b77 +0x6a4f 0x9b78 +0x6a50 0x9b79 +0x6a51 0x9b7f +0x6a52 0x9b80 +0x6a53 0x9b84 +0x6a54 0x9b85 +0x6a55 0x9b86 +0x6a56 0x9b87 +0x6a57 0x9b89 +0x6a58 0x9b8a +0x6a59 0x9b8b +0x6a5a 0x9b8d +0x6a5b 0x9b8f +0x6a5c 0x9b90 +0x6a5d 0x9b94 +0x6a5e 0x9b9a +0x6a5f 0x9b9d +0x6a60 0x9b9e +0x6a61 0x9ba6 +0x6a62 0x9ba7 +0x6a63 0x9ba9 +0x6a64 0x9bac +0x6a65 0x9bb0 +0x6a66 0x9bb1 +0x6a67 0x9bb2 +0x6a68 0x9bb7 +0x6a69 0x9bb8 +0x6a6a 0x9bbb +0x6a6b 0x9bbc +0x6a6c 0x9bbe +0x6a6d 0x9bbf +0x6a6e 0x9bc1 +0x6a6f 0x9bc7 +0x6a70 0x9bc8 +0x6a71 0x9bce +0x6a72 0x9bd0 +0x6a73 0x9bd7 +0x6a74 0x9bd8 +0x6a75 0x9bdd +0x6a76 0x9bdf +0x6a77 0x9be5 +0x6a78 0x9be7 +0x6a79 0x9bea +0x6a7a 0x9beb +0x6a7b 0x9bef +0x6a7c 0x9bf3 +0x6a7d 0x9bf7 +0x6a7e 0x9bf8 +0x6b21 0x9bf9 +0x6b22 0x9bfa +0x6b23 0x9bfd +0x6b24 0x9bff +0x6b25 0x9c00 +0x6b26 0x9c02 +0x6b27 0x9c0b +0x6b28 0x9c0f +0x6b29 0x9c11 +0x6b2a 0x9c16 +0x6b2b 0x9c18 +0x6b2c 0x9c19 +0x6b2d 0x9c1a +0x6b2e 0x9c1c +0x6b2f 0x9c1e +0x6b30 0x9c22 +0x6b31 0x9c23 +0x6b32 0x9c26 +0x6b33 0x9c27 +0x6b34 0x9c28 +0x6b35 0x9c29 +0x6b36 0x9c2a +0x6b37 0x9c31 +0x6b38 0x9c35 +0x6b39 0x9c36 +0x6b3a 0x9c37 +0x6b3b 0x9c3d +0x6b3c 0x9c41 +0x6b3d 0x9c43 +0x6b3e 0x9c44 +0x6b3f 0x9c45 +0x6b40 0x9c49 +0x6b41 0x9c4a +0x6b42 0x9c4e +0x6b43 0x9c4f +0x6b44 0x9c50 +0x6b45 0x9c53 +0x6b46 0x9c54 +0x6b47 0x9c56 +0x6b48 0x9c58 +0x6b49 0x9c5b +0x6b4a 0x9c5d +0x6b4b 0x9c5e +0x6b4c 0x9c5f +0x6b4d 0x9c63 +0x6b4e 0x9c69 +0x6b4f 0x9c6a +0x6b50 0x9c5c +0x6b51 0x9c6b +0x6b52 0x9c68 +0x6b53 0x9c6e +0x6b54 0x9c70 +0x6b55 0x9c72 +0x6b56 0x9c75 +0x6b57 0x9c77 +0x6b58 0x9c7b +0x6b59 0x9ce6 +0x6b5a 0x9cf2 +0x6b5b 0x9cf7 +0x6b5c 0x9cf9 +0x6b5d 0x9d0b +0x6b5e 0x9d02 +0x6b5f 0x9d11 +0x6b60 0x9d17 +0x6b61 0x9d18 +0x6b62 0x9d1c +0x6b63 0x9d1d +0x6b64 0x9d1e +0x6b65 0x9d2f +0x6b66 0x9d30 +0x6b67 0x9d32 +0x6b68 0x9d33 +0x6b69 0x9d34 +0x6b6a 0x9d3a +0x6b6b 0x9d3c +0x6b6c 0x9d45 +0x6b6d 0x9d3d +0x6b6e 0x9d42 +0x6b6f 0x9d43 +0x6b70 0x9d47 +0x6b71 0x9d4a +0x6b72 0x9d53 +0x6b73 0x9d54 +0x6b74 0x9d5f +0x6b75 0x9d63 +0x6b76 0x9d62 +0x6b77 0x9d65 +0x6b78 0x9d69 +0x6b79 0x9d6a +0x6b7a 0x9d6b +0x6b7b 0x9d70 +0x6b7c 0x9d76 +0x6b7d 0x9d77 +0x6b7e 0x9d7b +0x6c21 0x9d7c +0x6c22 0x9d7e +0x6c23 0x9d83 +0x6c24 0x9d84 +0x6c25 0x9d86 +0x6c26 0x9d8a +0x6c27 0x9d8d +0x6c28 0x9d8e +0x6c29 0x9d92 +0x6c2a 0x9d93 +0x6c2b 0x9d95 +0x6c2c 0x9d96 +0x6c2d 0x9d97 +0x6c2e 0x9d98 +0x6c2f 0x9da1 +0x6c30 0x9daa +0x6c31 0x9dac +0x6c32 0x9dae +0x6c33 0x9db1 +0x6c34 0x9db5 +0x6c35 0x9db9 +0x6c36 0x9dbc +0x6c37 0x9dbf +0x6c38 0x9dc3 +0x6c39 0x9dc7 +0x6c3a 0x9dc9 +0x6c3b 0x9dca +0x6c3c 0x9dd4 +0x6c3d 0x9dd5 +0x6c3e 0x9dd6 +0x6c3f 0x9dd7 +0x6c40 0x9dda +0x6c41 0x9dde +0x6c42 0x9ddf +0x6c43 0x9de0 +0x6c44 0x9de5 +0x6c45 0x9de7 +0x6c46 0x9de9 +0x6c47 0x9deb +0x6c48 0x9dee +0x6c49 0x9df0 +0x6c4a 0x9df3 +0x6c4b 0x9df4 +0x6c4c 0x9dfe +0x6c4d 0x9e0a +0x6c4e 0x9e02 +0x6c4f 0x9e07 +0x6c50 0x9e0e +0x6c51 0x9e10 +0x6c52 0x9e11 +0x6c53 0x9e12 +0x6c54 0x9e15 +0x6c55 0x9e16 +0x6c56 0x9e19 +0x6c57 0x9e1c +0x6c58 0x9e1d +0x6c59 0x9e7a +0x6c5a 0x9e7b +0x6c5b 0x9e7c +0x6c5c 0x9e80 +0x6c5d 0x9e82 +0x6c5e 0x9e83 +0x6c5f 0x9e84 +0x6c60 0x9e85 +0x6c61 0x9e87 +0x6c62 0x9e8e +0x6c63 0x9e8f +0x6c64 0x9e96 +0x6c65 0x9e98 +0x6c66 0x9e9b +0x6c67 0x9e9e +0x6c68 0x9ea4 +0x6c69 0x9ea8 +0x6c6a 0x9eac +0x6c6b 0x9eae +0x6c6c 0x9eaf +0x6c6d 0x9eb0 +0x6c6e 0x9eb3 +0x6c6f 0x9eb4 +0x6c70 0x9eb5 +0x6c71 0x9ec6 +0x6c72 0x9ec8 +0x6c73 0x9ecb +0x6c74 0x9ed5 +0x6c75 0x9edf +0x6c76 0x9ee4 +0x6c77 0x9ee7 +0x6c78 0x9eec +0x6c79 0x9eed +0x6c7a 0x9eee +0x6c7b 0x9ef0 +0x6c7c 0x9ef1 +0x6c7d 0x9ef2 +0x6c7e 0x9ef5 +0x6d21 0x9ef8 +0x6d22 0x9eff +0x6d23 0x9f02 +0x6d24 0x9f03 +0x6d25 0x9f09 +0x6d26 0x9f0f +0x6d27 0x9f10 +0x6d28 0x9f11 +0x6d29 0x9f12 +0x6d2a 0x9f14 +0x6d2b 0x9f16 +0x6d2c 0x9f17 +0x6d2d 0x9f19 +0x6d2e 0x9f1a +0x6d2f 0x9f1b +0x6d30 0x9f1f +0x6d31 0x9f22 +0x6d32 0x9f26 +0x6d33 0x9f2a +0x6d34 0x9f2b +0x6d35 0x9f2f +0x6d36 0x9f31 +0x6d37 0x9f32 +0x6d38 0x9f34 +0x6d39 0x9f37 +0x6d3a 0x9f39 +0x6d3b 0x9f3a +0x6d3c 0x9f3c +0x6d3d 0x9f3d +0x6d3e 0x9f3f +0x6d3f 0x9f41 +0x6d40 0x9f43 +0x6d41 0x9f44 +0x6d42 0x9f45 +0x6d43 0x9f46 +0x6d44 0x9f47 +0x6d45 0x9f53 +0x6d46 0x9f55 +0x6d47 0x9f56 +0x6d48 0x9f57 +0x6d49 0x9f58 +0x6d4a 0x9f5a +0x6d4b 0x9f5d +0x6d4c 0x9f5e +0x6d4d 0x9f68 +0x6d4e 0x9f69 +0x6d4f 0x9f6d +0x6d50 0x9f6e +0x6d51 0x9f6f +0x6d52 0x9f70 +0x6d53 0x9f71 +0x6d54 0x9f73 +0x6d55 0x9f75 +0x6d56 0x9f7a +0x6d57 0x9f7d +0x6d58 0x9f8f +0x6d59 0x9f90 +0x6d5a 0x9f91 +0x6d5b 0x9f92 +0x6d5c 0x9f94 +0x6d5d 0x9f96 +0x6d5e 0x9f97 +0x6d5f 0x9f9e +0x6d60 0x9fa1 +0x6d61 0x9fa2 +0x6d62 0x9fa3 +0x6d63 0x9fa5 +0x7373 0x2170 +0x7374 0x2171 +0x7375 0x2172 +0x7376 0x2173 +0x7377 0x2174 +0x7378 0x2175 +0x7379 0x2176 +0x737a 0x2177 +0x737b 0x2178 +0x737c 0x2179 +0x737d 0x2160 +0x737e 0x2161 +0x7421 0x2162 +0x7422 0x2163 +0x7423 0x2164 +0x7424 0x2165 +0x7425 0x2166 +0x7426 0x2167 +0x7427 0x2168 +0x7428 0x2169 +0x7429 0xff07 +0x742a 0xff02 +0x742b 0x3231 +#0x742c 0x2116 +0x742d 0x2121 +0x742e 0x70bb +0x742f 0x4efc +0x7430 0x50f4 +0x7431 0x51ec +0x7432 0x5307 +0x7433 0x5324 +0x7434 0xfa0e +0x7435 0x548a +0x7436 0x5759 +0x7437 0xfa0f +0x7438 0xfa10 +0x7439 0x589e +0x743a 0x5bec +0x743b 0x5cf5 +0x743c 0x5d53 +0x743d 0xfa11 +0x743e 0x5fb7 +0x743f 0x6085 +0x7440 0x6120 +0x7441 0x654e +0x7442 0x663b +0x7443 0x6665 +0x7444 0xfa12 +0x7445 0xf929 +0x7446 0x6801 +0x7447 0xfa13 +0x7448 0xfa14 +0x7449 0x6a6b +0x744a 0x6ae2 +0x744b 0x6df8 +0x744c 0x6df2 +0x744d 0x7028 +0x744e 0xfa15 +0x744f 0xfa16 +0x7450 0x7501 +0x7451 0x7682 +0x7452 0x769e +0x7453 0xfa17 +0x7454 0x7930 +0x7455 0xfa18 +0x7456 0xfa19 +0x7457 0xfa1a +0x7458 0xfa1b +0x7459 0x7ae7 +0x745a 0xfa1c +0x745b 0xfa1d +0x745c 0x7da0 +0x745d 0x7dd6 +0x745e 0xfa1e +0x745f 0x8362 +0x7460 0xfa1f +0x7461 0x85b0 +0x7462 0xfa20 +0x7463 0xfa21 +0x7464 0x8807 +0x7465 0xfa22 +0x7466 0x8b7f +0x7467 0x8cf4 +0x7468 0x8d76 +0x7469 0xfa23 +0x746a 0xfa24 +0x746b 0xfa25 +0x746c 0x90de +0x746d 0xfa26 +0x746e 0x9115 +0x746f 0xfa27 +0x7470 0xfa28 +0x7471 0x9592 +0x7472 0xf9dc +0x7473 0xfa29 +0x7474 0x973b +0x7475 0x974d +0x7476 0x9751 +0x7477 0xfa2a +0x7478 0xfa2b +0x7479 0xfa2c +0x747a 0x999e +0x747b 0x9ad9 +0x747c 0x9b72 +0x747d 0xfa2d +0x747e 0x9ed1 diff --git a/jdk/make/tools/CharsetMapping/JIS_X_0212_Solaris.nr b/jdk/make/tools/CharsetMapping/JIS_X_0212_Solaris.nr new file mode 100644 index 00000000000..2861673c025 --- /dev/null +++ b/jdk/make/tools/CharsetMapping/JIS_X_0212_Solaris.nr @@ -0,0 +1 @@ +0x742c 0x2116 diff --git a/jdk/make/tools/CharsetMapping/PCK.c2b b/jdk/make/tools/CharsetMapping/PCK.c2b new file mode 100644 index 00000000000..e6bda8b3fe4 --- /dev/null +++ b/jdk/make/tools/CharsetMapping/PCK.c2b @@ -0,0 +1,3 @@ +0x005c 0x00a5 +0x007e 0x203e + diff --git a/jdk/make/tools/CharsetMapping/PCK.map b/jdk/make/tools/CharsetMapping/PCK.map new file mode 100644 index 00000000000..15c5ca7e2a1 --- /dev/null +++ b/jdk/make/tools/CharsetMapping/PCK.map @@ -0,0 +1,7924 @@ +# +# Generated from old SJIS implementation, which calcuats the +# sjis<->sjis (use Ken Lunde's algorithm) and then looks up +# the jis0208 mappings. The sjis->jis algorithm used in old +# SJIS assumes all input sjis are legal codepoints, so it +# also takes illegal sjis cp xx7f (treats it as xx80), such +# as 8a7f, and convert it to a dup jis/unicode cp. Those +# mappings are removed from this mapping. +# +0x0000 0x0000 +0x0001 0x0001 +0x0002 0x0002 +0x0003 0x0003 +0x0004 0x0004 +0x0005 0x0005 +0x0006 0x0006 +0x0007 0x0007 +0x0008 0x0008 +0x0009 0x0009 +0x000a 0x000a +0x000b 0x000b +0x000c 0x000c +0x000d 0x000d +0x000e 0x000e +0x000f 0x000f +0x0010 0x0010 +0x0011 0x0011 +0x0012 0x0012 +0x0013 0x0013 +0x0014 0x0014 +0x0015 0x0015 +0x0016 0x0016 +0x0017 0x0017 +0x0018 0x0018 +0x0019 0x0019 +0x001a 0x001a +0x001b 0x001b +0x001c 0x001c +0x001d 0x001d +0x001e 0x001e +0x001f 0x001f +0x0020 0x0020 +0x0021 0x0021 +0x0022 0x0022 +0x0023 0x0023 +0x0024 0x0024 +0x0025 0x0025 +0x0026 0x0026 +0x0027 0x0027 +0x0028 0x0028 +0x0029 0x0029 +0x002a 0x002a +0x002b 0x002b +0x002c 0x002c +0x002d 0x002d +0x002e 0x002e +0x002f 0x002f +0x0030 0x0030 +0x0031 0x0031 +0x0032 0x0032 +0x0033 0x0033 +0x0034 0x0034 +0x0035 0x0035 +0x0036 0x0036 +0x0037 0x0037 +0x0038 0x0038 +0x0039 0x0039 +0x003a 0x003a +0x003b 0x003b +0x003c 0x003c +0x003d 0x003d +0x003e 0x003e +0x003f 0x003f +0x0040 0x0040 +0x0041 0x0041 +0x0042 0x0042 +0x0043 0x0043 +0x0044 0x0044 +0x0045 0x0045 +0x0046 0x0046 +0x0047 0x0047 +0x0048 0x0048 +0x0049 0x0049 +0x004a 0x004a +0x004b 0x004b +0x004c 0x004c +0x004d 0x004d +0x004e 0x004e +0x004f 0x004f +0x0050 0x0050 +0x0051 0x0051 +0x0052 0x0052 +0x0053 0x0053 +0x0054 0x0054 +0x0055 0x0055 +0x0056 0x0056 +0x0057 0x0057 +0x0058 0x0058 +0x0059 0x0059 +0x005a 0x005a +0x005b 0x005b +0x005c 0x005c +0x005d 0x005d +0x005e 0x005e +0x005f 0x005f +0x0060 0x0060 +0x0061 0x0061 +0x0062 0x0062 +0x0063 0x0063 +0x0064 0x0064 +0x0065 0x0065 +0x0066 0x0066 +0x0067 0x0067 +0x0068 0x0068 +0x0069 0x0069 +0x006a 0x006a +0x006b 0x006b +0x006c 0x006c +0x006d 0x006d +0x006e 0x006e +0x006f 0x006f +0x0070 0x0070 +0x0071 0x0071 +0x0072 0x0072 +0x0073 0x0073 +0x0074 0x0074 +0x0075 0x0075 +0x0076 0x0076 +0x0077 0x0077 +0x0078 0x0078 +0x0079 0x0079 +0x007a 0x007a +0x007b 0x007b +0x007c 0x007c +0x007d 0x007d +0x007e 0x007e +0x007f 0x007f +0x00a1 0xff61 +0x00a2 0xff62 +0x00a3 0xff63 +0x00a4 0xff64 +0x00a5 0xff65 +0x00a6 0xff66 +0x00a7 0xff67 +0x00a8 0xff68 +0x00a9 0xff69 +0x00aa 0xff6a +0x00ab 0xff6b +0x00ac 0xff6c +0x00ad 0xff6d +0x00ae 0xff6e +0x00af 0xff6f +0x00b0 0xff70 +0x00b1 0xff71 +0x00b2 0xff72 +0x00b3 0xff73 +0x00b4 0xff74 +0x00b5 0xff75 +0x00b6 0xff76 +0x00b7 0xff77 +0x00b8 0xff78 +0x00b9 0xff79 +0x00ba 0xff7a +0x00bb 0xff7b +0x00bc 0xff7c +0x00bd 0xff7d +0x00be 0xff7e +0x00bf 0xff7f +0x00c0 0xff80 +0x00c1 0xff81 +0x00c2 0xff82 +0x00c3 0xff83 +0x00c4 0xff84 +0x00c5 0xff85 +0x00c6 0xff86 +0x00c7 0xff87 +0x00c8 0xff88 +0x00c9 0xff89 +0x00ca 0xff8a +0x00cb 0xff8b +0x00cc 0xff8c +0x00cd 0xff8d +0x00ce 0xff8e +0x00cf 0xff8f +0x00d0 0xff90 +0x00d1 0xff91 +0x00d2 0xff92 +0x00d3 0xff93 +0x00d4 0xff94 +0x00d5 0xff95 +0x00d6 0xff96 +0x00d7 0xff97 +0x00d8 0xff98 +0x00d9 0xff99 +0x00da 0xff9a +0x00db 0xff9b +0x00dc 0xff9c +0x00dd 0xff9d +0x00de 0xff9e +0x00df 0xff9f +0x8140 0x3000 +0x8141 0x3001 +0x8142 0x3002 +0x8143 0xff0c +0x8144 0xff0e +0x8145 0x30fb +0x8146 0xff1a +0x8147 0xff1b +0x8148 0xff1f +0x8149 0xff01 +0x814a 0x309b +0x814b 0x309c +0x814c 0x00b4 +0x814d 0xff40 +0x814e 0x00a8 +0x814f 0xff3e +0x8150 0xffe3 +0x8151 0xff3f +0x8152 0x30fd +0x8153 0x30fe +0x8154 0x309d +0x8155 0x309e +0x8156 0x3003 +0x8157 0x4edd +0x8158 0x3005 +0x8159 0x3006 +0x815a 0x3007 +0x815b 0x30fc +0x815c 0x2015 +0x815d 0x2010 +0x815e 0xff0f +0x815f 0xff3c +0x8160 0x301c +0x8161 0x2016 +0x8162 0xff5c +0x8163 0x2026 +0x8164 0x2025 +0x8165 0x2018 +0x8166 0x2019 +0x8167 0x201c +0x8168 0x201d +0x8169 0xff08 +0x816a 0xff09 +0x816b 0x3014 +0x816c 0x3015 +0x816d 0xff3b +0x816e 0xff3d +0x816f 0xff5b +0x8170 0xff5d +0x8171 0x3008 +0x8172 0x3009 +0x8173 0x300a +0x8174 0x300b +0x8175 0x300c +0x8176 0x300d +0x8177 0x300e +0x8178 0x300f +0x8179 0x3010 +0x817a 0x3011 +0x817b 0xff0b +0x817c 0x2212 +0x817d 0x00b1 +0x817e 0x00d7 +0x8180 0x00f7 +0x8181 0xff1d +0x8182 0x2260 +0x8183 0xff1c +0x8184 0xff1e +0x8185 0x2266 +0x8186 0x2267 +0x8187 0x221e +0x8188 0x2234 +0x8189 0x2642 +0x818a 0x2640 +0x818b 0x00b0 +0x818c 0x2032 +0x818d 0x2033 +0x818e 0x2103 +0x818f 0xffe5 +0x8190 0xff04 +0x8191 0x00a2 +0x8192 0x00a3 +0x8193 0xff05 +0x8194 0xff03 +0x8195 0xff06 +0x8196 0xff0a +0x8197 0xff20 +0x8198 0x00a7 +0x8199 0x2606 +0x819a 0x2605 +0x819b 0x25cb +0x819c 0x25cf +0x819d 0x25ce +0x819e 0x25c7 +0x819f 0x25c6 +0x81a0 0x25a1 +0x81a1 0x25a0 +0x81a2 0x25b3 +0x81a3 0x25b2 +0x81a4 0x25bd +0x81a5 0x25bc +0x81a6 0x203b +0x81a7 0x3012 +0x81a8 0x2192 +0x81a9 0x2190 +0x81aa 0x2191 +0x81ab 0x2193 +0x81ac 0x3013 +0x81b8 0x2208 +0x81b9 0x220b +0x81ba 0x2286 +0x81bb 0x2287 +0x81bc 0x2282 +0x81bd 0x2283 +0x81be 0x222a +0x81bf 0x2229 +0x81c8 0x2227 +0x81c9 0x2228 +0x81ca 0x00ac +0x81cb 0x21d2 +0x81cc 0x21d4 +0x81cd 0x2200 +0x81ce 0x2203 +0x81da 0x2220 +0x81db 0x22a5 +0x81dc 0x2312 +0x81dd 0x2202 +0x81de 0x2207 +0x81df 0x2261 +0x81e0 0x2252 +0x81e1 0x226a +0x81e2 0x226b +0x81e3 0x221a +0x81e4 0x223d +0x81e5 0x221d +0x81e6 0x2235 +0x81e7 0x222b +0x81e8 0x222c +0x81f0 0x212b +0x81f1 0x2030 +0x81f2 0x266f +0x81f3 0x266d +0x81f4 0x266a +0x81f5 0x2020 +0x81f6 0x2021 +0x81f7 0x00b6 +0x81fc 0x25ef +0x824f 0xff10 +0x8250 0xff11 +0x8251 0xff12 +0x8252 0xff13 +0x8253 0xff14 +0x8254 0xff15 +0x8255 0xff16 +0x8256 0xff17 +0x8257 0xff18 +0x8258 0xff19 +0x8260 0xff21 +0x8261 0xff22 +0x8262 0xff23 +0x8263 0xff24 +0x8264 0xff25 +0x8265 0xff26 +0x8266 0xff27 +0x8267 0xff28 +0x8268 0xff29 +0x8269 0xff2a +0x826a 0xff2b +0x826b 0xff2c +0x826c 0xff2d +0x826d 0xff2e +0x826e 0xff2f +0x826f 0xff30 +0x8270 0xff31 +0x8271 0xff32 +0x8272 0xff33 +0x8273 0xff34 +0x8274 0xff35 +0x8275 0xff36 +0x8276 0xff37 +0x8277 0xff38 +0x8278 0xff39 +0x8279 0xff3a +0x8281 0xff41 +0x8282 0xff42 +0x8283 0xff43 +0x8284 0xff44 +0x8285 0xff45 +0x8286 0xff46 +0x8287 0xff47 +0x8288 0xff48 +0x8289 0xff49 +0x828a 0xff4a +0x828b 0xff4b +0x828c 0xff4c +0x828d 0xff4d +0x828e 0xff4e +0x828f 0xff4f +0x8290 0xff50 +0x8291 0xff51 +0x8292 0xff52 +0x8293 0xff53 +0x8294 0xff54 +0x8295 0xff55 +0x8296 0xff56 +0x8297 0xff57 +0x8298 0xff58 +0x8299 0xff59 +0x829a 0xff5a +0x829f 0x3041 +0x82a0 0x3042 +0x82a1 0x3043 +0x82a2 0x3044 +0x82a3 0x3045 +0x82a4 0x3046 +0x82a5 0x3047 +0x82a6 0x3048 +0x82a7 0x3049 +0x82a8 0x304a +0x82a9 0x304b +0x82aa 0x304c +0x82ab 0x304d +0x82ac 0x304e +0x82ad 0x304f +0x82ae 0x3050 +0x82af 0x3051 +0x82b0 0x3052 +0x82b1 0x3053 +0x82b2 0x3054 +0x82b3 0x3055 +0x82b4 0x3056 +0x82b5 0x3057 +0x82b6 0x3058 +0x82b7 0x3059 +0x82b8 0x305a +0x82b9 0x305b +0x82ba 0x305c +0x82bb 0x305d +0x82bc 0x305e +0x82bd 0x305f +0x82be 0x3060 +0x82bf 0x3061 +0x82c0 0x3062 +0x82c1 0x3063 +0x82c2 0x3064 +0x82c3 0x3065 +0x82c4 0x3066 +0x82c5 0x3067 +0x82c6 0x3068 +0x82c7 0x3069 +0x82c8 0x306a +0x82c9 0x306b +0x82ca 0x306c +0x82cb 0x306d +0x82cc 0x306e +0x82cd 0x306f +0x82ce 0x3070 +0x82cf 0x3071 +0x82d0 0x3072 +0x82d1 0x3073 +0x82d2 0x3074 +0x82d3 0x3075 +0x82d4 0x3076 +0x82d5 0x3077 +0x82d6 0x3078 +0x82d7 0x3079 +0x82d8 0x307a +0x82d9 0x307b +0x82da 0x307c +0x82db 0x307d +0x82dc 0x307e +0x82dd 0x307f +0x82de 0x3080 +0x82df 0x3081 +0x82e0 0x3082 +0x82e1 0x3083 +0x82e2 0x3084 +0x82e3 0x3085 +0x82e4 0x3086 +0x82e5 0x3087 +0x82e6 0x3088 +0x82e7 0x3089 +0x82e8 0x308a +0x82e9 0x308b +0x82ea 0x308c +0x82eb 0x308d +0x82ec 0x308e +0x82ed 0x308f +0x82ee 0x3090 +0x82ef 0x3091 +0x82f0 0x3092 +0x82f1 0x3093 +0x8340 0x30a1 +0x8341 0x30a2 +0x8342 0x30a3 +0x8343 0x30a4 +0x8344 0x30a5 +0x8345 0x30a6 +0x8346 0x30a7 +0x8347 0x30a8 +0x8348 0x30a9 +0x8349 0x30aa +0x834a 0x30ab +0x834b 0x30ac +0x834c 0x30ad +0x834d 0x30ae +0x834e 0x30af +0x834f 0x30b0 +0x8350 0x30b1 +0x8351 0x30b2 +0x8352 0x30b3 +0x8353 0x30b4 +0x8354 0x30b5 +0x8355 0x30b6 +0x8356 0x30b7 +0x8357 0x30b8 +0x8358 0x30b9 +0x8359 0x30ba +0x835a 0x30bb +0x835b 0x30bc +0x835c 0x30bd +0x835d 0x30be +0x835e 0x30bf +0x835f 0x30c0 +0x8360 0x30c1 +0x8361 0x30c2 +0x8362 0x30c3 +0x8363 0x30c4 +0x8364 0x30c5 +0x8365 0x30c6 +0x8366 0x30c7 +0x8367 0x30c8 +0x8368 0x30c9 +0x8369 0x30ca +0x836a 0x30cb +0x836b 0x30cc +0x836c 0x30cd +0x836d 0x30ce +0x836e 0x30cf +0x836f 0x30d0 +0x8370 0x30d1 +0x8371 0x30d2 +0x8372 0x30d3 +0x8373 0x30d4 +0x8374 0x30d5 +0x8375 0x30d6 +0x8376 0x30d7 +0x8377 0x30d8 +0x8378 0x30d9 +0x8379 0x30da +0x837a 0x30db +0x837b 0x30dc +0x837c 0x30dd +0x837d 0x30de +0x837e 0x30df +0x8380 0x30e0 +0x8381 0x30e1 +0x8382 0x30e2 +0x8383 0x30e3 +0x8384 0x30e4 +0x8385 0x30e5 +0x8386 0x30e6 +0x8387 0x30e7 +0x8388 0x30e8 +0x8389 0x30e9 +0x838a 0x30ea +0x838b 0x30eb +0x838c 0x30ec +0x838d 0x30ed +0x838e 0x30ee +0x838f 0x30ef +0x8390 0x30f0 +0x8391 0x30f1 +0x8392 0x30f2 +0x8393 0x30f3 +0x8394 0x30f4 +0x8395 0x30f5 +0x8396 0x30f6 +0x839f 0x0391 +0x83a0 0x0392 +0x83a1 0x0393 +0x83a2 0x0394 +0x83a3 0x0395 +0x83a4 0x0396 +0x83a5 0x0397 +0x83a6 0x0398 +0x83a7 0x0399 +0x83a8 0x039a +0x83a9 0x039b +0x83aa 0x039c +0x83ab 0x039d +0x83ac 0x039e +0x83ad 0x039f +0x83ae 0x03a0 +0x83af 0x03a1 +0x83b0 0x03a3 +0x83b1 0x03a4 +0x83b2 0x03a5 +0x83b3 0x03a6 +0x83b4 0x03a7 +0x83b5 0x03a8 +0x83b6 0x03a9 +0x83bf 0x03b1 +0x83c0 0x03b2 +0x83c1 0x03b3 +0x83c2 0x03b4 +0x83c3 0x03b5 +0x83c4 0x03b6 +0x83c5 0x03b7 +0x83c6 0x03b8 +0x83c7 0x03b9 +0x83c8 0x03ba +0x83c9 0x03bb +0x83ca 0x03bc +0x83cb 0x03bd +0x83cc 0x03be +0x83cd 0x03bf +0x83ce 0x03c0 +0x83cf 0x03c1 +0x83d0 0x03c3 +0x83d1 0x03c4 +0x83d2 0x03c5 +0x83d3 0x03c6 +0x83d4 0x03c7 +0x83d5 0x03c8 +0x83d6 0x03c9 +0x8440 0x0410 +0x8441 0x0411 +0x8442 0x0412 +0x8443 0x0413 +0x8444 0x0414 +0x8445 0x0415 +0x8446 0x0401 +0x8447 0x0416 +0x8448 0x0417 +0x8449 0x0418 +0x844a 0x0419 +0x844b 0x041a +0x844c 0x041b +0x844d 0x041c +0x844e 0x041d +0x844f 0x041e +0x8450 0x041f +0x8451 0x0420 +0x8452 0x0421 +0x8453 0x0422 +0x8454 0x0423 +0x8455 0x0424 +0x8456 0x0425 +0x8457 0x0426 +0x8458 0x0427 +0x8459 0x0428 +0x845a 0x0429 +0x845b 0x042a +0x845c 0x042b +0x845d 0x042c +0x845e 0x042d +0x845f 0x042e +0x8460 0x042f +0x8470 0x0430 +0x8471 0x0431 +0x8472 0x0432 +0x8473 0x0433 +0x8474 0x0434 +0x8475 0x0435 +0x8476 0x0451 +0x8477 0x0436 +0x8478 0x0437 +0x8479 0x0438 +0x847a 0x0439 +0x847b 0x043a +0x847c 0x043b +0x847d 0x043c +0x847e 0x043d +0x8480 0x043e +0x8481 0x043f +0x8482 0x0440 +0x8483 0x0441 +0x8484 0x0442 +0x8485 0x0443 +0x8486 0x0444 +0x8487 0x0445 +0x8488 0x0446 +0x8489 0x0447 +0x848a 0x0448 +0x848b 0x0449 +0x848c 0x044a +0x848d 0x044b +0x848e 0x044c +0x848f 0x044d +0x8490 0x044e +0x8491 0x044f +0x849f 0x2500 +0x84a0 0x2502 +0x84a1 0x250c +0x84a2 0x2510 +0x84a3 0x2518 +0x84a4 0x2514 +0x84a5 0x251c +0x84a6 0x252c +0x84a7 0x2524 +0x84a8 0x2534 +0x84a9 0x253c +0x84aa 0x2501 +0x84ab 0x2503 +0x84ac 0x250f +0x84ad 0x2513 +0x84ae 0x251b +0x84af 0x2517 +0x84b0 0x2523 +0x84b1 0x2533 +0x84b2 0x252b +0x84b3 0x253b +0x84b4 0x254b +0x84b5 0x2520 +0x84b6 0x252f +0x84b7 0x2528 +0x84b8 0x2537 +0x84b9 0x253f +0x84ba 0x251d +0x84bb 0x2530 +0x84bc 0x2525 +0x84bd 0x2538 +0x84be 0x2542 +0x8740 0x2460 +0x8741 0x2461 +0x8742 0x2462 +0x8743 0x2463 +0x8744 0x2464 +0x8745 0x2465 +0x8746 0x2466 +0x8747 0x2467 +0x8748 0x2468 +0x8749 0x2469 +0x874a 0x246a +0x874b 0x246b +0x874c 0x246c +0x874d 0x246d +0x874e 0x246e +0x874f 0x246f +0x8750 0x2470 +0x8751 0x2471 +0x8752 0x2472 +0x8753 0x2473 +0x8754 0x2160 +0x8755 0x2161 +0x8756 0x2162 +0x8757 0x2163 +0x8758 0x2164 +0x8759 0x2165 +0x875a 0x2166 +0x875b 0x2167 +0x875c 0x2168 +0x875d 0x2169 +0x875f 0x3349 +0x8760 0x3314 +0x8761 0x3322 +0x8762 0x334d +0x8763 0x3318 +0x8764 0x3327 +0x8765 0x3303 +0x8766 0x3336 +0x8767 0x3351 +0x8768 0x3357 +0x8769 0x330d +0x876a 0x3326 +0x876b 0x3323 +0x876c 0x332b +0x876d 0x334a +0x876e 0x333b +0x876f 0x339c +0x8770 0x339d +0x8771 0x339e +0x8772 0x338e +0x8773 0x338f +0x8774 0x33c4 +0x8775 0x33a1 +0x877e 0x337b +0x8780 0x301d +0x8781 0x301f +0x8782 0x2116 +0x8783 0x33cd +0x8784 0x2121 +0x8785 0x32a4 +0x8786 0x32a5 +0x8787 0x32a6 +0x8788 0x32a7 +0x8789 0x32a8 +0x878a 0x3231 +0x878b 0x3232 +0x878c 0x3239 +0x878d 0x337e +0x878e 0x337d +0x878f 0x337c +0x8790 0x2252 +0x8791 0x2261 +0x8792 0x222b +0x8793 0x222e +0x8794 0x2211 +0x8795 0x221a +0x8796 0x22a5 +0x8797 0x2220 +0x8798 0x221f +0x8799 0x22bf +0x879a 0x2235 +0x879b 0x2229 +0x879c 0x222a +0x889f 0x4e9c +0x88a0 0x5516 +0x88a1 0x5a03 +0x88a2 0x963f +0x88a3 0x54c0 +0x88a4 0x611b +0x88a5 0x6328 +0x88a6 0x59f6 +0x88a7 0x9022 +0x88a8 0x8475 +0x88a9 0x831c +0x88aa 0x7a50 +0x88ab 0x60aa +0x88ac 0x63e1 +0x88ad 0x6e25 +0x88ae 0x65ed +0x88af 0x8466 +0x88b0 0x82a6 +0x88b1 0x9bf5 +0x88b2 0x6893 +0x88b3 0x5727 +0x88b4 0x65a1 +0x88b5 0x6271 +0x88b6 0x5b9b +0x88b7 0x59d0 +0x88b8 0x867b +0x88b9 0x98f4 +0x88ba 0x7d62 +0x88bb 0x7dbe +0x88bc 0x9b8e +0x88bd 0x6216 +0x88be 0x7c9f +0x88bf 0x88b7 +0x88c0 0x5b89 +0x88c1 0x5eb5 +0x88c2 0x6309 +0x88c3 0x6697 +0x88c4 0x6848 +0x88c5 0x95c7 +0x88c6 0x978d +0x88c7 0x674f +0x88c8 0x4ee5 +0x88c9 0x4f0a +0x88ca 0x4f4d +0x88cb 0x4f9d +0x88cc 0x5049 +0x88cd 0x56f2 +0x88ce 0x5937 +0x88cf 0x59d4 +0x88d0 0x5a01 +0x88d1 0x5c09 +0x88d2 0x60df +0x88d3 0x610f +0x88d4 0x6170 +0x88d5 0x6613 +0x88d6 0x6905 +0x88d7 0x70ba +0x88d8 0x754f +0x88d9 0x7570 +0x88da 0x79fb +0x88db 0x7dad +0x88dc 0x7def +0x88dd 0x80c3 +0x88de 0x840e +0x88df 0x8863 +0x88e0 0x8b02 +0x88e1 0x9055 +0x88e2 0x907a +0x88e3 0x533b +0x88e4 0x4e95 +0x88e5 0x4ea5 +0x88e6 0x57df +0x88e7 0x80b2 +0x88e8 0x90c1 +0x88e9 0x78ef +0x88ea 0x4e00 +0x88eb 0x58f1 +0x88ec 0x6ea2 +0x88ed 0x9038 +0x88ee 0x7a32 +0x88ef 0x8328 +0x88f0 0x828b +0x88f1 0x9c2f +0x88f2 0x5141 +0x88f3 0x5370 +0x88f4 0x54bd +0x88f5 0x54e1 +0x88f6 0x56e0 +0x88f7 0x59fb +0x88f8 0x5f15 +0x88f9 0x98f2 +0x88fa 0x6deb +0x88fb 0x80e4 +0x88fc 0x852d +0x8940 0x9662 +0x8941 0x9670 +0x8942 0x96a0 +0x8943 0x97fb +0x8944 0x540b +0x8945 0x53f3 +0x8946 0x5b87 +0x8947 0x70cf +0x8948 0x7fbd +0x8949 0x8fc2 +0x894a 0x96e8 +0x894b 0x536f +0x894c 0x9d5c +0x894d 0x7aba +0x894e 0x4e11 +0x894f 0x7893 +0x8950 0x81fc +0x8951 0x6e26 +0x8952 0x5618 +0x8953 0x5504 +0x8954 0x6b1d +0x8955 0x851a +0x8956 0x9c3b +0x8957 0x59e5 +0x8958 0x53a9 +0x8959 0x6d66 +0x895a 0x74dc +0x895b 0x958f +0x895c 0x5642 +0x895d 0x4e91 +0x895e 0x904b +0x895f 0x96f2 +0x8960 0x834f +0x8961 0x990c +0x8962 0x53e1 +0x8963 0x55b6 +0x8964 0x5b30 +0x8965 0x5f71 +0x8966 0x6620 +0x8967 0x66f3 +0x8968 0x6804 +0x8969 0x6c38 +0x896a 0x6cf3 +0x896b 0x6d29 +0x896c 0x745b +0x896d 0x76c8 +0x896e 0x7a4e +0x896f 0x9834 +0x8970 0x82f1 +0x8971 0x885b +0x8972 0x8a60 +0x8973 0x92ed +0x8974 0x6db2 +0x8975 0x75ab +0x8976 0x76ca +0x8977 0x99c5 +0x8978 0x60a6 +0x8979 0x8b01 +0x897a 0x8d8a +0x897b 0x95b2 +0x897c 0x698e +0x897d 0x53ad +0x897e 0x5186 +0x8980 0x5712 +0x8981 0x5830 +0x8982 0x5944 +0x8983 0x5bb4 +0x8984 0x5ef6 +0x8985 0x6028 +0x8986 0x63a9 +0x8987 0x63f4 +0x8988 0x6cbf +0x8989 0x6f14 +0x898a 0x708e +0x898b 0x7114 +0x898c 0x7159 +0x898d 0x71d5 +0x898e 0x733f +0x898f 0x7e01 +0x8990 0x8276 +0x8991 0x82d1 +0x8992 0x8597 +0x8993 0x9060 +0x8994 0x925b +0x8995 0x9d1b +0x8996 0x5869 +0x8997 0x65bc +0x8998 0x6c5a +0x8999 0x7525 +0x899a 0x51f9 +0x899b 0x592e +0x899c 0x5965 +0x899d 0x5f80 +0x899e 0x5fdc +0x899f 0x62bc +0x89a0 0x65fa +0x89a1 0x6a2a +0x89a2 0x6b27 +0x89a3 0x6bb4 +0x89a4 0x738b +0x89a5 0x7fc1 +0x89a6 0x8956 +0x89a7 0x9d2c +0x89a8 0x9d0e +0x89a9 0x9ec4 +0x89aa 0x5ca1 +0x89ab 0x6c96 +0x89ac 0x837b +0x89ad 0x5104 +0x89ae 0x5c4b +0x89af 0x61b6 +0x89b0 0x81c6 +0x89b1 0x6876 +0x89b2 0x7261 +0x89b3 0x4e59 +0x89b4 0x4ffa +0x89b5 0x5378 +0x89b6 0x6069 +0x89b7 0x6e29 +0x89b8 0x7a4f +0x89b9 0x97f3 +0x89ba 0x4e0b +0x89bb 0x5316 +0x89bc 0x4eee +0x89bd 0x4f55 +0x89be 0x4f3d +0x89bf 0x4fa1 +0x89c0 0x4f73 +0x89c1 0x52a0 +0x89c2 0x53ef +0x89c3 0x5609 +0x89c4 0x590f +0x89c5 0x5ac1 +0x89c6 0x5bb6 +0x89c7 0x5be1 +0x89c8 0x79d1 +0x89c9 0x6687 +0x89ca 0x679c +0x89cb 0x67b6 +0x89cc 0x6b4c +0x89cd 0x6cb3 +0x89ce 0x706b +0x89cf 0x73c2 +0x89d0 0x798d +0x89d1 0x79be +0x89d2 0x7a3c +0x89d3 0x7b87 +0x89d4 0x82b1 +0x89d5 0x82db +0x89d6 0x8304 +0x89d7 0x8377 +0x89d8 0x83ef +0x89d9 0x83d3 +0x89da 0x8766 +0x89db 0x8ab2 +0x89dc 0x5629 +0x89dd 0x8ca8 +0x89de 0x8fe6 +0x89df 0x904e +0x89e0 0x971e +0x89e1 0x868a +0x89e2 0x4fc4 +0x89e3 0x5ce8 +0x89e4 0x6211 +0x89e5 0x7259 +0x89e6 0x753b +0x89e7 0x81e5 +0x89e8 0x82bd +0x89e9 0x86fe +0x89ea 0x8cc0 +0x89eb 0x96c5 +0x89ec 0x9913 +0x89ed 0x99d5 +0x89ee 0x4ecb +0x89ef 0x4f1a +0x89f0 0x89e3 +0x89f1 0x56de +0x89f2 0x584a +0x89f3 0x58ca +0x89f4 0x5efb +0x89f5 0x5feb +0x89f6 0x602a +0x89f7 0x6094 +0x89f8 0x6062 +0x89f9 0x61d0 +0x89fa 0x6212 +0x89fb 0x62d0 +0x89fc 0x6539 +0x8a40 0x9b41 +0x8a41 0x6666 +0x8a42 0x68b0 +0x8a43 0x6d77 +0x8a44 0x7070 +0x8a45 0x754c +0x8a46 0x7686 +0x8a47 0x7d75 +0x8a48 0x82a5 +0x8a49 0x87f9 +0x8a4a 0x958b +0x8a4b 0x968e +0x8a4c 0x8c9d +0x8a4d 0x51f1 +0x8a4e 0x52be +0x8a4f 0x5916 +0x8a50 0x54b3 +0x8a51 0x5bb3 +0x8a52 0x5d16 +0x8a53 0x6168 +0x8a54 0x6982 +0x8a55 0x6daf +0x8a56 0x788d +0x8a57 0x84cb +0x8a58 0x8857 +0x8a59 0x8a72 +0x8a5a 0x93a7 +0x8a5b 0x9ab8 +0x8a5c 0x6d6c +0x8a5d 0x99a8 +0x8a5e 0x86d9 +0x8a5f 0x57a3 +0x8a60 0x67ff +0x8a61 0x86ce +0x8a62 0x920e +0x8a63 0x5283 +0x8a64 0x5687 +0x8a65 0x5404 +0x8a66 0x5ed3 +0x8a67 0x62e1 +0x8a68 0x64b9 +0x8a69 0x683c +0x8a6a 0x6838 +0x8a6b 0x6bbb +0x8a6c 0x7372 +0x8a6d 0x78ba +0x8a6e 0x7a6b +0x8a6f 0x899a +0x8a70 0x89d2 +0x8a71 0x8d6b +0x8a72 0x8f03 +0x8a73 0x90ed +0x8a74 0x95a3 +0x8a75 0x9694 +0x8a76 0x9769 +0x8a77 0x5b66 +0x8a78 0x5cb3 +0x8a79 0x697d +0x8a7a 0x984d +0x8a7b 0x984e +0x8a7c 0x639b +0x8a7d 0x7b20 +0x8a7e 0x6a2b +0x8a80 0x6a7f +0x8a81 0x68b6 +0x8a82 0x9c0d +0x8a83 0x6f5f +0x8a84 0x5272 +0x8a85 0x559d +0x8a86 0x6070 +0x8a87 0x62ec +0x8a88 0x6d3b +0x8a89 0x6e07 +0x8a8a 0x6ed1 +0x8a8b 0x845b +0x8a8c 0x8910 +0x8a8d 0x8f44 +0x8a8e 0x4e14 +0x8a8f 0x9c39 +0x8a90 0x53f6 +0x8a91 0x691b +0x8a92 0x6a3a +0x8a93 0x9784 +0x8a94 0x682a +0x8a95 0x515c +0x8a96 0x7ac3 +0x8a97 0x84b2 +0x8a98 0x91dc +0x8a99 0x938c +0x8a9a 0x565b +0x8a9b 0x9d28 +0x8a9c 0x6822 +0x8a9d 0x8305 +0x8a9e 0x8431 +0x8a9f 0x7ca5 +0x8aa0 0x5208 +0x8aa1 0x82c5 +0x8aa2 0x74e6 +0x8aa3 0x4e7e +0x8aa4 0x4f83 +0x8aa5 0x51a0 +0x8aa6 0x5bd2 +0x8aa7 0x520a +0x8aa8 0x52d8 +0x8aa9 0x52e7 +0x8aaa 0x5dfb +0x8aab 0x559a +0x8aac 0x582a +0x8aad 0x59e6 +0x8aae 0x5b8c +0x8aaf 0x5b98 +0x8ab0 0x5bdb +0x8ab1 0x5e72 +0x8ab2 0x5e79 +0x8ab3 0x60a3 +0x8ab4 0x611f +0x8ab5 0x6163 +0x8ab6 0x61be +0x8ab7 0x63db +0x8ab8 0x6562 +0x8ab9 0x67d1 +0x8aba 0x6853 +0x8abb 0x68fa +0x8abc 0x6b3e +0x8abd 0x6b53 +0x8abe 0x6c57 +0x8abf 0x6f22 +0x8ac0 0x6f97 +0x8ac1 0x6f45 +0x8ac2 0x74b0 +0x8ac3 0x7518 +0x8ac4 0x76e3 +0x8ac5 0x770b +0x8ac6 0x7aff +0x8ac7 0x7ba1 +0x8ac8 0x7c21 +0x8ac9 0x7de9 +0x8aca 0x7f36 +0x8acb 0x7ff0 +0x8acc 0x809d +0x8acd 0x8266 +0x8ace 0x839e +0x8acf 0x89b3 +0x8ad0 0x8acc +0x8ad1 0x8cab +0x8ad2 0x9084 +0x8ad3 0x9451 +0x8ad4 0x9593 +0x8ad5 0x9591 +0x8ad6 0x95a2 +0x8ad7 0x9665 +0x8ad8 0x97d3 +0x8ad9 0x9928 +0x8ada 0x8218 +0x8adb 0x4e38 +0x8adc 0x542b +0x8add 0x5cb8 +0x8ade 0x5dcc +0x8adf 0x73a9 +0x8ae0 0x764c +0x8ae1 0x773c +0x8ae2 0x5ca9 +0x8ae3 0x7feb +0x8ae4 0x8d0b +0x8ae5 0x96c1 +0x8ae6 0x9811 +0x8ae7 0x9854 +0x8ae8 0x9858 +0x8ae9 0x4f01 +0x8aea 0x4f0e +0x8aeb 0x5371 +0x8aec 0x559c +0x8aed 0x5668 +0x8aee 0x57fa +0x8aef 0x5947 +0x8af0 0x5b09 +0x8af1 0x5bc4 +0x8af2 0x5c90 +0x8af3 0x5e0c +0x8af4 0x5e7e +0x8af5 0x5fcc +0x8af6 0x63ee +0x8af7 0x673a +0x8af8 0x65d7 +0x8af9 0x65e2 +0x8afa 0x671f +0x8afb 0x68cb +0x8afc 0x68c4 +0x8b40 0x6a5f +0x8b41 0x5e30 +0x8b42 0x6bc5 +0x8b43 0x6c17 +0x8b44 0x6c7d +0x8b45 0x757f +0x8b46 0x7948 +0x8b47 0x5b63 +0x8b48 0x7a00 +0x8b49 0x7d00 +0x8b4a 0x5fbd +0x8b4b 0x898f +0x8b4c 0x8a18 +0x8b4d 0x8cb4 +0x8b4e 0x8d77 +0x8b4f 0x8ecc +0x8b50 0x8f1d +0x8b51 0x98e2 +0x8b52 0x9a0e +0x8b53 0x9b3c +0x8b54 0x4e80 +0x8b55 0x507d +0x8b56 0x5100 +0x8b57 0x5993 +0x8b58 0x5b9c +0x8b59 0x622f +0x8b5a 0x6280 +0x8b5b 0x64ec +0x8b5c 0x6b3a +0x8b5d 0x72a0 +0x8b5e 0x7591 +0x8b5f 0x7947 +0x8b60 0x7fa9 +0x8b61 0x87fb +0x8b62 0x8abc +0x8b63 0x8b70 +0x8b64 0x63ac +0x8b65 0x83ca +0x8b66 0x97a0 +0x8b67 0x5409 +0x8b68 0x5403 +0x8b69 0x55ab +0x8b6a 0x6854 +0x8b6b 0x6a58 +0x8b6c 0x8a70 +0x8b6d 0x7827 +0x8b6e 0x6775 +0x8b6f 0x9ecd +0x8b70 0x5374 +0x8b71 0x5ba2 +0x8b72 0x811a +0x8b73 0x8650 +0x8b74 0x9006 +0x8b75 0x4e18 +0x8b76 0x4e45 +0x8b77 0x4ec7 +0x8b78 0x4f11 +0x8b79 0x53ca +0x8b7a 0x5438 +0x8b7b 0x5bae +0x8b7c 0x5f13 +0x8b7d 0x6025 +0x8b7e 0x6551 +0x8b80 0x673d +0x8b81 0x6c42 +0x8b82 0x6c72 +0x8b83 0x6ce3 +0x8b84 0x7078 +0x8b85 0x7403 +0x8b86 0x7a76 +0x8b87 0x7aae +0x8b88 0x7b08 +0x8b89 0x7d1a +0x8b8a 0x7cfe +0x8b8b 0x7d66 +0x8b8c 0x65e7 +0x8b8d 0x725b +0x8b8e 0x53bb +0x8b8f 0x5c45 +0x8b90 0x5de8 +0x8b91 0x62d2 +0x8b92 0x62e0 +0x8b93 0x6319 +0x8b94 0x6e20 +0x8b95 0x865a +0x8b96 0x8a31 +0x8b97 0x8ddd +0x8b98 0x92f8 +0x8b99 0x6f01 +0x8b9a 0x79a6 +0x8b9b 0x9b5a +0x8b9c 0x4ea8 +0x8b9d 0x4eab +0x8b9e 0x4eac +0x8b9f 0x4f9b +0x8ba0 0x4fa0 +0x8ba1 0x50d1 +0x8ba2 0x5147 +0x8ba3 0x7af6 +0x8ba4 0x5171 +0x8ba5 0x51f6 +0x8ba6 0x5354 +0x8ba7 0x5321 +0x8ba8 0x537f +0x8ba9 0x53eb +0x8baa 0x55ac +0x8bab 0x5883 +0x8bac 0x5ce1 +0x8bad 0x5f37 +0x8bae 0x5f4a +0x8baf 0x602f +0x8bb0 0x6050 +0x8bb1 0x606d +0x8bb2 0x631f +0x8bb3 0x6559 +0x8bb4 0x6a4b +0x8bb5 0x6cc1 +0x8bb6 0x72c2 +0x8bb7 0x72ed +0x8bb8 0x77ef +0x8bb9 0x80f8 +0x8bba 0x8105 +0x8bbb 0x8208 +0x8bbc 0x854e +0x8bbd 0x90f7 +0x8bbe 0x93e1 +0x8bbf 0x97ff +0x8bc0 0x9957 +0x8bc1 0x9a5a +0x8bc2 0x4ef0 +0x8bc3 0x51dd +0x8bc4 0x5c2d +0x8bc5 0x6681 +0x8bc6 0x696d +0x8bc7 0x5c40 +0x8bc8 0x66f2 +0x8bc9 0x6975 +0x8bca 0x7389 +0x8bcb 0x6850 +0x8bcc 0x7c81 +0x8bcd 0x50c5 +0x8bce 0x52e4 +0x8bcf 0x5747 +0x8bd0 0x5dfe +0x8bd1 0x9326 +0x8bd2 0x65a4 +0x8bd3 0x6b23 +0x8bd4 0x6b3d +0x8bd5 0x7434 +0x8bd6 0x7981 +0x8bd7 0x79bd +0x8bd8 0x7b4b +0x8bd9 0x7dca +0x8bda 0x82b9 +0x8bdb 0x83cc +0x8bdc 0x887f +0x8bdd 0x895f +0x8bde 0x8b39 +0x8bdf 0x8fd1 +0x8be0 0x91d1 +0x8be1 0x541f +0x8be2 0x9280 +0x8be3 0x4e5d +0x8be4 0x5036 +0x8be5 0x53e5 +0x8be6 0x533a +0x8be7 0x72d7 +0x8be8 0x7396 +0x8be9 0x77e9 +0x8bea 0x82e6 +0x8beb 0x8eaf +0x8bec 0x99c6 +0x8bed 0x99c8 +0x8bee 0x99d2 +0x8bef 0x5177 +0x8bf0 0x611a +0x8bf1 0x865e +0x8bf2 0x55b0 +0x8bf3 0x7a7a +0x8bf4 0x5076 +0x8bf5 0x5bd3 +0x8bf6 0x9047 +0x8bf7 0x9685 +0x8bf8 0x4e32 +0x8bf9 0x6adb +0x8bfa 0x91e7 +0x8bfb 0x5c51 +0x8bfc 0x5c48 +0x8c40 0x6398 +0x8c41 0x7a9f +0x8c42 0x6c93 +0x8c43 0x9774 +0x8c44 0x8f61 +0x8c45 0x7aaa +0x8c46 0x718a +0x8c47 0x9688 +0x8c48 0x7c82 +0x8c49 0x6817 +0x8c4a 0x7e70 +0x8c4b 0x6851 +0x8c4c 0x936c +0x8c4d 0x52f2 +0x8c4e 0x541b +0x8c4f 0x85ab +0x8c50 0x8a13 +0x8c51 0x7fa4 +0x8c52 0x8ecd +0x8c53 0x90e1 +0x8c54 0x5366 +0x8c55 0x8888 +0x8c56 0x7941 +0x8c57 0x4fc2 +0x8c58 0x50be +0x8c59 0x5211 +0x8c5a 0x5144 +0x8c5b 0x5553 +0x8c5c 0x572d +0x8c5d 0x73ea +0x8c5e 0x578b +0x8c5f 0x5951 +0x8c60 0x5f62 +0x8c61 0x5f84 +0x8c62 0x6075 +0x8c63 0x6176 +0x8c64 0x6167 +0x8c65 0x61a9 +0x8c66 0x63b2 +0x8c67 0x643a +0x8c68 0x656c +0x8c69 0x666f +0x8c6a 0x6842 +0x8c6b 0x6e13 +0x8c6c 0x7566 +0x8c6d 0x7a3d +0x8c6e 0x7cfb +0x8c6f 0x7d4c +0x8c70 0x7d99 +0x8c71 0x7e4b +0x8c72 0x7f6b +0x8c73 0x830e +0x8c74 0x834a +0x8c75 0x86cd +0x8c76 0x8a08 +0x8c77 0x8a63 +0x8c78 0x8b66 +0x8c79 0x8efd +0x8c7a 0x981a +0x8c7b 0x9d8f +0x8c7c 0x82b8 +0x8c7d 0x8fce +0x8c7e 0x9be8 +0x8c80 0x5287 +0x8c81 0x621f +0x8c82 0x6483 +0x8c83 0x6fc0 +0x8c84 0x9699 +0x8c85 0x6841 +0x8c86 0x5091 +0x8c87 0x6b20 +0x8c88 0x6c7a +0x8c89 0x6f54 +0x8c8a 0x7a74 +0x8c8b 0x7d50 +0x8c8c 0x8840 +0x8c8d 0x8a23 +0x8c8e 0x6708 +0x8c8f 0x4ef6 +0x8c90 0x5039 +0x8c91 0x5026 +0x8c92 0x5065 +0x8c93 0x517c +0x8c94 0x5238 +0x8c95 0x5263 +0x8c96 0x55a7 +0x8c97 0x570f +0x8c98 0x5805 +0x8c99 0x5acc +0x8c9a 0x5efa +0x8c9b 0x61b2 +0x8c9c 0x61f8 +0x8c9d 0x62f3 +0x8c9e 0x6372 +0x8c9f 0x691c +0x8ca0 0x6a29 +0x8ca1 0x727d +0x8ca2 0x72ac +0x8ca3 0x732e +0x8ca4 0x7814 +0x8ca5 0x786f +0x8ca6 0x7d79 +0x8ca7 0x770c +0x8ca8 0x80a9 +0x8ca9 0x898b +0x8caa 0x8b19 +0x8cab 0x8ce2 +0x8cac 0x8ed2 +0x8cad 0x9063 +0x8cae 0x9375 +0x8caf 0x967a +0x8cb0 0x9855 +0x8cb1 0x9a13 +0x8cb2 0x9e78 +0x8cb3 0x5143 +0x8cb4 0x539f +0x8cb5 0x53b3 +0x8cb6 0x5e7b +0x8cb7 0x5f26 +0x8cb8 0x6e1b +0x8cb9 0x6e90 +0x8cba 0x7384 +0x8cbb 0x73fe +0x8cbc 0x7d43 +0x8cbd 0x8237 +0x8cbe 0x8a00 +0x8cbf 0x8afa +0x8cc0 0x9650 +0x8cc1 0x4e4e +0x8cc2 0x500b +0x8cc3 0x53e4 +0x8cc4 0x547c +0x8cc5 0x56fa +0x8cc6 0x59d1 +0x8cc7 0x5b64 +0x8cc8 0x5df1 +0x8cc9 0x5eab +0x8cca 0x5f27 +0x8ccb 0x6238 +0x8ccc 0x6545 +0x8ccd 0x67af +0x8cce 0x6e56 +0x8ccf 0x72d0 +0x8cd0 0x7cca +0x8cd1 0x88b4 +0x8cd2 0x80a1 +0x8cd3 0x80e1 +0x8cd4 0x83f0 +0x8cd5 0x864e +0x8cd6 0x8a87 +0x8cd7 0x8de8 +0x8cd8 0x9237 +0x8cd9 0x96c7 +0x8cda 0x9867 +0x8cdb 0x9f13 +0x8cdc 0x4e94 +0x8cdd 0x4e92 +0x8cde 0x4f0d +0x8cdf 0x5348 +0x8ce0 0x5449 +0x8ce1 0x543e +0x8ce2 0x5a2f +0x8ce3 0x5f8c +0x8ce4 0x5fa1 +0x8ce5 0x609f +0x8ce6 0x68a7 +0x8ce7 0x6a8e +0x8ce8 0x745a +0x8ce9 0x7881 +0x8cea 0x8a9e +0x8ceb 0x8aa4 +0x8cec 0x8b77 +0x8ced 0x9190 +0x8cee 0x4e5e +0x8cef 0x9bc9 +0x8cf0 0x4ea4 +0x8cf1 0x4f7c +0x8cf2 0x4faf +0x8cf3 0x5019 +0x8cf4 0x5016 +0x8cf5 0x5149 +0x8cf6 0x516c +0x8cf7 0x529f +0x8cf8 0x52b9 +0x8cf9 0x52fe +0x8cfa 0x539a +0x8cfb 0x53e3 +0x8cfc 0x5411 +0x8d40 0x540e +0x8d41 0x5589 +0x8d42 0x5751 +0x8d43 0x57a2 +0x8d44 0x597d +0x8d45 0x5b54 +0x8d46 0x5b5d +0x8d47 0x5b8f +0x8d48 0x5de5 +0x8d49 0x5de7 +0x8d4a 0x5df7 +0x8d4b 0x5e78 +0x8d4c 0x5e83 +0x8d4d 0x5e9a +0x8d4e 0x5eb7 +0x8d4f 0x5f18 +0x8d50 0x6052 +0x8d51 0x614c +0x8d52 0x6297 +0x8d53 0x62d8 +0x8d54 0x63a7 +0x8d55 0x653b +0x8d56 0x6602 +0x8d57 0x6643 +0x8d58 0x66f4 +0x8d59 0x676d +0x8d5a 0x6821 +0x8d5b 0x6897 +0x8d5c 0x69cb +0x8d5d 0x6c5f +0x8d5e 0x6d2a +0x8d5f 0x6d69 +0x8d60 0x6e2f +0x8d61 0x6e9d +0x8d62 0x7532 +0x8d63 0x7687 +0x8d64 0x786c +0x8d65 0x7a3f +0x8d66 0x7ce0 +0x8d67 0x7d05 +0x8d68 0x7d18 +0x8d69 0x7d5e +0x8d6a 0x7db1 +0x8d6b 0x8015 +0x8d6c 0x8003 +0x8d6d 0x80af +0x8d6e 0x80b1 +0x8d6f 0x8154 +0x8d70 0x818f +0x8d71 0x822a +0x8d72 0x8352 +0x8d73 0x884c +0x8d74 0x8861 +0x8d75 0x8b1b +0x8d76 0x8ca2 +0x8d77 0x8cfc +0x8d78 0x90ca +0x8d79 0x9175 +0x8d7a 0x9271 +0x8d7b 0x783f +0x8d7c 0x92fc +0x8d7d 0x95a4 +0x8d7e 0x964d +0x8d80 0x9805 +0x8d81 0x9999 +0x8d82 0x9ad8 +0x8d83 0x9d3b +0x8d84 0x525b +0x8d85 0x52ab +0x8d86 0x53f7 +0x8d87 0x5408 +0x8d88 0x58d5 +0x8d89 0x62f7 +0x8d8a 0x6fe0 +0x8d8b 0x8c6a +0x8d8c 0x8f5f +0x8d8d 0x9eb9 +0x8d8e 0x514b +0x8d8f 0x523b +0x8d90 0x544a +0x8d91 0x56fd +0x8d92 0x7a40 +0x8d93 0x9177 +0x8d94 0x9d60 +0x8d95 0x9ed2 +0x8d96 0x7344 +0x8d97 0x6f09 +0x8d98 0x8170 +0x8d99 0x7511 +0x8d9a 0x5ffd +0x8d9b 0x60da +0x8d9c 0x9aa8 +0x8d9d 0x72db +0x8d9e 0x8fbc +0x8d9f 0x6b64 +0x8da0 0x9803 +0x8da1 0x4eca +0x8da2 0x56f0 +0x8da3 0x5764 +0x8da4 0x58be +0x8da5 0x5a5a +0x8da6 0x6068 +0x8da7 0x61c7 +0x8da8 0x660f +0x8da9 0x6606 +0x8daa 0x6839 +0x8dab 0x68b1 +0x8dac 0x6df7 +0x8dad 0x75d5 +0x8dae 0x7d3a +0x8daf 0x826e +0x8db0 0x9b42 +0x8db1 0x4e9b +0x8db2 0x4f50 +0x8db3 0x53c9 +0x8db4 0x5506 +0x8db5 0x5d6f +0x8db6 0x5de6 +0x8db7 0x5dee +0x8db8 0x67fb +0x8db9 0x6c99 +0x8dba 0x7473 +0x8dbb 0x7802 +0x8dbc 0x8a50 +0x8dbd 0x9396 +0x8dbe 0x88df +0x8dbf 0x5750 +0x8dc0 0x5ea7 +0x8dc1 0x632b +0x8dc2 0x50b5 +0x8dc3 0x50ac +0x8dc4 0x518d +0x8dc5 0x6700 +0x8dc6 0x54c9 +0x8dc7 0x585e +0x8dc8 0x59bb +0x8dc9 0x5bb0 +0x8dca 0x5f69 +0x8dcb 0x624d +0x8dcc 0x63a1 +0x8dcd 0x683d +0x8dce 0x6b73 +0x8dcf 0x6e08 +0x8dd0 0x707d +0x8dd1 0x91c7 +0x8dd2 0x7280 +0x8dd3 0x7815 +0x8dd4 0x7826 +0x8dd5 0x796d +0x8dd6 0x658e +0x8dd7 0x7d30 +0x8dd8 0x83dc +0x8dd9 0x88c1 +0x8dda 0x8f09 +0x8ddb 0x969b +0x8ddc 0x5264 +0x8ddd 0x5728 +0x8dde 0x6750 +0x8ddf 0x7f6a +0x8de0 0x8ca1 +0x8de1 0x51b4 +0x8de2 0x5742 +0x8de3 0x962a +0x8de4 0x583a +0x8de5 0x698a +0x8de6 0x80b4 +0x8de7 0x54b2 +0x8de8 0x5d0e +0x8de9 0x57fc +0x8dea 0x7895 +0x8deb 0x9dfa +0x8dec 0x4f5c +0x8ded 0x524a +0x8dee 0x548b +0x8def 0x643e +0x8df0 0x6628 +0x8df1 0x6714 +0x8df2 0x67f5 +0x8df3 0x7a84 +0x8df4 0x7b56 +0x8df5 0x7d22 +0x8df6 0x932f +0x8df7 0x685c +0x8df8 0x9bad +0x8df9 0x7b39 +0x8dfa 0x5319 +0x8dfb 0x518a +0x8dfc 0x5237 +0x8e40 0x5bdf +0x8e41 0x62f6 +0x8e42 0x64ae +0x8e43 0x64e6 +0x8e44 0x672d +0x8e45 0x6bba +0x8e46 0x85a9 +0x8e47 0x96d1 +0x8e48 0x7690 +0x8e49 0x9bd6 +0x8e4a 0x634c +0x8e4b 0x9306 +0x8e4c 0x9bab +0x8e4d 0x76bf +0x8e4e 0x6652 +0x8e4f 0x4e09 +0x8e50 0x5098 +0x8e51 0x53c2 +0x8e52 0x5c71 +0x8e53 0x60e8 +0x8e54 0x6492 +0x8e55 0x6563 +0x8e56 0x685f +0x8e57 0x71e6 +0x8e58 0x73ca +0x8e59 0x7523 +0x8e5a 0x7b97 +0x8e5b 0x7e82 +0x8e5c 0x8695 +0x8e5d 0x8b83 +0x8e5e 0x8cdb +0x8e5f 0x9178 +0x8e60 0x9910 +0x8e61 0x65ac +0x8e62 0x66ab +0x8e63 0x6b8b +0x8e64 0x4ed5 +0x8e65 0x4ed4 +0x8e66 0x4f3a +0x8e67 0x4f7f +0x8e68 0x523a +0x8e69 0x53f8 +0x8e6a 0x53f2 +0x8e6b 0x55e3 +0x8e6c 0x56db +0x8e6d 0x58eb +0x8e6e 0x59cb +0x8e6f 0x59c9 +0x8e70 0x59ff +0x8e71 0x5b50 +0x8e72 0x5c4d +0x8e73 0x5e02 +0x8e74 0x5e2b +0x8e75 0x5fd7 +0x8e76 0x601d +0x8e77 0x6307 +0x8e78 0x652f +0x8e79 0x5b5c +0x8e7a 0x65af +0x8e7b 0x65bd +0x8e7c 0x65e8 +0x8e7d 0x679d +0x8e7e 0x6b62 +0x8e80 0x6b7b +0x8e81 0x6c0f +0x8e82 0x7345 +0x8e83 0x7949 +0x8e84 0x79c1 +0x8e85 0x7cf8 +0x8e86 0x7d19 +0x8e87 0x7d2b +0x8e88 0x80a2 +0x8e89 0x8102 +0x8e8a 0x81f3 +0x8e8b 0x8996 +0x8e8c 0x8a5e +0x8e8d 0x8a69 +0x8e8e 0x8a66 +0x8e8f 0x8a8c +0x8e90 0x8aee +0x8e91 0x8cc7 +0x8e92 0x8cdc +0x8e93 0x96cc +0x8e94 0x98fc +0x8e95 0x6b6f +0x8e96 0x4e8b +0x8e97 0x4f3c +0x8e98 0x4f8d +0x8e99 0x5150 +0x8e9a 0x5b57 +0x8e9b 0x5bfa +0x8e9c 0x6148 +0x8e9d 0x6301 +0x8e9e 0x6642 +0x8e9f 0x6b21 +0x8ea0 0x6ecb +0x8ea1 0x6cbb +0x8ea2 0x723e +0x8ea3 0x74bd +0x8ea4 0x75d4 +0x8ea5 0x78c1 +0x8ea6 0x793a +0x8ea7 0x800c +0x8ea8 0x8033 +0x8ea9 0x81ea +0x8eaa 0x8494 +0x8eab 0x8f9e +0x8eac 0x6c50 +0x8ead 0x9e7f +0x8eae 0x5f0f +0x8eaf 0x8b58 +0x8eb0 0x9d2b +0x8eb1 0x7afa +0x8eb2 0x8ef8 +0x8eb3 0x5b8d +0x8eb4 0x96eb +0x8eb5 0x4e03 +0x8eb6 0x53f1 +0x8eb7 0x57f7 +0x8eb8 0x5931 +0x8eb9 0x5ac9 +0x8eba 0x5ba4 +0x8ebb 0x6089 +0x8ebc 0x6e7f +0x8ebd 0x6f06 +0x8ebe 0x75be +0x8ebf 0x8cea +0x8ec0 0x5b9f +0x8ec1 0x8500 +0x8ec2 0x7be0 +0x8ec3 0x5072 +0x8ec4 0x67f4 +0x8ec5 0x829d +0x8ec6 0x5c61 +0x8ec7 0x854a +0x8ec8 0x7e1e +0x8ec9 0x820e +0x8eca 0x5199 +0x8ecb 0x5c04 +0x8ecc 0x6368 +0x8ecd 0x8d66 +0x8ece 0x659c +0x8ecf 0x716e +0x8ed0 0x793e +0x8ed1 0x7d17 +0x8ed2 0x8005 +0x8ed3 0x8b1d +0x8ed4 0x8eca +0x8ed5 0x906e +0x8ed6 0x86c7 +0x8ed7 0x90aa +0x8ed8 0x501f +0x8ed9 0x52fa +0x8eda 0x5c3a +0x8edb 0x6753 +0x8edc 0x707c +0x8edd 0x7235 +0x8ede 0x914c +0x8edf 0x91c8 +0x8ee0 0x932b +0x8ee1 0x82e5 +0x8ee2 0x5bc2 +0x8ee3 0x5f31 +0x8ee4 0x60f9 +0x8ee5 0x4e3b +0x8ee6 0x53d6 +0x8ee7 0x5b88 +0x8ee8 0x624b +0x8ee9 0x6731 +0x8eea 0x6b8a +0x8eeb 0x72e9 +0x8eec 0x73e0 +0x8eed 0x7a2e +0x8eee 0x816b +0x8eef 0x8da3 +0x8ef0 0x9152 +0x8ef1 0x9996 +0x8ef2 0x5112 +0x8ef3 0x53d7 +0x8ef4 0x546a +0x8ef5 0x5bff +0x8ef6 0x6388 +0x8ef7 0x6a39 +0x8ef8 0x7dac +0x8ef9 0x9700 +0x8efa 0x56da +0x8efb 0x53ce +0x8efc 0x5468 +0x8f40 0x5b97 +0x8f41 0x5c31 +0x8f42 0x5dde +0x8f43 0x4fee +0x8f44 0x6101 +0x8f45 0x62fe +0x8f46 0x6d32 +0x8f47 0x79c0 +0x8f48 0x79cb +0x8f49 0x7d42 +0x8f4a 0x7e4d +0x8f4b 0x7fd2 +0x8f4c 0x81ed +0x8f4d 0x821f +0x8f4e 0x8490 +0x8f4f 0x8846 +0x8f50 0x8972 +0x8f51 0x8b90 +0x8f52 0x8e74 +0x8f53 0x8f2f +0x8f54 0x9031 +0x8f55 0x914b +0x8f56 0x916c +0x8f57 0x96c6 +0x8f58 0x919c +0x8f59 0x4ec0 +0x8f5a 0x4f4f +0x8f5b 0x5145 +0x8f5c 0x5341 +0x8f5d 0x5f93 +0x8f5e 0x620e +0x8f5f 0x67d4 +0x8f60 0x6c41 +0x8f61 0x6e0b +0x8f62 0x7363 +0x8f63 0x7e26 +0x8f64 0x91cd +0x8f65 0x9283 +0x8f66 0x53d4 +0x8f67 0x5919 +0x8f68 0x5bbf +0x8f69 0x6dd1 +0x8f6a 0x795d +0x8f6b 0x7e2e +0x8f6c 0x7c9b +0x8f6d 0x587e +0x8f6e 0x719f +0x8f6f 0x51fa +0x8f70 0x8853 +0x8f71 0x8ff0 +0x8f72 0x4fca +0x8f73 0x5cfb +0x8f74 0x6625 +0x8f75 0x77ac +0x8f76 0x7ae3 +0x8f77 0x821c +0x8f78 0x99ff +0x8f79 0x51c6 +0x8f7a 0x5faa +0x8f7b 0x65ec +0x8f7c 0x696f +0x8f7d 0x6b89 +0x8f7e 0x6df3 +0x8f80 0x6e96 +0x8f81 0x6f64 +0x8f82 0x76fe +0x8f83 0x7d14 +0x8f84 0x5de1 +0x8f85 0x9075 +0x8f86 0x9187 +0x8f87 0x9806 +0x8f88 0x51e6 +0x8f89 0x521d +0x8f8a 0x6240 +0x8f8b 0x6691 +0x8f8c 0x66d9 +0x8f8d 0x6e1a +0x8f8e 0x5eb6 +0x8f8f 0x7dd2 +0x8f90 0x7f72 +0x8f91 0x66f8 +0x8f92 0x85af +0x8f93 0x85f7 +0x8f94 0x8af8 +0x8f95 0x52a9 +0x8f96 0x53d9 +0x8f97 0x5973 +0x8f98 0x5e8f +0x8f99 0x5f90 +0x8f9a 0x6055 +0x8f9b 0x92e4 +0x8f9c 0x9664 +0x8f9d 0x50b7 +0x8f9e 0x511f +0x8f9f 0x52dd +0x8fa0 0x5320 +0x8fa1 0x5347 +0x8fa2 0x53ec +0x8fa3 0x54e8 +0x8fa4 0x5546 +0x8fa5 0x5531 +0x8fa6 0x5617 +0x8fa7 0x5968 +0x8fa8 0x59be +0x8fa9 0x5a3c +0x8faa 0x5bb5 +0x8fab 0x5c06 +0x8fac 0x5c0f +0x8fad 0x5c11 +0x8fae 0x5c1a +0x8faf 0x5e84 +0x8fb0 0x5e8a +0x8fb1 0x5ee0 +0x8fb2 0x5f70 +0x8fb3 0x627f +0x8fb4 0x6284 +0x8fb5 0x62db +0x8fb6 0x638c +0x8fb7 0x6377 +0x8fb8 0x6607 +0x8fb9 0x660c +0x8fba 0x662d +0x8fbb 0x6676 +0x8fbc 0x677e +0x8fbd 0x68a2 +0x8fbe 0x6a1f +0x8fbf 0x6a35 +0x8fc0 0x6cbc +0x8fc1 0x6d88 +0x8fc2 0x6e09 +0x8fc3 0x6e58 +0x8fc4 0x713c +0x8fc5 0x7126 +0x8fc6 0x7167 +0x8fc7 0x75c7 +0x8fc8 0x7701 +0x8fc9 0x785d +0x8fca 0x7901 +0x8fcb 0x7965 +0x8fcc 0x79f0 +0x8fcd 0x7ae0 +0x8fce 0x7b11 +0x8fcf 0x7ca7 +0x8fd0 0x7d39 +0x8fd1 0x8096 +0x8fd2 0x83d6 +0x8fd3 0x848b +0x8fd4 0x8549 +0x8fd5 0x885d +0x8fd6 0x88f3 +0x8fd7 0x8a1f +0x8fd8 0x8a3c +0x8fd9 0x8a54 +0x8fda 0x8a73 +0x8fdb 0x8c61 +0x8fdc 0x8cde +0x8fdd 0x91a4 +0x8fde 0x9266 +0x8fdf 0x937e +0x8fe0 0x9418 +0x8fe1 0x969c +0x8fe2 0x9798 +0x8fe3 0x4e0a +0x8fe4 0x4e08 +0x8fe5 0x4e1e +0x8fe6 0x4e57 +0x8fe7 0x5197 +0x8fe8 0x5270 +0x8fe9 0x57ce +0x8fea 0x5834 +0x8feb 0x58cc +0x8fec 0x5b22 +0x8fed 0x5e38 +0x8fee 0x60c5 +0x8fef 0x64fe +0x8ff0 0x6761 +0x8ff1 0x6756 +0x8ff2 0x6d44 +0x8ff3 0x72b6 +0x8ff4 0x7573 +0x8ff5 0x7a63 +0x8ff6 0x84b8 +0x8ff7 0x8b72 +0x8ff8 0x91b8 +0x8ff9 0x9320 +0x8ffa 0x5631 +0x8ffb 0x57f4 +0x8ffc 0x98fe +0x9040 0x62ed +0x9041 0x690d +0x9042 0x6b96 +0x9043 0x71ed +0x9044 0x7e54 +0x9045 0x8077 +0x9046 0x8272 +0x9047 0x89e6 +0x9048 0x98df +0x9049 0x8755 +0x904a 0x8fb1 +0x904b 0x5c3b +0x904c 0x4f38 +0x904d 0x4fe1 +0x904e 0x4fb5 +0x904f 0x5507 +0x9050 0x5a20 +0x9051 0x5bdd +0x9052 0x5be9 +0x9053 0x5fc3 +0x9054 0x614e +0x9055 0x632f +0x9056 0x65b0 +0x9057 0x664b +0x9058 0x68ee +0x9059 0x699b +0x905a 0x6d78 +0x905b 0x6df1 +0x905c 0x7533 +0x905d 0x75b9 +0x905e 0x771f +0x905f 0x795e +0x9060 0x79e6 +0x9061 0x7d33 +0x9062 0x81e3 +0x9063 0x82af +0x9064 0x85aa +0x9065 0x89aa +0x9066 0x8a3a +0x9067 0x8eab +0x9068 0x8f9b +0x9069 0x9032 +0x906a 0x91dd +0x906b 0x9707 +0x906c 0x4eba +0x906d 0x4ec1 +0x906e 0x5203 +0x906f 0x5875 +0x9070 0x58ec +0x9071 0x5c0b +0x9072 0x751a +0x9073 0x5c3d +0x9074 0x814e +0x9075 0x8a0a +0x9076 0x8fc5 +0x9077 0x9663 +0x9078 0x976d +0x9079 0x7b25 +0x907a 0x8acf +0x907b 0x9808 +0x907c 0x9162 +0x907d 0x56f3 +0x907e 0x53a8 +0x9080 0x9017 +0x9081 0x5439 +0x9082 0x5782 +0x9083 0x5e25 +0x9084 0x63a8 +0x9085 0x6c34 +0x9086 0x708a +0x9087 0x7761 +0x9088 0x7c8b +0x9089 0x7fe0 +0x908a 0x8870 +0x908b 0x9042 +0x908c 0x9154 +0x908d 0x9310 +0x908e 0x9318 +0x908f 0x968f +0x9090 0x745e +0x9091 0x9ac4 +0x9092 0x5d07 +0x9093 0x5d69 +0x9094 0x6570 +0x9095 0x67a2 +0x9096 0x8da8 +0x9097 0x96db +0x9098 0x636e +0x9099 0x6749 +0x909a 0x6919 +0x909b 0x83c5 +0x909c 0x9817 +0x909d 0x96c0 +0x909e 0x88fe +0x909f 0x6f84 +0x90a0 0x647a +0x90a1 0x5bf8 +0x90a2 0x4e16 +0x90a3 0x702c +0x90a4 0x755d +0x90a5 0x662f +0x90a6 0x51c4 +0x90a7 0x5236 +0x90a8 0x52e2 +0x90a9 0x59d3 +0x90aa 0x5f81 +0x90ab 0x6027 +0x90ac 0x6210 +0x90ad 0x653f +0x90ae 0x6574 +0x90af 0x661f +0x90b0 0x6674 +0x90b1 0x68f2 +0x90b2 0x6816 +0x90b3 0x6b63 +0x90b4 0x6e05 +0x90b5 0x7272 +0x90b6 0x751f +0x90b7 0x76db +0x90b8 0x7cbe +0x90b9 0x8056 +0x90ba 0x58f0 +0x90bb 0x88fd +0x90bc 0x897f +0x90bd 0x8aa0 +0x90be 0x8a93 +0x90bf 0x8acb +0x90c0 0x901d +0x90c1 0x9192 +0x90c2 0x9752 +0x90c3 0x9759 +0x90c4 0x6589 +0x90c5 0x7a0e +0x90c6 0x8106 +0x90c7 0x96bb +0x90c8 0x5e2d +0x90c9 0x60dc +0x90ca 0x621a +0x90cb 0x65a5 +0x90cc 0x6614 +0x90cd 0x6790 +0x90ce 0x77f3 +0x90cf 0x7a4d +0x90d0 0x7c4d +0x90d1 0x7e3e +0x90d2 0x810a +0x90d3 0x8cac +0x90d4 0x8d64 +0x90d5 0x8de1 +0x90d6 0x8e5f +0x90d7 0x78a9 +0x90d8 0x5207 +0x90d9 0x62d9 +0x90da 0x63a5 +0x90db 0x6442 +0x90dc 0x6298 +0x90dd 0x8a2d +0x90de 0x7a83 +0x90df 0x7bc0 +0x90e0 0x8aac +0x90e1 0x96ea +0x90e2 0x7d76 +0x90e3 0x820c +0x90e4 0x8749 +0x90e5 0x4ed9 +0x90e6 0x5148 +0x90e7 0x5343 +0x90e8 0x5360 +0x90e9 0x5ba3 +0x90ea 0x5c02 +0x90eb 0x5c16 +0x90ec 0x5ddd +0x90ed 0x6226 +0x90ee 0x6247 +0x90ef 0x64b0 +0x90f0 0x6813 +0x90f1 0x6834 +0x90f2 0x6cc9 +0x90f3 0x6d45 +0x90f4 0x6d17 +0x90f5 0x67d3 +0x90f6 0x6f5c +0x90f7 0x714e +0x90f8 0x717d +0x90f9 0x65cb +0x90fa 0x7a7f +0x90fb 0x7bad +0x90fc 0x7dda +0x9140 0x7e4a +0x9141 0x7fa8 +0x9142 0x817a +0x9143 0x821b +0x9144 0x8239 +0x9145 0x85a6 +0x9146 0x8a6e +0x9147 0x8cce +0x9148 0x8df5 +0x9149 0x9078 +0x914a 0x9077 +0x914b 0x92ad +0x914c 0x9291 +0x914d 0x9583 +0x914e 0x9bae +0x914f 0x524d +0x9150 0x5584 +0x9151 0x6f38 +0x9152 0x7136 +0x9153 0x5168 +0x9154 0x7985 +0x9155 0x7e55 +0x9156 0x81b3 +0x9157 0x7cce +0x9158 0x564c +0x9159 0x5851 +0x915a 0x5ca8 +0x915b 0x63aa +0x915c 0x66fe +0x915d 0x66fd +0x915e 0x695a +0x915f 0x72d9 +0x9160 0x758f +0x9161 0x758e +0x9162 0x790e +0x9163 0x7956 +0x9164 0x79df +0x9165 0x7c97 +0x9166 0x7d20 +0x9167 0x7d44 +0x9168 0x8607 +0x9169 0x8a34 +0x916a 0x963b +0x916b 0x9061 +0x916c 0x9f20 +0x916d 0x50e7 +0x916e 0x5275 +0x916f 0x53cc +0x9170 0x53e2 +0x9171 0x5009 +0x9172 0x55aa +0x9173 0x58ee +0x9174 0x594f +0x9175 0x723d +0x9176 0x5b8b +0x9177 0x5c64 +0x9178 0x531d +0x9179 0x60e3 +0x917a 0x60f3 +0x917b 0x635c +0x917c 0x6383 +0x917d 0x633f +0x917e 0x63bb +0x9180 0x64cd +0x9181 0x65e9 +0x9182 0x66f9 +0x9183 0x5de3 +0x9184 0x69cd +0x9185 0x69fd +0x9186 0x6f15 +0x9187 0x71e5 +0x9188 0x4e89 +0x9189 0x75e9 +0x918a 0x76f8 +0x918b 0x7a93 +0x918c 0x7cdf +0x918d 0x7dcf +0x918e 0x7d9c +0x918f 0x8061 +0x9190 0x8349 +0x9191 0x8358 +0x9192 0x846c +0x9193 0x84bc +0x9194 0x85fb +0x9195 0x88c5 +0x9196 0x8d70 +0x9197 0x9001 +0x9198 0x906d +0x9199 0x9397 +0x919a 0x971c +0x919b 0x9a12 +0x919c 0x50cf +0x919d 0x5897 +0x919e 0x618e +0x919f 0x81d3 +0x91a0 0x8535 +0x91a1 0x8d08 +0x91a2 0x9020 +0x91a3 0x4fc3 +0x91a4 0x5074 +0x91a5 0x5247 +0x91a6 0x5373 +0x91a7 0x606f +0x91a8 0x6349 +0x91a9 0x675f +0x91aa 0x6e2c +0x91ab 0x8db3 +0x91ac 0x901f +0x91ad 0x4fd7 +0x91ae 0x5c5e +0x91af 0x8cca +0x91b0 0x65cf +0x91b1 0x7d9a +0x91b2 0x5352 +0x91b3 0x8896 +0x91b4 0x5176 +0x91b5 0x63c3 +0x91b6 0x5b58 +0x91b7 0x5b6b +0x91b8 0x5c0a +0x91b9 0x640d +0x91ba 0x6751 +0x91bb 0x905c +0x91bc 0x4ed6 +0x91bd 0x591a +0x91be 0x592a +0x91bf 0x6c70 +0x91c0 0x8a51 +0x91c1 0x553e +0x91c2 0x5815 +0x91c3 0x59a5 +0x91c4 0x60f0 +0x91c5 0x6253 +0x91c6 0x67c1 +0x91c7 0x8235 +0x91c8 0x6955 +0x91c9 0x9640 +0x91ca 0x99c4 +0x91cb 0x9a28 +0x91cc 0x4f53 +0x91cd 0x5806 +0x91ce 0x5bfe +0x91cf 0x8010 +0x91d0 0x5cb1 +0x91d1 0x5e2f +0x91d2 0x5f85 +0x91d3 0x6020 +0x91d4 0x614b +0x91d5 0x6234 +0x91d6 0x66ff +0x91d7 0x6cf0 +0x91d8 0x6ede +0x91d9 0x80ce +0x91da 0x817f +0x91db 0x82d4 +0x91dc 0x888b +0x91dd 0x8cb8 +0x91de 0x9000 +0x91df 0x902e +0x91e0 0x968a +0x91e1 0x9edb +0x91e2 0x9bdb +0x91e3 0x4ee3 +0x91e4 0x53f0 +0x91e5 0x5927 +0x91e6 0x7b2c +0x91e7 0x918d +0x91e8 0x984c +0x91e9 0x9df9 +0x91ea 0x6edd +0x91eb 0x7027 +0x91ec 0x5353 +0x91ed 0x5544 +0x91ee 0x5b85 +0x91ef 0x6258 +0x91f0 0x629e +0x91f1 0x62d3 +0x91f2 0x6ca2 +0x91f3 0x6fef +0x91f4 0x7422 +0x91f5 0x8a17 +0x91f6 0x9438 +0x91f7 0x6fc1 +0x91f8 0x8afe +0x91f9 0x8338 +0x91fa 0x51e7 +0x91fb 0x86f8 +0x91fc 0x53ea +0x9240 0x53e9 +0x9241 0x4f46 +0x9242 0x9054 +0x9243 0x8fb0 +0x9244 0x596a +0x9245 0x8131 +0x9246 0x5dfd +0x9247 0x7aea +0x9248 0x8fbf +0x9249 0x68da +0x924a 0x8c37 +0x924b 0x72f8 +0x924c 0x9c48 +0x924d 0x6a3d +0x924e 0x8ab0 +0x924f 0x4e39 +0x9250 0x5358 +0x9251 0x5606 +0x9252 0x5766 +0x9253 0x62c5 +0x9254 0x63a2 +0x9255 0x65e6 +0x9256 0x6b4e +0x9257 0x6de1 +0x9258 0x6e5b +0x9259 0x70ad +0x925a 0x77ed +0x925b 0x7aef +0x925c 0x7baa +0x925d 0x7dbb +0x925e 0x803d +0x925f 0x80c6 +0x9260 0x86cb +0x9261 0x8a95 +0x9262 0x935b +0x9263 0x56e3 +0x9264 0x58c7 +0x9265 0x5f3e +0x9266 0x65ad +0x9267 0x6696 +0x9268 0x6a80 +0x9269 0x6bb5 +0x926a 0x7537 +0x926b 0x8ac7 +0x926c 0x5024 +0x926d 0x77e5 +0x926e 0x5730 +0x926f 0x5f1b +0x9270 0x6065 +0x9271 0x667a +0x9272 0x6c60 +0x9273 0x75f4 +0x9274 0x7a1a +0x9275 0x7f6e +0x9276 0x81f4 +0x9277 0x8718 +0x9278 0x9045 +0x9279 0x99b3 +0x927a 0x7bc9 +0x927b 0x755c +0x927c 0x7af9 +0x927d 0x7b51 +0x927e 0x84c4 +0x9280 0x9010 +0x9281 0x79e9 +0x9282 0x7a92 +0x9283 0x8336 +0x9284 0x5ae1 +0x9285 0x7740 +0x9286 0x4e2d +0x9287 0x4ef2 +0x9288 0x5b99 +0x9289 0x5fe0 +0x928a 0x62bd +0x928b 0x663c +0x928c 0x67f1 +0x928d 0x6ce8 +0x928e 0x866b +0x928f 0x8877 +0x9290 0x8a3b +0x9291 0x914e +0x9292 0x92f3 +0x9293 0x99d0 +0x9294 0x6a17 +0x9295 0x7026 +0x9296 0x732a +0x9297 0x82e7 +0x9298 0x8457 +0x9299 0x8caf +0x929a 0x4e01 +0x929b 0x5146 +0x929c 0x51cb +0x929d 0x558b +0x929e 0x5bf5 +0x929f 0x5e16 +0x92a0 0x5e33 +0x92a1 0x5e81 +0x92a2 0x5f14 +0x92a3 0x5f35 +0x92a4 0x5f6b +0x92a5 0x5fb4 +0x92a6 0x61f2 +0x92a7 0x6311 +0x92a8 0x66a2 +0x92a9 0x671d +0x92aa 0x6f6e +0x92ab 0x7252 +0x92ac 0x753a +0x92ad 0x773a +0x92ae 0x8074 +0x92af 0x8139 +0x92b0 0x8178 +0x92b1 0x8776 +0x92b2 0x8abf +0x92b3 0x8adc +0x92b4 0x8d85 +0x92b5 0x8df3 +0x92b6 0x929a +0x92b7 0x9577 +0x92b8 0x9802 +0x92b9 0x9ce5 +0x92ba 0x52c5 +0x92bb 0x6357 +0x92bc 0x76f4 +0x92bd 0x6715 +0x92be 0x6c88 +0x92bf 0x73cd +0x92c0 0x8cc3 +0x92c1 0x93ae +0x92c2 0x9673 +0x92c3 0x6d25 +0x92c4 0x589c +0x92c5 0x690e +0x92c6 0x69cc +0x92c7 0x8ffd +0x92c8 0x939a +0x92c9 0x75db +0x92ca 0x901a +0x92cb 0x585a +0x92cc 0x6802 +0x92cd 0x63b4 +0x92ce 0x69fb +0x92cf 0x4f43 +0x92d0 0x6f2c +0x92d1 0x67d8 +0x92d2 0x8fbb +0x92d3 0x8526 +0x92d4 0x7db4 +0x92d5 0x9354 +0x92d6 0x693f +0x92d7 0x6f70 +0x92d8 0x576a +0x92d9 0x58f7 +0x92da 0x5b2c +0x92db 0x7d2c +0x92dc 0x722a +0x92dd 0x540a +0x92de 0x91e3 +0x92df 0x9db4 +0x92e0 0x4ead +0x92e1 0x4f4e +0x92e2 0x505c +0x92e3 0x5075 +0x92e4 0x5243 +0x92e5 0x8c9e +0x92e6 0x5448 +0x92e7 0x5824 +0x92e8 0x5b9a +0x92e9 0x5e1d +0x92ea 0x5e95 +0x92eb 0x5ead +0x92ec 0x5ef7 +0x92ed 0x5f1f +0x92ee 0x608c +0x92ef 0x62b5 +0x92f0 0x633a +0x92f1 0x63d0 +0x92f2 0x68af +0x92f3 0x6c40 +0x92f4 0x7887 +0x92f5 0x798e +0x92f6 0x7a0b +0x92f7 0x7de0 +0x92f8 0x8247 +0x92f9 0x8a02 +0x92fa 0x8ae6 +0x92fb 0x8e44 +0x92fc 0x9013 +0x9340 0x90b8 +0x9341 0x912d +0x9342 0x91d8 +0x9343 0x9f0e +0x9344 0x6ce5 +0x9345 0x6458 +0x9346 0x64e2 +0x9347 0x6575 +0x9348 0x6ef4 +0x9349 0x7684 +0x934a 0x7b1b +0x934b 0x9069 +0x934c 0x93d1 +0x934d 0x6eba +0x934e 0x54f2 +0x934f 0x5fb9 +0x9350 0x64a4 +0x9351 0x8f4d +0x9352 0x8fed +0x9353 0x9244 +0x9354 0x5178 +0x9355 0x586b +0x9356 0x5929 +0x9357 0x5c55 +0x9358 0x5e97 +0x9359 0x6dfb +0x935a 0x7e8f +0x935b 0x751c +0x935c 0x8cbc +0x935d 0x8ee2 +0x935e 0x985b +0x935f 0x70b9 +0x9360 0x4f1d +0x9361 0x6bbf +0x9362 0x6fb1 +0x9363 0x7530 +0x9364 0x96fb +0x9365 0x514e +0x9366 0x5410 +0x9367 0x5835 +0x9368 0x5857 +0x9369 0x59ac +0x936a 0x5c60 +0x936b 0x5f92 +0x936c 0x6597 +0x936d 0x675c +0x936e 0x6e21 +0x936f 0x767b +0x9370 0x83df +0x9371 0x8ced +0x9372 0x9014 +0x9373 0x90fd +0x9374 0x934d +0x9375 0x7825 +0x9376 0x783a +0x9377 0x52aa +0x9378 0x5ea6 +0x9379 0x571f +0x937a 0x5974 +0x937b 0x6012 +0x937c 0x5012 +0x937d 0x515a +0x937e 0x51ac +0x9380 0x51cd +0x9381 0x5200 +0x9382 0x5510 +0x9383 0x5854 +0x9384 0x5858 +0x9385 0x5957 +0x9386 0x5b95 +0x9387 0x5cf6 +0x9388 0x5d8b +0x9389 0x60bc +0x938a 0x6295 +0x938b 0x642d +0x938c 0x6771 +0x938d 0x6843 +0x938e 0x68bc +0x938f 0x68df +0x9390 0x76d7 +0x9391 0x6dd8 +0x9392 0x6e6f +0x9393 0x6d9b +0x9394 0x706f +0x9395 0x71c8 +0x9396 0x5f53 +0x9397 0x75d8 +0x9398 0x7977 +0x9399 0x7b49 +0x939a 0x7b54 +0x939b 0x7b52 +0x939c 0x7cd6 +0x939d 0x7d71 +0x939e 0x5230 +0x939f 0x8463 +0x93a0 0x8569 +0x93a1 0x85e4 +0x93a2 0x8a0e +0x93a3 0x8b04 +0x93a4 0x8c46 +0x93a5 0x8e0f +0x93a6 0x9003 +0x93a7 0x900f +0x93a8 0x9419 +0x93a9 0x9676 +0x93aa 0x982d +0x93ab 0x9a30 +0x93ac 0x95d8 +0x93ad 0x50cd +0x93ae 0x52d5 +0x93af 0x540c +0x93b0 0x5802 +0x93b1 0x5c0e +0x93b2 0x61a7 +0x93b3 0x649e +0x93b4 0x6d1e +0x93b5 0x77b3 +0x93b6 0x7ae5 +0x93b7 0x80f4 +0x93b8 0x8404 +0x93b9 0x9053 +0x93ba 0x9285 +0x93bb 0x5ce0 +0x93bc 0x9d07 +0x93bd 0x533f +0x93be 0x5f97 +0x93bf 0x5fb3 +0x93c0 0x6d9c +0x93c1 0x7279 +0x93c2 0x7763 +0x93c3 0x79bf +0x93c4 0x7be4 +0x93c5 0x6bd2 +0x93c6 0x72ec +0x93c7 0x8aad +0x93c8 0x6803 +0x93c9 0x6a61 +0x93ca 0x51f8 +0x93cb 0x7a81 +0x93cc 0x6934 +0x93cd 0x5c4a +0x93ce 0x9cf6 +0x93cf 0x82eb +0x93d0 0x5bc5 +0x93d1 0x9149 +0x93d2 0x701e +0x93d3 0x5678 +0x93d4 0x5c6f +0x93d5 0x60c7 +0x93d6 0x6566 +0x93d7 0x6c8c +0x93d8 0x8c5a +0x93d9 0x9041 +0x93da 0x9813 +0x93db 0x5451 +0x93dc 0x66c7 +0x93dd 0x920d +0x93de 0x5948 +0x93df 0x90a3 +0x93e0 0x5185 +0x93e1 0x4e4d +0x93e2 0x51ea +0x93e3 0x8599 +0x93e4 0x8b0e +0x93e5 0x7058 +0x93e6 0x637a +0x93e7 0x934b +0x93e8 0x6962 +0x93e9 0x99b4 +0x93ea 0x7e04 +0x93eb 0x7577 +0x93ec 0x5357 +0x93ed 0x6960 +0x93ee 0x8edf +0x93ef 0x96e3 +0x93f0 0x6c5d +0x93f1 0x4e8c +0x93f2 0x5c3c +0x93f3 0x5f10 +0x93f4 0x8fe9 +0x93f5 0x5302 +0x93f6 0x8cd1 +0x93f7 0x8089 +0x93f8 0x8679 +0x93f9 0x5eff +0x93fa 0x65e5 +0x93fb 0x4e73 +0x93fc 0x5165 +0x9440 0x5982 +0x9441 0x5c3f +0x9442 0x97ee +0x9443 0x4efb +0x9444 0x598a +0x9445 0x5fcd +0x9446 0x8a8d +0x9447 0x6fe1 +0x9448 0x79b0 +0x9449 0x7962 +0x944a 0x5be7 +0x944b 0x8471 +0x944c 0x732b +0x944d 0x71b1 +0x944e 0x5e74 +0x944f 0x5ff5 +0x9450 0x637b +0x9451 0x649a +0x9452 0x71c3 +0x9453 0x7c98 +0x9454 0x4e43 +0x9455 0x5efc +0x9456 0x4e4b +0x9457 0x57dc +0x9458 0x56a2 +0x9459 0x60a9 +0x945a 0x6fc3 +0x945b 0x7d0d +0x945c 0x80fd +0x945d 0x8133 +0x945e 0x81bf +0x945f 0x8fb2 +0x9460 0x8997 +0x9461 0x86a4 +0x9462 0x5df4 +0x9463 0x628a +0x9464 0x64ad +0x9465 0x8987 +0x9466 0x6777 +0x9467 0x6ce2 +0x9468 0x6d3e +0x9469 0x7436 +0x946a 0x7834 +0x946b 0x5a46 +0x946c 0x7f75 +0x946d 0x82ad +0x946e 0x99ac +0x946f 0x4ff3 +0x9470 0x5ec3 +0x9471 0x62dd +0x9472 0x6392 +0x9473 0x6557 +0x9474 0x676f +0x9475 0x76c3 +0x9476 0x724c +0x9477 0x80cc +0x9478 0x80ba +0x9479 0x8f29 +0x947a 0x914d +0x947b 0x500d +0x947c 0x57f9 +0x947d 0x5a92 +0x947e 0x6885 +0x9480 0x6973 +0x9481 0x7164 +0x9482 0x72fd +0x9483 0x8cb7 +0x9484 0x58f2 +0x9485 0x8ce0 +0x9486 0x966a +0x9487 0x9019 +0x9488 0x877f +0x9489 0x79e4 +0x948a 0x77e7 +0x948b 0x8429 +0x948c 0x4f2f +0x948d 0x5265 +0x948e 0x535a +0x948f 0x62cd +0x9490 0x67cf +0x9491 0x6cca +0x9492 0x767d +0x9493 0x7b94 +0x9494 0x7c95 +0x9495 0x8236 +0x9496 0x8584 +0x9497 0x8feb +0x9498 0x66dd +0x9499 0x6f20 +0x949a 0x7206 +0x949b 0x7e1b +0x949c 0x83ab +0x949d 0x99c1 +0x949e 0x9ea6 +0x949f 0x51fd +0x94a0 0x7bb1 +0x94a1 0x7872 +0x94a2 0x7bb8 +0x94a3 0x8087 +0x94a4 0x7b48 +0x94a5 0x6ae8 +0x94a6 0x5e61 +0x94a7 0x808c +0x94a8 0x7551 +0x94a9 0x7560 +0x94aa 0x516b +0x94ab 0x9262 +0x94ac 0x6e8c +0x94ad 0x767a +0x94ae 0x9197 +0x94af 0x9aea +0x94b0 0x4f10 +0x94b1 0x7f70 +0x94b2 0x629c +0x94b3 0x7b4f +0x94b4 0x95a5 +0x94b5 0x9ce9 +0x94b6 0x567a +0x94b7 0x5859 +0x94b8 0x86e4 +0x94b9 0x96bc +0x94ba 0x4f34 +0x94bb 0x5224 +0x94bc 0x534a +0x94bd 0x53cd +0x94be 0x53db +0x94bf 0x5e06 +0x94c0 0x642c +0x94c1 0x6591 +0x94c2 0x677f +0x94c3 0x6c3e +0x94c4 0x6c4e +0x94c5 0x7248 +0x94c6 0x72af +0x94c7 0x73ed +0x94c8 0x7554 +0x94c9 0x7e41 +0x94ca 0x822c +0x94cb 0x85e9 +0x94cc 0x8ca9 +0x94cd 0x7bc4 +0x94ce 0x91c6 +0x94cf 0x7169 +0x94d0 0x9812 +0x94d1 0x98ef +0x94d2 0x633d +0x94d3 0x6669 +0x94d4 0x756a +0x94d5 0x76e4 +0x94d6 0x78d0 +0x94d7 0x8543 +0x94d8 0x86ee +0x94d9 0x532a +0x94da 0x5351 +0x94db 0x5426 +0x94dc 0x5983 +0x94dd 0x5e87 +0x94de 0x5f7c +0x94df 0x60b2 +0x94e0 0x6249 +0x94e1 0x6279 +0x94e2 0x62ab +0x94e3 0x6590 +0x94e4 0x6bd4 +0x94e5 0x6ccc +0x94e6 0x75b2 +0x94e7 0x76ae +0x94e8 0x7891 +0x94e9 0x79d8 +0x94ea 0x7dcb +0x94eb 0x7f77 +0x94ec 0x80a5 +0x94ed 0x88ab +0x94ee 0x8ab9 +0x94ef 0x8cbb +0x94f0 0x907f +0x94f1 0x975e +0x94f2 0x98db +0x94f3 0x6a0b +0x94f4 0x7c38 +0x94f5 0x5099 +0x94f6 0x5c3e +0x94f7 0x5fae +0x94f8 0x6787 +0x94f9 0x6bd8 +0x94fa 0x7435 +0x94fb 0x7709 +0x94fc 0x7f8e +0x9540 0x9f3b +0x9541 0x67ca +0x9542 0x7a17 +0x9543 0x5339 +0x9544 0x758b +0x9545 0x9aed +0x9546 0x5f66 +0x9547 0x819d +0x9548 0x83f1 +0x9549 0x8098 +0x954a 0x5f3c +0x954b 0x5fc5 +0x954c 0x7562 +0x954d 0x7b46 +0x954e 0x903c +0x954f 0x6867 +0x9550 0x59eb +0x9551 0x5a9b +0x9552 0x7d10 +0x9553 0x767e +0x9554 0x8b2c +0x9555 0x4ff5 +0x9556 0x5f6a +0x9557 0x6a19 +0x9558 0x6c37 +0x9559 0x6f02 +0x955a 0x74e2 +0x955b 0x7968 +0x955c 0x8868 +0x955d 0x8a55 +0x955e 0x8c79 +0x955f 0x5edf +0x9560 0x63cf +0x9561 0x75c5 +0x9562 0x79d2 +0x9563 0x82d7 +0x9564 0x9328 +0x9565 0x92f2 +0x9566 0x849c +0x9567 0x86ed +0x9568 0x9c2d +0x9569 0x54c1 +0x956a 0x5f6c +0x956b 0x658c +0x956c 0x6d5c +0x956d 0x7015 +0x956e 0x8ca7 +0x956f 0x8cd3 +0x9570 0x983b +0x9571 0x654f +0x9572 0x74f6 +0x9573 0x4e0d +0x9574 0x4ed8 +0x9575 0x57e0 +0x9576 0x592b +0x9577 0x5a66 +0x9578 0x5bcc +0x9579 0x51a8 +0x957a 0x5e03 +0x957b 0x5e9c +0x957c 0x6016 +0x957d 0x6276 +0x957e 0x6577 +0x9580 0x65a7 +0x9581 0x666e +0x9582 0x6d6e +0x9583 0x7236 +0x9584 0x7b26 +0x9585 0x8150 +0x9586 0x819a +0x9587 0x8299 +0x9588 0x8b5c +0x9589 0x8ca0 +0x958a 0x8ce6 +0x958b 0x8d74 +0x958c 0x961c +0x958d 0x9644 +0x958e 0x4fae +0x958f 0x64ab +0x9590 0x6b66 +0x9591 0x821e +0x9592 0x8461 +0x9593 0x856a +0x9594 0x90e8 +0x9595 0x5c01 +0x9596 0x6953 +0x9597 0x98a8 +0x9598 0x847a +0x9599 0x8557 +0x959a 0x4f0f +0x959b 0x526f +0x959c 0x5fa9 +0x959d 0x5e45 +0x959e 0x670d +0x959f 0x798f +0x95a0 0x8179 +0x95a1 0x8907 +0x95a2 0x8986 +0x95a3 0x6df5 +0x95a4 0x5f17 +0x95a5 0x6255 +0x95a6 0x6cb8 +0x95a7 0x4ecf +0x95a8 0x7269 +0x95a9 0x9b92 +0x95aa 0x5206 +0x95ab 0x543b +0x95ac 0x5674 +0x95ad 0x58b3 +0x95ae 0x61a4 +0x95af 0x626e +0x95b0 0x711a +0x95b1 0x596e +0x95b2 0x7c89 +0x95b3 0x7cde +0x95b4 0x7d1b +0x95b5 0x96f0 +0x95b6 0x6587 +0x95b7 0x805e +0x95b8 0x4e19 +0x95b9 0x4f75 +0x95ba 0x5175 +0x95bb 0x5840 +0x95bc 0x5e63 +0x95bd 0x5e73 +0x95be 0x5f0a +0x95bf 0x67c4 +0x95c0 0x4e26 +0x95c1 0x853d +0x95c2 0x9589 +0x95c3 0x965b +0x95c4 0x7c73 +0x95c5 0x9801 +0x95c6 0x50fb +0x95c7 0x58c1 +0x95c8 0x7656 +0x95c9 0x78a7 +0x95ca 0x5225 +0x95cb 0x77a5 +0x95cc 0x8511 +0x95cd 0x7b86 +0x95ce 0x504f +0x95cf 0x5909 +0x95d0 0x7247 +0x95d1 0x7bc7 +0x95d2 0x7de8 +0x95d3 0x8fba +0x95d4 0x8fd4 +0x95d5 0x904d +0x95d6 0x4fbf +0x95d7 0x52c9 +0x95d8 0x5a29 +0x95d9 0x5f01 +0x95da 0x97ad +0x95db 0x4fdd +0x95dc 0x8217 +0x95dd 0x92ea +0x95de 0x5703 +0x95df 0x6355 +0x95e0 0x6b69 +0x95e1 0x752b +0x95e2 0x88dc +0x95e3 0x8f14 +0x95e4 0x7a42 +0x95e5 0x52df +0x95e6 0x5893 +0x95e7 0x6155 +0x95e8 0x620a +0x95e9 0x66ae +0x95ea 0x6bcd +0x95eb 0x7c3f +0x95ec 0x83e9 +0x95ed 0x5023 +0x95ee 0x4ff8 +0x95ef 0x5305 +0x95f0 0x5446 +0x95f1 0x5831 +0x95f2 0x5949 +0x95f3 0x5b9d +0x95f4 0x5cf0 +0x95f5 0x5cef +0x95f6 0x5d29 +0x95f7 0x5e96 +0x95f8 0x62b1 +0x95f9 0x6367 +0x95fa 0x653e +0x95fb 0x65b9 +0x95fc 0x670b +0x9640 0x6cd5 +0x9641 0x6ce1 +0x9642 0x70f9 +0x9643 0x7832 +0x9644 0x7e2b +0x9645 0x80de +0x9646 0x82b3 +0x9647 0x840c +0x9648 0x84ec +0x9649 0x8702 +0x964a 0x8912 +0x964b 0x8a2a +0x964c 0x8c4a +0x964d 0x90a6 +0x964e 0x92d2 +0x964f 0x98fd +0x9650 0x9cf3 +0x9651 0x9d6c +0x9652 0x4e4f +0x9653 0x4ea1 +0x9654 0x508d +0x9655 0x5256 +0x9656 0x574a +0x9657 0x59a8 +0x9658 0x5e3d +0x9659 0x5fd8 +0x965a 0x5fd9 +0x965b 0x623f +0x965c 0x66b4 +0x965d 0x671b +0x965e 0x67d0 +0x965f 0x68d2 +0x9660 0x5192 +0x9661 0x7d21 +0x9662 0x80aa +0x9663 0x81a8 +0x9664 0x8b00 +0x9665 0x8c8c +0x9666 0x8cbf +0x9667 0x927e +0x9668 0x9632 +0x9669 0x5420 +0x966a 0x982c +0x966b 0x5317 +0x966c 0x50d5 +0x966d 0x535c +0x966e 0x58a8 +0x966f 0x64b2 +0x9670 0x6734 +0x9671 0x7267 +0x9672 0x7766 +0x9673 0x7a46 +0x9674 0x91e6 +0x9675 0x52c3 +0x9676 0x6ca1 +0x9677 0x6b86 +0x9678 0x5800 +0x9679 0x5e4c +0x967a 0x5954 +0x967b 0x672c +0x967c 0x7ffb +0x967d 0x51e1 +0x967e 0x76c6 +0x9680 0x6469 +0x9681 0x78e8 +0x9682 0x9b54 +0x9683 0x9ebb +0x9684 0x57cb +0x9685 0x59b9 +0x9686 0x6627 +0x9687 0x679a +0x9688 0x6bce +0x9689 0x54e9 +0x968a 0x69d9 +0x968b 0x5e55 +0x968c 0x819c +0x968d 0x6795 +0x968e 0x9baa +0x968f 0x67fe +0x9690 0x9c52 +0x9691 0x685d +0x9692 0x4ea6 +0x9693 0x4fe3 +0x9694 0x53c8 +0x9695 0x62b9 +0x9696 0x672b +0x9697 0x6cab +0x9698 0x8fc4 +0x9699 0x4fad +0x969a 0x7e6d +0x969b 0x9ebf +0x969c 0x4e07 +0x969d 0x6162 +0x969e 0x6e80 +0x969f 0x6f2b +0x96a0 0x8513 +0x96a1 0x5473 +0x96a2 0x672a +0x96a3 0x9b45 +0x96a4 0x5df3 +0x96a5 0x7b95 +0x96a6 0x5cac +0x96a7 0x5bc6 +0x96a8 0x871c +0x96a9 0x6e4a +0x96aa 0x84d1 +0x96ab 0x7a14 +0x96ac 0x8108 +0x96ad 0x5999 +0x96ae 0x7c8d +0x96af 0x6c11 +0x96b0 0x7720 +0x96b1 0x52d9 +0x96b2 0x5922 +0x96b3 0x7121 +0x96b4 0x725f +0x96b5 0x77db +0x96b6 0x9727 +0x96b7 0x9d61 +0x96b8 0x690b +0x96b9 0x5a7f +0x96ba 0x5a18 +0x96bb 0x51a5 +0x96bc 0x540d +0x96bd 0x547d +0x96be 0x660e +0x96bf 0x76df +0x96c0 0x8ff7 +0x96c1 0x9298 +0x96c2 0x9cf4 +0x96c3 0x59ea +0x96c4 0x725d +0x96c5 0x6ec5 +0x96c6 0x514d +0x96c7 0x68c9 +0x96c8 0x7dbf +0x96c9 0x7dec +0x96ca 0x9762 +0x96cb 0x9eba +0x96cc 0x6478 +0x96cd 0x6a21 +0x96ce 0x8302 +0x96cf 0x5984 +0x96d0 0x5b5f +0x96d1 0x6bdb +0x96d2 0x731b +0x96d3 0x76f2 +0x96d4 0x7db2 +0x96d5 0x8017 +0x96d6 0x8499 +0x96d7 0x5132 +0x96d8 0x6728 +0x96d9 0x9ed9 +0x96da 0x76ee +0x96db 0x6762 +0x96dc 0x52ff +0x96dd 0x9905 +0x96de 0x5c24 +0x96df 0x623b +0x96e0 0x7c7e +0x96e1 0x8cb0 +0x96e2 0x554f +0x96e3 0x60b6 +0x96e4 0x7d0b +0x96e5 0x9580 +0x96e6 0x5301 +0x96e7 0x4e5f +0x96e8 0x51b6 +0x96e9 0x591c +0x96ea 0x723a +0x96eb 0x8036 +0x96ec 0x91ce +0x96ed 0x5f25 +0x96ee 0x77e2 +0x96ef 0x5384 +0x96f0 0x5f79 +0x96f1 0x7d04 +0x96f2 0x85ac +0x96f3 0x8a33 +0x96f4 0x8e8d +0x96f5 0x9756 +0x96f6 0x67f3 +0x96f7 0x85ae +0x96f8 0x9453 +0x96f9 0x6109 +0x96fa 0x6108 +0x96fb 0x6cb9 +0x96fc 0x7652 +0x9740 0x8aed +0x9741 0x8f38 +0x9742 0x552f +0x9743 0x4f51 +0x9744 0x512a +0x9745 0x52c7 +0x9746 0x53cb +0x9747 0x5ba5 +0x9748 0x5e7d +0x9749 0x60a0 +0x974a 0x6182 +0x974b 0x63d6 +0x974c 0x6709 +0x974d 0x67da +0x974e 0x6e67 +0x974f 0x6d8c +0x9750 0x7336 +0x9751 0x7337 +0x9752 0x7531 +0x9753 0x7950 +0x9754 0x88d5 +0x9755 0x8a98 +0x9756 0x904a +0x9757 0x9091 +0x9758 0x90f5 +0x9759 0x96c4 +0x975a 0x878d +0x975b 0x5915 +0x975c 0x4e88 +0x975d 0x4f59 +0x975e 0x4e0e +0x975f 0x8a89 +0x9760 0x8f3f +0x9761 0x9810 +0x9762 0x50ad +0x9763 0x5e7c +0x9764 0x5996 +0x9765 0x5bb9 +0x9766 0x5eb8 +0x9767 0x63da +0x9768 0x63fa +0x9769 0x64c1 +0x976a 0x66dc +0x976b 0x694a +0x976c 0x69d8 +0x976d 0x6d0b +0x976e 0x6eb6 +0x976f 0x7194 +0x9770 0x7528 +0x9771 0x7aaf +0x9772 0x7f8a +0x9773 0x8000 +0x9774 0x8449 +0x9775 0x84c9 +0x9776 0x8981 +0x9777 0x8b21 +0x9778 0x8e0a +0x9779 0x9065 +0x977a 0x967d +0x977b 0x990a +0x977c 0x617e +0x977d 0x6291 +0x977e 0x6b32 +0x9780 0x6c83 +0x9781 0x6d74 +0x9782 0x7fcc +0x9783 0x7ffc +0x9784 0x6dc0 +0x9785 0x7f85 +0x9786 0x87ba +0x9787 0x88f8 +0x9788 0x6765 +0x9789 0x83b1 +0x978a 0x983c +0x978b 0x96f7 +0x978c 0x6d1b +0x978d 0x7d61 +0x978e 0x843d +0x978f 0x916a +0x9790 0x4e71 +0x9791 0x5375 +0x9792 0x5d50 +0x9793 0x6b04 +0x9794 0x6feb +0x9795 0x85cd +0x9796 0x862d +0x9797 0x89a7 +0x9798 0x5229 +0x9799 0x540f +0x979a 0x5c65 +0x979b 0x674e +0x979c 0x68a8 +0x979d 0x7406 +0x979e 0x7483 +0x979f 0x75e2 +0x97a0 0x88cf +0x97a1 0x88e1 +0x97a2 0x91cc +0x97a3 0x96e2 +0x97a4 0x9678 +0x97a5 0x5f8b +0x97a6 0x7387 +0x97a7 0x7acb +0x97a8 0x844e +0x97a9 0x63a0 +0x97aa 0x7565 +0x97ab 0x5289 +0x97ac 0x6d41 +0x97ad 0x6e9c +0x97ae 0x7409 +0x97af 0x7559 +0x97b0 0x786b +0x97b1 0x7c92 +0x97b2 0x9686 +0x97b3 0x7adc +0x97b4 0x9f8d +0x97b5 0x4fb6 +0x97b6 0x616e +0x97b7 0x65c5 +0x97b8 0x865c +0x97b9 0x4e86 +0x97ba 0x4eae +0x97bb 0x50da +0x97bc 0x4e21 +0x97bd 0x51cc +0x97be 0x5bee +0x97bf 0x6599 +0x97c0 0x6881 +0x97c1 0x6dbc +0x97c2 0x731f +0x97c3 0x7642 +0x97c4 0x77ad +0x97c5 0x7a1c +0x97c6 0x7ce7 +0x97c7 0x826f +0x97c8 0x8ad2 +0x97c9 0x907c +0x97ca 0x91cf +0x97cb 0x9675 +0x97cc 0x9818 +0x97cd 0x529b +0x97ce 0x7dd1 +0x97cf 0x502b +0x97d0 0x5398 +0x97d1 0x6797 +0x97d2 0x6dcb +0x97d3 0x71d0 +0x97d4 0x7433 +0x97d5 0x81e8 +0x97d6 0x8f2a +0x97d7 0x96a3 +0x97d8 0x9c57 +0x97d9 0x9e9f +0x97da 0x7460 +0x97db 0x5841 +0x97dc 0x6d99 +0x97dd 0x7d2f +0x97de 0x985e +0x97df 0x4ee4 +0x97e0 0x4f36 +0x97e1 0x4f8b +0x97e2 0x51b7 +0x97e3 0x52b1 +0x97e4 0x5dba +0x97e5 0x601c +0x97e6 0x73b2 +0x97e7 0x793c +0x97e8 0x82d3 +0x97e9 0x9234 +0x97ea 0x96b7 +0x97eb 0x96f6 +0x97ec 0x970a +0x97ed 0x9e97 +0x97ee 0x9f62 +0x97ef 0x66a6 +0x97f0 0x6b74 +0x97f1 0x5217 +0x97f2 0x52a3 +0x97f3 0x70c8 +0x97f4 0x88c2 +0x97f5 0x5ec9 +0x97f6 0x604b +0x97f7 0x6190 +0x97f8 0x6f23 +0x97f9 0x7149 +0x97fa 0x7c3e +0x97fb 0x7df4 +0x97fc 0x806f +0x9840 0x84ee +0x9841 0x9023 +0x9842 0x932c +0x9843 0x5442 +0x9844 0x9b6f +0x9845 0x6ad3 +0x9846 0x7089 +0x9847 0x8cc2 +0x9848 0x8def +0x9849 0x9732 +0x984a 0x52b4 +0x984b 0x5a41 +0x984c 0x5eca +0x984d 0x5f04 +0x984e 0x6717 +0x984f 0x697c +0x9850 0x6994 +0x9851 0x6d6a +0x9852 0x6f0f +0x9853 0x7262 +0x9854 0x72fc +0x9855 0x7bed +0x9856 0x8001 +0x9857 0x807e +0x9858 0x874b +0x9859 0x90ce +0x985a 0x516d +0x985b 0x9e93 +0x985c 0x7984 +0x985d 0x808b +0x985e 0x9332 +0x985f 0x8ad6 +0x9860 0x502d +0x9861 0x548c +0x9862 0x8a71 +0x9863 0x6b6a +0x9864 0x8cc4 +0x9865 0x8107 +0x9866 0x60d1 +0x9867 0x67a0 +0x9868 0x9df2 +0x9869 0x4e99 +0x986a 0x4e98 +0x986b 0x9c10 +0x986c 0x8a6b +0x986d 0x85c1 +0x986e 0x8568 +0x986f 0x6900 +0x9870 0x6e7e +0x9871 0x7897 +0x9872 0x8155 +0x989f 0x5f0c +0x98a0 0x4e10 +0x98a1 0x4e15 +0x98a2 0x4e2a +0x98a3 0x4e31 +0x98a4 0x4e36 +0x98a5 0x4e3c +0x98a6 0x4e3f +0x98a7 0x4e42 +0x98a8 0x4e56 +0x98a9 0x4e58 +0x98aa 0x4e82 +0x98ab 0x4e85 +0x98ac 0x8c6b +0x98ad 0x4e8a +0x98ae 0x8212 +0x98af 0x5f0d +0x98b0 0x4e8e +0x98b1 0x4e9e +0x98b2 0x4e9f +0x98b3 0x4ea0 +0x98b4 0x4ea2 +0x98b5 0x4eb0 +0x98b6 0x4eb3 +0x98b7 0x4eb6 +0x98b8 0x4ece +0x98b9 0x4ecd +0x98ba 0x4ec4 +0x98bb 0x4ec6 +0x98bc 0x4ec2 +0x98bd 0x4ed7 +0x98be 0x4ede +0x98bf 0x4eed +0x98c0 0x4edf +0x98c1 0x4ef7 +0x98c2 0x4f09 +0x98c3 0x4f5a +0x98c4 0x4f30 +0x98c5 0x4f5b +0x98c6 0x4f5d +0x98c7 0x4f57 +0x98c8 0x4f47 +0x98c9 0x4f76 +0x98ca 0x4f88 +0x98cb 0x4f8f +0x98cc 0x4f98 +0x98cd 0x4f7b +0x98ce 0x4f69 +0x98cf 0x4f70 +0x98d0 0x4f91 +0x98d1 0x4f6f +0x98d2 0x4f86 +0x98d3 0x4f96 +0x98d4 0x5118 +0x98d5 0x4fd4 +0x98d6 0x4fdf +0x98d7 0x4fce +0x98d8 0x4fd8 +0x98d9 0x4fdb +0x98da 0x4fd1 +0x98db 0x4fda +0x98dc 0x4fd0 +0x98dd 0x4fe4 +0x98de 0x4fe5 +0x98df 0x501a +0x98e0 0x5028 +0x98e1 0x5014 +0x98e2 0x502a +0x98e3 0x5025 +0x98e4 0x5005 +0x98e5 0x4f1c +0x98e6 0x4ff6 +0x98e7 0x5021 +0x98e8 0x5029 +0x98e9 0x502c +0x98ea 0x4ffe +0x98eb 0x4fef +0x98ec 0x5011 +0x98ed 0x5006 +0x98ee 0x5043 +0x98ef 0x5047 +0x98f0 0x6703 +0x98f1 0x5055 +0x98f2 0x5050 +0x98f3 0x5048 +0x98f4 0x505a +0x98f5 0x5056 +0x98f6 0x506c +0x98f7 0x5078 +0x98f8 0x5080 +0x98f9 0x509a +0x98fa 0x5085 +0x98fb 0x50b4 +0x98fc 0x50b2 +0x9940 0x50c9 +0x9941 0x50ca +0x9942 0x50b3 +0x9943 0x50c2 +0x9944 0x50d6 +0x9945 0x50de +0x9946 0x50e5 +0x9947 0x50ed +0x9948 0x50e3 +0x9949 0x50ee +0x994a 0x50f9 +0x994b 0x50f5 +0x994c 0x5109 +0x994d 0x5101 +0x994e 0x5102 +0x994f 0x5116 +0x9950 0x5115 +0x9951 0x5114 +0x9952 0x511a +0x9953 0x5121 +0x9954 0x513a +0x9955 0x5137 +0x9956 0x513c +0x9957 0x513b +0x9958 0x513f +0x9959 0x5140 +0x995a 0x5152 +0x995b 0x514c +0x995c 0x5154 +0x995d 0x5162 +0x995e 0x7af8 +0x995f 0x5169 +0x9960 0x516a +0x9961 0x516e +0x9962 0x5180 +0x9963 0x5182 +0x9964 0x56d8 +0x9965 0x518c +0x9966 0x5189 +0x9967 0x518f +0x9968 0x5191 +0x9969 0x5193 +0x996a 0x5195 +0x996b 0x5196 +0x996c 0x51a4 +0x996d 0x51a6 +0x996e 0x51a2 +0x996f 0x51a9 +0x9970 0x51aa +0x9971 0x51ab +0x9972 0x51b3 +0x9973 0x51b1 +0x9974 0x51b2 +0x9975 0x51b0 +0x9976 0x51b5 +0x9977 0x51bd +0x9978 0x51c5 +0x9979 0x51c9 +0x997a 0x51db +0x997b 0x51e0 +0x997c 0x8655 +0x997d 0x51e9 +0x997e 0x51ed +0x9980 0x51f0 +0x9981 0x51f5 +0x9982 0x51fe +0x9983 0x5204 +0x9984 0x520b +0x9985 0x5214 +0x9986 0x520e +0x9987 0x5227 +0x9988 0x522a +0x9989 0x522e +0x998a 0x5233 +0x998b 0x5239 +0x998c 0x524f +0x998d 0x5244 +0x998e 0x524b +0x998f 0x524c +0x9990 0x525e +0x9991 0x5254 +0x9992 0x526a +0x9993 0x5274 +0x9994 0x5269 +0x9995 0x5273 +0x9996 0x527f +0x9997 0x527d +0x9998 0x528d +0x9999 0x5294 +0x999a 0x5292 +0x999b 0x5271 +0x999c 0x5288 +0x999d 0x5291 +0x999e 0x8fa8 +0x999f 0x8fa7 +0x99a0 0x52ac +0x99a1 0x52ad +0x99a2 0x52bc +0x99a3 0x52b5 +0x99a4 0x52c1 +0x99a5 0x52cd +0x99a6 0x52d7 +0x99a7 0x52de +0x99a8 0x52e3 +0x99a9 0x52e6 +0x99aa 0x98ed +0x99ab 0x52e0 +0x99ac 0x52f3 +0x99ad 0x52f5 +0x99ae 0x52f8 +0x99af 0x52f9 +0x99b0 0x5306 +0x99b1 0x5308 +0x99b2 0x7538 +0x99b3 0x530d +0x99b4 0x5310 +0x99b5 0x530f +0x99b6 0x5315 +0x99b7 0x531a +0x99b8 0x5323 +0x99b9 0x532f +0x99ba 0x5331 +0x99bb 0x5333 +0x99bc 0x5338 +0x99bd 0x5340 +0x99be 0x5346 +0x99bf 0x5345 +0x99c0 0x4e17 +0x99c1 0x5349 +0x99c2 0x534d +0x99c3 0x51d6 +0x99c4 0x535e +0x99c5 0x5369 +0x99c6 0x536e +0x99c7 0x5918 +0x99c8 0x537b +0x99c9 0x5377 +0x99ca 0x5382 +0x99cb 0x5396 +0x99cc 0x53a0 +0x99cd 0x53a6 +0x99ce 0x53a5 +0x99cf 0x53ae +0x99d0 0x53b0 +0x99d1 0x53b6 +0x99d2 0x53c3 +0x99d3 0x7c12 +0x99d4 0x96d9 +0x99d5 0x53df +0x99d6 0x66fc +0x99d7 0x71ee +0x99d8 0x53ee +0x99d9 0x53e8 +0x99da 0x53ed +0x99db 0x53fa +0x99dc 0x5401 +0x99dd 0x543d +0x99de 0x5440 +0x99df 0x542c +0x99e0 0x542d +0x99e1 0x543c +0x99e2 0x542e +0x99e3 0x5436 +0x99e4 0x5429 +0x99e5 0x541d +0x99e6 0x544e +0x99e7 0x548f +0x99e8 0x5475 +0x99e9 0x548e +0x99ea 0x545f +0x99eb 0x5471 +0x99ec 0x5477 +0x99ed 0x5470 +0x99ee 0x5492 +0x99ef 0x547b +0x99f0 0x5480 +0x99f1 0x5476 +0x99f2 0x5484 +0x99f3 0x5490 +0x99f4 0x5486 +0x99f5 0x54c7 +0x99f6 0x54a2 +0x99f7 0x54b8 +0x99f8 0x54a5 +0x99f9 0x54ac +0x99fa 0x54c4 +0x99fb 0x54c8 +0x99fc 0x54a8 +0x9a40 0x54ab +0x9a41 0x54c2 +0x9a42 0x54a4 +0x9a43 0x54be +0x9a44 0x54bc +0x9a45 0x54d8 +0x9a46 0x54e5 +0x9a47 0x54e6 +0x9a48 0x550f +0x9a49 0x5514 +0x9a4a 0x54fd +0x9a4b 0x54ee +0x9a4c 0x54ed +0x9a4d 0x54fa +0x9a4e 0x54e2 +0x9a4f 0x5539 +0x9a50 0x5540 +0x9a51 0x5563 +0x9a52 0x554c +0x9a53 0x552e +0x9a54 0x555c +0x9a55 0x5545 +0x9a56 0x5556 +0x9a57 0x5557 +0x9a58 0x5538 +0x9a59 0x5533 +0x9a5a 0x555d +0x9a5b 0x5599 +0x9a5c 0x5580 +0x9a5d 0x54af +0x9a5e 0x558a +0x9a5f 0x559f +0x9a60 0x557b +0x9a61 0x557e +0x9a62 0x5598 +0x9a63 0x559e +0x9a64 0x55ae +0x9a65 0x557c +0x9a66 0x5583 +0x9a67 0x55a9 +0x9a68 0x5587 +0x9a69 0x55a8 +0x9a6a 0x55da +0x9a6b 0x55c5 +0x9a6c 0x55df +0x9a6d 0x55c4 +0x9a6e 0x55dc +0x9a6f 0x55e4 +0x9a70 0x55d4 +0x9a71 0x5614 +0x9a72 0x55f7 +0x9a73 0x5616 +0x9a74 0x55fe +0x9a75 0x55fd +0x9a76 0x561b +0x9a77 0x55f9 +0x9a78 0x564e +0x9a79 0x5650 +0x9a7a 0x71df +0x9a7b 0x5634 +0x9a7c 0x5636 +0x9a7d 0x5632 +0x9a7e 0x5638 +0x9a80 0x566b +0x9a81 0x5664 +0x9a82 0x562f +0x9a83 0x566c +0x9a84 0x566a +0x9a85 0x5686 +0x9a86 0x5680 +0x9a87 0x568a +0x9a88 0x56a0 +0x9a89 0x5694 +0x9a8a 0x568f +0x9a8b 0x56a5 +0x9a8c 0x56ae +0x9a8d 0x56b6 +0x9a8e 0x56b4 +0x9a8f 0x56c2 +0x9a90 0x56bc +0x9a91 0x56c1 +0x9a92 0x56c3 +0x9a93 0x56c0 +0x9a94 0x56c8 +0x9a95 0x56ce +0x9a96 0x56d1 +0x9a97 0x56d3 +0x9a98 0x56d7 +0x9a99 0x56ee +0x9a9a 0x56f9 +0x9a9b 0x5700 +0x9a9c 0x56ff +0x9a9d 0x5704 +0x9a9e 0x5709 +0x9a9f 0x5708 +0x9aa0 0x570b +0x9aa1 0x570d +0x9aa2 0x5713 +0x9aa3 0x5718 +0x9aa4 0x5716 +0x9aa5 0x55c7 +0x9aa6 0x571c +0x9aa7 0x5726 +0x9aa8 0x5737 +0x9aa9 0x5738 +0x9aaa 0x574e +0x9aab 0x573b +0x9aac 0x5740 +0x9aad 0x574f +0x9aae 0x5769 +0x9aaf 0x57c0 +0x9ab0 0x5788 +0x9ab1 0x5761 +0x9ab2 0x577f +0x9ab3 0x5789 +0x9ab4 0x5793 +0x9ab5 0x57a0 +0x9ab6 0x57b3 +0x9ab7 0x57a4 +0x9ab8 0x57aa +0x9ab9 0x57b0 +0x9aba 0x57c3 +0x9abb 0x57c6 +0x9abc 0x57d4 +0x9abd 0x57d2 +0x9abe 0x57d3 +0x9abf 0x580a +0x9ac0 0x57d6 +0x9ac1 0x57e3 +0x9ac2 0x580b +0x9ac3 0x5819 +0x9ac4 0x581d +0x9ac5 0x5872 +0x9ac6 0x5821 +0x9ac7 0x5862 +0x9ac8 0x584b +0x9ac9 0x5870 +0x9aca 0x6bc0 +0x9acb 0x5852 +0x9acc 0x583d +0x9acd 0x5879 +0x9ace 0x5885 +0x9acf 0x58b9 +0x9ad0 0x589f +0x9ad1 0x58ab +0x9ad2 0x58ba +0x9ad3 0x58de +0x9ad4 0x58bb +0x9ad5 0x58b8 +0x9ad6 0x58ae +0x9ad7 0x58c5 +0x9ad8 0x58d3 +0x9ad9 0x58d1 +0x9ada 0x58d7 +0x9adb 0x58d9 +0x9adc 0x58d8 +0x9add 0x58e5 +0x9ade 0x58dc +0x9adf 0x58e4 +0x9ae0 0x58df +0x9ae1 0x58ef +0x9ae2 0x58fa +0x9ae3 0x58f9 +0x9ae4 0x58fb +0x9ae5 0x58fc +0x9ae6 0x58fd +0x9ae7 0x5902 +0x9ae8 0x590a +0x9ae9 0x5910 +0x9aea 0x591b +0x9aeb 0x68a6 +0x9aec 0x5925 +0x9aed 0x592c +0x9aee 0x592d +0x9aef 0x5932 +0x9af0 0x5938 +0x9af1 0x593e +0x9af2 0x7ad2 +0x9af3 0x5955 +0x9af4 0x5950 +0x9af5 0x594e +0x9af6 0x595a +0x9af7 0x5958 +0x9af8 0x5962 +0x9af9 0x5960 +0x9afa 0x5967 +0x9afb 0x596c +0x9afc 0x5969 +0x9b40 0x5978 +0x9b41 0x5981 +0x9b42 0x599d +0x9b43 0x4f5e +0x9b44 0x4fab +0x9b45 0x59a3 +0x9b46 0x59b2 +0x9b47 0x59c6 +0x9b48 0x59e8 +0x9b49 0x59dc +0x9b4a 0x598d +0x9b4b 0x59d9 +0x9b4c 0x59da +0x9b4d 0x5a25 +0x9b4e 0x5a1f +0x9b4f 0x5a11 +0x9b50 0x5a1c +0x9b51 0x5a09 +0x9b52 0x5a1a +0x9b53 0x5a40 +0x9b54 0x5a6c +0x9b55 0x5a49 +0x9b56 0x5a35 +0x9b57 0x5a36 +0x9b58 0x5a62 +0x9b59 0x5a6a +0x9b5a 0x5a9a +0x9b5b 0x5abc +0x9b5c 0x5abe +0x9b5d 0x5acb +0x9b5e 0x5ac2 +0x9b5f 0x5abd +0x9b60 0x5ae3 +0x9b61 0x5ad7 +0x9b62 0x5ae6 +0x9b63 0x5ae9 +0x9b64 0x5ad6 +0x9b65 0x5afa +0x9b66 0x5afb +0x9b67 0x5b0c +0x9b68 0x5b0b +0x9b69 0x5b16 +0x9b6a 0x5b32 +0x9b6b 0x5ad0 +0x9b6c 0x5b2a +0x9b6d 0x5b36 +0x9b6e 0x5b3e +0x9b6f 0x5b43 +0x9b70 0x5b45 +0x9b71 0x5b40 +0x9b72 0x5b51 +0x9b73 0x5b55 +0x9b74 0x5b5a +0x9b75 0x5b5b +0x9b76 0x5b65 +0x9b77 0x5b69 +0x9b78 0x5b70 +0x9b79 0x5b73 +0x9b7a 0x5b75 +0x9b7b 0x5b78 +0x9b7c 0x6588 +0x9b7d 0x5b7a +0x9b7e 0x5b80 +0x9b80 0x5b83 +0x9b81 0x5ba6 +0x9b82 0x5bb8 +0x9b83 0x5bc3 +0x9b84 0x5bc7 +0x9b85 0x5bc9 +0x9b86 0x5bd4 +0x9b87 0x5bd0 +0x9b88 0x5be4 +0x9b89 0x5be6 +0x9b8a 0x5be2 +0x9b8b 0x5bde +0x9b8c 0x5be5 +0x9b8d 0x5beb +0x9b8e 0x5bf0 +0x9b8f 0x5bf6 +0x9b90 0x5bf3 +0x9b91 0x5c05 +0x9b92 0x5c07 +0x9b93 0x5c08 +0x9b94 0x5c0d +0x9b95 0x5c13 +0x9b96 0x5c20 +0x9b97 0x5c22 +0x9b98 0x5c28 +0x9b99 0x5c38 +0x9b9a 0x5c39 +0x9b9b 0x5c41 +0x9b9c 0x5c46 +0x9b9d 0x5c4e +0x9b9e 0x5c53 +0x9b9f 0x5c50 +0x9ba0 0x5c4f +0x9ba1 0x5b71 +0x9ba2 0x5c6c +0x9ba3 0x5c6e +0x9ba4 0x4e62 +0x9ba5 0x5c76 +0x9ba6 0x5c79 +0x9ba7 0x5c8c +0x9ba8 0x5c91 +0x9ba9 0x5c94 +0x9baa 0x599b +0x9bab 0x5cab +0x9bac 0x5cbb +0x9bad 0x5cb6 +0x9bae 0x5cbc +0x9baf 0x5cb7 +0x9bb0 0x5cc5 +0x9bb1 0x5cbe +0x9bb2 0x5cc7 +0x9bb3 0x5cd9 +0x9bb4 0x5ce9 +0x9bb5 0x5cfd +0x9bb6 0x5cfa +0x9bb7 0x5ced +0x9bb8 0x5d8c +0x9bb9 0x5cea +0x9bba 0x5d0b +0x9bbb 0x5d15 +0x9bbc 0x5d17 +0x9bbd 0x5d5c +0x9bbe 0x5d1f +0x9bbf 0x5d1b +0x9bc0 0x5d11 +0x9bc1 0x5d14 +0x9bc2 0x5d22 +0x9bc3 0x5d1a +0x9bc4 0x5d19 +0x9bc5 0x5d18 +0x9bc6 0x5d4c +0x9bc7 0x5d52 +0x9bc8 0x5d4e +0x9bc9 0x5d4b +0x9bca 0x5d6c +0x9bcb 0x5d73 +0x9bcc 0x5d76 +0x9bcd 0x5d87 +0x9bce 0x5d84 +0x9bcf 0x5d82 +0x9bd0 0x5da2 +0x9bd1 0x5d9d +0x9bd2 0x5dac +0x9bd3 0x5dae +0x9bd4 0x5dbd +0x9bd5 0x5d90 +0x9bd6 0x5db7 +0x9bd7 0x5dbc +0x9bd8 0x5dc9 +0x9bd9 0x5dcd +0x9bda 0x5dd3 +0x9bdb 0x5dd2 +0x9bdc 0x5dd6 +0x9bdd 0x5ddb +0x9bde 0x5deb +0x9bdf 0x5df2 +0x9be0 0x5df5 +0x9be1 0x5e0b +0x9be2 0x5e1a +0x9be3 0x5e19 +0x9be4 0x5e11 +0x9be5 0x5e1b +0x9be6 0x5e36 +0x9be7 0x5e37 +0x9be8 0x5e44 +0x9be9 0x5e43 +0x9bea 0x5e40 +0x9beb 0x5e4e +0x9bec 0x5e57 +0x9bed 0x5e54 +0x9bee 0x5e5f +0x9bef 0x5e62 +0x9bf0 0x5e64 +0x9bf1 0x5e47 +0x9bf2 0x5e75 +0x9bf3 0x5e76 +0x9bf4 0x5e7a +0x9bf5 0x9ebc +0x9bf6 0x5e7f +0x9bf7 0x5ea0 +0x9bf8 0x5ec1 +0x9bf9 0x5ec2 +0x9bfa 0x5ec8 +0x9bfb 0x5ed0 +0x9bfc 0x5ecf +0x9c40 0x5ed6 +0x9c41 0x5ee3 +0x9c42 0x5edd +0x9c43 0x5eda +0x9c44 0x5edb +0x9c45 0x5ee2 +0x9c46 0x5ee1 +0x9c47 0x5ee8 +0x9c48 0x5ee9 +0x9c49 0x5eec +0x9c4a 0x5ef1 +0x9c4b 0x5ef3 +0x9c4c 0x5ef0 +0x9c4d 0x5ef4 +0x9c4e 0x5ef8 +0x9c4f 0x5efe +0x9c50 0x5f03 +0x9c51 0x5f09 +0x9c52 0x5f5d +0x9c53 0x5f5c +0x9c54 0x5f0b +0x9c55 0x5f11 +0x9c56 0x5f16 +0x9c57 0x5f29 +0x9c58 0x5f2d +0x9c59 0x5f38 +0x9c5a 0x5f41 +0x9c5b 0x5f48 +0x9c5c 0x5f4c +0x9c5d 0x5f4e +0x9c5e 0x5f2f +0x9c5f 0x5f51 +0x9c60 0x5f56 +0x9c61 0x5f57 +0x9c62 0x5f59 +0x9c63 0x5f61 +0x9c64 0x5f6d +0x9c65 0x5f73 +0x9c66 0x5f77 +0x9c67 0x5f83 +0x9c68 0x5f82 +0x9c69 0x5f7f +0x9c6a 0x5f8a +0x9c6b 0x5f88 +0x9c6c 0x5f91 +0x9c6d 0x5f87 +0x9c6e 0x5f9e +0x9c6f 0x5f99 +0x9c70 0x5f98 +0x9c71 0x5fa0 +0x9c72 0x5fa8 +0x9c73 0x5fad +0x9c74 0x5fbc +0x9c75 0x5fd6 +0x9c76 0x5ffb +0x9c77 0x5fe4 +0x9c78 0x5ff8 +0x9c79 0x5ff1 +0x9c7a 0x5fdd +0x9c7b 0x60b3 +0x9c7c 0x5fff +0x9c7d 0x6021 +0x9c7e 0x6060 +0x9c80 0x6019 +0x9c81 0x6010 +0x9c82 0x6029 +0x9c83 0x600e +0x9c84 0x6031 +0x9c85 0x601b +0x9c86 0x6015 +0x9c87 0x602b +0x9c88 0x6026 +0x9c89 0x600f +0x9c8a 0x603a +0x9c8b 0x605a +0x9c8c 0x6041 +0x9c8d 0x606a +0x9c8e 0x6077 +0x9c8f 0x605f +0x9c90 0x604a +0x9c91 0x6046 +0x9c92 0x604d +0x9c93 0x6063 +0x9c94 0x6043 +0x9c95 0x6064 +0x9c96 0x6042 +0x9c97 0x606c +0x9c98 0x606b +0x9c99 0x6059 +0x9c9a 0x6081 +0x9c9b 0x608d +0x9c9c 0x60e7 +0x9c9d 0x6083 +0x9c9e 0x609a +0x9c9f 0x6084 +0x9ca0 0x609b +0x9ca1 0x6096 +0x9ca2 0x6097 +0x9ca3 0x6092 +0x9ca4 0x60a7 +0x9ca5 0x608b +0x9ca6 0x60e1 +0x9ca7 0x60b8 +0x9ca8 0x60e0 +0x9ca9 0x60d3 +0x9caa 0x60b4 +0x9cab 0x5ff0 +0x9cac 0x60bd +0x9cad 0x60c6 +0x9cae 0x60b5 +0x9caf 0x60d8 +0x9cb0 0x614d +0x9cb1 0x6115 +0x9cb2 0x6106 +0x9cb3 0x60f6 +0x9cb4 0x60f7 +0x9cb5 0x6100 +0x9cb6 0x60f4 +0x9cb7 0x60fa +0x9cb8 0x6103 +0x9cb9 0x6121 +0x9cba 0x60fb +0x9cbb 0x60f1 +0x9cbc 0x610d +0x9cbd 0x610e +0x9cbe 0x6147 +0x9cbf 0x613e +0x9cc0 0x6128 +0x9cc1 0x6127 +0x9cc2 0x614a +0x9cc3 0x613f +0x9cc4 0x613c +0x9cc5 0x612c +0x9cc6 0x6134 +0x9cc7 0x613d +0x9cc8 0x6142 +0x9cc9 0x6144 +0x9cca 0x6173 +0x9ccb 0x6177 +0x9ccc 0x6158 +0x9ccd 0x6159 +0x9cce 0x615a +0x9ccf 0x616b +0x9cd0 0x6174 +0x9cd1 0x616f +0x9cd2 0x6165 +0x9cd3 0x6171 +0x9cd4 0x615f +0x9cd5 0x615d +0x9cd6 0x6153 +0x9cd7 0x6175 +0x9cd8 0x6199 +0x9cd9 0x6196 +0x9cda 0x6187 +0x9cdb 0x61ac +0x9cdc 0x6194 +0x9cdd 0x619a +0x9cde 0x618a +0x9cdf 0x6191 +0x9ce0 0x61ab +0x9ce1 0x61ae +0x9ce2 0x61cc +0x9ce3 0x61ca +0x9ce4 0x61c9 +0x9ce5 0x61f7 +0x9ce6 0x61c8 +0x9ce7 0x61c3 +0x9ce8 0x61c6 +0x9ce9 0x61ba +0x9cea 0x61cb +0x9ceb 0x7f79 +0x9cec 0x61cd +0x9ced 0x61e6 +0x9cee 0x61e3 +0x9cef 0x61f6 +0x9cf0 0x61fa +0x9cf1 0x61f4 +0x9cf2 0x61ff +0x9cf3 0x61fd +0x9cf4 0x61fc +0x9cf5 0x61fe +0x9cf6 0x6200 +0x9cf7 0x6208 +0x9cf8 0x6209 +0x9cf9 0x620d +0x9cfa 0x620c +0x9cfb 0x6214 +0x9cfc 0x621b +0x9d40 0x621e +0x9d41 0x6221 +0x9d42 0x622a +0x9d43 0x622e +0x9d44 0x6230 +0x9d45 0x6232 +0x9d46 0x6233 +0x9d47 0x6241 +0x9d48 0x624e +0x9d49 0x625e +0x9d4a 0x6263 +0x9d4b 0x625b +0x9d4c 0x6260 +0x9d4d 0x6268 +0x9d4e 0x627c +0x9d4f 0x6282 +0x9d50 0x6289 +0x9d51 0x627e +0x9d52 0x6292 +0x9d53 0x6293 +0x9d54 0x6296 +0x9d55 0x62d4 +0x9d56 0x6283 +0x9d57 0x6294 +0x9d58 0x62d7 +0x9d59 0x62d1 +0x9d5a 0x62bb +0x9d5b 0x62cf +0x9d5c 0x62ff +0x9d5d 0x62c6 +0x9d5e 0x64d4 +0x9d5f 0x62c8 +0x9d60 0x62dc +0x9d61 0x62cc +0x9d62 0x62ca +0x9d63 0x62c2 +0x9d64 0x62c7 +0x9d65 0x629b +0x9d66 0x62c9 +0x9d67 0x630c +0x9d68 0x62ee +0x9d69 0x62f1 +0x9d6a 0x6327 +0x9d6b 0x6302 +0x9d6c 0x6308 +0x9d6d 0x62ef +0x9d6e 0x62f5 +0x9d6f 0x6350 +0x9d70 0x633e +0x9d71 0x634d +0x9d72 0x641c +0x9d73 0x634f +0x9d74 0x6396 +0x9d75 0x638e +0x9d76 0x6380 +0x9d77 0x63ab +0x9d78 0x6376 +0x9d79 0x63a3 +0x9d7a 0x638f +0x9d7b 0x6389 +0x9d7c 0x639f +0x9d7d 0x63b5 +0x9d7e 0x636b +0x9d80 0x6369 +0x9d81 0x63be +0x9d82 0x63e9 +0x9d83 0x63c0 +0x9d84 0x63c6 +0x9d85 0x63e3 +0x9d86 0x63c9 +0x9d87 0x63d2 +0x9d88 0x63f6 +0x9d89 0x63c4 +0x9d8a 0x6416 +0x9d8b 0x6434 +0x9d8c 0x6406 +0x9d8d 0x6413 +0x9d8e 0x6426 +0x9d8f 0x6436 +0x9d90 0x651d +0x9d91 0x6417 +0x9d92 0x6428 +0x9d93 0x640f +0x9d94 0x6467 +0x9d95 0x646f +0x9d96 0x6476 +0x9d97 0x644e +0x9d98 0x652a +0x9d99 0x6495 +0x9d9a 0x6493 +0x9d9b 0x64a5 +0x9d9c 0x64a9 +0x9d9d 0x6488 +0x9d9e 0x64bc +0x9d9f 0x64da +0x9da0 0x64d2 +0x9da1 0x64c5 +0x9da2 0x64c7 +0x9da3 0x64bb +0x9da4 0x64d8 +0x9da5 0x64c2 +0x9da6 0x64f1 +0x9da7 0x64e7 +0x9da8 0x8209 +0x9da9 0x64e0 +0x9daa 0x64e1 +0x9dab 0x62ac +0x9dac 0x64e3 +0x9dad 0x64ef +0x9dae 0x652c +0x9daf 0x64f6 +0x9db0 0x64f4 +0x9db1 0x64f2 +0x9db2 0x64fa +0x9db3 0x6500 +0x9db4 0x64fd +0x9db5 0x6518 +0x9db6 0x651c +0x9db7 0x6505 +0x9db8 0x6524 +0x9db9 0x6523 +0x9dba 0x652b +0x9dbb 0x6534 +0x9dbc 0x6535 +0x9dbd 0x6537 +0x9dbe 0x6536 +0x9dbf 0x6538 +0x9dc0 0x754b +0x9dc1 0x6548 +0x9dc2 0x6556 +0x9dc3 0x6555 +0x9dc4 0x654d +0x9dc5 0x6558 +0x9dc6 0x655e +0x9dc7 0x655d +0x9dc8 0x6572 +0x9dc9 0x6578 +0x9dca 0x6582 +0x9dcb 0x6583 +0x9dcc 0x8b8a +0x9dcd 0x659b +0x9dce 0x659f +0x9dcf 0x65ab +0x9dd0 0x65b7 +0x9dd1 0x65c3 +0x9dd2 0x65c6 +0x9dd3 0x65c1 +0x9dd4 0x65c4 +0x9dd5 0x65cc +0x9dd6 0x65d2 +0x9dd7 0x65db +0x9dd8 0x65d9 +0x9dd9 0x65e0 +0x9dda 0x65e1 +0x9ddb 0x65f1 +0x9ddc 0x6772 +0x9ddd 0x660a +0x9dde 0x6603 +0x9ddf 0x65fb +0x9de0 0x6773 +0x9de1 0x6635 +0x9de2 0x6636 +0x9de3 0x6634 +0x9de4 0x661c +0x9de5 0x664f +0x9de6 0x6644 +0x9de7 0x6649 +0x9de8 0x6641 +0x9de9 0x665e +0x9dea 0x665d +0x9deb 0x6664 +0x9dec 0x6667 +0x9ded 0x6668 +0x9dee 0x665f +0x9def 0x6662 +0x9df0 0x6670 +0x9df1 0x6683 +0x9df2 0x6688 +0x9df3 0x668e +0x9df4 0x6689 +0x9df5 0x6684 +0x9df6 0x6698 +0x9df7 0x669d +0x9df8 0x66c1 +0x9df9 0x66b9 +0x9dfa 0x66c9 +0x9dfb 0x66be +0x9dfc 0x66bc +0x9e40 0x66c4 +0x9e41 0x66b8 +0x9e42 0x66d6 +0x9e43 0x66da +0x9e44 0x66e0 +0x9e45 0x663f +0x9e46 0x66e6 +0x9e47 0x66e9 +0x9e48 0x66f0 +0x9e49 0x66f5 +0x9e4a 0x66f7 +0x9e4b 0x670f +0x9e4c 0x6716 +0x9e4d 0x671e +0x9e4e 0x6726 +0x9e4f 0x6727 +0x9e50 0x9738 +0x9e51 0x672e +0x9e52 0x673f +0x9e53 0x6736 +0x9e54 0x6741 +0x9e55 0x6738 +0x9e56 0x6737 +0x9e57 0x6746 +0x9e58 0x675e +0x9e59 0x6760 +0x9e5a 0x6759 +0x9e5b 0x6763 +0x9e5c 0x6764 +0x9e5d 0x6789 +0x9e5e 0x6770 +0x9e5f 0x67a9 +0x9e60 0x677c +0x9e61 0x676a +0x9e62 0x678c +0x9e63 0x678b +0x9e64 0x67a6 +0x9e65 0x67a1 +0x9e66 0x6785 +0x9e67 0x67b7 +0x9e68 0x67ef +0x9e69 0x67b4 +0x9e6a 0x67ec +0x9e6b 0x67b3 +0x9e6c 0x67e9 +0x9e6d 0x67b8 +0x9e6e 0x67e4 +0x9e6f 0x67de +0x9e70 0x67dd +0x9e71 0x67e2 +0x9e72 0x67ee +0x9e73 0x67b9 +0x9e74 0x67ce +0x9e75 0x67c6 +0x9e76 0x67e7 +0x9e77 0x6a9c +0x9e78 0x681e +0x9e79 0x6846 +0x9e7a 0x6829 +0x9e7b 0x6840 +0x9e7c 0x684d +0x9e7d 0x6832 +0x9e7e 0x684e +0x9e80 0x68b3 +0x9e81 0x682b +0x9e82 0x6859 +0x9e83 0x6863 +0x9e84 0x6877 +0x9e85 0x687f +0x9e86 0x689f +0x9e87 0x688f +0x9e88 0x68ad +0x9e89 0x6894 +0x9e8a 0x689d +0x9e8b 0x689b +0x9e8c 0x6883 +0x9e8d 0x6aae +0x9e8e 0x68b9 +0x9e8f 0x6874 +0x9e90 0x68b5 +0x9e91 0x68a0 +0x9e92 0x68ba +0x9e93 0x690f +0x9e94 0x688d +0x9e95 0x687e +0x9e96 0x6901 +0x9e97 0x68ca +0x9e98 0x6908 +0x9e99 0x68d8 +0x9e9a 0x6922 +0x9e9b 0x6926 +0x9e9c 0x68e1 +0x9e9d 0x690c +0x9e9e 0x68cd +0x9e9f 0x68d4 +0x9ea0 0x68e7 +0x9ea1 0x68d5 +0x9ea2 0x6936 +0x9ea3 0x6912 +0x9ea4 0x6904 +0x9ea5 0x68d7 +0x9ea6 0x68e3 +0x9ea7 0x6925 +0x9ea8 0x68f9 +0x9ea9 0x68e0 +0x9eaa 0x68ef +0x9eab 0x6928 +0x9eac 0x692a +0x9ead 0x691a +0x9eae 0x6923 +0x9eaf 0x6921 +0x9eb0 0x68c6 +0x9eb1 0x6979 +0x9eb2 0x6977 +0x9eb3 0x695c +0x9eb4 0x6978 +0x9eb5 0x696b +0x9eb6 0x6954 +0x9eb7 0x697e +0x9eb8 0x696e +0x9eb9 0x6939 +0x9eba 0x6974 +0x9ebb 0x693d +0x9ebc 0x6959 +0x9ebd 0x6930 +0x9ebe 0x6961 +0x9ebf 0x695e +0x9ec0 0x695d +0x9ec1 0x6981 +0x9ec2 0x696a +0x9ec3 0x69b2 +0x9ec4 0x69ae +0x9ec5 0x69d0 +0x9ec6 0x69bf +0x9ec7 0x69c1 +0x9ec8 0x69d3 +0x9ec9 0x69be +0x9eca 0x69ce +0x9ecb 0x5be8 +0x9ecc 0x69ca +0x9ecd 0x69dd +0x9ece 0x69bb +0x9ecf 0x69c3 +0x9ed0 0x69a7 +0x9ed1 0x6a2e +0x9ed2 0x6991 +0x9ed3 0x69a0 +0x9ed4 0x699c +0x9ed5 0x6995 +0x9ed6 0x69b4 +0x9ed7 0x69de +0x9ed8 0x69e8 +0x9ed9 0x6a02 +0x9eda 0x6a1b +0x9edb 0x69ff +0x9edc 0x6b0a +0x9edd 0x69f9 +0x9ede 0x69f2 +0x9edf 0x69e7 +0x9ee0 0x6a05 +0x9ee1 0x69b1 +0x9ee2 0x6a1e +0x9ee3 0x69ed +0x9ee4 0x6a14 +0x9ee5 0x69eb +0x9ee6 0x6a0a +0x9ee7 0x6a12 +0x9ee8 0x6ac1 +0x9ee9 0x6a23 +0x9eea 0x6a13 +0x9eeb 0x6a44 +0x9eec 0x6a0c +0x9eed 0x6a72 +0x9eee 0x6a36 +0x9eef 0x6a78 +0x9ef0 0x6a47 +0x9ef1 0x6a62 +0x9ef2 0x6a59 +0x9ef3 0x6a66 +0x9ef4 0x6a48 +0x9ef5 0x6a38 +0x9ef6 0x6a22 +0x9ef7 0x6a90 +0x9ef8 0x6a8d +0x9ef9 0x6aa0 +0x9efa 0x6a84 +0x9efb 0x6aa2 +0x9efc 0x6aa3 +0x9f40 0x6a97 +0x9f41 0x8617 +0x9f42 0x6abb +0x9f43 0x6ac3 +0x9f44 0x6ac2 +0x9f45 0x6ab8 +0x9f46 0x6ab3 +0x9f47 0x6aac +0x9f48 0x6ade +0x9f49 0x6ad1 +0x9f4a 0x6adf +0x9f4b 0x6aaa +0x9f4c 0x6ada +0x9f4d 0x6aea +0x9f4e 0x6afb +0x9f4f 0x6b05 +0x9f50 0x8616 +0x9f51 0x6afa +0x9f52 0x6b12 +0x9f53 0x6b16 +0x9f54 0x9b31 +0x9f55 0x6b1f +0x9f56 0x6b38 +0x9f57 0x6b37 +0x9f58 0x76dc +0x9f59 0x6b39 +0x9f5a 0x98ee +0x9f5b 0x6b47 +0x9f5c 0x6b43 +0x9f5d 0x6b49 +0x9f5e 0x6b50 +0x9f5f 0x6b59 +0x9f60 0x6b54 +0x9f61 0x6b5b +0x9f62 0x6b5f +0x9f63 0x6b61 +0x9f64 0x6b78 +0x9f65 0x6b79 +0x9f66 0x6b7f +0x9f67 0x6b80 +0x9f68 0x6b84 +0x9f69 0x6b83 +0x9f6a 0x6b8d +0x9f6b 0x6b98 +0x9f6c 0x6b95 +0x9f6d 0x6b9e +0x9f6e 0x6ba4 +0x9f6f 0x6baa +0x9f70 0x6bab +0x9f71 0x6baf +0x9f72 0x6bb2 +0x9f73 0x6bb1 +0x9f74 0x6bb3 +0x9f75 0x6bb7 +0x9f76 0x6bbc +0x9f77 0x6bc6 +0x9f78 0x6bcb +0x9f79 0x6bd3 +0x9f7a 0x6bdf +0x9f7b 0x6bec +0x9f7c 0x6beb +0x9f7d 0x6bf3 +0x9f7e 0x6bef +0x9f80 0x9ebe +0x9f81 0x6c08 +0x9f82 0x6c13 +0x9f83 0x6c14 +0x9f84 0x6c1b +0x9f85 0x6c24 +0x9f86 0x6c23 +0x9f87 0x6c5e +0x9f88 0x6c55 +0x9f89 0x6c62 +0x9f8a 0x6c6a +0x9f8b 0x6c82 +0x9f8c 0x6c8d +0x9f8d 0x6c9a +0x9f8e 0x6c81 +0x9f8f 0x6c9b +0x9f90 0x6c7e +0x9f91 0x6c68 +0x9f92 0x6c73 +0x9f93 0x6c92 +0x9f94 0x6c90 +0x9f95 0x6cc4 +0x9f96 0x6cf1 +0x9f97 0x6cd3 +0x9f98 0x6cbd +0x9f99 0x6cd7 +0x9f9a 0x6cc5 +0x9f9b 0x6cdd +0x9f9c 0x6cae +0x9f9d 0x6cb1 +0x9f9e 0x6cbe +0x9f9f 0x6cba +0x9fa0 0x6cdb +0x9fa1 0x6cef +0x9fa2 0x6cd9 +0x9fa3 0x6cea +0x9fa4 0x6d1f +0x9fa5 0x884d +0x9fa6 0x6d36 +0x9fa7 0x6d2b +0x9fa8 0x6d3d +0x9fa9 0x6d38 +0x9faa 0x6d19 +0x9fab 0x6d35 +0x9fac 0x6d33 +0x9fad 0x6d12 +0x9fae 0x6d0c +0x9faf 0x6d63 +0x9fb0 0x6d93 +0x9fb1 0x6d64 +0x9fb2 0x6d5a +0x9fb3 0x6d79 +0x9fb4 0x6d59 +0x9fb5 0x6d8e +0x9fb6 0x6d95 +0x9fb7 0x6fe4 +0x9fb8 0x6d85 +0x9fb9 0x6df9 +0x9fba 0x6e15 +0x9fbb 0x6e0a +0x9fbc 0x6db5 +0x9fbd 0x6dc7 +0x9fbe 0x6de6 +0x9fbf 0x6db8 +0x9fc0 0x6dc6 +0x9fc1 0x6dec +0x9fc2 0x6dde +0x9fc3 0x6dcc +0x9fc4 0x6de8 +0x9fc5 0x6dd2 +0x9fc6 0x6dc5 +0x9fc7 0x6dfa +0x9fc8 0x6dd9 +0x9fc9 0x6de4 +0x9fca 0x6dd5 +0x9fcb 0x6dea +0x9fcc 0x6dee +0x9fcd 0x6e2d +0x9fce 0x6e6e +0x9fcf 0x6e2e +0x9fd0 0x6e19 +0x9fd1 0x6e72 +0x9fd2 0x6e5f +0x9fd3 0x6e3e +0x9fd4 0x6e23 +0x9fd5 0x6e6b +0x9fd6 0x6e2b +0x9fd7 0x6e76 +0x9fd8 0x6e4d +0x9fd9 0x6e1f +0x9fda 0x6e43 +0x9fdb 0x6e3a +0x9fdc 0x6e4e +0x9fdd 0x6e24 +0x9fde 0x6eff +0x9fdf 0x6e1d +0x9fe0 0x6e38 +0x9fe1 0x6e82 +0x9fe2 0x6eaa +0x9fe3 0x6e98 +0x9fe4 0x6ec9 +0x9fe5 0x6eb7 +0x9fe6 0x6ed3 +0x9fe7 0x6ebd +0x9fe8 0x6eaf +0x9fe9 0x6ec4 +0x9fea 0x6eb2 +0x9feb 0x6ed4 +0x9fec 0x6ed5 +0x9fed 0x6e8f +0x9fee 0x6ea5 +0x9fef 0x6ec2 +0x9ff0 0x6e9f +0x9ff1 0x6f41 +0x9ff2 0x6f11 +0x9ff3 0x704c +0x9ff4 0x6eec +0x9ff5 0x6ef8 +0x9ff6 0x6efe +0x9ff7 0x6f3f +0x9ff8 0x6ef2 +0x9ff9 0x6f31 +0x9ffa 0x6eef +0x9ffb 0x6f32 +0x9ffc 0x6ecc +0xe040 0x6f3e +0xe041 0x6f13 +0xe042 0x6ef7 +0xe043 0x6f86 +0xe044 0x6f7a +0xe045 0x6f78 +0xe046 0x6f81 +0xe047 0x6f80 +0xe048 0x6f6f +0xe049 0x6f5b +0xe04a 0x6ff3 +0xe04b 0x6f6d +0xe04c 0x6f82 +0xe04d 0x6f7c +0xe04e 0x6f58 +0xe04f 0x6f8e +0xe050 0x6f91 +0xe051 0x6fc2 +0xe052 0x6f66 +0xe053 0x6fb3 +0xe054 0x6fa3 +0xe055 0x6fa1 +0xe056 0x6fa4 +0xe057 0x6fb9 +0xe058 0x6fc6 +0xe059 0x6faa +0xe05a 0x6fdf +0xe05b 0x6fd5 +0xe05c 0x6fec +0xe05d 0x6fd4 +0xe05e 0x6fd8 +0xe05f 0x6ff1 +0xe060 0x6fee +0xe061 0x6fdb +0xe062 0x7009 +0xe063 0x700b +0xe064 0x6ffa +0xe065 0x7011 +0xe066 0x7001 +0xe067 0x700f +0xe068 0x6ffe +0xe069 0x701b +0xe06a 0x701a +0xe06b 0x6f74 +0xe06c 0x701d +0xe06d 0x7018 +0xe06e 0x701f +0xe06f 0x7030 +0xe070 0x703e +0xe071 0x7032 +0xe072 0x7051 +0xe073 0x7063 +0xe074 0x7099 +0xe075 0x7092 +0xe076 0x70af +0xe077 0x70f1 +0xe078 0x70ac +0xe079 0x70b8 +0xe07a 0x70b3 +0xe07b 0x70ae +0xe07c 0x70df +0xe07d 0x70cb +0xe07e 0x70dd +0xe080 0x70d9 +0xe081 0x7109 +0xe082 0x70fd +0xe083 0x711c +0xe084 0x7119 +0xe085 0x7165 +0xe086 0x7155 +0xe087 0x7188 +0xe088 0x7166 +0xe089 0x7162 +0xe08a 0x714c +0xe08b 0x7156 +0xe08c 0x716c +0xe08d 0x718f +0xe08e 0x71fb +0xe08f 0x7184 +0xe090 0x7195 +0xe091 0x71a8 +0xe092 0x71ac +0xe093 0x71d7 +0xe094 0x71b9 +0xe095 0x71be +0xe096 0x71d2 +0xe097 0x71c9 +0xe098 0x71d4 +0xe099 0x71ce +0xe09a 0x71e0 +0xe09b 0x71ec +0xe09c 0x71e7 +0xe09d 0x71f5 +0xe09e 0x71fc +0xe09f 0x71f9 +0xe0a0 0x71ff +0xe0a1 0x720d +0xe0a2 0x7210 +0xe0a3 0x721b +0xe0a4 0x7228 +0xe0a5 0x722d +0xe0a6 0x722c +0xe0a7 0x7230 +0xe0a8 0x7232 +0xe0a9 0x723b +0xe0aa 0x723c +0xe0ab 0x723f +0xe0ac 0x7240 +0xe0ad 0x7246 +0xe0ae 0x724b +0xe0af 0x7258 +0xe0b0 0x7274 +0xe0b1 0x727e +0xe0b2 0x7282 +0xe0b3 0x7281 +0xe0b4 0x7287 +0xe0b5 0x7292 +0xe0b6 0x7296 +0xe0b7 0x72a2 +0xe0b8 0x72a7 +0xe0b9 0x72b9 +0xe0ba 0x72b2 +0xe0bb 0x72c3 +0xe0bc 0x72c6 +0xe0bd 0x72c4 +0xe0be 0x72ce +0xe0bf 0x72d2 +0xe0c0 0x72e2 +0xe0c1 0x72e0 +0xe0c2 0x72e1 +0xe0c3 0x72f9 +0xe0c4 0x72f7 +0xe0c5 0x500f +0xe0c6 0x7317 +0xe0c7 0x730a +0xe0c8 0x731c +0xe0c9 0x7316 +0xe0ca 0x731d +0xe0cb 0x7334 +0xe0cc 0x732f +0xe0cd 0x7329 +0xe0ce 0x7325 +0xe0cf 0x733e +0xe0d0 0x734e +0xe0d1 0x734f +0xe0d2 0x9ed8 +0xe0d3 0x7357 +0xe0d4 0x736a +0xe0d5 0x7368 +0xe0d6 0x7370 +0xe0d7 0x7378 +0xe0d8 0x7375 +0xe0d9 0x737b +0xe0da 0x737a +0xe0db 0x73c8 +0xe0dc 0x73b3 +0xe0dd 0x73ce +0xe0de 0x73bb +0xe0df 0x73c0 +0xe0e0 0x73e5 +0xe0e1 0x73ee +0xe0e2 0x73de +0xe0e3 0x74a2 +0xe0e4 0x7405 +0xe0e5 0x746f +0xe0e6 0x7425 +0xe0e7 0x73f8 +0xe0e8 0x7432 +0xe0e9 0x743a +0xe0ea 0x7455 +0xe0eb 0x743f +0xe0ec 0x745f +0xe0ed 0x7459 +0xe0ee 0x7441 +0xe0ef 0x745c +0xe0f0 0x7469 +0xe0f1 0x7470 +0xe0f2 0x7463 +0xe0f3 0x746a +0xe0f4 0x7476 +0xe0f5 0x747e +0xe0f6 0x748b +0xe0f7 0x749e +0xe0f8 0x74a7 +0xe0f9 0x74ca +0xe0fa 0x74cf +0xe0fb 0x74d4 +0xe0fc 0x73f1 +0xe140 0x74e0 +0xe141 0x74e3 +0xe142 0x74e7 +0xe143 0x74e9 +0xe144 0x74ee +0xe145 0x74f2 +0xe146 0x74f0 +0xe147 0x74f1 +0xe148 0x74f8 +0xe149 0x74f7 +0xe14a 0x7504 +0xe14b 0x7503 +0xe14c 0x7505 +0xe14d 0x750c +0xe14e 0x750e +0xe14f 0x750d +0xe150 0x7515 +0xe151 0x7513 +0xe152 0x751e +0xe153 0x7526 +0xe154 0x752c +0xe155 0x753c +0xe156 0x7544 +0xe157 0x754d +0xe158 0x754a +0xe159 0x7549 +0xe15a 0x755b +0xe15b 0x7546 +0xe15c 0x755a +0xe15d 0x7569 +0xe15e 0x7564 +0xe15f 0x7567 +0xe160 0x756b +0xe161 0x756d +0xe162 0x7578 +0xe163 0x7576 +0xe164 0x7586 +0xe165 0x7587 +0xe166 0x7574 +0xe167 0x758a +0xe168 0x7589 +0xe169 0x7582 +0xe16a 0x7594 +0xe16b 0x759a +0xe16c 0x759d +0xe16d 0x75a5 +0xe16e 0x75a3 +0xe16f 0x75c2 +0xe170 0x75b3 +0xe171 0x75c3 +0xe172 0x75b5 +0xe173 0x75bd +0xe174 0x75b8 +0xe175 0x75bc +0xe176 0x75b1 +0xe177 0x75cd +0xe178 0x75ca +0xe179 0x75d2 +0xe17a 0x75d9 +0xe17b 0x75e3 +0xe17c 0x75de +0xe17d 0x75fe +0xe17e 0x75ff +0xe180 0x75fc +0xe181 0x7601 +0xe182 0x75f0 +0xe183 0x75fa +0xe184 0x75f2 +0xe185 0x75f3 +0xe186 0x760b +0xe187 0x760d +0xe188 0x7609 +0xe189 0x761f +0xe18a 0x7627 +0xe18b 0x7620 +0xe18c 0x7621 +0xe18d 0x7622 +0xe18e 0x7624 +0xe18f 0x7634 +0xe190 0x7630 +0xe191 0x763b +0xe192 0x7647 +0xe193 0x7648 +0xe194 0x7646 +0xe195 0x765c +0xe196 0x7658 +0xe197 0x7661 +0xe198 0x7662 +0xe199 0x7668 +0xe19a 0x7669 +0xe19b 0x766a +0xe19c 0x7667 +0xe19d 0x766c +0xe19e 0x7670 +0xe19f 0x7672 +0xe1a0 0x7676 +0xe1a1 0x7678 +0xe1a2 0x767c +0xe1a3 0x7680 +0xe1a4 0x7683 +0xe1a5 0x7688 +0xe1a6 0x768b +0xe1a7 0x768e +0xe1a8 0x7696 +0xe1a9 0x7693 +0xe1aa 0x7699 +0xe1ab 0x769a +0xe1ac 0x76b0 +0xe1ad 0x76b4 +0xe1ae 0x76b8 +0xe1af 0x76b9 +0xe1b0 0x76ba +0xe1b1 0x76c2 +0xe1b2 0x76cd +0xe1b3 0x76d6 +0xe1b4 0x76d2 +0xe1b5 0x76de +0xe1b6 0x76e1 +0xe1b7 0x76e5 +0xe1b8 0x76e7 +0xe1b9 0x76ea +0xe1ba 0x862f +0xe1bb 0x76fb +0xe1bc 0x7708 +0xe1bd 0x7707 +0xe1be 0x7704 +0xe1bf 0x7729 +0xe1c0 0x7724 +0xe1c1 0x771e +0xe1c2 0x7725 +0xe1c3 0x7726 +0xe1c4 0x771b +0xe1c5 0x7737 +0xe1c6 0x7738 +0xe1c7 0x7747 +0xe1c8 0x775a +0xe1c9 0x7768 +0xe1ca 0x776b +0xe1cb 0x775b +0xe1cc 0x7765 +0xe1cd 0x777f +0xe1ce 0x777e +0xe1cf 0x7779 +0xe1d0 0x778e +0xe1d1 0x778b +0xe1d2 0x7791 +0xe1d3 0x77a0 +0xe1d4 0x779e +0xe1d5 0x77b0 +0xe1d6 0x77b6 +0xe1d7 0x77b9 +0xe1d8 0x77bf +0xe1d9 0x77bc +0xe1da 0x77bd +0xe1db 0x77bb +0xe1dc 0x77c7 +0xe1dd 0x77cd +0xe1de 0x77d7 +0xe1df 0x77da +0xe1e0 0x77dc +0xe1e1 0x77e3 +0xe1e2 0x77ee +0xe1e3 0x77fc +0xe1e4 0x780c +0xe1e5 0x7812 +0xe1e6 0x7926 +0xe1e7 0x7820 +0xe1e8 0x792a +0xe1e9 0x7845 +0xe1ea 0x788e +0xe1eb 0x7874 +0xe1ec 0x7886 +0xe1ed 0x787c +0xe1ee 0x789a +0xe1ef 0x788c +0xe1f0 0x78a3 +0xe1f1 0x78b5 +0xe1f2 0x78aa +0xe1f3 0x78af +0xe1f4 0x78d1 +0xe1f5 0x78c6 +0xe1f6 0x78cb +0xe1f7 0x78d4 +0xe1f8 0x78be +0xe1f9 0x78bc +0xe1fa 0x78c5 +0xe1fb 0x78ca +0xe1fc 0x78ec +0xe240 0x78e7 +0xe241 0x78da +0xe242 0x78fd +0xe243 0x78f4 +0xe244 0x7907 +0xe245 0x7912 +0xe246 0x7911 +0xe247 0x7919 +0xe248 0x792c +0xe249 0x792b +0xe24a 0x7940 +0xe24b 0x7960 +0xe24c 0x7957 +0xe24d 0x795f +0xe24e 0x795a +0xe24f 0x7955 +0xe250 0x7953 +0xe251 0x797a +0xe252 0x797f +0xe253 0x798a +0xe254 0x799d +0xe255 0x79a7 +0xe256 0x9f4b +0xe257 0x79aa +0xe258 0x79ae +0xe259 0x79b3 +0xe25a 0x79b9 +0xe25b 0x79ba +0xe25c 0x79c9 +0xe25d 0x79d5 +0xe25e 0x79e7 +0xe25f 0x79ec +0xe260 0x79e1 +0xe261 0x79e3 +0xe262 0x7a08 +0xe263 0x7a0d +0xe264 0x7a18 +0xe265 0x7a19 +0xe266 0x7a20 +0xe267 0x7a1f +0xe268 0x7980 +0xe269 0x7a31 +0xe26a 0x7a3b +0xe26b 0x7a3e +0xe26c 0x7a37 +0xe26d 0x7a43 +0xe26e 0x7a57 +0xe26f 0x7a49 +0xe270 0x7a61 +0xe271 0x7a62 +0xe272 0x7a69 +0xe273 0x9f9d +0xe274 0x7a70 +0xe275 0x7a79 +0xe276 0x7a7d +0xe277 0x7a88 +0xe278 0x7a97 +0xe279 0x7a95 +0xe27a 0x7a98 +0xe27b 0x7a96 +0xe27c 0x7aa9 +0xe27d 0x7ac8 +0xe27e 0x7ab0 +0xe280 0x7ab6 +0xe281 0x7ac5 +0xe282 0x7ac4 +0xe283 0x7abf +0xe284 0x9083 +0xe285 0x7ac7 +0xe286 0x7aca +0xe287 0x7acd +0xe288 0x7acf +0xe289 0x7ad5 +0xe28a 0x7ad3 +0xe28b 0x7ad9 +0xe28c 0x7ada +0xe28d 0x7add +0xe28e 0x7ae1 +0xe28f 0x7ae2 +0xe290 0x7ae6 +0xe291 0x7aed +0xe292 0x7af0 +0xe293 0x7b02 +0xe294 0x7b0f +0xe295 0x7b0a +0xe296 0x7b06 +0xe297 0x7b33 +0xe298 0x7b18 +0xe299 0x7b19 +0xe29a 0x7b1e +0xe29b 0x7b35 +0xe29c 0x7b28 +0xe29d 0x7b36 +0xe29e 0x7b50 +0xe29f 0x7b7a +0xe2a0 0x7b04 +0xe2a1 0x7b4d +0xe2a2 0x7b0b +0xe2a3 0x7b4c +0xe2a4 0x7b45 +0xe2a5 0x7b75 +0xe2a6 0x7b65 +0xe2a7 0x7b74 +0xe2a8 0x7b67 +0xe2a9 0x7b70 +0xe2aa 0x7b71 +0xe2ab 0x7b6c +0xe2ac 0x7b6e +0xe2ad 0x7b9d +0xe2ae 0x7b98 +0xe2af 0x7b9f +0xe2b0 0x7b8d +0xe2b1 0x7b9c +0xe2b2 0x7b9a +0xe2b3 0x7b8b +0xe2b4 0x7b92 +0xe2b5 0x7b8f +0xe2b6 0x7b5d +0xe2b7 0x7b99 +0xe2b8 0x7bcb +0xe2b9 0x7bc1 +0xe2ba 0x7bcc +0xe2bb 0x7bcf +0xe2bc 0x7bb4 +0xe2bd 0x7bc6 +0xe2be 0x7bdd +0xe2bf 0x7be9 +0xe2c0 0x7c11 +0xe2c1 0x7c14 +0xe2c2 0x7be6 +0xe2c3 0x7be5 +0xe2c4 0x7c60 +0xe2c5 0x7c00 +0xe2c6 0x7c07 +0xe2c7 0x7c13 +0xe2c8 0x7bf3 +0xe2c9 0x7bf7 +0xe2ca 0x7c17 +0xe2cb 0x7c0d +0xe2cc 0x7bf6 +0xe2cd 0x7c23 +0xe2ce 0x7c27 +0xe2cf 0x7c2a +0xe2d0 0x7c1f +0xe2d1 0x7c37 +0xe2d2 0x7c2b +0xe2d3 0x7c3d +0xe2d4 0x7c4c +0xe2d5 0x7c43 +0xe2d6 0x7c54 +0xe2d7 0x7c4f +0xe2d8 0x7c40 +0xe2d9 0x7c50 +0xe2da 0x7c58 +0xe2db 0x7c5f +0xe2dc 0x7c64 +0xe2dd 0x7c56 +0xe2de 0x7c65 +0xe2df 0x7c6c +0xe2e0 0x7c75 +0xe2e1 0x7c83 +0xe2e2 0x7c90 +0xe2e3 0x7ca4 +0xe2e4 0x7cad +0xe2e5 0x7ca2 +0xe2e6 0x7cab +0xe2e7 0x7ca1 +0xe2e8 0x7ca8 +0xe2e9 0x7cb3 +0xe2ea 0x7cb2 +0xe2eb 0x7cb1 +0xe2ec 0x7cae +0xe2ed 0x7cb9 +0xe2ee 0x7cbd +0xe2ef 0x7cc0 +0xe2f0 0x7cc5 +0xe2f1 0x7cc2 +0xe2f2 0x7cd8 +0xe2f3 0x7cd2 +0xe2f4 0x7cdc +0xe2f5 0x7ce2 +0xe2f6 0x9b3b +0xe2f7 0x7cef +0xe2f8 0x7cf2 +0xe2f9 0x7cf4 +0xe2fa 0x7cf6 +0xe2fb 0x7cfa +0xe2fc 0x7d06 +0xe340 0x7d02 +0xe341 0x7d1c +0xe342 0x7d15 +0xe343 0x7d0a +0xe344 0x7d45 +0xe345 0x7d4b +0xe346 0x7d2e +0xe347 0x7d32 +0xe348 0x7d3f +0xe349 0x7d35 +0xe34a 0x7d46 +0xe34b 0x7d73 +0xe34c 0x7d56 +0xe34d 0x7d4e +0xe34e 0x7d72 +0xe34f 0x7d68 +0xe350 0x7d6e +0xe351 0x7d4f +0xe352 0x7d63 +0xe353 0x7d93 +0xe354 0x7d89 +0xe355 0x7d5b +0xe356 0x7d8f +0xe357 0x7d7d +0xe358 0x7d9b +0xe359 0x7dba +0xe35a 0x7dae +0xe35b 0x7da3 +0xe35c 0x7db5 +0xe35d 0x7dc7 +0xe35e 0x7dbd +0xe35f 0x7dab +0xe360 0x7e3d +0xe361 0x7da2 +0xe362 0x7daf +0xe363 0x7ddc +0xe364 0x7db8 +0xe365 0x7d9f +0xe366 0x7db0 +0xe367 0x7dd8 +0xe368 0x7ddd +0xe369 0x7de4 +0xe36a 0x7dde +0xe36b 0x7dfb +0xe36c 0x7df2 +0xe36d 0x7de1 +0xe36e 0x7e05 +0xe36f 0x7e0a +0xe370 0x7e23 +0xe371 0x7e21 +0xe372 0x7e12 +0xe373 0x7e31 +0xe374 0x7e1f +0xe375 0x7e09 +0xe376 0x7e0b +0xe377 0x7e22 +0xe378 0x7e46 +0xe379 0x7e66 +0xe37a 0x7e3b +0xe37b 0x7e35 +0xe37c 0x7e39 +0xe37d 0x7e43 +0xe37e 0x7e37 +0xe380 0x7e32 +0xe381 0x7e3a +0xe382 0x7e67 +0xe383 0x7e5d +0xe384 0x7e56 +0xe385 0x7e5e +0xe386 0x7e59 +0xe387 0x7e5a +0xe388 0x7e79 +0xe389 0x7e6a +0xe38a 0x7e69 +0xe38b 0x7e7c +0xe38c 0x7e7b +0xe38d 0x7e83 +0xe38e 0x7dd5 +0xe38f 0x7e7d +0xe390 0x8fae +0xe391 0x7e7f +0xe392 0x7e88 +0xe393 0x7e89 +0xe394 0x7e8c +0xe395 0x7e92 +0xe396 0x7e90 +0xe397 0x7e93 +0xe398 0x7e94 +0xe399 0x7e96 +0xe39a 0x7e8e +0xe39b 0x7e9b +0xe39c 0x7e9c +0xe39d 0x7f38 +0xe39e 0x7f3a +0xe39f 0x7f45 +0xe3a0 0x7f4c +0xe3a1 0x7f4d +0xe3a2 0x7f4e +0xe3a3 0x7f50 +0xe3a4 0x7f51 +0xe3a5 0x7f55 +0xe3a6 0x7f54 +0xe3a7 0x7f58 +0xe3a8 0x7f5f +0xe3a9 0x7f60 +0xe3aa 0x7f68 +0xe3ab 0x7f69 +0xe3ac 0x7f67 +0xe3ad 0x7f78 +0xe3ae 0x7f82 +0xe3af 0x7f86 +0xe3b0 0x7f83 +0xe3b1 0x7f88 +0xe3b2 0x7f87 +0xe3b3 0x7f8c +0xe3b4 0x7f94 +0xe3b5 0x7f9e +0xe3b6 0x7f9d +0xe3b7 0x7f9a +0xe3b8 0x7fa3 +0xe3b9 0x7faf +0xe3ba 0x7fb2 +0xe3bb 0x7fb9 +0xe3bc 0x7fae +0xe3bd 0x7fb6 +0xe3be 0x7fb8 +0xe3bf 0x8b71 +0xe3c0 0x7fc5 +0xe3c1 0x7fc6 +0xe3c2 0x7fca +0xe3c3 0x7fd5 +0xe3c4 0x7fd4 +0xe3c5 0x7fe1 +0xe3c6 0x7fe6 +0xe3c7 0x7fe9 +0xe3c8 0x7ff3 +0xe3c9 0x7ff9 +0xe3ca 0x98dc +0xe3cb 0x8006 +0xe3cc 0x8004 +0xe3cd 0x800b +0xe3ce 0x8012 +0xe3cf 0x8018 +0xe3d0 0x8019 +0xe3d1 0x801c +0xe3d2 0x8021 +0xe3d3 0x8028 +0xe3d4 0x803f +0xe3d5 0x803b +0xe3d6 0x804a +0xe3d7 0x8046 +0xe3d8 0x8052 +0xe3d9 0x8058 +0xe3da 0x805a +0xe3db 0x805f +0xe3dc 0x8062 +0xe3dd 0x8068 +0xe3de 0x8073 +0xe3df 0x8072 +0xe3e0 0x8070 +0xe3e1 0x8076 +0xe3e2 0x8079 +0xe3e3 0x807d +0xe3e4 0x807f +0xe3e5 0x8084 +0xe3e6 0x8086 +0xe3e7 0x8085 +0xe3e8 0x809b +0xe3e9 0x8093 +0xe3ea 0x809a +0xe3eb 0x80ad +0xe3ec 0x5190 +0xe3ed 0x80ac +0xe3ee 0x80db +0xe3ef 0x80e5 +0xe3f0 0x80d9 +0xe3f1 0x80dd +0xe3f2 0x80c4 +0xe3f3 0x80da +0xe3f4 0x80d6 +0xe3f5 0x8109 +0xe3f6 0x80ef +0xe3f7 0x80f1 +0xe3f8 0x811b +0xe3f9 0x8129 +0xe3fa 0x8123 +0xe3fb 0x812f +0xe3fc 0x814b +0xe440 0x968b +0xe441 0x8146 +0xe442 0x813e +0xe443 0x8153 +0xe444 0x8151 +0xe445 0x80fc +0xe446 0x8171 +0xe447 0x816e +0xe448 0x8165 +0xe449 0x8166 +0xe44a 0x8174 +0xe44b 0x8183 +0xe44c 0x8188 +0xe44d 0x818a +0xe44e 0x8180 +0xe44f 0x8182 +0xe450 0x81a0 +0xe451 0x8195 +0xe452 0x81a4 +0xe453 0x81a3 +0xe454 0x815f +0xe455 0x8193 +0xe456 0x81a9 +0xe457 0x81b0 +0xe458 0x81b5 +0xe459 0x81be +0xe45a 0x81b8 +0xe45b 0x81bd +0xe45c 0x81c0 +0xe45d 0x81c2 +0xe45e 0x81ba +0xe45f 0x81c9 +0xe460 0x81cd +0xe461 0x81d1 +0xe462 0x81d9 +0xe463 0x81d8 +0xe464 0x81c8 +0xe465 0x81da +0xe466 0x81df +0xe467 0x81e0 +0xe468 0x81e7 +0xe469 0x81fa +0xe46a 0x81fb +0xe46b 0x81fe +0xe46c 0x8201 +0xe46d 0x8202 +0xe46e 0x8205 +0xe46f 0x8207 +0xe470 0x820a +0xe471 0x820d +0xe472 0x8210 +0xe473 0x8216 +0xe474 0x8229 +0xe475 0x822b +0xe476 0x8238 +0xe477 0x8233 +0xe478 0x8240 +0xe479 0x8259 +0xe47a 0x8258 +0xe47b 0x825d +0xe47c 0x825a +0xe47d 0x825f +0xe47e 0x8264 +0xe480 0x8262 +0xe481 0x8268 +0xe482 0x826a +0xe483 0x826b +0xe484 0x822e +0xe485 0x8271 +0xe486 0x8277 +0xe487 0x8278 +0xe488 0x827e +0xe489 0x828d +0xe48a 0x8292 +0xe48b 0x82ab +0xe48c 0x829f +0xe48d 0x82bb +0xe48e 0x82ac +0xe48f 0x82e1 +0xe490 0x82e3 +0xe491 0x82df +0xe492 0x82d2 +0xe493 0x82f4 +0xe494 0x82f3 +0xe495 0x82fa +0xe496 0x8393 +0xe497 0x8303 +0xe498 0x82fb +0xe499 0x82f9 +0xe49a 0x82de +0xe49b 0x8306 +0xe49c 0x82dc +0xe49d 0x8309 +0xe49e 0x82d9 +0xe49f 0x8335 +0xe4a0 0x8334 +0xe4a1 0x8316 +0xe4a2 0x8332 +0xe4a3 0x8331 +0xe4a4 0x8340 +0xe4a5 0x8339 +0xe4a6 0x8350 +0xe4a7 0x8345 +0xe4a8 0x832f +0xe4a9 0x832b +0xe4aa 0x8317 +0xe4ab 0x8318 +0xe4ac 0x8385 +0xe4ad 0x839a +0xe4ae 0x83aa +0xe4af 0x839f +0xe4b0 0x83a2 +0xe4b1 0x8396 +0xe4b2 0x8323 +0xe4b3 0x838e +0xe4b4 0x8387 +0xe4b5 0x838a +0xe4b6 0x837c +0xe4b7 0x83b5 +0xe4b8 0x8373 +0xe4b9 0x8375 +0xe4ba 0x83a0 +0xe4bb 0x8389 +0xe4bc 0x83a8 +0xe4bd 0x83f4 +0xe4be 0x8413 +0xe4bf 0x83eb +0xe4c0 0x83ce +0xe4c1 0x83fd +0xe4c2 0x8403 +0xe4c3 0x83d8 +0xe4c4 0x840b +0xe4c5 0x83c1 +0xe4c6 0x83f7 +0xe4c7 0x8407 +0xe4c8 0x83e0 +0xe4c9 0x83f2 +0xe4ca 0x840d +0xe4cb 0x8422 +0xe4cc 0x8420 +0xe4cd 0x83bd +0xe4ce 0x8438 +0xe4cf 0x8506 +0xe4d0 0x83fb +0xe4d1 0x846d +0xe4d2 0x842a +0xe4d3 0x843c +0xe4d4 0x855a +0xe4d5 0x8484 +0xe4d6 0x8477 +0xe4d7 0x846b +0xe4d8 0x84ad +0xe4d9 0x846e +0xe4da 0x8482 +0xe4db 0x8469 +0xe4dc 0x8446 +0xe4dd 0x842c +0xe4de 0x846f +0xe4df 0x8479 +0xe4e0 0x8435 +0xe4e1 0x84ca +0xe4e2 0x8462 +0xe4e3 0x84b9 +0xe4e4 0x84bf +0xe4e5 0x849f +0xe4e6 0x84d9 +0xe4e7 0x84cd +0xe4e8 0x84bb +0xe4e9 0x84da +0xe4ea 0x84d0 +0xe4eb 0x84c1 +0xe4ec 0x84c6 +0xe4ed 0x84d6 +0xe4ee 0x84a1 +0xe4ef 0x8521 +0xe4f0 0x84ff +0xe4f1 0x84f4 +0xe4f2 0x8517 +0xe4f3 0x8518 +0xe4f4 0x852c +0xe4f5 0x851f +0xe4f6 0x8515 +0xe4f7 0x8514 +0xe4f8 0x84fc +0xe4f9 0x8540 +0xe4fa 0x8563 +0xe4fb 0x8558 +0xe4fc 0x8548 +0xe540 0x8541 +0xe541 0x8602 +0xe542 0x854b +0xe543 0x8555 +0xe544 0x8580 +0xe545 0x85a4 +0xe546 0x8588 +0xe547 0x8591 +0xe548 0x858a +0xe549 0x85a8 +0xe54a 0x856d +0xe54b 0x8594 +0xe54c 0x859b +0xe54d 0x85ea +0xe54e 0x8587 +0xe54f 0x859c +0xe550 0x8577 +0xe551 0x857e +0xe552 0x8590 +0xe553 0x85c9 +0xe554 0x85ba +0xe555 0x85cf +0xe556 0x85b9 +0xe557 0x85d0 +0xe558 0x85d5 +0xe559 0x85dd +0xe55a 0x85e5 +0xe55b 0x85dc +0xe55c 0x85f9 +0xe55d 0x860a +0xe55e 0x8613 +0xe55f 0x860b +0xe560 0x85fe +0xe561 0x85fa +0xe562 0x8606 +0xe563 0x8622 +0xe564 0x861a +0xe565 0x8630 +0xe566 0x863f +0xe567 0x864d +0xe568 0x4e55 +0xe569 0x8654 +0xe56a 0x865f +0xe56b 0x8667 +0xe56c 0x8671 +0xe56d 0x8693 +0xe56e 0x86a3 +0xe56f 0x86a9 +0xe570 0x86aa +0xe571 0x868b +0xe572 0x868c +0xe573 0x86b6 +0xe574 0x86af +0xe575 0x86c4 +0xe576 0x86c6 +0xe577 0x86b0 +0xe578 0x86c9 +0xe579 0x8823 +0xe57a 0x86ab +0xe57b 0x86d4 +0xe57c 0x86de +0xe57d 0x86e9 +0xe57e 0x86ec +0xe580 0x86df +0xe581 0x86db +0xe582 0x86ef +0xe583 0x8712 +0xe584 0x8706 +0xe585 0x8708 +0xe586 0x8700 +0xe587 0x8703 +0xe588 0x86fb +0xe589 0x8711 +0xe58a 0x8709 +0xe58b 0x870d +0xe58c 0x86f9 +0xe58d 0x870a +0xe58e 0x8734 +0xe58f 0x873f +0xe590 0x8737 +0xe591 0x873b +0xe592 0x8725 +0xe593 0x8729 +0xe594 0x871a +0xe595 0x8760 +0xe596 0x875f +0xe597 0x8778 +0xe598 0x874c +0xe599 0x874e +0xe59a 0x8774 +0xe59b 0x8757 +0xe59c 0x8768 +0xe59d 0x876e +0xe59e 0x8759 +0xe59f 0x8753 +0xe5a0 0x8763 +0xe5a1 0x876a +0xe5a2 0x8805 +0xe5a3 0x87a2 +0xe5a4 0x879f +0xe5a5 0x8782 +0xe5a6 0x87af +0xe5a7 0x87cb +0xe5a8 0x87bd +0xe5a9 0x87c0 +0xe5aa 0x87d0 +0xe5ab 0x96d6 +0xe5ac 0x87ab +0xe5ad 0x87c4 +0xe5ae 0x87b3 +0xe5af 0x87c7 +0xe5b0 0x87c6 +0xe5b1 0x87bb +0xe5b2 0x87ef +0xe5b3 0x87f2 +0xe5b4 0x87e0 +0xe5b5 0x880f +0xe5b6 0x880d +0xe5b7 0x87fe +0xe5b8 0x87f6 +0xe5b9 0x87f7 +0xe5ba 0x880e +0xe5bb 0x87d2 +0xe5bc 0x8811 +0xe5bd 0x8816 +0xe5be 0x8815 +0xe5bf 0x8822 +0xe5c0 0x8821 +0xe5c1 0x8831 +0xe5c2 0x8836 +0xe5c3 0x8839 +0xe5c4 0x8827 +0xe5c5 0x883b +0xe5c6 0x8844 +0xe5c7 0x8842 +0xe5c8 0x8852 +0xe5c9 0x8859 +0xe5ca 0x885e +0xe5cb 0x8862 +0xe5cc 0x886b +0xe5cd 0x8881 +0xe5ce 0x887e +0xe5cf 0x889e +0xe5d0 0x8875 +0xe5d1 0x887d +0xe5d2 0x88b5 +0xe5d3 0x8872 +0xe5d4 0x8882 +0xe5d5 0x8897 +0xe5d6 0x8892 +0xe5d7 0x88ae +0xe5d8 0x8899 +0xe5d9 0x88a2 +0xe5da 0x888d +0xe5db 0x88a4 +0xe5dc 0x88b0 +0xe5dd 0x88bf +0xe5de 0x88b1 +0xe5df 0x88c3 +0xe5e0 0x88c4 +0xe5e1 0x88d4 +0xe5e2 0x88d8 +0xe5e3 0x88d9 +0xe5e4 0x88dd +0xe5e5 0x88f9 +0xe5e6 0x8902 +0xe5e7 0x88fc +0xe5e8 0x88f4 +0xe5e9 0x88e8 +0xe5ea 0x88f2 +0xe5eb 0x8904 +0xe5ec 0x890c +0xe5ed 0x890a +0xe5ee 0x8913 +0xe5ef 0x8943 +0xe5f0 0x891e +0xe5f1 0x8925 +0xe5f2 0x892a +0xe5f3 0x892b +0xe5f4 0x8941 +0xe5f5 0x8944 +0xe5f6 0x893b +0xe5f7 0x8936 +0xe5f8 0x8938 +0xe5f9 0x894c +0xe5fa 0x891d +0xe5fb 0x8960 +0xe5fc 0x895e +0xe640 0x8966 +0xe641 0x8964 +0xe642 0x896d +0xe643 0x896a +0xe644 0x896f +0xe645 0x8974 +0xe646 0x8977 +0xe647 0x897e +0xe648 0x8983 +0xe649 0x8988 +0xe64a 0x898a +0xe64b 0x8993 +0xe64c 0x8998 +0xe64d 0x89a1 +0xe64e 0x89a9 +0xe64f 0x89a6 +0xe650 0x89ac +0xe651 0x89af +0xe652 0x89b2 +0xe653 0x89ba +0xe654 0x89bd +0xe655 0x89bf +0xe656 0x89c0 +0xe657 0x89da +0xe658 0x89dc +0xe659 0x89dd +0xe65a 0x89e7 +0xe65b 0x89f4 +0xe65c 0x89f8 +0xe65d 0x8a03 +0xe65e 0x8a16 +0xe65f 0x8a10 +0xe660 0x8a0c +0xe661 0x8a1b +0xe662 0x8a1d +0xe663 0x8a25 +0xe664 0x8a36 +0xe665 0x8a41 +0xe666 0x8a5b +0xe667 0x8a52 +0xe668 0x8a46 +0xe669 0x8a48 +0xe66a 0x8a7c +0xe66b 0x8a6d +0xe66c 0x8a6c +0xe66d 0x8a62 +0xe66e 0x8a85 +0xe66f 0x8a82 +0xe670 0x8a84 +0xe671 0x8aa8 +0xe672 0x8aa1 +0xe673 0x8a91 +0xe674 0x8aa5 +0xe675 0x8aa6 +0xe676 0x8a9a +0xe677 0x8aa3 +0xe678 0x8ac4 +0xe679 0x8acd +0xe67a 0x8ac2 +0xe67b 0x8ada +0xe67c 0x8aeb +0xe67d 0x8af3 +0xe67e 0x8ae7 +0xe680 0x8ae4 +0xe681 0x8af1 +0xe682 0x8b14 +0xe683 0x8ae0 +0xe684 0x8ae2 +0xe685 0x8af7 +0xe686 0x8ade +0xe687 0x8adb +0xe688 0x8b0c +0xe689 0x8b07 +0xe68a 0x8b1a +0xe68b 0x8ae1 +0xe68c 0x8b16 +0xe68d 0x8b10 +0xe68e 0x8b17 +0xe68f 0x8b20 +0xe690 0x8b33 +0xe691 0x97ab +0xe692 0x8b26 +0xe693 0x8b2b +0xe694 0x8b3e +0xe695 0x8b28 +0xe696 0x8b41 +0xe697 0x8b4c +0xe698 0x8b4f +0xe699 0x8b4e +0xe69a 0x8b49 +0xe69b 0x8b56 +0xe69c 0x8b5b +0xe69d 0x8b5a +0xe69e 0x8b6b +0xe69f 0x8b5f +0xe6a0 0x8b6c +0xe6a1 0x8b6f +0xe6a2 0x8b74 +0xe6a3 0x8b7d +0xe6a4 0x8b80 +0xe6a5 0x8b8c +0xe6a6 0x8b8e +0xe6a7 0x8b92 +0xe6a8 0x8b93 +0xe6a9 0x8b96 +0xe6aa 0x8b99 +0xe6ab 0x8b9a +0xe6ac 0x8c3a +0xe6ad 0x8c41 +0xe6ae 0x8c3f +0xe6af 0x8c48 +0xe6b0 0x8c4c +0xe6b1 0x8c4e +0xe6b2 0x8c50 +0xe6b3 0x8c55 +0xe6b4 0x8c62 +0xe6b5 0x8c6c +0xe6b6 0x8c78 +0xe6b7 0x8c7a +0xe6b8 0x8c82 +0xe6b9 0x8c89 +0xe6ba 0x8c85 +0xe6bb 0x8c8a +0xe6bc 0x8c8d +0xe6bd 0x8c8e +0xe6be 0x8c94 +0xe6bf 0x8c7c +0xe6c0 0x8c98 +0xe6c1 0x621d +0xe6c2 0x8cad +0xe6c3 0x8caa +0xe6c4 0x8cbd +0xe6c5 0x8cb2 +0xe6c6 0x8cb3 +0xe6c7 0x8cae +0xe6c8 0x8cb6 +0xe6c9 0x8cc8 +0xe6ca 0x8cc1 +0xe6cb 0x8ce4 +0xe6cc 0x8ce3 +0xe6cd 0x8cda +0xe6ce 0x8cfd +0xe6cf 0x8cfa +0xe6d0 0x8cfb +0xe6d1 0x8d04 +0xe6d2 0x8d05 +0xe6d3 0x8d0a +0xe6d4 0x8d07 +0xe6d5 0x8d0f +0xe6d6 0x8d0d +0xe6d7 0x8d10 +0xe6d8 0x9f4e +0xe6d9 0x8d13 +0xe6da 0x8ccd +0xe6db 0x8d14 +0xe6dc 0x8d16 +0xe6dd 0x8d67 +0xe6de 0x8d6d +0xe6df 0x8d71 +0xe6e0 0x8d73 +0xe6e1 0x8d81 +0xe6e2 0x8d99 +0xe6e3 0x8dc2 +0xe6e4 0x8dbe +0xe6e5 0x8dba +0xe6e6 0x8dcf +0xe6e7 0x8dda +0xe6e8 0x8dd6 +0xe6e9 0x8dcc +0xe6ea 0x8ddb +0xe6eb 0x8dcb +0xe6ec 0x8dea +0xe6ed 0x8deb +0xe6ee 0x8ddf +0xe6ef 0x8de3 +0xe6f0 0x8dfc +0xe6f1 0x8e08 +0xe6f2 0x8e09 +0xe6f3 0x8dff +0xe6f4 0x8e1d +0xe6f5 0x8e1e +0xe6f6 0x8e10 +0xe6f7 0x8e1f +0xe6f8 0x8e42 +0xe6f9 0x8e35 +0xe6fa 0x8e30 +0xe6fb 0x8e34 +0xe6fc 0x8e4a +0xe740 0x8e47 +0xe741 0x8e49 +0xe742 0x8e4c +0xe743 0x8e50 +0xe744 0x8e48 +0xe745 0x8e59 +0xe746 0x8e64 +0xe747 0x8e60 +0xe748 0x8e2a +0xe749 0x8e63 +0xe74a 0x8e55 +0xe74b 0x8e76 +0xe74c 0x8e72 +0xe74d 0x8e7c +0xe74e 0x8e81 +0xe74f 0x8e87 +0xe750 0x8e85 +0xe751 0x8e84 +0xe752 0x8e8b +0xe753 0x8e8a +0xe754 0x8e93 +0xe755 0x8e91 +0xe756 0x8e94 +0xe757 0x8e99 +0xe758 0x8eaa +0xe759 0x8ea1 +0xe75a 0x8eac +0xe75b 0x8eb0 +0xe75c 0x8ec6 +0xe75d 0x8eb1 +0xe75e 0x8ebe +0xe75f 0x8ec5 +0xe760 0x8ec8 +0xe761 0x8ecb +0xe762 0x8edb +0xe763 0x8ee3 +0xe764 0x8efc +0xe765 0x8efb +0xe766 0x8eeb +0xe767 0x8efe +0xe768 0x8f0a +0xe769 0x8f05 +0xe76a 0x8f15 +0xe76b 0x8f12 +0xe76c 0x8f19 +0xe76d 0x8f13 +0xe76e 0x8f1c +0xe76f 0x8f1f +0xe770 0x8f1b +0xe771 0x8f0c +0xe772 0x8f26 +0xe773 0x8f33 +0xe774 0x8f3b +0xe775 0x8f39 +0xe776 0x8f45 +0xe777 0x8f42 +0xe778 0x8f3e +0xe779 0x8f4c +0xe77a 0x8f49 +0xe77b 0x8f46 +0xe77c 0x8f4e +0xe77d 0x8f57 +0xe77e 0x8f5c +0xe780 0x8f62 +0xe781 0x8f63 +0xe782 0x8f64 +0xe783 0x8f9c +0xe784 0x8f9f +0xe785 0x8fa3 +0xe786 0x8fad +0xe787 0x8faf +0xe788 0x8fb7 +0xe789 0x8fda +0xe78a 0x8fe5 +0xe78b 0x8fe2 +0xe78c 0x8fea +0xe78d 0x8fef +0xe78e 0x9087 +0xe78f 0x8ff4 +0xe790 0x9005 +0xe791 0x8ff9 +0xe792 0x8ffa +0xe793 0x9011 +0xe794 0x9015 +0xe795 0x9021 +0xe796 0x900d +0xe797 0x901e +0xe798 0x9016 +0xe799 0x900b +0xe79a 0x9027 +0xe79b 0x9036 +0xe79c 0x9035 +0xe79d 0x9039 +0xe79e 0x8ff8 +0xe79f 0x904f +0xe7a0 0x9050 +0xe7a1 0x9051 +0xe7a2 0x9052 +0xe7a3 0x900e +0xe7a4 0x9049 +0xe7a5 0x903e +0xe7a6 0x9056 +0xe7a7 0x9058 +0xe7a8 0x905e +0xe7a9 0x9068 +0xe7aa 0x906f +0xe7ab 0x9076 +0xe7ac 0x96a8 +0xe7ad 0x9072 +0xe7ae 0x9082 +0xe7af 0x907d +0xe7b0 0x9081 +0xe7b1 0x9080 +0xe7b2 0x908a +0xe7b3 0x9089 +0xe7b4 0x908f +0xe7b5 0x90a8 +0xe7b6 0x90af +0xe7b7 0x90b1 +0xe7b8 0x90b5 +0xe7b9 0x90e2 +0xe7ba 0x90e4 +0xe7bb 0x6248 +0xe7bc 0x90db +0xe7bd 0x9102 +0xe7be 0x9112 +0xe7bf 0x9119 +0xe7c0 0x9132 +0xe7c1 0x9130 +0xe7c2 0x914a +0xe7c3 0x9156 +0xe7c4 0x9158 +0xe7c5 0x9163 +0xe7c6 0x9165 +0xe7c7 0x9169 +0xe7c8 0x9173 +0xe7c9 0x9172 +0xe7ca 0x918b +0xe7cb 0x9189 +0xe7cc 0x9182 +0xe7cd 0x91a2 +0xe7ce 0x91ab +0xe7cf 0x91af +0xe7d0 0x91aa +0xe7d1 0x91b5 +0xe7d2 0x91b4 +0xe7d3 0x91ba +0xe7d4 0x91c0 +0xe7d5 0x91c1 +0xe7d6 0x91c9 +0xe7d7 0x91cb +0xe7d8 0x91d0 +0xe7d9 0x91d6 +0xe7da 0x91df +0xe7db 0x91e1 +0xe7dc 0x91db +0xe7dd 0x91fc +0xe7de 0x91f5 +0xe7df 0x91f6 +0xe7e0 0x921e +0xe7e1 0x91ff +0xe7e2 0x9214 +0xe7e3 0x922c +0xe7e4 0x9215 +0xe7e5 0x9211 +0xe7e6 0x925e +0xe7e7 0x9257 +0xe7e8 0x9245 +0xe7e9 0x9249 +0xe7ea 0x9264 +0xe7eb 0x9248 +0xe7ec 0x9295 +0xe7ed 0x923f +0xe7ee 0x924b +0xe7ef 0x9250 +0xe7f0 0x929c +0xe7f1 0x9296 +0xe7f2 0x9293 +0xe7f3 0x929b +0xe7f4 0x925a +0xe7f5 0x92cf +0xe7f6 0x92b9 +0xe7f7 0x92b7 +0xe7f8 0x92e9 +0xe7f9 0x930f +0xe7fa 0x92fa +0xe7fb 0x9344 +0xe7fc 0x932e +0xe840 0x9319 +0xe841 0x9322 +0xe842 0x931a +0xe843 0x9323 +0xe844 0x933a +0xe845 0x9335 +0xe846 0x933b +0xe847 0x935c +0xe848 0x9360 +0xe849 0x937c +0xe84a 0x936e +0xe84b 0x9356 +0xe84c 0x93b0 +0xe84d 0x93ac +0xe84e 0x93ad +0xe84f 0x9394 +0xe850 0x93b9 +0xe851 0x93d6 +0xe852 0x93d7 +0xe853 0x93e8 +0xe854 0x93e5 +0xe855 0x93d8 +0xe856 0x93c3 +0xe857 0x93dd +0xe858 0x93d0 +0xe859 0x93c8 +0xe85a 0x93e4 +0xe85b 0x941a +0xe85c 0x9414 +0xe85d 0x9413 +0xe85e 0x9403 +0xe85f 0x9407 +0xe860 0x9410 +0xe861 0x9436 +0xe862 0x942b +0xe863 0x9435 +0xe864 0x9421 +0xe865 0x943a +0xe866 0x9441 +0xe867 0x9452 +0xe868 0x9444 +0xe869 0x945b +0xe86a 0x9460 +0xe86b 0x9462 +0xe86c 0x945e +0xe86d 0x946a +0xe86e 0x9229 +0xe86f 0x9470 +0xe870 0x9475 +0xe871 0x9477 +0xe872 0x947d +0xe873 0x945a +0xe874 0x947c +0xe875 0x947e +0xe876 0x9481 +0xe877 0x947f +0xe878 0x9582 +0xe879 0x9587 +0xe87a 0x958a +0xe87b 0x9594 +0xe87c 0x9596 +0xe87d 0x9598 +0xe87e 0x9599 +0xe880 0x95a0 +0xe881 0x95a8 +0xe882 0x95a7 +0xe883 0x95ad +0xe884 0x95bc +0xe885 0x95bb +0xe886 0x95b9 +0xe887 0x95be +0xe888 0x95ca +0xe889 0x6ff6 +0xe88a 0x95c3 +0xe88b 0x95cd +0xe88c 0x95cc +0xe88d 0x95d5 +0xe88e 0x95d4 +0xe88f 0x95d6 +0xe890 0x95dc +0xe891 0x95e1 +0xe892 0x95e5 +0xe893 0x95e2 +0xe894 0x9621 +0xe895 0x9628 +0xe896 0x962e +0xe897 0x962f +0xe898 0x9642 +0xe899 0x964c +0xe89a 0x964f +0xe89b 0x964b +0xe89c 0x9677 +0xe89d 0x965c +0xe89e 0x965e +0xe89f 0x965d +0xe8a0 0x965f +0xe8a1 0x9666 +0xe8a2 0x9672 +0xe8a3 0x966c +0xe8a4 0x968d +0xe8a5 0x9698 +0xe8a6 0x9695 +0xe8a7 0x9697 +0xe8a8 0x96aa +0xe8a9 0x96a7 +0xe8aa 0x96b1 +0xe8ab 0x96b2 +0xe8ac 0x96b0 +0xe8ad 0x96b4 +0xe8ae 0x96b6 +0xe8af 0x96b8 +0xe8b0 0x96b9 +0xe8b1 0x96ce +0xe8b2 0x96cb +0xe8b3 0x96c9 +0xe8b4 0x96cd +0xe8b5 0x894d +0xe8b6 0x96dc +0xe8b7 0x970d +0xe8b8 0x96d5 +0xe8b9 0x96f9 +0xe8ba 0x9704 +0xe8bb 0x9706 +0xe8bc 0x9708 +0xe8bd 0x9713 +0xe8be 0x970e +0xe8bf 0x9711 +0xe8c0 0x970f +0xe8c1 0x9716 +0xe8c2 0x9719 +0xe8c3 0x9724 +0xe8c4 0x972a +0xe8c5 0x9730 +0xe8c6 0x9739 +0xe8c7 0x973d +0xe8c8 0x973e +0xe8c9 0x9744 +0xe8ca 0x9746 +0xe8cb 0x9748 +0xe8cc 0x9742 +0xe8cd 0x9749 +0xe8ce 0x975c +0xe8cf 0x9760 +0xe8d0 0x9764 +0xe8d1 0x9766 +0xe8d2 0x9768 +0xe8d3 0x52d2 +0xe8d4 0x976b +0xe8d5 0x9771 +0xe8d6 0x9779 +0xe8d7 0x9785 +0xe8d8 0x977c +0xe8d9 0x9781 +0xe8da 0x977a +0xe8db 0x9786 +0xe8dc 0x978b +0xe8dd 0x978f +0xe8de 0x9790 +0xe8df 0x979c +0xe8e0 0x97a8 +0xe8e1 0x97a6 +0xe8e2 0x97a3 +0xe8e3 0x97b3 +0xe8e4 0x97b4 +0xe8e5 0x97c3 +0xe8e6 0x97c6 +0xe8e7 0x97c8 +0xe8e8 0x97cb +0xe8e9 0x97dc +0xe8ea 0x97ed +0xe8eb 0x9f4f +0xe8ec 0x97f2 +0xe8ed 0x7adf +0xe8ee 0x97f6 +0xe8ef 0x97f5 +0xe8f0 0x980f +0xe8f1 0x980c +0xe8f2 0x9838 +0xe8f3 0x9824 +0xe8f4 0x9821 +0xe8f5 0x9837 +0xe8f6 0x983d +0xe8f7 0x9846 +0xe8f8 0x984f +0xe8f9 0x984b +0xe8fa 0x986b +0xe8fb 0x986f +0xe8fc 0x9870 +0xe940 0x9871 +0xe941 0x9874 +0xe942 0x9873 +0xe943 0x98aa +0xe944 0x98af +0xe945 0x98b1 +0xe946 0x98b6 +0xe947 0x98c4 +0xe948 0x98c3 +0xe949 0x98c6 +0xe94a 0x98e9 +0xe94b 0x98eb +0xe94c 0x9903 +0xe94d 0x9909 +0xe94e 0x9912 +0xe94f 0x9914 +0xe950 0x9918 +0xe951 0x9921 +0xe952 0x991d +0xe953 0x991e +0xe954 0x9924 +0xe955 0x9920 +0xe956 0x992c +0xe957 0x992e +0xe958 0x993d +0xe959 0x993e +0xe95a 0x9942 +0xe95b 0x9949 +0xe95c 0x9945 +0xe95d 0x9950 +0xe95e 0x994b +0xe95f 0x9951 +0xe960 0x9952 +0xe961 0x994c +0xe962 0x9955 +0xe963 0x9997 +0xe964 0x9998 +0xe965 0x99a5 +0xe966 0x99ad +0xe967 0x99ae +0xe968 0x99bc +0xe969 0x99df +0xe96a 0x99db +0xe96b 0x99dd +0xe96c 0x99d8 +0xe96d 0x99d1 +0xe96e 0x99ed +0xe96f 0x99ee +0xe970 0x99f1 +0xe971 0x99f2 +0xe972 0x99fb +0xe973 0x99f8 +0xe974 0x9a01 +0xe975 0x9a0f +0xe976 0x9a05 +0xe977 0x99e2 +0xe978 0x9a19 +0xe979 0x9a2b +0xe97a 0x9a37 +0xe97b 0x9a45 +0xe97c 0x9a42 +0xe97d 0x9a40 +0xe97e 0x9a43 +0xe980 0x9a3e +0xe981 0x9a55 +0xe982 0x9a4d +0xe983 0x9a5b +0xe984 0x9a57 +0xe985 0x9a5f +0xe986 0x9a62 +0xe987 0x9a65 +0xe988 0x9a64 +0xe989 0x9a69 +0xe98a 0x9a6b +0xe98b 0x9a6a +0xe98c 0x9aad +0xe98d 0x9ab0 +0xe98e 0x9abc +0xe98f 0x9ac0 +0xe990 0x9acf +0xe991 0x9ad1 +0xe992 0x9ad3 +0xe993 0x9ad4 +0xe994 0x9ade +0xe995 0x9adf +0xe996 0x9ae2 +0xe997 0x9ae3 +0xe998 0x9ae6 +0xe999 0x9aef +0xe99a 0x9aeb +0xe99b 0x9aee +0xe99c 0x9af4 +0xe99d 0x9af1 +0xe99e 0x9af7 +0xe99f 0x9afb +0xe9a0 0x9b06 +0xe9a1 0x9b18 +0xe9a2 0x9b1a +0xe9a3 0x9b1f +0xe9a4 0x9b22 +0xe9a5 0x9b23 +0xe9a6 0x9b25 +0xe9a7 0x9b27 +0xe9a8 0x9b28 +0xe9a9 0x9b29 +0xe9aa 0x9b2a +0xe9ab 0x9b2e +0xe9ac 0x9b2f +0xe9ad 0x9b32 +0xe9ae 0x9b44 +0xe9af 0x9b43 +0xe9b0 0x9b4f +0xe9b1 0x9b4d +0xe9b2 0x9b4e +0xe9b3 0x9b51 +0xe9b4 0x9b58 +0xe9b5 0x9b74 +0xe9b6 0x9b93 +0xe9b7 0x9b83 +0xe9b8 0x9b91 +0xe9b9 0x9b96 +0xe9ba 0x9b97 +0xe9bb 0x9b9f +0xe9bc 0x9ba0 +0xe9bd 0x9ba8 +0xe9be 0x9bb4 +0xe9bf 0x9bc0 +0xe9c0 0x9bca +0xe9c1 0x9bb9 +0xe9c2 0x9bc6 +0xe9c3 0x9bcf +0xe9c4 0x9bd1 +0xe9c5 0x9bd2 +0xe9c6 0x9be3 +0xe9c7 0x9be2 +0xe9c8 0x9be4 +0xe9c9 0x9bd4 +0xe9ca 0x9be1 +0xe9cb 0x9c3a +0xe9cc 0x9bf2 +0xe9cd 0x9bf1 +0xe9ce 0x9bf0 +0xe9cf 0x9c15 +0xe9d0 0x9c14 +0xe9d1 0x9c09 +0xe9d2 0x9c13 +0xe9d3 0x9c0c +0xe9d4 0x9c06 +0xe9d5 0x9c08 +0xe9d6 0x9c12 +0xe9d7 0x9c0a +0xe9d8 0x9c04 +0xe9d9 0x9c2e +0xe9da 0x9c1b +0xe9db 0x9c25 +0xe9dc 0x9c24 +0xe9dd 0x9c21 +0xe9de 0x9c30 +0xe9df 0x9c47 +0xe9e0 0x9c32 +0xe9e1 0x9c46 +0xe9e2 0x9c3e +0xe9e3 0x9c5a +0xe9e4 0x9c60 +0xe9e5 0x9c67 +0xe9e6 0x9c76 +0xe9e7 0x9c78 +0xe9e8 0x9ce7 +0xe9e9 0x9cec +0xe9ea 0x9cf0 +0xe9eb 0x9d09 +0xe9ec 0x9d08 +0xe9ed 0x9ceb +0xe9ee 0x9d03 +0xe9ef 0x9d06 +0xe9f0 0x9d2a +0xe9f1 0x9d26 +0xe9f2 0x9daf +0xe9f3 0x9d23 +0xe9f4 0x9d1f +0xe9f5 0x9d44 +0xe9f6 0x9d15 +0xe9f7 0x9d12 +0xe9f8 0x9d41 +0xe9f9 0x9d3f +0xe9fa 0x9d3e +0xe9fb 0x9d46 +0xe9fc 0x9d48 +0xea40 0x9d5d +0xea41 0x9d5e +0xea42 0x9d64 +0xea43 0x9d51 +0xea44 0x9d50 +0xea45 0x9d59 +0xea46 0x9d72 +0xea47 0x9d89 +0xea48 0x9d87 +0xea49 0x9dab +0xea4a 0x9d6f +0xea4b 0x9d7a +0xea4c 0x9d9a +0xea4d 0x9da4 +0xea4e 0x9da9 +0xea4f 0x9db2 +0xea50 0x9dc4 +0xea51 0x9dc1 +0xea52 0x9dbb +0xea53 0x9db8 +0xea54 0x9dba +0xea55 0x9dc6 +0xea56 0x9dcf +0xea57 0x9dc2 +0xea58 0x9dd9 +0xea59 0x9dd3 +0xea5a 0x9df8 +0xea5b 0x9de6 +0xea5c 0x9ded +0xea5d 0x9def +0xea5e 0x9dfd +0xea5f 0x9e1a +0xea60 0x9e1b +0xea61 0x9e1e +0xea62 0x9e75 +0xea63 0x9e79 +0xea64 0x9e7d +0xea65 0x9e81 +0xea66 0x9e88 +0xea67 0x9e8b +0xea68 0x9e8c +0xea69 0x9e92 +0xea6a 0x9e95 +0xea6b 0x9e91 +0xea6c 0x9e9d +0xea6d 0x9ea5 +0xea6e 0x9ea9 +0xea6f 0x9eb8 +0xea70 0x9eaa +0xea71 0x9ead +0xea72 0x9761 +0xea73 0x9ecc +0xea74 0x9ece +0xea75 0x9ecf +0xea76 0x9ed0 +0xea77 0x9ed4 +0xea78 0x9edc +0xea79 0x9ede +0xea7a 0x9edd +0xea7b 0x9ee0 +0xea7c 0x9ee5 +0xea7d 0x9ee8 +0xea7e 0x9eef +0xea80 0x9ef4 +0xea81 0x9ef6 +0xea82 0x9ef7 +0xea83 0x9ef9 +0xea84 0x9efb +0xea85 0x9efc +0xea86 0x9efd +0xea87 0x9f07 +0xea88 0x9f08 +0xea89 0x76b7 +0xea8a 0x9f15 +0xea8b 0x9f21 +0xea8c 0x9f2c +0xea8d 0x9f3e +0xea8e 0x9f4a +0xea8f 0x9f52 +0xea90 0x9f54 +0xea91 0x9f63 +0xea92 0x9f5f +0xea93 0x9f60 +0xea94 0x9f61 +0xea95 0x9f66 +0xea96 0x9f67 +0xea97 0x9f6c +0xea98 0x9f6a +0xea99 0x9f77 +0xea9a 0x9f72 +0xea9b 0x9f76 +0xea9c 0x9f95 +0xea9d 0x9f9c +0xea9e 0x9fa0 +0xea9f 0x582f +0xeaa0 0x69c7 +0xeaa1 0x9059 +0xeaa2 0x7464 +0xeaa3 0x51dc +0xeaa4 0x7199 +0xed40 0x7e8a +0xed41 0x891c +0xed42 0x9348 +0xed43 0x9288 +0xed44 0x84dc +0xed45 0x4fc9 +0xed46 0x70bb +0xed47 0x6631 +0xed48 0x68c8 +0xed49 0x92f9 +0xed4a 0x66fb +0xed4b 0x5f45 +0xed4c 0x4e28 +0xed4d 0x4ee1 +0xed4e 0x4efc +0xed4f 0x4f00 +0xed50 0x4f03 +0xed51 0x4f39 +0xed52 0x4f56 +0xed53 0x4f92 +0xed54 0x4f8a +0xed55 0x4f9a +0xed56 0x4f94 +0xed57 0x4fcd +0xed58 0x5040 +0xed59 0x5022 +0xed5a 0x4fff +0xed5b 0x501e +0xed5c 0x5046 +0xed5d 0x5070 +0xed5e 0x5042 +0xed5f 0x5094 +0xed60 0x50f4 +0xed61 0x50d8 +0xed62 0x514a +0xed63 0x5164 +0xed64 0x519d +0xed65 0x51be +0xed66 0x51ec +0xed67 0x5215 +0xed68 0x529c +0xed69 0x52a6 +0xed6a 0x52c0 +0xed6b 0x52db +0xed6c 0x5300 +0xed6d 0x5307 +0xed6e 0x5324 +0xed6f 0x5372 +0xed70 0x5393 +0xed71 0x53b2 +0xed72 0x53dd +0xed73 0xfa0e +0xed74 0x549c +0xed75 0x548a +0xed76 0x54a9 +0xed77 0x54ff +0xed78 0x5586 +0xed79 0x5759 +0xed7a 0x5765 +0xed7b 0x57ac +0xed7c 0x57c8 +0xed7d 0x57c7 +0xed7e 0xfa0f +0xed80 0xfa10 +0xed81 0x589e +0xed82 0x58b2 +0xed83 0x590b +0xed84 0x5953 +0xed85 0x595b +0xed86 0x595d +0xed87 0x5963 +0xed88 0x59a4 +0xed89 0x59ba +0xed8a 0x5b56 +0xed8b 0x5bc0 +0xed8c 0x752f +0xed8d 0x5bd8 +0xed8e 0x5bec +0xed8f 0x5c1e +0xed90 0x5ca6 +0xed91 0x5cba +0xed92 0x5cf5 +0xed93 0x5d27 +0xed94 0x5d53 +0xed95 0xfa11 +0xed96 0x5d42 +0xed97 0x5d6d +0xed98 0x5db8 +0xed99 0x5db9 +0xed9a 0x5dd0 +0xed9b 0x5f21 +0xed9c 0x5f34 +0xed9d 0x5f67 +0xed9e 0x5fb7 +0xed9f 0x5fde +0xeda0 0x605d +0xeda1 0x6085 +0xeda2 0x608a +0xeda3 0x60de +0xeda4 0x60d5 +0xeda5 0x6120 +0xeda6 0x60f2 +0xeda7 0x6111 +0xeda8 0x6137 +0xeda9 0x6130 +0xedaa 0x6198 +0xedab 0x6213 +0xedac 0x62a6 +0xedad 0x63f5 +0xedae 0x6460 +0xedaf 0x649d +0xedb0 0x64ce +0xedb1 0x654e +0xedb2 0x6600 +0xedb3 0x6615 +0xedb4 0x663b +0xedb5 0x6609 +0xedb6 0x662e +0xedb7 0x661e +0xedb8 0x6624 +0xedb9 0x6665 +0xedba 0x6657 +0xedbb 0x6659 +0xedbc 0xfa12 +0xedbd 0x6673 +0xedbe 0x6699 +0xedbf 0x66a0 +0xedc0 0x66b2 +0xedc1 0x66bf +0xedc2 0x66fa +0xedc3 0x670e +0xedc4 0xf929 +0xedc5 0x6766 +0xedc6 0x67bb +0xedc7 0x6852 +0xedc8 0x67c0 +0xedc9 0x6801 +0xedca 0x6844 +0xedcb 0x68cf +0xedcc 0xfa13 +0xedcd 0x6968 +0xedce 0xfa14 +0xedcf 0x6998 +0xedd0 0x69e2 +0xedd1 0x6a30 +0xedd2 0x6a6b +0xedd3 0x6a46 +0xedd4 0x6a73 +0xedd5 0x6a7e +0xedd6 0x6ae2 +0xedd7 0x6ae4 +0xedd8 0x6bd6 +0xedd9 0x6c3f +0xedda 0x6c5c +0xeddb 0x6c86 +0xeddc 0x6c6f +0xeddd 0x6cda +0xedde 0x6d04 +0xeddf 0x6d87 +0xede0 0x6d6f +0xede1 0x6d96 +0xede2 0x6dac +0xede3 0x6dcf +0xede4 0x6df8 +0xede5 0x6df2 +0xede6 0x6dfc +0xede7 0x6e39 +0xede8 0x6e5c +0xede9 0x6e27 +0xedea 0x6e3c +0xedeb 0x6ebf +0xedec 0x6f88 +0xeded 0x6fb5 +0xedee 0x6ff5 +0xedef 0x7005 +0xedf0 0x7007 +0xedf1 0x7028 +0xedf2 0x7085 +0xedf3 0x70ab +0xedf4 0x710f +0xedf5 0x7104 +0xedf6 0x715c +0xedf7 0x7146 +0xedf8 0x7147 +0xedf9 0xfa15 +0xedfa 0x71c1 +0xedfb 0x71fe +0xedfc 0x72b1 +0xee40 0x72be +0xee41 0x7324 +0xee42 0xfa16 +0xee43 0x7377 +0xee44 0x73bd +0xee45 0x73c9 +0xee46 0x73d6 +0xee47 0x73e3 +0xee48 0x73d2 +0xee49 0x7407 +0xee4a 0x73f5 +0xee4b 0x7426 +0xee4c 0x742a +0xee4d 0x7429 +0xee4e 0x742e +0xee4f 0x7462 +0xee50 0x7489 +0xee51 0x749f +0xee52 0x7501 +0xee53 0x756f +0xee54 0x7682 +0xee55 0x769c +0xee56 0x769e +0xee57 0x769b +0xee58 0x76a6 +0xee59 0xfa17 +0xee5a 0x7746 +0xee5b 0x52af +0xee5c 0x7821 +0xee5d 0x784e +0xee5e 0x7864 +0xee5f 0x787a +0xee60 0x7930 +0xee61 0xfa18 +0xee62 0xfa19 +0xee63 0xfa1a +0xee64 0x7994 +0xee65 0xfa1b +0xee66 0x799b +0xee67 0x7ad1 +0xee68 0x7ae7 +0xee69 0xfa1c +0xee6a 0x7aeb +0xee6b 0x7b9e +0xee6c 0xfa1d +0xee6d 0x7d48 +0xee6e 0x7d5c +0xee6f 0x7db7 +0xee70 0x7da0 +0xee71 0x7dd6 +0xee72 0x7e52 +0xee73 0x7f47 +0xee74 0x7fa1 +0xee75 0xfa1e +0xee76 0x8301 +0xee77 0x8362 +0xee78 0x837f +0xee79 0x83c7 +0xee7a 0x83f6 +0xee7b 0x8448 +0xee7c 0x84b4 +0xee7d 0x8553 +0xee7e 0x8559 +0xee80 0x856b +0xee81 0xfa1f +0xee82 0x85b0 +0xee83 0xfa20 +0xee84 0xfa21 +0xee85 0x8807 +0xee86 0x88f5 +0xee87 0x8a12 +0xee88 0x8a37 +0xee89 0x8a79 +0xee8a 0x8aa7 +0xee8b 0x8abe +0xee8c 0x8adf +0xee8d 0xfa22 +0xee8e 0x8af6 +0xee8f 0x8b53 +0xee90 0x8b7f +0xee91 0x8cf0 +0xee92 0x8cf4 +0xee93 0x8d12 +0xee94 0x8d76 +0xee95 0xfa23 +0xee96 0x8ecf +0xee97 0xfa24 +0xee98 0xfa25 +0xee99 0x9067 +0xee9a 0x90de +0xee9b 0xfa26 +0xee9c 0x9115 +0xee9d 0x9127 +0xee9e 0x91da +0xee9f 0x91d7 +0xeea0 0x91de +0xeea1 0x91ed +0xeea2 0x91ee +0xeea3 0x91e4 +0xeea4 0x91e5 +0xeea5 0x9206 +0xeea6 0x9210 +0xeea7 0x920a +0xeea8 0x923a +0xeea9 0x9240 +0xeeaa 0x923c +0xeeab 0x924e +0xeeac 0x9259 +0xeead 0x9251 +0xeeae 0x9239 +0xeeaf 0x9267 +0xeeb0 0x92a7 +0xeeb1 0x9277 +0xeeb2 0x9278 +0xeeb3 0x92e7 +0xeeb4 0x92d7 +0xeeb5 0x92d9 +0xeeb6 0x92d0 +0xeeb7 0xfa27 +0xeeb8 0x92d5 +0xeeb9 0x92e0 +0xeeba 0x92d3 +0xeebb 0x9325 +0xeebc 0x9321 +0xeebd 0x92fb +0xeebe 0xfa28 +0xeebf 0x931e +0xeec0 0x92ff +0xeec1 0x931d +0xeec2 0x9302 +0xeec3 0x9370 +0xeec4 0x9357 +0xeec5 0x93a4 +0xeec6 0x93c6 +0xeec7 0x93de +0xeec8 0x93f8 +0xeec9 0x9431 +0xeeca 0x9445 +0xeecb 0x9448 +0xeecc 0x9592 +0xeecd 0xf9dc +0xeece 0xfa29 +0xeecf 0x969d +0xeed0 0x96af +0xeed1 0x9733 +0xeed2 0x973b +0xeed3 0x9743 +0xeed4 0x974d +0xeed5 0x974f +0xeed6 0x9751 +0xeed7 0x9755 +0xeed8 0x9857 +0xeed9 0x9865 +0xeeda 0xfa2a +0xeedb 0xfa2b +0xeedc 0x9927 +0xeedd 0xfa2c +0xeede 0x999e +0xeedf 0x9a4e +0xeee0 0x9ad9 +0xeee1 0x9adc +0xeee2 0x9b75 +0xeee3 0x9b72 +0xeee4 0x9b8f +0xeee5 0x9bb1 +0xeee6 0x9bbb +0xeee7 0x9c00 +0xeee8 0x9d70 +0xeee9 0x9d6b +0xeeea 0xfa2d +0xeeeb 0x9e19 +0xeeec 0x9ed1 +0xeeef 0x2170 +0xeef0 0x2171 +0xeef1 0x2172 +0xeef2 0x2173 +0xeef3 0x2174 +0xeef4 0x2175 +0xeef5 0x2176 +0xeef6 0x2177 +0xeef7 0x2178 +0xeef8 0x2179 +0xeef9 0x3052 +0xeefa 0x00a6 +0xeefb 0xff07 +0xeefc 0xff02 +0xfa40 0x2170 +0xfa41 0x2171 +0xfa42 0x2172 +0xfa43 0x2173 +0xfa44 0x2174 +0xfa45 0x2175 +0xfa46 0x2176 +0xfa47 0x2177 +0xfa48 0x2178 +0xfa49 0x2179 +0xfa4a 0x2160 +0xfa4b 0x2161 +0xfa4c 0x2162 +0xfa4d 0x2163 +0xfa4e 0x2164 +0xfa4f 0x2165 +0xfa50 0x2166 +0xfa51 0x2167 +0xfa52 0x2168 +0xfa53 0x2169 +0xfa54 0x3052 +0xfa55 0x00a6 +0xfa56 0xff07 +0xfa57 0xff02 +0xfa58 0x3231 +0xfa59 0x2116 +0xfa5a 0x2121 +0xfa5b 0x306e +0xfa5c 0x7e8a +0xfa5d 0x891c +0xfa5e 0x9348 +0xfa5f 0x9288 +0xfa60 0x84dc +0xfa61 0x4fc9 +0xfa62 0x70bb +0xfa63 0x6631 +0xfa64 0x68c8 +0xfa65 0x92f9 +0xfa66 0x66fb +0xfa67 0x5f45 +0xfa68 0x4e28 +0xfa69 0x4ee1 +0xfa6a 0x4efc +0xfa6b 0x4f00 +0xfa6c 0x4f03 +0xfa6d 0x4f39 +0xfa6e 0x4f56 +0xfa6f 0x4f92 +0xfa70 0x4f8a +0xfa71 0x4f9a +0xfa72 0x4f94 +0xfa73 0x4fcd +0xfa74 0x5040 +0xfa75 0x5022 +0xfa76 0x4fff +0xfa77 0x501e +0xfa78 0x5046 +0xfa79 0x5070 +0xfa7a 0x5042 +0xfa7b 0x5094 +0xfa7c 0x50f4 +0xfa7d 0x50d8 +0xfa7e 0x514a +0xfa80 0x5164 +0xfa81 0x519d +0xfa82 0x51be +0xfa83 0x51ec +0xfa84 0x5215 +0xfa85 0x529c +0xfa86 0x52a6 +0xfa87 0x52c0 +0xfa88 0x52db +0xfa89 0x5300 +0xfa8a 0x5307 +0xfa8b 0x5324 +0xfa8c 0x5372 +0xfa8d 0x5393 +0xfa8e 0x53b2 +0xfa8f 0x53dd +0xfa90 0xfa0e +0xfa91 0x549c +0xfa92 0x548a +0xfa93 0x54a9 +0xfa94 0x54ff +0xfa95 0x5586 +0xfa96 0x5759 +0xfa97 0x5765 +0xfa98 0x57ac +0xfa99 0x57c8 +0xfa9a 0x57c7 +0xfa9b 0xfa0f +0xfa9c 0xfa10 +0xfa9d 0x589e +0xfa9e 0x58b2 +0xfa9f 0x590b +0xfaa0 0x5953 +0xfaa1 0x595b +0xfaa2 0x595d +0xfaa3 0x5963 +0xfaa4 0x59a4 +0xfaa5 0x59ba +0xfaa6 0x5b56 +0xfaa7 0x5bc0 +0xfaa8 0x752f +0xfaa9 0x5bd8 +0xfaaa 0x5bec +0xfaab 0x5c1e +0xfaac 0x5ca6 +0xfaad 0x5cba +0xfaae 0x5cf5 +0xfaaf 0x5d27 +0xfab0 0x5d53 +0xfab1 0xfa11 +0xfab2 0x5d42 +0xfab3 0x5d6d +0xfab4 0x5db8 +0xfab5 0x5db9 +0xfab6 0x5dd0 +0xfab7 0x5f21 +0xfab8 0x5f34 +0xfab9 0x5f67 +0xfaba 0x5fb7 +0xfabb 0x5fde +0xfabc 0x605d +0xfabd 0x6085 +0xfabe 0x608a +0xfabf 0x60de +0xfac0 0x60d5 +0xfac1 0x6120 +0xfac2 0x60f2 +0xfac3 0x6111 +0xfac4 0x6137 +0xfac5 0x6130 +0xfac6 0x6198 +0xfac7 0x6213 +0xfac8 0x62a6 +0xfac9 0x63f5 +0xfaca 0x6460 +0xfacb 0x649d +0xfacc 0x64ce +0xfacd 0x654e +0xface 0x6600 +0xfacf 0x6615 +0xfad0 0x663b +0xfad1 0x6609 +0xfad2 0x662e +0xfad3 0x661e +0xfad4 0x6624 +0xfad5 0x6665 +0xfad6 0x6657 +0xfad7 0x6659 +0xfad8 0xfa12 +0xfad9 0x6673 +0xfada 0x6699 +0xfadb 0x66a0 +0xfadc 0x66b2 +0xfadd 0x66bf +0xfade 0x66fa +0xfadf 0x670e +0xfae0 0xf929 +0xfae1 0x6766 +0xfae2 0x67bb +0xfae3 0x6852 +0xfae4 0x67c0 +0xfae5 0x6801 +0xfae6 0x6844 +0xfae7 0x68cf +0xfae8 0xfa13 +0xfae9 0x6968 +0xfaea 0xfa14 +0xfaeb 0x6998 +0xfaec 0x69e2 +0xfaed 0x6a30 +0xfaee 0x6a6b +0xfaef 0x6a46 +0xfaf0 0x6a73 +0xfaf1 0x6a7e +0xfaf2 0x6ae2 +0xfaf3 0x6ae4 +0xfaf4 0x6bd6 +0xfaf5 0x6c3f +0xfaf6 0x6c5c +0xfaf7 0x6c86 +0xfaf8 0x6c6f +0xfaf9 0x6cda +0xfafa 0x6d04 +0xfafb 0x6d87 +0xfafc 0x6d6f +0xfb40 0x6d96 +0xfb41 0x6dac +0xfb42 0x6dcf +0xfb43 0x6df8 +0xfb44 0x6df2 +0xfb45 0x6dfc +0xfb46 0x6e39 +0xfb47 0x6e5c +0xfb48 0x6e27 +0xfb49 0x6e3c +0xfb4a 0x6ebf +0xfb4b 0x6f88 +0xfb4c 0x6fb5 +0xfb4d 0x6ff5 +0xfb4e 0x7005 +0xfb4f 0x7007 +0xfb50 0x7028 +0xfb51 0x7085 +0xfb52 0x70ab +0xfb53 0x710f +0xfb54 0x7104 +0xfb55 0x715c +0xfb56 0x7146 +0xfb57 0x7147 +0xfb58 0xfa15 +0xfb59 0x71c1 +0xfb5a 0x71fe +0xfb5b 0x72b1 +0xfb5c 0x72be +0xfb5d 0x7324 +0xfb5e 0xfa16 +0xfb5f 0x7377 +0xfb60 0x73bd +0xfb61 0x73c9 +0xfb62 0x73d6 +0xfb63 0x73e3 +0xfb64 0x73d2 +0xfb65 0x7407 +0xfb66 0x73f5 +0xfb67 0x7426 +0xfb68 0x742a +0xfb69 0x7429 +0xfb6a 0x742e +0xfb6b 0x7462 +0xfb6c 0x7489 +0xfb6d 0x749f +0xfb6e 0x7501 +0xfb6f 0x756f +0xfb70 0x7682 +0xfb71 0x769c +0xfb72 0x769e +0xfb73 0x769b +0xfb74 0x76a6 +0xfb75 0xfa17 +0xfb76 0x7746 +0xfb77 0x52af +0xfb78 0x7821 +0xfb79 0x784e +0xfb7a 0x7864 +0xfb7b 0x787a +0xfb7c 0x7930 +0xfb7d 0xfa18 +0xfb7e 0xfa19 +0xfb80 0xfa1a +0xfb81 0x7994 +0xfb82 0xfa1b +0xfb83 0x799b +0xfb84 0x7ad1 +0xfb85 0x7ae7 +0xfb86 0xfa1c +0xfb87 0x7aeb +0xfb88 0x7b9e +0xfb89 0xfa1d +0xfb8a 0x7d48 +0xfb8b 0x7d5c +0xfb8c 0x7db7 +0xfb8d 0x7da0 +0xfb8e 0x7dd6 +0xfb8f 0x7e52 +0xfb90 0x7f47 +0xfb91 0x7fa1 +0xfb92 0xfa1e +0xfb93 0x8301 +0xfb94 0x8362 +0xfb95 0x837f +0xfb96 0x83c7 +0xfb97 0x83f6 +0xfb98 0x8448 +0xfb99 0x84b4 +0xfb9a 0x8553 +0xfb9b 0x8559 +0xfb9c 0x856b +0xfb9d 0xfa1f +0xfb9e 0x85b0 +0xfb9f 0xfa20 +0xfba0 0xfa21 +0xfba1 0x8807 +0xfba2 0x88f5 +0xfba3 0x8a12 +0xfba4 0x8a37 +0xfba5 0x8a79 +0xfba6 0x8aa7 +0xfba7 0x8abe +0xfba8 0x8adf +0xfba9 0xfa22 +0xfbaa 0x8af6 +0xfbab 0x8b53 +0xfbac 0x8b7f +0xfbad 0x8cf0 +0xfbae 0x8cf4 +0xfbaf 0x8d12 +0xfbb0 0x8d76 +0xfbb1 0xfa23 +0xfbb2 0x8ecf +0xfbb3 0xfa24 +0xfbb4 0xfa25 +0xfbb5 0x9067 +0xfbb6 0x90de +0xfbb7 0xfa26 +0xfbb8 0x9115 +0xfbb9 0x9127 +0xfbba 0x91da +0xfbbb 0x91d7 +0xfbbc 0x91de +0xfbbd 0x91ed +0xfbbe 0x91ee +0xfbbf 0x91e4 +0xfbc0 0x91e5 +0xfbc1 0x9206 +0xfbc2 0x9210 +0xfbc3 0x920a +0xfbc4 0x923a +0xfbc5 0x9240 +0xfbc6 0x923c +0xfbc7 0x924e +0xfbc8 0x9259 +0xfbc9 0x9251 +0xfbca 0x9239 +0xfbcb 0x9267 +0xfbcc 0x92a7 +0xfbcd 0x9277 +0xfbce 0x9278 +0xfbcf 0x92e7 +0xfbd0 0x92d7 +0xfbd1 0x92d9 +0xfbd2 0x92d0 +0xfbd3 0xfa27 +0xfbd4 0x92d5 +0xfbd5 0x92e0 +0xfbd6 0x92d3 +0xfbd7 0x9325 +0xfbd8 0x9321 +0xfbd9 0x92fb +0xfbda 0xfa28 +0xfbdb 0x931e +0xfbdc 0x92ff +0xfbdd 0x931d +0xfbde 0x9302 +0xfbdf 0x9370 +0xfbe0 0x9357 +0xfbe1 0x93a4 +0xfbe2 0x93c6 +0xfbe3 0x93de +0xfbe4 0x93f8 +0xfbe5 0x9431 +0xfbe6 0x9445 +0xfbe7 0x9448 +0xfbe8 0x9592 +0xfbe9 0xf9dc +0xfbea 0xfa29 +0xfbeb 0x969d +0xfbec 0x96af +0xfbed 0x9733 +0xfbee 0x973b +0xfbef 0x9743 +0xfbf0 0x974d +0xfbf1 0x974f +0xfbf2 0x9751 +0xfbf3 0x9755 +0xfbf4 0x9857 +0xfbf5 0x9865 +0xfbf6 0xfa2a +0xfbf7 0xfa2b +0xfbf8 0x9927 +0xfbf9 0xfa2c +0xfbfa 0x999e +0xfbfb 0x9a4e +0xfbfc 0x9ad9 +0xfc40 0x9adc +0xfc41 0x9b75 +0xfc42 0x9b72 +0xfc43 0x9b8f +0xfc44 0x9bb1 +0xfc45 0x9bbb +0xfc46 0x9c00 +0xfc47 0x9d70 +0xfc48 0x9d6b +0xfc49 0xfa2d +0xfc4a 0x9e19 +0xfc4b 0x9ed1 diff --git a/jdk/make/tools/CharsetMapping/PCK.nr b/jdk/make/tools/CharsetMapping/PCK.nr new file mode 100644 index 00000000000..a4731558acb --- /dev/null +++ b/jdk/make/tools/CharsetMapping/PCK.nr @@ -0,0 +1,398 @@ +0x8790 0x2252 +0x8791 0x2261 +0x8792 0x222b +0x8795 0x221a +0x8796 0x22a5 +0x8797 0x2220 +0x879a 0x2235 +0x879b 0x2229 +0x879c 0x222a +0xed40 0x7e8a +0xed41 0x891c +0xed42 0x9348 +0xed43 0x9288 +0xed44 0x84dc +0xed45 0x4fc9 +0xed46 0x70bb +0xed47 0x6631 +0xed48 0x68c8 +0xed49 0x92f9 +0xed4a 0x66fb +0xed4b 0x5f45 +0xed4c 0x4e28 +0xed4d 0x4ee1 +0xed4e 0x4efc +0xed4f 0x4f00 +0xed50 0x4f03 +0xed51 0x4f39 +0xed52 0x4f56 +0xed53 0x4f92 +0xed54 0x4f8a +0xed55 0x4f9a +0xed56 0x4f94 +0xed57 0x4fcd +0xed58 0x5040 +0xed59 0x5022 +0xed5a 0x4fff +0xed5b 0x501e +0xed5c 0x5046 +0xed5d 0x5070 +0xed5e 0x5042 +0xed5f 0x5094 +0xed60 0x50f4 +0xed61 0x50d8 +0xed62 0x514a +0xed63 0x5164 +0xed64 0x519d +0xed65 0x51be +0xed66 0x51ec +0xed67 0x5215 +0xed68 0x529c +0xed69 0x52a6 +0xed6a 0x52c0 +0xed6b 0x52db +0xed6c 0x5300 +0xed6d 0x5307 +0xed6e 0x5324 +0xed6f 0x5372 +0xed70 0x5393 +0xed71 0x53b2 +0xed72 0x53dd +0xed73 0xfa0e +0xed74 0x549c +0xed75 0x548a +0xed76 0x54a9 +0xed77 0x54ff +0xed78 0x5586 +0xed79 0x5759 +0xed7a 0x5765 +0xed7b 0x57ac +0xed7c 0x57c8 +0xed7d 0x57c7 +0xed7e 0xfa0f +0xed80 0xfa10 +0xed81 0x589e +0xed82 0x58b2 +0xed83 0x590b +0xed84 0x5953 +0xed85 0x595b +0xed86 0x595d +0xed87 0x5963 +0xed88 0x59a4 +0xed89 0x59ba +0xed8a 0x5b56 +0xed8b 0x5bc0 +0xed8c 0x752f +0xed8d 0x5bd8 +0xed8e 0x5bec +0xed8f 0x5c1e +0xed90 0x5ca6 +0xed91 0x5cba +0xed92 0x5cf5 +0xed93 0x5d27 +0xed94 0x5d53 +0xed95 0xfa11 +0xed96 0x5d42 +0xed97 0x5d6d +0xed98 0x5db8 +0xed99 0x5db9 +0xed9a 0x5dd0 +0xed9b 0x5f21 +0xed9c 0x5f34 +0xed9d 0x5f67 +0xed9e 0x5fb7 +0xed9f 0x5fde +0xeda0 0x605d +0xeda1 0x6085 +0xeda2 0x608a +0xeda3 0x60de +0xeda4 0x60d5 +0xeda5 0x6120 +0xeda6 0x60f2 +0xeda7 0x6111 +0xeda8 0x6137 +0xeda9 0x6130 +0xedaa 0x6198 +0xedab 0x6213 +0xedac 0x62a6 +0xedad 0x63f5 +0xedae 0x6460 +0xedaf 0x649d +0xedb0 0x64ce +0xedb1 0x654e +0xedb2 0x6600 +0xedb3 0x6615 +0xedb4 0x663b +0xedb5 0x6609 +0xedb6 0x662e +0xedb7 0x661e +0xedb8 0x6624 +0xedb9 0x6665 +0xedba 0x6657 +0xedbb 0x6659 +0xedbc 0xfa12 +0xedbd 0x6673 +0xedbe 0x6699 +0xedbf 0x66a0 +0xedc0 0x66b2 +0xedc1 0x66bf +0xedc2 0x66fa +0xedc3 0x670e +0xedc4 0xf929 +0xedc5 0x6766 +0xedc6 0x67bb +0xedc7 0x6852 +0xedc8 0x67c0 +0xedc9 0x6801 +0xedca 0x6844 +0xedcb 0x68cf +0xedcc 0xfa13 +0xedcd 0x6968 +0xedce 0xfa14 +0xedcf 0x6998 +0xedd0 0x69e2 +0xedd1 0x6a30 +0xedd2 0x6a6b +0xedd3 0x6a46 +0xedd4 0x6a73 +0xedd5 0x6a7e +0xedd6 0x6ae2 +0xedd7 0x6ae4 +0xedd8 0x6bd6 +0xedd9 0x6c3f +0xedda 0x6c5c +0xeddb 0x6c86 +0xeddc 0x6c6f +0xeddd 0x6cda +0xedde 0x6d04 +0xeddf 0x6d87 +0xede0 0x6d6f +0xede1 0x6d96 +0xede2 0x6dac +0xede3 0x6dcf +0xede4 0x6df8 +0xede5 0x6df2 +0xede6 0x6dfc +0xede7 0x6e39 +0xede8 0x6e5c +0xede9 0x6e27 +0xedea 0x6e3c +0xedeb 0x6ebf +0xedec 0x6f88 +0xeded 0x6fb5 +0xedee 0x6ff5 +0xedef 0x7005 +0xedf0 0x7007 +0xedf1 0x7028 +0xedf2 0x7085 +0xedf3 0x70ab +0xedf4 0x710f +0xedf5 0x7104 +0xedf6 0x715c +0xedf7 0x7146 +0xedf8 0x7147 +0xedf9 0xfa15 +0xedfa 0x71c1 +0xedfb 0x71fe +0xedfc 0x72b1 +0xee40 0x72be +0xee41 0x7324 +0xee42 0xfa16 +0xee43 0x7377 +0xee44 0x73bd +0xee45 0x73c9 +0xee46 0x73d6 +0xee47 0x73e3 +0xee48 0x73d2 +0xee49 0x7407 +0xee4a 0x73f5 +0xee4b 0x7426 +0xee4c 0x742a +0xee4d 0x7429 +0xee4e 0x742e +0xee4f 0x7462 +0xee50 0x7489 +0xee51 0x749f +0xee52 0x7501 +0xee53 0x756f +0xee54 0x7682 +0xee55 0x769c +0xee56 0x769e +0xee57 0x769b +0xee58 0x76a6 +0xee59 0xfa17 +0xee5a 0x7746 +0xee5b 0x52af +0xee5c 0x7821 +0xee5d 0x784e +0xee5e 0x7864 +0xee5f 0x787a +0xee60 0x7930 +0xee61 0xfa18 +0xee62 0xfa19 +0xee63 0xfa1a +0xee64 0x7994 +0xee65 0xfa1b +0xee66 0x799b +0xee67 0x7ad1 +0xee68 0x7ae7 +0xee69 0xfa1c +0xee6a 0x7aeb +0xee6b 0x7b9e +0xee6c 0xfa1d +0xee6d 0x7d48 +0xee6e 0x7d5c +0xee6f 0x7db7 +0xee70 0x7da0 +0xee71 0x7dd6 +0xee72 0x7e52 +0xee73 0x7f47 +0xee74 0x7fa1 +0xee75 0xfa1e +0xee76 0x8301 +0xee77 0x8362 +0xee78 0x837f +0xee79 0x83c7 +0xee7a 0x83f6 +0xee7b 0x8448 +0xee7c 0x84b4 +0xee7d 0x8553 +0xee7e 0x8559 +0xee80 0x856b +0xee81 0xfa1f +0xee82 0x85b0 +0xee83 0xfa20 +0xee84 0xfa21 +0xee85 0x8807 +0xee86 0x88f5 +0xee87 0x8a12 +0xee88 0x8a37 +0xee89 0x8a79 +0xee8a 0x8aa7 +0xee8b 0x8abe +0xee8c 0x8adf +0xee8d 0xfa22 +0xee8e 0x8af6 +0xee8f 0x8b53 +0xee90 0x8b7f +0xee91 0x8cf0 +0xee92 0x8cf4 +0xee93 0x8d12 +0xee94 0x8d76 +0xee95 0xfa23 +0xee96 0x8ecf +0xee97 0xfa24 +0xee98 0xfa25 +0xee99 0x9067 +0xee9a 0x90de +0xee9b 0xfa26 +0xee9c 0x9115 +0xee9d 0x9127 +0xee9e 0x91da +0xee9f 0x91d7 +0xeea0 0x91de +0xeea1 0x91ed +0xeea2 0x91ee +0xeea3 0x91e4 +0xeea4 0x91e5 +0xeea5 0x9206 +0xeea6 0x9210 +0xeea7 0x920a +0xeea8 0x923a +0xeea9 0x9240 +0xeeaa 0x923c +0xeeab 0x924e +0xeeac 0x9259 +0xeead 0x9251 +0xeeae 0x9239 +0xeeaf 0x9267 +0xeeb0 0x92a7 +0xeeb1 0x9277 +0xeeb2 0x9278 +0xeeb3 0x92e7 +0xeeb4 0x92d7 +0xeeb5 0x92d9 +0xeeb6 0x92d0 +0xeeb7 0xfa27 +0xeeb8 0x92d5 +0xeeb9 0x92e0 +0xeeba 0x92d3 +0xeebb 0x9325 +0xeebc 0x9321 +0xeebd 0x92fb +0xeebe 0xfa28 +0xeebf 0x931e +0xeec0 0x92ff +0xeec1 0x931d +0xeec2 0x9302 +0xeec3 0x9370 +0xeec4 0x9357 +0xeec5 0x93a4 +0xeec6 0x93c6 +0xeec7 0x93de +0xeec8 0x93f8 +0xeec9 0x9431 +0xeeca 0x9445 +0xeecb 0x9448 +0xeecc 0x9592 +0xeecd 0xf9dc +0xeece 0xfa29 +0xeecf 0x969d +0xeed0 0x96af +0xeed1 0x9733 +0xeed2 0x973b +0xeed3 0x9743 +0xeed4 0x974d +0xeed5 0x974f +0xeed6 0x9751 +0xeed7 0x9755 +0xeed8 0x9857 +0xeed9 0x9865 +0xeeda 0xfa2a +0xeedb 0xfa2b +0xeedc 0x9927 +0xeedd 0xfa2c +0xeede 0x999e +0xeedf 0x9a4e +0xeee0 0x9ad9 +0xeee1 0x9adc +0xeee2 0x9b75 +0xeee3 0x9b72 +0xeee4 0x9b8f +0xeee5 0x9bb1 +0xeee6 0x9bbb +0xeee7 0x9c00 +0xeee8 0x9d70 +0xeee9 0x9d6b +0xeeea 0xfa2d +0xeeeb 0x9e19 +0xeeec 0x9ed1 +0xeeef 0x2170 +0xeef0 0x2171 +0xeef1 0x2172 +0xeef2 0x2173 +0xeef3 0x2174 +0xeef4 0x2175 +0xeef5 0x2176 +0xeef6 0x2177 +0xeef7 0x2178 +0xeef8 0x2179 +0xeef9 0x3052 +0xeefa 0x00a6 +0xeefb 0xff07 +0xeefc 0xff02 +0xfa4a 0x2160 +0xfa4b 0x2161 +0xfa4c 0x2162 +0xfa4d 0x2163 +0xfa4e 0x2164 +0xfa4f 0x2165 +0xfa50 0x2166 +0xfa51 0x2167 +0xfa52 0x2168 +0xfa53 0x2169 +0xfa54 0x3052 +0xfa58 0x3231 +0xfa59 0x2116 +0xfa5a 0x2121 +0xfa5b 0x306e diff --git a/jdk/make/tools/CharsetMapping/SJIS.c2b b/jdk/make/tools/CharsetMapping/SJIS.c2b new file mode 100644 index 00000000000..e6bda8b3fe4 --- /dev/null +++ b/jdk/make/tools/CharsetMapping/SJIS.c2b @@ -0,0 +1,3 @@ +0x005c 0x00a5 +0x007e 0x203e + diff --git a/jdk/make/tools/CharsetMapping/SJIS.map b/jdk/make/tools/CharsetMapping/SJIS.map new file mode 100644 index 00000000000..84a7826f61a --- /dev/null +++ b/jdk/make/tools/CharsetMapping/SJIS.map @@ -0,0 +1,7079 @@ +# +# Generated from old SJIS implementation, which calcuats the +# sjis<->sjis (use Ken Lunde's algorithm) and then looks up +# the jis0208 mappings. The sjis->jis algorithm used in old +# SJIS assumes all input sjis are legal codepoints, so it +# also takes illegal sjis cp xx7f (treats it as xx80), such +# as 8a7f, and convert it to a dup jis/unicode cp. Those +# mappings are removed from this mapping. +# +0x0000 0x0000 +0x0001 0x0001 +0x0002 0x0002 +0x0003 0x0003 +0x0004 0x0004 +0x0005 0x0005 +0x0006 0x0006 +0x0007 0x0007 +0x0008 0x0008 +0x0009 0x0009 +0x000a 0x000a +0x000b 0x000b +0x000c 0x000c +0x000d 0x000d +0x000e 0x000e +0x000f 0x000f +0x0010 0x0010 +0x0011 0x0011 +0x0012 0x0012 +0x0013 0x0013 +0x0014 0x0014 +0x0015 0x0015 +0x0016 0x0016 +0x0017 0x0017 +0x0018 0x0018 +0x0019 0x0019 +0x001a 0x001a +0x001b 0x001b +0x001c 0x001c +0x001d 0x001d +0x001e 0x001e +0x001f 0x001f +0x0020 0x0020 +0x0021 0x0021 +0x0022 0x0022 +0x0023 0x0023 +0x0024 0x0024 +0x0025 0x0025 +0x0026 0x0026 +0x0027 0x0027 +0x0028 0x0028 +0x0029 0x0029 +0x002a 0x002a +0x002b 0x002b +0x002c 0x002c +0x002d 0x002d +0x002e 0x002e +0x002f 0x002f +0x0030 0x0030 +0x0031 0x0031 +0x0032 0x0032 +0x0033 0x0033 +0x0034 0x0034 +0x0035 0x0035 +0x0036 0x0036 +0x0037 0x0037 +0x0038 0x0038 +0x0039 0x0039 +0x003a 0x003a +0x003b 0x003b +0x003c 0x003c +0x003d 0x003d +0x003e 0x003e +0x003f 0x003f +0x0040 0x0040 +0x0041 0x0041 +0x0042 0x0042 +0x0043 0x0043 +0x0044 0x0044 +0x0045 0x0045 +0x0046 0x0046 +0x0047 0x0047 +0x0048 0x0048 +0x0049 0x0049 +0x004a 0x004a +0x004b 0x004b +0x004c 0x004c +0x004d 0x004d +0x004e 0x004e +0x004f 0x004f +0x0050 0x0050 +0x0051 0x0051 +0x0052 0x0052 +0x0053 0x0053 +0x0054 0x0054 +0x0055 0x0055 +0x0056 0x0056 +0x0057 0x0057 +0x0058 0x0058 +0x0059 0x0059 +0x005a 0x005a +0x005b 0x005b +0x005c 0x005c +0x005d 0x005d +0x005e 0x005e +0x005f 0x005f +0x0060 0x0060 +0x0061 0x0061 +0x0062 0x0062 +0x0063 0x0063 +0x0064 0x0064 +0x0065 0x0065 +0x0066 0x0066 +0x0067 0x0067 +0x0068 0x0068 +0x0069 0x0069 +0x006a 0x006a +0x006b 0x006b +0x006c 0x006c +0x006d 0x006d +0x006e 0x006e +0x006f 0x006f +0x0070 0x0070 +0x0071 0x0071 +0x0072 0x0072 +0x0073 0x0073 +0x0074 0x0074 +0x0075 0x0075 +0x0076 0x0076 +0x0077 0x0077 +0x0078 0x0078 +0x0079 0x0079 +0x007a 0x007a +0x007b 0x007b +0x007c 0x007c +0x007d 0x007d +0x007e 0x007e +0x007f 0x007f +0x00a1 0xff61 +0x00a2 0xff62 +0x00a3 0xff63 +0x00a4 0xff64 +0x00a5 0xff65 +0x00a6 0xff66 +0x00a7 0xff67 +0x00a8 0xff68 +0x00a9 0xff69 +0x00aa 0xff6a +0x00ab 0xff6b +0x00ac 0xff6c +0x00ad 0xff6d +0x00ae 0xff6e +0x00af 0xff6f +0x00b0 0xff70 +0x00b1 0xff71 +0x00b2 0xff72 +0x00b3 0xff73 +0x00b4 0xff74 +0x00b5 0xff75 +0x00b6 0xff76 +0x00b7 0xff77 +0x00b8 0xff78 +0x00b9 0xff79 +0x00ba 0xff7a +0x00bb 0xff7b +0x00bc 0xff7c +0x00bd 0xff7d +0x00be 0xff7e +0x00bf 0xff7f +0x00c0 0xff80 +0x00c1 0xff81 +0x00c2 0xff82 +0x00c3 0xff83 +0x00c4 0xff84 +0x00c5 0xff85 +0x00c6 0xff86 +0x00c7 0xff87 +0x00c8 0xff88 +0x00c9 0xff89 +0x00ca 0xff8a +0x00cb 0xff8b +0x00cc 0xff8c +0x00cd 0xff8d +0x00ce 0xff8e +0x00cf 0xff8f +0x00d0 0xff90 +0x00d1 0xff91 +0x00d2 0xff92 +0x00d3 0xff93 +0x00d4 0xff94 +0x00d5 0xff95 +0x00d6 0xff96 +0x00d7 0xff97 +0x00d8 0xff98 +0x00d9 0xff99 +0x00da 0xff9a +0x00db 0xff9b +0x00dc 0xff9c +0x00dd 0xff9d +0x00de 0xff9e +0x00df 0xff9f +0x8140 0x3000 +0x8141 0x3001 +0x8142 0x3002 +0x8143 0xff0c +0x8144 0xff0e +0x8145 0x30fb +0x8146 0xff1a +0x8147 0xff1b +0x8148 0xff1f +0x8149 0xff01 +0x814a 0x309b +0x814b 0x309c +0x814c 0x00b4 +0x814d 0xff40 +0x814e 0x00a8 +0x814f 0xff3e +0x8150 0xffe3 +0x8151 0xff3f +0x8152 0x30fd +0x8153 0x30fe +0x8154 0x309d +0x8155 0x309e +0x8156 0x3003 +0x8157 0x4edd +0x8158 0x3005 +0x8159 0x3006 +0x815a 0x3007 +0x815b 0x30fc +0x815c 0x2014 +0x815d 0x2010 +0x815e 0xff0f +0x815f 0xff3c +0x8160 0x301c +0x8161 0x2016 +0x8162 0xff5c +0x8163 0x2026 +0x8164 0x2025 +0x8165 0x2018 +0x8166 0x2019 +0x8167 0x201c +0x8168 0x201d +0x8169 0xff08 +0x816a 0xff09 +0x816b 0x3014 +0x816c 0x3015 +0x816d 0xff3b +0x816e 0xff3d +0x816f 0xff5b +0x8170 0xff5d +0x8171 0x3008 +0x8172 0x3009 +0x8173 0x300a +0x8174 0x300b +0x8175 0x300c +0x8176 0x300d +0x8177 0x300e +0x8178 0x300f +0x8179 0x3010 +0x817a 0x3011 +0x817b 0xff0b +0x817c 0x2212 +0x817d 0x00b1 +0x817e 0x00d7 +0x8180 0x00f7 +0x8181 0xff1d +0x8182 0x2260 +0x8183 0xff1c +0x8184 0xff1e +0x8185 0x2266 +0x8186 0x2267 +0x8187 0x221e +0x8188 0x2234 +0x8189 0x2642 +0x818a 0x2640 +0x818b 0x00b0 +0x818c 0x2032 +0x818d 0x2033 +0x818e 0x2103 +0x818f 0xffe5 +0x8190 0xff04 +0x8191 0x00a2 +0x8192 0x00a3 +0x8193 0xff05 +0x8194 0xff03 +0x8195 0xff06 +0x8196 0xff0a +0x8197 0xff20 +0x8198 0x00a7 +0x8199 0x2606 +0x819a 0x2605 +0x819b 0x25cb +0x819c 0x25cf +0x819d 0x25ce +0x819e 0x25c7 +0x819f 0x25c6 +0x81a0 0x25a1 +0x81a1 0x25a0 +0x81a2 0x25b3 +0x81a3 0x25b2 +0x81a4 0x25bd +0x81a5 0x25bc +0x81a6 0x203b +0x81a7 0x3012 +0x81a8 0x2192 +0x81a9 0x2190 +0x81aa 0x2191 +0x81ab 0x2193 +0x81ac 0x3013 +0x81b8 0x2208 +0x81b9 0x220b +0x81ba 0x2286 +0x81bb 0x2287 +0x81bc 0x2282 +0x81bd 0x2283 +0x81be 0x222a +0x81bf 0x2229 +0x81c8 0x2227 +0x81c9 0x2228 +0x81ca 0x00ac +0x81cb 0x21d2 +0x81cc 0x21d4 +0x81cd 0x2200 +0x81ce 0x2203 +0x81da 0x2220 +0x81db 0x22a5 +0x81dc 0x2312 +0x81dd 0x2202 +0x81de 0x2207 +0x81df 0x2261 +0x81e0 0x2252 +0x81e1 0x226a +0x81e2 0x226b +0x81e3 0x221a +0x81e4 0x223d +0x81e5 0x221d +0x81e6 0x2235 +0x81e7 0x222b +0x81e8 0x222c +0x81f0 0x212b +0x81f1 0x2030 +0x81f2 0x266f +0x81f3 0x266d +0x81f4 0x266a +0x81f5 0x2020 +0x81f6 0x2021 +0x81f7 0x00b6 +0x81fc 0x25ef +0x824f 0xff10 +0x8250 0xff11 +0x8251 0xff12 +0x8252 0xff13 +0x8253 0xff14 +0x8254 0xff15 +0x8255 0xff16 +0x8256 0xff17 +0x8257 0xff18 +0x8258 0xff19 +0x8260 0xff21 +0x8261 0xff22 +0x8262 0xff23 +0x8263 0xff24 +0x8264 0xff25 +0x8265 0xff26 +0x8266 0xff27 +0x8267 0xff28 +0x8268 0xff29 +0x8269 0xff2a +0x826a 0xff2b +0x826b 0xff2c +0x826c 0xff2d +0x826d 0xff2e +0x826e 0xff2f +0x826f 0xff30 +0x8270 0xff31 +0x8271 0xff32 +0x8272 0xff33 +0x8273 0xff34 +0x8274 0xff35 +0x8275 0xff36 +0x8276 0xff37 +0x8277 0xff38 +0x8278 0xff39 +0x8279 0xff3a +0x8281 0xff41 +0x8282 0xff42 +0x8283 0xff43 +0x8284 0xff44 +0x8285 0xff45 +0x8286 0xff46 +0x8287 0xff47 +0x8288 0xff48 +0x8289 0xff49 +0x828a 0xff4a +0x828b 0xff4b +0x828c 0xff4c +0x828d 0xff4d +0x828e 0xff4e +0x828f 0xff4f +0x8290 0xff50 +0x8291 0xff51 +0x8292 0xff52 +0x8293 0xff53 +0x8294 0xff54 +0x8295 0xff55 +0x8296 0xff56 +0x8297 0xff57 +0x8298 0xff58 +0x8299 0xff59 +0x829a 0xff5a +0x829f 0x3041 +0x82a0 0x3042 +0x82a1 0x3043 +0x82a2 0x3044 +0x82a3 0x3045 +0x82a4 0x3046 +0x82a5 0x3047 +0x82a6 0x3048 +0x82a7 0x3049 +0x82a8 0x304a +0x82a9 0x304b +0x82aa 0x304c +0x82ab 0x304d +0x82ac 0x304e +0x82ad 0x304f +0x82ae 0x3050 +0x82af 0x3051 +0x82b0 0x3052 +0x82b1 0x3053 +0x82b2 0x3054 +0x82b3 0x3055 +0x82b4 0x3056 +0x82b5 0x3057 +0x82b6 0x3058 +0x82b7 0x3059 +0x82b8 0x305a +0x82b9 0x305b +0x82ba 0x305c +0x82bb 0x305d +0x82bc 0x305e +0x82bd 0x305f +0x82be 0x3060 +0x82bf 0x3061 +0x82c0 0x3062 +0x82c1 0x3063 +0x82c2 0x3064 +0x82c3 0x3065 +0x82c4 0x3066 +0x82c5 0x3067 +0x82c6 0x3068 +0x82c7 0x3069 +0x82c8 0x306a +0x82c9 0x306b +0x82ca 0x306c +0x82cb 0x306d +0x82cc 0x306e +0x82cd 0x306f +0x82ce 0x3070 +0x82cf 0x3071 +0x82d0 0x3072 +0x82d1 0x3073 +0x82d2 0x3074 +0x82d3 0x3075 +0x82d4 0x3076 +0x82d5 0x3077 +0x82d6 0x3078 +0x82d7 0x3079 +0x82d8 0x307a +0x82d9 0x307b +0x82da 0x307c +0x82db 0x307d +0x82dc 0x307e +0x82dd 0x307f +0x82de 0x3080 +0x82df 0x3081 +0x82e0 0x3082 +0x82e1 0x3083 +0x82e2 0x3084 +0x82e3 0x3085 +0x82e4 0x3086 +0x82e5 0x3087 +0x82e6 0x3088 +0x82e7 0x3089 +0x82e8 0x308a +0x82e9 0x308b +0x82ea 0x308c +0x82eb 0x308d +0x82ec 0x308e +0x82ed 0x308f +0x82ee 0x3090 +0x82ef 0x3091 +0x82f0 0x3092 +0x82f1 0x3093 +0x8340 0x30a1 +0x8341 0x30a2 +0x8342 0x30a3 +0x8343 0x30a4 +0x8344 0x30a5 +0x8345 0x30a6 +0x8346 0x30a7 +0x8347 0x30a8 +0x8348 0x30a9 +0x8349 0x30aa +0x834a 0x30ab +0x834b 0x30ac +0x834c 0x30ad +0x834d 0x30ae +0x834e 0x30af +0x834f 0x30b0 +0x8350 0x30b1 +0x8351 0x30b2 +0x8352 0x30b3 +0x8353 0x30b4 +0x8354 0x30b5 +0x8355 0x30b6 +0x8356 0x30b7 +0x8357 0x30b8 +0x8358 0x30b9 +0x8359 0x30ba +0x835a 0x30bb +0x835b 0x30bc +0x835c 0x30bd +0x835d 0x30be +0x835e 0x30bf +0x835f 0x30c0 +0x8360 0x30c1 +0x8361 0x30c2 +0x8362 0x30c3 +0x8363 0x30c4 +0x8364 0x30c5 +0x8365 0x30c6 +0x8366 0x30c7 +0x8367 0x30c8 +0x8368 0x30c9 +0x8369 0x30ca +0x836a 0x30cb +0x836b 0x30cc +0x836c 0x30cd +0x836d 0x30ce +0x836e 0x30cf +0x836f 0x30d0 +0x8370 0x30d1 +0x8371 0x30d2 +0x8372 0x30d3 +0x8373 0x30d4 +0x8374 0x30d5 +0x8375 0x30d6 +0x8376 0x30d7 +0x8377 0x30d8 +0x8378 0x30d9 +0x8379 0x30da +0x837a 0x30db +0x837b 0x30dc +0x837c 0x30dd +0x837d 0x30de +0x837e 0x30df +0x8380 0x30e0 +0x8381 0x30e1 +0x8382 0x30e2 +0x8383 0x30e3 +0x8384 0x30e4 +0x8385 0x30e5 +0x8386 0x30e6 +0x8387 0x30e7 +0x8388 0x30e8 +0x8389 0x30e9 +0x838a 0x30ea +0x838b 0x30eb +0x838c 0x30ec +0x838d 0x30ed +0x838e 0x30ee +0x838f 0x30ef +0x8390 0x30f0 +0x8391 0x30f1 +0x8392 0x30f2 +0x8393 0x30f3 +0x8394 0x30f4 +0x8395 0x30f5 +0x8396 0x30f6 +0x839f 0x0391 +0x83a0 0x0392 +0x83a1 0x0393 +0x83a2 0x0394 +0x83a3 0x0395 +0x83a4 0x0396 +0x83a5 0x0397 +0x83a6 0x0398 +0x83a7 0x0399 +0x83a8 0x039a +0x83a9 0x039b +0x83aa 0x039c +0x83ab 0x039d +0x83ac 0x039e +0x83ad 0x039f +0x83ae 0x03a0 +0x83af 0x03a1 +0x83b0 0x03a3 +0x83b1 0x03a4 +0x83b2 0x03a5 +0x83b3 0x03a6 +0x83b4 0x03a7 +0x83b5 0x03a8 +0x83b6 0x03a9 +0x83bf 0x03b1 +0x83c0 0x03b2 +0x83c1 0x03b3 +0x83c2 0x03b4 +0x83c3 0x03b5 +0x83c4 0x03b6 +0x83c5 0x03b7 +0x83c6 0x03b8 +0x83c7 0x03b9 +0x83c8 0x03ba +0x83c9 0x03bb +0x83ca 0x03bc +0x83cb 0x03bd +0x83cc 0x03be +0x83cd 0x03bf +0x83ce 0x03c0 +0x83cf 0x03c1 +0x83d0 0x03c3 +0x83d1 0x03c4 +0x83d2 0x03c5 +0x83d3 0x03c6 +0x83d4 0x03c7 +0x83d5 0x03c8 +0x83d6 0x03c9 +0x8440 0x0410 +0x8441 0x0411 +0x8442 0x0412 +0x8443 0x0413 +0x8444 0x0414 +0x8445 0x0415 +0x8446 0x0401 +0x8447 0x0416 +0x8448 0x0417 +0x8449 0x0418 +0x844a 0x0419 +0x844b 0x041a +0x844c 0x041b +0x844d 0x041c +0x844e 0x041d +0x844f 0x041e +0x8450 0x041f +0x8451 0x0420 +0x8452 0x0421 +0x8453 0x0422 +0x8454 0x0423 +0x8455 0x0424 +0x8456 0x0425 +0x8457 0x0426 +0x8458 0x0427 +0x8459 0x0428 +0x845a 0x0429 +0x845b 0x042a +0x845c 0x042b +0x845d 0x042c +0x845e 0x042d +0x845f 0x042e +0x8460 0x042f +0x8470 0x0430 +0x8471 0x0431 +0x8472 0x0432 +0x8473 0x0433 +0x8474 0x0434 +0x8475 0x0435 +0x8476 0x0451 +0x8477 0x0436 +0x8478 0x0437 +0x8479 0x0438 +0x847a 0x0439 +0x847b 0x043a +0x847c 0x043b +0x847d 0x043c +0x847e 0x043d +0x8480 0x043e +0x8481 0x043f +0x8482 0x0440 +0x8483 0x0441 +0x8484 0x0442 +0x8485 0x0443 +0x8486 0x0444 +0x8487 0x0445 +0x8488 0x0446 +0x8489 0x0447 +0x848a 0x0448 +0x848b 0x0449 +0x848c 0x044a +0x848d 0x044b +0x848e 0x044c +0x848f 0x044d +0x8490 0x044e +0x8491 0x044f +0x849f 0x2500 +0x84a0 0x2502 +0x84a1 0x250c +0x84a2 0x2510 +0x84a3 0x2518 +0x84a4 0x2514 +0x84a5 0x251c +0x84a6 0x252c +0x84a7 0x2524 +0x84a8 0x2534 +0x84a9 0x253c +0x84aa 0x2501 +0x84ab 0x2503 +0x84ac 0x250f +0x84ad 0x2513 +0x84ae 0x251b +0x84af 0x2517 +0x84b0 0x2523 +0x84b1 0x2533 +0x84b2 0x252b +0x84b3 0x253b +0x84b4 0x254b +0x84b5 0x2520 +0x84b6 0x252f +0x84b7 0x2528 +0x84b8 0x2537 +0x84b9 0x253f +0x84ba 0x251d +0x84bb 0x2530 +0x84bc 0x2525 +0x84bd 0x2538 +0x84be 0x2542 +0x889f 0x4e9c +0x88a0 0x5516 +0x88a1 0x5a03 +0x88a2 0x963f +0x88a3 0x54c0 +0x88a4 0x611b +0x88a5 0x6328 +0x88a6 0x59f6 +0x88a7 0x9022 +0x88a8 0x8475 +0x88a9 0x831c +0x88aa 0x7a50 +0x88ab 0x60aa +0x88ac 0x63e1 +0x88ad 0x6e25 +0x88ae 0x65ed +0x88af 0x8466 +0x88b0 0x82a6 +0x88b1 0x9bf5 +0x88b2 0x6893 +0x88b3 0x5727 +0x88b4 0x65a1 +0x88b5 0x6271 +0x88b6 0x5b9b +0x88b7 0x59d0 +0x88b8 0x867b +0x88b9 0x98f4 +0x88ba 0x7d62 +0x88bb 0x7dbe +0x88bc 0x9b8e +0x88bd 0x6216 +0x88be 0x7c9f +0x88bf 0x88b7 +0x88c0 0x5b89 +0x88c1 0x5eb5 +0x88c2 0x6309 +0x88c3 0x6697 +0x88c4 0x6848 +0x88c5 0x95c7 +0x88c6 0x978d +0x88c7 0x674f +0x88c8 0x4ee5 +0x88c9 0x4f0a +0x88ca 0x4f4d +0x88cb 0x4f9d +0x88cc 0x5049 +0x88cd 0x56f2 +0x88ce 0x5937 +0x88cf 0x59d4 +0x88d0 0x5a01 +0x88d1 0x5c09 +0x88d2 0x60df +0x88d3 0x610f +0x88d4 0x6170 +0x88d5 0x6613 +0x88d6 0x6905 +0x88d7 0x70ba +0x88d8 0x754f +0x88d9 0x7570 +0x88da 0x79fb +0x88db 0x7dad +0x88dc 0x7def +0x88dd 0x80c3 +0x88de 0x840e +0x88df 0x8863 +0x88e0 0x8b02 +0x88e1 0x9055 +0x88e2 0x907a +0x88e3 0x533b +0x88e4 0x4e95 +0x88e5 0x4ea5 +0x88e6 0x57df +0x88e7 0x80b2 +0x88e8 0x90c1 +0x88e9 0x78ef +0x88ea 0x4e00 +0x88eb 0x58f1 +0x88ec 0x6ea2 +0x88ed 0x9038 +0x88ee 0x7a32 +0x88ef 0x8328 +0x88f0 0x828b +0x88f1 0x9c2f +0x88f2 0x5141 +0x88f3 0x5370 +0x88f4 0x54bd +0x88f5 0x54e1 +0x88f6 0x56e0 +0x88f7 0x59fb +0x88f8 0x5f15 +0x88f9 0x98f2 +0x88fa 0x6deb +0x88fb 0x80e4 +0x88fc 0x852d +0x8940 0x9662 +0x8941 0x9670 +0x8942 0x96a0 +0x8943 0x97fb +0x8944 0x540b +0x8945 0x53f3 +0x8946 0x5b87 +0x8947 0x70cf +0x8948 0x7fbd +0x8949 0x8fc2 +0x894a 0x96e8 +0x894b 0x536f +0x894c 0x9d5c +0x894d 0x7aba +0x894e 0x4e11 +0x894f 0x7893 +0x8950 0x81fc +0x8951 0x6e26 +0x8952 0x5618 +0x8953 0x5504 +0x8954 0x6b1d +0x8955 0x851a +0x8956 0x9c3b +0x8957 0x59e5 +0x8958 0x53a9 +0x8959 0x6d66 +0x895a 0x74dc +0x895b 0x958f +0x895c 0x5642 +0x895d 0x4e91 +0x895e 0x904b +0x895f 0x96f2 +0x8960 0x834f +0x8961 0x990c +0x8962 0x53e1 +0x8963 0x55b6 +0x8964 0x5b30 +0x8965 0x5f71 +0x8966 0x6620 +0x8967 0x66f3 +0x8968 0x6804 +0x8969 0x6c38 +0x896a 0x6cf3 +0x896b 0x6d29 +0x896c 0x745b +0x896d 0x76c8 +0x896e 0x7a4e +0x896f 0x9834 +0x8970 0x82f1 +0x8971 0x885b +0x8972 0x8a60 +0x8973 0x92ed +0x8974 0x6db2 +0x8975 0x75ab +0x8976 0x76ca +0x8977 0x99c5 +0x8978 0x60a6 +0x8979 0x8b01 +0x897a 0x8d8a +0x897b 0x95b2 +0x897c 0x698e +0x897d 0x53ad +0x897e 0x5186 +0x8980 0x5712 +0x8981 0x5830 +0x8982 0x5944 +0x8983 0x5bb4 +0x8984 0x5ef6 +0x8985 0x6028 +0x8986 0x63a9 +0x8987 0x63f4 +0x8988 0x6cbf +0x8989 0x6f14 +0x898a 0x708e +0x898b 0x7114 +0x898c 0x7159 +0x898d 0x71d5 +0x898e 0x733f +0x898f 0x7e01 +0x8990 0x8276 +0x8991 0x82d1 +0x8992 0x8597 +0x8993 0x9060 +0x8994 0x925b +0x8995 0x9d1b +0x8996 0x5869 +0x8997 0x65bc +0x8998 0x6c5a +0x8999 0x7525 +0x899a 0x51f9 +0x899b 0x592e +0x899c 0x5965 +0x899d 0x5f80 +0x899e 0x5fdc +0x899f 0x62bc +0x89a0 0x65fa +0x89a1 0x6a2a +0x89a2 0x6b27 +0x89a3 0x6bb4 +0x89a4 0x738b +0x89a5 0x7fc1 +0x89a6 0x8956 +0x89a7 0x9d2c +0x89a8 0x9d0e +0x89a9 0x9ec4 +0x89aa 0x5ca1 +0x89ab 0x6c96 +0x89ac 0x837b +0x89ad 0x5104 +0x89ae 0x5c4b +0x89af 0x61b6 +0x89b0 0x81c6 +0x89b1 0x6876 +0x89b2 0x7261 +0x89b3 0x4e59 +0x89b4 0x4ffa +0x89b5 0x5378 +0x89b6 0x6069 +0x89b7 0x6e29 +0x89b8 0x7a4f +0x89b9 0x97f3 +0x89ba 0x4e0b +0x89bb 0x5316 +0x89bc 0x4eee +0x89bd 0x4f55 +0x89be 0x4f3d +0x89bf 0x4fa1 +0x89c0 0x4f73 +0x89c1 0x52a0 +0x89c2 0x53ef +0x89c3 0x5609 +0x89c4 0x590f +0x89c5 0x5ac1 +0x89c6 0x5bb6 +0x89c7 0x5be1 +0x89c8 0x79d1 +0x89c9 0x6687 +0x89ca 0x679c +0x89cb 0x67b6 +0x89cc 0x6b4c +0x89cd 0x6cb3 +0x89ce 0x706b +0x89cf 0x73c2 +0x89d0 0x798d +0x89d1 0x79be +0x89d2 0x7a3c +0x89d3 0x7b87 +0x89d4 0x82b1 +0x89d5 0x82db +0x89d6 0x8304 +0x89d7 0x8377 +0x89d8 0x83ef +0x89d9 0x83d3 +0x89da 0x8766 +0x89db 0x8ab2 +0x89dc 0x5629 +0x89dd 0x8ca8 +0x89de 0x8fe6 +0x89df 0x904e +0x89e0 0x971e +0x89e1 0x868a +0x89e2 0x4fc4 +0x89e3 0x5ce8 +0x89e4 0x6211 +0x89e5 0x7259 +0x89e6 0x753b +0x89e7 0x81e5 +0x89e8 0x82bd +0x89e9 0x86fe +0x89ea 0x8cc0 +0x89eb 0x96c5 +0x89ec 0x9913 +0x89ed 0x99d5 +0x89ee 0x4ecb +0x89ef 0x4f1a +0x89f0 0x89e3 +0x89f1 0x56de +0x89f2 0x584a +0x89f3 0x58ca +0x89f4 0x5efb +0x89f5 0x5feb +0x89f6 0x602a +0x89f7 0x6094 +0x89f8 0x6062 +0x89f9 0x61d0 +0x89fa 0x6212 +0x89fb 0x62d0 +0x89fc 0x6539 +0x8a40 0x9b41 +0x8a41 0x6666 +0x8a42 0x68b0 +0x8a43 0x6d77 +0x8a44 0x7070 +0x8a45 0x754c +0x8a46 0x7686 +0x8a47 0x7d75 +0x8a48 0x82a5 +0x8a49 0x87f9 +0x8a4a 0x958b +0x8a4b 0x968e +0x8a4c 0x8c9d +0x8a4d 0x51f1 +0x8a4e 0x52be +0x8a4f 0x5916 +0x8a50 0x54b3 +0x8a51 0x5bb3 +0x8a52 0x5d16 +0x8a53 0x6168 +0x8a54 0x6982 +0x8a55 0x6daf +0x8a56 0x788d +0x8a57 0x84cb +0x8a58 0x8857 +0x8a59 0x8a72 +0x8a5a 0x93a7 +0x8a5b 0x9ab8 +0x8a5c 0x6d6c +0x8a5d 0x99a8 +0x8a5e 0x86d9 +0x8a5f 0x57a3 +0x8a60 0x67ff +0x8a61 0x86ce +0x8a62 0x920e +0x8a63 0x5283 +0x8a64 0x5687 +0x8a65 0x5404 +0x8a66 0x5ed3 +0x8a67 0x62e1 +0x8a68 0x64b9 +0x8a69 0x683c +0x8a6a 0x6838 +0x8a6b 0x6bbb +0x8a6c 0x7372 +0x8a6d 0x78ba +0x8a6e 0x7a6b +0x8a6f 0x899a +0x8a70 0x89d2 +0x8a71 0x8d6b +0x8a72 0x8f03 +0x8a73 0x90ed +0x8a74 0x95a3 +0x8a75 0x9694 +0x8a76 0x9769 +0x8a77 0x5b66 +0x8a78 0x5cb3 +0x8a79 0x697d +0x8a7a 0x984d +0x8a7b 0x984e +0x8a7c 0x639b +0x8a7d 0x7b20 +0x8a7e 0x6a2b +0x8a80 0x6a7f +0x8a81 0x68b6 +0x8a82 0x9c0d +0x8a83 0x6f5f +0x8a84 0x5272 +0x8a85 0x559d +0x8a86 0x6070 +0x8a87 0x62ec +0x8a88 0x6d3b +0x8a89 0x6e07 +0x8a8a 0x6ed1 +0x8a8b 0x845b +0x8a8c 0x8910 +0x8a8d 0x8f44 +0x8a8e 0x4e14 +0x8a8f 0x9c39 +0x8a90 0x53f6 +0x8a91 0x691b +0x8a92 0x6a3a +0x8a93 0x9784 +0x8a94 0x682a +0x8a95 0x515c +0x8a96 0x7ac3 +0x8a97 0x84b2 +0x8a98 0x91dc +0x8a99 0x938c +0x8a9a 0x565b +0x8a9b 0x9d28 +0x8a9c 0x6822 +0x8a9d 0x8305 +0x8a9e 0x8431 +0x8a9f 0x7ca5 +0x8aa0 0x5208 +0x8aa1 0x82c5 +0x8aa2 0x74e6 +0x8aa3 0x4e7e +0x8aa4 0x4f83 +0x8aa5 0x51a0 +0x8aa6 0x5bd2 +0x8aa7 0x520a +0x8aa8 0x52d8 +0x8aa9 0x52e7 +0x8aaa 0x5dfb +0x8aab 0x559a +0x8aac 0x582a +0x8aad 0x59e6 +0x8aae 0x5b8c +0x8aaf 0x5b98 +0x8ab0 0x5bdb +0x8ab1 0x5e72 +0x8ab2 0x5e79 +0x8ab3 0x60a3 +0x8ab4 0x611f +0x8ab5 0x6163 +0x8ab6 0x61be +0x8ab7 0x63db +0x8ab8 0x6562 +0x8ab9 0x67d1 +0x8aba 0x6853 +0x8abb 0x68fa +0x8abc 0x6b3e +0x8abd 0x6b53 +0x8abe 0x6c57 +0x8abf 0x6f22 +0x8ac0 0x6f97 +0x8ac1 0x6f45 +0x8ac2 0x74b0 +0x8ac3 0x7518 +0x8ac4 0x76e3 +0x8ac5 0x770b +0x8ac6 0x7aff +0x8ac7 0x7ba1 +0x8ac8 0x7c21 +0x8ac9 0x7de9 +0x8aca 0x7f36 +0x8acb 0x7ff0 +0x8acc 0x809d +0x8acd 0x8266 +0x8ace 0x839e +0x8acf 0x89b3 +0x8ad0 0x8acc +0x8ad1 0x8cab +0x8ad2 0x9084 +0x8ad3 0x9451 +0x8ad4 0x9593 +0x8ad5 0x9591 +0x8ad6 0x95a2 +0x8ad7 0x9665 +0x8ad8 0x97d3 +0x8ad9 0x9928 +0x8ada 0x8218 +0x8adb 0x4e38 +0x8adc 0x542b +0x8add 0x5cb8 +0x8ade 0x5dcc +0x8adf 0x73a9 +0x8ae0 0x764c +0x8ae1 0x773c +0x8ae2 0x5ca9 +0x8ae3 0x7feb +0x8ae4 0x8d0b +0x8ae5 0x96c1 +0x8ae6 0x9811 +0x8ae7 0x9854 +0x8ae8 0x9858 +0x8ae9 0x4f01 +0x8aea 0x4f0e +0x8aeb 0x5371 +0x8aec 0x559c +0x8aed 0x5668 +0x8aee 0x57fa +0x8aef 0x5947 +0x8af0 0x5b09 +0x8af1 0x5bc4 +0x8af2 0x5c90 +0x8af3 0x5e0c +0x8af4 0x5e7e +0x8af5 0x5fcc +0x8af6 0x63ee +0x8af7 0x673a +0x8af8 0x65d7 +0x8af9 0x65e2 +0x8afa 0x671f +0x8afb 0x68cb +0x8afc 0x68c4 +0x8b40 0x6a5f +0x8b41 0x5e30 +0x8b42 0x6bc5 +0x8b43 0x6c17 +0x8b44 0x6c7d +0x8b45 0x757f +0x8b46 0x7948 +0x8b47 0x5b63 +0x8b48 0x7a00 +0x8b49 0x7d00 +0x8b4a 0x5fbd +0x8b4b 0x898f +0x8b4c 0x8a18 +0x8b4d 0x8cb4 +0x8b4e 0x8d77 +0x8b4f 0x8ecc +0x8b50 0x8f1d +0x8b51 0x98e2 +0x8b52 0x9a0e +0x8b53 0x9b3c +0x8b54 0x4e80 +0x8b55 0x507d +0x8b56 0x5100 +0x8b57 0x5993 +0x8b58 0x5b9c +0x8b59 0x622f +0x8b5a 0x6280 +0x8b5b 0x64ec +0x8b5c 0x6b3a +0x8b5d 0x72a0 +0x8b5e 0x7591 +0x8b5f 0x7947 +0x8b60 0x7fa9 +0x8b61 0x87fb +0x8b62 0x8abc +0x8b63 0x8b70 +0x8b64 0x63ac +0x8b65 0x83ca +0x8b66 0x97a0 +0x8b67 0x5409 +0x8b68 0x5403 +0x8b69 0x55ab +0x8b6a 0x6854 +0x8b6b 0x6a58 +0x8b6c 0x8a70 +0x8b6d 0x7827 +0x8b6e 0x6775 +0x8b6f 0x9ecd +0x8b70 0x5374 +0x8b71 0x5ba2 +0x8b72 0x811a +0x8b73 0x8650 +0x8b74 0x9006 +0x8b75 0x4e18 +0x8b76 0x4e45 +0x8b77 0x4ec7 +0x8b78 0x4f11 +0x8b79 0x53ca +0x8b7a 0x5438 +0x8b7b 0x5bae +0x8b7c 0x5f13 +0x8b7d 0x6025 +0x8b7e 0x6551 +0x8b80 0x673d +0x8b81 0x6c42 +0x8b82 0x6c72 +0x8b83 0x6ce3 +0x8b84 0x7078 +0x8b85 0x7403 +0x8b86 0x7a76 +0x8b87 0x7aae +0x8b88 0x7b08 +0x8b89 0x7d1a +0x8b8a 0x7cfe +0x8b8b 0x7d66 +0x8b8c 0x65e7 +0x8b8d 0x725b +0x8b8e 0x53bb +0x8b8f 0x5c45 +0x8b90 0x5de8 +0x8b91 0x62d2 +0x8b92 0x62e0 +0x8b93 0x6319 +0x8b94 0x6e20 +0x8b95 0x865a +0x8b96 0x8a31 +0x8b97 0x8ddd +0x8b98 0x92f8 +0x8b99 0x6f01 +0x8b9a 0x79a6 +0x8b9b 0x9b5a +0x8b9c 0x4ea8 +0x8b9d 0x4eab +0x8b9e 0x4eac +0x8b9f 0x4f9b +0x8ba0 0x4fa0 +0x8ba1 0x50d1 +0x8ba2 0x5147 +0x8ba3 0x7af6 +0x8ba4 0x5171 +0x8ba5 0x51f6 +0x8ba6 0x5354 +0x8ba7 0x5321 +0x8ba8 0x537f +0x8ba9 0x53eb +0x8baa 0x55ac +0x8bab 0x5883 +0x8bac 0x5ce1 +0x8bad 0x5f37 +0x8bae 0x5f4a +0x8baf 0x602f +0x8bb0 0x6050 +0x8bb1 0x606d +0x8bb2 0x631f +0x8bb3 0x6559 +0x8bb4 0x6a4b +0x8bb5 0x6cc1 +0x8bb6 0x72c2 +0x8bb7 0x72ed +0x8bb8 0x77ef +0x8bb9 0x80f8 +0x8bba 0x8105 +0x8bbb 0x8208 +0x8bbc 0x854e +0x8bbd 0x90f7 +0x8bbe 0x93e1 +0x8bbf 0x97ff +0x8bc0 0x9957 +0x8bc1 0x9a5a +0x8bc2 0x4ef0 +0x8bc3 0x51dd +0x8bc4 0x5c2d +0x8bc5 0x6681 +0x8bc6 0x696d +0x8bc7 0x5c40 +0x8bc8 0x66f2 +0x8bc9 0x6975 +0x8bca 0x7389 +0x8bcb 0x6850 +0x8bcc 0x7c81 +0x8bcd 0x50c5 +0x8bce 0x52e4 +0x8bcf 0x5747 +0x8bd0 0x5dfe +0x8bd1 0x9326 +0x8bd2 0x65a4 +0x8bd3 0x6b23 +0x8bd4 0x6b3d +0x8bd5 0x7434 +0x8bd6 0x7981 +0x8bd7 0x79bd +0x8bd8 0x7b4b +0x8bd9 0x7dca +0x8bda 0x82b9 +0x8bdb 0x83cc +0x8bdc 0x887f +0x8bdd 0x895f +0x8bde 0x8b39 +0x8bdf 0x8fd1 +0x8be0 0x91d1 +0x8be1 0x541f +0x8be2 0x9280 +0x8be3 0x4e5d +0x8be4 0x5036 +0x8be5 0x53e5 +0x8be6 0x533a +0x8be7 0x72d7 +0x8be8 0x7396 +0x8be9 0x77e9 +0x8bea 0x82e6 +0x8beb 0x8eaf +0x8bec 0x99c6 +0x8bed 0x99c8 +0x8bee 0x99d2 +0x8bef 0x5177 +0x8bf0 0x611a +0x8bf1 0x865e +0x8bf2 0x55b0 +0x8bf3 0x7a7a +0x8bf4 0x5076 +0x8bf5 0x5bd3 +0x8bf6 0x9047 +0x8bf7 0x9685 +0x8bf8 0x4e32 +0x8bf9 0x6adb +0x8bfa 0x91e7 +0x8bfb 0x5c51 +0x8bfc 0x5c48 +0x8c40 0x6398 +0x8c41 0x7a9f +0x8c42 0x6c93 +0x8c43 0x9774 +0x8c44 0x8f61 +0x8c45 0x7aaa +0x8c46 0x718a +0x8c47 0x9688 +0x8c48 0x7c82 +0x8c49 0x6817 +0x8c4a 0x7e70 +0x8c4b 0x6851 +0x8c4c 0x936c +0x8c4d 0x52f2 +0x8c4e 0x541b +0x8c4f 0x85ab +0x8c50 0x8a13 +0x8c51 0x7fa4 +0x8c52 0x8ecd +0x8c53 0x90e1 +0x8c54 0x5366 +0x8c55 0x8888 +0x8c56 0x7941 +0x8c57 0x4fc2 +0x8c58 0x50be +0x8c59 0x5211 +0x8c5a 0x5144 +0x8c5b 0x5553 +0x8c5c 0x572d +0x8c5d 0x73ea +0x8c5e 0x578b +0x8c5f 0x5951 +0x8c60 0x5f62 +0x8c61 0x5f84 +0x8c62 0x6075 +0x8c63 0x6176 +0x8c64 0x6167 +0x8c65 0x61a9 +0x8c66 0x63b2 +0x8c67 0x643a +0x8c68 0x656c +0x8c69 0x666f +0x8c6a 0x6842 +0x8c6b 0x6e13 +0x8c6c 0x7566 +0x8c6d 0x7a3d +0x8c6e 0x7cfb +0x8c6f 0x7d4c +0x8c70 0x7d99 +0x8c71 0x7e4b +0x8c72 0x7f6b +0x8c73 0x830e +0x8c74 0x834a +0x8c75 0x86cd +0x8c76 0x8a08 +0x8c77 0x8a63 +0x8c78 0x8b66 +0x8c79 0x8efd +0x8c7a 0x981a +0x8c7b 0x9d8f +0x8c7c 0x82b8 +0x8c7d 0x8fce +0x8c7e 0x9be8 +0x8c80 0x5287 +0x8c81 0x621f +0x8c82 0x6483 +0x8c83 0x6fc0 +0x8c84 0x9699 +0x8c85 0x6841 +0x8c86 0x5091 +0x8c87 0x6b20 +0x8c88 0x6c7a +0x8c89 0x6f54 +0x8c8a 0x7a74 +0x8c8b 0x7d50 +0x8c8c 0x8840 +0x8c8d 0x8a23 +0x8c8e 0x6708 +0x8c8f 0x4ef6 +0x8c90 0x5039 +0x8c91 0x5026 +0x8c92 0x5065 +0x8c93 0x517c +0x8c94 0x5238 +0x8c95 0x5263 +0x8c96 0x55a7 +0x8c97 0x570f +0x8c98 0x5805 +0x8c99 0x5acc +0x8c9a 0x5efa +0x8c9b 0x61b2 +0x8c9c 0x61f8 +0x8c9d 0x62f3 +0x8c9e 0x6372 +0x8c9f 0x691c +0x8ca0 0x6a29 +0x8ca1 0x727d +0x8ca2 0x72ac +0x8ca3 0x732e +0x8ca4 0x7814 +0x8ca5 0x786f +0x8ca6 0x7d79 +0x8ca7 0x770c +0x8ca8 0x80a9 +0x8ca9 0x898b +0x8caa 0x8b19 +0x8cab 0x8ce2 +0x8cac 0x8ed2 +0x8cad 0x9063 +0x8cae 0x9375 +0x8caf 0x967a +0x8cb0 0x9855 +0x8cb1 0x9a13 +0x8cb2 0x9e78 +0x8cb3 0x5143 +0x8cb4 0x539f +0x8cb5 0x53b3 +0x8cb6 0x5e7b +0x8cb7 0x5f26 +0x8cb8 0x6e1b +0x8cb9 0x6e90 +0x8cba 0x7384 +0x8cbb 0x73fe +0x8cbc 0x7d43 +0x8cbd 0x8237 +0x8cbe 0x8a00 +0x8cbf 0x8afa +0x8cc0 0x9650 +0x8cc1 0x4e4e +0x8cc2 0x500b +0x8cc3 0x53e4 +0x8cc4 0x547c +0x8cc5 0x56fa +0x8cc6 0x59d1 +0x8cc7 0x5b64 +0x8cc8 0x5df1 +0x8cc9 0x5eab +0x8cca 0x5f27 +0x8ccb 0x6238 +0x8ccc 0x6545 +0x8ccd 0x67af +0x8cce 0x6e56 +0x8ccf 0x72d0 +0x8cd0 0x7cca +0x8cd1 0x88b4 +0x8cd2 0x80a1 +0x8cd3 0x80e1 +0x8cd4 0x83f0 +0x8cd5 0x864e +0x8cd6 0x8a87 +0x8cd7 0x8de8 +0x8cd8 0x9237 +0x8cd9 0x96c7 +0x8cda 0x9867 +0x8cdb 0x9f13 +0x8cdc 0x4e94 +0x8cdd 0x4e92 +0x8cde 0x4f0d +0x8cdf 0x5348 +0x8ce0 0x5449 +0x8ce1 0x543e +0x8ce2 0x5a2f +0x8ce3 0x5f8c +0x8ce4 0x5fa1 +0x8ce5 0x609f +0x8ce6 0x68a7 +0x8ce7 0x6a8e +0x8ce8 0x745a +0x8ce9 0x7881 +0x8cea 0x8a9e +0x8ceb 0x8aa4 +0x8cec 0x8b77 +0x8ced 0x9190 +0x8cee 0x4e5e +0x8cef 0x9bc9 +0x8cf0 0x4ea4 +0x8cf1 0x4f7c +0x8cf2 0x4faf +0x8cf3 0x5019 +0x8cf4 0x5016 +0x8cf5 0x5149 +0x8cf6 0x516c +0x8cf7 0x529f +0x8cf8 0x52b9 +0x8cf9 0x52fe +0x8cfa 0x539a +0x8cfb 0x53e3 +0x8cfc 0x5411 +0x8d40 0x540e +0x8d41 0x5589 +0x8d42 0x5751 +0x8d43 0x57a2 +0x8d44 0x597d +0x8d45 0x5b54 +0x8d46 0x5b5d +0x8d47 0x5b8f +0x8d48 0x5de5 +0x8d49 0x5de7 +0x8d4a 0x5df7 +0x8d4b 0x5e78 +0x8d4c 0x5e83 +0x8d4d 0x5e9a +0x8d4e 0x5eb7 +0x8d4f 0x5f18 +0x8d50 0x6052 +0x8d51 0x614c +0x8d52 0x6297 +0x8d53 0x62d8 +0x8d54 0x63a7 +0x8d55 0x653b +0x8d56 0x6602 +0x8d57 0x6643 +0x8d58 0x66f4 +0x8d59 0x676d +0x8d5a 0x6821 +0x8d5b 0x6897 +0x8d5c 0x69cb +0x8d5d 0x6c5f +0x8d5e 0x6d2a +0x8d5f 0x6d69 +0x8d60 0x6e2f +0x8d61 0x6e9d +0x8d62 0x7532 +0x8d63 0x7687 +0x8d64 0x786c +0x8d65 0x7a3f +0x8d66 0x7ce0 +0x8d67 0x7d05 +0x8d68 0x7d18 +0x8d69 0x7d5e +0x8d6a 0x7db1 +0x8d6b 0x8015 +0x8d6c 0x8003 +0x8d6d 0x80af +0x8d6e 0x80b1 +0x8d6f 0x8154 +0x8d70 0x818f +0x8d71 0x822a +0x8d72 0x8352 +0x8d73 0x884c +0x8d74 0x8861 +0x8d75 0x8b1b +0x8d76 0x8ca2 +0x8d77 0x8cfc +0x8d78 0x90ca +0x8d79 0x9175 +0x8d7a 0x9271 +0x8d7b 0x783f +0x8d7c 0x92fc +0x8d7d 0x95a4 +0x8d7e 0x964d +0x8d80 0x9805 +0x8d81 0x9999 +0x8d82 0x9ad8 +0x8d83 0x9d3b +0x8d84 0x525b +0x8d85 0x52ab +0x8d86 0x53f7 +0x8d87 0x5408 +0x8d88 0x58d5 +0x8d89 0x62f7 +0x8d8a 0x6fe0 +0x8d8b 0x8c6a +0x8d8c 0x8f5f +0x8d8d 0x9eb9 +0x8d8e 0x514b +0x8d8f 0x523b +0x8d90 0x544a +0x8d91 0x56fd +0x8d92 0x7a40 +0x8d93 0x9177 +0x8d94 0x9d60 +0x8d95 0x9ed2 +0x8d96 0x7344 +0x8d97 0x6f09 +0x8d98 0x8170 +0x8d99 0x7511 +0x8d9a 0x5ffd +0x8d9b 0x60da +0x8d9c 0x9aa8 +0x8d9d 0x72db +0x8d9e 0x8fbc +0x8d9f 0x6b64 +0x8da0 0x9803 +0x8da1 0x4eca +0x8da2 0x56f0 +0x8da3 0x5764 +0x8da4 0x58be +0x8da5 0x5a5a +0x8da6 0x6068 +0x8da7 0x61c7 +0x8da8 0x660f +0x8da9 0x6606 +0x8daa 0x6839 +0x8dab 0x68b1 +0x8dac 0x6df7 +0x8dad 0x75d5 +0x8dae 0x7d3a +0x8daf 0x826e +0x8db0 0x9b42 +0x8db1 0x4e9b +0x8db2 0x4f50 +0x8db3 0x53c9 +0x8db4 0x5506 +0x8db5 0x5d6f +0x8db6 0x5de6 +0x8db7 0x5dee +0x8db8 0x67fb +0x8db9 0x6c99 +0x8dba 0x7473 +0x8dbb 0x7802 +0x8dbc 0x8a50 +0x8dbd 0x9396 +0x8dbe 0x88df +0x8dbf 0x5750 +0x8dc0 0x5ea7 +0x8dc1 0x632b +0x8dc2 0x50b5 +0x8dc3 0x50ac +0x8dc4 0x518d +0x8dc5 0x6700 +0x8dc6 0x54c9 +0x8dc7 0x585e +0x8dc8 0x59bb +0x8dc9 0x5bb0 +0x8dca 0x5f69 +0x8dcb 0x624d +0x8dcc 0x63a1 +0x8dcd 0x683d +0x8dce 0x6b73 +0x8dcf 0x6e08 +0x8dd0 0x707d +0x8dd1 0x91c7 +0x8dd2 0x7280 +0x8dd3 0x7815 +0x8dd4 0x7826 +0x8dd5 0x796d +0x8dd6 0x658e +0x8dd7 0x7d30 +0x8dd8 0x83dc +0x8dd9 0x88c1 +0x8dda 0x8f09 +0x8ddb 0x969b +0x8ddc 0x5264 +0x8ddd 0x5728 +0x8dde 0x6750 +0x8ddf 0x7f6a +0x8de0 0x8ca1 +0x8de1 0x51b4 +0x8de2 0x5742 +0x8de3 0x962a +0x8de4 0x583a +0x8de5 0x698a +0x8de6 0x80b4 +0x8de7 0x54b2 +0x8de8 0x5d0e +0x8de9 0x57fc +0x8dea 0x7895 +0x8deb 0x9dfa +0x8dec 0x4f5c +0x8ded 0x524a +0x8dee 0x548b +0x8def 0x643e +0x8df0 0x6628 +0x8df1 0x6714 +0x8df2 0x67f5 +0x8df3 0x7a84 +0x8df4 0x7b56 +0x8df5 0x7d22 +0x8df6 0x932f +0x8df7 0x685c +0x8df8 0x9bad +0x8df9 0x7b39 +0x8dfa 0x5319 +0x8dfb 0x518a +0x8dfc 0x5237 +0x8e40 0x5bdf +0x8e41 0x62f6 +0x8e42 0x64ae +0x8e43 0x64e6 +0x8e44 0x672d +0x8e45 0x6bba +0x8e46 0x85a9 +0x8e47 0x96d1 +0x8e48 0x7690 +0x8e49 0x9bd6 +0x8e4a 0x634c +0x8e4b 0x9306 +0x8e4c 0x9bab +0x8e4d 0x76bf +0x8e4e 0x6652 +0x8e4f 0x4e09 +0x8e50 0x5098 +0x8e51 0x53c2 +0x8e52 0x5c71 +0x8e53 0x60e8 +0x8e54 0x6492 +0x8e55 0x6563 +0x8e56 0x685f +0x8e57 0x71e6 +0x8e58 0x73ca +0x8e59 0x7523 +0x8e5a 0x7b97 +0x8e5b 0x7e82 +0x8e5c 0x8695 +0x8e5d 0x8b83 +0x8e5e 0x8cdb +0x8e5f 0x9178 +0x8e60 0x9910 +0x8e61 0x65ac +0x8e62 0x66ab +0x8e63 0x6b8b +0x8e64 0x4ed5 +0x8e65 0x4ed4 +0x8e66 0x4f3a +0x8e67 0x4f7f +0x8e68 0x523a +0x8e69 0x53f8 +0x8e6a 0x53f2 +0x8e6b 0x55e3 +0x8e6c 0x56db +0x8e6d 0x58eb +0x8e6e 0x59cb +0x8e6f 0x59c9 +0x8e70 0x59ff +0x8e71 0x5b50 +0x8e72 0x5c4d +0x8e73 0x5e02 +0x8e74 0x5e2b +0x8e75 0x5fd7 +0x8e76 0x601d +0x8e77 0x6307 +0x8e78 0x652f +0x8e79 0x5b5c +0x8e7a 0x65af +0x8e7b 0x65bd +0x8e7c 0x65e8 +0x8e7d 0x679d +0x8e7e 0x6b62 +0x8e80 0x6b7b +0x8e81 0x6c0f +0x8e82 0x7345 +0x8e83 0x7949 +0x8e84 0x79c1 +0x8e85 0x7cf8 +0x8e86 0x7d19 +0x8e87 0x7d2b +0x8e88 0x80a2 +0x8e89 0x8102 +0x8e8a 0x81f3 +0x8e8b 0x8996 +0x8e8c 0x8a5e +0x8e8d 0x8a69 +0x8e8e 0x8a66 +0x8e8f 0x8a8c +0x8e90 0x8aee +0x8e91 0x8cc7 +0x8e92 0x8cdc +0x8e93 0x96cc +0x8e94 0x98fc +0x8e95 0x6b6f +0x8e96 0x4e8b +0x8e97 0x4f3c +0x8e98 0x4f8d +0x8e99 0x5150 +0x8e9a 0x5b57 +0x8e9b 0x5bfa +0x8e9c 0x6148 +0x8e9d 0x6301 +0x8e9e 0x6642 +0x8e9f 0x6b21 +0x8ea0 0x6ecb +0x8ea1 0x6cbb +0x8ea2 0x723e +0x8ea3 0x74bd +0x8ea4 0x75d4 +0x8ea5 0x78c1 +0x8ea6 0x793a +0x8ea7 0x800c +0x8ea8 0x8033 +0x8ea9 0x81ea +0x8eaa 0x8494 +0x8eab 0x8f9e +0x8eac 0x6c50 +0x8ead 0x9e7f +0x8eae 0x5f0f +0x8eaf 0x8b58 +0x8eb0 0x9d2b +0x8eb1 0x7afa +0x8eb2 0x8ef8 +0x8eb3 0x5b8d +0x8eb4 0x96eb +0x8eb5 0x4e03 +0x8eb6 0x53f1 +0x8eb7 0x57f7 +0x8eb8 0x5931 +0x8eb9 0x5ac9 +0x8eba 0x5ba4 +0x8ebb 0x6089 +0x8ebc 0x6e7f +0x8ebd 0x6f06 +0x8ebe 0x75be +0x8ebf 0x8cea +0x8ec0 0x5b9f +0x8ec1 0x8500 +0x8ec2 0x7be0 +0x8ec3 0x5072 +0x8ec4 0x67f4 +0x8ec5 0x829d +0x8ec6 0x5c61 +0x8ec7 0x854a +0x8ec8 0x7e1e +0x8ec9 0x820e +0x8eca 0x5199 +0x8ecb 0x5c04 +0x8ecc 0x6368 +0x8ecd 0x8d66 +0x8ece 0x659c +0x8ecf 0x716e +0x8ed0 0x793e +0x8ed1 0x7d17 +0x8ed2 0x8005 +0x8ed3 0x8b1d +0x8ed4 0x8eca +0x8ed5 0x906e +0x8ed6 0x86c7 +0x8ed7 0x90aa +0x8ed8 0x501f +0x8ed9 0x52fa +0x8eda 0x5c3a +0x8edb 0x6753 +0x8edc 0x707c +0x8edd 0x7235 +0x8ede 0x914c +0x8edf 0x91c8 +0x8ee0 0x932b +0x8ee1 0x82e5 +0x8ee2 0x5bc2 +0x8ee3 0x5f31 +0x8ee4 0x60f9 +0x8ee5 0x4e3b +0x8ee6 0x53d6 +0x8ee7 0x5b88 +0x8ee8 0x624b +0x8ee9 0x6731 +0x8eea 0x6b8a +0x8eeb 0x72e9 +0x8eec 0x73e0 +0x8eed 0x7a2e +0x8eee 0x816b +0x8eef 0x8da3 +0x8ef0 0x9152 +0x8ef1 0x9996 +0x8ef2 0x5112 +0x8ef3 0x53d7 +0x8ef4 0x546a +0x8ef5 0x5bff +0x8ef6 0x6388 +0x8ef7 0x6a39 +0x8ef8 0x7dac +0x8ef9 0x9700 +0x8efa 0x56da +0x8efb 0x53ce +0x8efc 0x5468 +0x8f40 0x5b97 +0x8f41 0x5c31 +0x8f42 0x5dde +0x8f43 0x4fee +0x8f44 0x6101 +0x8f45 0x62fe +0x8f46 0x6d32 +0x8f47 0x79c0 +0x8f48 0x79cb +0x8f49 0x7d42 +0x8f4a 0x7e4d +0x8f4b 0x7fd2 +0x8f4c 0x81ed +0x8f4d 0x821f +0x8f4e 0x8490 +0x8f4f 0x8846 +0x8f50 0x8972 +0x8f51 0x8b90 +0x8f52 0x8e74 +0x8f53 0x8f2f +0x8f54 0x9031 +0x8f55 0x914b +0x8f56 0x916c +0x8f57 0x96c6 +0x8f58 0x919c +0x8f59 0x4ec0 +0x8f5a 0x4f4f +0x8f5b 0x5145 +0x8f5c 0x5341 +0x8f5d 0x5f93 +0x8f5e 0x620e +0x8f5f 0x67d4 +0x8f60 0x6c41 +0x8f61 0x6e0b +0x8f62 0x7363 +0x8f63 0x7e26 +0x8f64 0x91cd +0x8f65 0x9283 +0x8f66 0x53d4 +0x8f67 0x5919 +0x8f68 0x5bbf +0x8f69 0x6dd1 +0x8f6a 0x795d +0x8f6b 0x7e2e +0x8f6c 0x7c9b +0x8f6d 0x587e +0x8f6e 0x719f +0x8f6f 0x51fa +0x8f70 0x8853 +0x8f71 0x8ff0 +0x8f72 0x4fca +0x8f73 0x5cfb +0x8f74 0x6625 +0x8f75 0x77ac +0x8f76 0x7ae3 +0x8f77 0x821c +0x8f78 0x99ff +0x8f79 0x51c6 +0x8f7a 0x5faa +0x8f7b 0x65ec +0x8f7c 0x696f +0x8f7d 0x6b89 +0x8f7e 0x6df3 +0x8f80 0x6e96 +0x8f81 0x6f64 +0x8f82 0x76fe +0x8f83 0x7d14 +0x8f84 0x5de1 +0x8f85 0x9075 +0x8f86 0x9187 +0x8f87 0x9806 +0x8f88 0x51e6 +0x8f89 0x521d +0x8f8a 0x6240 +0x8f8b 0x6691 +0x8f8c 0x66d9 +0x8f8d 0x6e1a +0x8f8e 0x5eb6 +0x8f8f 0x7dd2 +0x8f90 0x7f72 +0x8f91 0x66f8 +0x8f92 0x85af +0x8f93 0x85f7 +0x8f94 0x8af8 +0x8f95 0x52a9 +0x8f96 0x53d9 +0x8f97 0x5973 +0x8f98 0x5e8f +0x8f99 0x5f90 +0x8f9a 0x6055 +0x8f9b 0x92e4 +0x8f9c 0x9664 +0x8f9d 0x50b7 +0x8f9e 0x511f +0x8f9f 0x52dd +0x8fa0 0x5320 +0x8fa1 0x5347 +0x8fa2 0x53ec +0x8fa3 0x54e8 +0x8fa4 0x5546 +0x8fa5 0x5531 +0x8fa6 0x5617 +0x8fa7 0x5968 +0x8fa8 0x59be +0x8fa9 0x5a3c +0x8faa 0x5bb5 +0x8fab 0x5c06 +0x8fac 0x5c0f +0x8fad 0x5c11 +0x8fae 0x5c1a +0x8faf 0x5e84 +0x8fb0 0x5e8a +0x8fb1 0x5ee0 +0x8fb2 0x5f70 +0x8fb3 0x627f +0x8fb4 0x6284 +0x8fb5 0x62db +0x8fb6 0x638c +0x8fb7 0x6377 +0x8fb8 0x6607 +0x8fb9 0x660c +0x8fba 0x662d +0x8fbb 0x6676 +0x8fbc 0x677e +0x8fbd 0x68a2 +0x8fbe 0x6a1f +0x8fbf 0x6a35 +0x8fc0 0x6cbc +0x8fc1 0x6d88 +0x8fc2 0x6e09 +0x8fc3 0x6e58 +0x8fc4 0x713c +0x8fc5 0x7126 +0x8fc6 0x7167 +0x8fc7 0x75c7 +0x8fc8 0x7701 +0x8fc9 0x785d +0x8fca 0x7901 +0x8fcb 0x7965 +0x8fcc 0x79f0 +0x8fcd 0x7ae0 +0x8fce 0x7b11 +0x8fcf 0x7ca7 +0x8fd0 0x7d39 +0x8fd1 0x8096 +0x8fd2 0x83d6 +0x8fd3 0x848b +0x8fd4 0x8549 +0x8fd5 0x885d +0x8fd6 0x88f3 +0x8fd7 0x8a1f +0x8fd8 0x8a3c +0x8fd9 0x8a54 +0x8fda 0x8a73 +0x8fdb 0x8c61 +0x8fdc 0x8cde +0x8fdd 0x91a4 +0x8fde 0x9266 +0x8fdf 0x937e +0x8fe0 0x9418 +0x8fe1 0x969c +0x8fe2 0x9798 +0x8fe3 0x4e0a +0x8fe4 0x4e08 +0x8fe5 0x4e1e +0x8fe6 0x4e57 +0x8fe7 0x5197 +0x8fe8 0x5270 +0x8fe9 0x57ce +0x8fea 0x5834 +0x8feb 0x58cc +0x8fec 0x5b22 +0x8fed 0x5e38 +0x8fee 0x60c5 +0x8fef 0x64fe +0x8ff0 0x6761 +0x8ff1 0x6756 +0x8ff2 0x6d44 +0x8ff3 0x72b6 +0x8ff4 0x7573 +0x8ff5 0x7a63 +0x8ff6 0x84b8 +0x8ff7 0x8b72 +0x8ff8 0x91b8 +0x8ff9 0x9320 +0x8ffa 0x5631 +0x8ffb 0x57f4 +0x8ffc 0x98fe +0x9040 0x62ed +0x9041 0x690d +0x9042 0x6b96 +0x9043 0x71ed +0x9044 0x7e54 +0x9045 0x8077 +0x9046 0x8272 +0x9047 0x89e6 +0x9048 0x98df +0x9049 0x8755 +0x904a 0x8fb1 +0x904b 0x5c3b +0x904c 0x4f38 +0x904d 0x4fe1 +0x904e 0x4fb5 +0x904f 0x5507 +0x9050 0x5a20 +0x9051 0x5bdd +0x9052 0x5be9 +0x9053 0x5fc3 +0x9054 0x614e +0x9055 0x632f +0x9056 0x65b0 +0x9057 0x664b +0x9058 0x68ee +0x9059 0x699b +0x905a 0x6d78 +0x905b 0x6df1 +0x905c 0x7533 +0x905d 0x75b9 +0x905e 0x771f +0x905f 0x795e +0x9060 0x79e6 +0x9061 0x7d33 +0x9062 0x81e3 +0x9063 0x82af +0x9064 0x85aa +0x9065 0x89aa +0x9066 0x8a3a +0x9067 0x8eab +0x9068 0x8f9b +0x9069 0x9032 +0x906a 0x91dd +0x906b 0x9707 +0x906c 0x4eba +0x906d 0x4ec1 +0x906e 0x5203 +0x906f 0x5875 +0x9070 0x58ec +0x9071 0x5c0b +0x9072 0x751a +0x9073 0x5c3d +0x9074 0x814e +0x9075 0x8a0a +0x9076 0x8fc5 +0x9077 0x9663 +0x9078 0x976d +0x9079 0x7b25 +0x907a 0x8acf +0x907b 0x9808 +0x907c 0x9162 +0x907d 0x56f3 +0x907e 0x53a8 +0x9080 0x9017 +0x9081 0x5439 +0x9082 0x5782 +0x9083 0x5e25 +0x9084 0x63a8 +0x9085 0x6c34 +0x9086 0x708a +0x9087 0x7761 +0x9088 0x7c8b +0x9089 0x7fe0 +0x908a 0x8870 +0x908b 0x9042 +0x908c 0x9154 +0x908d 0x9310 +0x908e 0x9318 +0x908f 0x968f +0x9090 0x745e +0x9091 0x9ac4 +0x9092 0x5d07 +0x9093 0x5d69 +0x9094 0x6570 +0x9095 0x67a2 +0x9096 0x8da8 +0x9097 0x96db +0x9098 0x636e +0x9099 0x6749 +0x909a 0x6919 +0x909b 0x83c5 +0x909c 0x9817 +0x909d 0x96c0 +0x909e 0x88fe +0x909f 0x6f84 +0x90a0 0x647a +0x90a1 0x5bf8 +0x90a2 0x4e16 +0x90a3 0x702c +0x90a4 0x755d +0x90a5 0x662f +0x90a6 0x51c4 +0x90a7 0x5236 +0x90a8 0x52e2 +0x90a9 0x59d3 +0x90aa 0x5f81 +0x90ab 0x6027 +0x90ac 0x6210 +0x90ad 0x653f +0x90ae 0x6574 +0x90af 0x661f +0x90b0 0x6674 +0x90b1 0x68f2 +0x90b2 0x6816 +0x90b3 0x6b63 +0x90b4 0x6e05 +0x90b5 0x7272 +0x90b6 0x751f +0x90b7 0x76db +0x90b8 0x7cbe +0x90b9 0x8056 +0x90ba 0x58f0 +0x90bb 0x88fd +0x90bc 0x897f +0x90bd 0x8aa0 +0x90be 0x8a93 +0x90bf 0x8acb +0x90c0 0x901d +0x90c1 0x9192 +0x90c2 0x9752 +0x90c3 0x9759 +0x90c4 0x6589 +0x90c5 0x7a0e +0x90c6 0x8106 +0x90c7 0x96bb +0x90c8 0x5e2d +0x90c9 0x60dc +0x90ca 0x621a +0x90cb 0x65a5 +0x90cc 0x6614 +0x90cd 0x6790 +0x90ce 0x77f3 +0x90cf 0x7a4d +0x90d0 0x7c4d +0x90d1 0x7e3e +0x90d2 0x810a +0x90d3 0x8cac +0x90d4 0x8d64 +0x90d5 0x8de1 +0x90d6 0x8e5f +0x90d7 0x78a9 +0x90d8 0x5207 +0x90d9 0x62d9 +0x90da 0x63a5 +0x90db 0x6442 +0x90dc 0x6298 +0x90dd 0x8a2d +0x90de 0x7a83 +0x90df 0x7bc0 +0x90e0 0x8aac +0x90e1 0x96ea +0x90e2 0x7d76 +0x90e3 0x820c +0x90e4 0x8749 +0x90e5 0x4ed9 +0x90e6 0x5148 +0x90e7 0x5343 +0x90e8 0x5360 +0x90e9 0x5ba3 +0x90ea 0x5c02 +0x90eb 0x5c16 +0x90ec 0x5ddd +0x90ed 0x6226 +0x90ee 0x6247 +0x90ef 0x64b0 +0x90f0 0x6813 +0x90f1 0x6834 +0x90f2 0x6cc9 +0x90f3 0x6d45 +0x90f4 0x6d17 +0x90f5 0x67d3 +0x90f6 0x6f5c +0x90f7 0x714e +0x90f8 0x717d +0x90f9 0x65cb +0x90fa 0x7a7f +0x90fb 0x7bad +0x90fc 0x7dda +0x9140 0x7e4a +0x9141 0x7fa8 +0x9142 0x817a +0x9143 0x821b +0x9144 0x8239 +0x9145 0x85a6 +0x9146 0x8a6e +0x9147 0x8cce +0x9148 0x8df5 +0x9149 0x9078 +0x914a 0x9077 +0x914b 0x92ad +0x914c 0x9291 +0x914d 0x9583 +0x914e 0x9bae +0x914f 0x524d +0x9150 0x5584 +0x9151 0x6f38 +0x9152 0x7136 +0x9153 0x5168 +0x9154 0x7985 +0x9155 0x7e55 +0x9156 0x81b3 +0x9157 0x7cce +0x9158 0x564c +0x9159 0x5851 +0x915a 0x5ca8 +0x915b 0x63aa +0x915c 0x66fe +0x915d 0x66fd +0x915e 0x695a +0x915f 0x72d9 +0x9160 0x758f +0x9161 0x758e +0x9162 0x790e +0x9163 0x7956 +0x9164 0x79df +0x9165 0x7c97 +0x9166 0x7d20 +0x9167 0x7d44 +0x9168 0x8607 +0x9169 0x8a34 +0x916a 0x963b +0x916b 0x9061 +0x916c 0x9f20 +0x916d 0x50e7 +0x916e 0x5275 +0x916f 0x53cc +0x9170 0x53e2 +0x9171 0x5009 +0x9172 0x55aa +0x9173 0x58ee +0x9174 0x594f +0x9175 0x723d +0x9176 0x5b8b +0x9177 0x5c64 +0x9178 0x531d +0x9179 0x60e3 +0x917a 0x60f3 +0x917b 0x635c +0x917c 0x6383 +0x917d 0x633f +0x917e 0x63bb +0x9180 0x64cd +0x9181 0x65e9 +0x9182 0x66f9 +0x9183 0x5de3 +0x9184 0x69cd +0x9185 0x69fd +0x9186 0x6f15 +0x9187 0x71e5 +0x9188 0x4e89 +0x9189 0x75e9 +0x918a 0x76f8 +0x918b 0x7a93 +0x918c 0x7cdf +0x918d 0x7dcf +0x918e 0x7d9c +0x918f 0x8061 +0x9190 0x8349 +0x9191 0x8358 +0x9192 0x846c +0x9193 0x84bc +0x9194 0x85fb +0x9195 0x88c5 +0x9196 0x8d70 +0x9197 0x9001 +0x9198 0x906d +0x9199 0x9397 +0x919a 0x971c +0x919b 0x9a12 +0x919c 0x50cf +0x919d 0x5897 +0x919e 0x618e +0x919f 0x81d3 +0x91a0 0x8535 +0x91a1 0x8d08 +0x91a2 0x9020 +0x91a3 0x4fc3 +0x91a4 0x5074 +0x91a5 0x5247 +0x91a6 0x5373 +0x91a7 0x606f +0x91a8 0x6349 +0x91a9 0x675f +0x91aa 0x6e2c +0x91ab 0x8db3 +0x91ac 0x901f +0x91ad 0x4fd7 +0x91ae 0x5c5e +0x91af 0x8cca +0x91b0 0x65cf +0x91b1 0x7d9a +0x91b2 0x5352 +0x91b3 0x8896 +0x91b4 0x5176 +0x91b5 0x63c3 +0x91b6 0x5b58 +0x91b7 0x5b6b +0x91b8 0x5c0a +0x91b9 0x640d +0x91ba 0x6751 +0x91bb 0x905c +0x91bc 0x4ed6 +0x91bd 0x591a +0x91be 0x592a +0x91bf 0x6c70 +0x91c0 0x8a51 +0x91c1 0x553e +0x91c2 0x5815 +0x91c3 0x59a5 +0x91c4 0x60f0 +0x91c5 0x6253 +0x91c6 0x67c1 +0x91c7 0x8235 +0x91c8 0x6955 +0x91c9 0x9640 +0x91ca 0x99c4 +0x91cb 0x9a28 +0x91cc 0x4f53 +0x91cd 0x5806 +0x91ce 0x5bfe +0x91cf 0x8010 +0x91d0 0x5cb1 +0x91d1 0x5e2f +0x91d2 0x5f85 +0x91d3 0x6020 +0x91d4 0x614b +0x91d5 0x6234 +0x91d6 0x66ff +0x91d7 0x6cf0 +0x91d8 0x6ede +0x91d9 0x80ce +0x91da 0x817f +0x91db 0x82d4 +0x91dc 0x888b +0x91dd 0x8cb8 +0x91de 0x9000 +0x91df 0x902e +0x91e0 0x968a +0x91e1 0x9edb +0x91e2 0x9bdb +0x91e3 0x4ee3 +0x91e4 0x53f0 +0x91e5 0x5927 +0x91e6 0x7b2c +0x91e7 0x918d +0x91e8 0x984c +0x91e9 0x9df9 +0x91ea 0x6edd +0x91eb 0x7027 +0x91ec 0x5353 +0x91ed 0x5544 +0x91ee 0x5b85 +0x91ef 0x6258 +0x91f0 0x629e +0x91f1 0x62d3 +0x91f2 0x6ca2 +0x91f3 0x6fef +0x91f4 0x7422 +0x91f5 0x8a17 +0x91f6 0x9438 +0x91f7 0x6fc1 +0x91f8 0x8afe +0x91f9 0x8338 +0x91fa 0x51e7 +0x91fb 0x86f8 +0x91fc 0x53ea +0x9240 0x53e9 +0x9241 0x4f46 +0x9242 0x9054 +0x9243 0x8fb0 +0x9244 0x596a +0x9245 0x8131 +0x9246 0x5dfd +0x9247 0x7aea +0x9248 0x8fbf +0x9249 0x68da +0x924a 0x8c37 +0x924b 0x72f8 +0x924c 0x9c48 +0x924d 0x6a3d +0x924e 0x8ab0 +0x924f 0x4e39 +0x9250 0x5358 +0x9251 0x5606 +0x9252 0x5766 +0x9253 0x62c5 +0x9254 0x63a2 +0x9255 0x65e6 +0x9256 0x6b4e +0x9257 0x6de1 +0x9258 0x6e5b +0x9259 0x70ad +0x925a 0x77ed +0x925b 0x7aef +0x925c 0x7baa +0x925d 0x7dbb +0x925e 0x803d +0x925f 0x80c6 +0x9260 0x86cb +0x9261 0x8a95 +0x9262 0x935b +0x9263 0x56e3 +0x9264 0x58c7 +0x9265 0x5f3e +0x9266 0x65ad +0x9267 0x6696 +0x9268 0x6a80 +0x9269 0x6bb5 +0x926a 0x7537 +0x926b 0x8ac7 +0x926c 0x5024 +0x926d 0x77e5 +0x926e 0x5730 +0x926f 0x5f1b +0x9270 0x6065 +0x9271 0x667a +0x9272 0x6c60 +0x9273 0x75f4 +0x9274 0x7a1a +0x9275 0x7f6e +0x9276 0x81f4 +0x9277 0x8718 +0x9278 0x9045 +0x9279 0x99b3 +0x927a 0x7bc9 +0x927b 0x755c +0x927c 0x7af9 +0x927d 0x7b51 +0x927e 0x84c4 +0x9280 0x9010 +0x9281 0x79e9 +0x9282 0x7a92 +0x9283 0x8336 +0x9284 0x5ae1 +0x9285 0x7740 +0x9286 0x4e2d +0x9287 0x4ef2 +0x9288 0x5b99 +0x9289 0x5fe0 +0x928a 0x62bd +0x928b 0x663c +0x928c 0x67f1 +0x928d 0x6ce8 +0x928e 0x866b +0x928f 0x8877 +0x9290 0x8a3b +0x9291 0x914e +0x9292 0x92f3 +0x9293 0x99d0 +0x9294 0x6a17 +0x9295 0x7026 +0x9296 0x732a +0x9297 0x82e7 +0x9298 0x8457 +0x9299 0x8caf +0x929a 0x4e01 +0x929b 0x5146 +0x929c 0x51cb +0x929d 0x558b +0x929e 0x5bf5 +0x929f 0x5e16 +0x92a0 0x5e33 +0x92a1 0x5e81 +0x92a2 0x5f14 +0x92a3 0x5f35 +0x92a4 0x5f6b +0x92a5 0x5fb4 +0x92a6 0x61f2 +0x92a7 0x6311 +0x92a8 0x66a2 +0x92a9 0x671d +0x92aa 0x6f6e +0x92ab 0x7252 +0x92ac 0x753a +0x92ad 0x773a +0x92ae 0x8074 +0x92af 0x8139 +0x92b0 0x8178 +0x92b1 0x8776 +0x92b2 0x8abf +0x92b3 0x8adc +0x92b4 0x8d85 +0x92b5 0x8df3 +0x92b6 0x929a +0x92b7 0x9577 +0x92b8 0x9802 +0x92b9 0x9ce5 +0x92ba 0x52c5 +0x92bb 0x6357 +0x92bc 0x76f4 +0x92bd 0x6715 +0x92be 0x6c88 +0x92bf 0x73cd +0x92c0 0x8cc3 +0x92c1 0x93ae +0x92c2 0x9673 +0x92c3 0x6d25 +0x92c4 0x589c +0x92c5 0x690e +0x92c6 0x69cc +0x92c7 0x8ffd +0x92c8 0x939a +0x92c9 0x75db +0x92ca 0x901a +0x92cb 0x585a +0x92cc 0x6802 +0x92cd 0x63b4 +0x92ce 0x69fb +0x92cf 0x4f43 +0x92d0 0x6f2c +0x92d1 0x67d8 +0x92d2 0x8fbb +0x92d3 0x8526 +0x92d4 0x7db4 +0x92d5 0x9354 +0x92d6 0x693f +0x92d7 0x6f70 +0x92d8 0x576a +0x92d9 0x58f7 +0x92da 0x5b2c +0x92db 0x7d2c +0x92dc 0x722a +0x92dd 0x540a +0x92de 0x91e3 +0x92df 0x9db4 +0x92e0 0x4ead +0x92e1 0x4f4e +0x92e2 0x505c +0x92e3 0x5075 +0x92e4 0x5243 +0x92e5 0x8c9e +0x92e6 0x5448 +0x92e7 0x5824 +0x92e8 0x5b9a +0x92e9 0x5e1d +0x92ea 0x5e95 +0x92eb 0x5ead +0x92ec 0x5ef7 +0x92ed 0x5f1f +0x92ee 0x608c +0x92ef 0x62b5 +0x92f0 0x633a +0x92f1 0x63d0 +0x92f2 0x68af +0x92f3 0x6c40 +0x92f4 0x7887 +0x92f5 0x798e +0x92f6 0x7a0b +0x92f7 0x7de0 +0x92f8 0x8247 +0x92f9 0x8a02 +0x92fa 0x8ae6 +0x92fb 0x8e44 +0x92fc 0x9013 +0x9340 0x90b8 +0x9341 0x912d +0x9342 0x91d8 +0x9343 0x9f0e +0x9344 0x6ce5 +0x9345 0x6458 +0x9346 0x64e2 +0x9347 0x6575 +0x9348 0x6ef4 +0x9349 0x7684 +0x934a 0x7b1b +0x934b 0x9069 +0x934c 0x93d1 +0x934d 0x6eba +0x934e 0x54f2 +0x934f 0x5fb9 +0x9350 0x64a4 +0x9351 0x8f4d +0x9352 0x8fed +0x9353 0x9244 +0x9354 0x5178 +0x9355 0x586b +0x9356 0x5929 +0x9357 0x5c55 +0x9358 0x5e97 +0x9359 0x6dfb +0x935a 0x7e8f +0x935b 0x751c +0x935c 0x8cbc +0x935d 0x8ee2 +0x935e 0x985b +0x935f 0x70b9 +0x9360 0x4f1d +0x9361 0x6bbf +0x9362 0x6fb1 +0x9363 0x7530 +0x9364 0x96fb +0x9365 0x514e +0x9366 0x5410 +0x9367 0x5835 +0x9368 0x5857 +0x9369 0x59ac +0x936a 0x5c60 +0x936b 0x5f92 +0x936c 0x6597 +0x936d 0x675c +0x936e 0x6e21 +0x936f 0x767b +0x9370 0x83df +0x9371 0x8ced +0x9372 0x9014 +0x9373 0x90fd +0x9374 0x934d +0x9375 0x7825 +0x9376 0x783a +0x9377 0x52aa +0x9378 0x5ea6 +0x9379 0x571f +0x937a 0x5974 +0x937b 0x6012 +0x937c 0x5012 +0x937d 0x515a +0x937e 0x51ac +0x9380 0x51cd +0x9381 0x5200 +0x9382 0x5510 +0x9383 0x5854 +0x9384 0x5858 +0x9385 0x5957 +0x9386 0x5b95 +0x9387 0x5cf6 +0x9388 0x5d8b +0x9389 0x60bc +0x938a 0x6295 +0x938b 0x642d +0x938c 0x6771 +0x938d 0x6843 +0x938e 0x68bc +0x938f 0x68df +0x9390 0x76d7 +0x9391 0x6dd8 +0x9392 0x6e6f +0x9393 0x6d9b +0x9394 0x706f +0x9395 0x71c8 +0x9396 0x5f53 +0x9397 0x75d8 +0x9398 0x7977 +0x9399 0x7b49 +0x939a 0x7b54 +0x939b 0x7b52 +0x939c 0x7cd6 +0x939d 0x7d71 +0x939e 0x5230 +0x939f 0x8463 +0x93a0 0x8569 +0x93a1 0x85e4 +0x93a2 0x8a0e +0x93a3 0x8b04 +0x93a4 0x8c46 +0x93a5 0x8e0f +0x93a6 0x9003 +0x93a7 0x900f +0x93a8 0x9419 +0x93a9 0x9676 +0x93aa 0x982d +0x93ab 0x9a30 +0x93ac 0x95d8 +0x93ad 0x50cd +0x93ae 0x52d5 +0x93af 0x540c +0x93b0 0x5802 +0x93b1 0x5c0e +0x93b2 0x61a7 +0x93b3 0x649e +0x93b4 0x6d1e +0x93b5 0x77b3 +0x93b6 0x7ae5 +0x93b7 0x80f4 +0x93b8 0x8404 +0x93b9 0x9053 +0x93ba 0x9285 +0x93bb 0x5ce0 +0x93bc 0x9d07 +0x93bd 0x533f +0x93be 0x5f97 +0x93bf 0x5fb3 +0x93c0 0x6d9c +0x93c1 0x7279 +0x93c2 0x7763 +0x93c3 0x79bf +0x93c4 0x7be4 +0x93c5 0x6bd2 +0x93c6 0x72ec +0x93c7 0x8aad +0x93c8 0x6803 +0x93c9 0x6a61 +0x93ca 0x51f8 +0x93cb 0x7a81 +0x93cc 0x6934 +0x93cd 0x5c4a +0x93ce 0x9cf6 +0x93cf 0x82eb +0x93d0 0x5bc5 +0x93d1 0x9149 +0x93d2 0x701e +0x93d3 0x5678 +0x93d4 0x5c6f +0x93d5 0x60c7 +0x93d6 0x6566 +0x93d7 0x6c8c +0x93d8 0x8c5a +0x93d9 0x9041 +0x93da 0x9813 +0x93db 0x5451 +0x93dc 0x66c7 +0x93dd 0x920d +0x93de 0x5948 +0x93df 0x90a3 +0x93e0 0x5185 +0x93e1 0x4e4d +0x93e2 0x51ea +0x93e3 0x8599 +0x93e4 0x8b0e +0x93e5 0x7058 +0x93e6 0x637a +0x93e7 0x934b +0x93e8 0x6962 +0x93e9 0x99b4 +0x93ea 0x7e04 +0x93eb 0x7577 +0x93ec 0x5357 +0x93ed 0x6960 +0x93ee 0x8edf +0x93ef 0x96e3 +0x93f0 0x6c5d +0x93f1 0x4e8c +0x93f2 0x5c3c +0x93f3 0x5f10 +0x93f4 0x8fe9 +0x93f5 0x5302 +0x93f6 0x8cd1 +0x93f7 0x8089 +0x93f8 0x8679 +0x93f9 0x5eff +0x93fa 0x65e5 +0x93fb 0x4e73 +0x93fc 0x5165 +0x9440 0x5982 +0x9441 0x5c3f +0x9442 0x97ee +0x9443 0x4efb +0x9444 0x598a +0x9445 0x5fcd +0x9446 0x8a8d +0x9447 0x6fe1 +0x9448 0x79b0 +0x9449 0x7962 +0x944a 0x5be7 +0x944b 0x8471 +0x944c 0x732b +0x944d 0x71b1 +0x944e 0x5e74 +0x944f 0x5ff5 +0x9450 0x637b +0x9451 0x649a +0x9452 0x71c3 +0x9453 0x7c98 +0x9454 0x4e43 +0x9455 0x5efc +0x9456 0x4e4b +0x9457 0x57dc +0x9458 0x56a2 +0x9459 0x60a9 +0x945a 0x6fc3 +0x945b 0x7d0d +0x945c 0x80fd +0x945d 0x8133 +0x945e 0x81bf +0x945f 0x8fb2 +0x9460 0x8997 +0x9461 0x86a4 +0x9462 0x5df4 +0x9463 0x628a +0x9464 0x64ad +0x9465 0x8987 +0x9466 0x6777 +0x9467 0x6ce2 +0x9468 0x6d3e +0x9469 0x7436 +0x946a 0x7834 +0x946b 0x5a46 +0x946c 0x7f75 +0x946d 0x82ad +0x946e 0x99ac +0x946f 0x4ff3 +0x9470 0x5ec3 +0x9471 0x62dd +0x9472 0x6392 +0x9473 0x6557 +0x9474 0x676f +0x9475 0x76c3 +0x9476 0x724c +0x9477 0x80cc +0x9478 0x80ba +0x9479 0x8f29 +0x947a 0x914d +0x947b 0x500d +0x947c 0x57f9 +0x947d 0x5a92 +0x947e 0x6885 +0x9480 0x6973 +0x9481 0x7164 +0x9482 0x72fd +0x9483 0x8cb7 +0x9484 0x58f2 +0x9485 0x8ce0 +0x9486 0x966a +0x9487 0x9019 +0x9488 0x877f +0x9489 0x79e4 +0x948a 0x77e7 +0x948b 0x8429 +0x948c 0x4f2f +0x948d 0x5265 +0x948e 0x535a +0x948f 0x62cd +0x9490 0x67cf +0x9491 0x6cca +0x9492 0x767d +0x9493 0x7b94 +0x9494 0x7c95 +0x9495 0x8236 +0x9496 0x8584 +0x9497 0x8feb +0x9498 0x66dd +0x9499 0x6f20 +0x949a 0x7206 +0x949b 0x7e1b +0x949c 0x83ab +0x949d 0x99c1 +0x949e 0x9ea6 +0x949f 0x51fd +0x94a0 0x7bb1 +0x94a1 0x7872 +0x94a2 0x7bb8 +0x94a3 0x8087 +0x94a4 0x7b48 +0x94a5 0x6ae8 +0x94a6 0x5e61 +0x94a7 0x808c +0x94a8 0x7551 +0x94a9 0x7560 +0x94aa 0x516b +0x94ab 0x9262 +0x94ac 0x6e8c +0x94ad 0x767a +0x94ae 0x9197 +0x94af 0x9aea +0x94b0 0x4f10 +0x94b1 0x7f70 +0x94b2 0x629c +0x94b3 0x7b4f +0x94b4 0x95a5 +0x94b5 0x9ce9 +0x94b6 0x567a +0x94b7 0x5859 +0x94b8 0x86e4 +0x94b9 0x96bc +0x94ba 0x4f34 +0x94bb 0x5224 +0x94bc 0x534a +0x94bd 0x53cd +0x94be 0x53db +0x94bf 0x5e06 +0x94c0 0x642c +0x94c1 0x6591 +0x94c2 0x677f +0x94c3 0x6c3e +0x94c4 0x6c4e +0x94c5 0x7248 +0x94c6 0x72af +0x94c7 0x73ed +0x94c8 0x7554 +0x94c9 0x7e41 +0x94ca 0x822c +0x94cb 0x85e9 +0x94cc 0x8ca9 +0x94cd 0x7bc4 +0x94ce 0x91c6 +0x94cf 0x7169 +0x94d0 0x9812 +0x94d1 0x98ef +0x94d2 0x633d +0x94d3 0x6669 +0x94d4 0x756a +0x94d5 0x76e4 +0x94d6 0x78d0 +0x94d7 0x8543 +0x94d8 0x86ee +0x94d9 0x532a +0x94da 0x5351 +0x94db 0x5426 +0x94dc 0x5983 +0x94dd 0x5e87 +0x94de 0x5f7c +0x94df 0x60b2 +0x94e0 0x6249 +0x94e1 0x6279 +0x94e2 0x62ab +0x94e3 0x6590 +0x94e4 0x6bd4 +0x94e5 0x6ccc +0x94e6 0x75b2 +0x94e7 0x76ae +0x94e8 0x7891 +0x94e9 0x79d8 +0x94ea 0x7dcb +0x94eb 0x7f77 +0x94ec 0x80a5 +0x94ed 0x88ab +0x94ee 0x8ab9 +0x94ef 0x8cbb +0x94f0 0x907f +0x94f1 0x975e +0x94f2 0x98db +0x94f3 0x6a0b +0x94f4 0x7c38 +0x94f5 0x5099 +0x94f6 0x5c3e +0x94f7 0x5fae +0x94f8 0x6787 +0x94f9 0x6bd8 +0x94fa 0x7435 +0x94fb 0x7709 +0x94fc 0x7f8e +0x9540 0x9f3b +0x9541 0x67ca +0x9542 0x7a17 +0x9543 0x5339 +0x9544 0x758b +0x9545 0x9aed +0x9546 0x5f66 +0x9547 0x819d +0x9548 0x83f1 +0x9549 0x8098 +0x954a 0x5f3c +0x954b 0x5fc5 +0x954c 0x7562 +0x954d 0x7b46 +0x954e 0x903c +0x954f 0x6867 +0x9550 0x59eb +0x9551 0x5a9b +0x9552 0x7d10 +0x9553 0x767e +0x9554 0x8b2c +0x9555 0x4ff5 +0x9556 0x5f6a +0x9557 0x6a19 +0x9558 0x6c37 +0x9559 0x6f02 +0x955a 0x74e2 +0x955b 0x7968 +0x955c 0x8868 +0x955d 0x8a55 +0x955e 0x8c79 +0x955f 0x5edf +0x9560 0x63cf +0x9561 0x75c5 +0x9562 0x79d2 +0x9563 0x82d7 +0x9564 0x9328 +0x9565 0x92f2 +0x9566 0x849c +0x9567 0x86ed +0x9568 0x9c2d +0x9569 0x54c1 +0x956a 0x5f6c +0x956b 0x658c +0x956c 0x6d5c +0x956d 0x7015 +0x956e 0x8ca7 +0x956f 0x8cd3 +0x9570 0x983b +0x9571 0x654f +0x9572 0x74f6 +0x9573 0x4e0d +0x9574 0x4ed8 +0x9575 0x57e0 +0x9576 0x592b +0x9577 0x5a66 +0x9578 0x5bcc +0x9579 0x51a8 +0x957a 0x5e03 +0x957b 0x5e9c +0x957c 0x6016 +0x957d 0x6276 +0x957e 0x6577 +0x9580 0x65a7 +0x9581 0x666e +0x9582 0x6d6e +0x9583 0x7236 +0x9584 0x7b26 +0x9585 0x8150 +0x9586 0x819a +0x9587 0x8299 +0x9588 0x8b5c +0x9589 0x8ca0 +0x958a 0x8ce6 +0x958b 0x8d74 +0x958c 0x961c +0x958d 0x9644 +0x958e 0x4fae +0x958f 0x64ab +0x9590 0x6b66 +0x9591 0x821e +0x9592 0x8461 +0x9593 0x856a +0x9594 0x90e8 +0x9595 0x5c01 +0x9596 0x6953 +0x9597 0x98a8 +0x9598 0x847a +0x9599 0x8557 +0x959a 0x4f0f +0x959b 0x526f +0x959c 0x5fa9 +0x959d 0x5e45 +0x959e 0x670d +0x959f 0x798f +0x95a0 0x8179 +0x95a1 0x8907 +0x95a2 0x8986 +0x95a3 0x6df5 +0x95a4 0x5f17 +0x95a5 0x6255 +0x95a6 0x6cb8 +0x95a7 0x4ecf +0x95a8 0x7269 +0x95a9 0x9b92 +0x95aa 0x5206 +0x95ab 0x543b +0x95ac 0x5674 +0x95ad 0x58b3 +0x95ae 0x61a4 +0x95af 0x626e +0x95b0 0x711a +0x95b1 0x596e +0x95b2 0x7c89 +0x95b3 0x7cde +0x95b4 0x7d1b +0x95b5 0x96f0 +0x95b6 0x6587 +0x95b7 0x805e +0x95b8 0x4e19 +0x95b9 0x4f75 +0x95ba 0x5175 +0x95bb 0x5840 +0x95bc 0x5e63 +0x95bd 0x5e73 +0x95be 0x5f0a +0x95bf 0x67c4 +0x95c0 0x4e26 +0x95c1 0x853d +0x95c2 0x9589 +0x95c3 0x965b +0x95c4 0x7c73 +0x95c5 0x9801 +0x95c6 0x50fb +0x95c7 0x58c1 +0x95c8 0x7656 +0x95c9 0x78a7 +0x95ca 0x5225 +0x95cb 0x77a5 +0x95cc 0x8511 +0x95cd 0x7b86 +0x95ce 0x504f +0x95cf 0x5909 +0x95d0 0x7247 +0x95d1 0x7bc7 +0x95d2 0x7de8 +0x95d3 0x8fba +0x95d4 0x8fd4 +0x95d5 0x904d +0x95d6 0x4fbf +0x95d7 0x52c9 +0x95d8 0x5a29 +0x95d9 0x5f01 +0x95da 0x97ad +0x95db 0x4fdd +0x95dc 0x8217 +0x95dd 0x92ea +0x95de 0x5703 +0x95df 0x6355 +0x95e0 0x6b69 +0x95e1 0x752b +0x95e2 0x88dc +0x95e3 0x8f14 +0x95e4 0x7a42 +0x95e5 0x52df +0x95e6 0x5893 +0x95e7 0x6155 +0x95e8 0x620a +0x95e9 0x66ae +0x95ea 0x6bcd +0x95eb 0x7c3f +0x95ec 0x83e9 +0x95ed 0x5023 +0x95ee 0x4ff8 +0x95ef 0x5305 +0x95f0 0x5446 +0x95f1 0x5831 +0x95f2 0x5949 +0x95f3 0x5b9d +0x95f4 0x5cf0 +0x95f5 0x5cef +0x95f6 0x5d29 +0x95f7 0x5e96 +0x95f8 0x62b1 +0x95f9 0x6367 +0x95fa 0x653e +0x95fb 0x65b9 +0x95fc 0x670b +0x9640 0x6cd5 +0x9641 0x6ce1 +0x9642 0x70f9 +0x9643 0x7832 +0x9644 0x7e2b +0x9645 0x80de +0x9646 0x82b3 +0x9647 0x840c +0x9648 0x84ec +0x9649 0x8702 +0x964a 0x8912 +0x964b 0x8a2a +0x964c 0x8c4a +0x964d 0x90a6 +0x964e 0x92d2 +0x964f 0x98fd +0x9650 0x9cf3 +0x9651 0x9d6c +0x9652 0x4e4f +0x9653 0x4ea1 +0x9654 0x508d +0x9655 0x5256 +0x9656 0x574a +0x9657 0x59a8 +0x9658 0x5e3d +0x9659 0x5fd8 +0x965a 0x5fd9 +0x965b 0x623f +0x965c 0x66b4 +0x965d 0x671b +0x965e 0x67d0 +0x965f 0x68d2 +0x9660 0x5192 +0x9661 0x7d21 +0x9662 0x80aa +0x9663 0x81a8 +0x9664 0x8b00 +0x9665 0x8c8c +0x9666 0x8cbf +0x9667 0x927e +0x9668 0x9632 +0x9669 0x5420 +0x966a 0x982c +0x966b 0x5317 +0x966c 0x50d5 +0x966d 0x535c +0x966e 0x58a8 +0x966f 0x64b2 +0x9670 0x6734 +0x9671 0x7267 +0x9672 0x7766 +0x9673 0x7a46 +0x9674 0x91e6 +0x9675 0x52c3 +0x9676 0x6ca1 +0x9677 0x6b86 +0x9678 0x5800 +0x9679 0x5e4c +0x967a 0x5954 +0x967b 0x672c +0x967c 0x7ffb +0x967d 0x51e1 +0x967e 0x76c6 +0x9680 0x6469 +0x9681 0x78e8 +0x9682 0x9b54 +0x9683 0x9ebb +0x9684 0x57cb +0x9685 0x59b9 +0x9686 0x6627 +0x9687 0x679a +0x9688 0x6bce +0x9689 0x54e9 +0x968a 0x69d9 +0x968b 0x5e55 +0x968c 0x819c +0x968d 0x6795 +0x968e 0x9baa +0x968f 0x67fe +0x9690 0x9c52 +0x9691 0x685d +0x9692 0x4ea6 +0x9693 0x4fe3 +0x9694 0x53c8 +0x9695 0x62b9 +0x9696 0x672b +0x9697 0x6cab +0x9698 0x8fc4 +0x9699 0x4fad +0x969a 0x7e6d +0x969b 0x9ebf +0x969c 0x4e07 +0x969d 0x6162 +0x969e 0x6e80 +0x969f 0x6f2b +0x96a0 0x8513 +0x96a1 0x5473 +0x96a2 0x672a +0x96a3 0x9b45 +0x96a4 0x5df3 +0x96a5 0x7b95 +0x96a6 0x5cac +0x96a7 0x5bc6 +0x96a8 0x871c +0x96a9 0x6e4a +0x96aa 0x84d1 +0x96ab 0x7a14 +0x96ac 0x8108 +0x96ad 0x5999 +0x96ae 0x7c8d +0x96af 0x6c11 +0x96b0 0x7720 +0x96b1 0x52d9 +0x96b2 0x5922 +0x96b3 0x7121 +0x96b4 0x725f +0x96b5 0x77db +0x96b6 0x9727 +0x96b7 0x9d61 +0x96b8 0x690b +0x96b9 0x5a7f +0x96ba 0x5a18 +0x96bb 0x51a5 +0x96bc 0x540d +0x96bd 0x547d +0x96be 0x660e +0x96bf 0x76df +0x96c0 0x8ff7 +0x96c1 0x9298 +0x96c2 0x9cf4 +0x96c3 0x59ea +0x96c4 0x725d +0x96c5 0x6ec5 +0x96c6 0x514d +0x96c7 0x68c9 +0x96c8 0x7dbf +0x96c9 0x7dec +0x96ca 0x9762 +0x96cb 0x9eba +0x96cc 0x6478 +0x96cd 0x6a21 +0x96ce 0x8302 +0x96cf 0x5984 +0x96d0 0x5b5f +0x96d1 0x6bdb +0x96d2 0x731b +0x96d3 0x76f2 +0x96d4 0x7db2 +0x96d5 0x8017 +0x96d6 0x8499 +0x96d7 0x5132 +0x96d8 0x6728 +0x96d9 0x9ed9 +0x96da 0x76ee +0x96db 0x6762 +0x96dc 0x52ff +0x96dd 0x9905 +0x96de 0x5c24 +0x96df 0x623b +0x96e0 0x7c7e +0x96e1 0x8cb0 +0x96e2 0x554f +0x96e3 0x60b6 +0x96e4 0x7d0b +0x96e5 0x9580 +0x96e6 0x5301 +0x96e7 0x4e5f +0x96e8 0x51b6 +0x96e9 0x591c +0x96ea 0x723a +0x96eb 0x8036 +0x96ec 0x91ce +0x96ed 0x5f25 +0x96ee 0x77e2 +0x96ef 0x5384 +0x96f0 0x5f79 +0x96f1 0x7d04 +0x96f2 0x85ac +0x96f3 0x8a33 +0x96f4 0x8e8d +0x96f5 0x9756 +0x96f6 0x67f3 +0x96f7 0x85ae +0x96f8 0x9453 +0x96f9 0x6109 +0x96fa 0x6108 +0x96fb 0x6cb9 +0x96fc 0x7652 +0x9740 0x8aed +0x9741 0x8f38 +0x9742 0x552f +0x9743 0x4f51 +0x9744 0x512a +0x9745 0x52c7 +0x9746 0x53cb +0x9747 0x5ba5 +0x9748 0x5e7d +0x9749 0x60a0 +0x974a 0x6182 +0x974b 0x63d6 +0x974c 0x6709 +0x974d 0x67da +0x974e 0x6e67 +0x974f 0x6d8c +0x9750 0x7336 +0x9751 0x7337 +0x9752 0x7531 +0x9753 0x7950 +0x9754 0x88d5 +0x9755 0x8a98 +0x9756 0x904a +0x9757 0x9091 +0x9758 0x90f5 +0x9759 0x96c4 +0x975a 0x878d +0x975b 0x5915 +0x975c 0x4e88 +0x975d 0x4f59 +0x975e 0x4e0e +0x975f 0x8a89 +0x9760 0x8f3f +0x9761 0x9810 +0x9762 0x50ad +0x9763 0x5e7c +0x9764 0x5996 +0x9765 0x5bb9 +0x9766 0x5eb8 +0x9767 0x63da +0x9768 0x63fa +0x9769 0x64c1 +0x976a 0x66dc +0x976b 0x694a +0x976c 0x69d8 +0x976d 0x6d0b +0x976e 0x6eb6 +0x976f 0x7194 +0x9770 0x7528 +0x9771 0x7aaf +0x9772 0x7f8a +0x9773 0x8000 +0x9774 0x8449 +0x9775 0x84c9 +0x9776 0x8981 +0x9777 0x8b21 +0x9778 0x8e0a +0x9779 0x9065 +0x977a 0x967d +0x977b 0x990a +0x977c 0x617e +0x977d 0x6291 +0x977e 0x6b32 +0x9780 0x6c83 +0x9781 0x6d74 +0x9782 0x7fcc +0x9783 0x7ffc +0x9784 0x6dc0 +0x9785 0x7f85 +0x9786 0x87ba +0x9787 0x88f8 +0x9788 0x6765 +0x9789 0x83b1 +0x978a 0x983c +0x978b 0x96f7 +0x978c 0x6d1b +0x978d 0x7d61 +0x978e 0x843d +0x978f 0x916a +0x9790 0x4e71 +0x9791 0x5375 +0x9792 0x5d50 +0x9793 0x6b04 +0x9794 0x6feb +0x9795 0x85cd +0x9796 0x862d +0x9797 0x89a7 +0x9798 0x5229 +0x9799 0x540f +0x979a 0x5c65 +0x979b 0x674e +0x979c 0x68a8 +0x979d 0x7406 +0x979e 0x7483 +0x979f 0x75e2 +0x97a0 0x88cf +0x97a1 0x88e1 +0x97a2 0x91cc +0x97a3 0x96e2 +0x97a4 0x9678 +0x97a5 0x5f8b +0x97a6 0x7387 +0x97a7 0x7acb +0x97a8 0x844e +0x97a9 0x63a0 +0x97aa 0x7565 +0x97ab 0x5289 +0x97ac 0x6d41 +0x97ad 0x6e9c +0x97ae 0x7409 +0x97af 0x7559 +0x97b0 0x786b +0x97b1 0x7c92 +0x97b2 0x9686 +0x97b3 0x7adc +0x97b4 0x9f8d +0x97b5 0x4fb6 +0x97b6 0x616e +0x97b7 0x65c5 +0x97b8 0x865c +0x97b9 0x4e86 +0x97ba 0x4eae +0x97bb 0x50da +0x97bc 0x4e21 +0x97bd 0x51cc +0x97be 0x5bee +0x97bf 0x6599 +0x97c0 0x6881 +0x97c1 0x6dbc +0x97c2 0x731f +0x97c3 0x7642 +0x97c4 0x77ad +0x97c5 0x7a1c +0x97c6 0x7ce7 +0x97c7 0x826f +0x97c8 0x8ad2 +0x97c9 0x907c +0x97ca 0x91cf +0x97cb 0x9675 +0x97cc 0x9818 +0x97cd 0x529b +0x97ce 0x7dd1 +0x97cf 0x502b +0x97d0 0x5398 +0x97d1 0x6797 +0x97d2 0x6dcb +0x97d3 0x71d0 +0x97d4 0x7433 +0x97d5 0x81e8 +0x97d6 0x8f2a +0x97d7 0x96a3 +0x97d8 0x9c57 +0x97d9 0x9e9f +0x97da 0x7460 +0x97db 0x5841 +0x97dc 0x6d99 +0x97dd 0x7d2f +0x97de 0x985e +0x97df 0x4ee4 +0x97e0 0x4f36 +0x97e1 0x4f8b +0x97e2 0x51b7 +0x97e3 0x52b1 +0x97e4 0x5dba +0x97e5 0x601c +0x97e6 0x73b2 +0x97e7 0x793c +0x97e8 0x82d3 +0x97e9 0x9234 +0x97ea 0x96b7 +0x97eb 0x96f6 +0x97ec 0x970a +0x97ed 0x9e97 +0x97ee 0x9f62 +0x97ef 0x66a6 +0x97f0 0x6b74 +0x97f1 0x5217 +0x97f2 0x52a3 +0x97f3 0x70c8 +0x97f4 0x88c2 +0x97f5 0x5ec9 +0x97f6 0x604b +0x97f7 0x6190 +0x97f8 0x6f23 +0x97f9 0x7149 +0x97fa 0x7c3e +0x97fb 0x7df4 +0x97fc 0x806f +0x9840 0x84ee +0x9841 0x9023 +0x9842 0x932c +0x9843 0x5442 +0x9844 0x9b6f +0x9845 0x6ad3 +0x9846 0x7089 +0x9847 0x8cc2 +0x9848 0x8def +0x9849 0x9732 +0x984a 0x52b4 +0x984b 0x5a41 +0x984c 0x5eca +0x984d 0x5f04 +0x984e 0x6717 +0x984f 0x697c +0x9850 0x6994 +0x9851 0x6d6a +0x9852 0x6f0f +0x9853 0x7262 +0x9854 0x72fc +0x9855 0x7bed +0x9856 0x8001 +0x9857 0x807e +0x9858 0x874b +0x9859 0x90ce +0x985a 0x516d +0x985b 0x9e93 +0x985c 0x7984 +0x985d 0x808b +0x985e 0x9332 +0x985f 0x8ad6 +0x9860 0x502d +0x9861 0x548c +0x9862 0x8a71 +0x9863 0x6b6a +0x9864 0x8cc4 +0x9865 0x8107 +0x9866 0x60d1 +0x9867 0x67a0 +0x9868 0x9df2 +0x9869 0x4e99 +0x986a 0x4e98 +0x986b 0x9c10 +0x986c 0x8a6b +0x986d 0x85c1 +0x986e 0x8568 +0x986f 0x6900 +0x9870 0x6e7e +0x9871 0x7897 +0x9872 0x8155 +0x989f 0x5f0c +0x98a0 0x4e10 +0x98a1 0x4e15 +0x98a2 0x4e2a +0x98a3 0x4e31 +0x98a4 0x4e36 +0x98a5 0x4e3c +0x98a6 0x4e3f +0x98a7 0x4e42 +0x98a8 0x4e56 +0x98a9 0x4e58 +0x98aa 0x4e82 +0x98ab 0x4e85 +0x98ac 0x8c6b +0x98ad 0x4e8a +0x98ae 0x8212 +0x98af 0x5f0d +0x98b0 0x4e8e +0x98b1 0x4e9e +0x98b2 0x4e9f +0x98b3 0x4ea0 +0x98b4 0x4ea2 +0x98b5 0x4eb0 +0x98b6 0x4eb3 +0x98b7 0x4eb6 +0x98b8 0x4ece +0x98b9 0x4ecd +0x98ba 0x4ec4 +0x98bb 0x4ec6 +0x98bc 0x4ec2 +0x98bd 0x4ed7 +0x98be 0x4ede +0x98bf 0x4eed +0x98c0 0x4edf +0x98c1 0x4ef7 +0x98c2 0x4f09 +0x98c3 0x4f5a +0x98c4 0x4f30 +0x98c5 0x4f5b +0x98c6 0x4f5d +0x98c7 0x4f57 +0x98c8 0x4f47 +0x98c9 0x4f76 +0x98ca 0x4f88 +0x98cb 0x4f8f +0x98cc 0x4f98 +0x98cd 0x4f7b +0x98ce 0x4f69 +0x98cf 0x4f70 +0x98d0 0x4f91 +0x98d1 0x4f6f +0x98d2 0x4f86 +0x98d3 0x4f96 +0x98d4 0x5118 +0x98d5 0x4fd4 +0x98d6 0x4fdf +0x98d7 0x4fce +0x98d8 0x4fd8 +0x98d9 0x4fdb +0x98da 0x4fd1 +0x98db 0x4fda +0x98dc 0x4fd0 +0x98dd 0x4fe4 +0x98de 0x4fe5 +0x98df 0x501a +0x98e0 0x5028 +0x98e1 0x5014 +0x98e2 0x502a +0x98e3 0x5025 +0x98e4 0x5005 +0x98e5 0x4f1c +0x98e6 0x4ff6 +0x98e7 0x5021 +0x98e8 0x5029 +0x98e9 0x502c +0x98ea 0x4ffe +0x98eb 0x4fef +0x98ec 0x5011 +0x98ed 0x5006 +0x98ee 0x5043 +0x98ef 0x5047 +0x98f0 0x6703 +0x98f1 0x5055 +0x98f2 0x5050 +0x98f3 0x5048 +0x98f4 0x505a +0x98f5 0x5056 +0x98f6 0x506c +0x98f7 0x5078 +0x98f8 0x5080 +0x98f9 0x509a +0x98fa 0x5085 +0x98fb 0x50b4 +0x98fc 0x50b2 +0x9940 0x50c9 +0x9941 0x50ca +0x9942 0x50b3 +0x9943 0x50c2 +0x9944 0x50d6 +0x9945 0x50de +0x9946 0x50e5 +0x9947 0x50ed +0x9948 0x50e3 +0x9949 0x50ee +0x994a 0x50f9 +0x994b 0x50f5 +0x994c 0x5109 +0x994d 0x5101 +0x994e 0x5102 +0x994f 0x5116 +0x9950 0x5115 +0x9951 0x5114 +0x9952 0x511a +0x9953 0x5121 +0x9954 0x513a +0x9955 0x5137 +0x9956 0x513c +0x9957 0x513b +0x9958 0x513f +0x9959 0x5140 +0x995a 0x5152 +0x995b 0x514c +0x995c 0x5154 +0x995d 0x5162 +0x995e 0x7af8 +0x995f 0x5169 +0x9960 0x516a +0x9961 0x516e +0x9962 0x5180 +0x9963 0x5182 +0x9964 0x56d8 +0x9965 0x518c +0x9966 0x5189 +0x9967 0x518f +0x9968 0x5191 +0x9969 0x5193 +0x996a 0x5195 +0x996b 0x5196 +0x996c 0x51a4 +0x996d 0x51a6 +0x996e 0x51a2 +0x996f 0x51a9 +0x9970 0x51aa +0x9971 0x51ab +0x9972 0x51b3 +0x9973 0x51b1 +0x9974 0x51b2 +0x9975 0x51b0 +0x9976 0x51b5 +0x9977 0x51bd +0x9978 0x51c5 +0x9979 0x51c9 +0x997a 0x51db +0x997b 0x51e0 +0x997c 0x8655 +0x997d 0x51e9 +0x997e 0x51ed +0x9980 0x51f0 +0x9981 0x51f5 +0x9982 0x51fe +0x9983 0x5204 +0x9984 0x520b +0x9985 0x5214 +0x9986 0x520e +0x9987 0x5227 +0x9988 0x522a +0x9989 0x522e +0x998a 0x5233 +0x998b 0x5239 +0x998c 0x524f +0x998d 0x5244 +0x998e 0x524b +0x998f 0x524c +0x9990 0x525e +0x9991 0x5254 +0x9992 0x526a +0x9993 0x5274 +0x9994 0x5269 +0x9995 0x5273 +0x9996 0x527f +0x9997 0x527d +0x9998 0x528d +0x9999 0x5294 +0x999a 0x5292 +0x999b 0x5271 +0x999c 0x5288 +0x999d 0x5291 +0x999e 0x8fa8 +0x999f 0x8fa7 +0x99a0 0x52ac +0x99a1 0x52ad +0x99a2 0x52bc +0x99a3 0x52b5 +0x99a4 0x52c1 +0x99a5 0x52cd +0x99a6 0x52d7 +0x99a7 0x52de +0x99a8 0x52e3 +0x99a9 0x52e6 +0x99aa 0x98ed +0x99ab 0x52e0 +0x99ac 0x52f3 +0x99ad 0x52f5 +0x99ae 0x52f8 +0x99af 0x52f9 +0x99b0 0x5306 +0x99b1 0x5308 +0x99b2 0x7538 +0x99b3 0x530d +0x99b4 0x5310 +0x99b5 0x530f +0x99b6 0x5315 +0x99b7 0x531a +0x99b8 0x5323 +0x99b9 0x532f +0x99ba 0x5331 +0x99bb 0x5333 +0x99bc 0x5338 +0x99bd 0x5340 +0x99be 0x5346 +0x99bf 0x5345 +0x99c0 0x4e17 +0x99c1 0x5349 +0x99c2 0x534d +0x99c3 0x51d6 +0x99c4 0x535e +0x99c5 0x5369 +0x99c6 0x536e +0x99c7 0x5918 +0x99c8 0x537b +0x99c9 0x5377 +0x99ca 0x5382 +0x99cb 0x5396 +0x99cc 0x53a0 +0x99cd 0x53a6 +0x99ce 0x53a5 +0x99cf 0x53ae +0x99d0 0x53b0 +0x99d1 0x53b6 +0x99d2 0x53c3 +0x99d3 0x7c12 +0x99d4 0x96d9 +0x99d5 0x53df +0x99d6 0x66fc +0x99d7 0x71ee +0x99d8 0x53ee +0x99d9 0x53e8 +0x99da 0x53ed +0x99db 0x53fa +0x99dc 0x5401 +0x99dd 0x543d +0x99de 0x5440 +0x99df 0x542c +0x99e0 0x542d +0x99e1 0x543c +0x99e2 0x542e +0x99e3 0x5436 +0x99e4 0x5429 +0x99e5 0x541d +0x99e6 0x544e +0x99e7 0x548f +0x99e8 0x5475 +0x99e9 0x548e +0x99ea 0x545f +0x99eb 0x5471 +0x99ec 0x5477 +0x99ed 0x5470 +0x99ee 0x5492 +0x99ef 0x547b +0x99f0 0x5480 +0x99f1 0x5476 +0x99f2 0x5484 +0x99f3 0x5490 +0x99f4 0x5486 +0x99f5 0x54c7 +0x99f6 0x54a2 +0x99f7 0x54b8 +0x99f8 0x54a5 +0x99f9 0x54ac +0x99fa 0x54c4 +0x99fb 0x54c8 +0x99fc 0x54a8 +0x9a40 0x54ab +0x9a41 0x54c2 +0x9a42 0x54a4 +0x9a43 0x54be +0x9a44 0x54bc +0x9a45 0x54d8 +0x9a46 0x54e5 +0x9a47 0x54e6 +0x9a48 0x550f +0x9a49 0x5514 +0x9a4a 0x54fd +0x9a4b 0x54ee +0x9a4c 0x54ed +0x9a4d 0x54fa +0x9a4e 0x54e2 +0x9a4f 0x5539 +0x9a50 0x5540 +0x9a51 0x5563 +0x9a52 0x554c +0x9a53 0x552e +0x9a54 0x555c +0x9a55 0x5545 +0x9a56 0x5556 +0x9a57 0x5557 +0x9a58 0x5538 +0x9a59 0x5533 +0x9a5a 0x555d +0x9a5b 0x5599 +0x9a5c 0x5580 +0x9a5d 0x54af +0x9a5e 0x558a +0x9a5f 0x559f +0x9a60 0x557b +0x9a61 0x557e +0x9a62 0x5598 +0x9a63 0x559e +0x9a64 0x55ae +0x9a65 0x557c +0x9a66 0x5583 +0x9a67 0x55a9 +0x9a68 0x5587 +0x9a69 0x55a8 +0x9a6a 0x55da +0x9a6b 0x55c5 +0x9a6c 0x55df +0x9a6d 0x55c4 +0x9a6e 0x55dc +0x9a6f 0x55e4 +0x9a70 0x55d4 +0x9a71 0x5614 +0x9a72 0x55f7 +0x9a73 0x5616 +0x9a74 0x55fe +0x9a75 0x55fd +0x9a76 0x561b +0x9a77 0x55f9 +0x9a78 0x564e +0x9a79 0x5650 +0x9a7a 0x71df +0x9a7b 0x5634 +0x9a7c 0x5636 +0x9a7d 0x5632 +0x9a7e 0x5638 +0x9a80 0x566b +0x9a81 0x5664 +0x9a82 0x562f +0x9a83 0x566c +0x9a84 0x566a +0x9a85 0x5686 +0x9a86 0x5680 +0x9a87 0x568a +0x9a88 0x56a0 +0x9a89 0x5694 +0x9a8a 0x568f +0x9a8b 0x56a5 +0x9a8c 0x56ae +0x9a8d 0x56b6 +0x9a8e 0x56b4 +0x9a8f 0x56c2 +0x9a90 0x56bc +0x9a91 0x56c1 +0x9a92 0x56c3 +0x9a93 0x56c0 +0x9a94 0x56c8 +0x9a95 0x56ce +0x9a96 0x56d1 +0x9a97 0x56d3 +0x9a98 0x56d7 +0x9a99 0x56ee +0x9a9a 0x56f9 +0x9a9b 0x5700 +0x9a9c 0x56ff +0x9a9d 0x5704 +0x9a9e 0x5709 +0x9a9f 0x5708 +0x9aa0 0x570b +0x9aa1 0x570d +0x9aa2 0x5713 +0x9aa3 0x5718 +0x9aa4 0x5716 +0x9aa5 0x55c7 +0x9aa6 0x571c +0x9aa7 0x5726 +0x9aa8 0x5737 +0x9aa9 0x5738 +0x9aaa 0x574e +0x9aab 0x573b +0x9aac 0x5740 +0x9aad 0x574f +0x9aae 0x5769 +0x9aaf 0x57c0 +0x9ab0 0x5788 +0x9ab1 0x5761 +0x9ab2 0x577f +0x9ab3 0x5789 +0x9ab4 0x5793 +0x9ab5 0x57a0 +0x9ab6 0x57b3 +0x9ab7 0x57a4 +0x9ab8 0x57aa +0x9ab9 0x57b0 +0x9aba 0x57c3 +0x9abb 0x57c6 +0x9abc 0x57d4 +0x9abd 0x57d2 +0x9abe 0x57d3 +0x9abf 0x580a +0x9ac0 0x57d6 +0x9ac1 0x57e3 +0x9ac2 0x580b +0x9ac3 0x5819 +0x9ac4 0x581d +0x9ac5 0x5872 +0x9ac6 0x5821 +0x9ac7 0x5862 +0x9ac8 0x584b +0x9ac9 0x5870 +0x9aca 0x6bc0 +0x9acb 0x5852 +0x9acc 0x583d +0x9acd 0x5879 +0x9ace 0x5885 +0x9acf 0x58b9 +0x9ad0 0x589f +0x9ad1 0x58ab +0x9ad2 0x58ba +0x9ad3 0x58de +0x9ad4 0x58bb +0x9ad5 0x58b8 +0x9ad6 0x58ae +0x9ad7 0x58c5 +0x9ad8 0x58d3 +0x9ad9 0x58d1 +0x9ada 0x58d7 +0x9adb 0x58d9 +0x9adc 0x58d8 +0x9add 0x58e5 +0x9ade 0x58dc +0x9adf 0x58e4 +0x9ae0 0x58df +0x9ae1 0x58ef +0x9ae2 0x58fa +0x9ae3 0x58f9 +0x9ae4 0x58fb +0x9ae5 0x58fc +0x9ae6 0x58fd +0x9ae7 0x5902 +0x9ae8 0x590a +0x9ae9 0x5910 +0x9aea 0x591b +0x9aeb 0x68a6 +0x9aec 0x5925 +0x9aed 0x592c +0x9aee 0x592d +0x9aef 0x5932 +0x9af0 0x5938 +0x9af1 0x593e +0x9af2 0x7ad2 +0x9af3 0x5955 +0x9af4 0x5950 +0x9af5 0x594e +0x9af6 0x595a +0x9af7 0x5958 +0x9af8 0x5962 +0x9af9 0x5960 +0x9afa 0x5967 +0x9afb 0x596c +0x9afc 0x5969 +0x9b40 0x5978 +0x9b41 0x5981 +0x9b42 0x599d +0x9b43 0x4f5e +0x9b44 0x4fab +0x9b45 0x59a3 +0x9b46 0x59b2 +0x9b47 0x59c6 +0x9b48 0x59e8 +0x9b49 0x59dc +0x9b4a 0x598d +0x9b4b 0x59d9 +0x9b4c 0x59da +0x9b4d 0x5a25 +0x9b4e 0x5a1f +0x9b4f 0x5a11 +0x9b50 0x5a1c +0x9b51 0x5a09 +0x9b52 0x5a1a +0x9b53 0x5a40 +0x9b54 0x5a6c +0x9b55 0x5a49 +0x9b56 0x5a35 +0x9b57 0x5a36 +0x9b58 0x5a62 +0x9b59 0x5a6a +0x9b5a 0x5a9a +0x9b5b 0x5abc +0x9b5c 0x5abe +0x9b5d 0x5acb +0x9b5e 0x5ac2 +0x9b5f 0x5abd +0x9b60 0x5ae3 +0x9b61 0x5ad7 +0x9b62 0x5ae6 +0x9b63 0x5ae9 +0x9b64 0x5ad6 +0x9b65 0x5afa +0x9b66 0x5afb +0x9b67 0x5b0c +0x9b68 0x5b0b +0x9b69 0x5b16 +0x9b6a 0x5b32 +0x9b6b 0x5ad0 +0x9b6c 0x5b2a +0x9b6d 0x5b36 +0x9b6e 0x5b3e +0x9b6f 0x5b43 +0x9b70 0x5b45 +0x9b71 0x5b40 +0x9b72 0x5b51 +0x9b73 0x5b55 +0x9b74 0x5b5a +0x9b75 0x5b5b +0x9b76 0x5b65 +0x9b77 0x5b69 +0x9b78 0x5b70 +0x9b79 0x5b73 +0x9b7a 0x5b75 +0x9b7b 0x5b78 +0x9b7c 0x6588 +0x9b7d 0x5b7a +0x9b7e 0x5b80 +0x9b80 0x5b83 +0x9b81 0x5ba6 +0x9b82 0x5bb8 +0x9b83 0x5bc3 +0x9b84 0x5bc7 +0x9b85 0x5bc9 +0x9b86 0x5bd4 +0x9b87 0x5bd0 +0x9b88 0x5be4 +0x9b89 0x5be6 +0x9b8a 0x5be2 +0x9b8b 0x5bde +0x9b8c 0x5be5 +0x9b8d 0x5beb +0x9b8e 0x5bf0 +0x9b8f 0x5bf6 +0x9b90 0x5bf3 +0x9b91 0x5c05 +0x9b92 0x5c07 +0x9b93 0x5c08 +0x9b94 0x5c0d +0x9b95 0x5c13 +0x9b96 0x5c20 +0x9b97 0x5c22 +0x9b98 0x5c28 +0x9b99 0x5c38 +0x9b9a 0x5c39 +0x9b9b 0x5c41 +0x9b9c 0x5c46 +0x9b9d 0x5c4e +0x9b9e 0x5c53 +0x9b9f 0x5c50 +0x9ba0 0x5c4f +0x9ba1 0x5b71 +0x9ba2 0x5c6c +0x9ba3 0x5c6e +0x9ba4 0x4e62 +0x9ba5 0x5c76 +0x9ba6 0x5c79 +0x9ba7 0x5c8c +0x9ba8 0x5c91 +0x9ba9 0x5c94 +0x9baa 0x599b +0x9bab 0x5cab +0x9bac 0x5cbb +0x9bad 0x5cb6 +0x9bae 0x5cbc +0x9baf 0x5cb7 +0x9bb0 0x5cc5 +0x9bb1 0x5cbe +0x9bb2 0x5cc7 +0x9bb3 0x5cd9 +0x9bb4 0x5ce9 +0x9bb5 0x5cfd +0x9bb6 0x5cfa +0x9bb7 0x5ced +0x9bb8 0x5d8c +0x9bb9 0x5cea +0x9bba 0x5d0b +0x9bbb 0x5d15 +0x9bbc 0x5d17 +0x9bbd 0x5d5c +0x9bbe 0x5d1f +0x9bbf 0x5d1b +0x9bc0 0x5d11 +0x9bc1 0x5d14 +0x9bc2 0x5d22 +0x9bc3 0x5d1a +0x9bc4 0x5d19 +0x9bc5 0x5d18 +0x9bc6 0x5d4c +0x9bc7 0x5d52 +0x9bc8 0x5d4e +0x9bc9 0x5d4b +0x9bca 0x5d6c +0x9bcb 0x5d73 +0x9bcc 0x5d76 +0x9bcd 0x5d87 +0x9bce 0x5d84 +0x9bcf 0x5d82 +0x9bd0 0x5da2 +0x9bd1 0x5d9d +0x9bd2 0x5dac +0x9bd3 0x5dae +0x9bd4 0x5dbd +0x9bd5 0x5d90 +0x9bd6 0x5db7 +0x9bd7 0x5dbc +0x9bd8 0x5dc9 +0x9bd9 0x5dcd +0x9bda 0x5dd3 +0x9bdb 0x5dd2 +0x9bdc 0x5dd6 +0x9bdd 0x5ddb +0x9bde 0x5deb +0x9bdf 0x5df2 +0x9be0 0x5df5 +0x9be1 0x5e0b +0x9be2 0x5e1a +0x9be3 0x5e19 +0x9be4 0x5e11 +0x9be5 0x5e1b +0x9be6 0x5e36 +0x9be7 0x5e37 +0x9be8 0x5e44 +0x9be9 0x5e43 +0x9bea 0x5e40 +0x9beb 0x5e4e +0x9bec 0x5e57 +0x9bed 0x5e54 +0x9bee 0x5e5f +0x9bef 0x5e62 +0x9bf0 0x5e64 +0x9bf1 0x5e47 +0x9bf2 0x5e75 +0x9bf3 0x5e76 +0x9bf4 0x5e7a +0x9bf5 0x9ebc +0x9bf6 0x5e7f +0x9bf7 0x5ea0 +0x9bf8 0x5ec1 +0x9bf9 0x5ec2 +0x9bfa 0x5ec8 +0x9bfb 0x5ed0 +0x9bfc 0x5ecf +0x9c40 0x5ed6 +0x9c41 0x5ee3 +0x9c42 0x5edd +0x9c43 0x5eda +0x9c44 0x5edb +0x9c45 0x5ee2 +0x9c46 0x5ee1 +0x9c47 0x5ee8 +0x9c48 0x5ee9 +0x9c49 0x5eec +0x9c4a 0x5ef1 +0x9c4b 0x5ef3 +0x9c4c 0x5ef0 +0x9c4d 0x5ef4 +0x9c4e 0x5ef8 +0x9c4f 0x5efe +0x9c50 0x5f03 +0x9c51 0x5f09 +0x9c52 0x5f5d +0x9c53 0x5f5c +0x9c54 0x5f0b +0x9c55 0x5f11 +0x9c56 0x5f16 +0x9c57 0x5f29 +0x9c58 0x5f2d +0x9c59 0x5f38 +0x9c5a 0x5f41 +0x9c5b 0x5f48 +0x9c5c 0x5f4c +0x9c5d 0x5f4e +0x9c5e 0x5f2f +0x9c5f 0x5f51 +0x9c60 0x5f56 +0x9c61 0x5f57 +0x9c62 0x5f59 +0x9c63 0x5f61 +0x9c64 0x5f6d +0x9c65 0x5f73 +0x9c66 0x5f77 +0x9c67 0x5f83 +0x9c68 0x5f82 +0x9c69 0x5f7f +0x9c6a 0x5f8a +0x9c6b 0x5f88 +0x9c6c 0x5f91 +0x9c6d 0x5f87 +0x9c6e 0x5f9e +0x9c6f 0x5f99 +0x9c70 0x5f98 +0x9c71 0x5fa0 +0x9c72 0x5fa8 +0x9c73 0x5fad +0x9c74 0x5fbc +0x9c75 0x5fd6 +0x9c76 0x5ffb +0x9c77 0x5fe4 +0x9c78 0x5ff8 +0x9c79 0x5ff1 +0x9c7a 0x5fdd +0x9c7b 0x60b3 +0x9c7c 0x5fff +0x9c7d 0x6021 +0x9c7e 0x6060 +0x9c80 0x6019 +0x9c81 0x6010 +0x9c82 0x6029 +0x9c83 0x600e +0x9c84 0x6031 +0x9c85 0x601b +0x9c86 0x6015 +0x9c87 0x602b +0x9c88 0x6026 +0x9c89 0x600f +0x9c8a 0x603a +0x9c8b 0x605a +0x9c8c 0x6041 +0x9c8d 0x606a +0x9c8e 0x6077 +0x9c8f 0x605f +0x9c90 0x604a +0x9c91 0x6046 +0x9c92 0x604d +0x9c93 0x6063 +0x9c94 0x6043 +0x9c95 0x6064 +0x9c96 0x6042 +0x9c97 0x606c +0x9c98 0x606b +0x9c99 0x6059 +0x9c9a 0x6081 +0x9c9b 0x608d +0x9c9c 0x60e7 +0x9c9d 0x6083 +0x9c9e 0x609a +0x9c9f 0x6084 +0x9ca0 0x609b +0x9ca1 0x6096 +0x9ca2 0x6097 +0x9ca3 0x6092 +0x9ca4 0x60a7 +0x9ca5 0x608b +0x9ca6 0x60e1 +0x9ca7 0x60b8 +0x9ca8 0x60e0 +0x9ca9 0x60d3 +0x9caa 0x60b4 +0x9cab 0x5ff0 +0x9cac 0x60bd +0x9cad 0x60c6 +0x9cae 0x60b5 +0x9caf 0x60d8 +0x9cb0 0x614d +0x9cb1 0x6115 +0x9cb2 0x6106 +0x9cb3 0x60f6 +0x9cb4 0x60f7 +0x9cb5 0x6100 +0x9cb6 0x60f4 +0x9cb7 0x60fa +0x9cb8 0x6103 +0x9cb9 0x6121 +0x9cba 0x60fb +0x9cbb 0x60f1 +0x9cbc 0x610d +0x9cbd 0x610e +0x9cbe 0x6147 +0x9cbf 0x613e +0x9cc0 0x6128 +0x9cc1 0x6127 +0x9cc2 0x614a +0x9cc3 0x613f +0x9cc4 0x613c +0x9cc5 0x612c +0x9cc6 0x6134 +0x9cc7 0x613d +0x9cc8 0x6142 +0x9cc9 0x6144 +0x9cca 0x6173 +0x9ccb 0x6177 +0x9ccc 0x6158 +0x9ccd 0x6159 +0x9cce 0x615a +0x9ccf 0x616b +0x9cd0 0x6174 +0x9cd1 0x616f +0x9cd2 0x6165 +0x9cd3 0x6171 +0x9cd4 0x615f +0x9cd5 0x615d +0x9cd6 0x6153 +0x9cd7 0x6175 +0x9cd8 0x6199 +0x9cd9 0x6196 +0x9cda 0x6187 +0x9cdb 0x61ac +0x9cdc 0x6194 +0x9cdd 0x619a +0x9cde 0x618a +0x9cdf 0x6191 +0x9ce0 0x61ab +0x9ce1 0x61ae +0x9ce2 0x61cc +0x9ce3 0x61ca +0x9ce4 0x61c9 +0x9ce5 0x61f7 +0x9ce6 0x61c8 +0x9ce7 0x61c3 +0x9ce8 0x61c6 +0x9ce9 0x61ba +0x9cea 0x61cb +0x9ceb 0x7f79 +0x9cec 0x61cd +0x9ced 0x61e6 +0x9cee 0x61e3 +0x9cef 0x61f6 +0x9cf0 0x61fa +0x9cf1 0x61f4 +0x9cf2 0x61ff +0x9cf3 0x61fd +0x9cf4 0x61fc +0x9cf5 0x61fe +0x9cf6 0x6200 +0x9cf7 0x6208 +0x9cf8 0x6209 +0x9cf9 0x620d +0x9cfa 0x620c +0x9cfb 0x6214 +0x9cfc 0x621b +0x9d40 0x621e +0x9d41 0x6221 +0x9d42 0x622a +0x9d43 0x622e +0x9d44 0x6230 +0x9d45 0x6232 +0x9d46 0x6233 +0x9d47 0x6241 +0x9d48 0x624e +0x9d49 0x625e +0x9d4a 0x6263 +0x9d4b 0x625b +0x9d4c 0x6260 +0x9d4d 0x6268 +0x9d4e 0x627c +0x9d4f 0x6282 +0x9d50 0x6289 +0x9d51 0x627e +0x9d52 0x6292 +0x9d53 0x6293 +0x9d54 0x6296 +0x9d55 0x62d4 +0x9d56 0x6283 +0x9d57 0x6294 +0x9d58 0x62d7 +0x9d59 0x62d1 +0x9d5a 0x62bb +0x9d5b 0x62cf +0x9d5c 0x62ff +0x9d5d 0x62c6 +0x9d5e 0x64d4 +0x9d5f 0x62c8 +0x9d60 0x62dc +0x9d61 0x62cc +0x9d62 0x62ca +0x9d63 0x62c2 +0x9d64 0x62c7 +0x9d65 0x629b +0x9d66 0x62c9 +0x9d67 0x630c +0x9d68 0x62ee +0x9d69 0x62f1 +0x9d6a 0x6327 +0x9d6b 0x6302 +0x9d6c 0x6308 +0x9d6d 0x62ef +0x9d6e 0x62f5 +0x9d6f 0x6350 +0x9d70 0x633e +0x9d71 0x634d +0x9d72 0x641c +0x9d73 0x634f +0x9d74 0x6396 +0x9d75 0x638e +0x9d76 0x6380 +0x9d77 0x63ab +0x9d78 0x6376 +0x9d79 0x63a3 +0x9d7a 0x638f +0x9d7b 0x6389 +0x9d7c 0x639f +0x9d7d 0x63b5 +0x9d7e 0x636b +0x9d80 0x6369 +0x9d81 0x63be +0x9d82 0x63e9 +0x9d83 0x63c0 +0x9d84 0x63c6 +0x9d85 0x63e3 +0x9d86 0x63c9 +0x9d87 0x63d2 +0x9d88 0x63f6 +0x9d89 0x63c4 +0x9d8a 0x6416 +0x9d8b 0x6434 +0x9d8c 0x6406 +0x9d8d 0x6413 +0x9d8e 0x6426 +0x9d8f 0x6436 +0x9d90 0x651d +0x9d91 0x6417 +0x9d92 0x6428 +0x9d93 0x640f +0x9d94 0x6467 +0x9d95 0x646f +0x9d96 0x6476 +0x9d97 0x644e +0x9d98 0x652a +0x9d99 0x6495 +0x9d9a 0x6493 +0x9d9b 0x64a5 +0x9d9c 0x64a9 +0x9d9d 0x6488 +0x9d9e 0x64bc +0x9d9f 0x64da +0x9da0 0x64d2 +0x9da1 0x64c5 +0x9da2 0x64c7 +0x9da3 0x64bb +0x9da4 0x64d8 +0x9da5 0x64c2 +0x9da6 0x64f1 +0x9da7 0x64e7 +0x9da8 0x8209 +0x9da9 0x64e0 +0x9daa 0x64e1 +0x9dab 0x62ac +0x9dac 0x64e3 +0x9dad 0x64ef +0x9dae 0x652c +0x9daf 0x64f6 +0x9db0 0x64f4 +0x9db1 0x64f2 +0x9db2 0x64fa +0x9db3 0x6500 +0x9db4 0x64fd +0x9db5 0x6518 +0x9db6 0x651c +0x9db7 0x6505 +0x9db8 0x6524 +0x9db9 0x6523 +0x9dba 0x652b +0x9dbb 0x6534 +0x9dbc 0x6535 +0x9dbd 0x6537 +0x9dbe 0x6536 +0x9dbf 0x6538 +0x9dc0 0x754b +0x9dc1 0x6548 +0x9dc2 0x6556 +0x9dc3 0x6555 +0x9dc4 0x654d +0x9dc5 0x6558 +0x9dc6 0x655e +0x9dc7 0x655d +0x9dc8 0x6572 +0x9dc9 0x6578 +0x9dca 0x6582 +0x9dcb 0x6583 +0x9dcc 0x8b8a +0x9dcd 0x659b +0x9dce 0x659f +0x9dcf 0x65ab +0x9dd0 0x65b7 +0x9dd1 0x65c3 +0x9dd2 0x65c6 +0x9dd3 0x65c1 +0x9dd4 0x65c4 +0x9dd5 0x65cc +0x9dd6 0x65d2 +0x9dd7 0x65db +0x9dd8 0x65d9 +0x9dd9 0x65e0 +0x9dda 0x65e1 +0x9ddb 0x65f1 +0x9ddc 0x6772 +0x9ddd 0x660a +0x9dde 0x6603 +0x9ddf 0x65fb +0x9de0 0x6773 +0x9de1 0x6635 +0x9de2 0x6636 +0x9de3 0x6634 +0x9de4 0x661c +0x9de5 0x664f +0x9de6 0x6644 +0x9de7 0x6649 +0x9de8 0x6641 +0x9de9 0x665e +0x9dea 0x665d +0x9deb 0x6664 +0x9dec 0x6667 +0x9ded 0x6668 +0x9dee 0x665f +0x9def 0x6662 +0x9df0 0x6670 +0x9df1 0x6683 +0x9df2 0x6688 +0x9df3 0x668e +0x9df4 0x6689 +0x9df5 0x6684 +0x9df6 0x6698 +0x9df7 0x669d +0x9df8 0x66c1 +0x9df9 0x66b9 +0x9dfa 0x66c9 +0x9dfb 0x66be +0x9dfc 0x66bc +0x9e40 0x66c4 +0x9e41 0x66b8 +0x9e42 0x66d6 +0x9e43 0x66da +0x9e44 0x66e0 +0x9e45 0x663f +0x9e46 0x66e6 +0x9e47 0x66e9 +0x9e48 0x66f0 +0x9e49 0x66f5 +0x9e4a 0x66f7 +0x9e4b 0x670f +0x9e4c 0x6716 +0x9e4d 0x671e +0x9e4e 0x6726 +0x9e4f 0x6727 +0x9e50 0x9738 +0x9e51 0x672e +0x9e52 0x673f +0x9e53 0x6736 +0x9e54 0x6741 +0x9e55 0x6738 +0x9e56 0x6737 +0x9e57 0x6746 +0x9e58 0x675e +0x9e59 0x6760 +0x9e5a 0x6759 +0x9e5b 0x6763 +0x9e5c 0x6764 +0x9e5d 0x6789 +0x9e5e 0x6770 +0x9e5f 0x67a9 +0x9e60 0x677c +0x9e61 0x676a +0x9e62 0x678c +0x9e63 0x678b +0x9e64 0x67a6 +0x9e65 0x67a1 +0x9e66 0x6785 +0x9e67 0x67b7 +0x9e68 0x67ef +0x9e69 0x67b4 +0x9e6a 0x67ec +0x9e6b 0x67b3 +0x9e6c 0x67e9 +0x9e6d 0x67b8 +0x9e6e 0x67e4 +0x9e6f 0x67de +0x9e70 0x67dd +0x9e71 0x67e2 +0x9e72 0x67ee +0x9e73 0x67b9 +0x9e74 0x67ce +0x9e75 0x67c6 +0x9e76 0x67e7 +0x9e77 0x6a9c +0x9e78 0x681e +0x9e79 0x6846 +0x9e7a 0x6829 +0x9e7b 0x6840 +0x9e7c 0x684d +0x9e7d 0x6832 +0x9e7e 0x684e +0x9e80 0x68b3 +0x9e81 0x682b +0x9e82 0x6859 +0x9e83 0x6863 +0x9e84 0x6877 +0x9e85 0x687f +0x9e86 0x689f +0x9e87 0x688f +0x9e88 0x68ad +0x9e89 0x6894 +0x9e8a 0x689d +0x9e8b 0x689b +0x9e8c 0x6883 +0x9e8d 0x6aae +0x9e8e 0x68b9 +0x9e8f 0x6874 +0x9e90 0x68b5 +0x9e91 0x68a0 +0x9e92 0x68ba +0x9e93 0x690f +0x9e94 0x688d +0x9e95 0x687e +0x9e96 0x6901 +0x9e97 0x68ca +0x9e98 0x6908 +0x9e99 0x68d8 +0x9e9a 0x6922 +0x9e9b 0x6926 +0x9e9c 0x68e1 +0x9e9d 0x690c +0x9e9e 0x68cd +0x9e9f 0x68d4 +0x9ea0 0x68e7 +0x9ea1 0x68d5 +0x9ea2 0x6936 +0x9ea3 0x6912 +0x9ea4 0x6904 +0x9ea5 0x68d7 +0x9ea6 0x68e3 +0x9ea7 0x6925 +0x9ea8 0x68f9 +0x9ea9 0x68e0 +0x9eaa 0x68ef +0x9eab 0x6928 +0x9eac 0x692a +0x9ead 0x691a +0x9eae 0x6923 +0x9eaf 0x6921 +0x9eb0 0x68c6 +0x9eb1 0x6979 +0x9eb2 0x6977 +0x9eb3 0x695c +0x9eb4 0x6978 +0x9eb5 0x696b +0x9eb6 0x6954 +0x9eb7 0x697e +0x9eb8 0x696e +0x9eb9 0x6939 +0x9eba 0x6974 +0x9ebb 0x693d +0x9ebc 0x6959 +0x9ebd 0x6930 +0x9ebe 0x6961 +0x9ebf 0x695e +0x9ec0 0x695d +0x9ec1 0x6981 +0x9ec2 0x696a +0x9ec3 0x69b2 +0x9ec4 0x69ae +0x9ec5 0x69d0 +0x9ec6 0x69bf +0x9ec7 0x69c1 +0x9ec8 0x69d3 +0x9ec9 0x69be +0x9eca 0x69ce +0x9ecb 0x5be8 +0x9ecc 0x69ca +0x9ecd 0x69dd +0x9ece 0x69bb +0x9ecf 0x69c3 +0x9ed0 0x69a7 +0x9ed1 0x6a2e +0x9ed2 0x6991 +0x9ed3 0x69a0 +0x9ed4 0x699c +0x9ed5 0x6995 +0x9ed6 0x69b4 +0x9ed7 0x69de +0x9ed8 0x69e8 +0x9ed9 0x6a02 +0x9eda 0x6a1b +0x9edb 0x69ff +0x9edc 0x6b0a +0x9edd 0x69f9 +0x9ede 0x69f2 +0x9edf 0x69e7 +0x9ee0 0x6a05 +0x9ee1 0x69b1 +0x9ee2 0x6a1e +0x9ee3 0x69ed +0x9ee4 0x6a14 +0x9ee5 0x69eb +0x9ee6 0x6a0a +0x9ee7 0x6a12 +0x9ee8 0x6ac1 +0x9ee9 0x6a23 +0x9eea 0x6a13 +0x9eeb 0x6a44 +0x9eec 0x6a0c +0x9eed 0x6a72 +0x9eee 0x6a36 +0x9eef 0x6a78 +0x9ef0 0x6a47 +0x9ef1 0x6a62 +0x9ef2 0x6a59 +0x9ef3 0x6a66 +0x9ef4 0x6a48 +0x9ef5 0x6a38 +0x9ef6 0x6a22 +0x9ef7 0x6a90 +0x9ef8 0x6a8d +0x9ef9 0x6aa0 +0x9efa 0x6a84 +0x9efb 0x6aa2 +0x9efc 0x6aa3 +0x9f40 0x6a97 +0x9f41 0x8617 +0x9f42 0x6abb +0x9f43 0x6ac3 +0x9f44 0x6ac2 +0x9f45 0x6ab8 +0x9f46 0x6ab3 +0x9f47 0x6aac +0x9f48 0x6ade +0x9f49 0x6ad1 +0x9f4a 0x6adf +0x9f4b 0x6aaa +0x9f4c 0x6ada +0x9f4d 0x6aea +0x9f4e 0x6afb +0x9f4f 0x6b05 +0x9f50 0x8616 +0x9f51 0x6afa +0x9f52 0x6b12 +0x9f53 0x6b16 +0x9f54 0x9b31 +0x9f55 0x6b1f +0x9f56 0x6b38 +0x9f57 0x6b37 +0x9f58 0x76dc +0x9f59 0x6b39 +0x9f5a 0x98ee +0x9f5b 0x6b47 +0x9f5c 0x6b43 +0x9f5d 0x6b49 +0x9f5e 0x6b50 +0x9f5f 0x6b59 +0x9f60 0x6b54 +0x9f61 0x6b5b +0x9f62 0x6b5f +0x9f63 0x6b61 +0x9f64 0x6b78 +0x9f65 0x6b79 +0x9f66 0x6b7f +0x9f67 0x6b80 +0x9f68 0x6b84 +0x9f69 0x6b83 +0x9f6a 0x6b8d +0x9f6b 0x6b98 +0x9f6c 0x6b95 +0x9f6d 0x6b9e +0x9f6e 0x6ba4 +0x9f6f 0x6baa +0x9f70 0x6bab +0x9f71 0x6baf +0x9f72 0x6bb2 +0x9f73 0x6bb1 +0x9f74 0x6bb3 +0x9f75 0x6bb7 +0x9f76 0x6bbc +0x9f77 0x6bc6 +0x9f78 0x6bcb +0x9f79 0x6bd3 +0x9f7a 0x6bdf +0x9f7b 0x6bec +0x9f7c 0x6beb +0x9f7d 0x6bf3 +0x9f7e 0x6bef +0x9f80 0x9ebe +0x9f81 0x6c08 +0x9f82 0x6c13 +0x9f83 0x6c14 +0x9f84 0x6c1b +0x9f85 0x6c24 +0x9f86 0x6c23 +0x9f87 0x6c5e +0x9f88 0x6c55 +0x9f89 0x6c62 +0x9f8a 0x6c6a +0x9f8b 0x6c82 +0x9f8c 0x6c8d +0x9f8d 0x6c9a +0x9f8e 0x6c81 +0x9f8f 0x6c9b +0x9f90 0x6c7e +0x9f91 0x6c68 +0x9f92 0x6c73 +0x9f93 0x6c92 +0x9f94 0x6c90 +0x9f95 0x6cc4 +0x9f96 0x6cf1 +0x9f97 0x6cd3 +0x9f98 0x6cbd +0x9f99 0x6cd7 +0x9f9a 0x6cc5 +0x9f9b 0x6cdd +0x9f9c 0x6cae +0x9f9d 0x6cb1 +0x9f9e 0x6cbe +0x9f9f 0x6cba +0x9fa0 0x6cdb +0x9fa1 0x6cef +0x9fa2 0x6cd9 +0x9fa3 0x6cea +0x9fa4 0x6d1f +0x9fa5 0x884d +0x9fa6 0x6d36 +0x9fa7 0x6d2b +0x9fa8 0x6d3d +0x9fa9 0x6d38 +0x9faa 0x6d19 +0x9fab 0x6d35 +0x9fac 0x6d33 +0x9fad 0x6d12 +0x9fae 0x6d0c +0x9faf 0x6d63 +0x9fb0 0x6d93 +0x9fb1 0x6d64 +0x9fb2 0x6d5a +0x9fb3 0x6d79 +0x9fb4 0x6d59 +0x9fb5 0x6d8e +0x9fb6 0x6d95 +0x9fb7 0x6fe4 +0x9fb8 0x6d85 +0x9fb9 0x6df9 +0x9fba 0x6e15 +0x9fbb 0x6e0a +0x9fbc 0x6db5 +0x9fbd 0x6dc7 +0x9fbe 0x6de6 +0x9fbf 0x6db8 +0x9fc0 0x6dc6 +0x9fc1 0x6dec +0x9fc2 0x6dde +0x9fc3 0x6dcc +0x9fc4 0x6de8 +0x9fc5 0x6dd2 +0x9fc6 0x6dc5 +0x9fc7 0x6dfa +0x9fc8 0x6dd9 +0x9fc9 0x6de4 +0x9fca 0x6dd5 +0x9fcb 0x6dea +0x9fcc 0x6dee +0x9fcd 0x6e2d +0x9fce 0x6e6e +0x9fcf 0x6e2e +0x9fd0 0x6e19 +0x9fd1 0x6e72 +0x9fd2 0x6e5f +0x9fd3 0x6e3e +0x9fd4 0x6e23 +0x9fd5 0x6e6b +0x9fd6 0x6e2b +0x9fd7 0x6e76 +0x9fd8 0x6e4d +0x9fd9 0x6e1f +0x9fda 0x6e43 +0x9fdb 0x6e3a +0x9fdc 0x6e4e +0x9fdd 0x6e24 +0x9fde 0x6eff +0x9fdf 0x6e1d +0x9fe0 0x6e38 +0x9fe1 0x6e82 +0x9fe2 0x6eaa +0x9fe3 0x6e98 +0x9fe4 0x6ec9 +0x9fe5 0x6eb7 +0x9fe6 0x6ed3 +0x9fe7 0x6ebd +0x9fe8 0x6eaf +0x9fe9 0x6ec4 +0x9fea 0x6eb2 +0x9feb 0x6ed4 +0x9fec 0x6ed5 +0x9fed 0x6e8f +0x9fee 0x6ea5 +0x9fef 0x6ec2 +0x9ff0 0x6e9f +0x9ff1 0x6f41 +0x9ff2 0x6f11 +0x9ff3 0x704c +0x9ff4 0x6eec +0x9ff5 0x6ef8 +0x9ff6 0x6efe +0x9ff7 0x6f3f +0x9ff8 0x6ef2 +0x9ff9 0x6f31 +0x9ffa 0x6eef +0x9ffb 0x6f32 +0x9ffc 0x6ecc +0xe040 0x6f3e +0xe041 0x6f13 +0xe042 0x6ef7 +0xe043 0x6f86 +0xe044 0x6f7a +0xe045 0x6f78 +0xe046 0x6f81 +0xe047 0x6f80 +0xe048 0x6f6f +0xe049 0x6f5b +0xe04a 0x6ff3 +0xe04b 0x6f6d +0xe04c 0x6f82 +0xe04d 0x6f7c +0xe04e 0x6f58 +0xe04f 0x6f8e +0xe050 0x6f91 +0xe051 0x6fc2 +0xe052 0x6f66 +0xe053 0x6fb3 +0xe054 0x6fa3 +0xe055 0x6fa1 +0xe056 0x6fa4 +0xe057 0x6fb9 +0xe058 0x6fc6 +0xe059 0x6faa +0xe05a 0x6fdf +0xe05b 0x6fd5 +0xe05c 0x6fec +0xe05d 0x6fd4 +0xe05e 0x6fd8 +0xe05f 0x6ff1 +0xe060 0x6fee +0xe061 0x6fdb +0xe062 0x7009 +0xe063 0x700b +0xe064 0x6ffa +0xe065 0x7011 +0xe066 0x7001 +0xe067 0x700f +0xe068 0x6ffe +0xe069 0x701b +0xe06a 0x701a +0xe06b 0x6f74 +0xe06c 0x701d +0xe06d 0x7018 +0xe06e 0x701f +0xe06f 0x7030 +0xe070 0x703e +0xe071 0x7032 +0xe072 0x7051 +0xe073 0x7063 +0xe074 0x7099 +0xe075 0x7092 +0xe076 0x70af +0xe077 0x70f1 +0xe078 0x70ac +0xe079 0x70b8 +0xe07a 0x70b3 +0xe07b 0x70ae +0xe07c 0x70df +0xe07d 0x70cb +0xe07e 0x70dd +0xe080 0x70d9 +0xe081 0x7109 +0xe082 0x70fd +0xe083 0x711c +0xe084 0x7119 +0xe085 0x7165 +0xe086 0x7155 +0xe087 0x7188 +0xe088 0x7166 +0xe089 0x7162 +0xe08a 0x714c +0xe08b 0x7156 +0xe08c 0x716c +0xe08d 0x718f +0xe08e 0x71fb +0xe08f 0x7184 +0xe090 0x7195 +0xe091 0x71a8 +0xe092 0x71ac +0xe093 0x71d7 +0xe094 0x71b9 +0xe095 0x71be +0xe096 0x71d2 +0xe097 0x71c9 +0xe098 0x71d4 +0xe099 0x71ce +0xe09a 0x71e0 +0xe09b 0x71ec +0xe09c 0x71e7 +0xe09d 0x71f5 +0xe09e 0x71fc +0xe09f 0x71f9 +0xe0a0 0x71ff +0xe0a1 0x720d +0xe0a2 0x7210 +0xe0a3 0x721b +0xe0a4 0x7228 +0xe0a5 0x722d +0xe0a6 0x722c +0xe0a7 0x7230 +0xe0a8 0x7232 +0xe0a9 0x723b +0xe0aa 0x723c +0xe0ab 0x723f +0xe0ac 0x7240 +0xe0ad 0x7246 +0xe0ae 0x724b +0xe0af 0x7258 +0xe0b0 0x7274 +0xe0b1 0x727e +0xe0b2 0x7282 +0xe0b3 0x7281 +0xe0b4 0x7287 +0xe0b5 0x7292 +0xe0b6 0x7296 +0xe0b7 0x72a2 +0xe0b8 0x72a7 +0xe0b9 0x72b9 +0xe0ba 0x72b2 +0xe0bb 0x72c3 +0xe0bc 0x72c6 +0xe0bd 0x72c4 +0xe0be 0x72ce +0xe0bf 0x72d2 +0xe0c0 0x72e2 +0xe0c1 0x72e0 +0xe0c2 0x72e1 +0xe0c3 0x72f9 +0xe0c4 0x72f7 +0xe0c5 0x500f +0xe0c6 0x7317 +0xe0c7 0x730a +0xe0c8 0x731c +0xe0c9 0x7316 +0xe0ca 0x731d +0xe0cb 0x7334 +0xe0cc 0x732f +0xe0cd 0x7329 +0xe0ce 0x7325 +0xe0cf 0x733e +0xe0d0 0x734e +0xe0d1 0x734f +0xe0d2 0x9ed8 +0xe0d3 0x7357 +0xe0d4 0x736a +0xe0d5 0x7368 +0xe0d6 0x7370 +0xe0d7 0x7378 +0xe0d8 0x7375 +0xe0d9 0x737b +0xe0da 0x737a +0xe0db 0x73c8 +0xe0dc 0x73b3 +0xe0dd 0x73ce +0xe0de 0x73bb +0xe0df 0x73c0 +0xe0e0 0x73e5 +0xe0e1 0x73ee +0xe0e2 0x73de +0xe0e3 0x74a2 +0xe0e4 0x7405 +0xe0e5 0x746f +0xe0e6 0x7425 +0xe0e7 0x73f8 +0xe0e8 0x7432 +0xe0e9 0x743a +0xe0ea 0x7455 +0xe0eb 0x743f +0xe0ec 0x745f +0xe0ed 0x7459 +0xe0ee 0x7441 +0xe0ef 0x745c +0xe0f0 0x7469 +0xe0f1 0x7470 +0xe0f2 0x7463 +0xe0f3 0x746a +0xe0f4 0x7476 +0xe0f5 0x747e +0xe0f6 0x748b +0xe0f7 0x749e +0xe0f8 0x74a7 +0xe0f9 0x74ca +0xe0fa 0x74cf +0xe0fb 0x74d4 +0xe0fc 0x73f1 +0xe140 0x74e0 +0xe141 0x74e3 +0xe142 0x74e7 +0xe143 0x74e9 +0xe144 0x74ee +0xe145 0x74f2 +0xe146 0x74f0 +0xe147 0x74f1 +0xe148 0x74f8 +0xe149 0x74f7 +0xe14a 0x7504 +0xe14b 0x7503 +0xe14c 0x7505 +0xe14d 0x750c +0xe14e 0x750e +0xe14f 0x750d +0xe150 0x7515 +0xe151 0x7513 +0xe152 0x751e +0xe153 0x7526 +0xe154 0x752c +0xe155 0x753c +0xe156 0x7544 +0xe157 0x754d +0xe158 0x754a +0xe159 0x7549 +0xe15a 0x755b +0xe15b 0x7546 +0xe15c 0x755a +0xe15d 0x7569 +0xe15e 0x7564 +0xe15f 0x7567 +0xe160 0x756b +0xe161 0x756d +0xe162 0x7578 +0xe163 0x7576 +0xe164 0x7586 +0xe165 0x7587 +0xe166 0x7574 +0xe167 0x758a +0xe168 0x7589 +0xe169 0x7582 +0xe16a 0x7594 +0xe16b 0x759a +0xe16c 0x759d +0xe16d 0x75a5 +0xe16e 0x75a3 +0xe16f 0x75c2 +0xe170 0x75b3 +0xe171 0x75c3 +0xe172 0x75b5 +0xe173 0x75bd +0xe174 0x75b8 +0xe175 0x75bc +0xe176 0x75b1 +0xe177 0x75cd +0xe178 0x75ca +0xe179 0x75d2 +0xe17a 0x75d9 +0xe17b 0x75e3 +0xe17c 0x75de +0xe17d 0x75fe +0xe17e 0x75ff +0xe180 0x75fc +0xe181 0x7601 +0xe182 0x75f0 +0xe183 0x75fa +0xe184 0x75f2 +0xe185 0x75f3 +0xe186 0x760b +0xe187 0x760d +0xe188 0x7609 +0xe189 0x761f +0xe18a 0x7627 +0xe18b 0x7620 +0xe18c 0x7621 +0xe18d 0x7622 +0xe18e 0x7624 +0xe18f 0x7634 +0xe190 0x7630 +0xe191 0x763b +0xe192 0x7647 +0xe193 0x7648 +0xe194 0x7646 +0xe195 0x765c +0xe196 0x7658 +0xe197 0x7661 +0xe198 0x7662 +0xe199 0x7668 +0xe19a 0x7669 +0xe19b 0x766a +0xe19c 0x7667 +0xe19d 0x766c +0xe19e 0x7670 +0xe19f 0x7672 +0xe1a0 0x7676 +0xe1a1 0x7678 +0xe1a2 0x767c +0xe1a3 0x7680 +0xe1a4 0x7683 +0xe1a5 0x7688 +0xe1a6 0x768b +0xe1a7 0x768e +0xe1a8 0x7696 +0xe1a9 0x7693 +0xe1aa 0x7699 +0xe1ab 0x769a +0xe1ac 0x76b0 +0xe1ad 0x76b4 +0xe1ae 0x76b8 +0xe1af 0x76b9 +0xe1b0 0x76ba +0xe1b1 0x76c2 +0xe1b2 0x76cd +0xe1b3 0x76d6 +0xe1b4 0x76d2 +0xe1b5 0x76de +0xe1b6 0x76e1 +0xe1b7 0x76e5 +0xe1b8 0x76e7 +0xe1b9 0x76ea +0xe1ba 0x862f +0xe1bb 0x76fb +0xe1bc 0x7708 +0xe1bd 0x7707 +0xe1be 0x7704 +0xe1bf 0x7729 +0xe1c0 0x7724 +0xe1c1 0x771e +0xe1c2 0x7725 +0xe1c3 0x7726 +0xe1c4 0x771b +0xe1c5 0x7737 +0xe1c6 0x7738 +0xe1c7 0x7747 +0xe1c8 0x775a +0xe1c9 0x7768 +0xe1ca 0x776b +0xe1cb 0x775b +0xe1cc 0x7765 +0xe1cd 0x777f +0xe1ce 0x777e +0xe1cf 0x7779 +0xe1d0 0x778e +0xe1d1 0x778b +0xe1d2 0x7791 +0xe1d3 0x77a0 +0xe1d4 0x779e +0xe1d5 0x77b0 +0xe1d6 0x77b6 +0xe1d7 0x77b9 +0xe1d8 0x77bf +0xe1d9 0x77bc +0xe1da 0x77bd +0xe1db 0x77bb +0xe1dc 0x77c7 +0xe1dd 0x77cd +0xe1de 0x77d7 +0xe1df 0x77da +0xe1e0 0x77dc +0xe1e1 0x77e3 +0xe1e2 0x77ee +0xe1e3 0x77fc +0xe1e4 0x780c +0xe1e5 0x7812 +0xe1e6 0x7926 +0xe1e7 0x7820 +0xe1e8 0x792a +0xe1e9 0x7845 +0xe1ea 0x788e +0xe1eb 0x7874 +0xe1ec 0x7886 +0xe1ed 0x787c +0xe1ee 0x789a +0xe1ef 0x788c +0xe1f0 0x78a3 +0xe1f1 0x78b5 +0xe1f2 0x78aa +0xe1f3 0x78af +0xe1f4 0x78d1 +0xe1f5 0x78c6 +0xe1f6 0x78cb +0xe1f7 0x78d4 +0xe1f8 0x78be +0xe1f9 0x78bc +0xe1fa 0x78c5 +0xe1fb 0x78ca +0xe1fc 0x78ec +0xe240 0x78e7 +0xe241 0x78da +0xe242 0x78fd +0xe243 0x78f4 +0xe244 0x7907 +0xe245 0x7912 +0xe246 0x7911 +0xe247 0x7919 +0xe248 0x792c +0xe249 0x792b +0xe24a 0x7940 +0xe24b 0x7960 +0xe24c 0x7957 +0xe24d 0x795f +0xe24e 0x795a +0xe24f 0x7955 +0xe250 0x7953 +0xe251 0x797a +0xe252 0x797f +0xe253 0x798a +0xe254 0x799d +0xe255 0x79a7 +0xe256 0x9f4b +0xe257 0x79aa +0xe258 0x79ae +0xe259 0x79b3 +0xe25a 0x79b9 +0xe25b 0x79ba +0xe25c 0x79c9 +0xe25d 0x79d5 +0xe25e 0x79e7 +0xe25f 0x79ec +0xe260 0x79e1 +0xe261 0x79e3 +0xe262 0x7a08 +0xe263 0x7a0d +0xe264 0x7a18 +0xe265 0x7a19 +0xe266 0x7a20 +0xe267 0x7a1f +0xe268 0x7980 +0xe269 0x7a31 +0xe26a 0x7a3b +0xe26b 0x7a3e +0xe26c 0x7a37 +0xe26d 0x7a43 +0xe26e 0x7a57 +0xe26f 0x7a49 +0xe270 0x7a61 +0xe271 0x7a62 +0xe272 0x7a69 +0xe273 0x9f9d +0xe274 0x7a70 +0xe275 0x7a79 +0xe276 0x7a7d +0xe277 0x7a88 +0xe278 0x7a97 +0xe279 0x7a95 +0xe27a 0x7a98 +0xe27b 0x7a96 +0xe27c 0x7aa9 +0xe27d 0x7ac8 +0xe27e 0x7ab0 +0xe280 0x7ab6 +0xe281 0x7ac5 +0xe282 0x7ac4 +0xe283 0x7abf +0xe284 0x9083 +0xe285 0x7ac7 +0xe286 0x7aca +0xe287 0x7acd +0xe288 0x7acf +0xe289 0x7ad5 +0xe28a 0x7ad3 +0xe28b 0x7ad9 +0xe28c 0x7ada +0xe28d 0x7add +0xe28e 0x7ae1 +0xe28f 0x7ae2 +0xe290 0x7ae6 +0xe291 0x7aed +0xe292 0x7af0 +0xe293 0x7b02 +0xe294 0x7b0f +0xe295 0x7b0a +0xe296 0x7b06 +0xe297 0x7b33 +0xe298 0x7b18 +0xe299 0x7b19 +0xe29a 0x7b1e +0xe29b 0x7b35 +0xe29c 0x7b28 +0xe29d 0x7b36 +0xe29e 0x7b50 +0xe29f 0x7b7a +0xe2a0 0x7b04 +0xe2a1 0x7b4d +0xe2a2 0x7b0b +0xe2a3 0x7b4c +0xe2a4 0x7b45 +0xe2a5 0x7b75 +0xe2a6 0x7b65 +0xe2a7 0x7b74 +0xe2a8 0x7b67 +0xe2a9 0x7b70 +0xe2aa 0x7b71 +0xe2ab 0x7b6c +0xe2ac 0x7b6e +0xe2ad 0x7b9d +0xe2ae 0x7b98 +0xe2af 0x7b9f +0xe2b0 0x7b8d +0xe2b1 0x7b9c +0xe2b2 0x7b9a +0xe2b3 0x7b8b +0xe2b4 0x7b92 +0xe2b5 0x7b8f +0xe2b6 0x7b5d +0xe2b7 0x7b99 +0xe2b8 0x7bcb +0xe2b9 0x7bc1 +0xe2ba 0x7bcc +0xe2bb 0x7bcf +0xe2bc 0x7bb4 +0xe2bd 0x7bc6 +0xe2be 0x7bdd +0xe2bf 0x7be9 +0xe2c0 0x7c11 +0xe2c1 0x7c14 +0xe2c2 0x7be6 +0xe2c3 0x7be5 +0xe2c4 0x7c60 +0xe2c5 0x7c00 +0xe2c6 0x7c07 +0xe2c7 0x7c13 +0xe2c8 0x7bf3 +0xe2c9 0x7bf7 +0xe2ca 0x7c17 +0xe2cb 0x7c0d +0xe2cc 0x7bf6 +0xe2cd 0x7c23 +0xe2ce 0x7c27 +0xe2cf 0x7c2a +0xe2d0 0x7c1f +0xe2d1 0x7c37 +0xe2d2 0x7c2b +0xe2d3 0x7c3d +0xe2d4 0x7c4c +0xe2d5 0x7c43 +0xe2d6 0x7c54 +0xe2d7 0x7c4f +0xe2d8 0x7c40 +0xe2d9 0x7c50 +0xe2da 0x7c58 +0xe2db 0x7c5f +0xe2dc 0x7c64 +0xe2dd 0x7c56 +0xe2de 0x7c65 +0xe2df 0x7c6c +0xe2e0 0x7c75 +0xe2e1 0x7c83 +0xe2e2 0x7c90 +0xe2e3 0x7ca4 +0xe2e4 0x7cad +0xe2e5 0x7ca2 +0xe2e6 0x7cab +0xe2e7 0x7ca1 +0xe2e8 0x7ca8 +0xe2e9 0x7cb3 +0xe2ea 0x7cb2 +0xe2eb 0x7cb1 +0xe2ec 0x7cae +0xe2ed 0x7cb9 +0xe2ee 0x7cbd +0xe2ef 0x7cc0 +0xe2f0 0x7cc5 +0xe2f1 0x7cc2 +0xe2f2 0x7cd8 +0xe2f3 0x7cd2 +0xe2f4 0x7cdc +0xe2f5 0x7ce2 +0xe2f6 0x9b3b +0xe2f7 0x7cef +0xe2f8 0x7cf2 +0xe2f9 0x7cf4 +0xe2fa 0x7cf6 +0xe2fb 0x7cfa +0xe2fc 0x7d06 +0xe340 0x7d02 +0xe341 0x7d1c +0xe342 0x7d15 +0xe343 0x7d0a +0xe344 0x7d45 +0xe345 0x7d4b +0xe346 0x7d2e +0xe347 0x7d32 +0xe348 0x7d3f +0xe349 0x7d35 +0xe34a 0x7d46 +0xe34b 0x7d73 +0xe34c 0x7d56 +0xe34d 0x7d4e +0xe34e 0x7d72 +0xe34f 0x7d68 +0xe350 0x7d6e +0xe351 0x7d4f +0xe352 0x7d63 +0xe353 0x7d93 +0xe354 0x7d89 +0xe355 0x7d5b +0xe356 0x7d8f +0xe357 0x7d7d +0xe358 0x7d9b +0xe359 0x7dba +0xe35a 0x7dae +0xe35b 0x7da3 +0xe35c 0x7db5 +0xe35d 0x7dc7 +0xe35e 0x7dbd +0xe35f 0x7dab +0xe360 0x7e3d +0xe361 0x7da2 +0xe362 0x7daf +0xe363 0x7ddc +0xe364 0x7db8 +0xe365 0x7d9f +0xe366 0x7db0 +0xe367 0x7dd8 +0xe368 0x7ddd +0xe369 0x7de4 +0xe36a 0x7dde +0xe36b 0x7dfb +0xe36c 0x7df2 +0xe36d 0x7de1 +0xe36e 0x7e05 +0xe36f 0x7e0a +0xe370 0x7e23 +0xe371 0x7e21 +0xe372 0x7e12 +0xe373 0x7e31 +0xe374 0x7e1f +0xe375 0x7e09 +0xe376 0x7e0b +0xe377 0x7e22 +0xe378 0x7e46 +0xe379 0x7e66 +0xe37a 0x7e3b +0xe37b 0x7e35 +0xe37c 0x7e39 +0xe37d 0x7e43 +0xe37e 0x7e37 +0xe380 0x7e32 +0xe381 0x7e3a +0xe382 0x7e67 +0xe383 0x7e5d +0xe384 0x7e56 +0xe385 0x7e5e +0xe386 0x7e59 +0xe387 0x7e5a +0xe388 0x7e79 +0xe389 0x7e6a +0xe38a 0x7e69 +0xe38b 0x7e7c +0xe38c 0x7e7b +0xe38d 0x7e83 +0xe38e 0x7dd5 +0xe38f 0x7e7d +0xe390 0x8fae +0xe391 0x7e7f +0xe392 0x7e88 +0xe393 0x7e89 +0xe394 0x7e8c +0xe395 0x7e92 +0xe396 0x7e90 +0xe397 0x7e93 +0xe398 0x7e94 +0xe399 0x7e96 +0xe39a 0x7e8e +0xe39b 0x7e9b +0xe39c 0x7e9c +0xe39d 0x7f38 +0xe39e 0x7f3a +0xe39f 0x7f45 +0xe3a0 0x7f4c +0xe3a1 0x7f4d +0xe3a2 0x7f4e +0xe3a3 0x7f50 +0xe3a4 0x7f51 +0xe3a5 0x7f55 +0xe3a6 0x7f54 +0xe3a7 0x7f58 +0xe3a8 0x7f5f +0xe3a9 0x7f60 +0xe3aa 0x7f68 +0xe3ab 0x7f69 +0xe3ac 0x7f67 +0xe3ad 0x7f78 +0xe3ae 0x7f82 +0xe3af 0x7f86 +0xe3b0 0x7f83 +0xe3b1 0x7f88 +0xe3b2 0x7f87 +0xe3b3 0x7f8c +0xe3b4 0x7f94 +0xe3b5 0x7f9e +0xe3b6 0x7f9d +0xe3b7 0x7f9a +0xe3b8 0x7fa3 +0xe3b9 0x7faf +0xe3ba 0x7fb2 +0xe3bb 0x7fb9 +0xe3bc 0x7fae +0xe3bd 0x7fb6 +0xe3be 0x7fb8 +0xe3bf 0x8b71 +0xe3c0 0x7fc5 +0xe3c1 0x7fc6 +0xe3c2 0x7fca +0xe3c3 0x7fd5 +0xe3c4 0x7fd4 +0xe3c5 0x7fe1 +0xe3c6 0x7fe6 +0xe3c7 0x7fe9 +0xe3c8 0x7ff3 +0xe3c9 0x7ff9 +0xe3ca 0x98dc +0xe3cb 0x8006 +0xe3cc 0x8004 +0xe3cd 0x800b +0xe3ce 0x8012 +0xe3cf 0x8018 +0xe3d0 0x8019 +0xe3d1 0x801c +0xe3d2 0x8021 +0xe3d3 0x8028 +0xe3d4 0x803f +0xe3d5 0x803b +0xe3d6 0x804a +0xe3d7 0x8046 +0xe3d8 0x8052 +0xe3d9 0x8058 +0xe3da 0x805a +0xe3db 0x805f +0xe3dc 0x8062 +0xe3dd 0x8068 +0xe3de 0x8073 +0xe3df 0x8072 +0xe3e0 0x8070 +0xe3e1 0x8076 +0xe3e2 0x8079 +0xe3e3 0x807d +0xe3e4 0x807f +0xe3e5 0x8084 +0xe3e6 0x8086 +0xe3e7 0x8085 +0xe3e8 0x809b +0xe3e9 0x8093 +0xe3ea 0x809a +0xe3eb 0x80ad +0xe3ec 0x5190 +0xe3ed 0x80ac +0xe3ee 0x80db +0xe3ef 0x80e5 +0xe3f0 0x80d9 +0xe3f1 0x80dd +0xe3f2 0x80c4 +0xe3f3 0x80da +0xe3f4 0x80d6 +0xe3f5 0x8109 +0xe3f6 0x80ef +0xe3f7 0x80f1 +0xe3f8 0x811b +0xe3f9 0x8129 +0xe3fa 0x8123 +0xe3fb 0x812f +0xe3fc 0x814b +0xe440 0x968b +0xe441 0x8146 +0xe442 0x813e +0xe443 0x8153 +0xe444 0x8151 +0xe445 0x80fc +0xe446 0x8171 +0xe447 0x816e +0xe448 0x8165 +0xe449 0x8166 +0xe44a 0x8174 +0xe44b 0x8183 +0xe44c 0x8188 +0xe44d 0x818a +0xe44e 0x8180 +0xe44f 0x8182 +0xe450 0x81a0 +0xe451 0x8195 +0xe452 0x81a4 +0xe453 0x81a3 +0xe454 0x815f +0xe455 0x8193 +0xe456 0x81a9 +0xe457 0x81b0 +0xe458 0x81b5 +0xe459 0x81be +0xe45a 0x81b8 +0xe45b 0x81bd +0xe45c 0x81c0 +0xe45d 0x81c2 +0xe45e 0x81ba +0xe45f 0x81c9 +0xe460 0x81cd +0xe461 0x81d1 +0xe462 0x81d9 +0xe463 0x81d8 +0xe464 0x81c8 +0xe465 0x81da +0xe466 0x81df +0xe467 0x81e0 +0xe468 0x81e7 +0xe469 0x81fa +0xe46a 0x81fb +0xe46b 0x81fe +0xe46c 0x8201 +0xe46d 0x8202 +0xe46e 0x8205 +0xe46f 0x8207 +0xe470 0x820a +0xe471 0x820d +0xe472 0x8210 +0xe473 0x8216 +0xe474 0x8229 +0xe475 0x822b +0xe476 0x8238 +0xe477 0x8233 +0xe478 0x8240 +0xe479 0x8259 +0xe47a 0x8258 +0xe47b 0x825d +0xe47c 0x825a +0xe47d 0x825f +0xe47e 0x8264 +0xe480 0x8262 +0xe481 0x8268 +0xe482 0x826a +0xe483 0x826b +0xe484 0x822e +0xe485 0x8271 +0xe486 0x8277 +0xe487 0x8278 +0xe488 0x827e +0xe489 0x828d +0xe48a 0x8292 +0xe48b 0x82ab +0xe48c 0x829f +0xe48d 0x82bb +0xe48e 0x82ac +0xe48f 0x82e1 +0xe490 0x82e3 +0xe491 0x82df +0xe492 0x82d2 +0xe493 0x82f4 +0xe494 0x82f3 +0xe495 0x82fa +0xe496 0x8393 +0xe497 0x8303 +0xe498 0x82fb +0xe499 0x82f9 +0xe49a 0x82de +0xe49b 0x8306 +0xe49c 0x82dc +0xe49d 0x8309 +0xe49e 0x82d9 +0xe49f 0x8335 +0xe4a0 0x8334 +0xe4a1 0x8316 +0xe4a2 0x8332 +0xe4a3 0x8331 +0xe4a4 0x8340 +0xe4a5 0x8339 +0xe4a6 0x8350 +0xe4a7 0x8345 +0xe4a8 0x832f +0xe4a9 0x832b +0xe4aa 0x8317 +0xe4ab 0x8318 +0xe4ac 0x8385 +0xe4ad 0x839a +0xe4ae 0x83aa +0xe4af 0x839f +0xe4b0 0x83a2 +0xe4b1 0x8396 +0xe4b2 0x8323 +0xe4b3 0x838e +0xe4b4 0x8387 +0xe4b5 0x838a +0xe4b6 0x837c +0xe4b7 0x83b5 +0xe4b8 0x8373 +0xe4b9 0x8375 +0xe4ba 0x83a0 +0xe4bb 0x8389 +0xe4bc 0x83a8 +0xe4bd 0x83f4 +0xe4be 0x8413 +0xe4bf 0x83eb +0xe4c0 0x83ce +0xe4c1 0x83fd +0xe4c2 0x8403 +0xe4c3 0x83d8 +0xe4c4 0x840b +0xe4c5 0x83c1 +0xe4c6 0x83f7 +0xe4c7 0x8407 +0xe4c8 0x83e0 +0xe4c9 0x83f2 +0xe4ca 0x840d +0xe4cb 0x8422 +0xe4cc 0x8420 +0xe4cd 0x83bd +0xe4ce 0x8438 +0xe4cf 0x8506 +0xe4d0 0x83fb +0xe4d1 0x846d +0xe4d2 0x842a +0xe4d3 0x843c +0xe4d4 0x855a +0xe4d5 0x8484 +0xe4d6 0x8477 +0xe4d7 0x846b +0xe4d8 0x84ad +0xe4d9 0x846e +0xe4da 0x8482 +0xe4db 0x8469 +0xe4dc 0x8446 +0xe4dd 0x842c +0xe4de 0x846f +0xe4df 0x8479 +0xe4e0 0x8435 +0xe4e1 0x84ca +0xe4e2 0x8462 +0xe4e3 0x84b9 +0xe4e4 0x84bf +0xe4e5 0x849f +0xe4e6 0x84d9 +0xe4e7 0x84cd +0xe4e8 0x84bb +0xe4e9 0x84da +0xe4ea 0x84d0 +0xe4eb 0x84c1 +0xe4ec 0x84c6 +0xe4ed 0x84d6 +0xe4ee 0x84a1 +0xe4ef 0x8521 +0xe4f0 0x84ff +0xe4f1 0x84f4 +0xe4f2 0x8517 +0xe4f3 0x8518 +0xe4f4 0x852c +0xe4f5 0x851f +0xe4f6 0x8515 +0xe4f7 0x8514 +0xe4f8 0x84fc +0xe4f9 0x8540 +0xe4fa 0x8563 +0xe4fb 0x8558 +0xe4fc 0x8548 +0xe540 0x8541 +0xe541 0x8602 +0xe542 0x854b +0xe543 0x8555 +0xe544 0x8580 +0xe545 0x85a4 +0xe546 0x8588 +0xe547 0x8591 +0xe548 0x858a +0xe549 0x85a8 +0xe54a 0x856d +0xe54b 0x8594 +0xe54c 0x859b +0xe54d 0x85ea +0xe54e 0x8587 +0xe54f 0x859c +0xe550 0x8577 +0xe551 0x857e +0xe552 0x8590 +0xe553 0x85c9 +0xe554 0x85ba +0xe555 0x85cf +0xe556 0x85b9 +0xe557 0x85d0 +0xe558 0x85d5 +0xe559 0x85dd +0xe55a 0x85e5 +0xe55b 0x85dc +0xe55c 0x85f9 +0xe55d 0x860a +0xe55e 0x8613 +0xe55f 0x860b +0xe560 0x85fe +0xe561 0x85fa +0xe562 0x8606 +0xe563 0x8622 +0xe564 0x861a +0xe565 0x8630 +0xe566 0x863f +0xe567 0x864d +0xe568 0x4e55 +0xe569 0x8654 +0xe56a 0x865f +0xe56b 0x8667 +0xe56c 0x8671 +0xe56d 0x8693 +0xe56e 0x86a3 +0xe56f 0x86a9 +0xe570 0x86aa +0xe571 0x868b +0xe572 0x868c +0xe573 0x86b6 +0xe574 0x86af +0xe575 0x86c4 +0xe576 0x86c6 +0xe577 0x86b0 +0xe578 0x86c9 +0xe579 0x8823 +0xe57a 0x86ab +0xe57b 0x86d4 +0xe57c 0x86de +0xe57d 0x86e9 +0xe57e 0x86ec +0xe580 0x86df +0xe581 0x86db +0xe582 0x86ef +0xe583 0x8712 +0xe584 0x8706 +0xe585 0x8708 +0xe586 0x8700 +0xe587 0x8703 +0xe588 0x86fb +0xe589 0x8711 +0xe58a 0x8709 +0xe58b 0x870d +0xe58c 0x86f9 +0xe58d 0x870a +0xe58e 0x8734 +0xe58f 0x873f +0xe590 0x8737 +0xe591 0x873b +0xe592 0x8725 +0xe593 0x8729 +0xe594 0x871a +0xe595 0x8760 +0xe596 0x875f +0xe597 0x8778 +0xe598 0x874c +0xe599 0x874e +0xe59a 0x8774 +0xe59b 0x8757 +0xe59c 0x8768 +0xe59d 0x876e +0xe59e 0x8759 +0xe59f 0x8753 +0xe5a0 0x8763 +0xe5a1 0x876a +0xe5a2 0x8805 +0xe5a3 0x87a2 +0xe5a4 0x879f +0xe5a5 0x8782 +0xe5a6 0x87af +0xe5a7 0x87cb +0xe5a8 0x87bd +0xe5a9 0x87c0 +0xe5aa 0x87d0 +0xe5ab 0x96d6 +0xe5ac 0x87ab +0xe5ad 0x87c4 +0xe5ae 0x87b3 +0xe5af 0x87c7 +0xe5b0 0x87c6 +0xe5b1 0x87bb +0xe5b2 0x87ef +0xe5b3 0x87f2 +0xe5b4 0x87e0 +0xe5b5 0x880f +0xe5b6 0x880d +0xe5b7 0x87fe +0xe5b8 0x87f6 +0xe5b9 0x87f7 +0xe5ba 0x880e +0xe5bb 0x87d2 +0xe5bc 0x8811 +0xe5bd 0x8816 +0xe5be 0x8815 +0xe5bf 0x8822 +0xe5c0 0x8821 +0xe5c1 0x8831 +0xe5c2 0x8836 +0xe5c3 0x8839 +0xe5c4 0x8827 +0xe5c5 0x883b +0xe5c6 0x8844 +0xe5c7 0x8842 +0xe5c8 0x8852 +0xe5c9 0x8859 +0xe5ca 0x885e +0xe5cb 0x8862 +0xe5cc 0x886b +0xe5cd 0x8881 +0xe5ce 0x887e +0xe5cf 0x889e +0xe5d0 0x8875 +0xe5d1 0x887d +0xe5d2 0x88b5 +0xe5d3 0x8872 +0xe5d4 0x8882 +0xe5d5 0x8897 +0xe5d6 0x8892 +0xe5d7 0x88ae +0xe5d8 0x8899 +0xe5d9 0x88a2 +0xe5da 0x888d +0xe5db 0x88a4 +0xe5dc 0x88b0 +0xe5dd 0x88bf +0xe5de 0x88b1 +0xe5df 0x88c3 +0xe5e0 0x88c4 +0xe5e1 0x88d4 +0xe5e2 0x88d8 +0xe5e3 0x88d9 +0xe5e4 0x88dd +0xe5e5 0x88f9 +0xe5e6 0x8902 +0xe5e7 0x88fc +0xe5e8 0x88f4 +0xe5e9 0x88e8 +0xe5ea 0x88f2 +0xe5eb 0x8904 +0xe5ec 0x890c +0xe5ed 0x890a +0xe5ee 0x8913 +0xe5ef 0x8943 +0xe5f0 0x891e +0xe5f1 0x8925 +0xe5f2 0x892a +0xe5f3 0x892b +0xe5f4 0x8941 +0xe5f5 0x8944 +0xe5f6 0x893b +0xe5f7 0x8936 +0xe5f8 0x8938 +0xe5f9 0x894c +0xe5fa 0x891d +0xe5fb 0x8960 +0xe5fc 0x895e +0xe640 0x8966 +0xe641 0x8964 +0xe642 0x896d +0xe643 0x896a +0xe644 0x896f +0xe645 0x8974 +0xe646 0x8977 +0xe647 0x897e +0xe648 0x8983 +0xe649 0x8988 +0xe64a 0x898a +0xe64b 0x8993 +0xe64c 0x8998 +0xe64d 0x89a1 +0xe64e 0x89a9 +0xe64f 0x89a6 +0xe650 0x89ac +0xe651 0x89af +0xe652 0x89b2 +0xe653 0x89ba +0xe654 0x89bd +0xe655 0x89bf +0xe656 0x89c0 +0xe657 0x89da +0xe658 0x89dc +0xe659 0x89dd +0xe65a 0x89e7 +0xe65b 0x89f4 +0xe65c 0x89f8 +0xe65d 0x8a03 +0xe65e 0x8a16 +0xe65f 0x8a10 +0xe660 0x8a0c +0xe661 0x8a1b +0xe662 0x8a1d +0xe663 0x8a25 +0xe664 0x8a36 +0xe665 0x8a41 +0xe666 0x8a5b +0xe667 0x8a52 +0xe668 0x8a46 +0xe669 0x8a48 +0xe66a 0x8a7c +0xe66b 0x8a6d +0xe66c 0x8a6c +0xe66d 0x8a62 +0xe66e 0x8a85 +0xe66f 0x8a82 +0xe670 0x8a84 +0xe671 0x8aa8 +0xe672 0x8aa1 +0xe673 0x8a91 +0xe674 0x8aa5 +0xe675 0x8aa6 +0xe676 0x8a9a +0xe677 0x8aa3 +0xe678 0x8ac4 +0xe679 0x8acd +0xe67a 0x8ac2 +0xe67b 0x8ada +0xe67c 0x8aeb +0xe67d 0x8af3 +0xe67e 0x8ae7 +0xe680 0x8ae4 +0xe681 0x8af1 +0xe682 0x8b14 +0xe683 0x8ae0 +0xe684 0x8ae2 +0xe685 0x8af7 +0xe686 0x8ade +0xe687 0x8adb +0xe688 0x8b0c +0xe689 0x8b07 +0xe68a 0x8b1a +0xe68b 0x8ae1 +0xe68c 0x8b16 +0xe68d 0x8b10 +0xe68e 0x8b17 +0xe68f 0x8b20 +0xe690 0x8b33 +0xe691 0x97ab +0xe692 0x8b26 +0xe693 0x8b2b +0xe694 0x8b3e +0xe695 0x8b28 +0xe696 0x8b41 +0xe697 0x8b4c +0xe698 0x8b4f +0xe699 0x8b4e +0xe69a 0x8b49 +0xe69b 0x8b56 +0xe69c 0x8b5b +0xe69d 0x8b5a +0xe69e 0x8b6b +0xe69f 0x8b5f +0xe6a0 0x8b6c +0xe6a1 0x8b6f +0xe6a2 0x8b74 +0xe6a3 0x8b7d +0xe6a4 0x8b80 +0xe6a5 0x8b8c +0xe6a6 0x8b8e +0xe6a7 0x8b92 +0xe6a8 0x8b93 +0xe6a9 0x8b96 +0xe6aa 0x8b99 +0xe6ab 0x8b9a +0xe6ac 0x8c3a +0xe6ad 0x8c41 +0xe6ae 0x8c3f +0xe6af 0x8c48 +0xe6b0 0x8c4c +0xe6b1 0x8c4e +0xe6b2 0x8c50 +0xe6b3 0x8c55 +0xe6b4 0x8c62 +0xe6b5 0x8c6c +0xe6b6 0x8c78 +0xe6b7 0x8c7a +0xe6b8 0x8c82 +0xe6b9 0x8c89 +0xe6ba 0x8c85 +0xe6bb 0x8c8a +0xe6bc 0x8c8d +0xe6bd 0x8c8e +0xe6be 0x8c94 +0xe6bf 0x8c7c +0xe6c0 0x8c98 +0xe6c1 0x621d +0xe6c2 0x8cad +0xe6c3 0x8caa +0xe6c4 0x8cbd +0xe6c5 0x8cb2 +0xe6c6 0x8cb3 +0xe6c7 0x8cae +0xe6c8 0x8cb6 +0xe6c9 0x8cc8 +0xe6ca 0x8cc1 +0xe6cb 0x8ce4 +0xe6cc 0x8ce3 +0xe6cd 0x8cda +0xe6ce 0x8cfd +0xe6cf 0x8cfa +0xe6d0 0x8cfb +0xe6d1 0x8d04 +0xe6d2 0x8d05 +0xe6d3 0x8d0a +0xe6d4 0x8d07 +0xe6d5 0x8d0f +0xe6d6 0x8d0d +0xe6d7 0x8d10 +0xe6d8 0x9f4e +0xe6d9 0x8d13 +0xe6da 0x8ccd +0xe6db 0x8d14 +0xe6dc 0x8d16 +0xe6dd 0x8d67 +0xe6de 0x8d6d +0xe6df 0x8d71 +0xe6e0 0x8d73 +0xe6e1 0x8d81 +0xe6e2 0x8d99 +0xe6e3 0x8dc2 +0xe6e4 0x8dbe +0xe6e5 0x8dba +0xe6e6 0x8dcf +0xe6e7 0x8dda +0xe6e8 0x8dd6 +0xe6e9 0x8dcc +0xe6ea 0x8ddb +0xe6eb 0x8dcb +0xe6ec 0x8dea +0xe6ed 0x8deb +0xe6ee 0x8ddf +0xe6ef 0x8de3 +0xe6f0 0x8dfc +0xe6f1 0x8e08 +0xe6f2 0x8e09 +0xe6f3 0x8dff +0xe6f4 0x8e1d +0xe6f5 0x8e1e +0xe6f6 0x8e10 +0xe6f7 0x8e1f +0xe6f8 0x8e42 +0xe6f9 0x8e35 +0xe6fa 0x8e30 +0xe6fb 0x8e34 +0xe6fc 0x8e4a +0xe740 0x8e47 +0xe741 0x8e49 +0xe742 0x8e4c +0xe743 0x8e50 +0xe744 0x8e48 +0xe745 0x8e59 +0xe746 0x8e64 +0xe747 0x8e60 +0xe748 0x8e2a +0xe749 0x8e63 +0xe74a 0x8e55 +0xe74b 0x8e76 +0xe74c 0x8e72 +0xe74d 0x8e7c +0xe74e 0x8e81 +0xe74f 0x8e87 +0xe750 0x8e85 +0xe751 0x8e84 +0xe752 0x8e8b +0xe753 0x8e8a +0xe754 0x8e93 +0xe755 0x8e91 +0xe756 0x8e94 +0xe757 0x8e99 +0xe758 0x8eaa +0xe759 0x8ea1 +0xe75a 0x8eac +0xe75b 0x8eb0 +0xe75c 0x8ec6 +0xe75d 0x8eb1 +0xe75e 0x8ebe +0xe75f 0x8ec5 +0xe760 0x8ec8 +0xe761 0x8ecb +0xe762 0x8edb +0xe763 0x8ee3 +0xe764 0x8efc +0xe765 0x8efb +0xe766 0x8eeb +0xe767 0x8efe +0xe768 0x8f0a +0xe769 0x8f05 +0xe76a 0x8f15 +0xe76b 0x8f12 +0xe76c 0x8f19 +0xe76d 0x8f13 +0xe76e 0x8f1c +0xe76f 0x8f1f +0xe770 0x8f1b +0xe771 0x8f0c +0xe772 0x8f26 +0xe773 0x8f33 +0xe774 0x8f3b +0xe775 0x8f39 +0xe776 0x8f45 +0xe777 0x8f42 +0xe778 0x8f3e +0xe779 0x8f4c +0xe77a 0x8f49 +0xe77b 0x8f46 +0xe77c 0x8f4e +0xe77d 0x8f57 +0xe77e 0x8f5c +0xe780 0x8f62 +0xe781 0x8f63 +0xe782 0x8f64 +0xe783 0x8f9c +0xe784 0x8f9f +0xe785 0x8fa3 +0xe786 0x8fad +0xe787 0x8faf +0xe788 0x8fb7 +0xe789 0x8fda +0xe78a 0x8fe5 +0xe78b 0x8fe2 +0xe78c 0x8fea +0xe78d 0x8fef +0xe78e 0x9087 +0xe78f 0x8ff4 +0xe790 0x9005 +0xe791 0x8ff9 +0xe792 0x8ffa +0xe793 0x9011 +0xe794 0x9015 +0xe795 0x9021 +0xe796 0x900d +0xe797 0x901e +0xe798 0x9016 +0xe799 0x900b +0xe79a 0x9027 +0xe79b 0x9036 +0xe79c 0x9035 +0xe79d 0x9039 +0xe79e 0x8ff8 +0xe79f 0x904f +0xe7a0 0x9050 +0xe7a1 0x9051 +0xe7a2 0x9052 +0xe7a3 0x900e +0xe7a4 0x9049 +0xe7a5 0x903e +0xe7a6 0x9056 +0xe7a7 0x9058 +0xe7a8 0x905e +0xe7a9 0x9068 +0xe7aa 0x906f +0xe7ab 0x9076 +0xe7ac 0x96a8 +0xe7ad 0x9072 +0xe7ae 0x9082 +0xe7af 0x907d +0xe7b0 0x9081 +0xe7b1 0x9080 +0xe7b2 0x908a +0xe7b3 0x9089 +0xe7b4 0x908f +0xe7b5 0x90a8 +0xe7b6 0x90af +0xe7b7 0x90b1 +0xe7b8 0x90b5 +0xe7b9 0x90e2 +0xe7ba 0x90e4 +0xe7bb 0x6248 +0xe7bc 0x90db +0xe7bd 0x9102 +0xe7be 0x9112 +0xe7bf 0x9119 +0xe7c0 0x9132 +0xe7c1 0x9130 +0xe7c2 0x914a +0xe7c3 0x9156 +0xe7c4 0x9158 +0xe7c5 0x9163 +0xe7c6 0x9165 +0xe7c7 0x9169 +0xe7c8 0x9173 +0xe7c9 0x9172 +0xe7ca 0x918b +0xe7cb 0x9189 +0xe7cc 0x9182 +0xe7cd 0x91a2 +0xe7ce 0x91ab +0xe7cf 0x91af +0xe7d0 0x91aa +0xe7d1 0x91b5 +0xe7d2 0x91b4 +0xe7d3 0x91ba +0xe7d4 0x91c0 +0xe7d5 0x91c1 +0xe7d6 0x91c9 +0xe7d7 0x91cb +0xe7d8 0x91d0 +0xe7d9 0x91d6 +0xe7da 0x91df +0xe7db 0x91e1 +0xe7dc 0x91db +0xe7dd 0x91fc +0xe7de 0x91f5 +0xe7df 0x91f6 +0xe7e0 0x921e +0xe7e1 0x91ff +0xe7e2 0x9214 +0xe7e3 0x922c +0xe7e4 0x9215 +0xe7e5 0x9211 +0xe7e6 0x925e +0xe7e7 0x9257 +0xe7e8 0x9245 +0xe7e9 0x9249 +0xe7ea 0x9264 +0xe7eb 0x9248 +0xe7ec 0x9295 +0xe7ed 0x923f +0xe7ee 0x924b +0xe7ef 0x9250 +0xe7f0 0x929c +0xe7f1 0x9296 +0xe7f2 0x9293 +0xe7f3 0x929b +0xe7f4 0x925a +0xe7f5 0x92cf +0xe7f6 0x92b9 +0xe7f7 0x92b7 +0xe7f8 0x92e9 +0xe7f9 0x930f +0xe7fa 0x92fa +0xe7fb 0x9344 +0xe7fc 0x932e +0xe840 0x9319 +0xe841 0x9322 +0xe842 0x931a +0xe843 0x9323 +0xe844 0x933a +0xe845 0x9335 +0xe846 0x933b +0xe847 0x935c +0xe848 0x9360 +0xe849 0x937c +0xe84a 0x936e +0xe84b 0x9356 +0xe84c 0x93b0 +0xe84d 0x93ac +0xe84e 0x93ad +0xe84f 0x9394 +0xe850 0x93b9 +0xe851 0x93d6 +0xe852 0x93d7 +0xe853 0x93e8 +0xe854 0x93e5 +0xe855 0x93d8 +0xe856 0x93c3 +0xe857 0x93dd +0xe858 0x93d0 +0xe859 0x93c8 +0xe85a 0x93e4 +0xe85b 0x941a +0xe85c 0x9414 +0xe85d 0x9413 +0xe85e 0x9403 +0xe85f 0x9407 +0xe860 0x9410 +0xe861 0x9436 +0xe862 0x942b +0xe863 0x9435 +0xe864 0x9421 +0xe865 0x943a +0xe866 0x9441 +0xe867 0x9452 +0xe868 0x9444 +0xe869 0x945b +0xe86a 0x9460 +0xe86b 0x9462 +0xe86c 0x945e +0xe86d 0x946a +0xe86e 0x9229 +0xe86f 0x9470 +0xe870 0x9475 +0xe871 0x9477 +0xe872 0x947d +0xe873 0x945a +0xe874 0x947c +0xe875 0x947e +0xe876 0x9481 +0xe877 0x947f +0xe878 0x9582 +0xe879 0x9587 +0xe87a 0x958a +0xe87b 0x9594 +0xe87c 0x9596 +0xe87d 0x9598 +0xe87e 0x9599 +0xe880 0x95a0 +0xe881 0x95a8 +0xe882 0x95a7 +0xe883 0x95ad +0xe884 0x95bc +0xe885 0x95bb +0xe886 0x95b9 +0xe887 0x95be +0xe888 0x95ca +0xe889 0x6ff6 +0xe88a 0x95c3 +0xe88b 0x95cd +0xe88c 0x95cc +0xe88d 0x95d5 +0xe88e 0x95d4 +0xe88f 0x95d6 +0xe890 0x95dc +0xe891 0x95e1 +0xe892 0x95e5 +0xe893 0x95e2 +0xe894 0x9621 +0xe895 0x9628 +0xe896 0x962e +0xe897 0x962f +0xe898 0x9642 +0xe899 0x964c +0xe89a 0x964f +0xe89b 0x964b +0xe89c 0x9677 +0xe89d 0x965c +0xe89e 0x965e +0xe89f 0x965d +0xe8a0 0x965f +0xe8a1 0x9666 +0xe8a2 0x9672 +0xe8a3 0x966c +0xe8a4 0x968d +0xe8a5 0x9698 +0xe8a6 0x9695 +0xe8a7 0x9697 +0xe8a8 0x96aa +0xe8a9 0x96a7 +0xe8aa 0x96b1 +0xe8ab 0x96b2 +0xe8ac 0x96b0 +0xe8ad 0x96b4 +0xe8ae 0x96b6 +0xe8af 0x96b8 +0xe8b0 0x96b9 +0xe8b1 0x96ce +0xe8b2 0x96cb +0xe8b3 0x96c9 +0xe8b4 0x96cd +0xe8b5 0x894d +0xe8b6 0x96dc +0xe8b7 0x970d +0xe8b8 0x96d5 +0xe8b9 0x96f9 +0xe8ba 0x9704 +0xe8bb 0x9706 +0xe8bc 0x9708 +0xe8bd 0x9713 +0xe8be 0x970e +0xe8bf 0x9711 +0xe8c0 0x970f +0xe8c1 0x9716 +0xe8c2 0x9719 +0xe8c3 0x9724 +0xe8c4 0x972a +0xe8c5 0x9730 +0xe8c6 0x9739 +0xe8c7 0x973d +0xe8c8 0x973e +0xe8c9 0x9744 +0xe8ca 0x9746 +0xe8cb 0x9748 +0xe8cc 0x9742 +0xe8cd 0x9749 +0xe8ce 0x975c +0xe8cf 0x9760 +0xe8d0 0x9764 +0xe8d1 0x9766 +0xe8d2 0x9768 +0xe8d3 0x52d2 +0xe8d4 0x976b +0xe8d5 0x9771 +0xe8d6 0x9779 +0xe8d7 0x9785 +0xe8d8 0x977c +0xe8d9 0x9781 +0xe8da 0x977a +0xe8db 0x9786 +0xe8dc 0x978b +0xe8dd 0x978f +0xe8de 0x9790 +0xe8df 0x979c +0xe8e0 0x97a8 +0xe8e1 0x97a6 +0xe8e2 0x97a3 +0xe8e3 0x97b3 +0xe8e4 0x97b4 +0xe8e5 0x97c3 +0xe8e6 0x97c6 +0xe8e7 0x97c8 +0xe8e8 0x97cb +0xe8e9 0x97dc +0xe8ea 0x97ed +0xe8eb 0x9f4f +0xe8ec 0x97f2 +0xe8ed 0x7adf +0xe8ee 0x97f6 +0xe8ef 0x97f5 +0xe8f0 0x980f +0xe8f1 0x980c +0xe8f2 0x9838 +0xe8f3 0x9824 +0xe8f4 0x9821 +0xe8f5 0x9837 +0xe8f6 0x983d +0xe8f7 0x9846 +0xe8f8 0x984f +0xe8f9 0x984b +0xe8fa 0x986b +0xe8fb 0x986f +0xe8fc 0x9870 +0xe940 0x9871 +0xe941 0x9874 +0xe942 0x9873 +0xe943 0x98aa +0xe944 0x98af +0xe945 0x98b1 +0xe946 0x98b6 +0xe947 0x98c4 +0xe948 0x98c3 +0xe949 0x98c6 +0xe94a 0x98e9 +0xe94b 0x98eb +0xe94c 0x9903 +0xe94d 0x9909 +0xe94e 0x9912 +0xe94f 0x9914 +0xe950 0x9918 +0xe951 0x9921 +0xe952 0x991d +0xe953 0x991e +0xe954 0x9924 +0xe955 0x9920 +0xe956 0x992c +0xe957 0x992e +0xe958 0x993d +0xe959 0x993e +0xe95a 0x9942 +0xe95b 0x9949 +0xe95c 0x9945 +0xe95d 0x9950 +0xe95e 0x994b +0xe95f 0x9951 +0xe960 0x9952 +0xe961 0x994c +0xe962 0x9955 +0xe963 0x9997 +0xe964 0x9998 +0xe965 0x99a5 +0xe966 0x99ad +0xe967 0x99ae +0xe968 0x99bc +0xe969 0x99df +0xe96a 0x99db +0xe96b 0x99dd +0xe96c 0x99d8 +0xe96d 0x99d1 +0xe96e 0x99ed +0xe96f 0x99ee +0xe970 0x99f1 +0xe971 0x99f2 +0xe972 0x99fb +0xe973 0x99f8 +0xe974 0x9a01 +0xe975 0x9a0f +0xe976 0x9a05 +0xe977 0x99e2 +0xe978 0x9a19 +0xe979 0x9a2b +0xe97a 0x9a37 +0xe97b 0x9a45 +0xe97c 0x9a42 +0xe97d 0x9a40 +0xe97e 0x9a43 +0xe980 0x9a3e +0xe981 0x9a55 +0xe982 0x9a4d +0xe983 0x9a5b +0xe984 0x9a57 +0xe985 0x9a5f +0xe986 0x9a62 +0xe987 0x9a65 +0xe988 0x9a64 +0xe989 0x9a69 +0xe98a 0x9a6b +0xe98b 0x9a6a +0xe98c 0x9aad +0xe98d 0x9ab0 +0xe98e 0x9abc +0xe98f 0x9ac0 +0xe990 0x9acf +0xe991 0x9ad1 +0xe992 0x9ad3 +0xe993 0x9ad4 +0xe994 0x9ade +0xe995 0x9adf +0xe996 0x9ae2 +0xe997 0x9ae3 +0xe998 0x9ae6 +0xe999 0x9aef +0xe99a 0x9aeb +0xe99b 0x9aee +0xe99c 0x9af4 +0xe99d 0x9af1 +0xe99e 0x9af7 +0xe99f 0x9afb +0xe9a0 0x9b06 +0xe9a1 0x9b18 +0xe9a2 0x9b1a +0xe9a3 0x9b1f +0xe9a4 0x9b22 +0xe9a5 0x9b23 +0xe9a6 0x9b25 +0xe9a7 0x9b27 +0xe9a8 0x9b28 +0xe9a9 0x9b29 +0xe9aa 0x9b2a +0xe9ab 0x9b2e +0xe9ac 0x9b2f +0xe9ad 0x9b32 +0xe9ae 0x9b44 +0xe9af 0x9b43 +0xe9b0 0x9b4f +0xe9b1 0x9b4d +0xe9b2 0x9b4e +0xe9b3 0x9b51 +0xe9b4 0x9b58 +0xe9b5 0x9b74 +0xe9b6 0x9b93 +0xe9b7 0x9b83 +0xe9b8 0x9b91 +0xe9b9 0x9b96 +0xe9ba 0x9b97 +0xe9bb 0x9b9f +0xe9bc 0x9ba0 +0xe9bd 0x9ba8 +0xe9be 0x9bb4 +0xe9bf 0x9bc0 +0xe9c0 0x9bca +0xe9c1 0x9bb9 +0xe9c2 0x9bc6 +0xe9c3 0x9bcf +0xe9c4 0x9bd1 +0xe9c5 0x9bd2 +0xe9c6 0x9be3 +0xe9c7 0x9be2 +0xe9c8 0x9be4 +0xe9c9 0x9bd4 +0xe9ca 0x9be1 +0xe9cb 0x9c3a +0xe9cc 0x9bf2 +0xe9cd 0x9bf1 +0xe9ce 0x9bf0 +0xe9cf 0x9c15 +0xe9d0 0x9c14 +0xe9d1 0x9c09 +0xe9d2 0x9c13 +0xe9d3 0x9c0c +0xe9d4 0x9c06 +0xe9d5 0x9c08 +0xe9d6 0x9c12 +0xe9d7 0x9c0a +0xe9d8 0x9c04 +0xe9d9 0x9c2e +0xe9da 0x9c1b +0xe9db 0x9c25 +0xe9dc 0x9c24 +0xe9dd 0x9c21 +0xe9de 0x9c30 +0xe9df 0x9c47 +0xe9e0 0x9c32 +0xe9e1 0x9c46 +0xe9e2 0x9c3e +0xe9e3 0x9c5a +0xe9e4 0x9c60 +0xe9e5 0x9c67 +0xe9e6 0x9c76 +0xe9e7 0x9c78 +0xe9e8 0x9ce7 +0xe9e9 0x9cec +0xe9ea 0x9cf0 +0xe9eb 0x9d09 +0xe9ec 0x9d08 +0xe9ed 0x9ceb +0xe9ee 0x9d03 +0xe9ef 0x9d06 +0xe9f0 0x9d2a +0xe9f1 0x9d26 +0xe9f2 0x9daf +0xe9f3 0x9d23 +0xe9f4 0x9d1f +0xe9f5 0x9d44 +0xe9f6 0x9d15 +0xe9f7 0x9d12 +0xe9f8 0x9d41 +0xe9f9 0x9d3f +0xe9fa 0x9d3e +0xe9fb 0x9d46 +0xe9fc 0x9d48 +0xea40 0x9d5d +0xea41 0x9d5e +0xea42 0x9d64 +0xea43 0x9d51 +0xea44 0x9d50 +0xea45 0x9d59 +0xea46 0x9d72 +0xea47 0x9d89 +0xea48 0x9d87 +0xea49 0x9dab +0xea4a 0x9d6f +0xea4b 0x9d7a +0xea4c 0x9d9a +0xea4d 0x9da4 +0xea4e 0x9da9 +0xea4f 0x9db2 +0xea50 0x9dc4 +0xea51 0x9dc1 +0xea52 0x9dbb +0xea53 0x9db8 +0xea54 0x9dba +0xea55 0x9dc6 +0xea56 0x9dcf +0xea57 0x9dc2 +0xea58 0x9dd9 +0xea59 0x9dd3 +0xea5a 0x9df8 +0xea5b 0x9de6 +0xea5c 0x9ded +0xea5d 0x9def +0xea5e 0x9dfd +0xea5f 0x9e1a +0xea60 0x9e1b +0xea61 0x9e1e +0xea62 0x9e75 +0xea63 0x9e79 +0xea64 0x9e7d +0xea65 0x9e81 +0xea66 0x9e88 +0xea67 0x9e8b +0xea68 0x9e8c +0xea69 0x9e92 +0xea6a 0x9e95 +0xea6b 0x9e91 +0xea6c 0x9e9d +0xea6d 0x9ea5 +0xea6e 0x9ea9 +0xea6f 0x9eb8 +0xea70 0x9eaa +0xea71 0x9ead +0xea72 0x9761 +0xea73 0x9ecc +0xea74 0x9ece +0xea75 0x9ecf +0xea76 0x9ed0 +0xea77 0x9ed4 +0xea78 0x9edc +0xea79 0x9ede +0xea7a 0x9edd +0xea7b 0x9ee0 +0xea7c 0x9ee5 +0xea7d 0x9ee8 +0xea7e 0x9eef +0xea80 0x9ef4 +0xea81 0x9ef6 +0xea82 0x9ef7 +0xea83 0x9ef9 +0xea84 0x9efb +0xea85 0x9efc +0xea86 0x9efd +0xea87 0x9f07 +0xea88 0x9f08 +0xea89 0x76b7 +0xea8a 0x9f15 +0xea8b 0x9f21 +0xea8c 0x9f2c +0xea8d 0x9f3e +0xea8e 0x9f4a +0xea8f 0x9f52 +0xea90 0x9f54 +0xea91 0x9f63 +0xea92 0x9f5f +0xea93 0x9f60 +0xea94 0x9f61 +0xea95 0x9f66 +0xea96 0x9f67 +0xea97 0x9f6c +0xea98 0x9f6a +0xea99 0x9f77 +0xea9a 0x9f72 +0xea9b 0x9f76 +0xea9c 0x9f95 +0xea9d 0x9f9c +0xea9e 0x9fa0 +0xea9f 0x582f +0xeaa0 0x69c7 +0xeaa1 0x9059 +0xeaa2 0x7464 +0xeaa3 0x51dc +0xeaa4 0x7199 diff --git a/jdk/make/tools/CharsetMapping/dbcs b/jdk/make/tools/CharsetMapping/dbcs index 69f975c3196..abc18f44c25 100644 --- a/jdk/make/tools/CharsetMapping/dbcs +++ b/jdk/make/tools/CharsetMapping/dbcs @@ -10,6 +10,8 @@ MS936 x-mswin-936 MS936 basic sun.nio.cs.ext true 0x81 0xfe 0x MS949 x-windows-949 MS949 basic sun.nio.cs.ext true 0x81 0xfe 0x41 0xfe MS950 x-windows-950 MS950 basic sun.nio.cs.ext true 0x81 0xfe 0x40 0xfe GBK GBK GBK basic sun.nio.cs.ext true 0x81 0xfe 0x40 0xfe +SJIS Shift_JIS SJIS basic sun.nio.cs.ext true 0x81 0xfc 0x40 0xfc +PCK x-PCK PCK basic sun.nio.cs.ext true 0x81 0xfc 0x40 0xfc IBM1364 x-IBM1364 Cp1364 ebcdic sun.nio.cs.ext false 0x40 0xde 0x40 0xfe IBM1381 x-IBM1381 Cp1381 basic sun.nio.cs.ext true 0x8c 0xf7 0xa1 0xfe IBM1383 x-IBM1383 Cp1383 euc_sim sun.nio.cs.ext true 0xa1 0xfe 0xa1 0xfe @@ -24,3 +26,10 @@ IBM948 x-IBM948 Cp948 basic sun.nio.cs.ext true 0x81 0xfe 0 IBM949 x-IBM949 Cp949 basic sun.nio.cs.ext false 0x8f 0xfe 0xa1 0xfe IBM950 x-IBM950 Cp950 basic sun.nio.cs.ext true 0x81 0xfe 0x40 0xfe IBM970 x-IBM970 Cp970 euc_sim sun.nio.cs.ext true 0xa1 0xfe 0xa1 0xfe +JIS_X_0208 x-JIS0208 JIS0208 dbcsonly sun.nio.cs.ext false 0x21 0x7e 0x21 0x7e +JIS_X_0212 JIS_X0212-1990 JIS0212 dbcsonly sun.nio.cs.ext false 0x21 0x7e 0x21 0x7e +JIS_X_0208_Solaris x-JIS0208_Solaris JIS0208_Solaris dbcsonly sun.nio.cs.ext false 0x21 0x9e 0x21 0x7e +JIS_X_0208_MS5022X x-JIS0208_MS5022X JIS0208_MS5022X dbcsonly sun.nio.cs.ext false 0x21 0x7e 0x21 0x7e +JIS_X_0208_MS932 x-JIS0208_MS932 JIS0208_MS932 dbcsonly sun.nio.cs.ext false 0x21 0x7e 0x21 0x7e +JIS_X_0212_Solaris x-JIS0212_Solaris JIS0212_Solaris dbcsonly sun.nio.cs.ext false 0x21 0x7e 0x21 0x7e +JIS_X_0212_MS5022X x-JIS0212_MS5022X JIS0212_MS5022X dbcsonly sun.nio.cs.ext false 0x21 0x7e 0x21 0x7e diff --git a/jdk/make/tools/CharsetMapping/extsbcs b/jdk/make/tools/CharsetMapping/extsbcs index ac24dbe7a7d..61d089a6624 100644 --- a/jdk/make/tools/CharsetMapping/extsbcs +++ b/jdk/make/tools/CharsetMapping/extsbcs @@ -53,7 +53,7 @@ ISO_8859_11 x-iso-8859-11 x-iso-8859-11 true sun.nio.cs.ext ISO_8859_3 ISO-8859-3 ISO8859_3 true sun.nio.cs.ext ISO_8859_6 ISO-8859-6 ISO8859_6 true sun.nio.cs.ext ISO_8859_8 ISO-8859-8 ISO8859_8 true sun.nio.cs.ext -#JIS_X_0201 JIS_X0201 JIS_X0201 true sun.nio.cs.ext +JIS_X_0201 JIS_X0201 JIS_X0201 true sun.nio.cs.ext MS1255 windows-1255 Cp1255 true sun.nio.cs.ext MS1256 windows-1256 Cp1256 true sun.nio.cs.ext MS1258 windows-1258 Cp1258 true sun.nio.cs.ext diff --git a/jdk/make/tools/src/build/tools/charsetmapping/DBCS.java b/jdk/make/tools/src/build/tools/charsetmapping/DBCS.java index 5ecae673b6e..479c2c993eb 100644 --- a/jdk/make/tools/src/build/tools/charsetmapping/DBCS.java +++ b/jdk/make/tools/src/build/tools/charsetmapping/DBCS.java @@ -194,6 +194,15 @@ public class DBCS { if (hisName == null) hisName = ""; + // (5) c2b replacement, only used for JIs0208/0212, which + // are two pure db charsets so default '3f' does not work + String c2bRepl = ""; + if (clzName.startsWith("JIS_X_0208")) { + c2bRepl = "new byte[]{ (byte)0x21, (byte)0x29 },"; + } else if (clzName.startsWith("JIS_X_0212")) { + c2bRepl = "new byte[]{ (byte)0x22, (byte)0x44 },"; + } + while (s.hasNextLine()) { String line = s.nextLine(); if (line.indexOf("$") == -1) { @@ -227,7 +236,8 @@ public class DBCS { .replace("$B2C$", b2c) .replace("$C2BLENGTH$", "0x" + Integer.toString(c2bOff, 16)) .replace("$NONROUNDTRIP_B2C$", b2cNR) - .replace("$NONROUNDTRIP_C2B$", c2bNR); + .replace("$NONROUNDTRIP_C2B$", c2bNR) + .replace("$ENC_REPLACEMENT$", c2bRepl); ops.println(line); } diff --git a/jdk/make/tools/src/build/tools/charsetmapping/SBCS.java b/jdk/make/tools/src/build/tools/charsetmapping/SBCS.java index afb529b1f2c..612586a8d80 100644 --- a/jdk/make/tools/src/build/tools/charsetmapping/SBCS.java +++ b/jdk/make/tools/src/build/tools/charsetmapping/SBCS.java @@ -106,7 +106,7 @@ public class SBCS { } } - static Pattern sbmap = Pattern.compile("0x(\\p{XDigit}++)\\s++U\\+(\\p{XDigit}++)(\\s++#.*)?"); + static Pattern sbmap = Pattern.compile("0x(\\p{XDigit}++)\\s++(?:U\\+|0x)?(\\p{XDigit}++)(?:\\s++#.*)?"); private static void genClass0(String srcDir, String dstDir, String template, diff --git a/jdk/makefiles/CompileDemos.gmk b/jdk/makefiles/CompileDemos.gmk index 4a11f38795e..beda0452992 100644 --- a/jdk/makefiles/CompileDemos.gmk +++ b/jdk/makefiles/CompileDemos.gmk @@ -215,7 +215,7 @@ define SetupJVMTIDemo # Param 5 = libs for posix # Param 6 = libs for winapi # Param 7 = libs for solaris - BUILD_DEMO_JVMTI_$1_EXTRA_SRC:= $$(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/demo/jvmti/$1) \ + BUILD_DEMO_JVMTI_$1_EXTRA_SRC:= $$(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/demo/jvmti/$1) \ $$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/,$2)) BUILD_DEMO_JVMTI_$1_EXTRA_INC:=$$(addprefix -I,$$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC)) BUILD_DEMO_JVMTI_$1_LANG:=C @@ -227,18 +227,26 @@ define SetupJVMTIDemo $1_EXTRA_CXX:=$(LIBCXX) BUILD_DEMO_JVMTI_$1_O_FLAG:=$(CXX_O_FLAG_NORM) endif + + $1_CXXFLAGS:=$(CXXFLAGS_JDKLIB) $$(BUILD_DEMO_JVMTI_$1_O_FLAG) -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3 + ifeq ($1-$(OPENJDK_TARGET_CPU_ARCH),waiters-sparc) + $1_FILTER:=-xregs=no%appl + $1_CXXFLAGS:=$$(filter-out $$($1_FILTER),$$($1_CXXFLAGS)) + endif + $$(eval $$(call SetupNativeCompilation,BUILD_DEMO_JVMTI_$1,\ SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC),\ LANG:=$$(BUILD_DEMO_JVMTI_$1_LANG),\ CFLAGS:=$(CFLAGS_JDKLIB) $$(BUILD_DEMO_JVMTI_$1_O_FLAG) -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3,\ - CXXFLAGS:=$(CXXFLAGS_JDKLIB) $$(BUILD_DEMO_JVMTI_$1_O_FLAG) -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3,\ + CXXFLAGS:=$$($1_CXXFLAGS),\ LDFLAGS:=$(LDFLAGS_JDKLIB),\ LDFLAGS_SUFFIX:=$$($1_EXTRA_CXX),\ LDFLAGS_SUFFIX_posix:=$5,\ LDFLAGS_SUFFIX_winapi:=$6,\ LDFLAGS_SUFFIX_solaris:=-lc $7,\ - BIN:=$(JDK_OUTPUTDIR)/newdemoobjs/jvmti/$1,\ - LIB:=$(JDK_OUTPUTDIR)/newdemo/jvmti/$1/lib/$(LIBRARY_PREFIX)$1$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/newdemoobjs/jvmti/$1,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/newdemo/jvmti/$1/lib,\ + LIBRARY:=$1)) $$(eval $$(call SetupZipArchive,BUILD_DEMO_JVMTI_SRC_$1,\ SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC),\ @@ -262,7 +270,7 @@ define SetupJVMTIDemo BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/$1.jar endif - BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/lib/$(LIBRARY_PREFIX)$1$(SHARED_LIBRARY_SUFFIX) \ + BUILD_DEMOS += $$(BUILD_DEMO_JVMTI_$1) \ $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/src.zip \ $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/README.txt endef @@ -274,7 +282,7 @@ $(eval $(call SetupJVMTIDemo,heapViewer, agent_util)) # hprof contains error messages using __FILE__ macro. These expand to the absolute path # in the new build system and relative in the old, causing the binaries to differ. $(eval $(call SetupJVMTIDemo,hprof, java_crw_demo,\ - -I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt,C,\ + -I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt,C,\ -ldl,ws2_32.lib winmm.lib,-lsocket -lnsl)) $(eval $(call SetupJVMTIDemo,minst, agent_util java_crw_demo)) @@ -349,7 +357,7 @@ BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/README ################################################################################################## -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) $(JDK_OUTPUTDIR)/newdemoclasses/jni/Poller/% : $(JDK_TOPDIR)/src/solaris/demo/jni/Poller/% $(MKDIR) -p $(@D) @@ -386,8 +394,9 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBPOLLER,\ CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ -I$(JDK_OUTPUTDIR)/newdemoclasses/jni/Poller, \ LDFLAGS:=$(LDFLAGS_JDKLIB), \ - BIN:=$(JDK_OUTPUTDIR)/newdemoobjs/jni/Poller,\ - LIB:=$(JDK_OUTPUTDIR)/newdemoobjs/$(LIBRARY_PREFIX)Poller$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/newdemoobjs/jni/Poller,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/newdemoobjs, \ + LIBRARY:=Poller)) # # We can only compile native code after jar has been build (since we depend on generated .h files) diff --git a/jdk/makefiles/CompileJavaClasses.gmk b/jdk/makefiles/CompileJavaClasses.gmk index cd676e289b6..da8f4468fab 100644 --- a/jdk/makefiles/CompileJavaClasses.gmk +++ b/jdk/makefiles/CompileJavaClasses.gmk @@ -45,7 +45,7 @@ EXCLUDES += com/sun/pept \ com/sun/tools/example/debug/gui \ com/oracle/security -ifeq ($(PLATFORM)-$(ARCH_DATA_MODEL),windows-64) +ifeq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL),windows-64) EXCLUDES += sun/security/pkcs11 endif @@ -61,7 +61,7 @@ ifndef OPENJDK EXFILES := $(JDK_TOPDIR)/src/share/classes/javax/crypto/JarVerifier.java endif -ifneq ($(PLATFORM),solaris) +ifneq ($(OPENJDK_TARGET_OS),solaris) # Exclude Solaris nio and two security related files in src/share/classes EXFILES += SolarisAclFileAttributeView.java \ SolarisFileStore.java \ @@ -71,37 +71,34 @@ ifneq ($(PLATFORM),solaris) SolarisUserDefinedFileAttributeView.java \ SolarisWatchService.java \ SolarisAclFileAttributeView.java \ - SolarisFileStore.java \ - SolarisFileSystem.java \ - SolarisFileSystemProvider.java \ - SolarisUserDefinedFileAttributeView.java \ - SolarisNativeDispatcher.java \ - SolarisWatchService.java \ SolarisLoginModule.java \ SolarisSystem.java \ + sun/nio/ch/EventPortSelectorImpl.java \ + sun/nio/ch/EventPortSelectorProvider.java \ + sun/nio/ch/EventPortWrapper.java \ sun/tools/attach/SolarisAttachProvider.java \ sun/tools/attach/SolarisVirtualMachine.java endif # In the old build, this isn't excluded on macosx, even though it probably # should be. -ifneq ($(PLATFORM),macosx) +ifneq ($(OPENJDK_TARGET_OS),macosx) EXFILES+=WrapperGenerator.java endif -ifneq ($(PLATFORM),windows) +ifneq ($(OPENJDK_TARGET_OS),windows) # Exclude Window security related files in src/share/classes EXFILES+=NTLoginModule.java \ NTSystem.java endif -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) # Don't build GTK L&F on Windows EXCLUDES+= com/sun/java/swing/plaf/gtk endif -ifneq ($(PLATFORM),linux) +ifneq ($(OPENJDK_TARGET_OS),linux) EXFILES+=sun/tools/attach/LinuxAttachProvider.java \ sun/tools/attach/LinuxVirtualMachine.java \ sun/nio/fs/LinuxDosFileAttributeView.java \ @@ -113,7 +110,7 @@ ifneq ($(PLATFORM),linux) sun/nio/fs/LinuxWatchService.java endif -ifneq ($(PLATFORM),macosx) +ifneq ($(OPENJDK_TARGET_OS),macosx) EXFILES+=sun/nio/fs/BsdFileStore.java \ sun/nio/fs/BsdFileSystem.java \ sun/nio/fs/BsdFileSystemProvider.java \ @@ -137,11 +134,11 @@ ifdef OPENJDK endif # Used on windows and macosx -ifeq (,$(filter $(PLATFORM), windows macosx)) +ifeq (,$(filter $(OPENJDK_TARGET_OS), windows macosx)) EXFILES+=sun/awt/AWTCharset.java endif -ifneq ($(PLATFORM), macosx) +ifneq ($(OPENJDK_TARGET_OS), macosx) # # Not in rt.jar on solaris and linux...(windows not checked) # in rt.jar on macosx ?? @@ -192,7 +189,7 @@ endif # Exclude another implicitly not included file. EXFILES+=sun/util/locale/AsciiUtil.java -ifeq (,$(filter $(PLATFORM), solaris macosx)) +ifeq (,$(filter $(OPENJDK_TARGET_OS), solaris macosx)) # # only solaris and macosx # @@ -205,7 +202,7 @@ EXFILES+=-linux-arm.java \ -linux-ppc.java # TODO: Is this necessary? -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) EXFILES+=sun/nio/ch/AbstractPollSelectorImpl.java \ sun/nio/ch/DevPollArrayWrapper.java \ sun/nio/ch/DevPollSelectorImpl.java \ @@ -248,18 +245,24 @@ include CopyIntoClasses.gmk ifndef OPENJDK CLOSED_SRC_DIRS:=$(JDK_TOPDIR)/src/closed/share/classes \ - $(JDK_TOPDIR)/src/closed/$(LEGACY_HOST_OS_API)/classes + $(JDK_TOPDIR)/src/closed/$(LEGACY_OPENJDK_TARGET_OS_API)/classes endif MACOSX_SRC_DIRS := -ifeq ($(PLATFORM),macosx) +ifeq ($(OPENJDK_TARGET_OS),macosx) MACOSX_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/classes # this files are duplicated in MACOSX_SRC_DIRS EXFILES+= $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/DefaultSelectorProvider.java \ $(JDK_TOPDIR)/src/solaris/classes/sun/java2d/BackBufferCapsProvider.java \ $(JDK_TOPDIR)/src/solaris/classes/java/net/DefaultInterface.java \ - $(JDK_TOPDIR)/src/solaris/classes/java/lang/ClassLoaderHelper.java + $(JDK_TOPDIR)/src/solaris/classes/java/lang/ClassLoaderHelper.java + + # JObjC.jar contains 1.5 byte-code...so skip it here :-( + # MACOSX_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/native/jobjc/src + # EXCLUDES+= tests/java/com/apple/jobjc + + EXCLUDES+= com/apple/jobjc endif # The exception handling of swing beaninfo @@ -272,7 +275,7 @@ $(JDK_OUTPUTDIR)/classes/javax/swing/beaninfo/images/%.gif: $(JDK_TOPDIR)/make/t $(eval $(call SetupJavaCompilation,BUILD_JDK,\ SETUP:=GENERATE_JDKBYTECODE,\ SRC:=$(JDK_TOPDIR)/src/share/classes \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes \ $(MACOSX_SRC_DIRS) \ $(JDK_OUTPUTDIR)/gensrc \ $(JDK_OUTPUTDIR)/gensrc_swing/javax/swing/beaninfo \ @@ -297,7 +300,7 @@ JDK_BASE_HEADER_CLASSES:=java.lang.Integer \ JDK_BASE_HEADER_JAVA_FILES:=$(patsubst %,$(JDK_TOPDIR)/src/share/classes/%.java,\ $(subst .,/,$(JDK_BASE_HEADER_CLASSES))) -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) JDK_BASE_HEADER_CLASSES_WINDOWS:=sun.nio.ch.PollArrayWrapper JDK_BASE_HEADER_CLASSES+=$(JDK_BASE_HEADER_CLASSES_WINDOWS) JDK_BASE_HEADER_JAVA_FILES+=$(patsubst %,$(JDK_TOPDIR)/src/windows/classes/%.java,\ @@ -348,6 +351,53 @@ $(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin: ########################################################################################## +ifeq ($(OPENJDK_TARGET_OS),macosx) +# +# JObjC.jar is compiled with BOOT_JAVAC which (may) not support the "-h" flag. +# so we first compile classes with BOOT_JAVAC and then with JDK_JAVAC :-( +# +$(eval $(call SetupJavaCompiler,GENERATE_15BYTECODE,\ + JAVAC:=$(JAVAC),\ + FLAGS:=-source 1.5 -target 1.5 -g -bootclasspath $(BOOT_RTJAR) -cp $(JDK_OUTPUTDIR)/../langtools/dist/lib/classes.jar $(DISABLE_WARNINGS),\ + SERVER_DIR:=$(JAVAC_SERVERS),\ + SERVER_JVM:=$(SERVER_JAVA),\ + MODE:=$(JAVAC_USE_MODE),\ + USE_DEPS:=$(JAVAC_USE_DEPS))) + +$(eval $(call SetupJavaCompilation,BUILD_JOBJC_JAR,\ + SETUP:=GENERATE_15BYTECODE,\ + SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/java \ + $(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/java \ + $(JDK_OUTPUTDIR)/gensrc, \ + INCLUDES := com/apple/jobjc,\ + EXCLUDES := tests/java/com/apple/jobjc,\ + BIN:=$(JDK_OUTPUTDIR)/jobjc_classes,\ + JAR:=$(JDK_OUTPUTDIR)/lib/JObjC.jar, \ + JARINDEX := true)) + +$(BUILD_JOBJC_JAR) : $(BUILD_JDK) + +JARS += $(JDK_OUTPUTDIR)/lib/JObjC.jar + +$(eval $(call SetupJavaCompilation,BUILD_JOBJC_HEADERS_JAR,\ + SETUP:=GENERATE_JDKBYTECODE,\ + SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/java \ + $(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/java \ + $(JDK_OUTPUTDIR)/gensrc, \ + INCLUDES := com/apple/jobjc,\ + EXCLUDES := tests/java/com/apple/jobjc,\ + BIN:=$(JDK_OUTPUTDIR)/jobjc_classes_headers,\ + JAR:=$(JDK_OUTPUTDIR)/jobjc_classes_headers/dummy.jar, \ + HEADERS:=$(JDK_OUTPUTDIR)/gensrc_headers)) + +$(BUILD_JOBJC_HEADERS_JAR) : $(BUILD_JDK) + +JARS += $(JDK_OUTPUTDIR)/jobjc_classes_headers/dummy.jar + +endif + +########################################################################################## + # copy with -a to preserve timestamps so dependencies down the line aren't messed up all: $(BUILD_JDK) $(JARS) $(COPY_EXTRA) $(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin \ $(JDK_OUTPUTDIR)/classes/_the.jdk.base.headers diff --git a/jdk/makefiles/CompileLaunchers.gmk b/jdk/makefiles/CompileLaunchers.gmk index bb6ef245e62..2b79e5907d3 100644 --- a/jdk/makefiles/CompileLaunchers.gmk +++ b/jdk/makefiles/CompileLaunchers.gmk @@ -32,17 +32,25 @@ include NativeCompilation.gmk # Setup the java compilers for the JDK build. include Setup.gmk +# Build tools +include Tools.gmk + BUILD_LAUNCHERS= define SetupLauncher # TODO: Fix mapfile on solaris. Won't work with ld as linker. # Parameter 1 is the name of the launcher (java,javac,jar...) - # Parameter 2 are extra CFLAGS - # Parameter 3 are extra LDFLAGS - # Parameter 4 are extra LDFLAGS_SUFFIX_posix - # Parameter 5 are extra LDFLAGS_SUFFIX_winapi + # Parameter 2 is extra CFLAGS + # Parameter 3 is extra LDFLAGS + # Parameter 4 is extra LDFLAGS_SUFFIX_posix + # Parameter 5 is extra LDFLAGS_SUFFIX_winapi + # Parameter 6 is optional Windows JLI library (full path) + # Parameter 7 is optional Windows resource (RC) flags + # Parameter 8 is optional Windows version resource file (.rc) + # Parameter 9 is different output dir + # Parameter 10 is FULL DEBUG SYMBOLS (set value to turn OFF, since most(all) seems to have it) - $1_WINDOWS_JLI_LIB:=$(JDK_OUTPUTDIR)/objs/jli.lib + $1_WINDOWS_JLI_LIB:=$(JDK_OUTPUTDIR)/objs/libjli/jli.lib ifneq ($6,) $1_WINDOWS_JLI_LIB:=$6 endif @@ -51,33 +59,73 @@ define SetupLauncher $1_VERSION_INFO_RESOURCE:=$8 endif + $1_LDFLAGS := $3 + ifeq ($(OPENJDK_TARGET_OS), macosx) + $1_LDFLAGS += -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks + endif + + $1_LDFLAGS_SUFFIX := + ifeq ($(USE_EXTERNAL_LIBZ), true) + $1_LDFLAGS_SUFFIX += -lz + endif + + ifeq ($(OPENJDK_TARGET_OS), macosx) + $1_LDFLAGS_SUFFIX += -Wl,-all_load $(JDK_OUTPUTDIR)/objs/libjli_static.a \ + -framework Cocoa -framework Security -framework ApplicationServices \ + -sectcreate __TEXT __info_plist $(JDK_TOPDIR)/src/macosx/lib/Info-cmdline.plist + endif + + + $1_OUTPUT_DIR_ARG:=$9 + ifeq (,$$($1_OUTPUT_DIR_ARG)) + $1_OUTPUT_DIR_ARG:=$(JDK_OUTPUTDIR)/bin + endif + + $1_DEBUG_SYMBOLS:=yes + ifneq (,$(10)) + $1_DEBUG_SYMBOLS:= + endif + + $1_OPTIMIZATION:= LOW + + # TODO: maybe it's better to move this if-statement out of this function + ifeq ($(1),java) + $1_OPTIMIZATION:=HIGH + endif + $(call SetupNativeCompilation,BUILD_LAUNCHER_$1,\ SRC:=$(JDK_TOPDIR)/src/share/bin,\ INCLUDE_FILES:=main.c,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKEXE) $(C_O_FLAG_NORM) \ + OPTIMIZATION :=$$($1_OPTIMIZATION), \ + CFLAGS:=$(CFLAGS_JDKEXE) \ -I$(JDK_TOPDIR)/src/share/bin \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin \ - -I$(JDK_TOPDIR)/src/$(PLATFORM)/bin \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin \ + -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS)/bin \ -DFULL_VERSION='"$(FULL_VERSION)"' \ -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \ -DLIBARCHNAME='"$(ARCH)"' \ - -DLAUNCHER_NAME='"openjdk"' \ + -DLAUNCHER_NAME='"java"' \ -DPROGNAME='"$1"' $(DPACKAGEPATH) \ $2,\ CFLAGS_linux:=-fPIC,\ + CFLAGS_solaris:=-KPIC -DHAVE_GETHRTIME,\ LDFLAGS:=$(LDFLAGS_JDKEXE) \ $(call SET_SHARED_LIBRARY_ORIGIN,../lib/$(LIBARCH)/jli) \ $(call SET_SHARED_LIBRARY_ORIGIN,../jre/lib/$(LIBARCH)/jli) \ - $3,\ + $$($1_LDFLAGS),\ MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/launchers/mapfile-$(ARCH), \ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKEXE_SUFFIX),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKEXE_SUFFIX) $$($1_LDFLAGS_SUFFIX),\ LDFLAGS_SUFFIX_posix:=$4 -lc,\ LDFLAGS_SUFFIX_winapi:=$$($1_WINDOWS_JLI_LIB) \ - $(JDK_OUTPUTDIR)/objs/java.lib advapi32.lib $5,\ - BIN:=$(JDK_OUTPUTDIR)/objs/$1_objs,\ - EXE:=$(JDK_OUTPUTDIR)/objs/$1$(EXE_SUFFIX),\ + $(JDK_OUTPUTDIR)/objs/libjava/java.lib advapi32.lib $5,\ + LDFLAGS_SUFFIX_solaris := -lthread $(LIBDL), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/$1_objs,\ + OUTPUT_DIR:=$$($1_OUTPUT_DIR_ARG),\ + PROGRAM:=$1,\ + DEBUG_SYMBOLS:=$$($1_DEBUG_SYMBOLS),\ VERSIONINFO_RESOURCE:=$$($1_VERSION_INFO_RESOURCE),\ RC_FLAGS:=$(RC_FLAGS)\ /D "JDK_FNAME=$1$(EXE_SUFFIX)" \ @@ -86,13 +134,22 @@ define SetupLauncher $7,\ MANIFEST:=$(JDK_TOPDIR)/src/windows/resource/java.manifest) - BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin/$1$(EXE_SUFFIX) + BUILD_LAUNCHERS += $$(BUILD_LAUNCHER_$1) + + ifeq ($(OPENJDK_TARGET_OS),macosx) + $$(BUILD_LAUNCHER_$1) : $(JDK_OUTPUTDIR)/objs/libjli_static.a + endif + + ifeq ($(OPENJDK_TARGET_OS),windows) + $$(BUILD_LAUNCHER_$1) : $(JDK_OUTPUTDIR)/objs/libjava/java.lib \ + $$($1_WINDOWS_JLI_LIB) + endif endef ########################################################################################## -XLIBS:=-lX11 -ifeq ($(PLATFORM),macosx) +XLIBS:=$(X_LIBS) -lX11 +ifeq ($(OPENJDK_TARGET_OS),macosx) DPACKAGEPATH:=-DPACKAGE_PATH='"$(PACKAGE_PATH)"' XLIBS:= endif @@ -108,17 +165,17 @@ $(eval $(call SetupLauncher,java,\ $(JDK_OUTPUTDIR)/objs/jli_static.lib,$(JAVA_RC_FLAGS),\ $(JDK_TOPDIR)/src/windows/resource/java.rc)) -ifeq ($(HOST_OS),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) $(eval $(call SetupLauncher,javaw,\ -DEXPAND_CLASSPATH_WILDCARDS,,,user32.lib comctl32.lib,\ $(JDK_OUTPUTDIR)/objs/jli_static.lib,$(JAVA_RC_FLAGS),\ $(JDK_TOPDIR)/src/windows/resource/java.rc)) endif -ifeq ($(PLATFORM),solaris) +ifeq ($(OPENJDK_TARGET_OS),solaris) THREAD_LIB:=-lthread endif -ifeq ($(PLATFORM),linux) +ifeq ($(OPENJDK_TARGET_OS),linux) THREAD_LIB:=-lpthread endif @@ -271,7 +328,7 @@ $(eval $(call SetupLauncher,rmiregistry,\ $(eval $(call SetupLauncher,jcmd,\ -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.tools.jcmd.JCmd"$(COMMA) }')) -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) $(eval $(call SetupLauncher,kinit,\ -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.security.krb5.internal.tools.Kinit"$(COMMA) }')) @@ -286,8 +343,10 @@ endif # The order of the object files on the link command line affects the size of the resulting # binary (at least on linux) which causes the size to differ between old and new build. ifeq ($(USE_EXTERNAL_LIBZ), true) +UNPACKEXE_CFLAGS := -DSYSTEM_ZLIB UNPACKEXE_ZIPOBJS := -lz else +UNPACKEXE_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 UNPACKEXE_ZIPOBJS := $(JDK_OUTPUTDIR)/objs/libzip/zcrc32$(OBJ_SUFFIX) \ $(JDK_OUTPUTDIR)/objs/libzip/deflate$(OBJ_SUFFIX) \ $(JDK_OUTPUTDIR)/objs/libzip/trees$(OBJ_SUFFIX) \ @@ -299,27 +358,31 @@ UNPACKEXE_ZIPOBJS := $(JDK_OUTPUTDIR)/objs/libzip/zcrc32$(OBJ_SUFFIX) \ $(JDK_OUTPUTDIR)/objs/libzip/inftrees$(OBJ_SUFFIX) \ $(JDK_OUTPUTDIR)/objs/libzip/inffast$(OBJ_SUFFIX) +endif -$(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX): $(UNPACKEXE_ZIPOBJS) - +ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc) + UNPACKEXE_CFLAGS += -xregs=no%appl endif $(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE,\ SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack,\ EXCLUDE_FILES:=jni.cpp,\ LANG:=C,\ - CFLAGS:=$(CXXFLAGS_JDKEXE) $(CXX_O_FLAG_NORM) \ - -DFULL \ - -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5,\ + OPTIMIZATION := LOW, \ + CFLAGS:=$(UNPACKEXE_CFLAGS) $(CXXFLAGS_JDKEXE)\ + -DFULL, \ CFLAGS_release:=-DPRODUCT,\ CFLAGS_linux:=-fPIC,\ + CFLAGS_solaris := -KPIC, \ + CFLAGS_macosx := -fPIC, \ MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libunpack/mapfile-vers-unpack200, \ LDFLAGS:=$(LDFLAGS_JDKEXE) \ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_SUFFIX:=$(UNPACKEXE_ZIPOBJS) $(LIBCXX),\ LDFLAGS_SUFFIX_solaris:=-lc,\ - BIN:=$(JDK_OUTPUTDIR)/objs/unpackexe,\ - EXE:=$(JDK_OUTPUTDIR)/objs/unpack200$(EXE_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/unpackexe,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/bin,\ + PROGRAM:=unpack200,\ VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\ RC_FLAGS:=$(RC_FLAGS)\ /D "JDK_FNAME=unpack200.exe" \ @@ -327,7 +390,13 @@ $(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE,\ /D "JDK_FTYPE=0x1L",\ MANIFEST:=$(JDK_TOPDIR)/src/windows/resource/unpack200_proto.exe.manifest)) -BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX) +ifneq ($(USE_EXTERNAL_LIBZ), true) + +$(BUILD_UNPACKEXE) : $(UNPACKEXE_ZIPOBJS) + +endif + +BUILD_LAUNCHERS += $(BUILD_UNPACKEXE) ########################################################################################## @@ -335,7 +404,7 @@ BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX) BUILD_JEXEC := BUILD_JEXEC_SRC := BUILD_JEXEC_INC := -BUILD_JEXEC_DST := $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/jexec$(EXE_SUFFIX) +BUILD_JEXEC_DST_DIR := $(JDK_OUTPUTDIR)/lib/$(LIBARCH) # # UNHANDLED: @@ -345,30 +414,30 @@ BUILD_JEXEC_DST := $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/jexec$(EXE_SUFFIX) # # jdk/make/java/Makefile # -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) ifeq ($(ARCH_DATA_MODEL), 32) BUILD_JEXEC := 1 endif endif -ifeq ($(PLATFORM), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) BUILD_JEXEC := 1 -endif # PLATFORM +endif # OPENJDK_TARGET_OS # # jdk/make/java/jexec/Makefile # ifeq ($(BUILD_JEXEC), 1) - ifeq ($(PLATFORM),windows) - else ifeq ($(PLATFORM),macosx) + ifeq ($(OPENJDK_TARGET_OS),windows) + else ifeq ($(OPENJDK_TARGET_OS),macosx) BUILD_JEXEC_SRC := $(JDK_TOPDIR)/src/macosx/bin else BUILD_JEXEC_SRC := $(JDK_TOPDIR)/src/solaris/bin endif - ifeq ($(PLATFORM), linux) - BUILD_JEXEC_DST := $(JDK_OUTPUTDIR)/lib/jexec$(EXE_SUFFIX) + ifeq ($(OPENJDK_TARGET_OS), linux) + BUILD_JEXEC_DST_DIR := $(JDK_OUTPUTDIR)/lib BUILD_JEXEC_INC += -I$(JDK_TOPDIR)/src/share/bin endif endif @@ -382,13 +451,15 @@ ifneq ($(BUILD_JEXEC_SRC),) SRC:=$(BUILD_JEXEC_SRC),\ INCLUDE_FILES:=jexec.c,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKEXE) $(C_O_FLAG_NORM) \ + OPTIMIZATION := LOW, \ + CFLAGS:=$(CFLAGS_JDKEXE)\ $(BUILD_JEXEC_INC), \ LDFLAGS:=$(LDFLAGS_JDKEXE), \ - BIN:=$(JDK_OUTPUTDIR)/objs/jexec_obj,\ - EXE:=$(BUILD_JEXEC_DST))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/jexec_obj,\ + OUTPUT_DIR:=$(BUILD_JEXEC_DST_DIR),\ + PROGRAM:=jexec)) - BUILD_LAUNCHERS += $(BUILD_JEXEC_DST) + BUILD_LAUNCHERS += $(BUILD_JEXEC) endif ########################################################################################## @@ -397,10 +468,10 @@ endif # The java-rmi.cgi script in bin/ only gets delivered in certain situations # JAVA_RMI_CGI:=$(JDK_OUTPUTDIR)/bin/java-rmi.cgi -ifeq ($(PLATFORM), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) BUILD_LAUNCHERS += $(JAVA_RMI_CGI) endif -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) ifeq ($(ARCH_DATA_MODEL), 32) BUILD_LAUNCHERS += $(JAVA_RMI_CGI) endif @@ -413,12 +484,13 @@ endif # images bin dir. This weird behavior is mimicked here in the converted makefiles for # now. Should probably just be deleted. # http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6512052 -ifeq ($(HOST_OS_API),winapi) +ifeq ($(OPENJDK_TARGET_OS_API),winapi) $(eval $(call SetupLauncher,java-rmi,\ -DEXPAND_CLASSPATH_WILDCARDS,\ - $(call SET_SHARED_LIBRARY_MAPFILE,$(JDK_TOPDIR)/makefiles/java/main/java/mapfile-$(ARCH)))) + $(call SET_SHARED_LIBRARY_MAPFILE,$(JDK_TOPDIR)/makefiles/java/main/java/mapfile-$(ARCH)),\ + ,,,,,$(JDK_OUTPUTDIR)/objs)) - $(JAVA_RMI_CGI): $(JDK_OUTPUTDIR)/objs/java-rmi$(EXE_SUFFIX) + $(JAVA_RMI_CGI): $(BUILD_LAUNCHER_java-rmi) $(MKDIR) -p $(@D) $(CP) $< $@ @@ -432,11 +504,6 @@ endif ########################################################################################## -$(JDK_OUTPUTDIR)/bin/% : $(JDK_OUTPUTDIR)/objs/% - $(ECHO) Copying $(@F) - $(MKDIR) -p $(@D) - $(CP) $< $@ - $(BUILD_LAUNCHERS) : $(JDK_TOPDIR)/makefiles/CompileLaunchers.gmk all: $(BUILD_LAUNCHERS) diff --git a/jdk/makefiles/CompileNativeLibraries.gmk b/jdk/makefiles/CompileNativeLibraries.gmk index 3851ab99eca..be523544712 100644 --- a/jdk/makefiles/CompileNativeLibraries.gmk +++ b/jdk/makefiles/CompileNativeLibraries.gmk @@ -35,13 +35,16 @@ include Setup.gmk # Copy files (can now depend on $(COPY_FILES)) include CopyFiles.gmk +# Build tools +include Tools.gmk + # Include the javah generated headers. CFLAGS_JDKLIB += -I$(JDK_OUTPUTDIR)/gensrc_headers CXXFLAGS_JDKLIB += -I$(JDK_OUTPUTDIR)/gensrc_headers -# Put the libraries here. Different locations for different host apis. -ifeq ($(HOST_OS_API),posix) - ifneq ($(HOST_OS),macosx) +# Put the libraries here. Different locations for different target apis. +ifeq ($(OPENJDK_TARGET_OS_API),posix) + ifneq ($(OPENJDK_TARGET_OS),macosx) INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/lib/$(LIBARCH) LIBARCHDIR=$(LIBARCH)/ else @@ -52,465 +55,213 @@ else INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/bin endif -$(INSTALL_LIBRARIES_HERE)/%$(SHARED_LIBRARY_SUFFIX) : $(JDK_OUTPUTDIR)/objs/%$(SHARED_LIBRARY_SUFFIX) - $(ECHO) Copying $(@F) - $(CP) $< $@ - BUILD_LIBRARIES= -# TODO: Temporary until awt is converted: -# OBJDIRNAME is the name of the directory where the object code is to -# be placed. It's name depends on whether the data model architecture -# is 32-bit or not. -ifneq ($(ARCH_DATA_MODEL), 32) - OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX) -else - OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX) -endif +# Absolute paths to lib files on windows for use in LDFLAGS. Should figure out a more +# elegant solution to this. +WIN_VERIFY_LIB := $(JDK_OUTPUTDIR)/objs/libverify/verify.lib +WIN_JAVA_LIB := $(JDK_OUTPUTDIR)/objs/libjava/java.lib +WIN_AWT_LIB := $(JDK_OUTPUTDIR)/objs/libawt/awt.lib ########################################################################################## -BUILD_LIBZIP_FILES := \ - CRC32.c \ - Adler32.c \ - Deflater.c \ - Inflater.c \ - ZipFile.c \ - zip_util.c +BUILD_LIBFDLIBM_OPTIMIZATION:=HIGH -ifeq ($(USE_EXTERNAL_LIBZ),true) - LIBZ := -lz -else -BUILD_LIBZIP_FILES += \ - compress.c \ - deflate.c \ - gzclose.c \ - gzlib.c \ - gzread.c \ - gzwrite.c \ - infback.c \ - inffast.c \ - inflate.c \ - inftrees.c \ - trees.c \ - uncompr.c \ - zadler32.c \ - zcrc32.c \ - zutil.c - LIBZ_INCLUDE := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 +ifneq ($(OPENJDK_TARGET_OS), solaris) + BUILD_LIBFDLIBM_OPTIMIZATION:=NONE endif -$(eval $(call SetupNativeCompilation,BUILD_LIBZIP,\ - SRC:=$(JDK_TOPDIR)/src/share/native/java/util/zip \ - $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5,\ - INCLUDE_FILES := $(BUILD_LIBZIP_FILES), \ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - $(LIBZ_INCLUDE) \ - -I$(JDK_TOPDIR)/src/share/native/java/io \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/io,\ - CFLAGS_posix:=-DUSE_MMAP -UDEBUG,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libzip/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(EXPORT_ZIP_FUNCS), \ - LDFLAGS_winapi:=-export:ZIP_Open -export:ZIP_Close -export:ZIP_FindEntry \ - -export:ZIP_ReadEntry -export:ZIP_GetNextEntry jvm.lib \ - java.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBZ),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libzip,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)zip$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)zip$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)zip$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -LIBUNPACK_LIB_FILE := $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX) - -$(eval $(call SetupNativeCompilation,BUILD_LIBUNPACK,\ - SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack,\ - EXCLUDE_FILES:=main.cpp,\ - LANG:=C++,\ - CFLAGS:=$(CXXFLAGS_JDKLIB) $(CXX_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -DNO_ZLIB -DUNPACK_JNI -DFULL,\ - CFLAGS_release:=-DPRODUCT,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libunpack/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB)\ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_winapi:=-map:$(JDK_OUTPUTDIR)/objs/unpack.map /debug \ - jvm.lib java.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_posix:=$(LIBCXX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libunpack,\ - LIB:=$(LIBUNPACK_LIB_FILE),\ - VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\ - RC_FLAGS:=$(RC_FLAGS)\ - /D "JDK_FNAME=unpack.dll" \ - /D "JDK_INTERNAL_NAME=unpack" \ - /D "JDK_FTYPE=0x2L")) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX) - -ifeq ($(HOST_OS_API),winapi) - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.map: $(LIBUNPACK_LIB_FILE) - $(ECHO) Copying $(@F) - $(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX),%.map,$<) $@ - - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.pdb: $(LIBUNPACK_LIB_FILE) - $(ECHO) Copying $(@F) - $(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX),%.pdb,$<) $@ -endif - -########################################################################################## - -BUILD_LIBFDLIBM_OPTIMIZATION:= $(C_O_FLAG_HI) - -ifneq ($(PLATFORM), solaris) - BUILD_LIBFDLIBM_OPTIMIZATION := $(C_O_FLAG_NONE) -endif - -ifneq ($(PLATFORM),macosx) +ifneq ($(OPENJDK_TARGET_OS),macosx) $(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM,\ + STATIC_LIBRARY:=fdlibm,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\ SRC:=$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/src,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBFDLIBM_OPTIMIZATION) \ + OPTIMIZATION:=$(BUILD_LIBFDLIBM_OPTIMIZATION), \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include,\ CFLAGS_winapi_debug:=-DLOGGING,\ ARFLAGS:=$(ARFLAGS),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libfdlibm,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm)) + +BUILD_LIBRARIES += $(BUILD_LIBFDLIBM) + else # # On macosx they do partial (incremental) linking of fdlibm # code it here...rather than add support to NativeCompilation # as this is firt time I see it $(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM,\ + LIBRARY:=fdlibm,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm,\ SRC:=$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/src,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBFDLIBM_OPTIMIZATION) \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include,\ - LDFLAGS := -nostdlib -r,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libfdlibm,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS:=-nostdlib -r,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) : \ - $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(SHARED_LIBRARY_SUFFIX) +$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) : $(BUILD_LIBFDLIBM) $(CP) -a $< $@ -endif - BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) +endif ########################################################################################## -LIBATTACH_EXCLUDE_FILES:= -ifneq ($(PLATFORM),solaris) - LIBATTACH_EXCLUDE_FILES+=SolarisVirtualMachine.c -endif -ifneq ($(PLATFORM),linux) - LIBATTACH_EXCLUDE_FILES+=LinuxVirtualMachine.c -endif -ifneq ($(PLATFORM),macosx) - LIBATTACH_EXCLUDE_FILES+=BsdVirtualMachine.c +BUILD_LIBVERIFY_SRC:=check_code.c check_format.c + +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifneq ($(ARCH), amd64) + BUILD_LIBVERIFY_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libverify/reorder-$(ARCH) + endif endif -$(eval $(call SetupNativeCompilation,BUILD_LIBATTACH,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/tools/attach,\ - EXCLUDE_FILES:=$(LIBATTACH_EXCLUDE_FILES),\ + +$(eval $(call SetupNativeCompilation,BUILD_LIBVERIFY,\ + LIBRARY:=verify, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/common,\ + INCLUDE_FILES:=$(BUILD_LIBVERIFY_SRC),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libattach/mapfile-$(PLATFORM), \ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libverify/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_solaris:=-ldoor,\ - LDFLAGS_winapi:=psapi.lib advapi32.lib java.lib jvm.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libattach,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)attach$(SHARED_LIBRARY_SUFFIX))) + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX_posix:=-ljvm -lc,\ + LDFLAGS_SUFFIX_windows:=jvm.lib,\ + REORDER:=$(BUILD_LIBVERIFY_REORDER),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libverify,\ + DEBUG_SYMBOLS:=true)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)attach$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)attach$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBVERIFY) ########################################################################################## -$(eval $(call SetupNativeCompilation,BUILD_LIBDT_SOCKET,\ - SRC:=$(JDK_TOPDIR)/src/share/transport/socket \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/transport/socket,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(PLATFORM) \ - -I$(JDK_TOPDIR)/src/share/transport/socket \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/transport/socket \ - -I$(JDK_TOPDIR)/src/share/back/export \ - -I$(JDK_TOPDIR)/src/share/back,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libdt_socket/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB), \ - LDFLAGS_SUFFIX_linux:=-lpthread,\ - LDFLAGS_SUFFIX_solaris:=-lnsl -lsocket,\ - LDFLAGS_SUFFIX_winapi:=-export:jdwpTransport_OnLoad ws2_32.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libdt_socket,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)dt_socket$(SHARED_LIBRARY_SUFFIX))) +LIBJAVA_SRC_DIRS:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/lang \ + $(JDK_TOPDIR)/src/share/native/java/lang \ + $(JDK_TOPDIR)/src/share/native/java/lang/ref \ + $(JDK_TOPDIR)/src/share/native/java/lang/reflect \ + $(JDK_TOPDIR)/src/share/native/java/io \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/io \ + $(JDK_TOPDIR)/src/share/native/java/nio \ + $(JDK_TOPDIR)/src/share/native/java/security \ + $(JDK_TOPDIR)/src/share/native/common \ + $(JDK_TOPDIR)/src/share/native/sun/misc \ + $(JDK_TOPDIR)/src/share/native/sun/reflect \ + $(JDK_TOPDIR)/src/share/native/java/sql \ + $(JDK_TOPDIR)/src/share/native/java/util \ + $(JDK_TOPDIR)/src/share/native/java/util/concurrent/atomic \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/common \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/util \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/provider \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/io -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)dt_socket$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +# +# TODO +# +ARCHPROPNAME:=$(LIBARCH) +ifeq ($(OPENJDK_TARGET_OS)-$(ARCH), solaris-i586) + ARCHPROPNAME:=x86 +else ifeq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL), windows-32) + ARCHPROPNAME:=x86 +else ifeq ($(OPENJDK_TARGET_OS), macosx) + ARCHPROPNAME:=$(ARCH) +endif -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)dt_socket$(SHARED_LIBRARY_SUFFIX) +LIBJAVA_CFLAGS:=$(foreach dir,$(LIBJAVA_SRC_DIRS),-I$(dir)) \ + -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include \ + -DARCHPROPNAME='"$(ARCHPROPNAME)"' -########################################################################################## +LIBJAVA_CFLAGS += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ + -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \ + -DJDK_MICRO_VERSION='"$(JDK_MICRO_VERSION)"' \ + -DJDK_BUILD_NUMBER='"$(JDK_BUILD_NUMBER)"' -ifeq ($(HOST_OS_API),winapi) +ifneq (,$(JDK_UPDATE_VERSION)) + LIBJAVA_CFLAGS += -DJDK_UPDATE_VERSION='"$(JDK_UPDATE_VERSION)"' +endif - $(eval $(call SetupNativeCompilation,BUILD_LIBDT_SHMEM,\ - SRC:= $(JDK_TOPDIR)/src/share/native/com/sun/tools/jdi \ - $(JDK_TOPDIR)/src/share/transport/shmem \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/transport/shmem,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS)\ - -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(PLATFORM) \ - -I$(JDK_TOPDIR)/src/share/transport/shmem \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/transport/shmem \ - -I$(JDK_TOPDIR)/src/share/back/export, \ - LDFLAGS:=$(LDFLAGS_JDKLIB),\ - LDFLAGS_winapi:=-export:jdwpTransport_OnLoad,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libdt_shmem,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)dt_shmem$(SHARED_LIBRARY_SUFFIX))) +LIBJAVA_EXCLUDE_FILES:=check_code.c check_format.c - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)dt_shmem$(SHARED_LIBRARY_SUFFIX) - -endif # PLATFORM - -########################################################################################## -# JDWP_LOGGING causes log messages to be compiled into the library. These reference the -# __FILE__ macro which here expands to the absolute path of the file while the old build -# system used a relative path. This causes the binaries to differ in size. -$(eval $(call SetupNativeCompilation,BUILD_LIBJDWP,\ - SRC:=$(JDK_TOPDIR)/src/share/back $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/back,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) -DJDWP_LOGGING $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS)\ - -I$(JDK_TOPDIR)/src/share/transport/export \ - -I$(JDK_TOPDIR)/src/share/back/export \ - -I$(JDK_TOPDIR)/src/share/npt \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt \ - -I$(JDK_TOPDIR)/src/share/back \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/back \ - -I$(JDK_OUTPUTDIR)/gensrc_jdwp_headers,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjdwp/mapfile-vers, \ - LDFLAGS:=$(filter-out -ljava,$(LDFLAGS_JDKLIB)), \ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_linux:=$(LIBDL),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjdwp,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jdwp$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jdwp$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jdwp$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -LIBJAAS_MAPFILE := -ifneq ($(PLATFORM),solaris) - LIBJAAS_EXCLUDE_FILES:=Solaris.c +ifneq ($(OPENJDK_TARGET_OS),macosx) + LIBJAVA_EXCLUDE_FILES += java_props_macosx.c else - # only on solaris...wonder why - LIBJAAS_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjaas/mapfile-vers + BUILD_LIBJAVA_java_props_md.c_CFLAGS:=-x objective-c endif -$(eval $(call SetupNativeCompilation,BUILD_LIBJAAS,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/com/sun/security/auth/module,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS),\ - MAPFILE := $(LIBJAAS_MAPFILE),\ - LDFLAGS:=$(filter-out -ljava,$(LDFLAGS_JDKLIB)) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_winapi:=netapi32.lib user32.lib mpr.lib advapi32.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - EXCLUDE_FILES:=$(LIBJAAS_EXCLUDE_FILES),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjaas,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jaas$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jaas$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jaas$(SHARED_LIBRARY_SUFFIX) - -# Oddly enough, it is called jaas_nt.dll under winapi and libjaas_unix.so under posix. -ifeq ($(PLATFORM),windows) - $(INSTALL_LIBRARIES_HERE)/jaas_nt.dll : $(JDK_OUTPUTDIR)/objs/jaas.dll - $(ECHO) Copying $(@F) - $(CP) $< $@ - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/jaas_nt.dll +ifeq ($(OPENJDK_TARGET_OS),windows) + LIBJAVA_EXCLUDE_FILES += \ + UNIXProcess_md.c \ + UnixFileSystem_md.c \ + FileSystemPreferences.c else - $(INSTALL_LIBRARIES_HERE)/libjaas_unix$(SHARED_LIBRARY_SUFFIX) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jaas$(SHARED_LIBRARY_SUFFIX) - $(ECHO) Copying $(@F) - $(CP) $< $@ - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/libjaas_unix$(SHARED_LIBRARY_SUFFIX) + LIBJAVA_EXCLUDE_FILES += \ + ProcessImpl_md.c \ + Win32FileSystem_md.c \ + WinNTFileSystem_md.c \ + dirent_md.c \ + WindowsPreferences.c \ + sun/security/provider/WinCAPISeedGenerator.c \ + sun/io/Win32ErrorMode.c endif -########################################################################################## - -ifeq ($(HOST_OS_API),posix) - # TODO make this work on macosx - ifneq ($(HOST_OS),macosx) - - $(eval $(call SetupNativeCompilation,BUILD_LIBSCTP,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/ch/sctp,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS)\ - -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \ - -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch/sctp \ - -I$(JDK_TOPDIR)/src/share/native/java/net \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/ch \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/net,\ - CFLAGS_linux:=-Werror,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libsctp/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX_linux:=-lpthread,\ - LDFLAGS_SUFFIX_posix:=$(LIBDL) -lnio -lnet,\ - LDFLAGS_SUFFIX_solaris:=-lsocket,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - INCLUDE_FILES:=SctpNet.c SctpChannelImpl.c SctpServerChannelImpl.c,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libsctp,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)sctp$(SHARED_LIBRARY_SUFFIX))) - - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)sctp$(SHARED_LIBRARY_SUFFIX) - - $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)sctp$(SHARED_LIBRARY_SUFFIX) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)nio$(SHARED_LIBRARY_SUFFIX) - endif -endif - -########################################################################################## - -$(eval $(call SetupNativeCompilation,BUILD_LIBJSDT,\ - SRC:=$(JDK_TOPDIR)/src/share/native/sun/tracing/dtrace\ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/tracing/dtrace,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS)\ - -I$(JDK_TOPDIR)/src/share/native/sun/tracing/dtrace,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjsdt/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBDL),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjsdt,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsdt$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsdt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jsdt$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -ifdef OPENJDK - # TODO: Update awt lib path when awt is converted - $(eval $(call SetupNativeCompilation,BUILD_LIBLCMS,\ - SRC:=$(JDK_TOPDIR)/src/share/native/sun/java2d/cmm/lcms \ - $(JDK_TOPDIR)/src/share/native/sun/java2d/,\ - INCLUDE_FILES:=cmscam02.c cmscgats.c cmscnvrt.c cmserr.c \ - cmsgamma.c cmsgmt.c cmsintrp.c cmsio0.c \ - cmsio1.c cmslut.c cmsmd5.c cmsmtrx.c \ - cmsnamed.c cmsopt.c cmspack.c cmspcs.c \ - cmsplugin.c cmsps2.c cmssamp.c cmssm.c \ - cmstypes.c cmsvirt.c cmswtpnt.c cmsxform.c \ - LCMS.c,\ - LANG:=C,\ - CFLAGS:=$(filter-out -xc99=%none,$(CFLAGS_JDKLIB)) $(C_O_FLAG_NORM) \ - $(SHARED_LIBRARY_FLAGS) \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug,\ - CFLAGS_solaris:=-xc99=no_lib,\ - CFLAGS_winapi:=-DCMS_IS_WINDOWS_,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/liblcms/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB), \ - LDFLAGS_solaris:=/usr/lib$(ISA_DIR)/libm.so.2,\ - LDFLAGS_winapi:=awt.lib java.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_posix:=-lawt,\ - LDFLAGS_SUFFIX_linux:=-lm,\ - BIN:=$(JDK_OUTPUTDIR)/objs/liblcms,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)lcms$(SHARED_LIBRARY_SUFFIX))) - - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)lcms$(SHARED_LIBRARY_SUFFIX) - - $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)lcms$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) -endif - -########################################################################################## - -ifdef OPENJDK - BUILD_LIBJPEG_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/mapfile-vers -else - BUILD_LIBJPEG_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/mapfile-vers-closed - BUILD_LIBJPEG_CLOSED_SRC := $(JDK_TOPDIR)/src/closed/share/native/sun/awt/image/jpeg - BUILD_LIBJPEG_CLOSED_INCLUDES := -I$(BUILD_LIBJPEG_CLOSED_SRC) -endif - -BUILD_LIBJPEG_REORDER := -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) ifneq ($(ARCH), amd64) - BUILD_LIBJPEG_REORDER := $(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/reorder-$(ARCH) + LIBJAVA_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libjava/reorder-$(ARCH) endif endif -# Suppress gcc warnings like "variable might be clobbered by 'longjmp' -# or 'vfork'": this warning indicates that some variable is placed to -# a register by optimized compiler and it's value might be lost on longjmp(). -# Recommended way to avoid such warning is to declare the variable as -# volatile to prevent the optimization. However, this approach does not -# work because we have to declare all variables as volatile in result. -#ifndef CROSS_COMPILE_ARCH -# CC_43_OR_NEWER := \ -# $(shell $(EXPR) $(CC_MAJORVER) \> 4 \| \ -# \( $(CC_MAJORVER) = 4 \& $(CC_MINORVER) \>= 3 \) ) -# ifeq ($(CC_43_OR_NEWER),1) -# BUILD_LIBJPEG_CFLAGS_linux += -Wno-clobbered -# endif -#endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBJPEG,\ - SRC:=$(BUILD_LIBJPEG_CLOSED_SRC) \ - $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg,\ +$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA,\ + LIBRARY:=java,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBJAVA_SRC_DIRS),\ + EXCLUDES:=fdlibm/src zip, \ + EXCLUDE_FILES:=$(LIBJAVA_EXCLUDE_FILES), \ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HIGHEST) $(SHARED_LIBRARY_FLAGS) \ - $(BUILD_LIBJPEG_CLOSED_INCLUDES) \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg,\ - MAPFILE := $(BUILD_LIBJPEG_MAPFILE), \ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(LIBJAVA_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjava/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_linux:=$(LIBDL),\ - LDFLAGS_winapi:=java.lib jvm.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - REORDER := $(BUILD_LIBJPEG_REORDER),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjpeg,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jpeg$(SHARED_LIBRARY_SUFFIX))) + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_windows:=-export:winFileHandleOpen -export:handleLseek \ + $(BUILD_LIBFDLIBM) $(WIN_VERIFY_LIB) jvm.lib \ + shell32.lib delayimp.lib /DELAYLOAD:shell32.dll \ + advapi32.lib,\ + LDFLAGS_SUFFIX_posix:=-ljvm -lverify, \ + LDFLAGS_SUFFIX_solaris:=-lnsl -lsocket -lscf $(LIBDL) $(BUILD_LIBFDLIBM) -lc,\ + LDFLAGS_SUFFIX_linux:=$(LIBDL) $(BUILD_LIBFDLIBM),\ + LDFLAGS_SUFFIX_macosx:=$(BUILD_LIBFDLIBM) \ + -framework CoreFoundation \ + -framework Security -framework SystemConfiguration, \ + REORDER:=$(LIBJAVA_REORDER), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjava)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jpeg$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jpeg$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJAVA) : $(LIBJLI_BINARY) + +$(BUILD_LIBJAVA) : $(BUILD_LIBVERIFY) + +$(BUILD_LIBJAVA) : $(BUILD_LIBFDLIBM) ########################################################################################## -BUILD_LIBMLIB_SRC := $(JDK_TOPDIR)/src/share/native/sun/awt/medialib -BUILD_LIBMLIB_CFLAGS := -D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES \ +BUILD_LIBMLIB_SRC:=$(JDK_TOPDIR)/src/share/native/sun/awt/medialib +BUILD_LIBMLIB_CFLAGS:=-D__USE_J2D_NAMES -D__MEDIALIB_OLD_NAMES \ -I$(BUILD_LIBMLIB_SRC) \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt/medialib + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt/medialib -BUILD_LIBMLIB_LDLIBS := -BUILD_LIBMLIB_IMAGE_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libmlib_image/mapfile-vers +BUILD_LIBMLIB_LDLIBS:= +BUILD_LIBMLIB_IMAGE_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libmlib_image/mapfile-vers -ifneq ($(PLATFORM), sparc) +ifneq ($(OPENJDK_TARGET_OS), sparc) +# +# Yes, this will always be true (until someone makes an OS called sparc) +# but this is how it was writtin in old system...keep it like this for now +# BUILD_LIBMLIB_CFLAGS += -DMLIB_NO_LIBSUNMATH endif @@ -518,43 +269,44 @@ ifeq ($(ARCH_DATA_MODEL), 64) BUILD_LIBMLIB_CFLAGS += -DMLIB_OS64BIT endif -ifneq ($(PLATFORM), windows) +ifneq ($(OPENJDK_TARGET_OS), windows) BUILD_LIBMLIB_LDLIBS += $(LIBM) $(LIBDL) endif $(eval $(call SetupNativeCompilation,BUILD_LIBMLIB_IMAGE,\ - SRC:=$(BUILD_LIBMLIB_SRC),\ + LIBRARY:=mlib_image,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBMLIB_SRC),\ EXCLUDE_FILES:=awt_ImagingLib.c mlib_c_ImageBlendTable.c,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HIGHEST) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=HIGHEST, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(BUILD_LIBMLIB_CFLAGS),\ - MAPFILE := $(BUILD_LIBMLIB_IMAGE_MAPFILE), \ + MAPFILE:=$(BUILD_LIBMLIB_IMAGE_MAPFILE), \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(BUILD_LIBMLIB_LDLIBS) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_posix := -lm,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libmlib_image,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)mlib_image$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX_posix:=-lm,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmlib_image)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)mlib_image$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBMLIB_IMAGE) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)mlib_image$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBMLIB_IMAGE) ########################################################################################## -ifeq ($(PLATFORM),solaris) +ifeq ($(OPENJDK_TARGET_OS),solaris) ifeq ($(ARCH),sparc) - BUILD_LIBMLIB_IMAGE_V := 1 + BUILD_LIBMLIB_IMAGE_V:=1 else ifeq ($(ARCH), sparcv9) - BUILD_LIBMLIB_IMAGE_V := 1 + BUILD_LIBMLIB_IMAGE_V:=1 endif endif ifeq ($(BUILD_LIBMLIB_IMAGE_V), 1) -BUILD_LIBMLIB_IMAGE_V_FILES := \ +BUILD_LIBMLIB_IMAGE_V_FILES:=\ mlib_v_ImageLookUp.c \ mlib_ImageCreate.c \ mlib_ImageAffine.c \ @@ -648,1460 +400,35 @@ BUILD_LIBMLIB_IMAGE_V_FILES := \ mlib_ImageUtils.c \ mlib_ImageDivTables.c -# -# TODO -# -# ASFLAGS += -P -# INLINE = $(PLATFORM_SRC)/native/sun/awt/medialib/vis_$(ARCH_DATA_MODEL).il +BUILD_LIBMLIB_V_CFLAGS := $(filter-out -DMLIB_NO_LIBSUNMATH,$(BUILD_LIBMLIB_CFLAGS)) $(eval $(call SetupNativeCompilation,BUILD_LIBMLIB_IMAGE_V,\ - SRC:=$(JDK_TOPDIR)/src/share/native/sun/awt/medialib \ + LIBRARY:=mlib_image_v, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/awt/medialib \ $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib,\ LANG:=C,\ - INCLUDE_FILES := $(BUILD_LIBMLIB_IMAGE_V_FILES),\ - CFLAGS:=$(BUILD_LIBMLIB_CFLAGS) \ - $(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS) \ - MAPFILE := $(JDK_TOPDIR)/$(BUILD_LIBMLIB_IMAGE_MAPFILE), \ + INCLUDE_FILES:=$(BUILD_LIBMLIB_IMAGE_V_FILES),\ + OPTIMIZATION:=HIGHEST, \ + CFLAGS:=-xarch=sparcvis \ + $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib/vis_$(ARCH_DATA_MODEL).il\ + $(BUILD_LIBMLIB_V_CFLAGS) \ + $(CFLAGS_JDKLIB), \ + MAPFILE:=$(BUILD_LIBMLIB_IMAGE_MAPFILE), \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(BUILD_LIBMLIB_LDLIBS) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libmlib_image_v,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)mlib_image_v$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmlib_image_v)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)mlib_image_v$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBMLIB_IMAGE_V) endif ########################################################################################## -ifndef OPENJDK - FONT_HEADERS := -I$(CLOSED_SRC)/share/native/$(PKGDIR)/t2k - BUILD_LIBFONTMANAGER_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libfontmanager/mapfile-vers - LIBFONTMANAGER_EXCLUDE_FILES += freetypeScaler.c -else - FONT_HEADERS := $(FREETYPE2_CFLAGS) - BUILD_LIBFONTMANAGER_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libfontmanager/mapfile-vers.openjdk - BUILD_LIBFONTMANAGER_FONTLIB := $(FREETYPE2_LIBS) -endif - -ifeq ($(PLATFORM),windows) - LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \ - X11TextRenderer.c -else - LIBFONTMANAGER_EXCLUDE_FILES += fontpath.c \ - lcdglyph.c -endif - -BUILD_LIBFONTMANAGER_CFLAGS_COMMON := $(SHARED_LIBRARY_FLAGS) \ - -DLE_STANDALONE -DHEADLESS \ - $(FONT_HEADERS) \ - -I$(JDK_TOPDIR)/src/share/native/sun/font \ - -I$(JDK_TOPDIR)/src/share/native/sun/font/layout \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d - -$(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER,\ - SRC:=$(JDK_TOPDIR)/src/share/native/sun/font\ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/font,\ - EXCLUDE_FILES:=$(LIBFONTMANAGER_EXCLUDE_FILES) \ - AccelGlyphCache.c,\ - LANG:=C++,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBFONTMANAGER_CFLAGS_COMMON),\ - CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBFONTMANAGER_CFLAGS_COMMON),\ - CFLAGS_posix:=$(C_O_FLAG_HI),\ - CXXFLAGS_posix:=$(CXX_O_FLAG_HI),\ - CFLAGS_windows=$(C_O_FLAG_NORM)\ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/windows \ - -DCC_NOEX, \ - MAPFILE := $(BUILD_LIBFONTMANAGER_MAPFILE), \ - LDFLAGS:=$(subst -Xlinker -z -Xlinker defs,,$(LDFLAGS_JDKLIB)) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_windows:=advapi32.lib user32.lib gdi32.lib awt.lib java.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) \ - $(BUILD_LIBFONTMANAGER_FONTLIB),\ - LDFLAGS_SUFFIX_linux:=-lawt $(LIBM) $(LIBCXX),\ - LDFLAGS_SUFFIX_solaris:=-lawt -lawt_xawt -lc $(LIBM) $(LIBCXX),\ - LDFLAGS_SUFFIX_macosx:=-lawt $(LIBM) $(LIBCXX) -undefined dynamic_lookup,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libfontmanager,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) - -ifneq (,$(findstring $(PLATFORM),solaris macosx)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX) -endif - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -ifndef OPENJDK - -# ifeq ($(PLATFORM), linux) -# ifeq ("$(CC_VER_MAJOR)", "3") -# OTHER_LDLIBS += -Wl,-Bstatic -lgcc_eh -Wl,-Bdynamic -# endif -# endif -# -# The resulting size of the t2k lib file is (at least on linux) dependant on the order of -# the input .o files. Because of this the new build will differ in size to the old build. - BUILD_LIBT2K_CFLAGS_COMMON:=-I$(JDK_TOPDIR)/src/share/native/sun/font \ - -I$(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k \ - -I$(JDK_TOPDIR)/src/closed/share/native/sun/font \ - -I$(JDK_TOPDIR)/src/share/share/native/sun/font \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/font \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d - - $(eval $(call SetupNativeCompilation,BUILD_LIBT2K,\ - SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/font \ - $(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k \ - $(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k/ttHints,\ - EXCLUDE_FILES:=orion.c,\ - LANG:=C++,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON) $(C_O_FLAG_HI),\ - CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON) $(CXX_O_FLAG_HI),\ - CFLAGS_windows=-DCC_NOEX, \ - CXXFLAGS_windows=-DCC_NOEX, \ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libt2k/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_windows:=user32.lib $(JDK_OUTPUTDIR)/objs/fontmanager.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_macosx:=$(LIBCXX) $(LIBM) -lfontmanager,\ - LDFLAGS_SUFFIX_linux:=$(LIBCXX) $(LIBM) -lfontmanager,\ - LDFLAGS_SUFFIX_solaris:=$(LIBCXX) $(LIBM) -lfontmanager -lawt \ - -lawt_xawt,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libt2k,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)t2k$(SHARED_LIBRARY_SUFFIX))) - - # t2k is linked against fontmanager - $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)t2k$(SHARED_LIBRARY_SUFFIX): \ - $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fontmanager$(SHARED_LIBRARY_SUFFIX) - - BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)t2k$(SHARED_LIBRARY_SUFFIX) -endif - -########################################################################################## - -# -# TODO replace with X_FLAGS / X_LIBS -# and add them to configure -# -OPENWIN_LIB := $(OPENWIN_HOME)/lib - -BUILD_LIBJAWT_LIB := $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX) - -ifeq ($(PLATFORM), windows) - ifeq ($(ARCH_DATA_MODEL), 32) - KERNEL32_LIB := kernel32.lib - endif - $(eval $(call SetupNativeCompilation,BUILD_LIBJAWT,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/windows,\ - INCLUDE_FILES:=jawt.cpp,\ - LANG:=C++,\ - CFLAGS:=$(CXXFLAGS_JDKLIB) $(CXX_O_FLAG_NORM) \ - -EHsc -DUNICODE -D_UNICODE \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/windows \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/windows, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) $(KERNEL32_LIB) \ - advapi32.lib awt.lib,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjawt,\ - LIB:=$(BUILD_LIBJAWT_LIB))) - -$(BUILD_LIBJAWT_LIB) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) - -$(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX): $(BUILD_LIBJAWT_LIB) - $(ECHO) Copying $(@F) - $(CP) $< $@ - -BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX) - -else # PLATFORM not windows - - JAWT_LIBS := -lawt - ifndef BUILD_HEADLESS_ONLY - JAWT_LIBS += -lawt_xawt - else - JAWT_LIBS += -lawt_headless - HEADLESS_CFLAG += -DHEADLESS - endif - - JAWT_FILES := jawt.c - ifeq ($(PLATFORM), macosx) - JAWT_FILES := jawt.m - JAWT_LIBS := -lawt_lwawt - endif - - $(eval $(call SetupNativeCompilation,BUILD_LIBJAWT,\ - SRC:=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt \ - $(JDK_TOPDIR)/src/macosx/native/sun/awt,\ - INCLUDE_FILES:=$(JAWT_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM), \ - CFLAGS_linux:=$(HEADLESS_CFLAG),\ - CFLAGS_macosx := -I$(JDK_TOPDIR)/src/solaris/native/sun/awt ,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjawt/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_solaris:=-L$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -L$(OPENWIN_LIB)$(ISA_DIR),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(JAWT_LIBS),\ - LDFLAGS_SUFFIX_solaris:=-lXrender,\ - LDFLAGS_SUFFIX_macosx:= -framework Cocoa, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libjawt,\ - LIB:=$(BUILD_LIBJAWT_LIB))) - -ifndef BUILD_HEADLESS_ONLY -$(BUILD_LIBJAWT_LIB) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX) -else -$(BUILD_LIBJAWT_LIB) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX) -endif - -endif # PLATFORM - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jawt$(SHARED_LIBRARY_SUFFIX) - - -########################################################################################## - -BUILD_LIBVERIFY_SRC := check_code.c check_format.c - -ifeq ($(PLATFORM), solaris) - ifneq ($(ARCH), amd64) - BUILD_LIBVERIFY_REORDER := $(JDK_TOPDIR)/makefiles/mapfiles/libverify/reorder-$(ARCH) - endif -endif - - -$(eval $(call SetupNativeCompilation,BUILD_LIBVERIFY,\ - SRC:=$(JDK_TOPDIR)/src/share/native/common,\ - INCLUDE_FILES:=$(BUILD_LIBVERIFY_SRC),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libverify/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_posix:=-ljvm -lc,\ - LDFLAGS_SUFFIX_windows:=jvm.lib,\ - REORDER := $(BUILD_LIBVERIFY_REORDER),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libverify,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)verify$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)verify$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -ifndef OPENJDK -ifneq ($(PLATFORM), macosx) - -BUILD_LIBJDBCODBC_DIR := $(JDK_OUTPUTDIR)/objs/libjdbcodbc -BUILD_LIBJDBCODBC_NAME := $(LIBRARY_PREFIX)JdbcOdbc$(SHARED_LIBRARY_SUFFIX) -BUILD_LIBJDBCODBC_CFLAGS := -BUILD_LIBJDBCODBC_TARGET := $(JDK_OUTPUTDIR)/objs/$(BUILD_LIBJDBCODBC_NAME) -BUILD_LIBJDBCODBC_LIBS := -BUILD_LIBJDBCODBC_LDFLAGS := - -ifeq ($(PLATFORM), windows) - BUILD_LIBJDBCODBC_LDFLAGS := $(LDFLAGS_JDKLIB) - BUILD_LIBJDBCODBC_LIBS += odbc32.lib odbccp32.lib java.lib advapi32.lib -else - BUILD_LIBJDBCODBC_CFLAGS := -DUNIX - -# -# This mimics "current" build system exactly. Link against fake -lodbcinst -lodbc -# but...those are linked with the -soname, causing the dependency to be dropped on linux (gnu ld) -# but kept with other linker (solaris) -# -# IMO very weird behaviour...very weird -# - BUILD_LIBJDBCODBC_LDFLAGS += $(patsubst defs,nodefs,$(LDFLAGS_JDKLIB)) \ - -Xlinker -z -Xlinker nodefs - BUILD_LIBJDBCODBC_LIBS += -L$(BUILD_LIBJDBCODBC_DIR) -lodbcinst -lodbc - BUILD_LIBJDBCODBC_FAKE_LIBS := $(BUILD_LIBJDBCODBC_DIR)/$(LIBRARY_PREFIX)odbcinst$(SHARED_LIBRARY_SUFFIX) \ - $(BUILD_LIBJDBCODBC_DIR)/$(LIBRARY_PREFIX)odbc$(SHARED_LIBRARY_SUFFIX) - - BUILD_LIBJDBCODBC_SONAME := $(call SET_SHARED_LIBRARY_NAME,$(BUILD_LIBJDBCODBC_NAME)) -endif - -ifneq ($(PLATFORM), windows) - -$(eval $(call SetupNativeCompilation,BUILD_FAKEODBCINST,\ - SRC:=$(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc,\ - INCLUDE_FILES := dummyodbc1.c,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS),\ - LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN) $(BUILD_LIBJDBCODBC_LDFLAGS),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(BUILD_LIBJDBCODBC_SONAME),\ - BIN:=$(BUILD_LIBJDBCODBC_DIR),\ - LIB:=$(BUILD_LIBJDBCODBC_DIR)/$(LIBRARY_PREFIX)odbcinst$(SHARED_LIBRARY_SUFFIX))) - -$(eval $(call SetupNativeCompilation,BUILD_FAKEODBC,\ - SRC:=$(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc,\ - INCLUDE_FILES := dummyodbc2.c,\ - LANG:=C,\ - CFLAGS:=$(BUILD_LIBJDBCODBC_CFLAGS) $(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS),\ - LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN) $(BUILD_LIBJDBCODBC_LDFLAGS),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(BUILD_LIBJDBCODBC_SONAME),\ - BIN:=$(BUILD_LIBJDBCODBC_DIR),\ - LIB:=$(BUILD_LIBJDBCODBC_DIR)/$(LIBRARY_PREFIX)odbc$(SHARED_LIBRARY_SUFFIX))) - -$(BUILD_LIBJDBCODBC_FAKE_LIBS) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -$(BUILD_LIBJDBCODBC_TARGET) : $(BUILD_LIBJDBCODBC_FAKE_LIBS) - -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBJDBCODBC,\ - SRC:=$(JDK_TOPDIR)/src/closed/share/classes/sun/jdbc/odbc,\ - EXCLUDE_FILES := dummyodbc.c,\ - LANG:=C,\ - CFLAGS:=$(BUILD_LIBJDBCODBC_CFLAGS) $(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) \ - $(SHARED_LIBRARY_FLAGS),\ - LDFLAGS:=$(BUILD_LIBJDBCODBC_LDFLAGS) \ - $(call SET_SHARED_LIBRARY_ORIGIN) $(BUILD_LIBJDBCODBC_LIBS),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(BUILD_LIBJDBCODBC_SONAME),\ - BIN:=$(BUILD_LIBJDBCODBC_DIR),\ - LIB:=$(BUILD_LIBJDBCODBC_TARGET))) - -$(BUILD_LIBJDBCODBC_TARGET) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)JdbcOdbc$(SHARED_LIBRARY_SUFFIX) - -endif -endif - -########################################################################################## - -BUILD_LIBINSTRUMENT_SRC := $(JDK_TOPDIR)/src/share/instrument \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/io \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/instrument - -BUILD_LIBINSTRUMENT_FILES := \ - EncodingSupport.c \ - EncodingSupport_md.c \ - FileSystemSupport_md.c \ - InstrumentationImplNativeMethods.c \ - InvocationAdapter.c \ - JarFacade.c \ - JPLISAgent.c \ - JPLISAssert.c \ - JavaExceptions.c \ - PathCharsValidator.c \ - Reentrancy.c \ - Utilities.c \ - canonicalize_md.c - -BUILD_LIBINSTRUMENT_DIR := $(JDK_OUTPUTDIR)/objs/libinstrument -BUILD_LIBINSTRUMENT_NAME := $(LIBRARY_PREFIX)instrument$(SHARED_LIBRARY_SUFFIX) -BUILD_LIBINSTRUMENT_CFLAGS := -I$(JDK_TOPDIR)/src/share/instrument \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/instrument \ - -I$(JDK_TOPDIR)/src/share/bin - -BUILD_LIBINSTRUMENT_TARGET := $(JDK_OUTPUTDIR)/objs/$(BUILD_LIBINSTRUMENT_NAME) -BUILD_LIBINSTRUMENT_LDFLAGS := -BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX := - -ifeq ($(PLATFORM), windows) - BUILD_LIBINSTRUMENT_LDFLAGS += jli_static.lib java.lib \ - -export:Agent_OnAttach - # equivalent of strcasecmp is stricmp on Windows - BUILD_LIBINSTRUMENT_CFLAGS += -Dstrcasecmp=stricmp -else - -ifneq (,$(findstring $(PLATFORM), macosx)) - ifneq ($(ARCH), universal) - BUILD_LIBINSTRUMENT_LDFLAGS += -Wl,-all_load - endif - - BUILD_LIBINSTRUMENT_LDFLAGS += $(JDK_OUTPUTDIR)/objs/libjli_static.a - BUILD_LIBINSTRUMENT_LDFLAGS += -liconv - BUILD_LIBINSTRUMENT_LDFLAGS += -framework Cocoa -framework Security -framework ApplicationServices - BUILD_LIBINSTRUMENT_LDFLAGS += $(LIBZ) -else - BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX += -ljli $(LIBDL) -endif -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT,\ - SRC:=$(BUILD_LIBINSTRUMENT_SRC),\ - INCLUDE_FILES:=$(BUILD_LIBINSTRUMENT_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - $(BUILD_LIBINSTRUMENT_CFLAGS),\ - CFLAGS_debug := -DJPLIS_LOGGING,\ - CFLAGS_release := -DNO_JPLIS_LOGGING,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libinstrument/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN)\ - $(call SET_SHARED_LIBRARY_ORIGIN,jli) \ - $(BUILD_LIBINSTRUMENT_LDFLAGS),\ - LDFLAGS_SUFFIX:=$(LIBZ) $(BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX),\ - BIN:=$(BUILD_LIBINSTRUMENT_DIR),\ - LIB:=$(BUILD_LIBINSTRUMENT_TARGET))) - -$(BUILD_LIBINSTRUMENT_TARGET) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX) -$(BUILD_LIBINSTRUMENT_TARGET) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) -$(BUILD_LIBINSTRUMENT_TARGET) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(BUILD_LIBINSTRUMENT_NAME) - -########################################################################################## - -BUILD_LIBMANAGEMENT_SRC := $(JDK_TOPDIR)/src/share/native/sun/management \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/management \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/com/sun/management - -BUILD_LIBMANAGEMENT_EXCLUDES := - -BUILD_LIBMANAGEMENT_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/sun/management - -ifneq ($(PLATFORM), windows) - BUILD_LIBMANAGEMENT_EXCLUDES += OperatingSystem_md.c -else - BUILD_LIBMANAGEMENT_EXCLUDES += UnixOperatingSystem_md.c -endif - -ifneq ($(PLATFORM),solaris) - BUILD_LIBMANAGEMENT_EXCLUDES += SolarisOperatingSystem.c -endif - -ifneq ($(PLATFORM),linux) - BUILD_LIBMANAGEMENT_EXCLUDES += LinuxOperatingSystem.c -endif - -ifneq ($(PLATFORM),macosx) - BUILD_LIBMANAGEMENT_EXCLUDES += MacosxOperatingSystem.c -endif - - -$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT,\ - SRC:=$(BUILD_LIBMANAGEMENT_SRC),\ - EXCLUDE_FILES:=$(BUILD_LIBMANAGEMENT_EXCLUDES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS) $(BUILD_LIBMANAGEMENT_CFLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libmanagement/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_windows := java.lib jvm.lib advapi32.lib psapi.lib,\ - LDFLAGS_solaris := -lkstat,\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libmanagement,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)management$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)management$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)management$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -BUILD_LIBHPROF_SRC := $(JDK_TOPDIR)/src/share/demo/jvmti/hprof $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/demo/jvmti/hprof -BUILD_LIBHPROF_CFLAGS := -I$(JDK_TOPDIR)/src/share/demo/jvmti/hprof \ - -I$(JDK_TOPDIR)/src/share/npt \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt \ - -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo - -BUILD_LIBHPROF_LDFLAGS := - -ifeq ($(PLATFORM),solaris) - BUILD_LIBHPROF_LDFLAGS += -lsocket -lnsl -endif - -ifneq ($(PLATFORM),windows) - BUILD_LIBHPROF_LDFLAGS += $(LIBDL) -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBHPROF,\ - SRC:=$(BUILD_LIBHPROF_SRC),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HIGHEST) $(SHARED_LIBRARY_FLAGS) \ - $(BUILD_LIBHPROF_CFLAGS),\ - CFLAGS_debug := -DHPROF_LOGGING,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libhprof/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_windows:=wsock32.lib winmm.lib advapi32.lib,\ - LDFLAGS_SUFFIX:=$(BUILD_LIBHPROF_LDFLAGS),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libhprof,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)hprof$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)hprof$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA_CRW_DEMO,\ - SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjava_crw_demo/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX:=,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjava_crw_demo,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)java_crw_demo$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java_crw_demo$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -$(eval $(call SetupNativeCompilation,BUILD_LIBNPT,\ - SRC:=$(JDK_TOPDIR)/src/share/npt $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -I$(JDK_TOPDIR)/src/share/npt \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libnpt/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_macosx := -liconv,\ - LDFLAGS_SUFFIX_windows := -export:nptInitialize -export:nptTerminate,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libnpt,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)npt$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)npt$(SHARED_LIBRARY_SUFFIX) - -########################################################################################## - -BUILD_LIBNIO_SRC := \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/nio \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/ch \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/fs - -BUILD_LIBNIO_CFLAGS := \ - -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \ - -I$(JDK_TOPDIR)/src/share/native/java/io \ - -I$(JDK_TOPDIR)/src/share/native/java/net \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/net - -BUILD_LIBNIO_FILES := \ - DatagramChannelImpl.c \ - DatagramDispatcher.c \ - FileChannelImpl.c \ - FileDispatcherImpl.c \ - FileKey.c \ - IOUtil.c \ - MappedByteBuffer.c \ - Net.c \ - ServerSocketChannelImpl.c \ - SocketChannelImpl.c \ - SocketDispatcher.c - -ifeq ($(PLATFORM), windows) - BUILD_LIBNIO_FILES += \ - Iocp.c \ - RegistryFileTypeDetector.c \ - WindowsAsynchronousFileChannelImpl.c \ - WindowsAsynchronousServerSocketChannelImpl.c \ - WindowsAsynchronousSocketChannelImpl.c \ - WindowsNativeDispatcher.c \ - WindowsSelectorImpl.c -endif - -ifeq ($(PLATFORM), linux) - BUILD_LIBNIO_LDFLAGS_SUFFIX := -lpthread $(LIBDL) - BUILD_LIBNIO_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-linux - BUILD_LIBNIO_FILES += \ - EPoll.c \ - EPollArrayWrapper.c \ - EPollPort.c \ - InheritedChannel.c \ - NativeThread.c \ - PollArrayWrapper.c \ - UnixAsynchronousServerSocketChannelImpl.c \ - UnixAsynchronousSocketChannelImpl.c \ - GnomeFileTypeDetector.c \ - LinuxNativeDispatcher.c \ - LinuxWatchService.c \ - UnixCopyFile.c \ - UnixNativeDispatcher.c -endif - -ifeq ($(PLATFORM), macosx) - BUILD_LIBNIO_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-bsd - BUILD_LIBNIO_SRC += $(JDK_TOPDIR)/src/macosx/native/sun/nio/ch - BUILD_LIBNIO_FILES += \ - InheritedChannel.c \ - NativeThread.c \ - PollArrayWrapper.c \ - UnixAsynchronousServerSocketChannelImpl.c \ - UnixAsynchronousSocketChannelImpl.c \ - GnomeFileTypeDetector.c \ - BsdNativeDispatcher.c \ - UnixCopyFile.c \ - UnixNativeDispatcher.c \ - KQueue.c \ - KQueuePort.c \ - KQueueArrayWrapper.c -endif - -ifeq ($(PLATFORM), solaris) - BUILD_LIBNIO_LDFLAGS_SUFFIX := $(LIBDL) - BUILD_LIBNIO_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-solaris - BUILD_LIBNIO_FILES += \ - DevPollArrayWrapper.c \ - InheritedChannel.c \ - NativeThread.c \ - PollArrayWrapper.c \ - SolarisEventPort.c \ - UnixAsynchronousServerSocketChannelImpl.c \ - UnixAsynchronousSocketChannelImpl.c \ - GnomeFileTypeDetector.c \ - SolarisNativeDispatcher.c \ - SolarisWatchService.c \ - UnixCopyFile.c \ - UnixNativeDispatcher.c -endif - -BUILD_LIBNIO_LDFLAGS := -ifeq ($(PLATFORM),windows) - BUILD_LIBNIO_LDFLAGS += \ - java.lib net.lib advapi32.lib jvm.lib ws2_32.lib\ - $(JDK_OUTPUTDIR)/objs/libjava/io_util.obj \ - $(JDK_OUTPUTDIR)/objs/libjava/FileDescriptor_md.obj -endif - -ifeq ($(PLATFORM), linux) - BUILD_LIBNIO_LDFLAGS_SUFFIX += -ljava -lnet -lpthread $(LIBDL) -endif -ifeq ($(PLATFORM), macosx) - BUILD_LIBNIO_LDFLAGS_SUFFIX += -ljava -lnet -pthread -endif - -ifeq ($(PLATFORM), solaris) - BUILD_LIBNIO_LDFLAGS_SUFFIX += $(JVMLIB) $(LIBSOCKET) -lposix4 $(LIBDL) -lsendfile \ - -ljava -lnet -endif # PLATFORM - - -$(eval $(call SetupNativeCompilation,BUILD_LIBNIO,\ - SRC:=$(BUILD_LIBNIO_SRC),\ - INCLUDE_FILES := $(BUILD_LIBNIO_FILES), \ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS) \ - $(BUILD_LIBNIO_CFLAGS),\ - MAPFILE := $(BUILD_LIBNIO_MAPFILE), \ - LDFLAGS:=$(LDFLAGS_JDKLIB) $(BUILD_LIBNIO_LDFLAGS) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(BUILD_LIBNIO_LDFLAGS_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libnio,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)nio$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)nio$(SHARED_LIBRARY_SUFFIX) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)nio$(SHARED_LIBRARY_SUFFIX) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)net$(SHARED_LIBRARY_SUFFIX) $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - - -########################################################################################## - -LIBNET_SRC_DIRS := $(JDK_TOPDIR)/src/share/native/java/net \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/net \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/net/dns \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/net/www/protocol/http/ntlm \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/net/sdp \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/net/spi - -LIBNET_CFLAGS := $(foreach dir,$(LIBNET_SRC_DIRS),-I$(dir)) - -LIBNET_EXCLUDE_FILES:= -ifneq ($(PLATFORM),linux) - LIBNET_EXCLUDE_FILES += linux_close.c -endif - -ifneq ($(PLATFORM),macosx) - LIBNET_EXCLUDE_FILES += bsd_close.c -endif - -ifeq ($(PLATFORM),windows) - LIBNET_EXCLUDE_FILES += PlainSocketImpl.c PlainDatagramSocketImpl.c SdpSupport.c -else - LIBNET_EXCLUDE_FILES += TwoStacksPlainSocketImpl.c DualStackPlainSocketImpl.c \ - TwoStacksPlainDatagramSocketImpl.c DualStackPlainDatagramSocketImpl.c \ - NTLMAuthSequence.c NetworkInterface_winXP.c -endif - -LIBNET_LDFLAGS_SUFFIX := - -$(eval $(call SetupNativeCompilation,BUILD_LIBNET,\ - SRC:=$(LIBNET_SRC_DIRS),\ - EXCLUDE_FILES := $(LIBNET_EXCLUDE_FILES), \ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - $(LIBNET_CFLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libnet/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBNET_LDFLAGS_SUFFIX),\ - LDFLAGS_SUFFIX_solaris := -lnsl -lsocket $(LIBDL) ,\ - LDFLAGS_SUFFIX_linux := $(LIBDL) -lpthread ,\ - LDFLAGS_SUFFIX_windows := ws2_32.lib $(JVMLIB) secur32.lib iphlpapi.lib \ - delayimp.lib java.lib jvm.lib advapi32.lib \ - /DELAYLOAD:secur32.dll /DELAYLOAD:iphlpapi.dll, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libnet,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)net$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)net$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)net$(SHARED_LIBRARY_SUFFIX) - -$(JDK_OUTPUTDIR)/lib/net.properties: $(JDK_TOPDIR)/src/share/lib/net.properties - $(ECHO) Copying $(@F) - $(MKDIR) -p $(@D) - $(CP) $< $@ - -COPY_FILES += $(JDK_OUTPUTDIR)/lib/net.properties - -ifeq ($(PLATFORM), solaris) -$(JDK_OUTPUTDIR)/lib/sdp/sdp.conf.template : $(JDK_TOPDIR)/src/${LEGACY_HOST_OS_API}/lib/sdp/sdp.conf.template - $(ECHO) Copying $(@F) - $(MKDIR) -p $(@D) - $(CP) $< $@ - -COPY_FILES += $(JDK_OUTPUTDIR)/lib/sdp/sdp.conf.template -endif - -########################################################################################## - -LIBJAVA_SRC_DIRS := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/lang \ - $(JDK_TOPDIR)/src/share/native/java/lang \ - $(JDK_TOPDIR)/src/share/native/java/lang/ref \ - $(JDK_TOPDIR)/src/share/native/java/lang/reflect \ - $(JDK_TOPDIR)/src/share/native/java/io \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/io \ - $(JDK_TOPDIR)/src/share/native/java/nio \ - $(JDK_TOPDIR)/src/share/native/java/security \ - $(JDK_TOPDIR)/src/share/native/common \ - $(JDK_TOPDIR)/src/share/native/sun/misc \ - $(JDK_TOPDIR)/src/share/native/sun/reflect \ - $(JDK_TOPDIR)/src/share/native/java/sql \ - $(JDK_TOPDIR)/src/share/native/java/util \ - $(JDK_TOPDIR)/src/share/native/java/util/concurrent/atomic \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/common \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/java/util \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/provider \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/io - -LIBJAVA_CFLAGS := $(foreach dir,$(LIBJAVA_SRC_DIRS),-I$(dir)) \ - -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include \ - -DARCHPROPNAME='"$(ARCH)"' - -LIBJAVA_CFLAGS += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ - -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \ - -DJDK_MICRO_VERSION='"$(JDK_MICRO_VERSION)"' \ - -DJDK_BUILD_NUMBER='"$(JDK_BUILD_NUMBER)"' - -ifneq (,$(JDK_UPDATE_VERSION)) - LIBJAVA_CFLAGS += -DJDK_UPDATE_VERSION='"$(JDK_UPDATE_VERSION)"' -endif - -LIBJAVA_EXCLUDE_FILES:= check_code.c check_format.c - -ifneq ($(PLATFORM),macosx) - LIBJAVA_EXCLUDE_FILES += java_props_macosx.c -else - BUILD_LIBJAVA_java_props_md.c_CFLAGS := -x objective-c -endif - -ifeq ($(PLATFORM),windows) - LIBJAVA_EXCLUDE_FILES += \ - UNIXProcess_md.c \ - UnixFileSystem_md.c \ - FileSystemPreferences.c -else - LIBJAVA_EXCLUDE_FILES += \ - ProcessImpl_md.c \ - Win32FileSystem_md.c \ - WinNTFileSystem_md.c \ - dirent_md.c \ - WindowsPreferences.c \ - sun/security/provider/WinCAPISeedGenerator.c \ - sun/io/Win32ErrorMode.c -endif - -ifeq ($(PLATFORM), solaris) - ifneq ($(ARCH), amd64) - LIBJAVA_REORDER := $(JDK_TOPDIR)/makefiles/mapfiles/libjava/reorder-$(ARCH) - endif -endif - -LIBJAVA_FDLIBM := $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) -LIBJAVA_VERIFY := $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)verify$(STATIC_LIBRARY_SUFFIX) - -$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA,\ - SRC:=$(LIBJAVA_SRC_DIRS),\ - EXCLUDES := fdlibm/src zip, \ - EXCLUDE_FILES := $(LIBJAVA_EXCLUDE_FILES), \ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS) \ - $(LIBJAVA_CFLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjava/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_windows:=-export:winFileHandleOpen -export:handleLseek \ - $(LIBJAVA_FDLIBM) $(LIBJAVA_VERIFY) jvm.lib \ - shell32.lib delayimp.lib /DELAYLOAD:shell32.dll \ - advapi32.lib,\ - LDFLAGS_SUFFIX_posix:=-ljvm -lverify, \ - LDFLAGS_SUFFIX_solaris := -lnsl -lsocket -lscf $(LIBDL) $(LIBJAVA_FDLIBM) -lc,\ - LDFLAGS_SUFFIX_linux := $(LIBDL) $(LIBJAVA_FDLIBM),\ - LDFLAGS_SUFFIX_macosx := $(LIBJAVA_FDLIBM) \ - -framework CoreFoundation \ - -framework Security -framework SystemConfiguration, \ - REORDER := $(LIBJAVA_REORDER), \ - BIN:=$(JDK_OUTPUTDIR)/objs/libjava,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) : $(LIBJLI_BINARY) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)verify$(SHARED_LIBRARY_SUFFIX) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) : $(LIBJAVA_FDLIBM) - -########################################################################################## - -BUILD_LIBJLI_SRC_DIRS := $(JDK_TOPDIR)/src/share/bin $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin -BUILD_LIBJLI_CFLAGS := $(foreach dir,$(BUILD_LIBJLI_SRC_DIRS),-I$(dir)) - -BUILD_LIBJLI_FILES := \ - java.c \ - splashscreen_stubs.c \ - parse_manifest.c \ - version_comp.c \ - wildcard.c \ - jli_util.c - -ifeq ($(JVM_VARIANT_ZERO), true) - ERGO_FAMILY := zero -else # !ZERO_BUILD - ifneq (,$(findstring $(ARCH), amd64 x86_64)) - ERGO_FAMILY := i586 - else # !X86 FAMILY - ERGO_FAMILY := $(ARCH) - endif #ARCH_FAMILY -endif # ZERO_BUILD - -ifeq ($(PLATFORM), macosx) - BUILD_LIBJLI_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/bin - BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/bin - BUILD_LIBJLI_FILES += java_md_common.c java_md_macosx.c - - BUILD_LIBJLI_java_md_macosx.c_CFLAGS := -x objective-c - BUILD_LIBJLI_A_java_md_macosx.c_CFLAGS := -x objective-c -endif - -ifeq ($(PLATFORM), windows) - BUILD_LIBJLI_FILES += java_md.c -else ifneq ($(PLATFORM), macosx) - - BUILD_LIBJLI_FILES += java_md_common.c - BUILD_LIBJLI_FILES += java_md_solinux.c ergo.c - - ERGO_ARCH_FILE = ergo_$(ERGO_FAMILY).c - - # if the architecture specific ergo file exists then - # use it, else use the generic definitions from ergo.c - ifneq ($(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/$(ERGO_ARCH_FILE)),) - BUILD_LIBJLI_FILES += $(ERGO_ARCH_FILE) - else # !ERGO_ARCH_FILE - BUILD_LIBJLI_CFLAGS += -DUSE_GENERIC_ERGO - endif # ERGO_ARCH_FILE -endif #WINDOWS - -# Names of arch directories -BUILD_LIBJLI_CFLAGS += -DLIBARCHNAME='"$(LIBARCH)"' -ifeq ($(PLATFORM), solaris) - ifneq (,$(findstring $(ARCH),sparc)) - BUILD_LIBJLI_CFLAGS += -DLIBARCH32NAME='"sparc"' - BUILD_LIBJLI_CFLAGS += -DLIBARCH64NAME='"sparcv9"' - else - BUILD_LIBJLI_CFLAGS += -DLIBARCH32NAME='"i386"' - BUILD_LIBJLI_CFLAGS += -DLIBARCH64NAME='"amd64"' - endif -endif # PLATFORM - -ifeq ($(PLATFORM), macosx) - BUILD_LIBJLI_CFLAGS += -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" -endif - -ifneq ($(USE_EXTERNAL_LIBZ),true) - BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 - BUILD_LIBJLI_CFLAGS += $(LIBZ_INCLUDE) - BUILD_LIBJLI_FILES += \ - inflate.c \ - inftrees.c \ - inffast.c \ - zadler32.c \ - zcrc32.c \ - zutil.c -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBJLI,\ - SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ - INCLUDE_FILES := $(BUILD_LIBJLI_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(SHARED_LIBRARY_FLAGS) $(BUILD_LIBJLI_CFLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjli/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX := $(LIBZ),\ - LDFLAGS_SUFFIX_posix := $(LIBDL) -lc,\ - LDFLAGS_SUFFIX_linux := -lpthread,\ - LDFLAGS_SUFFIX_windows := \ - -export:JLI_Launch \ - -export:JLI_ManifestIterate \ - -export:JLI_SetTraceLauncher \ - -export:JLI_ReportErrorMessage \ - -export:JLI_ReportErrorMessageSys \ - -export:JLI_ReportMessage \ - -export:JLI_ReportExceptionDescription \ - advapi32.lib \ - comctl32.lib \ - user32.lib,\ - LDFLAGS_SUFFIX_macosx := -framework Cocoa -framework Security -framework ApplicationServices, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libjli,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX))) - -ifeq ($(HOST_OS), windows) - LIBJLI_BINARY := $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) -else - LIBJLI_BINARY := $(INSTALL_LIBRARIES_HERE)/jli/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) - - $(LIBJLI_BINARY) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) - $(MKDIR) -p $(@D) - $(ECHO) Copying $(@F) - $(CP) $< $@ -endif -BUILD_LIBRARIES += $(LIBJLI_BINARY) - -# On windows, the static library has the same suffix as the import library created by -# with the shared library, so the static library is given a different name. No harm -# in doing it for all platform to reduce complexity. -ifneq ($(HOST_OS),macosx) - $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\ - SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ - INCLUDE_FILES := $(BUILD_LIBJLI_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(STATIC_LIBRARY_FLAGS) $(BUILD_LIBJLI_CFLAGS),\ - ARFLAGS:=$(ARFLAGS),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjli_static,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX))) -else - # - # On macosx they do partial (incremental) linking of fdlibm - # code it here...rather than add support to NativeCompilation - # as this is first time I see it - $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_A,\ - SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ - INCLUDE_FILES := $(BUILD_LIBJLI_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_HI) $(BUILD_LIBJLI_CFLAGS),\ - LDFLAGS := -nostdlib -r,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjli_static,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX))) -endif - -BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX) - -########################################################################################## - -ifndef OPENJDK -ifndef JAVASE_EMBEDDED - -$(eval $(call SetupNativeCompilation,BUILD_LIBJFR,\ - SRC:=$(JDK_TOPDIR)/src/closed/share/native/oracle/jfr,\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -I$(JDK_TOPDIR)/src/closed/share/javavm/export, \ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjfr/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjfr,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jfr$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jfr$(SHARED_LIBRARY_SUFFIX) - -endif -endif - -########################################################################################## - -ifndef OPENJDK - -BUILD_LIBKCMS_EXCLUDE_FILES := -ifeq ($(PLATFORM),windows) - BUILD_LIBKCMS_EXCLUDE_FILES += ukcpmgr.c unixmem.c -else - BUILD_LIBKCMS_EXCLUDE_FILES += cmmdll.c registry.c spxffile.c sysinfo.c winmem.c wkcpmgr.c -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBKCMS,\ - SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms,\ - LANG:=C,\ - EXCLUDE_FILES := $(BUILD_LIBKCMS_EXCLUDE_FILES),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -DJAVACMM -DFUT_CALC_EX -DNO_FUT_GCONST,\ - CFLAGS_linux := -Wno-missing-field-initializers,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libkcms/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX_linux := -lpthread,\ - LDFLAGS_SUFFIX_windows := java.lib advapi32.lib user32.lib version.lib, \ - LDFLAGS_SUFFIX:= -lm $(LDFLAGS_JDKLIB_SUFFIX),\ - VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms/cmm.rc,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libkcms,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)kcms$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)kcms$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)kcms$(SHARED_LIBRARY_SUFFIX) - -endif - -########################################################################################## - -ifndef OPENJDK -ifeq ($(PLATFORM), solaris) -ifneq ($(ARCH), amd64) - -ifeq ($(shell if test "$(OS_VERSION_MAJOR)" -eq 5 -a "$(OS_VERSION_MINOR)" -le 10; then $(ECHO) ok; fi), ok) - -SUNWJDGA_MAPFILE := -ifneq (,$(findstring $(ARCH),sparc)) - SUNWJDGA_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjdga/mapfile-vers -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBSUNWJDGA, \ - SRC:=$(JDK_TOPDIR)/src/solaris/native/sun/jdga, \ - LANG:=C, \ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - -I$(JDK_TOPDIR)/src/share/javavm/export \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/javavm/export \ - -I$(OPENWIN_HOME)/include, \ - MAPFILE := $(SUNWJDGA_MAPFILE), \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX:= -L$(OPENWIN_LIB)$(ISA_DIR) -R$(OPENWIN_LIB)$(ISA_DIR) -ldga -lX11 $(LIBDL) -lc, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libsunwjdga, \ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)sunwjdga$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)sunwjdga$(SHARED_LIBRARY_SUFFIX) - -endif -endif -endif -endif - -########################################################################################## - -ifeq ($(BUILD_HEADLESS), true) -ifneq ($(PLATFORM), windows) - -# TODO!! -X11_PATH := /usr/X11R6 - -LIBAWT_HEADLESS_DIRS := $(JDK_TOPDIR)/src/share/native/sun/font \ - $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ - $(JDK_TOPDIR)/src/solaris/native/sun/font \ - $(JDK_TOPDIR)/src/solaris/native/sun/awt \ - $(JDK_TOPDIR)/src/solaris/native/sun/java2d/opengl \ - $(JDK_TOPDIR)/src/solaris/native/sun/java2d/x11 - -LIBAWT_HEADLESS_CFLAGS := -DHEADLESS=true \ - -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \ - $(CUPS_CFLAGS) \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/jdga \ - $(foreach dir,$(LIBAWT_HEADLESS_DIRS),-I$(dir)) - -LIBAWT_HEADLESS_FILES := \ - awt_Font.c \ - HeadlessToolkit.c \ - fontpath.c \ - VDrawingArea.c \ - X11Color.c \ - X11Renderer.c \ - X11PMBlitLoops.c \ - X11SurfaceData.c \ - X11FontScaler_md.c \ - X11TextRenderer_md.c \ - OGLBlitLoops.c \ - OGLBufImgOps.c \ - OGLContext.c \ - OGLFuncs.c \ - OGLMaskBlit.c \ - OGLMaskFill.c \ - OGLPaints.c \ - OGLRenderQueue.c \ - OGLRenderer.c \ - OGLSurfaceData.c \ - OGLTextRenderer.c \ - OGLVertexCache.c \ - GLXGraphicsConfig.c \ - GLXSurfaceData.c \ - AccelGlyphCache.c \ - CUPSfuncs.c - -LIBAWT_HEADLESS_LDFLAGS_SUFFIX := $(LDFLAGS_JDKLIB_SUFFIX) -lawt -lm - -LIBAWT_HEADLESS_REORDER := -ifeq ($(PLATFORM), solaris) - ifneq ($(ARCH), amd64) - LIBAWT_HEADLESS_REORDER := $(JDK_TOPDIR)/makefiles/mapfiles/libawt_headless/reorder-$(ARCH) - endif -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_HEADLESS,\ - SRC:=$(LIBAWT_HEADLESS_DIRS),\ - INCLUDE_FILES := $(LIBAWT_HEADLESS_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) $(LIBAWT_HEADLESS_CFLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libawt_headless/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - REORDER := $(LIBAWT_HEADLESS_REORDER), \ - LDFLAGS_SUFFIX := $(LIBAWT_HEADLESS_LDFLAGS_SUFFIX),\ - LDFLAGS_SUFFIX_posix := $(LIBDL),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libawt_headless,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX) - -endif -endif - -########################################################################################## - -ifneq ($(PLATFORM), windows) -ifndef BUILD_HEADLESS_ONLY - -LIBAWT_XAWT_DIRS := \ - $(JDK_TOPDIR)/src/share/native/sun/awt/debug \ - $(JDK_TOPDIR)/src/share/native/sun/awt/utility \ - $(JDK_TOPDIR)/src/share/native/sun/font \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/font \ - $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/opengl \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/x11 \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/xawt \ - -LIBAWT_XAWT_CFLAGS := -DXAWT -DXAWT_HACK \ - -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \ - $(CUPS_CFLAGS) \ - $(foreach dir,$(LIBAWT_XAWT_DIRS),-I$(dir)) \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ - -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ - -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/jdga - -ifeq ($(PLATFORM),solaris) - LIBAWT_XAWT_CFLAGS += -DFUNCPROTO=15 -endif - -ifeq ($(MILESTONE),internal) - LIBAWT_XAWT_CFLAGS += -DINTERNAL_BUILD -endif - -LIBAWT_XAWT_FILES := \ - XlibWrapper.c \ - XWindow.c \ - XToolkit.c \ - X11Color.c \ - X11SurfaceData.c \ - awt_GraphicsEnv.c \ - awt_InputMethod.c \ - robot_common.c \ - awt_Robot.c \ - list.c \ - multiVis.c \ - initIDs.c \ - awt_util.c \ - awt_Desktop.c \ - awt_UNIXToolkit.c \ - X11FontScaler_md.c \ - X11TextRenderer_md.c \ - fontpath.c \ - awt_Insets.c \ - awt_Event.c \ - X11Renderer.c \ - X11PMBlitLoops.c \ - OGLBlitLoops.c \ - OGLBufImgOps.c \ - OGLContext.c \ - OGLFuncs.c \ - OGLMaskBlit.c \ - OGLMaskFill.c \ - OGLPaints.c \ - OGLRenderQueue.c \ - OGLRenderer.c \ - OGLSurfaceData.c \ - OGLTextRenderer.c \ - OGLVertexCache.c \ - GLXGraphicsConfig.c \ - GLXSurfaceData.c \ - AccelGlyphCache.c \ - awt_Font.c \ - multi_font.c \ - awt_AWTEvent.c \ - awt_DrawingSurface.c \ - jawt.c \ - CUPSfuncs.c \ - debug_assert.c \ - debug_mem.c \ - debug_trace.c \ - debug_util.c \ - awt_Plugin.c \ - gtk2_interface.c \ - swing_GTKEngine.c \ - swing_GTKStyle.c \ - rect.c \ - sun_awt_X11_GtkFileDialogPeer.c \ - XRSurfaceData.c \ - XRBackendNative.c - -LIBAWT_XAWT_LDFLAGS_SUFFIX := $(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) -lXtst -lXi -ljava -lverify -ljvm -lc - -ifeq ($(PLATFORM), linux) - LIBAWT_XAWT_LDFLAGS_SUFFIX += -lpthread -endif - -ifeq ($(PLATFORM), macosx) - LIBAWT_XAWT_LDFLAGS_SUFFIX += -lpthread -endif - -$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_XAWT,\ - SRC:=$(LIBAWT_XAWT_DIRS),\ - INCLUDE_FILES := $(LIBAWT_XAWT_FILES),\ - LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) $(LIBAWT_XAWT_CFLAGS) \ - $(X_CFLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libawt_xawt/mapfile-vers, \ - LDFLAGS:=$(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN) \ - $(X_LIBS),\ - LDFLAGS_solaris:=-L$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -L$(OPENWIN_LIB)$(ISA_DIR) \ - -R$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -R$(OPENWIN_LIB)$(ISA_DIR) \ - -R/usr/dt/lib$(ISA_DIR),\ - LDFLAGS_SUFFIX := $(LIBAWT_XAWT_LDFLAGS_SUFFIX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libawt_xawt,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX))) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) - -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_xawt$(SHARED_LIBRARY_SUFFIX) - -endif -endif - -########################################################################################## - -ifndef BUILD_HEADLESS_ONLY -LIBSPLASHSCREEN_DIRS := \ - $(JDK_TOPDIR)/src/share/native/sun/awt/giflib \ - $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg \ - $(JDK_TOPDIR)/src/share/native/sun/awt/libpng \ - $(JDK_TOPDIR)/src/share/native/sun/awt/splashscreen \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt/splashscreen - -LIBSPLASHSCREEN_CFLAGS := -DSPLASHSCREEN -DPNG_NO_MMX_CODE \ - $(foreach dir,$(LIBSPLASHSCREEN_DIRS),-I$(dir)) - -ifeq ($(PLATFORM), macosx) - LIBSPLASHSCREEN_CFLAGS := -I$(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen \ - $(LIBSPLASHSCREEN_CFLAGS) \ - -F/System/Library/Frameworks/JavaVM.framework/Frameworks - LIBSPLASHSCREEN_CFLAGS += -DWITH_MACOSX - LIBSPLASHSCREEN_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp - - LIBSPLASHSCREEN_java_awt_SplashScreen.c_CFLAGS := -x objective-c -O0 - LIBSPLASHSCREEN_splashscreen_gfx_impl.c_CFLAGS := -x objective-c -O0 - LIBSPLASHSCREEN_splashscreen_gif.c_CFLAGS := -x objective-c -O0 - LIBSPLASHSCREEN_splashscreen_impl.c_CFLAGS := -x objective-c -O0 - LIBSPLASHSCREEN_splashscreen_jpeg.c_CFLAGS := -x objective-c -O0 - LIBSPLASHSCREEN_splashscreen_png.c_CFLAGS := -x objective-c -O0 - LIBSPLASHSCREEN_splashscreen_sys.m_CFLAGS := -O0 - -else ifneq ($(PLATFORM), windows) - LIBSPLASHSCREEN_CFLAGS += -DWITH_X11 -I$(OPENWIN_HOME)/include -I$(OPENWIN_HOME)/include/X11/extensions -else - LIBSPLASHSCREEN_CFLAGS += -DWITH_WIN32 -endif - -LIBSPLASHSCREEN_FILES := \ - java_awt_SplashScreen.c \ - splashscreen_gfx_impl.c \ - splashscreen_gif.c \ - splashscreen_impl.c \ - splashscreen_jpeg.c \ - splashscreen_png.c \ - png.c \ - pngerror.c \ - pngget.c \ - pngmem.c \ - pngpread.c \ - pngread.c \ - pngrio.c \ - pngrtran.c \ - pngrutil.c \ - pngset.c \ - pngtrans.c \ - pngwio.c \ - pngwrite.c \ - pngwtran.c \ - pngwutil.c \ - dgif_lib.c \ - gif_err.c \ - gifalloc.c \ - jcomapi.c \ - jdapimin.c \ - jdapistd.c \ - jdcoefct.c \ - jdcolor.c \ - jddctmgr.c \ - jdhuff.c \ - jdinput.c \ - jdmainct.c \ - jdmarker.c \ - jdmaster.c \ - jdmerge.c \ - jdphuff.c \ - jdpostct.c \ - jdsample.c \ - jerror.c \ - jidctflt.c \ - jidctfst.c \ - jidctint.c \ - jidctred.c \ - jmemmgr.c \ - jmemnobs.c \ - jquant1.c \ - jquant2.c \ - jutils.c \ - jcapimin.c \ - jcapistd.c \ - jccoefct.c \ - jccolor.c \ - jcdctmgr.c \ - jchuff.c \ - jcinit.c \ - jcmainct.c \ - jcmarker.c \ - jcmaster.c \ - jcparam.c \ - jcphuff.c \ - jcprepct.c \ - jcsample.c \ - jctrans.c \ - jdtrans.c \ - jfdctflt.c \ - jfdctfst.c \ - jfdctint.c - -ifneq ($(PLATFORM), macosx) -LIBSPLASHSCREEN_FILES += splashscreen_sys.c -else -LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen -LIBSPLASHSCREEN_FILES += splashscreen_sys.m -endif - -LIBSPLASHSCREEN_LDFLAGS_SUFFIX := - -ifneq ($(USE_EXTERNAL_LIBZ),true) - LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 - LIBSPLASHSCREEN_CFLAGS += $(LIBZ_INCLUDE) - LIBSPLASHSCREEN_FILES += \ - compress.c \ - deflate.c \ - gzclose.c \ - gzlib.c \ - gzread.c \ - gzwrite.c \ - infback.c \ - inffast.c \ - inflate.c \ - inftrees.c \ - trees.c \ - uncompr.c \ - zadler32.c \ - zcrc32.c \ - zutil.c -endif - -ifeq ($(PLATFORM), macosx) - LIBSPLASHSCREEN_LDFLAGS_SUFFIX += $(LIBM) -lpthread -liconv -losxapp \ - -framework ApplicationServices \ - -framework Foundation \ - -framework Cocoa \ - -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ - -framework JavaNativeFoundation -else ifneq ($(PLATFORM), windows) - LIBSPLASHSCREEN_LDFLAGS_SUFFIX += -L$(OPENWIN_LIB)$(ISA_DIR) -lX11 -lXext $(LIBM) -lpthread $(LIBDL) -else # PLATFORM - LIBSPLASHSCREEN_LDFLAGS_SUFFIX += kernel32.lib user32.lib gdi32.lib delayimp.lib /DELAYLOAD:user32.dll -endif # PLATFORM - -$(eval $(call SetupNativeCompilation,LIBSPLASHSCREEN,\ - SRC:=$(LIBSPLASHSCREEN_DIRS),\ - INCLUDE_FILES := $(LIBSPLASHSCREEN_FILES),\ - LANG:=C,\ - CFLAGS:= $(LIBSPLASHSCREEN_CFLAGS) $(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libsplashscreen/mapfile-vers, \ - LDFLAGS:= $(LDFLAGS_JDKLIB) \ - $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX := $(LIBSPLASHSCREEN_LDFLAGS_SUFFIX) $(LIBZ),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libsplashscreen,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)splashscreen$(SHARED_LIBRARY_SUFFIX))) - -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)splashscreen$(SHARED_LIBRARY_SUFFIX) - -ifeq ($(PLATFORM),macosx) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)splashscreen$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) -endif - -endif - -########################################################################################## - -LIBAWT_DIRS := \ +LIBAWT_DIRS:=\ $(JDK_TOPDIR)/src/share/native/sun/awt \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/awt \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt \ $(JDK_TOPDIR)/src/share/native/sun/awt/image \ $(JDK_TOPDIR)/src/share/native/sun/awt/image/gif \ $(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ @@ -2110,23 +437,24 @@ LIBAWT_DIRS := \ $(JDK_TOPDIR)/src/share/native/sun/awt/debug \ $(JDK_TOPDIR)/src/share/native/sun/awt/utility \ $(JDK_TOPDIR)/src/share/native/sun/java2d \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ $(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ $(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ $(JDK_TOPDIR)/src/share/native/sun/awt/image \ $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/opengl \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/x11 \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/x11 \ $(JDK_TOPDIR)/src/share/native/sun/font \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/windows \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/windows \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/java2d/d3d + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/windows \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/windows \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/d3d -LIBAWT_CFLAGS := -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES \ +LIBAWT_CFLAGS:=-D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES \ + $(X_CFLAGS) \ $(foreach dir,$(LIBAWT_DIRS),-I$(dir)) -LIBAWT_FILES := \ +LIBAWT_FILES:=\ gifdecoder.c \ imageInitIDs.c \ img_globals.c \ @@ -2196,40 +524,89 @@ LIBAWT_FILES := \ debug_trace.c \ debug_util.c -ifneq (,$(filter $(PLATFORM), solaris linux)) +ifneq (,$(filter $(OPENJDK_TARGET_OS), solaris linux macosx)) LIBAWT_FILES += awt_LoadLibrary.c initIDs.c img_colors.c endif -ifeq ($(PLATFORM),macosx) +ifeq ($(OPENJDK_TARGET_OS),macosx) LIBAWT_DIRS += $(JDK_TOPDIR)/src/macosx/native/com/apple/resources LIBAWT_FILES += awt_LoadLibrary.c MacOSXResourceBundle.m LIBAWT_CFLAGS += -F/System/Library/Frameworks/JavaVM.framework/Frameworks - LIBAWT_MacOSXResourceBundle.m_CFLAGS := -O0 + LIBAWT_MacOSXResourceBundle.m_CFLAGS:=-O0 endif -ifeq ($(PLATFORM)-$(ARCH_FAMILY), solaris-sparc) -# -# TODO... -# +ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc) + LIBAWT_CFLAGS += -DMLIB_ADD_SUFF + LIBAWT_CFLAGS += -xarch=sparcvis + LIBAWT_CFLAGS += $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib/vis_$(ARCH_DATA_MODEL).il + LIBAWT_CFLAGS += \ + -I$(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib \ + -I$(JDK_TOPDIR)/src/solaris/native/sun/java2d/medialib \ + -I$(JDK_TOPDIR)/src/solaris/native/sun/java2d/loops -# FILES_c += $(FILES_2D_vis) -# ASFLAGS += -P -# FILES_s += mlib_v_ImageCopy_blk.s -# INLINE_VIS = $(PLATFORM_SRC)/native/sun/awt/medialib/vis_$(ARCH_DATA_MODEL).il -# CFLAGS_sparcv9 = -DMLIB_OS64BIT -# CFLAGS += $(CFLAGS_$(ARCH)) -DMLIB_ADD_SUFF $(INLINE_VIS) + LIBAWT_DIRS += $(JDK_TOPDIR)/src/solaris/native/sun/awt/medialib \ + $(JDK_TOPDIR)/src/solaris/native/sun/java2d/loops + + LIBAWT_FILES += \ + vis_FuncArray.c \ + java2d_Mlib.c \ + mlib_ImageCreate.c \ + mlib_ImageZoom_NN.c \ + mlib_ImageCopy_Bit.c \ + mlib_sys.c \ + mlib_v_ImageClear.c \ + mlib_v_ImageClear_f.c \ + mlib_v_ImageConstXor.c \ + mlib_v_ImageCopy.c \ + mlib_v_ImageCopy_f.c \ + mlib_v_ImageXor.c \ + mlib_v_ImageZoom_NN_f.c \ + vis_Interp.c \ + vis_AlphaMacros.c \ + vis_AlphaMaskBlit.c \ + vis_AlphaMaskFill.c \ + vis_ByteGray.c \ + vis_ByteGray_FromRgb.c \ + vis_ByteGray_Mask.c \ + vis_ByteIndexed.c \ + vis_DrawLine.c \ + vis_FourByteAbgr.c \ + vis_IntArgb.c \ + vis_IntArgbPre.c \ + vis_IntArgbPre_Mask.c \ + vis_IntBgr.c \ + vis_IntRgb.c \ + vis_IntRgbx.c \ + vis_SrcMaskFill.c \ + vis_SrcOverMaskBlit.c \ + vis_SrcOverMaskFill.c \ + vis_FourByteAbgrPre.c \ + vis_GlyphList.c \ + vis_GlyphListXor.c \ + vis_IntArgbBm.c \ + vis_ThreeByteBgr.c \ + vis_UshortGray.c \ + vis_UshortGray_FromRgb.c \ + vis_XorBlit.c \ + mlib_v_ImageCopy_blk.s + + ifeq ($(OPENJDK_TARGET_CPU_BITS),64) + LIBAWT_ASFLAGS=-P -xarch=v9a + else + LIBAWT_ASFLAGS=-P -xarch=v8plusa + endif else LIBAWT_FILES += MapAccelFunc.c endif -ifneq ($(PLATFORM),solaris) +ifneq ($(OPENJDK_TARGET_OS),solaris) LIBAWT_CFLAGS += -DMLIB_NO_LIBSUNMATH endif -LIBAWT_LANG := C +LIBAWT_LANG:=C -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) LIBAWT_FILES += AccelGlyphCache.c \ ShaderList.c \ CmdIDList.cpp \ @@ -2266,219 +643,2012 @@ ifeq ($(PLATFORM),windows) initIDs.cpp \ MouseInfo.cpp \ rect.c - LIBAWT_LANG := C++ + LIBAWT_LANG:=C++ LIBAWT_CFLAGS += $(GX_OPTION) -DUNICODE -D_UNICODE ifeq ($(ARCH_DATA_MODEL), 64) LIBAWT_CFLAGS += -DMLIB_OS64BIT endif ifdef OPENJDK - LIBAWT_RC_FLAGS := -i "$(JDK_TOPDIR)/src/windows/resource/icons" + LIBAWT_RC_FLAGS:=-i "$(JDK_TOPDIR)/src/windows/resource/icons" else - LIBAWT_RC_FLAGS := -i "$(JDK_TOPDIR)/src/closed/windows/native/sun/windows" + LIBAWT_RC_FLAGS:=-i "$(JDK_TOPDIR)/src/closed/windows/native/sun/windows" endif - LIBAWT_VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/native/sun/windows/awt.rc + LIBAWT_VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/native/sun/windows/awt.rc endif ifeq ($(MILESTONE), internal) LIBAWT_CFLAGS += -DINTERNAL_BUILD endif -LIBAWT_MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libawt/mapfile-vers -ifeq ($(PLATFORM),linux) - LIBAWT_MAPFILE := +LIBAWT_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt/mapfile-vers +ifeq ($(OPENJDK_TARGET_OS),linux) + LIBAWT_MAPFILE:= endif $(eval $(call SetupNativeCompilation,BUILD_LIBAWT,\ + LIBRARY:=awt,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBAWT_DIRS),\ - INCLUDE_FILES := $(LIBAWT_FILES),\ + INCLUDE_FILES:=$(LIBAWT_FILES),\ LANG:=$(LIBAWT_LANG),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) $(LIBAWT_CFLAGS),\ - MAPFILE := $(LIBAWT_MAPFILE), \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(LIBAWT_CFLAGS),\ + ASFLAGS:=$(LIBAWT_ASFLAGS),\ + MAPFILE:=$(LIBAWT_MAPFILE), \ LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN),\ LDFLAGS_windows:=advapi32.lib kernel32.lib user32.lib gdi32.lib winspool.lib \ imm32.lib ole32.lib uuid.lib shell32.lib \ comdlg32.lib winmm.lib comctl32.lib \ - shlwapi.lib delayimp.lib java.lib jvm.lib \ + shlwapi.lib delayimp.lib $(WIN_JAVA_LIB) jvm.lib \ /DELAYLOAD:user32.dll /DELAYLOAD:gdi32.dll \ /DELAYLOAD:shell32.dll /DELAYLOAD:winmm.dll \ /DELAYLOAD:winspool.drv /DELAYLOAD:imm32.dll \ /DELAYLOAD:ole32.dll /DELAYLOAD:comdlg32.dll \ /DELAYLOAD:comctl32.dll /DELAYLOAD:shlwapi.dll,\ - LDFLAGS_macosx :=-framework Cocoa \ + LDFLAGS_macosx:=-lmlib_image \ + -framework Cocoa \ -framework OpenGL \ -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ -framework JavaNativeFoundation \ -framework JavaRuntimeSupport \ -framework ApplicationServices \ -framework AudioToolbox,\ - LDFLAGS_solaris := -R/usr/dt/lib$(ISA_DIR) -R$(OPENWIN_LIB)$(ISA_DIR),\ - LDFLAGS_SUFFIX_posix := -ljvm $(LIBM) -ljava $(LIBDL),\ - VERSIONINFO_RESOURCE := $(LIBAWT_VERSIONINFO_RESOURCE),\ - RC_FLAGS := $(RC_FLAGS) $(LIBAWT_RC_FLAGS) \ + LDFLAGS_solaris:=-R/usr/dt/lib$(ISA_DIR) -R$(OPENWIN_LIB)$(ISA_DIR),\ + LDFLAGS_SUFFIX_posix:=-ljvm $(LIBM) -ljava $(LIBDL),\ + VERSIONINFO_RESOURCE:=$(LIBAWT_VERSIONINFO_RESOURCE),\ + RC_FLAGS:=$(RC_FLAGS) $(LIBAWT_RC_FLAGS) \ /D "JDK_FNAME=awt.dll" \ /D "JDK_INTERNAL_NAME=awt" \ /D "JDK_FTYPE=0x2L",\ - BIN:=$(JDK_OUTPUTDIR)/objs/libawt,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBAWT) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) +ifeq ($(OPENJDK_TARGET_OS), macosx) +$(BUILD_LIBAWT) : $(BUILD_LIBMLIB_IMAGE) +endif + +BUILD_LIBRARIES += $(BUILD_LIBAWT) + +########################################################################################## + +# TODO!! +# Even though this variable as a general name, it is +# only used on macos, in fontpath.c, as prefix for where to find fonts. +# +# It's used for libawt_headless _and_ libawt_xawt +# +X11_PATH:=/usr/X11R6 + +ifneq ($(OPENJDK_TARGET_OS), windows) +ifndef BUILD_HEADLESS_ONLY + +LIBAWT_XAWT_DIRS:=\ + $(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + $(JDK_TOPDIR)/src/share/native/sun/awt/utility \ + $(JDK_TOPDIR)/src/share/native/sun/font \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/font \ + $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/x11 \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/xawt \ + +LIBAWT_XAWT_CFLAGS:=-DXAWT -DXAWT_HACK \ + -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \ + $(CUPS_CFLAGS) \ + $(foreach dir,$(LIBAWT_XAWT_DIRS),-I$(dir)) \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/jdga + +ifeq ($(OPENJDK_TARGET_OS),solaris) + LIBAWT_XAWT_CFLAGS += -DFUNCPROTO=15 +endif + +ifeq ($(MILESTONE),internal) + LIBAWT_XAWT_CFLAGS += -DINTERNAL_BUILD +endif + +LIBAWT_XAWT_FILES:=\ + XlibWrapper.c \ + XWindow.c \ + XToolkit.c \ + X11Color.c \ + X11SurfaceData.c \ + awt_GraphicsEnv.c \ + awt_InputMethod.c \ + robot_common.c \ + awt_Robot.c \ + list.c \ + multiVis.c \ + initIDs.c \ + awt_util.c \ + awt_Desktop.c \ + awt_UNIXToolkit.c \ + X11FontScaler_md.c \ + X11TextRenderer_md.c \ + fontpath.c \ + awt_Insets.c \ + awt_Event.c \ + X11Renderer.c \ + X11PMBlitLoops.c \ + OGLBlitLoops.c \ + OGLBufImgOps.c \ + OGLContext.c \ + OGLFuncs.c \ + OGLMaskBlit.c \ + OGLMaskFill.c \ + OGLPaints.c \ + OGLRenderQueue.c \ + OGLRenderer.c \ + OGLSurfaceData.c \ + OGLTextRenderer.c \ + OGLVertexCache.c \ + GLXGraphicsConfig.c \ + GLXSurfaceData.c \ + AccelGlyphCache.c \ + awt_Font.c \ + multi_font.c \ + awt_AWTEvent.c \ + awt_DrawingSurface.c \ + jawt.c \ + CUPSfuncs.c \ + debug_assert.c \ + debug_mem.c \ + debug_trace.c \ + debug_util.c \ + awt_Plugin.c \ + gtk2_interface.c \ + swing_GTKEngine.c \ + swing_GTKStyle.c \ + rect.c \ + sun_awt_X11_GtkFileDialogPeer.c \ + XRSurfaceData.c \ + XRBackendNative.c + +LIBAWT_XAWT_LDFLAGS_SUFFIX:=$(LIBM) -lawt -lXext -lX11 -lXrender $(LIBDL) -lXtst -lXi -ljava -ljvm -lc + +ifeq ($(OPENJDK_TARGET_OS), linux) + LIBAWT_XAWT_LDFLAGS_SUFFIX += -lpthread +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + LIBAWT_XAWT_LDFLAGS_SUFFIX += -lpthread +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_XAWT,\ + LIBRARY:=awt_xawt,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBAWT_XAWT_DIRS),\ + INCLUDE_FILES:=$(LIBAWT_XAWT_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(LIBAWT_XAWT_CFLAGS) \ + $(X_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt_xawt/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN) \ + $(X_LIBS),\ + LDFLAGS_solaris:=-L$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -L$(OPENWIN_HOME)/lib$(ISA_DIR) \ + -R$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -R$(OPENWIN_HOME)/lib$(ISA_DIR) \ + -R/usr/dt/lib$(ISA_DIR),\ + LDFLAGS_SUFFIX:=$(LIBAWT_XAWT_LDFLAGS_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_xawt)) + +$(BUILD_LIBAWT_XAWT) : $(BUILD_LIBJAVA) + +$(BUILD_LIBAWT_XAWT) : $(BUILD_LIBAWT) + +BUILD_LIBRARIES += $(BUILD_LIBAWT_XAWT) + +endif +endif + +########################################################################################## + +BUILD_LIBZIP_FILES:=\ + CRC32.c \ + Adler32.c \ + Deflater.c \ + Inflater.c \ + ZipFile.c \ + zip_util.c + +ifeq ($(USE_EXTERNAL_LIBZ),true) + LIBZ:=-lz +else +BUILD_LIBZIP_FILES += \ + compress.c \ + deflate.c \ + gzclose.c \ + gzlib.c \ + gzread.c \ + gzwrite.c \ + infback.c \ + inffast.c \ + inflate.c \ + inftrees.c \ + trees.c \ + uncompr.c \ + zadler32.c \ + zcrc32.c \ + zutil.c +LIBZ_INCLUDE:=-I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 +endif + +BUILD_LIBZIP_REORDER:= +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifneq ($(ARCH), amd64) + BUILD_LIBZIP_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libzip/reorder-$(ARCH) + endif +endif + +ifeq ($(LIBZIP_CAN_USE_MMAP), true) + BUILD_LIBZIP_MMAP:=-DUSE_MMAP +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBZIP,\ + LIBRARY:=zip,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/java/util/zip \ + $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5,\ + INCLUDE_FILES:=$(BUILD_LIBZIP_FILES), \ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(LIBZ_INCLUDE) \ + -I$(JDK_TOPDIR)/src/share/native/java/io \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/io,\ + CFLAGS_posix:=$(BUILD_LIBZIP_MMAP) -UDEBUG,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libzip/mapfile-vers, \ + REORDER:=$(BUILD_LIBZIP_REORDER), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(EXPORT_ZIP_FUNCS), \ + LDFLAGS_winapi:=-export:ZIP_Open -export:ZIP_Close -export:ZIP_FindEntry \ + -export:ZIP_ReadEntry -export:ZIP_GetNextEntry jvm.lib \ + $(WIN_JAVA_LIB),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBZ),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libzip)) + +$(BUILD_LIBZIP) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBZIP) + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBUNPACK,\ + LIBRARY:=unpack, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack,\ + EXCLUDE_FILES:=main.cpp,\ + LANG:=C++,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CXXFLAGS_JDKLIB) \ + -DNO_ZLIB -DUNPACK_JNI -DFULL,\ + CFLAGS_release:=-DPRODUCT,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libunpack/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_winapi:=-map:$(JDK_OUTPUTDIR)/objs/unpack.map /debug \ + jvm.lib $(WIN_JAVA_LIB),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_posix:=$(LIBCXX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libunpack,\ + VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\ + RC_FLAGS:=$(RC_FLAGS)\ + /D "JDK_FNAME=unpack.dll" \ + /D "JDK_INTERNAL_NAME=unpack" \ + /D "JDK_FTYPE=0x2L")) + +$(BUILD_LIBUNPACK) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBUNPACK) + +ifeq ($(OPENJDK_TARGET_OS_API),winapi) + $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.map: $(BUILD_LIBUNPACK) + $(ECHO) Copying $(@F) + $(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX),%.map,$<) $@ + + $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)unpack.pdb: $(BUILD_LIBUNPACK) + $(ECHO) Copying $(@F) + $(CP) $(patsubst %$(SHARED_LIBRARY_SUFFIX),%.pdb,$<) $@ +endif + +########################################################################################## + +LIBATTACH_EXCLUDE_FILES:= +ifneq ($(OPENJDK_TARGET_OS),solaris) + LIBATTACH_EXCLUDE_FILES+=SolarisVirtualMachine.c +endif +ifneq ($(OPENJDK_TARGET_OS),linux) + LIBATTACH_EXCLUDE_FILES+=LinuxVirtualMachine.c +endif +ifneq ($(OPENJDK_TARGET_OS),macosx) + LIBATTACH_EXCLUDE_FILES+=BsdVirtualMachine.c +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBATTACH,\ + LIBRARY:=attach, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/tools/attach,\ + EXCLUDE_FILES:=$(LIBATTACH_EXCLUDE_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libattach/mapfile-$(OPENJDK_TARGET_OS), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_solaris:=-ldoor,\ + LDFLAGS_winapi:=psapi.lib advapi32.lib $(WIN_JAVA_LIB) jvm.lib,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libattach,\ + DEBUG_SYMBOLS:=true)) + +$(BUILD_LIBATTACH) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBATTACH) + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBDT_SOCKET,\ + LIBRARY:=dt_socket,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/transport/socket \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/transport/socket,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP \ + -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(OPENJDK_TARGET_OS) \ + -I$(JDK_TOPDIR)/src/share/transport/socket \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/transport/socket \ + -I$(JDK_TOPDIR)/src/share/back/export \ + -I$(JDK_TOPDIR)/src/share/back,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libdt_socket/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB), \ + LDFLAGS_SUFFIX_linux:=$(LDFLAGS_JDKLIB_SUFFIX) -lpthread,\ + LDFLAGS_SUFFIX_solaris:=-lnsl -lsocket,\ + LDFLAGS_SUFFIX_winapi:=$(LDFLAGS_JDKLIB_SUFFIX) -export:jdwpTransport_OnLoad ws2_32.lib,\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdt_socket,\ + DEBUG_SYMBOLS:=true)) + +$(BUILD_LIBDT_SOCKET) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBDT_SOCKET) + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS_API),winapi) + + $(eval $(call SetupNativeCompilation,BUILD_LIBDT_SHMEM,\ + LIBRARY:=dt_shmem,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/tools/jdi \ + $(JDK_TOPDIR)/src/share/transport/shmem \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/transport/shmem,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) -DUSE_MMAP\ + -I$(INCLUDEDIR) -I$(JDK_OUTPUTDIR)/include/$(OPENJDK_TARGET_OS) \ + -I$(JDK_TOPDIR)/src/share/transport/shmem \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/transport/shmem \ + -I$(JDK_TOPDIR)/src/share/back/export, \ + LDFLAGS:=$(LDFLAGS_JDKLIB),\ + LDFLAGS_winapi:=-export:jdwpTransport_OnLoad,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdt_shmem)) + + BUILD_LIBRARIES += $(BUILD_LIBDT_SHMEM) + +endif # OPENJDK_TARGET_OS + +########################################################################################## +# JDWP_LOGGING causes log messages to be compiled into the library. These reference the +# __FILE__ macro which here expands to the absolute path of the file while the old build +# system used a relative path. This causes the binaries to differ in size. +$(eval $(call SetupNativeCompilation,BUILD_LIBJDWP,\ + LIBRARY:=jdwp, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/back $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/back,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) -DJDWP_LOGGING\ + -I$(JDK_TOPDIR)/src/share/transport/export \ + -I$(JDK_TOPDIR)/src/share/back/export \ + -I$(JDK_TOPDIR)/src/share/npt \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt \ + -I$(JDK_TOPDIR)/src/share/back \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/back \ + -I$(JDK_OUTPUTDIR)/gensrc_jdwp_headers,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjdwp/mapfile-vers, \ + LDFLAGS:=$(filter-out -ljava,$(LDFLAGS_JDKLIB)), \ + LDFLAGS_SUFFIX_linux:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBDL),\ + LDFLAGS_SUFFIX_solaris:=$(LIBDL),\ + LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjdwp)) + +$(BUILD_LIBJDWP) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJDWP) + +########################################################################################## + +LIBJAAS_MAPFILE:= +ifneq ($(OPENJDK_TARGET_OS),solaris) + LIBJAAS_EXCLUDE_FILES:=Solaris.c +else + # only on solaris...wonder why + LIBJAAS_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjaas/mapfile-vers +endif + +LIBJAAS_NAME:=jaas_unix +ifeq ($(OPENJDK_TARGET_OS), windows) + LIBJAAS_NAME:=jaas_nt +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBJAAS,\ + LIBRARY:=$(LIBJAAS_NAME),\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/com/sun/security/auth/module,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB),\ + MAPFILE:=$(LIBJAAS_MAPFILE),\ + LDFLAGS:=$(filter-out -ljava,$(LDFLAGS_JDKLIB)) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_winapi:=netapi32.lib user32.lib mpr.lib advapi32.lib,\ + LDFLAGS_SUFFIX_linux:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX:=,\ + EXCLUDE_FILES:=$(LIBJAAS_EXCLUDE_FILES),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjaas)) + +$(BUILD_LIBJAAS) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJAAS) + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBJSDT,\ + LIBRARY:=jsdt,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/tracing/dtrace\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/tracing/dtrace,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB)\ + -I$(JDK_TOPDIR)/src/share/native/sun/tracing/dtrace,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjsdt/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBDL),\ + LDFLAGS_SUFFIX_winapi:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBDL),\ + LDFLAGS_SUFFIX_macosx:= $(LIBDL),\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsdt, \ + DEBUG_SYMBOLS:= yes)) + +$(BUILD_LIBJSDT) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJSDT) + +########################################################################################## + +ifdef OPENJDK + # TODO: Update awt lib path when awt is converted + $(eval $(call SetupNativeCompilation,BUILD_LIBLCMS,\ + LIBRARY:=lcms,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/java2d/cmm/lcms \ + $(JDK_TOPDIR)/src/share/native/sun/java2d/,\ + INCLUDE_FILES:=cmscam02.c cmscgats.c cmscnvrt.c cmserr.c \ + cmsgamma.c cmsgmt.c cmsintrp.c cmsio0.c \ + cmsio1.c cmslut.c cmsmd5.c cmsmtrx.c \ + cmsnamed.c cmsopt.c cmspack.c cmspcs.c \ + cmsplugin.c cmsps2.c cmssamp.c cmssm.c \ + cmstypes.c cmsvirt.c cmswtpnt.c cmsxform.c \ + LCMS.c,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(filter-out -xc99=%none,$(CFLAGS_JDKLIB)) \ + $(SHARED_LIBRARY_FLAGS) \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug,\ + CFLAGS_solaris:=-xc99=no_lib,\ + CFLAGS_winapi:=-DCMS_IS_WINDOWS_,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/liblcms/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB), \ + LDFLAGS_solaris:=/usr/lib$(ISA_DIR)/libm.so.2,\ + LDFLAGS_winapi:=$(WIN_AWT_LIB) $(WIN_JAVA_LIB),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_posix:=-lawt,\ + LDFLAGS_SUFFIX_linux:=-lm,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/liblcms)) + + BUILD_LIBRARIES += $(BUILD_LIBLCMS) + + $(BUILD_LIBLCMS) : $(BUILD_LIBAWT) +endif + +########################################################################################## + +ifdef OPENJDK + BUILD_LIBJPEG_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/mapfile-vers +else + BUILD_LIBJPEG_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/mapfile-vers-closed + BUILD_LIBJPEG_CLOSED_SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/awt/image/jpeg + BUILD_LIBJPEG_CLOSED_INCLUDES:=-I$(BUILD_LIBJPEG_CLOSED_SRC) +endif + +BUILD_LIBJPEG_REORDER:= +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifneq ($(ARCH), amd64) + BUILD_LIBJPEG_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libjpeg/reorder-$(ARCH) + endif +endif + +# Suppress gcc warnings like "variable might be clobbered by 'longjmp' +# or 'vfork'": this warning indicates that some variable is placed to +# a register by optimized compiler and it's value might be lost on longjmp(). +# Recommended way to avoid such warning is to declare the variable as +# volatile to prevent the optimization. However, this approach does not +# work because we have to declare all variables as volatile in result. +#ifndef CROSS_COMPILE_ARCH +# CC_43_OR_NEWER:=\ +# $(shell $(EXPR) $(CC_MAJORVER) \> 4 \| \ +# \( $(CC_MAJORVER) = 4 \& $(CC_MINORVER) \>= 3 \) ) +# ifeq ($(CC_43_OR_NEWER),1) +# BUILD_LIBJPEG_CFLAGS_linux += -Wno-clobbered +# endif +#endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBJPEG,\ + LIBRARY:=jpeg, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBJPEG_CLOSED_SRC) \ + $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg,\ + LANG:=C,\ + OPTIMIZATION:=HIGHEST, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(BUILD_LIBJPEG_CLOSED_INCLUDES) \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg,\ + MAPFILE:=$(BUILD_LIBJPEG_MAPFILE), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_linux:=$(LIBDL),\ + LDFLAGS_winapi:=$(WIN_JAVA_LIB) jvm.lib,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + REORDER:=$(BUILD_LIBJPEG_REORDER),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjpeg)) + +$(BUILD_LIBJPEG) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJPEG) + +########################################################################################## + +ifndef OPENJDK + FONT_HEADERS:=-I$(CLOSED_SRC)/share/native/$(PKGDIR)/t2k + BUILD_LIBFONTMANAGER_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libfontmanager/mapfile-vers + LIBFONTMANAGER_EXCLUDE_FILES += freetypeScaler.c +else + FONT_HEADERS:=$(FREETYPE2_CFLAGS) + BUILD_LIBFONTMANAGER_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libfontmanager/mapfile-vers.openjdk + BUILD_LIBFONTMANAGER_FONTLIB:=$(FREETYPE2_LIBS) +endif + +LIBFONTMANAGER_OPTIMIZATION:=HIGH + +ifeq ($(OPENJDK_TARGET_OS),windows) + LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \ + X11TextRenderer.c + LIBFONTMANAGER_OPTIMIZATION:=LOW +else + LIBFONTMANAGER_EXCLUDE_FILES += fontpath.c \ + lcdglyph.c +endif + +BUILD_LIBFONTMANAGER_CFLAGS_COMMON:=\ + $(X_CFLAGS) \ + -DLE_STANDALONE -DHEADLESS \ + $(FONT_HEADERS) \ + -I$(JDK_TOPDIR)/src/share/native/sun/font \ + -I$(JDK_TOPDIR)/src/share/native/sun/font/layout \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d + +# Turn off aliasing with GCC for ExtensionSubtables.cpp +ifeq ($(OPENJDK_TARGET_OS), linux) + BUILD_LIBFONTMANAGER_ExtensionSubtables.cpp_CXXFLAGS:=-fno-strict-aliasing +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER,\ + LIBRARY:=fontmanager, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/native/sun/font\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/font,\ + EXCLUDE_FILES:=$(LIBFONTMANAGER_EXCLUDE_FILES) \ + AccelGlyphCache.c,\ + LANG:=C++,\ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBFONTMANAGER_CFLAGS_COMMON),\ + CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBFONTMANAGER_CFLAGS_COMMON),\ + OPTIMIZATION:=$(LIBFONTMANAGER_OPTIMIZATION), \ + CFLAGS_windows= -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/windows \ + -DCC_NOEX, \ + MAPFILE:=$(BUILD_LIBFONTMANAGER_MAPFILE), \ + LDFLAGS:=$(subst -Xlinker -z -Xlinker defs,,$(LDFLAGS_JDKLIB)) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_windows:=advapi32.lib user32.lib gdi32.lib $(WIN_AWT_LIB) $(WIN_JAVA_LIB),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) \ + $(BUILD_LIBFONTMANAGER_FONTLIB),\ + LDFLAGS_SUFFIX_linux:=-lawt $(LIBM) $(LIBCXX),\ + LDFLAGS_SUFFIX_solaris:=-lawt -lawt_xawt -lc $(LIBM) $(LIBCXX),\ + LDFLAGS_SUFFIX_macosx:=-lawt $(LIBM) $(LIBCXX) -undefined dynamic_lookup,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfontmanager)) + +$(BUILD_LIBFONTMANAGER) : $(BUILD_LIBAWT) + +ifneq (,$(findstring $(OPENJDK_TARGET_OS),solaris macosx)) +$(BUILD_LIBFONTMANAGER) : $(BUILD_LIBAWT_XAWT) +endif + +BUILD_LIBRARIES += $(BUILD_LIBFONTMANAGER) ########################################################################################## ifndef OPENJDK -LIBDCPR_SRC_DIRS := \ +# ifeq ($(OPENJDK_TARGET_OS), linux) +# ifeq ("$(CC_VER_MAJOR)", "3") +# OTHER_LDLIBS += -Wl,-Bstatic -lgcc_eh -Wl,-Bdynamic +# endif +# endif +# +# The resulting size of the t2k lib file is (at least on linux) dependant on the order of +# the input .o files. Because of this the new build will differ in size to the old build. + BUILD_LIBT2K_CFLAGS_COMMON:=-I$(JDK_TOPDIR)/src/share/native/sun/font \ + -I$(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k \ + -I$(JDK_TOPDIR)/src/closed/share/native/sun/font \ + -I$(JDK_TOPDIR)/src/share/share/native/sun/font \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/font \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d + + $(eval $(call SetupNativeCompilation,BUILD_LIBT2K,\ + LIBRARY:=t2k, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/font \ + $(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k \ + $(JDK_TOPDIR)/src/closed/share/native/sun/font/t2k/ttHints,\ + EXCLUDE_FILES:=orion.c,\ + LANG:=C++,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON),\ + CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(BUILD_LIBT2K_CFLAGS_COMMON),\ + CFLAGS_windows=-DCC_NOEX, \ + CXXFLAGS_windows=-DCC_NOEX, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libt2k/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_windows:=user32.lib $(JDK_OUTPUTDIR)/objs/libfontmanager/fontmanager.lib,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + LDFLAGS_SUFFIX_macosx:=$(LIBCXX) $(LIBM) -lfontmanager,\ + LDFLAGS_SUFFIX_linux:=$(LIBCXX) $(LIBM) -lfontmanager,\ + LDFLAGS_SUFFIX_solaris:=$(LIBCXX) $(LIBM) -lfontmanager -lawt \ + -lawt_xawt,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libt2k)) + + # t2k is linked against fontmanager + $(BUILD_LIBT2K) : $(BUILD_LIBFONTMANAGER) + + BUILD_LIBRARIES += $(BUILD_LIBT2K) +endif + +########################################################################################## + +# +# TODO replace with X_FLAGS / X_LIBS +# and add them to configure +# +OPENWIN_LIB:=$(OPENWIN_HOME)/lib + +ifeq ($(OPENJDK_TARGET_OS), windows) + ifeq ($(ARCH_DATA_MODEL), 32) + KERNEL32_LIB:=kernel32.lib + endif + $(eval $(call SetupNativeCompilation,BUILD_LIBJAWT,\ + LIBRARY:=jawt, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/windows,\ + INCLUDE_FILES:=jawt.cpp,\ + LANG:=C++,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CXXFLAGS_JDKLIB) \ + -EHsc -DUNICODE -D_UNICODE \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/windows \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d/windows, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(KERNEL32_LIB) \ + advapi32.lib $(WIN_AWT_LIB),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjawt)) + +$(BUILD_LIBJAWT) : $(BUILD_LIBAWT) + +$(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX): $(BUILD_LIBJAWT) + $(ECHO) Copying $(@F) + $(CP) $< $@ + +BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/lib/$(LIBRARY_PREFIX)jawt$(STATIC_LIBRARY_SUFFIX) + +else # OPENJDK_TARGET_OS not windows + + JAWT_LIBS:= + ifneq ($(OPENJDK_TARGET_OS), solaris) + JAWT_LIBS += -lawt + endif + + ifndef BUILD_HEADLESS_ONLY + JAWT_LIBS += -lawt_xawt + else + JAWT_LIBS += -lawt_headless + HEADLESS_CFLAG += -DHEADLESS + endif + + JAWT_FILES:=jawt.c + ifeq ($(OPENJDK_TARGET_OS), macosx) + JAWT_FILES:=jawt.m + JAWT_LIBS:=-lawt_lwawt + endif + + $(eval $(call SetupNativeCompilation,BUILD_LIBJAWT,\ + LIBRARY:=jawt, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt \ + $(JDK_TOPDIR)/src/macosx/native/sun/awt,\ + INCLUDE_FILES:=$(JAWT_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB), \ + CFLAGS_linux:=$(HEADLESS_CFLAG),\ + CFLAGS_macosx:=-I$(JDK_TOPDIR)/src/solaris/native/sun/awt ,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjawt/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_solaris:=-L$(OPENWIN_HOME)/sfw/lib$(ISA_DIR) -L$(OPENWIN_LIB)$(ISA_DIR),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(JAWT_LIBS),\ + LDFLAGS_SUFFIX_solaris:=-lXrender,\ + LDFLAGS_SUFFIX_macosx:=-framework Cocoa, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjawt)) + +ifndef BUILD_HEADLESS_ONLY +$(BUILD_LIBJAWT) : $(BUILD_LIBAWT_XAWT) +else +$(BUILD_LIBJAWT) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_headless$(SHARED_LIBRARY_SUFFIX) +endif + +ifeq ($(OPENJDK_TARGET_OS),macosx) +$(BUILD_LIBJAWT) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) +endif + +endif # OPENJDK_TARGET_OS + +BUILD_LIBRARIES += $(BUILD_LIBJAWT) + +########################################################################################## + +ifndef OPENJDK +ifneq ($(OPENJDK_TARGET_OS), macosx) + +LIBJDBCODBC_DIR :=$(JDK_OUTPUTDIR)/objs/libjdbcodbc +LIBJDBCODBC_NAME :=$(LIBRARY_PREFIX)JdbcOdbc$(SHARED_LIBRARY_SUFFIX) +LIBJDBCODBC_CFLAGS:= +LIBJDBCODBC_LIBS := +LIBJDBCODBC_LDFLAGS:= + +ifeq ($(OPENJDK_TARGET_OS), windows) + LIBJDBCODBC_LDFLAGS:=$(LDFLAGS_JDKLIB) + LIBJDBCODBC_LIBS += odbc32.lib odbccp32.lib $(WIN_JAVA_LIB) advapi32.lib +else + LIBJDBCODBC_CFLAGS:=-DUNIX + +# +# This mimics "current" build system exactly. Link against fake -lodbcinst -lodbc +# but...those are linked with the -soname, causing the dependency to be dropped on linux (gnu ld) +# but kept with other linker (solaris) +# +# IMO very weird behaviour...very weird +# + LIBJDBCODBC_LDFLAGS:=$(patsubst defs,nodefs,$(LDFLAGS_JDKLIB)) \ + -Xlinker -z -Xlinker nodefs + LIBJDBCODBC_LIBS += -L$(LIBJDBCODBC_DIR) -lodbcinst -lodbc + LIBJDBCODBC_SONAME:=$(call SET_SHARED_LIBRARY_NAME,$(LIBJDBCODBC_NAME)) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBJDBCODBC,\ + LIBRARY:=JdbcOdbc,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/closed/share/classes/sun/jdbc/odbc,\ + EXCLUDE_FILES:=dummyodbc.c,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(LIBJDBCODBC_CFLAGS) $(CFLAGS_JDKLIB) \ + $(SHARED_LIBRARY_FLAGS),\ + LDFLAGS:=$(LIBJDBCODBC_LDFLAGS) \ + $(call SET_SHARED_LIBRARY_ORIGIN) $(LIBJDBCODBC_LIBS),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBJDBCODBC_SONAME),\ + OBJECT_DIR:=$(LIBJDBCODBC_DIR))) + +$(BUILD_LIBJDBCODBC) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBJDBCODBC) + +ifneq ($(OPENJDK_TARGET_OS), windows) + +$(eval $(call SetupNativeCompilation,BUILD_FAKEODBCINST,\ + LIBRARY:=odbcinst,\ + OUTPUT_DIR:=$(LIBJDBCODBC_DIR),\ + SRC:=$(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc,\ + INCLUDE_FILES:=dummyodbc1.c,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB),\ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN) $(LIBJDBCODBC_LDFLAGS),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBJDBCODBC_SONAME),\ + OBJECT_DIR:=$(LIBJDBCODBC_DIR))) + +$(eval $(call SetupNativeCompilation,BUILD_FAKEODBC,\ + LIBRARY:=odbc,\ + OUTPUT_DIR:=$(LIBJDBCODBC_DIR),\ + SRC:=$(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc,\ + INCLUDE_FILES:=dummyodbc2.c,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(LIBJDBCODBC_CFLAGS) $(CFLAGS_JDKLIB),\ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN) $(LIBJDBCODBC_LDFLAGS),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBJDBCODBC_SONAME),\ + OBJECT_DIR:=$(LIBJDBCODBC_DIR))) + +$(BUILD_FAKEODBCINST) $(BUILD_FAKEODBC) : \ + $(BUILD_LIBJAVA) + +$(BUILD_LIBJDBCODBC) : $(BUILD_FAKEODBCINST) $(BUILD_FAKEODBC) + +endif + +endif +endif + +########################################################################################## + +BUILD_LIBINSTRUMENT_SRC :=$(JDK_TOPDIR)/src/share/instrument \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/io \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/instrument + +BUILD_LIBINSTRUMENT_FILES :=\ + EncodingSupport.c \ + EncodingSupport_md.c \ + FileSystemSupport_md.c \ + InstrumentationImplNativeMethods.c \ + InvocationAdapter.c \ + JarFacade.c \ + JPLISAgent.c \ + JPLISAssert.c \ + JavaExceptions.c \ + PathCharsValidator.c \ + Reentrancy.c \ + Utilities.c \ + canonicalize_md.c + +BUILD_LIBINSTRUMENT_DIR :=$(JDK_OUTPUTDIR)/objs/libinstrument +BUILD_LIBINSTRUMENT_CFLAGS:=-I$(JDK_TOPDIR)/src/share/instrument \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/instrument \ + -I$(JDK_TOPDIR)/src/share/bin + +BUILD_LIBINSTRUMENT_LDFLAGS:= +BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX:= + +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBINSTRUMENT_LDFLAGS += $(JDK_OUTPUTDIR)/objs/jli_static.lib $(WIN_JAVA_LIB) \ + -export:Agent_OnAttach + # equivalent of strcasecmp is stricmp on Windows + BUILD_LIBINSTRUMENT_CFLAGS += -Dstrcasecmp=stricmp +else ifneq (,$(findstring $(OPENJDK_TARGET_OS), macosx)) + ifneq ($(ARCH), universal) + BUILD_LIBINSTRUMENT_LDFLAGS += -Wl,-all_load + endif + + BUILD_LIBINSTRUMENT_LDFLAGS += $(JDK_OUTPUTDIR)/objs/libjli_static.a + BUILD_LIBINSTRUMENT_LDFLAGS += -liconv + BUILD_LIBINSTRUMENT_LDFLAGS += -framework Cocoa -framework Security -framework ApplicationServices + BUILD_LIBINSTRUMENT_LDFLAGS += $(LIBZ) +else + BUILD_LIBINSTRUMENT_LDFLAGS += -L $(INSTALL_LIBRARIES_HERE)/jli + BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX += -ljli $(LIBDL) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBINSTRUMENT,\ + LIBRARY:=instrument, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBINSTRUMENT_SRC),\ + INCLUDE_FILES:=$(BUILD_LIBINSTRUMENT_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(BUILD_LIBINSTRUMENT_CFLAGS),\ + CFLAGS_debug:=-DJPLIS_LOGGING,\ + CFLAGS_release:=-DNO_JPLIS_LOGGING,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libinstrument/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN)\ + $(call SET_SHARED_LIBRARY_ORIGIN,jli) \ + $(BUILD_LIBINSTRUMENT_LDFLAGS),\ + LDFLAGS_SUFFIX:=$(LIBZ) $(BUILD_LIBINSTRUMENT_LDFLAGS_SUFFIX),\ + OBJECT_DIR:=$(BUILD_LIBINSTRUMENT_DIR),\ + DEBUG_SYMBOLS:=true)) + +ifneq (,$(findstring $(OPENJDK_TARGET_OS), macosx windows)) +$(BUILD_LIBINSTRUMENT) : $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jli_static$(STATIC_LIBRARY_SUFFIX) +else +$(BUILD_LIBINSTRUMENT) : $(INSTALL_LIBRARIES_HERE)/jli/$(LIBRARY_PREFIX)jli$(SHARED_LIBRARY_SUFFIX) +endif +$(BUILD_LIBINSTRUMENT) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBINSTRUMENT) + +########################################################################################## + +BUILD_LIBMANAGEMENT_SRC:=$(JDK_TOPDIR)/src/share/native/sun/management \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/management \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/com/sun/management + +BUILD_LIBMANAGEMENT_EXCLUDES:= + +BUILD_LIBMANAGEMENT_CFLAGS:=-I$(JDK_TOPDIR)/src/share/native/sun/management + +ifneq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBMANAGEMENT_EXCLUDES += OperatingSystem_md.c +else + BUILD_LIBMANAGEMENT_EXCLUDES += UnixOperatingSystem_md.c +endif + +ifneq ($(OPENJDK_TARGET_OS),solaris) + BUILD_LIBMANAGEMENT_EXCLUDES += SolarisOperatingSystem.c +endif + +ifneq ($(OPENJDK_TARGET_OS),linux) + BUILD_LIBMANAGEMENT_EXCLUDES += LinuxOperatingSystem.c +endif + +ifneq ($(OPENJDK_TARGET_OS),macosx) + BUILD_LIBMANAGEMENT_EXCLUDES += MacosxOperatingSystem.c +endif + + +$(eval $(call SetupNativeCompilation,BUILD_LIBMANAGEMENT,\ + LIBRARY:=management,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBMANAGEMENT_SRC),\ + EXCLUDE_FILES:=$(BUILD_LIBMANAGEMENT_EXCLUDES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBMANAGEMENT_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libmanagement/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_windows:=$(WIN_JAVA_LIB) jvm.lib advapi32.lib psapi.lib,\ + LDFLAGS_solaris:=-lkstat,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmanagement,\ + DEBUG_SYMBOLS:=true)) + +$(BUILD_LIBMANAGEMENT) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBMANAGEMENT) + +########################################################################################## + +BUILD_LIBHPROF_SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/hprof $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/demo/jvmti/hprof +BUILD_LIBHPROF_CFLAGS:=-I$(JDK_TOPDIR)/src/share/demo/jvmti/hprof \ + -I$(JDK_TOPDIR)/src/share/npt \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt \ + -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo + +BUILD_LIBHPROF_LDFLAGS:= + +ifeq ($(OPENJDK_TARGET_OS),solaris) + BUILD_LIBHPROF_LDFLAGS += -lsocket -lnsl +endif + +ifneq ($(OPENJDK_TARGET_OS),windows) + BUILD_LIBHPROF_LDFLAGS += $(LIBDL) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBHPROF,\ + LIBRARY:=hprof, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBHPROF_SRC),\ + LANG:=C,\ + OPTIMIZATION:=HIGHEST, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(BUILD_LIBHPROF_CFLAGS),\ + CFLAGS_debug:=-DHPROF_LOGGING,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libhprof/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_windows:=wsock32.lib winmm.lib advapi32.lib,\ + LDFLAGS_SUFFIX:=$(BUILD_LIBHPROF_LDFLAGS),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libhprof_jvmti,\ + DEBUG_SYMBOLS:=true)) + +BUILD_LIBRARIES += $(BUILD_LIBHPROF) + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA_CRW_DEMO,\ + LIBRARY:=java_crw_demo, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/demo/jvmti/java_crw_demo,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjava_crw_demo/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjava_crw_demo,\ + DEBUG_SYMBOLS:=true)) + +BUILD_LIBRARIES += $(BUILD_LIBJAVA_CRW_DEMO) + +########################################################################################## + +$(eval $(call SetupNativeCompilation,BUILD_LIBNPT,\ + LIBRARY:=npt, \ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/share/npt $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/npt \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnpt/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_macosx:=-liconv,\ + LDFLAGS_SUFFIX_windows:=-export:nptInitialize -export:nptTerminate,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnpt,\ + DEBUG_SYMBOLS:=true)) + +BUILD_LIBRARIES += $(BUILD_LIBNPT) + +########################################################################################## + +LIBNET_SRC_DIRS:=$(JDK_TOPDIR)/src/share/native/java/net \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/net \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/net/dns \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/net/www/protocol/http/ntlm \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/net/sdp \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/net/spi + +LIBNET_CFLAGS:=$(foreach dir,$(LIBNET_SRC_DIRS),-I$(dir)) + +LIBNET_EXCLUDE_FILES:= +ifneq ($(OPENJDK_TARGET_OS),linux) + LIBNET_EXCLUDE_FILES += linux_close.c +endif + +ifneq ($(OPENJDK_TARGET_OS),macosx) + LIBNET_EXCLUDE_FILES += bsd_close.c +endif + +ifeq ($(OPENJDK_TARGET_OS),windows) + LIBNET_EXCLUDE_FILES += PlainSocketImpl.c PlainDatagramSocketImpl.c SdpSupport.c +else + LIBNET_EXCLUDE_FILES += TwoStacksPlainSocketImpl.c DualStackPlainSocketImpl.c \ + TwoStacksPlainDatagramSocketImpl.c DualStackPlainDatagramSocketImpl.c \ + NTLMAuthSequence.c NetworkInterface_winXP.c +endif + +LIBNET_LDFLAGS_SUFFIX:= + +$(eval $(call SetupNativeCompilation,BUILD_LIBNET,\ + LIBRARY:=net,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBNET_SRC_DIRS),\ + EXCLUDE_FILES:=$(LIBNET_EXCLUDE_FILES), \ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(LIBNET_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnet/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) $(LIBNET_LDFLAGS_SUFFIX),\ + LDFLAGS_SUFFIX_solaris:=-lnsl -lsocket $(LIBDL) ,\ + LDFLAGS_SUFFIX_linux:=$(LIBDL) -lpthread ,\ + LDFLAGS_SUFFIX_windows:=ws2_32.lib $(JVMLIB) secur32.lib iphlpapi.lib \ + delayimp.lib $(WIN_JAVA_LIB) jvm.lib advapi32.lib \ + /DELAYLOAD:secur32.dll /DELAYLOAD:iphlpapi.dll, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnet)) + +$(BUILD_LIBNET) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBNET) + +$(JDK_OUTPUTDIR)/lib/net.properties: $(JDK_TOPDIR)/src/share/lib/net.properties + $(ECHO) Copying $(@F) + $(MKDIR) -p $(@D) + $(CP) $< $@ + +COPY_FILES += $(JDK_OUTPUTDIR)/lib/net.properties + +ifeq ($(OPENJDK_TARGET_OS), solaris) +$(JDK_OUTPUTDIR)/lib/sdp/sdp.conf.template : $(JDK_TOPDIR)/src/${LEGACY_OPENJDK_TARGET_OS_API}/lib/sdp/sdp.conf.template + $(ECHO) Copying $(@F) + $(MKDIR) -p $(@D) + $(CP) $< $@ + +COPY_FILES += $(JDK_OUTPUTDIR)/lib/sdp/sdp.conf.template +endif + +########################################################################################## + +BUILD_LIBNIO_SRC:=\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/nio \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/ch \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/fs + +BUILD_LIBNIO_CFLAGS:=\ + -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \ + -I$(JDK_TOPDIR)/src/share/native/java/io \ + -I$(JDK_TOPDIR)/src/share/native/java/net \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/net + +BUILD_LIBNIO_FILES:=\ + DatagramChannelImpl.c \ + DatagramDispatcher.c \ + FileChannelImpl.c \ + FileDispatcherImpl.c \ + FileKey.c \ + IOUtil.c \ + MappedByteBuffer.c \ + Net.c \ + ServerSocketChannelImpl.c \ + SocketChannelImpl.c \ + SocketDispatcher.c + +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBNIO_FILES += \ + Iocp.c \ + RegistryFileTypeDetector.c \ + WindowsAsynchronousFileChannelImpl.c \ + WindowsAsynchronousServerSocketChannelImpl.c \ + WindowsAsynchronousSocketChannelImpl.c \ + WindowsNativeDispatcher.c \ + WindowsSelectorImpl.c +endif + +ifeq ($(OPENJDK_TARGET_OS), linux) + BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-linux + BUILD_LIBNIO_FILES += \ + EPoll.c \ + EPollArrayWrapper.c \ + EPollPort.c \ + InheritedChannel.c \ + NativeThread.c \ + PollArrayWrapper.c \ + UnixAsynchronousServerSocketChannelImpl.c \ + UnixAsynchronousSocketChannelImpl.c \ + GnomeFileTypeDetector.c \ + LinuxNativeDispatcher.c \ + LinuxWatchService.c \ + UnixCopyFile.c \ + UnixNativeDispatcher.c +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-bsd + BUILD_LIBNIO_SRC += $(JDK_TOPDIR)/src/macosx/native/sun/nio/ch + BUILD_LIBNIO_FILES += \ + InheritedChannel.c \ + NativeThread.c \ + PollArrayWrapper.c \ + UnixAsynchronousServerSocketChannelImpl.c \ + UnixAsynchronousSocketChannelImpl.c \ + GnomeFileTypeDetector.c \ + BsdNativeDispatcher.c \ + UnixCopyFile.c \ + UnixNativeDispatcher.c \ + KQueue.c \ + KQueuePort.c \ + KQueueArrayWrapper.c +endif + +ifeq ($(OPENJDK_TARGET_OS), solaris) + BUILD_LIBNIO_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libnio/mapfile-solaris + BUILD_LIBNIO_FILES += \ + DevPollArrayWrapper.c \ + InheritedChannel.c \ + NativeThread.c \ + PollArrayWrapper.c \ + SolarisEventPort.c \ + UnixAsynchronousServerSocketChannelImpl.c \ + UnixAsynchronousSocketChannelImpl.c \ + GnomeFileTypeDetector.c \ + SolarisNativeDispatcher.c \ + SolarisWatchService.c \ + UnixCopyFile.c \ + UnixNativeDispatcher.c +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBNIO,\ + LIBRARY:=nio,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(BUILD_LIBNIO_SRC),\ + INCLUDE_FILES:=$(BUILD_LIBNIO_FILES), \ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + $(BUILD_LIBNIO_CFLAGS),\ + MAPFILE:=$(BUILD_LIBNIO_MAPFILE), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) $(BUILD_LIBNIO_LDFLAGS) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=-ljava -lnet -lpthread $(LIBDL),\ + LDFLAGS_SUFFIX_solaris:=$(LDFLAGS_JDKLIB_SUFFIX) \ + $(JVMLIB) -lsocket -lposix4 $(LIBDL) -lsendfile \ + -ljava -lnet,\ + LDFLAGS_SUFFIX_windows:=$(LDFLAGS_JDKLIB_SUFFIX) \ + $(WIN_JAVA_LIB) $(JDK_OUTPUTDIR)/objs/libnet/net.lib \ + advapi32.lib jvm.lib ws2_32.lib\ + $(JDK_OUTPUTDIR)/objs/libjava/io_util.obj \ + $(JDK_OUTPUTDIR)/objs/libjava/FileDescriptor_md.obj ,\ + LDFLAGS_SUFFIX_macosx:=-ljava -lnet -pthread,\ + LDFLAGS_SUFFIX:=,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnio)) + +BUILD_LIBRARIES += $(BUILD_LIBNIO) + +$(BUILD_LIBNIO) : $(BUILD_LIBNET) + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS_API),posix) + # TODO make this work on macosx + ifneq ($(OPENJDK_TARGET_OS),macosx) + + SCTP_WERROR := -Werror + ifeq ($(OPENJDK_TARGET_CPU_ARCH), ppc) + SCTP_WERROR := + endif + + $(eval $(call SetupNativeCompilation,BUILD_LIBSCTP,\ + LIBRARY:=sctp,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/ch/sctp,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB)\ + -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch \ + -I$(JDK_TOPDIR)/src/share/native/sun/nio/ch/sctp \ + -I$(JDK_TOPDIR)/src/share/native/java/net \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/ch \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/java/net,\ + CFLAGS_linux:=$(SCTP_WERROR),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libsctp/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=$(LIBDL) -lpthread,\ + LDFLAGS_SUFFIX_posix:=-lnio -lnet,\ + LDFLAGS_SUFFIX_solaris:=-lsocket,\ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ + INCLUDE_FILES:=SctpNet.c SctpChannelImpl.c SctpServerChannelImpl.c,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsctp)) + + BUILD_LIBRARIES += $(BUILD_LIBSCTP) + + $(BUILD_LIBSCTP) : $(BUILD_LIBNIO) + endif +endif + +########################################################################################## + +BUILD_LIBJLI_SRC_DIRS:=$(JDK_TOPDIR)/src/share/bin $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin +BUILD_LIBJLI_CFLAGS:=$(foreach dir,$(BUILD_LIBJLI_SRC_DIRS),-I$(dir)) + +BUILD_LIBJLI_FILES:=\ + java.c \ + splashscreen_stubs.c \ + parse_manifest.c \ + version_comp.c \ + wildcard.c \ + jli_util.c + +ifeq ($(JVM_VARIANT_ZERO), true) + ERGO_FAMILY:=zero +else # !ZERO_BUILD + ifneq (,$(findstring $(ARCH), amd64 x86_64)) + ERGO_FAMILY:=i586 + else # !X86 FAMILY + ERGO_FAMILY:=$(ARCH) + endif #ARCH_FAMILY +endif # ZERO_BUILD + +ifeq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBJLI_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/bin + BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/bin + BUILD_LIBJLI_FILES += java_md_common.c java_md_macosx.c + + BUILD_LIBJLI_java_md_macosx.c_CFLAGS:=-x objective-c + BUILD_LIBJLI_STATIC_java_md_macosx.c_CFLAGS:=-x objective-c +endif + +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBJLI_FILES += java_md.c +else ifneq ($(OPENJDK_TARGET_OS), macosx) + + BUILD_LIBJLI_FILES += java_md_common.c + BUILD_LIBJLI_FILES += java_md_solinux.c ergo.c + + ERGO_ARCH_FILE = ergo_$(ERGO_FAMILY).c + + # if the architecture specific ergo file exists then + # use it, else use the generic definitions from ergo.c + ifneq ($(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/$(ERGO_ARCH_FILE)),) + BUILD_LIBJLI_FILES += $(ERGO_ARCH_FILE) + else # !ERGO_ARCH_FILE + BUILD_LIBJLI_CFLAGS += -DUSE_GENERIC_ERGO + endif # ERGO_ARCH_FILE +endif #WINDOWS + +# Names of arch directories +ifneq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBJLI_CFLAGS += -DLIBARCHNAME='"$(LIBARCH)"' +else + BUILD_LIBJLI_CFLAGS += -DLIBARCHNAME='"$(ARCH)"' +endif +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc) + BUILD_LIBJLI_CFLAGS += -DLIBARCH32NAME='"sparc"' + BUILD_LIBJLI_CFLAGS += -DLIBARCH64NAME='"sparcv9"' + else + BUILD_LIBJLI_CFLAGS += -DLIBARCH32NAME='"i386"' + BUILD_LIBJLI_CFLAGS += -DLIBARCH64NAME='"amd64"' + endif +endif # OPENJDK_TARGET_OS + +ifeq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBJLI_CFLAGS += -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" +endif + +ifneq ($(USE_EXTERNAL_LIBZ),true) + BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 + BUILD_LIBJLI_CFLAGS += $(LIBZ_INCLUDE) + BUILD_LIBJLI_FILES += \ + inflate.c \ + inftrees.c \ + inffast.c \ + zadler32.c \ + zcrc32.c \ + zutil.c +endif + +ifeq ($(OPENJDK_TARGET_OS), windows) + LIBJLI_OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE) +else + LIBJLI_OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE)/jli +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBJLI,\ + LIBRARY:=jli,\ + OUTPUT_DIR:=$(LIBJLI_OUTPUT_DIR),\ + SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ + INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBJLI_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjli/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX:=$(LIBZ),\ + LDFLAGS_SUFFIX_posix:=$(LIBDL) -lc,\ + LDFLAGS_SUFFIX_linux:=-lpthread,\ + LDFLAGS_SUFFIX_windows:=\ + -export:JLI_Launch \ + -export:JLI_ManifestIterate \ + -export:JLI_SetTraceLauncher \ + -export:JLI_ReportErrorMessage \ + -export:JLI_ReportErrorMessageSys \ + -export:JLI_ReportMessage \ + -export:JLI_ReportExceptionDescription \ + advapi32.lib \ + comctl32.lib \ + user32.lib,\ + LDFLAGS_SUFFIX_macosx:=-framework Cocoa -framework Security -framework ApplicationServices, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli)) + +BUILD_LIBRARIES += $(BUILD_LIBJLI) + +# On windows, the static library has the same suffix as the import library created by +# with the shared library, so the static library is given a different name. No harm +# in doing it for all platform to reduce complexity. +ifeq ($(OPENJDK_TARGET_OS), windows) + $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\ + STATIC_LIBRARY:=jli_static,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\ + SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ + INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(STATIC_LIBRARY_FLAGS) $(BUILD_LIBJLI_CFLAGS),\ + ARFLAGS:=$(ARFLAGS),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static)) + +BUILD_LIBRARIES += $(BUILD_LIBJLI_STATIC) + +else ifeq ($(OPENJDK_TARGET_OS),macosx) + # + # On macosx they do partial (incremental) linking of libjli_static.a + # code it here...rather than add support to NativeCompilation + # as this is first time I see it + $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\ + LIBRARY:=jli_static, \ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\ + SRC:=$(BUILD_LIBJLI_SRC_DIRS),\ + INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\ + LANG:=C,\ + OPTIMIZATION:=HIGH, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(BUILD_LIBJLI_CFLAGS),\ + LDFLAGS:=-nostdlib -r,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static)) + +$(JDK_OUTPUTDIR)/objs/libjli_static.a : $(BUILD_LIBJLI_STATIC) + $(CP) -a $< $@ + +BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/libjli_static.a +endif + +########################################################################################## + +ifeq ($(ENABLE_JFR), true) + +$(eval $(call SetupNativeCompilation,BUILD_LIBJFR,\ + LIBRARY:=jfr,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/closed/share/native/oracle/jfr,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/closed/share/javavm/export, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjfr/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjfr)) + +BUILD_LIBRARIES += $(BUILD_LIBJFR) + +endif + +########################################################################################## + +ifndef OPENJDK + +BUILD_LIBKCMS_EXCLUDE_FILES:= +ifeq ($(OPENJDK_TARGET_OS),windows) + BUILD_LIBKCMS_EXCLUDE_FILES += ukcpmgr.c unixmem.c +else + BUILD_LIBKCMS_EXCLUDE_FILES += cmmdll.c registry.c spxffile.c sysinfo.c winmem.c wkcpmgr.c +endif + +BUILD_LIBKCMS_FLAGS:=$(CFLAGS_JDKLIB) + +ifeq ($(OPENJDK_TARGET_OS),solaris) + # This particular library uses a feature called PIC_CODE_SMALL (on solaris) + # implement it like this...since it's only used here + BUILD_LIBKCMS_FLAGS:=$(patsubst -KPIC,-Kpic,$(BUILD_LIBKCMS_FLAGS)) +else ifeq ($(OPENJDK_TARGET_CPU_ARCH), ppc) + BUILD_LIBKCMS_FLAGS:=$(patsubst -fPIC,-fpic,$(BUILD_LIBKCMS_FLAGS)) +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBKCMS,\ + LIBRARY:=kcms,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms,\ + LANG:=C,\ + EXCLUDE_FILES:=$(BUILD_LIBKCMS_EXCLUDE_FILES),\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(BUILD_LIBKCMS_FLAGS) \ + -DJAVACMM -DFUT_CALC_EX -DNO_FUT_GCONST,\ + CFLAGS_linux:=-Wno-missing-field-initializers,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libkcms/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=-lpthread,\ + LDFLAGS_SUFFIX_windows:=$(WIN_JAVA_LIB) advapi32.lib user32.lib version.lib, \ + LDFLAGS_SUFFIX:=-lm $(LDFLAGS_JDKLIB_SUFFIX),\ + VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/closed/share/native/sun/java2d/cmm/kcms/cmm.rc,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libkcms)) + +$(BUILD_LIBKCMS) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBKCMS) + +endif + +########################################################################################## + +ifndef OPENJDK +ifeq ($(OPENJDK_TARGET_OS), solaris) +ifneq ($(ARCH), amd64) + +ifeq ($(shell if test "$(OS_VERSION_MAJOR)" -eq 5 -a "$(OS_VERSION_MINOR)" -le 10; then $(ECHO) ok; fi), ok) + +SUNWJDGA_MAPFILE:= +ifneq (,$(findstring $(ARCH),sparc)) + SUNWJDGA_MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjdga/mapfile-vers +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBSUNWJDGA, \ + LIBRARY:=sunwjdga,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/solaris/native/sun/jdga, \ + LANG:=C, \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ + -I$(JDK_TOPDIR)/src/share/javavm/export \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/javavm/export \ + -I$(OPENWIN_HOME)/include, \ + MAPFILE:=$(SUNWJDGA_MAPFILE), \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX:=-L$(OPENWIN_LIB)$(ISA_DIR) -R$(OPENWIN_LIB)$(ISA_DIR) -ldga -lX11 $(LIBDL) -lc, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunwjdga)) + +BUILD_LIBRARIES += $(BUILD_LIBSUNWJDGA) + +endif +endif +endif +endif + +########################################################################################## + +ifeq ($(BUILD_HEADLESS), true) +ifneq ($(OPENJDK_TARGET_OS), windows) + +LIBAWT_HEADLESS_DIRS:=$(JDK_TOPDIR)/src/share/native/sun/font \ + $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/solaris/native/sun/font \ + $(JDK_TOPDIR)/src/solaris/native/sun/awt \ + $(JDK_TOPDIR)/src/solaris/native/sun/java2d/opengl \ + $(JDK_TOPDIR)/src/solaris/native/sun/java2d/x11 + +LIBAWT_HEADLESS_CFLAGS:=-DHEADLESS=true \ + -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" \ + $(CUPS_CFLAGS) \ + $(X_CFLAGS) \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/java2d \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \ + -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \ + -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/jdga \ + $(foreach dir,$(LIBAWT_HEADLESS_DIRS),-I$(dir)) + +LIBAWT_HEADLESS_FILES:=\ + awt_Font.c \ + HeadlessToolkit.c \ + fontpath.c \ + VDrawingArea.c \ + X11Color.c \ + X11Renderer.c \ + X11PMBlitLoops.c \ + X11SurfaceData.c \ + X11FontScaler_md.c \ + X11TextRenderer_md.c \ + OGLBlitLoops.c \ + OGLBufImgOps.c \ + OGLContext.c \ + OGLFuncs.c \ + OGLMaskBlit.c \ + OGLMaskFill.c \ + OGLPaints.c \ + OGLRenderQueue.c \ + OGLRenderer.c \ + OGLSurfaceData.c \ + OGLTextRenderer.c \ + OGLVertexCache.c \ + GLXGraphicsConfig.c \ + GLXSurfaceData.c \ + AccelGlyphCache.c \ + CUPSfuncs.c + +LIBAWT_HEADLESS_LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) -lawt -lm + +LIBAWT_HEADLESS_REORDER:= +ifeq ($(OPENJDK_TARGET_OS), solaris) + ifneq ($(ARCH), amd64) + LIBAWT_HEADLESS_REORDER:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt_headless/reorder-$(ARCH) + endif +endif + +$(eval $(call SetupNativeCompilation,BUILD_LIBAWT_HEADLESS,\ + LIBRARY:=awt_headless,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBAWT_HEADLESS_DIRS),\ + INCLUDE_FILES:=$(LIBAWT_HEADLESS_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(LIBAWT_HEADLESS_CFLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libawt_headless/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + REORDER:=$(LIBAWT_HEADLESS_REORDER), \ + LDFLAGS_SUFFIX:=$(LIBAWT_HEADLESS_LDFLAGS_SUFFIX),\ + LDFLAGS_SUFFIX_posix:=$(LIBDL),\ + LDFLAGS_SUFFIX_macosx:=$(LIBCXX), \ + LDFLAGS_SUFFIX_solaris:=$(LIBCXX), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_headless)) + +$(BUILD_LIBAWT_HEADLESS) : $(BUILD_LIBAWT) + +BUILD_LIBRARIES += $(BUILD_LIBAWT_HEADLESS) + +endif +endif + +########################################################################################## + +ifndef BUILD_HEADLESS_ONLY +LIBSPLASHSCREEN_DIRS:=\ + $(JDK_TOPDIR)/src/share/native/sun/awt/giflib \ + $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg \ + $(JDK_TOPDIR)/src/share/native/sun/awt/libpng \ + $(JDK_TOPDIR)/src/share/native/sun/awt/splashscreen \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/awt/splashscreen + +LIBSPLASHSCREEN_CFLAGS:=-DSPLASHSCREEN -DPNG_NO_MMX_CODE \ + $(foreach dir,$(LIBSPLASHSCREEN_DIRS),-I$(dir)) + +ifeq ($(OPENJDK_TARGET_OS), macosx) + LIBSPLASHSCREEN_CFLAGS:=-I$(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen \ + $(LIBSPLASHSCREEN_CFLAGS) \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks + LIBSPLASHSCREEN_CFLAGS += -DWITH_MACOSX + LIBSPLASHSCREEN_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp + + LIBSPLASHSCREEN_java_awt_SplashScreen.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_gfx_impl.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_gif.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_impl.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_jpeg.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_png.c_CFLAGS:=-x objective-c -O0 + LIBSPLASHSCREEN_splashscreen_sys.m_CFLAGS:=-O0 + +else ifneq ($(OPENJDK_TARGET_OS), windows) + LIBSPLASHSCREEN_CFLAGS += -DWITH_X11 -I$(OPENWIN_HOME)/include -I$(OPENWIN_HOME)/include/X11/extensions +else + LIBSPLASHSCREEN_CFLAGS += -DWITH_WIN32 +endif + +LIBSPLASHSCREEN_FILES:=\ + java_awt_SplashScreen.c \ + splashscreen_gfx_impl.c \ + splashscreen_gif.c \ + splashscreen_impl.c \ + splashscreen_jpeg.c \ + splashscreen_png.c \ + png.c \ + pngerror.c \ + pngget.c \ + pngmem.c \ + pngpread.c \ + pngread.c \ + pngrio.c \ + pngrtran.c \ + pngrutil.c \ + pngset.c \ + pngtrans.c \ + pngwio.c \ + pngwrite.c \ + pngwtran.c \ + pngwutil.c \ + dgif_lib.c \ + gif_err.c \ + gifalloc.c \ + jcomapi.c \ + jdapimin.c \ + jdapistd.c \ + jdcoefct.c \ + jdcolor.c \ + jddctmgr.c \ + jdhuff.c \ + jdinput.c \ + jdmainct.c \ + jdmarker.c \ + jdmaster.c \ + jdmerge.c \ + jdphuff.c \ + jdpostct.c \ + jdsample.c \ + jerror.c \ + jidctflt.c \ + jidctfst.c \ + jidctint.c \ + jidctred.c \ + jmemmgr.c \ + jmemnobs.c \ + jquant1.c \ + jquant2.c \ + jutils.c \ + jcapimin.c \ + jcapistd.c \ + jccoefct.c \ + jccolor.c \ + jcdctmgr.c \ + jchuff.c \ + jcinit.c \ + jcmainct.c \ + jcmarker.c \ + jcmaster.c \ + jcparam.c \ + jcphuff.c \ + jcprepct.c \ + jcsample.c \ + jctrans.c \ + jdtrans.c \ + jfdctflt.c \ + jfdctfst.c \ + jfdctint.c + +ifneq ($(OPENJDK_TARGET_OS), macosx) +LIBSPLASHSCREEN_FILES += splashscreen_sys.c +else +LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen +LIBSPLASHSCREEN_FILES += splashscreen_sys.m +endif + +LIBSPLASHSCREEN_LDFLAGS_SUFFIX:= + +ifneq ($(USE_EXTERNAL_LIBZ),true) + LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5 + LIBSPLASHSCREEN_CFLAGS += $(LIBZ_INCLUDE) + LIBSPLASHSCREEN_FILES += \ + compress.c \ + deflate.c \ + gzclose.c \ + gzlib.c \ + gzread.c \ + gzwrite.c \ + infback.c \ + inffast.c \ + inflate.c \ + inftrees.c \ + trees.c \ + uncompr.c \ + zadler32.c \ + zcrc32.c \ + zutil.c +endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + LIBSPLASHSCREEN_LDFLAGS_SUFFIX += $(LIBM) -lpthread -liconv -losxapp \ + -framework ApplicationServices \ + -framework Foundation \ + -framework Cocoa \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -framework JavaNativeFoundation +else ifneq ($(OPENJDK_TARGET_OS), windows) + LIBSPLASHSCREEN_LDFLAGS_SUFFIX += -L$(OPENWIN_LIB)$(ISA_DIR) -lX11 -lXext $(LIBM) -lpthread +else # OPENJDK_TARGET_OS + LIBSPLASHSCREEN_LDFLAGS_SUFFIX += kernel32.lib user32.lib gdi32.lib delayimp.lib /DELAYLOAD:user32.dll +endif # OPENJDK_TARGET_OS + +$(eval $(call SetupNativeCompilation,LIBSPLASHSCREEN,\ + LIBRARY:=splashscreen,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(LIBSPLASHSCREEN_DIRS),\ + INCLUDE_FILES:=$(LIBSPLASHSCREEN_FILES),\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(LIBSPLASHSCREEN_CFLAGS) $(CFLAGS_JDKLIB),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libsplashscreen/mapfile-vers, \ + LDFLAGS:=$(LDFLAGS_JDKLIB) \ + $(call SET_SHARED_LIBRARY_ORIGIN),\ + LDFLAGS_SUFFIX_linux:=$(LIBDL), \ + LDFLAGS_SUFFIX:=$(LIBSPLASHSCREEN_LDFLAGS_SUFFIX) $(LIBZ),\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsplashscreen)) + +BUILD_LIBRARIES += $(LIBSPLASHSCREEN) + +ifeq ($(OPENJDK_TARGET_OS),macosx) +$(LIBSPLASHSCREEN) : $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) +endif + +endif + +########################################################################################## + +ifndef OPENJDK + +LIBDCPR_SRC_DIRS:=\ $(JDK_TOPDIR)/src/closed/share/native/sun/dc/doe \ $(JDK_TOPDIR)/src/closed/share/native/sun/dc/path \ $(JDK_TOPDIR)/src/closed/share/native/sun/dc/pr \ $(JDK_TOPDIR)/src/closed/share/native/sun/dc/util -LIBDCPR_CFLAGS := $(foreach dir,$(LIBDCPR_SRC_DIRS),-I$(dir)) \ +LIBDCPR_CFLAGS:=$(foreach dir,$(LIBDCPR_SRC_DIRS),-I$(dir)) \ -I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe $(eval $(call SetupNativeCompilation,BUILD_LIBDCPR,\ + LIBRARY:=dcpr,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBDCPR_SRC_DIRS),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(LIBDCPR_CFLAGS), \ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libdcpr/mapfile-vers, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libdcpr/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) $(LIBM)\ $(call SET_SHARED_LIBRARY_ORIGIN),\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ - LDFLAGS_SUFFIX_posix := $(LIBDL) -lm,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libdcpr,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)dcpr$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX_posix:=-lm,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdcpr)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)dcpr$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBDCPR) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)dcpr$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBDCPR) endif ########################################################################################## $(eval $(call SetupNativeCompilation,BUILD_LIBJ2PCSC,\ + LIBRARY:=j2pcsc,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/smartcardio \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/smartcardio,\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/smartcardio,\ LANG:=C,\ - CFLAGS_posix:= -D__sun_jdk,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + CFLAGS_posix:=-D__sun_jdk,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/sun/security/smartcardio \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/smartcardio\ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/smartcardio/MUSCLE,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libj2pcsc/mapfile-vers, \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/smartcardio\ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/smartcardio/MUSCLE,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2pcsc/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX_posix := $(LIBDL), \ - LDFLAGS_SUFFIX_windows := winscard.lib,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libj2pcsc,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)j2pcsc$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX_posix:=$(LIBDL), \ + LDFLAGS_SUFFIX_windows:=winscard.lib,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2pcsc)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)j2pcsc$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJ2PCSC) ########################################################################################## -ifneq ($(PLATFORM), windows) +ifneq ($(OPENJDK_TARGET_OS), windows) $(eval $(call SetupNativeCompilation,BUILD_LIBJ2GSS,\ + LIBRARY:=j2gss,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/jgss/wrapper \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/jgss/wrapper,\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/jgss/wrapper,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/sun/security/jgss/wrapper \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/jgss/wrapper,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libj2gss/mapfile-vers, \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/jgss/wrapper,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2gss/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX := $(LIBDL), \ - BIN:=$(JDK_OUTPUTDIR)/objs/libj2gss,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)j2gss$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX:=$(LIBDL), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2gss)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)j2gss$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJ2GSS) endif ########################################################################################## -BUILD_LIBKRB5_NAME := -ifeq ($(PLATFORM), windows) - BUILD_LIBKRB5_NAME := w2k_lsa_auth - BUILD_LIBKRB5_FILES := NativeCreds.c WindowsDirectory.c - BUILD_LIBKRB5_SRC := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/krb5 - BUILD_LIBKRB5_LIBS := Secur32.lib netapi32.lib \ +BUILD_LIBKRB5_NAME:= +ifeq ($(OPENJDK_TARGET_OS), windows) + BUILD_LIBKRB5_NAME:=w2k_lsa_auth + BUILD_LIBKRB5_FILES:=NativeCreds.c WindowsDirectory.c + BUILD_LIBKRB5_SRC:=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/krb5 + BUILD_LIBKRB5_LIBS:=Secur32.lib netapi32.lib \ kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib \ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib \ odbccp32.lib wsock32.lib -else ifeq ($(PLATFORM), macosx) - BUILD_LIBKRB5_NAME := osxkrb5 - BUILD_LIBKRB5_FILES := nativeccache.c - BUILD_LIBKRB5_LIBS := -framework Kerberos +else ifeq ($(OPENJDK_TARGET_OS), macosx) + BUILD_LIBKRB5_NAME:=osxkrb5 + BUILD_LIBKRB5_FILES:=nativeccache.c + BUILD_LIBKRB5_LIBS:=-framework Kerberos endif ifneq ($(BUILD_LIBKRB5_NAME),) $(eval $(call SetupNativeCompilation,BUILD_LIBKRB5,\ + LIBRARY:=$(BUILD_LIBKRB5_NAME),\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/krb5 \ $(BUILD_LIBKRB5_SRC) ,\ - INCLUDE_FILES := $(BUILD_LIBKRB5_FILES),\ + INCLUDE_FILES:=$(BUILD_LIBKRB5_FILES),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/sun/security/krb5 \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/krb5 ,\ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/krb5 ,\ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX := $(BUILD_LIBKRB5_LIBS) ,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libkrb5,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)$(BUILD_LIBKRB5_NAME)$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX:=$(BUILD_LIBKRB5_LIBS) ,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libkrb5)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)$(BUILD_LIBKRB5_NAME)$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBKRB5) endif ########################################################################################## -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) $(eval $(call SetupNativeCompilation,BUILD_LIBSUNMSCAPI,\ + LIBRARY:=sunmscapi,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/mscapi \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/mscapi,\ - INCLUDE_FILES := security.cpp, \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/mscapi,\ + INCLUDE_FILES:=security.cpp, \ LANG:=C++,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/sun/security/mscapi \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/mscapi ,\ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/mscapi ,\ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX := Crypt32.Lib advapi32.lib,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libsunmscapi,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)sunmscapi$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX:=Crypt32.Lib advapi32.lib,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunmscapi)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)sunmscapi$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBSUNMSCAPI) endif ########################################################################################## -ifneq ($(PLATFORM)-$(ARCH_DATA_MODEL), windows-64) +ifneq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL), windows-64) $(eval $(call SetupNativeCompilation,BUILD_LIBJ2PKCS11,\ + LIBRARY:=j2pkcs11,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/pkcs11 \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/pkcs11 \ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/pkcs11 \ $(JDK_TOPDIR)/src/share/native/sun/security/pkcs11/wrapper \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/pkcs11/wrapper,\ + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/pkcs11/wrapper,\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/share/native/sun/security/pkcs11 \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/pkcs11 \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/pkcs11 \ -I$(JDK_TOPDIR)/src/share/native/sun/security/pkcs11/wrapper \ - -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/security/pkcs11/wrapper,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libj2pkcs11/mapfile-vers, \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/security/pkcs11/wrapper,\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2pkcs11/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX_posix := $(LIBDL), \ - BIN:=$(JDK_OUTPUTDIR)/objs/libj2pkcs11,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)j2pkcs11$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX_posix:=$(LIBDL), \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2pkcs11)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)j2pkcs11$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJ2PKCS11) endif ########################################################################################## @@ -2488,40 +2658,56 @@ ifndef DISABLE_INTREE_EC # TODO Set DISABLE_INTREE_EC in configure if src/share/native/sun/security/ec/impl # is not present # -BUILD_LIBSUNEC_FLAGS := -DMP_API_COMPATIBLE -DNSS_ECC_MORE_THAN_SUITE_B \ - -I$(JDK_TOPDIR)/src/share/native/sun/security/ec \ - -I$(JDK_TOPDIR)/src/share/native/sun/security/ec/impl +BUILD_LIBSUNEC_FLAGS:= -I$(JDK_TOPDIR)/src/share/native/sun/security/ec \ + -I$(JDK_TOPDIR)/src/share/native/sun/security/ec/impl + +# +# On sol-sparc...all libraries are compiled with -xregs=no%appl +# (set in CFLAGS_REQUIRED_sparc) +# +# except!!! libsunec.so +# +ECC_JNI_SOLSPARC_FILTER:= +ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc) + ECC_JNI_SOLSPARC_FILTER:=-xregs=no%appl +endif $(eval $(call SetupNativeCompilation,BUILD_LIBSUNEC,\ + LIBRARY:=sunec,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/share/native/sun/security/ec \ $(JDK_TOPDIR)/src/share/native/sun/security/ec/impl, \ - LANG := C++, \ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) $(BUILD_LIBSUNEC_FLAGS),\ - CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(CXX_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) $(BUILD_LIBSUNEC_FLAGS),\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libsunec/mapfile-vers, \ + LANG:=C++, \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(filter-out $(ECC_JNI_SOLSPARC_FILTER), $(CFLAGS_JDKLIB))\ + $(BUILD_LIBSUNEC_FLAGS) \ + -DMP_API_COMPATIBLE -DNSS_ECC_MORE_THAN_SUITE_B,\ + CXXFLAGS:=$(filter-out $(ECC_JNI_SOLSPARC_FILTER), $(CXXFLAGS_JDKLIB)) \ + $(BUILD_LIBSUNEC_FLAGS),\ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libsunec/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB) \ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_SUFFIX := $(LIBCXX),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libsunec,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)sunec$(SHARED_LIBRARY_SUFFIX))) + LDFLAGS_SUFFIX:=$(LIBCXX),\ + LDFLAGS_SUFFIX_solaris:=-lc ,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunec)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)sunec$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBSUNEC) endif ########################################################################################## -LIBJSOUND_SRC_DIRS := \ +LIBJSOUND_SRC_DIRS:=\ $(JDK_TOPDIR)/src/share/native/com/sun/media/sound \ - $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/com/sun/media/sound + $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/com/sun/media/sound -LIBJSOUND_SRC_FILES := Utilities.c Platform.c +LIBJSOUND_SRC_FILES:=Utilities.c Platform.c -LIBJSOUND_LANG := C -LIBJSOUND_CFLAGS := $(foreach dir,$(LIBJSOUND_SRC_DIRS),-I$(dir)) +LIBJSOUND_LANG:=C +LIBJSOUND_CFLAGS:=$(foreach dir,$(LIBJSOUND_SRC_DIRS),-I$(dir)) -EXTRA_SOUND_JNI_LIBS := +EXTRA_SOUND_JNI_LIBS:= -LIBJSOUND_MIDIFILES := \ +LIBJSOUND_MIDIFILES:=\ MidiInDevice.c \ MidiInDeviceProvider.c \ MidiOutDevice.c \ @@ -2529,16 +2715,16 @@ LIBJSOUND_MIDIFILES := \ PlatformMidi.c # files needed for ports -LIBJSOUND_PORTFILES := \ +LIBJSOUND_PORTFILES:=\ PortMixerProvider.c \ PortMixer.c # files needed for direct audio -LIBJSOUND_DAUDIOFILES := \ +LIBJSOUND_DAUDIOFILES:=\ DirectAudioDeviceProvider.c \ DirectAudioDevice.c -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) EXTRA_SOUND_JNI_LIBS += jsoundds LIBJSOUND_CFLAGS += -DX_PLATFORM=X_WINDOWS \ -DUSE_PLATFORM_MIDI_OUT=TRUE \ @@ -2551,15 +2737,15 @@ ifeq ($(PLATFORM), windows) PLATFORM_API_WinOS_Ports.c LIBJSOUND_SRC_FILES += $(LIBJSOUND_MIDIFILES) LIBJSOUND_SRC_FILES += $(LIBJSOUND_PORTFILES) -endif # PLATFORM windows +endif # OPENJDK_TARGET_OS windows -ifeq ($(PLATFORM), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) EXTRA_SOUND_JNI_LIBS += jsoundalsa LIBJSOUND_CFLAGS += -DX_PLATFORM=X_LINUX -endif # PLATFORM linux +endif # OPENJDK_TARGET_OS linux -ifeq ($(PLATFORM), macosx) - LIBJSOUND_LANG := C++ +ifeq ($(OPENJDK_TARGET_OS), macosx) + LIBJSOUND_LANG:=C++ LIBJSOUND_CFLAGS += -DX_PLATFORM=X_MACOSX \ -DUSE_PORTS=TRUE \ -DUSE_DAUDIO=TRUE \ @@ -2576,9 +2762,9 @@ ifeq ($(PLATFORM), macosx) LIBJSOUND_SRC_FILES += $(LIBJSOUND_MIDIFILES) LIBJSOUND_SRC_FILES += $(LIBJSOUND_PORTFILES) LIBJSOUND_SRC_FILES += $(LIBJSOUND_DAUDIOFILES) -endif # PLATFORM macosx +endif # OPENJDK_TARGET_OS macosx -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) LIBJSOUND_CFLAGS += -DX_PLATFORM=X_SOLARIS \ -DUSE_PORTS=TRUE \ -DUSE_DAUDIO=TRUE @@ -2589,7 +2775,7 @@ ifeq ($(PLATFORM), solaris) LIBJSOUND_SRC_FILES += $(LIBJSOUND_MIDIFILES) LIBJSOUND_SRC_FILES += $(LIBJSOUND_PORTFILES) LIBJSOUND_SRC_FILES += $(LIBJSOUND_DAUDIOFILES) -endif # PLATFORM solaris +endif # OPENJDK_TARGET_OS solaris ifeq ($(JVM_VARIANT_ZERO), true) @@ -2623,37 +2809,38 @@ endif LIBJSOUND_CFLAGS += -DEXTRA_SOUND_JNI_LIBS='"$(EXTRA_SOUND_JNI_LIBS)"' $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUND,\ + LIBRARY:=jsound,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBJSOUND_SRC_DIRS),\ - INCLUDE_FILES := $(LIBJSOUND_SRC_FILES),\ + INCLUDE_FILES:=$(LIBJSOUND_SRC_FILES),\ LANG:=$(LIBJSOUND_LANG),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - $(LIBJSOUND_CFLAGS), \ - CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(CXX_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ - $(LIBJSOUND_CFLAGS), \ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjsound/mapfile-vers, \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) $(LIBJSOUND_CFLAGS), \ + CXXFLAGS:=$(CXXFLAGS_JDKLIB) $(LIBJSOUND_CFLAGS), \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjsound/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN),\ - LDFLAGS_windows:=java.lib advapi32.lib winmm.lib,\ + LDFLAGS_windows:=$(WIN_JAVA_LIB) advapi32.lib winmm.lib,\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX),\ LDFLAGS_SUFFIX_solaris:=-lc ,\ - LDFLAGS_SUFFIX_macosx := -framework CoreAudio -framework CoreFoundation \ + LDFLAGS_SUFFIX_macosx:=-framework CoreAudio -framework CoreFoundation \ -framework CoreServices -framework AudioUnit $(LIBCXX) \ -framework CoreMIDI -framework AudioToolbox ,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjsound,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsound$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsound)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsound$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJSOUND) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jsound$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJSOUND) ########################################################################################## ifneq ($(filter jsoundalsa, $(EXTRA_SOUND_JNI_LIBS)),) $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDALSA,\ + LIBRARY:=jsoundalsa,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBJSOUND_SRC_DIRS),\ - INCLUDE_FILES := Utilities.c $(LIBJSOUND_MIDIFILES) $(LIBJSOUND_PORTFILES) \ + INCLUDE_FILES:=Utilities.c $(LIBJSOUND_MIDIFILES) $(LIBJSOUND_PORTFILES) \ $(LIBJSOUND_DAUDIOFILES) \ PLATFORM_API_LinuxOS_ALSA_CommonUtils.c \ PLATFORM_API_LinuxOS_ALSA_PCM.c \ @@ -2662,24 +2849,23 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDALSA,\ PLATFORM_API_LinuxOS_ALSA_MidiOut.c \ PLATFORM_API_LinuxOS_ALSA_MidiUtils.c \ PLATFORM_API_LinuxOS_ALSA_Ports.c,\ - LANG := C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(LIBJSOUND_CFLAGS) \ -DUSE_DAUDIO=TRUE \ -DUSE_PORTS=TRUE \ -DUSE_PLATFORM_MIDI_OUT=TRUE \ -DUSE_PLATFORM_MIDI_IN=TRUE, \ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libjsoundalsa/mapfile-vers, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libjsoundalsa/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN),\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) -lasound,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjsoundalsa,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsoundalsa$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsoundalsa)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsoundalsa$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJSOUNDALSA) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jsoundalsa$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJSOUNDALSA) endif @@ -2688,104 +2874,113 @@ endif ifneq ($(filter jsoundds, $(EXTRA_SOUND_JNI_LIBS)),) $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDDS,\ + LIBRARY:=jsoundds,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBJSOUND_SRC_DIRS),\ - INCLUDE_FILES := Utilities.c $(LIBJSOUND_DAUDIOFILES) \ + INCLUDE_FILES:=Utilities.c $(LIBJSOUND_DAUDIOFILES) \ PLATFORM_API_WinOS_DirectSound.cpp, \ - LANG := C++,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + LANG:=C++,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(LIBJSOUND_CFLAGS) \ -DUSE_DAUDIO=TRUE, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN),\ LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) dsound.lib winmm.lib user32.lib ole32.lib,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libjsoundds,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsoundds$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsoundds)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)jsoundds$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJSOUNDDS) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)jsoundds$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJSOUNDDS) endif ########################################################################################## -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) ifndef OPENJDK $(eval $(call SetupNativeCompilation,BUILD_LIBJ2UCRYPTO,\ + LIBRARY:=j2ucrypto,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/closed/solaris/native/com/oracle/security/ucrypto,\ - LANG := C,\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/closed/solaris/native/com/oracle/security/ucrypto ,\ - MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/libj2ucrypto/mapfile-vers, \ + MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libj2ucrypto/mapfile-vers, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN), \ LDFLAGS_SUFFIX:=$(LIBDL),\ - BIN:=$(JDK_OUTPUTDIR)/objs/libj2ucrypto,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)j2ucrypto$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2ucrypto)) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)j2ucrypto$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBJ2UCRYPTO) : $(BUILD_LIBJAVA) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)j2ucrypto$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBJ2UCRYPTO) endif endif ########################################################################################## -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) -LIBAPPLESCRIPTENGINE_FILES := \ +LIBAPPLESCRIPTENGINE_FILES:=\ AppleScriptEngine.m \ AppleScriptExecutionContext.m \ AS_NS_ConversionUtils.m \ NS_Java_ConversionUtils.m $(eval $(call SetupNativeCompilation,BUILD_LIBAPPLESCRIPTENGINE,\ + LIBRARY:=AppleScriptEngine,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/macosx/native/apple/applescript,\ - LANG := C,\ + LANG:=C,\ INCLUDE_FILES:=$(LIBAPPLESCRIPTENGINE_FILES),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/macosx/native/apple/applescript \ -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX:= \ + LDFLAGS_SUFFIX:=$(LDFLAGS_JDKLIB_SUFFIX) \ -framework Cocoa \ -framework Carbon \ -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ -framework JavaNativeFoundation, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libAppleScriptEngine,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)AppleScriptEngine$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libAppleScriptEngine)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)AppleScriptEngine$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBAPPLESCRIPTENGINE) : $(BUILD_LIBJAVA) + +BUILD_LIBRARIES += $(BUILD_LIBAPPLESCRIPTENGINE) endif ########################################################################################## -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) -LIBOSXAPP_FILES := \ +LIBOSXAPP_FILES:=\ NSApplicationAWT.m \ QueuingApplicationDelegate.m \ PropertiesUtilities.m \ ThreadUtilities.m $(eval $(call SetupNativeCompilation,BUILD_LIBOSXAPP,\ + LIBRARY:=osxapp,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/macosx/native/sun/osxapp,\ - LANG := C,\ + LANG:=C,\ INCLUDE_FILES:=$(LIBOSXAPP_FILES),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \ -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks,\ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_macosx := \ + LDFLAGS_SUFFIX_macosx:=\ -framework Accelerate \ -framework ApplicationServices \ -framework AudioToolbox \ @@ -2799,18 +2994,17 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBOSXAPP,\ -framework OpenGL \ -framework IOSurface \ -framework QuartzCore, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libosxapp,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosxapp)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBOSXAPP) endif ########################################################################################## -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) -LIBOSX_FILES := \ +LIBOSX_FILES:=\ Dispatch.m \ CFileManager.m \ KeystoreImpl.m \ @@ -2818,7 +3012,7 @@ LIBOSX_FILES := \ MacOSXPreferencesFile.m \ SCDynamicStoreConfig.m -LIBOSX_DIRS := \ +LIBOSX_DIRS:=\ $(JDK_TOPDIR)/src/macosx/native/com/apple/concurrent \ $(JDK_TOPDIR)/src/macosx/native/java/util \ $(JDK_TOPDIR)/src/macosx/native/com/apple/eio \ @@ -2826,17 +3020,20 @@ LIBOSX_DIRS := \ $(JDK_TOPDIR)/src/macosx/native/apple/launcher $(eval $(call SetupNativeCompilation,BUILD_LIBOSX,\ + LIBRARY:=osx,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBOSX_DIRS),\ - LANG := C,\ + LANG:=C,\ INCLUDE_FILES:=$(LIBOSX_FILES),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(foreach dir,$(LIBOSX_DIRS),-I$(dir)) \ -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \ -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks,\ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_macosx := \ + LDFLAGS_SUFFIX_macosx:=\ -losxapp \ -framework Cocoa \ -framework ApplicationServices \ @@ -2846,24 +3043,21 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBOSX,\ -framework Security \ -framework SystemConfiguration \ $(LDFLAGS_JDKLIB_SUFFIX), \ - BIN:=$(JDK_OUTPUTDIR)/objs/libosx,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osx$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosx)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osx$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBOSX) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osx$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBOSX) : $(BUILD_LIBOSXAPP) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osx$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBOSX) : $(BUILD_LIBJAVA) endif ########################################################################################## -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) -LIBAWT_LWAWT_FILES := \ +LIBAWT_LWAWT_FILES:=\ awt.m \ ApplicationDelegate.m \ CFRetainedResource.m \ @@ -2938,7 +3132,7 @@ LIBAWT_LWAWT_FILES := \ CUPSfuncs.c -LIBAWT_LWAWT_DIRS := \ +LIBAWT_LWAWT_DIRS:=\ $(JDK_TOPDIR)/src/macosx/native/sun/awt \ $(JDK_TOPDIR)/src/macosx/native/sun/font \ $(JDK_TOPDIR)/src/macosx/native/sun/java2d/opengl \ @@ -2947,10 +3141,13 @@ LIBAWT_LWAWT_DIRS := \ $(JDK_TOPDIR)/src/share/native/sun/java2d/opengl \ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT_LWAWT,\ + LIBRARY:=awt_lwawt,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(LIBAWT_LWAWT_DIRS),\ - LANG := C,\ + LANG:=C,\ INCLUDE_FILES:=$(LIBAWT_LWAWT_FILES),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ $(foreach dir,$(LIBAWT_LWAWT_DIRS),-I$(dir)) \ -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \ -I$(JDK_TOPDIR)/src/share/native/sun/java2d \ @@ -2964,7 +3161,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT_LWAWT,\ -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks,\ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_macosx := \ + LDFLAGS_SUFFIX_macosx:=\ -lawt -lmlib_image -losxapp $(LDFLAGS_JDKLIB_SUFFIX) $(LIBM) \ -framework Accelerate \ -framework ApplicationServices \ @@ -2978,30 +3175,25 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT_LWAWT,\ -framework JavaRuntimeSupport \ -framework OpenGL \ -framework QuartzCore ,\ - BIN:=$(JDK_OUTPUTDIR)/objs/libawt_lwawt,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_lwawt)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBAWT_LWAWT) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBAWT) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)mlib_image$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBMLIB_IMAGE) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBOSXAPP) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBAWT_LWAWT) : $(BUILD_LIBJAVA) endif ########################################################################################## -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) -LIBOSXUI_FILES := \ +LIBOSXUI_FILES:=\ AquaFileView.m \ AquaLookAndFeel.m \ AquaNativeResources.m \ @@ -3012,17 +3204,21 @@ LIBOSXUI_FILES := \ ScreenMenu.m $(eval $(call SetupNativeCompilation,BUILD_LIBOSXUI,\ + LIBRARY:=osxui,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ SRC:=$(JDK_TOPDIR)/src/macosx/native/com/apple/laf,\ - LANG := C,\ + LANG:=C,\ INCLUDE_FILES:=$(LIBOSXUI_FILES),\ - CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \ + OPTIMIZATION:=LOW, \ + CFLAGS:=$(CFLAGS_JDKLIB) \ -I$(JDK_TOPDIR)/src/macosx/native/com/apple/laf \ -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \ -I$(JDK_TOPDIR)/src/macosx/native/sun/awt \ -F/System/Library/Frameworks/JavaVM.framework/Frameworks, \ LDFLAGS:=$(LDFLAGS_JDKLIB)\ $(call SET_SHARED_LIBRARY_ORIGIN), \ - LDFLAGS_SUFFIX_macosx := \ + LDFLAGS_SUFFIX_macosx:=\ + $(LDFLAGS_JDKLIB_SUFFIX) \ -lawt -losxapp -lawt_lwawt \ -framework Cocoa \ -framework Carbon \ @@ -3030,22 +3226,49 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBOSXUI,\ -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ -framework JavaNativeFoundation \ -framework JavaRuntimeSupport, \ - BIN:=$(JDK_OUTPUTDIR)/objs/libosxui,\ - LIB:=$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osxui$(SHARED_LIBRARY_SUFFIX))) + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosxui)) -BUILD_LIBRARIES += $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxui$(SHARED_LIBRARY_SUFFIX) +BUILD_LIBRARIES += $(BUILD_LIBOSXUI) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osxui$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBOSXUI) : $(BUILD_LIBAWT) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osxui$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)osxapp$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBOSXUI) : $(BUILD_LIBOSXAPP) -$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osxui$(SHARED_LIBRARY_SUFFIX) : \ - $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)awt_lwawt$(SHARED_LIBRARY_SUFFIX) +$(BUILD_LIBOSXUI) : $(BUILD_LIBAWT_LWAWT) -#$(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)osxui$(SHARED_LIBRARY_SUFFIX) : \ -# $(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)java$(SHARED_LIBRARY_SUFFIX) +#$(BUILD_LIBOSXUI) : $(BUILD_LIBJAVA) + +endif + +########################################################################################## + +ifeq ($(OPENJDK_TARGET_OS), macosx) + +$(eval $(call SetupNativeCompilation,BUILD_LIBJOBJC,\ + LIBRARY:=JObjC,\ + OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\ + SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/native \ + $(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/native ,\ + LANG:=C,\ + OPTIMIZATION:=LOW, \ + CFLAGS:=-fpascal-strings \ + -fobjc-gc \ + -gdwarf-2 \ + $(CFLAGS_JDKLIB) \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + , \ + LDFLAGS:=-fpascal-strings \ + -fobjc-gc \ + -gdwarf-2 \ + $(LDFLAGS_JDKLIB)\ + $(call SET_SHARED_LIBRARY_ORIGIN), \ + LDFLAGS_SUFFIX:=-framework Foundation -framework JavaVM \ + -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ + -framework JavaNativeFoundation \ + -lffi, \ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjobjc)) + +BUILD_LIBRARIES += $(BUILD_LIBJOBJC) endif diff --git a/jdk/makefiles/CopyFiles.gmk b/jdk/makefiles/CopyFiles.gmk index 7f8fea433c9..63ffaa5a263 100644 --- a/jdk/makefiles/CopyFiles.gmk +++ b/jdk/makefiles/CopyFiles.gmk @@ -25,12 +25,12 @@ INCLUDEDIR = $(JDK_OUTPUTDIR)/include -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM) +OPENJDK_TARGET_OS_INCLUDE = $(INCLUDEDIR)/$(OPENJDK_TARGET_OS) -ifeq ($(PLATFORM), windows) - PLATFORM_INCLUDE = $(INCLUDEDIR)/win32 -else ifeq ($(PLATFORM), macosx) - PLATFORM_INCLUDE = $(INCLUDEDIR)/darwin +ifeq ($(OPENJDK_TARGET_OS), windows) + OPENJDK_TARGET_OS_INCLUDE = $(INCLUDEDIR)/win32 +else ifeq ($(OPENJDK_TARGET_OS), macosx) + OPENJDK_TARGET_OS_INCLUDE = $(INCLUDEDIR)/darwin endif # @@ -42,15 +42,15 @@ H_TARGET_FILES =$(INCLUDEDIR)/jdwpTransport.h \ $(INCLUDEDIR)/jvmticmlr.h \ $(INCLUDEDIR)/classfile_constants.h \ $(INCLUDEDIR)/jawt.h \ - $(PLATFORM_INCLUDE)/jni_md.h \ - $(PLATFORM_INCLUDE)/jawt_md.h + $(OPENJDK_TARGET_OS_INCLUDE)/jni_md.h \ + $(OPENJDK_TARGET_OS_INCLUDE)/jawt_md.h $(INCLUDEDIR)/%.h: $(JDK_TOPDIR)/src/share/javavm/export/%.h $(MKDIR) -p $(@D) $(RM) -f $@ $(CP) $< $@ -$(PLATFORM_INCLUDE)/%.h: $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/javavm/export/%.h +$(OPENJDK_TARGET_OS_INCLUDE)/%.h: $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/javavm/export/%.h $(MKDIR) -p $(@D) $(RM) -f $@ $(CP) $< $@ @@ -83,6 +83,13 @@ $(MGMT_LIBDIR)/management.properties: $(MGMT_LIB_SRC)/management.properties $(CP) $< $@ $(CHMOD) 644 $@ +# this file has different permissions...don't know why... +$(MGMT_LIBDIR)/jmxremote.access: $(MGMT_LIB_SRC)/jmxremote.access + $(MKDIR) -p $(@D) + $(RM) -f $@ + $(CP) $< $@ + $(CHMOD) 644 $@ + $(MGMT_LIBDIR)/%: $(MGMT_LIB_SRC)/% $(MKDIR) -p $(@D) $(RM) -f $@ @@ -121,9 +128,13 @@ COPY_FILES += $(PSFONTPROPFILE_TARGET_FILES) # # Copy flavormap.properties, cursor.properties and cursors gif files to LIBDIR # -PLATFORM_LIB_SRC = $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/lib +ifneq ($(OPENJDK_TARGET_OS), macosx) +OPENJDK_TARGET_OS_LIB_SRC = $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib +else +OPENJDK_TARGET_OS_LIB_SRC = $(JDK_TOPDIR)/src/macosx/lib +endif -$(LIBDIR)/flavormap.properties: $(PLATFORM_LIB_SRC)/flavormap.properties +$(LIBDIR)/flavormap.properties: $(OPENJDK_TARGET_OS_LIB_SRC)/flavormap.properties $(MKDIR) -p $(@D) $(RM) -f $@ $(CP) $< $@ @@ -131,9 +142,9 @@ $(LIBDIR)/flavormap.properties: $(PLATFORM_LIB_SRC)/flavormap.properties COPY_FILES += $(LIBDIR)/flavormap.properties CURSORS_DEST_DIR = $(LIBDIR)/images/cursors -CURSORS_PLATFORM_LIB_SRC = $(PLATFORM_LIB_SRC)/images/cursors +CURSORS_OPENJDK_TARGET_OS_LIB_SRC = $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib/images/cursors -$(CURSORS_DEST_DIR)/cursors.properties: $(CURSORS_PLATFORM_LIB_SRC)/cursors.properties +$(CURSORS_DEST_DIR)/cursors.properties: $(CURSORS_OPENJDK_TARGET_OS_LIB_SRC)/cursors.properties $(MKDIR) -p $(@D) $(RM) -f $@ $(CP) $< $@ @@ -141,11 +152,11 @@ $(CURSORS_DEST_DIR)/cursors.properties: $(CURSORS_PLATFORM_LIB_SRC)/cursors.prop COPY_FILES += $(CURSORS_DEST_DIR)/cursors.properties CURSORS_LIB_SRC = $(JDK_TOPDIR)/src/share/lib/images/cursors -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) CURSORS_SRC_FILES = $(CURSORS_LIB_SRC)/invalid32x32.gif $(wildcard $(CURSORS_LIB_SRC)/win32_*.gif) -else # PLATFORM +else # OPENJDK_TARGET_OS CURSORS_SRC_FILES = $(CURSORS_LIB_SRC)/invalid32x32.gif $(wildcard $(CURSORS_LIB_SRC)/motif_*.gif) -endif # PLATFORM +endif # OPENJDK_TARGET_OS CURSORS_TARGET_FILES = $(subst $(CURSORS_LIB_SRC),$(CURSORS_DEST_DIR),$(CURSORS_SRC_FILES)) $(CURSORS_DEST_DIR)/%: $(CURSORS_LIB_SRC)/% @@ -157,7 +168,7 @@ COPY_FILES += $(CURSORS_TARGET_FILES) ########################################################################################## -CONTENT_TYPES_SRC=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/lib +CONTENT_TYPES_SRC=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib $(LIBDIR)/content-types.properties: $(CONTENT_TYPES_SRC)/content-types.properties $(MKDIR) -p $(@D) @@ -179,9 +190,9 @@ COPY_FILES += $(LIBDIR)/calendars.properties ########################################################################################## -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) -TZMAPPINGS_SRC := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/lib +TZMAPPINGS_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib $(LIBDIR)/tzmappings: $(TZMAPPINGS_SRC)/tzmappings $(MKDIR) -p $(@D) @@ -233,7 +244,7 @@ COPY_FILES += $(ICCPROFILE_TARGET_FILES) #TODO: rework this to avoid hardcoding library name in the makefile # ifdef OPENJDK - ifeq ($(PLATFORM), windows) + ifeq ($(OPENJDK_TARGET_OS), windows) FREETYPE_LIB = $(JDK_OUTPUTDIR)/bin/$(call SHARED_LIBRARY,freetype) else ifeq ($(USING_SYSTEM_FT_LIB), false) @@ -243,7 +254,7 @@ ifdef OPENJDK $(FREETYPE_LIB): $(FREETYPE2_LIB_PATH)/$(call SHARED_LIBRARY,freetype) $(CP) $(FREETYPE2_LIB_PATH)/$(call SHARED_LIBRARY,freetype) $@ - ifeq ($(BUILD_OS), windows) + ifeq ($(OPENJDK_BUILD_OS), windows) $(CHMOD) +rx $@ endif @@ -254,7 +265,7 @@ endif # Copy msvcr100.dll on windows -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) MSVCRNN_TARGET := $(JDK_OUTPUTDIR)/bin/$(notdir $(MSVCRNN_DLL)) $(MSVCRNN_TARGET): $(MSVCRNN_DLL) $(MKDIR) -p $(@D) @@ -286,14 +297,14 @@ else JVMCFG_ARCH := $(ARCH) endif -ifeq ($(PLATFORM),macosx) +ifeq ($(OPENJDK_TARGET_OS),macosx) ifeq ($(JVMCFG_ARCH),amd64) JVMCFG_ARCH := x86_64 endif JVMCFG_SRC := $(JDK_TOPDIR)/src/macosx/bin/$(JVMCFG_ARCH)/jvm.cfg JVMCFG_DIR := $(JDK_OUTPUTDIR)/lib else - JVMCFG_SRC := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/$(JVMCFG_ARCH)/jvm.cfg + JVMCFG_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/$(JVMCFG_ARCH)/jvm.cfg JVMCFG_DIR := $(JDK_OUTPUTDIR)/lib/$(LIBARCH) endif @@ -353,15 +364,15 @@ COPY_FILES += $(JVMCFG) PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security PROPS_DST := $(JDK_OUTPUTDIR)/lib/security/java.security -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security-solaris endif -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security-windows endif -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security-macosx endif @@ -453,7 +464,7 @@ $(SHARED_FONTS_DST_DIR)/fonts.dir : $(JDK_TOPDIR)/src/solaris/classes/sun/awt/mo COPY_FILES += $(SHARED_FONTS_DST) $(SHARED_FONTS_DST_DIR)/fonts.dir -ifeq ($(PLATFORM), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) # The oblique fonts are only needed/wanted on Linux. @@ -532,11 +543,13 @@ $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libxinerama.so: $(JDK_TOPDIR)/src/closed/solaris $(MKDIR) -p $(@D) $(RM) $@ $(CP) $< $@ + $(CHMOD) 755 $@ $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libjdgaSUNW%.so: $(JDK_TOPDIR)/src/closed/solaris/lib/$(ARCH)/libjdgaSUNW%.so $(MKDIR) -p $(@D) $(RM) $@ $(CP) $< $@ + $(CHMOD) 755 $@ $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libjdgaSUNWafb.so: $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libjdgaSUNWffb.so $(MKDIR) -p $(@D) @@ -549,7 +562,7 @@ endif ########################################################################################## -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) SUNPKCS11_CFG_SRC := $(JDK_TOPDIR)/src/share/lib/security/sunpkcs11-solaris.cfg SUNPKCS11_CFG_DST := $(JDK_OUTPUTDIR)/lib/security/sunpkcs11-solaris.cfg @@ -566,7 +579,7 @@ endif ########################################################################################## ifndef OPENJDK -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) UCRYPTO_CFG_SRC := $(JDK_TOPDIR)/src/closed/share/lib/security/ucrypto-solaris.cfg UCRYPTO_CFG_DST := $(JDK_OUTPUTDIR)/lib/security/ucrypto-solaris.cfg diff --git a/jdk/makefiles/CopyIntoClasses.gmk b/jdk/makefiles/CopyIntoClasses.gmk index 92f9330616d..4e9726e452b 100644 --- a/jdk/makefiles/CopyIntoClasses.gmk +++ b/jdk/makefiles/CopyIntoClasses.gmk @@ -133,7 +133,7 @@ COPY_FILES += \ $(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/icons/ocean/*.png) \ $(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/sounds/*.wav) -ifneq ($(PLATFORM), windows) +ifneq ($(OPENJDK_TARGET_OS), windows) # Only copy GTK resources on Solaris/Linux SWING_PLAF_GTK_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk COPY_FILES += \ @@ -174,11 +174,11 @@ COPY_FILES += \ $(shell $(MKDIR) -p $(JDK_OUTPUTDIR)/classes/META-INF/services) # Find all META-INF/services/* files ALL_META-INF_DIRS_share:=$(shell $(FIND) $(JDK_TOPDIR)/src/share/classes -type d -a -name META-INF) -ALL_META-INF_DIRS_hostapi:=$(shell $(FIND) $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes -type d -a -name META-INF) +ALL_META-INF_DIRS_targetapi:=$(shell $(FIND) $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes -type d -a -name META-INF) # Platform specific overrides shared -ifneq ($(ALL_META-INF_DIRS_hostapi),) - ALL_META-INF_DIRS:=$(ALL_META-INF_DIRS_hostapi) \ - $(filter-out %$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes%,%,$(ALL_META-INF_DIRS_hostapi)),\ +ifneq ($(ALL_META-INF_DIRS_targetapi),) + ALL_META-INF_DIRS:=$(ALL_META-INF_DIRS_targetapi) \ + $(filter-out %$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes%,%,$(ALL_META-INF_DIRS_targetapi)),\ $(ALL_META-INF_DIRS_share)) else ALL_META-INF_DIRS:=$(ALL_META-INF_DIRS_share) @@ -189,7 +189,7 @@ ifdef OPENJDK endif ifndef OPENJDK -ifneq ($(PLATFORM), macosx) +ifneq ($(OPENJDK_TARGET_OS), macosx) ALL_META-INF_DIRS += $(JDK_TOPDIR)/src/closed/share/classes/sun/jdbc/odbc/META-INF endif endif @@ -216,9 +216,9 @@ OUT_SERVICES_FILES:=$(addprefix $(JDK_OUTPUTDIR)/classes/META-INF/services/,\ $(shell $(PRINTF) "$(SRC_SERVICES_FILES)\n" | $(SED) -e 's|/[^ ]*/META-INF/services/||g')) OUT_SERVICES_FILES_COLON:=$(addsuffix :,$(OUT_SERVICES_FILES)) # Exception handling for print services with no META-INF directory -SRC_SERVICES_FILES_PRINT = $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/print/services/*) +SRC_SERVICES_FILES_PRINT = $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/print/services/*) OUT_SERVICES_FILES_PRINT = $(addprefix $(JDK_OUTPUTDIR)/classes/META-INF/services/,\ - $(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/print/services/%,%,\ + $(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/print/services/%,%,\ $(SRC_SERVICES_FILES_PRINT))) OUT_SERVICES_FILES_PRINT_COLON = $(addsuffix :,$(OUT_SERVICES_FILES_PRINT)) RULES_SERVICES_PRINT = $(join $(OUT_SERVICES_FILES_PRINT_COLON),$(SRC_SERVICES_FILES_PRINT)) @@ -229,7 +229,7 @@ META-INF_RULES_SERVICES:=$(RULES_SERVICES_PRINT) $(join $(OUT_SERVICES_FILES_COL define addto_meta-inf_services $1 echo Installing META-INF/services/$$(@F) - $(CAT) $$< | $(SED) -e "s/^#\[$(PLATFORM)\]//" > $$@ + $(CAT) $$< | $(SED) -e "s/^#\[$(OPENJDK_TARGET_OS)\]//" > $$@ endef $(foreach i,$(META-INF_RULES_SERVICES),$(eval $(call addto_meta-inf_services,$i))) # Here is the generic rule, whose receipt the above rules will trigger. @@ -261,13 +261,13 @@ JAVAX_SOUND_SRC_FILES := \ COPY_EXTRA += $(foreach F,$(notdir $(JAVAX_SOUND_SRC_FILES)),$(JDK_OUTPUTDIR)/classes/META-INF/services/${F}) -ifeq ($(PLATFORM)-$(ARCH),windows-ia64) +ifeq ($(OPENJDK_TARGET_OS)-$(ARCH),windows-ia64) JAVAX_SOUND_SRC_FILES += windows-ia64/javax.sound.sampled.spi.MixerProvider COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider -else ifeq ($(PLATFORM),windows) +else ifeq ($(OPENJDK_TARGET_OS),windows) JAVAX_SOUND_SRC_FILES += windows-i586/javax.sound.sampled.spi.MixerProvider COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider -else ifeq ($(PLATFORM)-$(ARCH),linux-i586) +else ifeq ($(OPENJDK_TARGET_OS)-$(ARCH),linux-i586) JAVAX_SOUND_SRC_FILES += linux-i586/javax.sound.sampled.spi.MixerProvider COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider else diff --git a/jdk/makefiles/CopySamples.gmk b/jdk/makefiles/CopySamples.gmk index f373b26d341..bb18a07491c 100644 --- a/jdk/makefiles/CopySamples.gmk +++ b/jdk/makefiles/CopySamples.gmk @@ -46,7 +46,7 @@ ifndef OPENJDK SAMPLE_TARGET += $(SAMPLE_CLOSED_TARGET) endif -ifneq (, $(filter $(PLATFORM), solaris macosx)) +ifneq (, $(filter $(OPENJDK_TARGET_OS), solaris macosx)) SAMPLE_SOLARIS_SOURCE := $(shell $(FIND) $(SAMPLE_SOLARIS_SOURCE_DIR) -type f -print) SAMPLE_SOLARIS_TARGET := $(subst $(SAMPLE_SOLARIS_SOURCE_DIR),$(SAMPLE_TARGET_DIR),$(SAMPLE_SOLARIS_SOURCE)) SAMPLE_TARGET += $(SAMPLE_SOLARIS_TARGET) @@ -72,4 +72,3 @@ COPY_FILES += $(SAMPLE_TARGET) all: $(COPY_FILES) .PHONY: all - diff --git a/jdk/makefiles/CreateJars.gmk b/jdk/makefiles/CreateJars.gmk index 681fdb70201..698885df08a 100644 --- a/jdk/makefiles/CreateJars.gmk +++ b/jdk/makefiles/CreateJars.gmk @@ -32,6 +32,10 @@ default: all include Tools.gmk +# +# This makefile...so that altering will trigger rebuilding include/exclude-lists => jars +# +MAKEFILE=$(JDK_TOPDIR)/makefiles/CreateJars.gmk MAINMANIFEST := $(JDK_TOPDIR)/make/tools/manifest.mf BEANMANIFEST := $(JDK_TOPDIR)/make/javax/swing/beaninfo/manifest @@ -46,7 +50,7 @@ JCONSOLE_JAR_DEPS := \ $(eval $(call SetupArchive,BUILD_JCONSOLE_JAR,$(JCONSOLE_JAR_DEPS),\ SRCS:=$(JDK_OUTPUTDIR)/classes,\ - SUFFIXES:=.class .gif .png,\ + SUFFIXES:=.class .gif .png .properties,\ INCLUDES:=sun/tools/jconsole com/sun/tools/jconsole,\ JARMAIN:=sun.tools.jconsole.JConsole,\ JAR:=$(JDK_OUTPUTDIR)/lib/jconsole.jar,\ @@ -242,12 +246,35 @@ RT_JAR_EXCLUDES := \ sun/swing/BeanInfoUtils.class \ $(LOCALEDATA_INCLUDES) -ifndef OPENJDK -ifndef JAVASE_EMBEDDED +# These files should never be put into rt.jar +# but due to a misstake...some are put there if embedded +# +ifneq ($(JAVASE_EMBEDDED), true) +# normal (correct) case RT_JAR_EXCLUDES += \ com/oracle/jrockit/jfr \ oracle/jrockit/jfr +else +# embedded (broken) case +RT_JAR_EXCLUDES += \ + oracle/jrockit/jfr/parser \ + oracle/jrockit/jfr/tools \ + oracle/jrockit/jfr/NativeOptions.class \ + oracle/jrockit/jfr/RepositoryChunkHandler.class endif + +ifeq ($(OPENJDK_TARGET_OS), macosx) + RT_JAR_EXCLUDES += com/sun/nio/sctp \ + sun/nio/ch/sctp \ + sun/jdbc \ + sun/nio/ch/DevPollArrayWrapper\$$$$Updator.class \ + sun/nio/ch/DevPollArrayWrapper.class \ + sun/nio/ch/DevPollSelectorImpl.class \ + sun/nio/ch/DevPollSelectorProvider.class \ + sun/nio/ch/EPollArrayWrapper\$$$$Updator.class \ + sun/nio/ch/EPollArrayWrapper.class \ + sun/nio/ch/EPollSelectorImpl.class \ + sun/nio/ch/EPollSelectorProvider.class endif # Find all files in the classes dir to use as dependencies. This could be more fine granular. @@ -271,12 +298,19 @@ $(RESOURCE_JAR_MANIFEST_FILE): $(MAINMANIFEST) -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ $(MAINMANIFEST) >> $@ -$(JDK_OUTPUTDIR)/lib/_the.jars.exclude: +$(JDK_OUTPUTDIR)/lib/_the.jars.exclude: $(MAKEFILE) $(MKDIR) -p $(@D) $(call ListPathsSafely,RT_JAR_EXCLUDES,\n, >> $@) +$(JDK_OUTPUTDIR)/lib/classlist : $(JDK_TOPDIR)/make/tools/sharing/classlist.$(OPENJDK_TARGET_OS) \ + $(MAKEFILE) + $(MKDIR) -p $(@D) + $(RM) -f $@.temp + $(TOOL_ADDJSUM) $< $@.temp + $(MV) $@.temp $@ + $(JDK_OUTPUTDIR)/lib/_the.jars.contents: $(BUILD_TOOLS) $(JDK_OUTPUTDIR)/lib/_the.jars.exclude \ - $(ALL_FILES_IN_CLASSES) + $(ALL_FILES_IN_CLASSES) $(JDK_OUTPUTDIR)/lib/classlist $(MKDIR) -p $(@D) $(RM) $@.temp ($(CD) $(JDK_OUTPUTDIR)/classes && \ @@ -290,17 +324,22 @@ $(JDK_OUTPUTDIR)/lib/_the.rt.jar.contents: $(JDK_OUTPUTDIR)/lib/_the.jars.conten $(JDK_OUTPUTDIR)/lib/_the.resources.jar.contents: $(JDK_OUTPUTDIR)/lib/_the.jars.contents $(GREP) -v -e '\.class$$' -e '/_the\.*' -e '^_the\.*' $(JDK_OUTPUTDIR)/lib/_the.jars.contents > $@ +RT_JAR_CREATE_OPTIONS := c0fm +ifeq ($(COMPRESS_JARS), true) + RT_JAR_CREATE_OPTIONS := cfm +endif + $(JDK_OUTPUTDIR)/lib/rt.jar: $(JDK_OUTPUTDIR)/lib/_the.rt.jar.contents $(RT_JAR_MANIFEST_FILE) $(ECHO) Creating rt.jar $(CD) $(JDK_OUTPUTDIR)/classes && \ - $(JAR) cfm $@ $(RT_JAR_MANIFEST_FILE) \ + $(JAR) $(RT_JAR_CREATE_OPTIONS) $@ $(RT_JAR_MANIFEST_FILE) \ @$(JDK_OUTPUTDIR)/lib/_the.rt.jar.contents $(JDK_OUTPUTDIR)/lib/resources.jar: $(JDK_OUTPUTDIR)/lib/_the.resources.jar.contents \ $(RESOURCE_JAR_MANIFEST_FILE) $(ECHO) Creating resources.jar $(CD) $(JDK_OUTPUTDIR)/classes && \ - $(JAR) cfm $@ $(RESOURCE_JAR_MANIFEST_FILE) \ + $(JAR) $(RT_JAR_CREATE_OPTIONS) $@ $(RESOURCE_JAR_MANIFEST_FILE) \ @$(JDK_OUTPUTDIR)/lib/_the.resources.jar.contents JARS+=$(JDK_OUTPUTDIR)/lib/rt.jar $(JDK_OUTPUTDIR)/lib/resources.jar @@ -309,7 +348,7 @@ JARS+=$(JDK_OUTPUTDIR)/lib/rt.jar $(JDK_OUTPUTDIR)/lib/resources.jar CHARSETS_JAR_DEPS := -ifneq ($(HOST_OS), windows) +ifneq ($(OPENJDK_TARGET_OS), windows) CHARSETS_EXTRA_FILES:=sun/awt/motif/X11GBK.class \ sun/awt/motif/X11GB2312\$$$$Decoder.class \ sun/awt/motif/X11GB2312.class \ @@ -328,20 +367,22 @@ $(eval $(call SetupArchive,BUILD_CHARSETS_JAR,$(CHARSETS_JAR_DEPS),\ $(CHARSETS_EXTRA_FILES) \ META-INF/services/java.nio.charset.spi.CharsetProvider, \ JAR:=$(JDK_OUTPUTDIR)/lib/charsets.jar, \ - SKIP_METAINF := true)) + SKIP_METAINF := true, \ + CHECK_COMPRESS_JAR:=true)) JARS+=$(JDK_OUTPUTDIR)/lib/charsets.jar ########################################################################################## -ifndef OPENJDK +ifeq ($(ENABLE_JFR), true) $(eval $(call SetupArchive,BUILD_JFR_JAR,,\ SRCS:=$(JDK_OUTPUTDIR)/classes,\ INCLUDES:=com/oracle/jrockit/jfr \ oracle/jrockit/jfr,\ JAR:=$(JDK_OUTPUTDIR)/lib/jfr.jar,\ SKIP_METAINF:=true,\ - MANIFEST:=$(MAINMANIFEST))) + MANIFEST:=$(MAINMANIFEST), \ + CHECK_COMPRESS_JAR:=true)) JARS+=$(JDK_OUTPUTDIR)/lib/jfr.jar endif @@ -356,13 +397,14 @@ $(eval $(call SetupArchive,BUILD_JSSE_JAR,,\ com/sun/net/ssl/internal/ssl,\ JAR:=$(JDK_OUTPUTDIR)/lib/jsse.jar,\ SKIP_METAINF:=true,\ - MANIFEST:=$(MAINMANIFEST))) + MANIFEST:=$(MAINMANIFEST), \ + CHECK_COMPRESS_JAR:=true)) JARS+=$(JDK_OUTPUTDIR)/lib/jsse.jar ########################################################################################## -ifneq ($(PLATFORM)-$(ARCH_DATA_MODEL),windows-64) +ifneq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL),windows-64) SUNPKCS11_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunpkcs11.jar ifndef OPENJDK @@ -544,7 +586,7 @@ endif ########################################################################################## -ifeq ($(PLATFORM),windows) +ifeq ($(OPENJDK_TARGET_OS),windows) SUNMSCAPI_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunmscapi.jar @@ -574,7 +616,7 @@ endif ########################################################################################## -ifeq ($(PLATFORM),solaris) +ifeq ($(OPENJDK_TARGET_OS),solaris) ifndef OPENJDK UCRYPTO_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/ucrypto.jar @@ -661,7 +703,8 @@ $(eval $(call SetupArchive,BUILD_TOOLS_JAR,$(TOOLS_JAR_DEPS),\ META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \ META-INF/services/com.sun.tools.internal.xjc.Plugin,\ JAR:=$(JDK_OUTPUTDIR)/lib/tools.jar,\ - SKIP_METAINF:=true)) + SKIP_METAINF:=true, \ + CHECK_COMPRESS_JAR:=true)) JARS+=$(JDK_OUTPUTDIR)/lib/tools.jar @@ -696,6 +739,7 @@ EXPORTED_PRIVATE_PKGS = com.sun.servicetag \ com.oracle.nio $(IMAGES_OUTPUTDIR)/symbols/_the.symbols: $(JDK_OUTPUTDIR)/lib/rt.jar + $(RM) -rf $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym $(MKDIR) -p $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym $(JAVA) \ -Xbootclasspath/a:$(JDK_OUTPUTDIR)/classes \ @@ -711,7 +755,8 @@ MAKE_SURE_DIR_EXISTS_DUMMY := $(shell $(MKDIR) -p $(IMAGES_OUTPUTDIR)/symbols) $(eval $(call SetupArchive,BUILD_CT_SYM,$(IMAGES_OUTPUTDIR)/symbols/_the.symbols,\ SRCS:=$(IMAGES_OUTPUTDIR)/symbols,\ INCLUDES:=META-INF/sym,\ - JAR:=$(JDK_OUTPUTDIR)/lib/ct.sym)) + JAR:=$(JDK_OUTPUTDIR)/lib/ct.sym, \ + CHECK_COMPRESS_JAR:=true)) JARS+=$(JDK_OUTPUTDIR)/lib/ct.sym @@ -765,7 +810,7 @@ SRC_ZIP_INCLUDES = \ org/xml/sax \ sunw -SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes +SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gensrc SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/impsrc SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gendocsrc_rmic @@ -776,16 +821,16 @@ endif # Need to copy launcher src files into desired directory structure # before zipping the sources. LAUNCHER_SRC_FILES := $(wildcard $(JDK_TOPDIR)/src/share/bin/*) \ - $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/java_md*) + $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/java_md*) LAUNCHER_ZIP_SRC := $(patsubst $(JDK_TOPDIR)/src/share/bin/%,$(IMAGES_OUTPUTDIR)/src/launcher/%,\ - $(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/%,$(IMAGES_OUTPUTDIR)/src/launcher/%,\ + $(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/%,$(IMAGES_OUTPUTDIR)/src/launcher/%,\ $(LAUNCHER_SRC_FILES))) $(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/share/bin/% $(MKDIR) -p $(@D) $(CP) $< $@ -$(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/% +$(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/% $(MKDIR) -p $(@D) $(CP) $< $@ diff --git a/jdk/makefiles/GendataBreakIterator.gmk b/jdk/makefiles/GendataBreakIterator.gmk index 6321afbf7ad..9c12334b7d9 100644 --- a/jdk/makefiles/GendataBreakIterator.gmk +++ b/jdk/makefiles/GendataBreakIterator.gmk @@ -35,10 +35,10 @@ # TEXT_SRCDIR = $(JDK_TOPDIR)/src/share/classes TEXT_PKG = sun/text/resources -TEXT_SOURCES = %$(TEXT_PKG)/BreakIteratorRules.java \ - %$(TEXT_PKG)/BreakIteratorInfo.java \ - %$(TEXT_PKG)/BreakIteratorRules_th.java \ - %$(TEXT_PKG)/BreakIteratorInfo_th.java +TEXT_SOURCES = $(TEXT_PKG)/BreakIteratorRules.java \ + $(TEXT_PKG)/BreakIteratorInfo.java \ + $(TEXT_PKG)/BreakIteratorRules_th.java \ + $(TEXT_PKG)/BreakIteratorInfo_th.java # Generate BreakIteratorData BREAK_ITERATOR_DIR = $(JDK_OUTPUTDIR)/break_iterator diff --git a/jdk/makefiles/GendataFontConfig.gmk b/jdk/makefiles/GendataFontConfig.gmk index dec8b5bb0fc..860b233857f 100644 --- a/jdk/makefiles/GendataFontConfig.gmk +++ b/jdk/makefiles/GendataFontConfig.gmk @@ -25,13 +25,13 @@ GENDATA_FONT_CONFIG_DST := $(JDK_OUTPUTDIR)/lib -ifeq ($(PLATFORM), windows) +ifeq ($(OPENJDK_TARGET_OS), windows) GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/windows/classes/sun/awt/windows GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties GENDATA_FONT_CONFIG_SRC_PREFIX := endif -ifeq ($(PLATFORM), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) GENDATA_FONT_CONFIG_SRC_PREFIX := linux. ifdef OPENJDK GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/solaris/classes/sun/awt/fontconfigs @@ -52,27 +52,29 @@ GENDATA_FONT_CONFIG_SRC_FILES := \ endif endif -ifeq ($(PLATFORM), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/solaris/classes/sun/awt/fontconfigs GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties GENDATA_FONT_CONFIG_SRC_PREFIX := solaris. endif -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/macosx/classes/sun/awt/fontconfigs GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties GENDATA_FONT_CONFIG_SRC_PREFIX := macosx. -endif # PLATFORM +endif # OPENJDK_TARGET_OS ### $(GENDATA_FONT_CONFIG_DST)/%.src : $(GENDATA_FONT_CONFIG_SRC_DIR)/$(GENDATA_FONT_CONFIG_SRC_PREFIX)% $(MKDIR) -p $(@D) $(CP) $< $@ + $(CHMOD) 644 $@ $(GENDATA_FONT_CONFIG_DST)/%.bfc : $(GENDATA_FONT_CONFIG_SRC_DIR)/$(GENDATA_FONT_CONFIG_SRC_PREFIX)%.properties $(MKDIR) -p $(@D) $(TOOL_COMPILEFONTCONFIG) $< $@ + $(CHMOD) 444 $@ ### diff --git a/jdk/makefiles/GendataHtml32dtd.gmk b/jdk/makefiles/GendataHtml32dtd.gmk index 29ae389bd0b..f1a2c95d55a 100644 --- a/jdk/makefiles/GendataHtml32dtd.gmk +++ b/jdk/makefiles/GendataHtml32dtd.gmk @@ -32,5 +32,4 @@ $(HTML32DTD): $(BUILD_TOOLS) $(RM) $@ ($(TOOL_DTDBUILDER) html32 > $@) || exit 1 -GENDATA_HTML32DTD += $(HTML32DTD) - +GENDATA_HTML32DTD += $(HTML32DTD) \ No newline at end of file diff --git a/jdk/makefiles/GenerateClasses.gmk b/jdk/makefiles/GenerateClasses.gmk index a5e68c8b77e..dda0558b0b9 100644 --- a/jdk/makefiles/GenerateClasses.gmk +++ b/jdk/makefiles/GenerateClasses.gmk @@ -27,7 +27,13 @@ default: all include $(SPEC) include MakeBase.gmk -include RMICompile.gmk +include RMICompilation.gmk + +# To ensure the latest stub generator files are picked up from corba repo +# when available, we need to run with latest rmic version available. +ifeq ($(CROSS_COMPILE_ARCH),) + RMIC := $(UNCYGDRIVE) $(JDK_OUTPUTDIR)/bin/rmic +endif CLASSES_DIR := $(JDK_OUTPUTDIR)/classes # NOTE: If the smart javac dependency management is reintroduced, these classes risk diff --git a/jdk/makefiles/GenerateData.gmk b/jdk/makefiles/GenerateData.gmk index d2eebf01097..54b367cb343 100644 --- a/jdk/makefiles/GenerateData.gmk +++ b/jdk/makefiles/GenerateData.gmk @@ -69,6 +69,7 @@ $(GENDATA_CURDATA): $(JDK_TOPDIR)/src/share/classes/java/util/CurrencyData.prope $(RM) $@ $(TOOL_GENERATECURRENCYDATA) -o $@.temp < $< $(MV) $@.temp $@ + $(CHMOD) 444 $@ GENDATA += $(GENDATA_CURDATA) diff --git a/jdk/makefiles/GenerateJavaSources.gmk b/jdk/makefiles/GenerateJavaSources.gmk index 70b464a2730..2474bf6586e 100644 --- a/jdk/makefiles/GenerateJavaSources.gmk +++ b/jdk/makefiles/GenerateJavaSources.gmk @@ -65,7 +65,7 @@ GENSRC += $(GENSRC_BUFFER) include GensrcExceptions.gmk GENSRC += $(GENSRC_EXCEPTIONS) -ifneq ($(HOST_OS),windows) +ifneq ($(OPENJDK_TARGET_OS),windows) include GensrcIcons.gmk GENSRC += $(GENSRC_ICONS) @@ -78,6 +78,11 @@ ifndef DISABLE_NIMBUS GENSRC += $(GENSRC_SWING_NIMBUS) endif +ifeq ($(OPENJDK_TARGET_OS), macosx) + include GensrcJObjC.gmk + GENSRC += $(GENSRC_JOBJC) +endif + $(GENSRC) : $(BUILD_TOOLS) # The exception handling of swing beaninfo @@ -100,7 +105,10 @@ all: $(GENSRC) $(GENSRC_SWING_BEANINFO) $(MKDIR) -p gensrc/javax/swing/plaf && \ $(CP) -rp gensrc_swing/javax/swing/plaf/* gensrc/javax/swing/plaf) \ fi -ifneq ($(HOST_OS),windows) + if [ -d $(JDK_OUTPUTDIR)/gensrc_jobjc ] ; then \ + (cd $(JDK_OUTPUTDIR) && cp -rp gensrc_jobjc/src/* gensrc) \ + fi +ifneq ($(OPENJDK_TARGET_OS),windows) (cd $(JDK_OUTPUTDIR) && \ $(CP) -rp gensrc_icons/* gensrc && \ $(CP) -rp gensrc_x11wrappers/classes/* gensrc) diff --git a/jdk/makefiles/GensrcBuffer.gmk b/jdk/makefiles/GensrcBuffer.gmk index bc9c150da6b..4ae466ebef7 100644 --- a/jdk/makefiles/GensrcBuffer.gmk +++ b/jdk/makefiles/GensrcBuffer.gmk @@ -198,6 +198,7 @@ define SetupGenBuffer $(if $(12),$1_$(strip $(12))) $(if $(13),$1_$(strip $(13))) $(if $(14),$1_$(strip $(14))) + $(if $(15),$(error Internal makefile error: Too many arguments to SetupGenBuffer, please update GensrcBuffer.gmk)) $(call fixRw,$1,$$($1_RW)) $(call typesAndBits,$1,$$($1_type),$$($1_BO)) diff --git a/jdk/makefiles/GensrcIcons.gmk b/jdk/makefiles/GensrcIcons.gmk index 3e9f07437ba..733f25461a9 100644 --- a/jdk/makefiles/GensrcIcons.gmk +++ b/jdk/makefiles/GensrcIcons.gmk @@ -29,7 +29,7 @@ GENSRC_ICONS_TMP := $(JDK_OUTPUTDIR)/gensrc_icons GENSRC_ICONS_DST := $(GENSRC_ICONS_TMP)/sun/awt/X11 ifdef OPENJDK - ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API) + ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API) else ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/closed/solaris endif @@ -41,7 +41,7 @@ GENSRC_ICONS_SRC += \ $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon48.png -ICONPATH := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/awt/X11 +ICONPATH := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/awt/X11 GENSRC_ICONS_SRC += \ $(ICONPATH)/security-icon-bw16.png \ @@ -86,7 +86,7 @@ $$($1_TARGET32) : $2/$1 $(GENSRC_ICONS_TMP)/_the.dir $(ECHO) "public class $$($1_NAME32) {" >> $$@.tmp $(ECHO) "public static int[] $$($1_SHORTNAME) = { " >> $$@.tmp # TODO FIX FIX FIX -ifneq ($(PLATFORM),macosx) +ifneq ($(OPENJDK_TARGET_OS),macosx) $(CAT) $$< | $(TOOL_TOBIN) >> $$@.tmp endif $(ECHO) "}; }" >> $$@.tmp @@ -100,7 +100,7 @@ $$($1_TARGET64) : $2/$1 $(GENSRC_ICONS_TMP)/_the.dir $(ECHO) "public class $$($1_NAME64) {" >> $$@.tmp $(ECHO) "public static long[] $$($1_SHORTNAME) = { " >> $$@.tmp # TODO FIX FIX FIX -ifneq ($(PLATFORM),macosx) +ifneq ($(OPENJDK_TARGET_OS),macosx) $(CAT) $$< | $(TOOL_TOBIN) >> $$@.tmp endif $(ECHO) "}; }" >> $$@.tmp diff --git a/jdk/makefiles/GensrcJObjC.gmk b/jdk/makefiles/GensrcJObjC.gmk new file mode 100644 index 00000000000..d44df8193df --- /dev/null +++ b/jdk/makefiles/GensrcJObjC.gmk @@ -0,0 +1,80 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +GENSRC_JOBJC := + +JOBJC_FRAMEWORKS := Foundation CoreFoundation AppKit +FRAMEWORKS_DIR := /System/Library/Frameworks +GBM := /usr/bin/gen_bridge_metadata + +JOBJC_SRC := $(JDK_TOPDIR)/src/macosx/native/jobjc +JOBJC_TMP := $(JDK_OUTPUTDIR)/gensrc_jobjc +JOBJC_DST := $(JDK_OUTPUTDIR)/gensrc_jobjc/src + +# +# Build generator +# +$(eval $(call SetupJavaCompilation,BUILD_JOBJC_PRIMITIVE_CODER,\ + SETUP:=GENERATE_OLDBYTECODE,\ + INCLUDES:=core/java \ + com/apple,\ + HEADERS :=$(JOBJC_DST)/jni_headers/core ,\ + SRC:=$(JOBJC_SRC)/src \ + $(JOBJC_SRC)/src/generator/java, \ + BIN:=$(JOBJC_TMP)/bin)) + +GENSRC_JOBJC += $(JOBJC_TMP)/bin/_the.batch + +# +# Generate bridge support +# +BRIDGESUPPORT := $(addprefix $(JOBJC_TMP)/bridge/,$(addsuffix Full.bridgesupport,$(JOBJC_FRAMEWORKS))) + +$(JOBJC_TMP)/bridge/%Full.bridgesupport : $(FRAMEWORKS_DIR)/%.framework/Headers/*.h + $(MKDIR) -p $(@D) + if [ -f $(FRAMEWORKS_DIR)/$*.framework/Resources/BridgeSupport/$(@F) ]; then \ + cp $(FRAMEWORKS_DIR)/$*.framework/Resources/BridgeSupport/$(@F) $@ ;\ + else \ + $(GBM) -F complete --framework $* -o $@ ; \ + fi + +# +# Find Xbootclasspath +# +$(JOBJC_TMP)/_the.generator_bootclasspath : $(JOBJC_TMP)/bin/_the.batch + $(JAVA) -cp $(JOBJC_TMP)/bin com.apple.internal.jobjc.generator.BootClassPathMinus JObjC.jar > $@.tmp + $(MV) $@.tmp $@ + + +# +# Run generator +# +TOOL_JOBJC := $(JAVA) -cp $(JOBJC_TMP)/bin -ea com.apple.internal.jobjc.generator.Generator + +$(JOBJC_TMP)/_the.generator : $(JOBJC_TMP)/bin/_the.batch $(JOBJC_TMP)/_the.generator_bootclasspath $(BRIDGESUPPORT) + $(JAVA) -d64 -Xbootclasspath:`$(CAT) $(JOBJC_TMP)/_the.generator_bootclasspath` -cp $(JOBJC_TMP)/bin -ea com.apple.internal.jobjc.generator.Generator dst=$(JOBJC_DST) frameworks=$(JOBJC_TMP)/bridge + $(TOUCH) $@ + +GENSRC_JOBJC += $(JOBJC_TMP)/_the.generator diff --git a/jdk/makefiles/GensrcMisc.gmk b/jdk/makefiles/GensrcMisc.gmk index d2acd806e5c..08d64bbe8c0 100644 --- a/jdk/makefiles/GensrcMisc.gmk +++ b/jdk/makefiles/GensrcMisc.gmk @@ -53,9 +53,9 @@ GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/tools/jconsole/Version.java ########################################################################################## -ifeq ($(HOST_OS_API),posix) - UPSUFFIX:=$(PLATFORM) - ifeq ($(PLATFORM),macosx) +ifeq ($(OPENJDK_TARGET_OS_API),posix) + UPSUFFIX:=$(OPENJDK_TARGET_OS) + ifeq ($(OPENJDK_TARGET_OS),macosx) UPSUFFIX:=bsd endif # UNIXProcess.java is different for solaris and linux. We need to copy @@ -64,7 +64,7 @@ ifeq ($(HOST_OS_API),posix) $(JDK_OUTPUTDIR)/gensrc_misc/java/lang/UNIXProcess.java : \ $(JDK_TOPDIR)/src/solaris/classes/java/lang/UNIXProcess.java.$(UPSUFFIX) $(MKDIR) -p $(@D) - $(ECHO) Copying UNIXProcess.java.$(PLATFORM) to java/lang/UNIXProcess.java + $(ECHO) Copying UNIXProcess.java.$(OPENJDK_TARGET_OS) to java/lang/UNIXProcess.java $(CP) $< $@ $(CHMOD) u+rw $@ @@ -74,8 +74,8 @@ endif ########################################################################################## ifndef OPENJDK -ifneq ($(PLATFORM), windows) -ifneq ($(PLATFORM), macosx) +ifneq ($(OPENJDK_TARGET_OS), windows) +ifneq ($(OPENJDK_TARGET_OS), macosx) # These file(s) are needed for building fake .so libs on !windows for jdbcodbc $(JDK_OUTPUTDIR)/gensrc_c/libjdbcodbc/dummyodbc1.c : @@ -101,85 +101,98 @@ GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/ch/SocketOptionRegistry.java GENSRC_SOR_SRC := $(JDK_TOPDIR)/src/share/native/sun/nio/ch GENSRC_SOR_SRC_FILE := genSocketOptionRegistry.c -GENSRC_SOR_BIN := $(JDK_OUTPUTDIR)/objs/gensrc/genSocketOptionRegistry -GENSRC_SOR_EXE := $(GENSRC_SOR_BIN)/genSocketOptionRegistry$(EXE_SUFFIX) +GENSRC_SOR_BIN := $(JDK_OUTPUTDIR)/gensrc_misc/genSocketOptionRegistry SOR_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSRC_SOR_SRC)/$(GENSRC_SOR_SRC_FILE) | \ $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') -$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/ch/SocketOptionRegistry.java : $(GENSRC_SOR_EXE) - $(MKDIR) -p $(@D) - NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(SOR_COPYRIGHT_YEARS)" > $@.tmp - $(GENSRC_SOR_EXE) >> $@.tmp - $(MV) $@.tmp $@ - - $(eval $(call SetupNativeCompilation,BUILD_GENSRC_SOR_EXE,\ SRC:=$(GENSRC_SOR_SRC),\ INCLUDE_FILES:=$(GENSRC_SOR_SRC_FILE),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB),\ - BIN:=$(GENSRC_SOR_BIN),\ - EXE:=$(GENSRC_SOR_EXE))) + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_LD),\ + OBJECT_DIR:=$(GENSRC_SOR_BIN),\ + OUTPUT_DIR:=$(GENSRC_SOR_BIN),\ + PROGRAM:=genSocketOptionRegistry)) + +ifneq ($(JAVASE_EMBEDDED), true) +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/ch/SocketOptionRegistry.java : $(BUILD_GENSRC_SOR_EXE) + $(MKDIR) -p $(@D) + NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(SOR_COPYRIGHT_YEARS)" > $@.tmp + $(BUILD_GENSRC_SOR_EXE) >> $@.tmp + $(MV) $@.tmp $@ +else +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/ch/SocketOptionRegistry.java : $(JDK_TOPDIR)/src/closed/solaris/classes/sun/nio/ch/SocketOptionRegistry-$(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH).java + $(MKDIR) -p $(@D) + $(CP) $< $@ +endif ########################################################################################## -ifneq ($(PLATFORM),windows) +ifneq ($(OPENJDK_TARGET_OS),windows) GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/UnixConstants.java -GENSRC_UC_SRC := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/fs +GENSRC_UC_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/fs GENSRC_UC_SRC_FILE := genUnixConstants.c -GENSRC_UC_BIN := $(JDK_OUTPUTDIR)/objs/gensrc/genUnixConstants -GENSRC_UC_EXE := $(GENSRC_UC_BIN)/genUnixConstants$(EXE_SUFFIX) +GENSRC_UC_BIN := $(JDK_OUTPUTDIR)/gensrc_misc/genUnixConstants UC_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSRC_UC_SRC)/$(GENSRC_UC_SRC_FILE) | \ $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') -$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/UnixConstants.java : $(GENSRC_UC_EXE) - $(MKDIR) -p $(@D) - NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(UC_COPYRIGHT_YEARS)" > $@.tmp - $(GENSRC_UC_EXE) >> $@.tmp - $(MV) $@.tmp $@ - - $(eval $(call SetupNativeCompilation,BUILD_GENSRC_UC_EXE,\ SRC:=$(GENSRC_UC_SRC),\ INCLUDE_FILES:=$(GENSRC_UC_SRC_FILE),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB),\ - BIN:=$(GENSRC_UC_BIN),\ - EXE:=$(GENSRC_UC_EXE))) + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_CC),\ + OBJECT_DIR:=$(GENSRC_UC_BIN),\ + OUTPUT_DIR:=$(GENSRC_UC_BIN),\ + PROGRAM:=genUnixConstants)) + +ifneq ($(JAVASE_EMBEDDED), true) +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/UnixConstants.java : $(BUILD_GENSRC_UC_EXE) + $(MKDIR) -p $(@D) + NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(UC_COPYRIGHT_YEARS)" > $@.tmp + $(BUILD_GENSRC_UC_EXE) >> $@.tmp + $(MV) $@.tmp $@ +else +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/UnixConstants.java : $(JDK_TOPDIR)/src/closed/solaris/classes/sun/nio/fs/UnixConstants-$(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH).java + $(MKDIR) -p $(@D) + $(CP) $< $@ +endif endif ########################################################################################## -ifeq ($(PLATFORM),solaris) +ifeq ($(OPENJDK_TARGET_OS),solaris) GENSRC_MISC += $(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/SolarisConstants.java -GENSRC_SOL_SRC := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/native/sun/nio/fs +GENSRC_SOL_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/sun/nio/fs GENSRC_SOL_SRC_FILE := genSolarisConstants.c -GENSRC_SOL_BIN := $(JDK_OUTPUTDIR)/objs/gensrc/genSolarisConstants -GENSRC_SOL_EXE := $(GENSRC_SOL_BIN)/genSolarisConstants$(EXE_SUFFIX) +GENSRC_SOL_BIN := $(JDK_OUTPUTDIR)/gensrc_misc/genSolarisConstants SOL_COPYRIGHT_YEARS = $(shell $(CAT) $(GENSRC_SOL_SRC)/$(GENSRC_SOL_SRC_FILE) | \ $(NAWK) '/^.*Copyright.*Oracle/ { printf "%s %s",$$4,$$5 }') -$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/SolarisConstants.java : $(GENSRC_SOL_EXE) - $(MKDIR) -p $(@D) - NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(SOL_COPYRIGHT_YEARS)" > $@.tmp - $(GENSRC_SOL_EXE) >> $@.tmp - $(MV) $@.tmp $@ - - $(eval $(call SetupNativeCompilation,BUILD_GENSRC_SOL_EXE,\ SRC:=$(GENSRC_SOL_SRC),\ INCLUDE_FILES:=$(GENSRC_SOL_SRC_FILE),\ LANG:=C,\ - CFLAGS:=$(CFLAGS_JDKLIB),\ - BIN:=$(GENSRC_SOL_BIN),\ - EXE:=$(GENSRC_SOL_EXE))) + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_CC),\ + OBJECT_DIR:=$(GENSRC_SOL_BIN),\ + OUTPUT_DIR:=$(GENSRC_SOL_BIN),\ + PROGRAM:=genSolarisConstants)) + +$(JDK_OUTPUTDIR)/gensrc_misc/sun/nio/fs/SolarisConstants.java : $(BUILD_GENSRC_SOL_EXE) + $(MKDIR) -p $(@D) + NAWK="$(NAWK)" SH="$(SH)" $(SH) -e $(JDK_TOPDIR)/makefiles/scripts/addNotices.sh "$(SOL_COPYRIGHT_YEARS)" > $@.tmp + $(BUILD_GENSRC_SOL_EXE) >> $@.tmp + $(MV) $@.tmp $@ + endif diff --git a/jdk/makefiles/GensrcProperties.gmk b/jdk/makefiles/GensrcProperties.gmk index 4d663534b5a..f4eea941f33 100644 --- a/jdk/makefiles/GensrcProperties.gmk +++ b/jdk/makefiles/GensrcProperties.gmk @@ -46,7 +46,7 @@ define add_properties_to_compile # Strip away prefix and suffix, # leaving for example: sun/util/resources/CurrencyNames_sv - $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/%.properties,%,\ + $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/%.properties,%,\ $$(patsubst $(JDK_TOPDIR)/src/share/classes/%.properties,%,$2)) # Apply optional name transformation, example: hz_TW -> hz_HK @@ -75,7 +75,7 @@ define add_properties_to_clean # Strip away prefix and suffix, # leaving for example: sun/util/resources/CurrencyNames_sv - $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/%.properties,%,\ + $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/%.properties,%,\ $$(patsubst $(JDK_TOPDIR)/src/share/classes/%.properties,%,$2)) # Apply optional name transformation, example: hz_TW -> hz_HK @@ -124,7 +124,7 @@ $(eval $(call add_properties_to_compile,COM_SUN_ACCESSIBILITY_HK,\ $(eval $(call add_properties_to_clean,COM_SUN_IMAGEIO,\ $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/imageio -name "*.properties"))) #com/sun/java/swing/plaf/gtk/resources -ifneq ($(PLATFORM), windows) +ifneq ($(OPENJDK_TARGET_OS), windows) # Only compile GTK resource bundles on Solaris/Linux $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_GTK,\ $(shell find $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk/resources -name "*.properties"),\ @@ -264,6 +264,10 @@ $(eval $(call add_properties_to_compile,SUN_TOOLS_JAR_HK,\ $(eval $(call add_properties_to_clean,SUN_TOOLS_SERIALVER,\ $(shell find $(JDK_TOPDIR)/src/share/classes/sun/tools/javac/resources -name "javac.properties"))) +#sun/tools/jconsole/resources +$(eval $(call add_properties_to_clean,SUN_TOOLS_JCONSOLE,\ + $(shell find $(JDK_TOPDIR)/src/share/classes/sun/tools/jconsole/resources -name "*.properties"))) + #sun/tools/serialver $(eval $(call add_properties_to_clean,SUN_TOOLS_SERIALVER,\ $(shell find $(JDK_TOPDIR)/src/share/classes/sun/tools/serialver -name "*.properties"),,,resources)) diff --git a/jdk/makefiles/GensrcX11Wrappers.gmk b/jdk/makefiles/GensrcX11Wrappers.gmk index 03938bbfc1b..9dca546d1f8 100644 --- a/jdk/makefiles/GensrcX11Wrappers.gmk +++ b/jdk/makefiles/GensrcX11Wrappers.gmk @@ -30,10 +30,10 @@ GENSRC_SIZER_SRC := $(JDK_TOPDIR)/src/solaris/classes/sun/awt/X11/generator GENSRC_SIZES := -ifeq ($(PLATFORM)-$(LIBARCH), solaris-i386) +ifeq ($(OPENJDK_TARGET_OS)-$(LIBARCH), solaris-i386) GENSRC_SIZES := sizes.32 sizes.64 -else ifeq ($(PLATFORM), solaris) -isalist:=$(shell $(ISAINFO)) +else ifeq ($(OPENJDK_TARGET_OS), solaris) +isalist:=$(shell isainfo) ifneq (,$(findstring sparcv9, $(isalist))) # On sparcv9 we generate both 32 and 64-bit sizers in spite of ARCH_DATA_MODEL. GENSRC_SIZES := sizes.32 sizes.64 @@ -46,7 +46,7 @@ GENSRC_SIZES := sizes.32 endif # amd64 endif # sparcv9 else # !solaris -ifeq ($(PLATFORM), macosx) +ifeq ($(OPENJDK_TARGET_OS), macosx) GENSRC_SIZES := sizes.32 sizes.64 else # !macosx GENSRC_SIZES := sizes.$(ARCH_DATA_MODEL) @@ -62,18 +62,23 @@ $(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.%.c : $(GENSRC_SIZER_SRC)/xlibtypes.txt $(TOOL_WRAPPERGENERATOR) $(@D) $< "sizer" $* $(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.%.exe : $(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.%.c - (cd $(@D) && $(CC) -m$* -o $@ $< $(CFLAGS_JDKLIB) \ + (cd $(@D) && $(HOST_CC) -m$* -o $@ $< \ + -I$(JDK_OUTPUTDIR)/include \ + -I$(JDK_TOPDIR)/src/share/javavm/export \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/javavm/export \ + -I$(JDK_TOPDIR)//src/share/native/common \ + -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/native/common \ -I$(JDK_TOPDIR)/src/solaris/native/sun/awt \ -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \ -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils -lc) -ifeq ($(PLATFORM)-$(LIBARCH), solaris-i386) +ifeq ($(OPENJDK_TARGET_OS)-$(LIBARCH), solaris-i386) $(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.32 : $(GENSRC_X11WRAPPERS_TMP)/sizer/sizer.32.exe $< > $@.tmp $(MV) $@.tmp $@ -$(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.64 : $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/awt/X11/generator/sizes.64-$(PLATFORM)-$(LIBARCH) +$(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.64 : $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/awt/X11/generator/sizes.64-$(OPENJDK_TARGET_OS)-$(LIBARCH) $(MKDIR) -p $(@D) $(CP) $< $@ else @@ -88,9 +93,9 @@ $(GENSRC_X11WRAPPERS_TMP)/classes/_the.classes : $(foreach S,$(GENSRC_SIZES),$(G $(MKDIR) -p $(@D)/sun/awt/X11 $(RM) $(@D)/sun/awt/X11/* $(TOOL_WRAPPERGENERATOR) $(@D)/sun/awt/X11 $(GENSRC_SIZER_SRC)/xlibtypes.txt "gen" $(GENSRC_X11WRAPPERS_TMP)/sizer/sizes -ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64) - $(ECHO) COMPARING $@ and $(GENSRC_SIZER_SRC)/sizes.64-$(PLATFORM)-i386 - $(DIFF) $(GENSRC_X11WRAPPERS_TMP)/sizes.64 $(GENSRC_SIZER_SRC)/sizes.64-$(PLATFORM)-i386 +ifeq ($(OPENJDK_TARGET_OS)-$(LIBARCH), solaris-amd64) + $(ECHO) COMPARING $(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.64 and $(GENSRC_SIZER_SRC)/sizes.64-$(OPENJDK_TARGET_OS)-i386 + $(DIFF) $(GENSRC_X11WRAPPERS_TMP)/sizer/sizes.64 $(GENSRC_SIZER_SRC)/sizes.64-$(OPENJDK_TARGET_OS)-i386 endif $(TOUCH) $@ diff --git a/jdk/makefiles/Images.gmk b/jdk/makefiles/Images.gmk index 9315955117e..bda32366082 100644 --- a/jdk/makefiles/Images.gmk +++ b/jdk/makefiles/Images.gmk @@ -34,15 +34,20 @@ include Tools.gmk images: jre-image jdk-image -ifeq ($(HOST_OS),solaris) +ifeq ($(OPENJDK_TARGET_OS),solaris) define install-file $(MKDIR) -p $(@D) - $(CP) -r -P '$<' '$(@D)' + $(CP) -f -r -P '$<' '$(@D)' +endef +else ifeq ($(OPENJDK_TARGET_OS),macosx) +define install-file + $(MKDIR) -p $(@D) + $(CP) -fpRP '$<' '$@' endef else define install-file $(MKDIR) -p $(@D) - $(CP) -P '$<' '$@' + $(CP) -fP '$<' '$@' endef endif @@ -67,7 +72,7 @@ $(JDK_IMAGE_DIR)/jre/bin/%: $(JDK_OUTPUTDIR)/bin/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) -NOT_JRE_BIN_FILES = \ +NOT_JRE_BIN_FILES := \ appletviewer$(EXE_SUFFIX) \ extcheck$(EXE_SUFFIX) \ idlj$(EXE_SUFFIX) \ @@ -107,7 +112,12 @@ WINDOWS_JDK_BIN_FILES = \ # Find all files in bin dir ALL_BIN_LIST := $(shell $(FIND) $(JDK_OUTPUTDIR)/bin -type f) -ifeq ($(HOST_OS),windows) + +# For unknown reason the debuginfo files for binaries are not put into images +# e.g filter them out +ALL_BIN_LIST := $(filter-out %.debuginfo %.diz, $(ALL_BIN_LIST)) + +ifeq ($(OPENJDK_TARGET_OS),windows) JDK_BIN_LIST := $(filter $(addprefix %,$(WINDOWS_JDK_BIN_FILES)), $(ALL_BIN_LIST)) else JDK_BIN_LIST := $(ALL_BIN_LIST) @@ -147,7 +157,7 @@ NOT_JRE_LIB_FILES := \ ct.sym JDK_LIB_FILES := $(NOT_JRE_LIB_FILES) -ifeq ($(HOST_OS), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) JDK_LIB_FILES += jexec endif @@ -236,14 +246,21 @@ JDK_MAN_PAGES = \ wsimport.1 \ xjc.1 -ifeq ($(HOST_OS), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) MAN_SRC_DIR:=$(JDK_TOPDIR)/src/linux/doc MAN1_SUBDIR:=man endif -ifeq ($(HOST_OS), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) MAN_SRC_DIR:=$(JDK_TOPDIR)/src/solaris/doc MAN1_SUBDIR:=sun/man/man1 endif +ifeq ($(OPENJDK_TARGET_OS), macosx) + MAN_SRC_DIR:=$(JDK_TOPDIR)/src/bsd/doc + MAN1_SUBDIR:=man + JDK_MAN_PAGES := $(filter-out jcmd.1, $(JDK_MAN_PAGES)) + JDK_MAN_PAGES := $(filter-out jvisualvm.1, $(JDK_MAN_PAGES)) +endif + $(JRE_IMAGE_DIR)/man/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) @@ -286,7 +303,7 @@ $(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/% $(ECHO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(call install-ja-manpage,PCK) -ifeq ($(HOST_OS), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) $(JRE_IMAGE_DIR)/man/ja/man1/%: $(MAN_SRC_DIR)/$(MAN1_SUBDIR)/ja/% $(ECHO) Converting $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) @@ -302,7 +319,7 @@ $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/jcmd.1 $(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1 $(MKDIR) -p $(@D) $(TOUCH) $@ -ifeq ($(HOST_OS), linux) +ifeq ($(OPENJDK_TARGET_OS), linux) $(JRE_IMAGE_DIR)/man/ja: $(ECHO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja @@ -312,7 +329,17 @@ ifeq ($(HOST_OS), linux) $(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja endif -ifeq ($(HOST_OS), linux) +ifeq ($(OPENJDK_TARGET_OS), macosx) + $(JRE_IMAGE_DIR)/man/ja: + $(ECHO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja + + $(JDK_IMAGE_DIR)/man/ja: + $(ECHO) Creating $(patsubst $(OUTPUT_ROOT)/%,%,$@) + $(CD) $(@D) && $(RM) ja && $(LN) -s ja_JP.UTF-8 ja +endif + +ifeq ($(OPENJDK_TARGET_OS), linux) JRE_MAN_PAGE_LIST := $(addprefix $(JRE_IMAGE_DIR)/man/man1/,$(JRE_MAN_PAGES)) \ $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JRE_MAN_PAGES)) \ $(JRE_IMAGE_DIR)/man/ja @@ -322,7 +349,7 @@ ifeq ($(HOST_OS), linux) $(JDK_IMAGE_DIR)/man/ja endif -ifeq ($(HOST_OS), solaris) +ifeq ($(OPENJDK_TARGET_OS), solaris) JRE_MAN_PAGE_LIST := $(addprefix $(JRE_IMAGE_DIR)/man/man1/,$(JRE_MAN_PAGES)) \ $(addprefix $(JRE_IMAGE_DIR)/man/ja/man1/,$(JRE_MAN_PAGES)) \ $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JRE_MAN_PAGES)) \ @@ -334,6 +361,16 @@ ifeq ($(HOST_OS), solaris) $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.PCK/man1/,$(JDK_MAN_PAGES)) endif +ifeq ($(OPENJDK_TARGET_OS), macosx) + JRE_MAN_PAGE_LIST := $(addprefix $(JRE_IMAGE_DIR)/man/man1/,$(JRE_MAN_PAGES)) \ + $(addprefix $(JRE_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JRE_MAN_PAGES)) \ + $(JRE_IMAGE_DIR)/man/ja + + JDK_MAN_PAGE_LIST := $(addprefix $(JDK_IMAGE_DIR)/man/man1/,$(JDK_MAN_PAGES)) \ + $(addprefix $(JDK_IMAGE_DIR)/man/ja_JP.UTF-8/man1/,$(JDK_MAN_PAGES)) \ + $(JDK_IMAGE_DIR)/man/ja +endif + ################################################################################ # /demo dir @@ -383,6 +420,7 @@ ifndef OPENJDK $(JDK_IMAGE_DIR)/db/README-JDK.html: $(JDK_TOPDIR)/src/closed/share/db/README-JDK.html $(ECHO) Copying '$(patsubst $(OUTPUT_ROOT)/%,%,$@)' $(install-file) + $(CHMOD) 644 $(@) JDK_DB_TARGETS := $(patsubst $(JDK_TOPDIR)/src/closed/share/db/%,$(IMAGES_OUTPUTDIR)/_unzip/%.unzipped,\ $(shell $(FIND) $(JDK_TOPDIR)/src/closed/share/db -name "*.zip" ! -name "*demo*")) \ @@ -411,7 +449,7 @@ ifdef OPENJDK else JRE_DOC_FILES := COPYRIGHT Welcome.html LICENSE THIRDPARTYLICENSEREADME.txt JDK_DOC_FILES := COPYRIGHT README.html LICENSE THIRDPARTYLICENSEREADME.txt - ifeq ($(HOST_OS), windows) + ifeq ($(OPENJDK_TARGET_OS), windows) JRE_DOC_FILES += README.txt else JRE_DOC_FILES += README @@ -432,32 +470,39 @@ JDK_DOC_TARGETS := $(addprefix $(JDK_IMAGE_DIR)/,$(JDK_DOC_FILES)) $(JRE_IMAGE_DIR)/%: $(JRE_DOC_LOCATION)/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) + $(CHMOD) 444 $(@) $(JDK_IMAGE_DIR)/jre/%: $(JRE_DOC_LOCATION)/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) + $(CHMOD) 444 $(@) $(JRE_IMAGE_DIR)/README.txt: $(JRE_DOC_LOCATION)/README $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(MKDIR) -p $(@D) $(CP) $< $@ + $(CHMOD) 444 $(@) $(JDK_IMAGE_DIR)/jre/README.txt: $(JRE_DOC_LOCATION)/README $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(MKDIR) -p $(@D) $(CP) $< $@ + $(CHMOD) 444 $(@) $(JDK_IMAGE_DIR)/%: $(JDK_DOC_LOCATION)/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) + $(CHMOD) 444 $(@) $(JDK_IMAGE_DIR)/demo/%: $(JDK_DOC_LOCATION)/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) + $(CHMOD) 444 $(@) $(JDK_IMAGE_DIR)/sample/%: $(JDK_DOC_LOCATION)/% $(ECHO) Copying $(patsubst $(OUTPUT_ROOT)/%,%,$@) $(install-file) + $(CHMOD) 444 $(@) JRE_INFO_FILE := $(JRE_IMAGE_DIR)/release JDK_INFO_FILE := $(JDK_IMAGE_DIR)/release @@ -500,7 +545,7 @@ $(JDK_IMAGE_DIR)/src.zip: $(IMAGES_OUTPUTDIR)/src.zip # Post processing (strip etc) ifneq ($(POST_STRIP_CMD),) - ifeq ($(HOST_OS), windows) + ifeq ($(OPENJDK_TARGET_OS), windows) EXEC_LIST:=$(shell $(FIND) $(JDK_OUTPUTDIR)/bin -type f -name \*.exe \ -o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)") else @@ -510,17 +555,43 @@ ifneq ($(POST_STRIP_CMD),) | $(EGREP) 'ELF' | $(CUT) -d':' -f1) endif # Filter out non JRE files and convert to unique touch files to depend on - JRE_EXEC_TOUCH_LIST:=$(patsubst $(JDK_OUTPUTDIR)/%,$(IMAGES_OUTPUTDIR)/_strip/%.stripped,\ + JRE_EXEC_TOUCH_LIST:=$(patsubst $(JDK_OUTPUTDIR)/%,$(IMAGES_OUTPUTDIR)/_strip_jre/%.stripped,\ $(filter-out $(addprefix %,$(NOT_JRE_BIN_FILES) $(NOT_JRE_LIB_FILES)), $(EXEC_LIST))) + JDK_JRE_EXEC_TOUCH_LIST:=$(patsubst $(JDK_OUTPUTDIR)/%, \ + $(IMAGES_OUTPUTDIR)/_strip_jdk/jre/%.stripped, \ + $(filter-out $(addprefix %,$(NOT_JRE_BIN_FILES) $(NOT_JRE_LIB_FILES)), $(EXEC_LIST))) + + JDK_BIN_EXEC_TOUCH_LIST := $(patsubst $(JDK_OUTPUTDIR)/%, \ + $(IMAGES_OUTPUTDIR)/_strip_jdk/%.stripped, \ + $(filter-out $(JDK_OUTPUTDIR)/lib/%, $(EXEC_LIST))) + # Setup a rule for stripping files based on touch files - $(IMAGES_OUTPUTDIR)/_strip/%.stripped: $(JRE_IMAGE_DIR)/% + $(IMAGES_OUTPUTDIR)/_strip_jre/%.stripped: $(JRE_IMAGE_DIR)/% $(ECHO) Stripping $(patsubst $(OUTPUT_ROOT)/%,%,$<) $(CHMOD) u+w $< $(POST_STRIP_CMD) $< $(CHMOD) go-w $< $(MKDIR) -p $(@D) $(TOUCH) $@ + + $(IMAGES_OUTPUTDIR)/_strip_jdk/bin/%.stripped: $(JDK_IMAGE_DIR)/bin/% + $(ECHO) Stripping $(patsubst $(OUTPUT_ROOT)/%,%,$<) + $(CHMOD) u+w $< + $(POST_STRIP_CMD) $< + $(CHMOD) go-w $< + $(MKDIR) -p $(@D) + $(TOUCH) $@ + + # Setup a rule for stripping files based on touch files + $(IMAGES_OUTPUTDIR)/_strip_jdk/jre/%.stripped: $(JDK_IMAGE_DIR)/jre/% + $(ECHO) Stripping $(patsubst $(OUTPUT_ROOT)/%,%,$<) + $(CHMOD) u+w $< + $(POST_STRIP_CMD) $< + $(CHMOD) go-w $< + $(MKDIR) -p $(@D) + $(TOUCH) $@ + endif ################################################################################ @@ -538,7 +609,8 @@ jdk-image: $(JDK_BIN_TARGETS) $(JDKJRE_BIN_TARGETS) \ $(JDK_MAN_PAGE_LIST) $(JDK_SAMPLE_TARGETS) \ $(JDK_DB_TARGETS) $(JDK_INCLUDE_TARGETS) \ $(JDKJRE_DOC_TARGETS) $(JDK_DOC_TARGETS) \ - $(JDK_INFO_FILE) $(JDK_IMAGE_DIR)/src.zip + $(JDK_INFO_FILE) $(JDK_JRE_EXEC_TOUCH_LIST) $(JDK_BIN_EXEC_TOUCH_LIST) \ + $(JDK_IMAGE_DIR)/src.zip ################################################################################ diff --git a/jdk/makefiles/Import.gmk b/jdk/makefiles/Import.gmk new file mode 100644 index 00000000000..eee94e221d6 --- /dev/null +++ b/jdk/makefiles/Import.gmk @@ -0,0 +1,243 @@ +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code 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 +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +default: all + +include $(SPEC) +include MakeBase.gmk + +####### + +IMPORT_TARGET_FILES := + +IMPORT_CLASSES := CORBA JAXP JAXWS LANGTOOLS +IMPORT_SOURCES := CORBA JAXP JAXWS LANGTOOLS +# Only Corba has binaries +IMPORT_BINARIES := CORBA + +####### + +# Put the libraries here. Different locations for different target apis. +ifeq ($(OPENJDK_TARGET_OS_API),posix) + ifneq ($(OPENJDK_TARGET_OS),macosx) + INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/lib/$(LIBARCH) + else + INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/lib + endif + HOTSPOT_LIB_DIR:=$(HOTSPOT_DIST)/jre/lib/$(LIBARCH) +else + INSTALL_LIBRARIES_HERE:=$(JDK_OUTPUTDIR)/bin + HOTSPOT_LIB_DIR:=$(HOTSPOT_DIST)/jre/bin +endif + +####### + +# +# jar xf/unzip fails when executing them all in parallel +# introduce artificial dependency (_DEP) buuhhh + +define ImportClasses +$1_CLASSES_DEP := $$(IMPORT_TARGET_CLASSES) +IMPORT_TARGET_CLASSES += $(JDK_OUTPUTDIR)/classes/_the.$1.classes.imported + +$(JDK_OUTPUTDIR)/classes/_the.$1.classes.imported : $$($1_DIST)/lib/classes.jar $$($1_CLASSES_DEP) + $(ECHO) Importing $1 classes.jar + $(MKDIR) -p $$(@D) + ($(CD) $$(@D) && $(JAR) xvf $$< > $$@.tmp) + $(MV) $$@.tmp $$@ +endef + +define ImportSources +$1_SOURCES_DEP := $$(IMPORT_TARGET_SOURCES) +IMPORT_TARGET_SOURCES += $(JDK_OUTPUTDIR)/impsrc/_the.$1.src.imported + +$(JDK_OUTPUTDIR)/impsrc/_the.$1.src.imported : $$($1_DIST)/lib/src.zip $$($1_SOURCES_DEP) + $(ECHO) Importing $1 src.zip + $(MKDIR) -p $$(@D) + ($(CD) $$(@D) && $(JAR) xvf $$< > $$@.tmp) + $(MV) $$@.tmp $$@ +endef + +define ImportBinaries +$1_BINARIES_DEP := $$(IMPORT_TARGET_BINARIES) +IMPORT_TARGET_BINARIES += $(JDK_OUTPUTDIR)/_the.$1.binaries.imported + +$(JDK_OUTPUTDIR)/_the.$1.binaries.imported : $$($1_DIST)/lib/bin.zip $$($1_BINARIES_DEP) + $(ECHO) Importing $1 bin.zip + $(MKDIR) -p $$(@D) + ($(CD) $$(@D) && $(JAR) xvf $$< > $$@.tmp) + $(MV) $$@.tmp $$@ +endef + +####### + +$(foreach I,$(IMPORT_CLASSES), $(eval $(call ImportClasses,$I))) +$(foreach I,$(IMPORT_SOURCES), $(eval $(call ImportSources,$I))) +$(foreach I,$(IMPORT_BINARIES), $(eval $(call ImportBinaries,$I))) + +IMPORT_TARGET_FILES += $(IMPORT_TARGET_CLASSES) $(IMPORT_TARGET_SOURCES) $(IMPORT_TARGET_BINARIES) + +####### + +ifeq ($(OPENJDK_TARGET_OS),solaris) +define do-install-file + $(MKDIR) -p $$(@D) + $(CP) -r -P '$$<' '$$(@D)' +endef +else ifeq ($(OPENJDK_TARGET_OS),macosx) +define do-install-file + $(MKDIR) -p $$(@D) + $(CP) -pRP '$$<' '$$@' +endef +else +define do-install-file + $(MKDIR) -p $$(@D) + $(CP) -P '$$<' '$$@' +endef +endif + +define CopyDir + $1_SRC_FILES := $(shell $(FIND) $2 -type f) + $1_DST_FILES := $$(patsubst $2/%,$3/%,$$($1_SRC_FILES)) + IMPORT_TARGET_FILES += $$($1_DST_FILES) +$3/% : $2/% + $(ECHO) Copying $$(@F) + $(do-install-file) +endef + +####### + +# +# Import hotspot +# + +$(eval $(call CopyDir,HOTSPOT0, $(HOTSPOT_LIB_DIR), $(INSTALL_LIBRARIES_HERE))) +$(eval $(call CopyDir,HOTSPOT1, $(HOTSPOT_DIST)/lib, $(JDK_OUTPUTDIR)/lib)) + +JSIG_DEBUGINFO := $(wildcard $(HOTSPOT_DIST)/jre/lib/$(LIBARCH)/libjsig.debuginfo) \ + $(wildcard $(HOTSPOT_DIST)/jre/lib/$(LIBARCH)/libjsig.diz) + +ifneq ($(OPENJDK_TARGET_OS), windows) + ifeq ($(JVM_VARIANT_SERVER), true) + IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/server/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) + ifneq (,$(JSIG_DEBUGINFO)) + IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/server/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I)) + endif + endif + ifeq ($(JVM_VARIANT_CLIENT), true) + IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/client/$(LIBRARY_PREFIX)jsig$(SHARED_LIBRARY_SUFFIX) + ifneq (,$(JSIG_DEBUGINFO)) + IMPORT_TARGET_FILES += $(INSTALL_LIBRARIES_HERE)/client/$(foreach I,$(JSIG_DEBUGINFO),$(notdir $I)) + endif + endif +endif + +$(INSTALL_LIBRARIES_HERE)/server/%$(SHARED_LIBRARY_SUFFIX) : $(INSTALL_LIBRARIES_HERE)/%$(SHARED_LIBRARY_SUFFIX) + $(RM) -f $@ + $(LN) -s ../$(@F) $@ + +$(INSTALL_LIBRARIES_HERE)/server/%.debuginfo : $(INSTALL_LIBRARIES_HERE)/%.debuginfo + $(RM) -f $@ + $(LN) -s ../$(@F) $@ + +$(INSTALL_LIBRARIES_HERE)/server/%.diz : $(INSTALL_LIBRARIES_HERE)/%.diz + $(RM) -f $@ +ifeq (REALLY_WEIRD,1) + $(LN) -s ../$(@F) $@ +else +# +# TODO: Check if this is what they really want...a zip containing a symlink +# + $(RM) -f $(basename $@).debuginfo + $(LN) -s ../$(basename $(@F)).debuginfo $(basename $@).debuginfo + $(ZIP) -q -y $@ $(basename $@).debuginfo + $(RM) -f $(basename $@).debuginfo +endif + +$(INSTALL_LIBRARIES_HERE)/client/%$(SHARED_LIBRARY_SUFFIX) : $(INSTALL_LIBRARIES_HERE)/%$(SHARED_LIBRARY_SUFFIX) + $(RM) -f $@ + $(LN) -s ../$(@F) $@ + +$(INSTALL_LIBRARIES_HERE)/client/%.debuginfo : $(INSTALL_LIBRARIES_HERE)/%.debuginfo + $(RM) -f $@ + $(LN) -s ../$(@F) $@ + +$(INSTALL_LIBRARIES_HERE)/client/%.diz : $(INSTALL_LIBRARIES_HERE)/%.diz + $(RM) -f $@ +ifeq (REALLY_WEIRD,1) + $(LN) -s ../$(@F) $@ +else +# +# TODO: Check if this is what they really want...a zip containing a symlink +# + $(RM) -f $(basename $@).debuginfo + $(LN) -s ../$(basename $(@F)).debuginfo $(basename $@).debuginfo + $(ZIP) -q -y $@ $(basename $@).debuginfo + $(RM) -f $(basename $@).debuginfo +endif + +####### + +ifeq ($(OPENJDK_TARGET_OS),solaris) +define install-file + $(MKDIR) -p $(@D) + $(CP) -r -P '$<' '$(@D)' +endef +else ifeq ($(OPENJDK_TARGET_OS),macosx) +define install-file + $(MKDIR) -p $(@D) + $(CP) -pRP '$<' '$@' +endef +else +define install-file + $(MKDIR) -p $(@D) + $(CP) -P '$<' '$@' +endef +endif + +ifndef OPENJDK + +IMPORT_TARGET_FILES += \ + $(JDK_OUTPUTDIR)/lib/security/US_export_policy.jar \ + $(JDK_OUTPUTDIR)/lib/security/local_policy.jar \ + $(JDK_OUTPUTDIR)/lib/jce.jar + +$(JDK_OUTPUTDIR)/lib/jce.jar : $(JDK_TOPDIR)/make/closed/tools/crypto/jce/jce.jar + $(ECHO) Copying $(@F) + $(install-file) + +$(JDK_OUTPUTDIR)/lib/security/local_policy.jar: $(JDK_TOPDIR)/make/closed/tools/crypto/jce/local_policy.jar + $(ECHO) Copying $(@F) + $(install-file) + +$(JDK_OUTPUTDIR)/lib/security/US_export_policy.jar: $(JDK_TOPDIR)/make/closed/tools/crypto/jce/US_export_policy.jar + $(ECHO) Copying $(@F) + $(install-file) + +endif # OPENJDK + +####### + +all: $(IMPORT_TARGET_FILES) diff --git a/jdk/makefiles/LegacyMakefiles.gmk b/jdk/makefiles/LegacyMakefiles.gmk deleted file mode 100644 index e2fe44a4c02..00000000000 --- a/jdk/makefiles/LegacyMakefiles.gmk +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -include $(SPEC) -include MakeBase.gmk - -all: $(JDK_OUTPUTDIR)/_the.legacy_make - -DEPS:= $(shell $(FIND) $(JDK_TOPDIR)/makefiles/java -type f) \ - $(shell $(FIND) $(JDK_TOPDIR)/makefiles/javax -type f) \ - $(shell $(FIND) $(JDK_TOPDIR)/makefiles/sun -type f) \ - $(shell $(FIND) $(JDK_TOPDIR)/makefiles/com -type f) - -$(JDK_OUTPUTDIR)/_the.legacy_make: $(DEPS) - (echo Building single threaded Java subdir && \ - $(MAKE) -j1 -C java all && \ - touch $@) - -.PHONY: all - diff --git a/jdk/makefiles/Makefile b/jdk/makefiles/Makefile index 6feba0efe4a..d7381dc9317 100644 --- a/jdk/makefiles/Makefile +++ b/jdk/makefiles/Makefile @@ -38,21 +38,21 @@ include Setup.gmk include Tools.gmk all: $(BUILD_TOOLS) +# Import (corba jaxp jaxws langtools hotspot) + +$(MAKE) -f Import.gmk +# +$(MAKE) -f GenerateJavaSources.gmk -# Drop back to the old makefiles for -# packages/libs that have not yet been converted. - +$(MAKE) -f LegacyMakefiles.gmk # Ok, now gensrc is fully populated. +$(MAKE) -f GenerateData.gmk +$(MAKE) -f CompileJavaClasses.gmk -# The classes have been built, now generate -# classes that have other sources. - +$(MAKE) -f GenerateClasses.gmk # The classes are now built and # any javah files have now been generated. +$(MAKE) -f CompileNativeLibraries.gmk # Finally compile the launchers. +$(MAKE) -f CompileLaunchers.gmk +# Generate classes that have other sources. Needs +# to execute launchers. + +$(MAKE) -f GenerateClasses.gmk # Now we have a complete jdk, which you can run. # It is not yet wrapped up as an installed image. # The demos are compiled against this jdk. @@ -64,16 +64,11 @@ ifndef NO_SAMPLES +$(MAKE) -f CopySamples.gmk endif -# Create the final jdk and jre images in the old way. Kept for reference -# until conversion is fully done. -old-images: - +$(MAKE) $(IMAGES_MAKE_ARGS) -f OldImages.gmk - # Create the final jdk and jre images, to be wrapped up # into packages, or installed. images: +$(MAKE) -f CreateJars.gmk - +$(MAKE) $(IMAGES_MAKE_ARGS) -f Images.gmk + +$(MAKE) -f Images.gmk BINARIES:=$(shell if test -d $(IMAGES_OUTPUTDIR)/j2sdk-image/bin; then cd $(IMAGES_OUTPUTDIR)/j2sdk-image/bin && $(LS) ; fi) @@ -90,9 +85,4 @@ install: images $(RM) $(addprefix $(INSTALL_PREFIX)/bin/,$(BINARIES)) $(foreach b,$(BINARIES),$(LN) -s $(INSTALL_PREFIX)/jvm/$(INSTALLDIR)/bin/$b $(INSTALL_PREFIX)/bin/$b &&) true -# Create the deb,rpm,tgz,zip, packages. -packages: images - echo Creating packages...well, in the future. - $(MKDIR) -p $(OUTPUT_ROOT)/packages - .PHONY: all install images diff --git a/jdk/makefiles/OldImages.gmk b/jdk/makefiles/OldImages.gmk deleted file mode 100644 index 1db1c174db8..00000000000 --- a/jdk/makefiles/OldImages.gmk +++ /dev/null @@ -1,175 +0,0 @@ -# -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -include $(SPEC) -include MakeBase.gmk -include JavaCompilation.gmk -include Setup.gmk - -default: $(IMAGES_OUTPUTDIR)/_the.images - -include Tools.gmk - -JARS:= - -########################################################################################## - -JCONSOLE_JAR_DEPS := \ - $(shell $(FIND) $(JDK_OUTPUTDIR)/newclasses/sun/tools/jconsole/ -name "_the.package") \ - $(shell $(FIND) $(JDK_OUTPUTDIR)/newclasses/com/sun/tools/jconsole/ -name "_the.package") - -$(eval $(call SetupArchive,BUILD_JCONSOLE_JAR,$(JCONSOLE_JAR_DEPS),\ - SRCS:=$(JDK_OUTPUTDIR)/newclasses,\ - SUFFIXES:=.class .gif .png,\ - INCLUDES:=sun/tools/jconsole com/sun/tools/jconsole,\ - JARMAIN:=sun.tools.jconsole.JConsole,\ - JAR:=$(JDK_OUTPUTDIR)/lib/jconsole.jar,\ - SKIP_METAINF:=true)) - -JARS+=$(JDK_OUTPUTDIR)/lib/jconsole.jar - -########################################################################################## - -CHARSETS_JAR_DEPS := - -$(eval $(call SetupArchive,BUILD_CHARSETS_JAR,$(CHARSETS_JAR_DEPS),\ - SRCS:=$(JDK_OUTPUTDIR)/newclasses, \ - SUFFIXES:=.class .dat,\ - INCLUDES:=sun/nio/cs/ext,\ - EXTRA_FILES := sun/awt/HKSCS.class \ - sun/awt/motif/X11GBK.class \ - 'sun/awt/motif/X11GB2312$$$$Decoder.class' \ - sun/awt/motif/X11GB2312.class \ - 'sun/awt/motif/X11KSC5601$$$$Decoder.class' \ - 'sun/awt/motif/X11KSC5601$$$$Encoder.class' \ - 'sun/awt/motif/X11GB2312$$$$Encoder.class' \ - 'sun/awt/motif/X11GBK$$$$Encoder.class' \ - sun/awt/motif/X11KSC5601.class \ - META-INF/services/java.nio.charset.spi.CharsetProvider, \ - JAR:=$(JDK_OUTPUTDIR)/lib/charsets.jar, \ - JARMAIN := NONE, \ - SKIP_METAINF := true)) - -JARS+=$(JDK_OUTPUTDIR)/lib/charsets.jar - -########################################################################################## - -SUNPKCS11_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunpkcs11.jar - -ifndef OPENJDK - -SUNPKCS11_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/pkcs11/sunpkcs11.jar - -$(SUNPKCS11_JAR_DST) : $(SUNPKCS11_JAR_SRC) - @$(ECHO) "\n>>>Installing prebuilt SunPKCS11 provider..." - $(RM) $@ - $(CP) $< $@ - -else - -$(eval $(call SetupArchive,BUILD_SUNPKCS11_JAR,$(SUNPKCS11_JAR_DEPS),\ - SRCS:=$(JDK_OUTPUTDIR)/newclasses, \ - SUFFIXES:=.class,\ - INCLUDES:=sun/security/pkcs11,\ - JAR:=$(SUNPKCS11_JAR_DST), \ - JARMAIN := NONE, \ - SKIP_METAINF := true)) - -endif - -JARS += $(SUNPKCS11_JAR_DST) - -########################################################################################## - -SUNEC_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunec.jar - -ifndef OPENJDK - -SUNEC_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/ec/sunec.jar - -$(SUNEC_JAR_DST) : $(SUNEC_JAR_SRC) - @$(ECHO) "\n>>>Installing prebuilt SunEC provider..." - $(RM) $@ - $(CP) $< $@ - -else - -$(eval $(call SetupArchive,BUILD_SUNEC_JAR,$(SUNEC_JAR_DEPS),\ - SRCS:=$(JDK_OUTPUTDIR)/newclasses, \ - SUFFIXES:=.class,\ - INCLUDES:=sun/security/ec,\ - EXCLUDE_FILES := \ - sun/security/ec/ECKeyFactory.class \ - sun/security/ec/ECParameters.class \ - sun/security/ec/ECPrivateKeyImpl.class \ - sun/security/ec/ECPublicKeyImpl.class \ - sun/security/ec/NamedCurve.class \ - 'sun/security/ec/ECKeyFactory$$$$1.class' \ - 'sun/security/ec/ECKeyFactory$$$$2.class' ,\ - JAR:=$(SUNEC_JAR_DST), \ - JARMAIN := NONE, \ - SKIP_METAINF := true)) - -endif - -JARS += $(SUNEC_JAR_DST) - -########################################################################################## - -# TODO: deps? -$(eval $(call SetupArchive,BUILD_SWINGBEANS_JAR,$(SWINGBEANS_JAR_DEPS),\ - SRCS:=$(JDK_OUTPUTDIR)/newclasses,\ - SUFFIXES:=BeanInfo.class .gif,\ - INCLUDES:=javax/swing sun/swing,\ - EXCLUDES:=javax/swing/plaf,\ - EXTRA_FILES:=javax/swing/SwingBeanInfoBase.class sun/swing/BeanInfoUtils.class,\ - JAR:=$(JDK_OUTPUTDIR)/lib/dt.jar,\ - JARMAIN:=NONE,\ - SKIP_METAINF:=true)) - -JARS+=$(JDK_OUTPUTDIR)/lib/dt.jar - -########################################################################################## - -# Need to define BUILDDIR for Release.gmk to work -BUILDDIR=$(JDK_TOPDIR)/makefiles -include common/Defs.gmk -include common/Release.gmk - -# A rudimentary attempt at band-aiding the dependency tracking. -DEPS:= $(shell $(FIND) $(JDK_OUTPUTDIR)/newclasses -name "*.class" -type f) \ - $(shell $(FIND) $(JDK_OUTPUTDIR)/bin -type f) \ - $(shell $(FIND) $(JDK_OUTPUTDIR)/lib -type f) - -$(IMAGES_OUTPUTDIR)/_the.images : $(DEPS) $(JARS) - $(MKDIR) -p $(@D) -# Restart this makefile, ugly, but since double colon (::) rules -# have been used in Release.gmk, it is impossible to craft on -# dependencies on these. I.e. -do-not-use- :: rules!!!!! -# Repeat after me: -do-not-use- :: rules!!!!! - $(MAKE) -j1 -f OldImages.gmk $(IMAGES_MAKE_ARGS) images - $(TOUCH) $@ - -.PHONY: default diff --git a/jdk/makefiles/Tools.gmk b/jdk/makefiles/Tools.gmk index 71ffde7e397..3f0a8dd02ab 100644 --- a/jdk/makefiles/Tools.gmk +++ b/jdk/makefiles/Tools.gmk @@ -123,3 +123,27 @@ TOOL_WRAPPERGENERATOR=$(JAVA) -cp $(JDK_OUTPUTDIR)/btclasses \ TOOL_TOBIN=$(JAVA) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \ sun.awt.X11.ToBin + +########################################################################################## + +# Tools needed on solaris because OBJCOPY is broken. + +$(eval $(call SetupNativeCompilation,ADD_GNU_DEBUGLINK,\ + SRC:=$(JDK_TOPDIR)/make/tools/add_gnu_debuglink,\ + LANG:=C,\ + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_LD),\ + LDFLAGS:=-lelf,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/add_gnu_debuglink,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/btbin,\ + PROGRAM:=add_gnu_debuglink)) + +$(eval $(call SetupNativeCompilation,FIX_EMPTY_SEC_HDR_FLAGS,\ + SRC:=$(JDK_TOPDIR)/make/tools/fix_empty_sec_hdr_flags,\ + LANG:=C,\ + CC:=$(HOST_CC),\ + LDEXE:=$(HOST_LD),\ + LDFLAGS:=-lelf,\ + OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/fix_empty_sec_hdr_flags,\ + OUTPUT_DIR:=$(JDK_OUTPUTDIR)/btbin,\ + PROGRAM:=fix_empty_sec_hdr_flags)) diff --git a/jdk/makefiles/com/sun/crypto/provider/Makefile b/jdk/makefiles/com/sun/crypto/provider/Makefile deleted file mode 100644 index 93a0b1308c7..00000000000 --- a/jdk/makefiles/com/sun/crypto/provider/Makefile +++ /dev/null @@ -1,275 +0,0 @@ -# -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building sunjce_provider.jar. -# -# This file was derived from make/javax/crypto/Makefile. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. There are some -# javac options currently specific to JCE, so we recompile now to make -# sure any implicit compilations didn't use any incorrect flags. -# -# For OpenJDK, the jar files built here are installed directly into the -# OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built and signed, and the resulting jar files MUST BE CHECKED INTO -# THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT BE -# FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual. -# If OpenJDK, installs sunjce_provider.jar. -# If JDK, installs prebuilt -# sunjce_provider.jar. -# -# jar Builds/installs sunjce_provider.jar -# If OpenJDK, does not sign. -# If JDK, tries to sign. -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds sunjce_provider.jar -# (does not sign/install) -# -# install-jar Alias for "jar" above. -# -# Other targets (JDK only): -# -# sign Alias for sign-jar -# sign-jar Builds/signs sunjce_provider.jar (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../../../.. -PACKAGE = com.sun.crypto.provider -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -JAVAC_MAX_WARNINGS = false -JAVAC_LINT_OPTIONS = -Xlint:all,-deprecation -JAVAC_WARNINGS_FATAL = true -include $(BUILDDIR)/common/Defs.gmk - -# -# Location for the newly built classfiles. -# -CLASSDESTDIR = $(TEMPDIR)/classes - -# -# Subdirectories of these are automatically included. -# -AUTO_FILES_JAVA_DIRS = \ - com/sun/crypto/provider - -include $(BUILDDIR)/common/Classes.gmk - -# -# Rules -# - -# -# Some licensees do not get the security sources, but we still need to -# be able to build "all" for them. Check here to see if the sources were -# available. If not, then we don't need to continue this rule. -# - -ifdef OPENJDK -all: build-jar install-jar -else # OPENJDK -ifeq ($(strip $(FILES_java)),) -all: install-prebuilt - $(no-source-warning) -else # FILES_java available -all: build-jar install-prebuilt - $(build-warning) -endif # $(FILES_java) available -endif # OPENJDK - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, they will be -# placed in the appropriate areas. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -include $(BUILDDIR)/javax/crypto/Defs-jce.gmk - - -# ===================================================== -# Build the unsigned sunjce_provider.jar file. -# - -JAR_DESTFILE = $(EXTDIR)/sunjce_provider.jar - -# -# The sunjce_provider.jar needs to be in the extension class directory, -# therefore none of its classes should appear in $(CLASSBINDIR). -# Currently no one is using any of the SunJCE internals, so these files -# should not have been built. -# - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/sunjce_provider.jar - -# -# Build sunjce_provider.jar. -# -$(UNSIGNED_DIR)/sunjce_provider.jar: build $(JCE_MANIFEST_FILE) - $(prep-target) - $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - - -ifndef OPENJDK -# ===================================================== -# Sign the provider jar file. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed - -sign: sign-jar - -sign-jar: $(SIGNED_DIR)/sunjce_provider.jar - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/sunjce_provider.jar: $(UNSIGNED_DIR)/sunjce_provider.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/sunjce_provider.jar: - @if [ ! -r $(UNSIGNED_DIR)/sunjce_provider.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/sunjce_provider.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/sunjce_provider.jar) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, etc. -# - -release: $(SIGNED_DIR)/sunjce_provider.jar - $(RM) $(JCE_BUILD_DIR)/release/sunjce_provider.jar - $(MKDIR) -p $(JCE_BUILD_DIR)/release - $(CP) $(SIGNED_DIR)/sunjce_provider.jar $(JCE_BUILD_DIR)/release - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install sunjce_provider.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/sunjce_provider.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/sunjce_provider.jar -endif - $(install-file) - -ifndef OPENJDK -install-prebuilt: - @$(ECHO) "\n>>>Installing prebuilt SunJCE provider..." - $(RM) $(JAR_DESTFILE) - $(CP) $(PREBUILT_DIR)/jce/sunjce_provider.jar $(JAR_DESTFILE) -endif - - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR) - -.PHONY: build-jar jar install-jar -ifndef OPENJDK -.PHONY: sign sign-jar release install-prebuilt -endif diff --git a/jdk/makefiles/common/Classes.gmk b/jdk/makefiles/common/Classes.gmk deleted file mode 100644 index 07acf6c0106..00000000000 --- a/jdk/makefiles/common/Classes.gmk +++ /dev/null @@ -1,67 +0,0 @@ -# -# Copyright (c) 1995, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -include $(JDK_TOPDIR)/makefiles/common/Rules.gmk - -# -# Say you built classes into $(ALT_CLASSBINDIR) and then at the end of -# the build you might want to copy them over to $(ALT_CLASSDESTDIR); -# this rule takes care of that. No one should really set these -# variables except the bootstrap/recompile stage of the java compiler. -# -ifdef ALT_CLASSBINDIR - -# By default post-processing is copying. Suppose you want to build -# a jar file then set ALT_CLASSES_DISPOSITION to '../../dest/nameof.jar' -# before including this file. -ifndef ALT_CLASSES_DISPOSITION -ALT_CLASSES_DISPOSITION = copy-classes -endif - -build : $(ALT_CLASSES_DISPOSITION) - -copy-classes: -ifneq ($(ALT_CLASSBINDIR), $(ALT_CLASSDESTDIR)) - @if [ -s $(TEMPDIR)/.classes.list ]; then \ - mkdir -p $(ALT_CLASSDESTDIR); \ - echo "Copying $(ALT_CLASSBINDIR)..."; \ - echo "(cd $(ALT_CLASSBINDIR); tar cf - .) | \ - (cd $(ALT_CLASSDESTDIR); tar xf -)"; \ - (cd $(ALT_CLASSBINDIR); tar cf - .) | \ - (cd $(ALT_CLASSDESTDIR); tar xf -); \ - fi -else # ALT_CLASSBINDIR - @if [ -s $(TEMPDIR)/.classes.list ]; then \ - echo "Copy source and destination are the same: $(ALT_CLASSBINDIR) -- Copy skipped..."; \ - fi -endif # ALT_CLASSBINDIR - -.PHONY: copy-classes -endif # ALT_CLASSBINDIR - diff --git a/jdk/makefiles/common/Cscope.gmk b/jdk/makefiles/common/Cscope.gmk deleted file mode 100644 index 812fd5f0d12..00000000000 --- a/jdk/makefiles/common/Cscope.gmk +++ /dev/null @@ -1,100 +0,0 @@ -# -# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# The cscope.out file is made in the current directory and spans the entire -# source tree. -# -# Things to note: -# 1. We use relative names for cscope. -# 2. We *don't* remove the old cscope.out file, because cscope is smart -# enough to only build what has changed. It can be confused, however, -# if files are renamed or removed, so it may be necessary to manually -# remove cscope.out if a lot of reorganization has occurred. -# -CSDIRS = $(JDK_TOPDIR)/src $(JDK_TOPDIR)/build -CSINCS = $(CSDIRS:%=-I%) - -# -# Set CSFLAGS env variable to -b when using fast cscope to build the fast -# (but large) cscope data bases. -# -CSCOPE = cscope-fast -ifeq ($(CSCOPE), cscope-fast) -CSFLAGS = -b -endif - -# -# Adding .java files pushes the file count of a full workspace up about 2500 -# files, which slows database lookup. Thus allow these files to be added from -# the environment (CSCLASSES=yes). -# -ifdef CSCLASSES -ADDCLASSES= -o -name '*.java' -endif - -# -# Adding CClassHeaders also pushes the file count of a full workspace up about -# 200 files (these files also don't exist in a new workspace, and thus will -# cause the recreation of the database as they get created, which might seem -# A little confusing). Thus allow these files to be added from the environment -# (CSHEADERS=yes). -# -ifndef CSHEADERS -RMCCHEADERS= -o -name CClassHeaders -endif - - -.PRECIOUS: cscope.out - -cscope.out: cscope.files FRC - $(CSCOPE) $(CSFLAGS) - -# -# What files should we include? A simple rule might be just those files under -# SCM control, however this would miss files we create like the opcodes and -# CClassHeaders. The following attempts to find everything that is *useful*. -# (demo directories contain many .java files -# that probably aren't useful for development, and the pkgarchive may contain -# duplicates of files within the source hierarchy). The ordering of the .raw -# file is an attempt to make cscope display the most relevant files first. -# -cscope.files: FRC - @-$(RM) cscope.files cscope.files.raw - echo "$(CSINCS)" > cscope.files - -find $(CSDIRS) $(SCM_DIRS_prune) -o -type d \( -name '.del-*' -o \ - -name '*demo' -o -name pkgarchive $(RMCCHEADERS) \) -prune -o \ - -type f \( -name '*.[Ccshlxy]' -o -name '*.il' -o -name '*.cc' -o \ - -name 'Makefile*' -o -name GNUmakefile -o -name '*.gmk' -o \ - -name '*.cpp' $(ADDCLASSES) \) -print > cscope.files.raw - -egrep -v "\.java|\/build\/" cscope.files.raw >> cscope.files - -fgrep ".java" cscope.files.raw >> cscope.files - -fgrep "/build/" cscope.files.raw >> cscope.files - @-$(RM) cscope.files.raw - -cscope.clean: - -$(RM) cscope.files cscope.files.raw cscope.out - -FRC: diff --git a/jdk/makefiles/common/Defs-embedded.gmk b/jdk/makefiles/common/Defs-embedded.gmk deleted file mode 100644 index 089fae9d586..00000000000 --- a/jdk/makefiles/common/Defs-embedded.gmk +++ /dev/null @@ -1,76 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Variable definitions for SE Embedded builds. This file should -# not contain rules. -# -ifdef JAVASE_EMBEDDED - -# Compress jar files -COMPRESS_JARS = true - -# Don't mmap zip files -LIBZIP_CAN_USE_MMAP = false - -# Disable ALSA version check -REQUIRED_ALSA_VERSION = - -# Compilation settings -OTHER_CPPFLAGS += -DJAVASE_EMBEDDED - -# Product naming -PRODUCT_SUFFIX = SE Runtime Environment for Embedded -RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX) - -# Reduced JRE locations -JRE_REDUCED_HEADLESS_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-reduced-headless-image -JRE_REDUCED_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-reduced-image - -# Override on linux to further reduce binary/lib sizes in product build -ifeq ($(PLATFORM), linux) - ifeq ($(VARIANT), OPT) - ifneq ($(NO_STRIP), true) - ifneq ($(DEBUG_BINARIES), true) - POST_STRIP_PROCESS = $(STRIP) --strip-unneeded - endif - endif - endif -endif - -# NIO Platform specific source file location -ifdef CROSS_COMPILE_ARCH - NIO_PLATFORM_CLASSES_ROOT_DIR = $(CLOSED_PLATFORM_SRC)/classes/ -endif - -# For ARM sflt we need to link to a library with improved FP accuracy -# and it must be linked after fdlibm - this places it at the end after libc -# -z muldefs avoids linker errors for duplicate symbols. -ifeq ($(CROSS_COMPILE_ARCH), arm) - EXTRA_LIBS += $(EXT_LIBS_PATH)/sflt_glibc_jdk.a -Xlinker -z -Xlinker muldefs -endif - -endif # JAVASE_EMBEDDED - diff --git a/jdk/makefiles/common/Defs-linux.gmk b/jdk/makefiles/common/Defs-linux.gmk deleted file mode 100644 index 03ff72a27b2..00000000000 --- a/jdk/makefiles/common/Defs-linux.gmk +++ /dev/null @@ -1,430 +0,0 @@ -# -# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile to specify compiler flags for programs and libraries -# targeted to Linux. Should not contain any rules. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Warning: the following variables are overriden by Defs.gmk. Set -# values will be silently ignored: -# CFLAGS (set $(OTHER_CFLAGS) instead) -# CPPFLAGS (set $(OTHER_CPPFLAGS) instead) -# CXXFLAGS (set $(OTHER_CXXFLAGS) instead) -# LDFLAGS (set $(OTHER_LDFAGS) instead) -# LDLIBS (set $(EXTRA_LIBS) instead) -# LDLIBS_COMMON (set $(EXTRA_LIBS) instead) - -# Get shared JDK settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -# Part of INCREMENTAL_BUILD mechanism. -# Compiler emits things like: path/file.o: file.h -# We want something like: relative_path/file.o relative_path/file.d: file.h -CC_DEPEND = -MM -CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' - -ifndef PLATFORM_SRC - PLATFORM_SRC = $(BUILDDIR)/../src/solaris -endif # PLATFORM_SRC - -# Platform specific closed sources -ifndef OPENJDK - ifndef CLOSED_PLATFORM_SRC - CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/solaris - endif -endif - -# platform specific include files -PLATFORM_INCLUDE_NAME = $(PLATFORM) -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# suffix used for make dependencies files. -DEPEND_SUFFIX = d -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = a -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! - -# Default OBJCOPY comes from GNU Binutils on Linux: -DEF_OBJCOPY=/usr/bin/objcopy -ifdef CROSS_COMPILE_ARCH - # don't try to generate .debuginfo files when cross compiling - _JUNK_ := $(shell \ - echo >&2 "INFO: cross compiling for ARCH $(CROSS_COMPILE_ARCH)," \ - "skipping .debuginfo generation.") - OBJCOPY= -else - OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY)) - ifneq ($(ALT_OBJCOPY),) - _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)") - # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path - OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY)) - endif -endif - -ifdef LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS -# The setting of OBJCOPY above enables the JDK build to import -# .debuginfo files from the HotSpot build. However, adding FDS -# support to the JDK build will occur in phases so a different -# make variable is used to indicate that a particular library -# supports FDS. - -ifeq ($(OBJCOPY),) - _JUNK_ := $(shell \ - echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.") -else - _JUNK_ := $(shell \ - echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.") - - # Library stripping policies for .debuginfo configs: - # all_strip - strips everything from the library - # min_strip - strips most stuff from the library; leaves minimum symbols - # no_strip - does not strip the library at all - # - # Oracle security policy requires "all_strip". A waiver was granted on - # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE. - # - DEF_STRIP_POLICY="min_strip" - ifeq ($(ALT_STRIP_POLICY),) - STRIP_POLICY=$(DEF_STRIP_POLICY) - else - STRIP_POLICY=$(ALT_STRIP_POLICY) - endif - - _JUNK_ := $(shell \ - echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)") -endif -endif - -# -# Default optimization -# - -ifndef OPTIMIZATION_LEVEL - ifeq ($(PRODUCT), java) - OPTIMIZATION_LEVEL = HIGHER - else - OPTIMIZATION_LEVEL = LOWER - endif -endif -ifndef FASTDEBUG_OPTIMIZATION_LEVEL - FASTDEBUG_OPTIMIZATION_LEVEL = LOWER -endif - -CC_OPT/NONE = -CC_OPT/LOWER = -O2 -CC_OPT/HIGHER = -O3 -CC_OPT/HIGHEST = -O3 - -CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) - -# For all platforms, do not omit the frame pointer register usage. -# We need this frame pointer to make it easy to walk the stacks. -# This should be the default on X86, but ia64 and amd64 may not have this -# as the default. -CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9 -LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9 -CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9 -LDFLAGS_COMMON_sparc += -m32 -mcpu=v9 -CFLAGS_REQUIRED_arm += -fsigned-char -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_ppc += -fsigned-char -D_BIG_ENDIAN -ifeq ($(ZERO_BUILD), true) - CFLAGS_REQUIRED = $(ZERO_ARCHFLAG) - ifeq ($(ZERO_ENDIANNESS), little) - CFLAGS_REQUIRED += -D_LITTLE_ENDIAN - endif - LDFLAGS_COMMON += $(ZERO_ARCHFLAG) -else - CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) - LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) -endif - -# If this is a --hash-style=gnu system, use --hash-style=both -# The gnu .hash section won't work on some Linux systems like SuSE 10. -_HAS_HASH_STYLE_GNU:=$(shell $(CC) -dumpspecs | $(GREP) -- '--hash-style=gnu') -ifneq ($(_HAS_HASH_STYLE_GNU),) - LDFLAGS_HASH_STYLE = -Wl,--hash-style=both -endif -LDFLAGS_COMMON += $(LDFLAGS_HASH_STYLE) - -# -# Selection of warning messages -# -GCC_INHIBIT = -Wno-unused -Wno-parentheses -GCC_STYLE = -GCC_WARNINGS = -W -Wall $(GCC_STYLE) $(GCC_INHIBIT) - -# -# Treat compiler warnings as errors, if warnings not allowed -# -ifeq ($(COMPILER_WARNINGS_FATAL),true) - GCC_WARNINGS += -Werror -endif - -# -# Misc compiler options -# -ifneq ($(ARCH),ppc) - CFLAGS_COMMON = -fno-strict-aliasing -endif -PIC_CODE_LARGE = -fPIC -PIC_CODE_SMALL = -fpic -GLOBAL_KPIC = $(PIC_CODE_LARGE) -CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS) -ifeq ($(ARCH), amd64) - CFLAGS_COMMON += -pipe -endif - -# Linux 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1 -DEBUG_FLAG = -g -ifeq ($(FASTDEBUG), true) - ifeq ($(ARCH_DATA_MODEL), 64) - DEBUG_FLAG = -g1 - endif -endif - -# DEBUG_BINARIES overrides everything, use full -g debug information -ifeq ($(DEBUG_BINARIES), true) - DEBUG_FLAG = -g - CFLAGS_REQUIRED += $(DEBUG_FLAG) -endif - -CFLAGS_OPT = $(CC_OPT) -CFLAGS_DBG = $(DEBUG_FLAG) -CFLAGS_COMMON += $(CFLAGS_REQUIRED) - -CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS) -CXXFLAGS_OPT = $(CC_OPT) -CXXFLAGS_DBG = $(DEBUG_FLAG) -CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) - -# FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java -ifeq ($(FASTDEBUG), true) - CFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) - CXXFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) -endif - -CPP_ARCH_FLAGS = -DARCH='"$(ARCH)"' - -# Alpha arch does not like "alpha" defined (potential general arch cleanup issue here) -ifneq ($(ARCH),alpha) - CPP_ARCH_FLAGS += -D$(ARCH) -else - CPP_ARCH_FLAGS += -D_$(ARCH)_ -endif - -CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -DLINUX $(VERSION_DEFINES) \ - -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT - -ifeq ($(ARCH_DATA_MODEL), 64) -CPPFLAGS_COMMON += -D_LP64=1 -endif - -CPPFLAGS_OPT = -DNDEBUG -CPPFLAGS_DBG = -DDEBUG -ifneq ($(PRODUCT), java) - CPPFLAGS_DBG += -DLOGGING -endif - -ifdef LIBRARY - # Libraries need to locate other libraries at runtime, and you can tell - # a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) - # buried inside the .so. The $ORIGIN says to look relative to where - # the library itself is and it can be followed with relative paths from - # that. By default we always look in $ORIGIN, optionally we add relative - # paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths. - # On Linux we add a flag -z origin, not sure if this is necessary, but - # doesn't seem to hurt. - # The environment variable LD_LIBRARY_PATH will over-ride these runpaths. - # Try: 'readelf -d lib*.so' to see these settings in a library. - # - Z_ORIGIN_FLAG/sparc = -Xlinker -z -Xlinker origin - Z_ORIGIN_FLAG/i586 = -Xlinker -z -Xlinker origin - Z_ORIGIN_FLAG/amd64 = -Xlinker -z -Xlinker origin - Z_ORIGIN_FLAG/ia64 = -Xlinker -z -Xlinker origin - Z_ORIGIN_FLAG/arm = - Z_ORIGIN_FLAG/ppc = - Z_ORIGIN_FLAG/zero = -Xlinker -z -Xlinker origin - - LDFLAG_Z_ORIGIN = $(Z_ORIGIN_FLAG/$(ARCH_FAMILY)) - - LDFLAGS_COMMON += $(LDFLAG_Z_ORIGIN) -Xlinker -rpath -Xlinker \$$ORIGIN - LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=$(LDFLAG_Z_ORIGIN) -Xlinker -rpath -Xlinker \$$ORIGIN/%) - -endif - -EXTRA_LIBS += -lc - -LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs -#LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) - -# -# -L paths for finding and -ljava -# -LDFLAGS_OPT = -Xlinker -O1 -LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH) -LDFLAGS_COMMON += -Wl,-soname=$(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX) - -# -# -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always -# statically link libgcc but will print a warning with the flag. We don't -# want the warning, so check gcc version first. -# -ifeq ($(CC_MAJORVER),3) - OTHER_LDFLAGS += -static-libgcc -endif - -# Automatic precompiled header option to use (if COMPILE_APPROACH=batch) -# (See Rules.gmk) The gcc 5 compiler might have an option for this? -AUTOMATIC_PCH_OPTION = - -# -# Post Processing of libraries/executables -# -ifeq ($(VARIANT), OPT) - ifneq ($(NO_STRIP), true) - ifneq ($(DEBUG_BINARIES), true) - # Debug 'strip -g' leaves local function Elf symbols (better stack - # traces) - POST_STRIP_PROCESS = $(STRIP) -g - endif - endif -endif - -# -# Use: ld $(LD_MAPFILE_FLAG) mapfile *.o -# -LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker - -# -# Support for Quantify. -# -ifdef QUANTIFY -QUANTIFY_CMD = quantify -QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes -LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) -endif - -# -# Path and option to link against the VM, if you have to. Note that -# there are libraries that link against only -ljava, but they do get -# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas -# the library itself should not. -# -VM_NAME = server -# First try to link against server, if that does not exist link against client. -JVMLIB = -L$(LIBDIR)/$(LIBARCH)/server -L$(LIBDIR)/$(LIBARCH)/client -ljvm -JAVALIB = -ljava $(JVMLIB) - -# -# We want to privatize JVM symbols on Solaris. This is so the user can -# write a function called FindClass and this should not override the -# FindClass that is inside the JVM. At this point in time we are not -# concerned with other JNI libraries because we hope that there will -# not be as many clashes there. -# -PRIVATIZE_JVM_SYMBOLS = false - -USE_PTHREADS = true -override ALT_CODESET_KEY = _NL_CTYPE_CODESET_NAME -override AWT_RUNPATH = -override HAVE_ALTZONE = false -override HAVE_FILIOH = false -override HAVE_GETHRTIME = false -override HAVE_GETHRVTIME = false -override HAVE_SIGIGNORE = true -override LEX_LIBRARY = -lfl -ifeq ($(STATIC_CXX),true) -override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic -else -override LIBCXX = -lstdc++ -endif -override LIBPOSIX4 = -override LIBSOCKET = -override LIBNSL = -override LIBSCF = -override LIBTHREAD = -override LIBDL = -ldl -override MOOT_PRIORITIES = true -override NO_INTERRUPTIBLE_IO = true -ifeq ($(ARCH), amd64) -override OPENWIN_LIB = $(OPENWIN_HOME)/lib64 -else -override OPENWIN_LIB = $(OPENWIN_HOME)/lib -endif -override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER -override SUN_CMM_SUBDIR = -override THREADS_FLAG = native -override USE_GNU_M4 = true -override USING_GNU_TAR = true -override WRITE_LIBVERSION = false - -# USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the -# resulting resolved absolute name of the executable in the environment -# variable EXECNAME. That executable name is then used that to locate the -# installation area. -override USE_EXECNAME = true - -# If your platform has DPS, it will have Type1 fonts too, in which case -# it is best to enable DPS support until such time as 2D's rasteriser -# can fully handle Type1 fonts in all cases. Default is "yes". -# HAVE_DPS should only be "no" if the platform has no DPS headers or libs -# DPS (Displayable PostScript) is available on Solaris machines -HAVE_DPS = no - -# -# Japanese manpages -# -JA_SOURCE_ENCODING = eucJP -JA_TARGET_ENCODINGS = UTF-8 - -# Settings for the JDI - Serviceability Agent binding. -HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH) -SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX) -SA_DEBUGINFO_NAME = $(LIB_PREFIX)saproc.debuginfo - -# The JDI - Serviceability Agent binding is not currently supported -# on Linux-ia64. -ifeq ($(ARCH), ia64) - INCLUDE_SA = false -else - INCLUDE_SA = true -endif - -ifdef CROSS_COMPILE_ARCH - # X11 headers are not under /usr/include - OTHER_CFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include -endif diff --git a/jdk/makefiles/common/Defs-macosx.gmk b/jdk/makefiles/common/Defs-macosx.gmk deleted file mode 100644 index e1e8e252e7c..00000000000 --- a/jdk/makefiles/common/Defs-macosx.gmk +++ /dev/null @@ -1,402 +0,0 @@ -# -# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile to specify compiler flags for programs and libraries -# targeted to MACOSX. Should not contain any rules. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Warning: the following variables are overriden by Defs.gmk. Set -# values will be silently ignored: -# CFLAGS (set $(OTHER_CFLAGS) instead) -# CPPFLAGS (set $(OTHER_CPPFLAGS) instead) -# CXXFLAGS (set $(OTHER_CXXFLAGS) instead) -# LDFLAGS (set $(OTHER_LDFAGS) instead) -# LDLIBS (set $(EXTRA_LIBS) instead) -# LDLIBS_COMMON (set $(EXTRA_LIBS) instead) - -# Get shared JDK settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -# Part of INCREMENTAL_BUILD mechanism. -# Compiler emits things like: path/file.o: file.h -# We want something like: relative_path/file.o relative_path/file.d: file.h -CC_DEPEND = -MM -CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' - -ifndef PLATFORM_SRC - PLATFORM_SRC = $(BUILDDIR)/../src/solaris -endif # PLATFORM_SRC - -PLATFORM_SRC_MACOS = $(BUILDDIR)/../src/macosx - -# BSD build pulls its platform sources from the solaris tree. -JAVA_SRCDIR_LIST = src/$(PLATFORM) src/solaris src/share -NATIVE_SRCDIR_LIST = src/$(PLATFORM) src/solaris src/share - -# Platform specific closed sources -ifndef OPENJDK - ifndef CLOSED_PLATFORM_SRC - CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/solaris - endif -endif - -# platform specific include files -PLATFORM_INCLUDE_NAME = $(OS_NAME) -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# suffix used for make dependencies files. -DEPEND_SUFFIX = d -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = a -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! -CC_PROGRAM_OUTPUT_FLAG = -o #trailing blank required! - -# -# Default optimization -# - -ifndef OPTIMIZATION_LEVEL - ifeq ($(PRODUCT), java) - OPTIMIZATION_LEVEL = HIGHER - else - OPTIMIZATION_LEVEL = LOWER - endif -endif -ifndef FASTDEBUG_OPTIMIZATION_LEVEL - FASTDEBUG_OPTIMIZATION_LEVEL = LOWER -endif - -# For macosx use -Os by default, unless -O3 can be proved to be worth the cost, as per policy -# -CC_OPT/NONE = -CC_OPT/LOWER = -Os -CC_OPT/HIGHER = -Os -CC_OPT/HIGHEST = -Os - -CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) - -# For all platforms, do not omit the frame pointer register usage. -# We need this frame pointer to make it easy to walk the stacks. -# This should be the default on X86, but ia64, and x86_64 -# may not have this as the default. -CFLAGS_REQUIRED_x86_64 += -m64 -fno-omit-frame-pointer -D_LITTLE_ENDIAN -LDFLAGS_COMMON_x86_64 += -m64 -CFLAGS_REQUIRED_i586 += -m32 -fno-omit-frame-pointer -D_LITTLE_ENDIAN -LDFLAGS_COMMON_i586 += -m32 -CFLAGS_REQUIRED_ia64 += -m64 -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9 -LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9 -CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9 -LDFLAGS_COMMON_sparc += -m32 -mcpu=v9 -CFLAGS_REQUIRED_arm += -fsigned-char -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_ppc += -fsigned-char -D_BIG_ENDIAN -ifeq ($(ZERO_BUILD), true) - CFLAGS_REQUIRED = $(ZERO_ARCHFLAG) - ifeq ($(ZERO_ENDIANNESS), little) - CFLAGS_REQUIRED += -D_LITTLE_ENDIAN - endif - LDFLAGS_COMMON += $(ZERO_ARCHFLAG) -else ifeq ($(ARCH), universal) - CFLAGS_REQUIRED += -arch i386 -arch x86_64 -D_LITTLE_ENDIAN - LDFLAGS_COMMON += -arch i386 -arch x86_64 -else - CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) - LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) -endif -# 16-byte stack re-alignment on 32-bit Darwin -CFLAGS_REQUIRED_i586 += -mstackrealign - -OTHER_CFLAGS = \ - -F/System/Library/Frameworks/JavaVM.framework/Frameworks \ - -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks - -# -# Selection of warning messages -# -GCC_INHIBIT = -Wno-unused -Wno-parentheses -GCC_STYLE = -GCC_WARNINGS = -W -Wall $(GCC_STYLE) $(GCC_INHIBIT) - -# -# Treat compiler warnings as errors, if warnings not allowed -# -ifeq ($(COMPILER_WARNINGS_FATAL),true) - GCC_WARNINGS += -Werror -endif - -# -# Misc compiler options -# -ifneq ($(ARCH),ppc) - CFLAGS_COMMON = -fno-strict-aliasing -endif -PIC_CODE_LARGE = -fPIC -PIC_CODE_SMALL = -fpic -GLOBAL_KPIC = $(PIC_CODE_LARGE) -CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS) -ifeq ($(ARCH), x86_64) - CFLAGS_COMMON += -pipe -endif - -# BSD 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1 -DEBUG_FLAG = -g -ifeq ($(FASTDEBUG), true) - ifeq ($(ARCH_DATA_MODEL), 64) - DEBUG_FLAG = -g1 - endif -endif - -# DEBUG_BINARIES overrides everything, use full -g debug information -ifeq ($(DEBUG_BINARIES), true) - DEBUG_FLAG = -g - CFLAGS_REQUIRED += $(DEBUG_FLAG) -endif - -CFLAGS_OPT = $(CC_OPT) -CFLAGS_DBG = $(DEBUG_FLAG) -CFLAGS_COMMON += $(CFLAGS_REQUIRED) - -CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS) -CXXFLAGS_OPT = $(CC_OPT) -CXXFLAGS_DBG = $(DEBUG_FLAG) -CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) - -# FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java -ifeq ($(FASTDEBUG), true) - CFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) - CXXFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) -endif - -CPP_ARCH_FLAGS = -DARCH='"$(ARCH)"' - -# Alpha arch does not like "alpha" defined (potential general arch cleanup issue here) -ifneq ($(ARCH),alpha) - CPP_ARCH_FLAGS += -D$(ARCH) -else - CPP_ARCH_FLAGS += -D_$(ARCH)_ -endif -CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -D_ALLBSD_SOURCE $(VERSION_DEFINES) \ - -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT - -CPPFLAGS_COMMON += -DMACOSX - -ifeq ($(ARCH_DATA_MODEL), 64) -CPPFLAGS_COMMON += -D_LP64=1 -endif - -CPPFLAGS_OPT = -DNDEBUG -CPPFLAGS_DBG = -DDEBUG -ifneq ($(PRODUCT), java) - CPPFLAGS_DBG += -DLOGGING -endif - -# Libraries need to locate other libraries at runtime, and you can tell -# a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) -# buried inside the .{so,dylib}. The {$ORIGIN,@loader_path/} says to look -# relative to where the library itself is and it can be followed -# with relative paths from that. By default we always look in -# {$ORIGIN,@loader_path/}, optionally we add relative paths if the Makefile -# sets LD_RUNPATH_EXTRAS to those relative paths. -# Except on MacOS X we add a flag -z origin, not sure if this is necessary, -# but doesn't seem to hurt. -# The environment variable LD_LIBRARY_PATH will over-ride these runpaths. -# See 'man {dyld,rtld}' for more information. -# Try: 'readelf -d lib*.so' to see these settings in a library. -# -LDFLAGS_COMMON += -Xlinker -rpath -Xlinker @loader_path/. -LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-Xlinker -rpath -Xlinker @loader_path/%) -LDFLAGS_COMMON += -Xlinker -install_name -Xlinker @rpath/$(@F) - -# -# -L paths for finding and -ljava -# -LDFLAGS_COMMON += -L$(LIBDIR) - -# -# -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always -# statically link libgcc but will print a warning with the flag. We don't -# want the warning, so check gcc version first. -# -ifeq ($(CC_MAJORVER),3) - OTHER_LDFLAGS += -static-libgcc -endif - -# Automatic precompiled header option to use (if COMPILE_APPROACH=batch) -# (See Rules.gmk) The gcc 5 compiler might have an option for this? -AUTOMATIC_PCH_OPTION = - -# -# Post Processing of libraries/executables -# -ifeq ($(VARIANT), OPT) - ifneq ($(NO_STRIP), true) - ifneq ($(DEBUG_BINARIES), true) - # Debug 'strip -S' leaves local function Elf symbols (better stack - # traces) - POST_STRIP_PROCESS = $(STRIP) -S - endif - endif -endif - -# -# Use: ld $(LD_MAPFILE_FLAG) mapfile *.o -# -LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker - -# -# Support for Quantify. -# -ifdef QUANTIFY -QUANTIFY_CMD = quantify -QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes -LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) -endif - -# Darwin does not support linker map files. -LDNOMAP=true - -# -# Path and option to link against the VM, if you have to. Note that -# there are libraries that link against only -ljava, but they do get -# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas -# the library itself should not. -# -VM_NAME = server -JVMLIB = -L$(LIBDIR)/server -L$(LIBDIR)/client -ljvm -JAVALIB = -ljava $(JVMLIB) - -# -# We want to privatize JVM symbols on Solaris. This is so the user can -# write a function called FindClass and this should not override the -# FindClass that is inside the JVM. At this point in time we are not -# concerned with other JNI libraries because we hope that there will -# not be as many clashes there. -# -PRIVATIZE_JVM_SYMBOLS = false - -USE_PTHREADS = true -override ALT_CODESET_KEY = _NL_CTYPE_CODESET_NAME -override AWT_RUNPATH = -override HAVE_ALTZONE = false -override HAVE_FILIOH = false -override HAVE_GETHRTIME = false -override HAVE_GETHRVTIME = false -override HAVE_SIGIGNORE = true -override LEX_LIBRARY = -lfl -ifeq ($(STATIC_CXX),true) -override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic -else -override LIBCXX = -lstdc++ -endif -override LIBPOSIX4 = -override LIBSOCKET = -override LIBNSL = -override LIBTHREAD = -override LIBDL = -override MOOT_PRIORITIES = true -override NO_INTERRUPTIBLE_IO = true -override OPENWIN_HOME = $(X11_PATH) -override OPENWIN_LIB = $(OPENWIN_HOME)/lib -override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER -override SUN_CMM_SUBDIR = -override THREADS_FLAG = native -override USE_GNU_M4 = true -override USING_GNU_TAR = true -override WRITE_LIBVERSION = false - -ifdef ALT_X11_PATH - X11_PATH = $(ALT_X11_PATH) -else - X11_PATH = /usr/X11R6 -endif - -ifdef ALT_PACKAGE_PATH - PACKAGE_PATH = $(ALT_PACKAGE_PATH) -else - PACKAGE_PATH = /opt/local -endif - -# ALSA -ifdef ALT_ALSA_LIB_PATH - ALSA_LIB_PATH = $(ALT_ALSA_LIB_PATH) -else - ALSA_LIB_PATH = $(PACKAGE_PATH)/lib -endif - -ifdef ALT_ALSA_HEADERS_PATH - ALSA_HEADERS_PATH = $(ALT_ALSA_HEADERS_PATH) -else - ALSA_HEADERS_PATH = $(PACKAGE_PATH)/include -endif - -# USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the -# resulting resolved absolute name of the executable in the environment -# variable EXECNAME. That executable name is then used that to locate the -# installation area. -override USE_EXECNAME = true - -# If your platform has DPS, it will have Type1 fonts too, in which case -# it is best to enable DPS support until such time as 2D's rasteriser -# can fully handle Type1 fonts in all cases. Default is "yes". -# HAVE_DPS should only be "no" if the platform has no DPS headers or libs -# DPS (Displayable PostScript) is available on Solaris machines -HAVE_DPS = no - -SYSTEM_ZLIB = true - -# -# Japanese manpages -# -JA_SOURCE_ENCODING = eucJP -JA_TARGET_ENCODINGS = UTF-8 - -# Settings for the JDI - Serviceability Agent binding. - -HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH) -SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX) - -# The JDI - Serviceability Agent binding is not currently supported -# on ia64. -ifeq ($(ARCH), ia64) - INCLUDE_SA = false -else - INCLUDE_SA = true -endif - -ifdef CROSS_COMPILE_ARCH - # X11 headers are not under /usr/include - OTHER_CFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include - OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include -endif - -LIB_LOCATION ?= $(LIBDIR) diff --git a/jdk/makefiles/common/Defs-solaris.gmk b/jdk/makefiles/common/Defs-solaris.gmk deleted file mode 100644 index 7632e6767f1..00000000000 --- a/jdk/makefiles/common/Defs-solaris.gmk +++ /dev/null @@ -1,757 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile to specify compiler flags for programs and libraries -# targeted to Solaris. Should not contain any rules. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Warning: the following variables are overridden by Defs.gmk. Set -# values will be silently ignored: -# CFLAGS (set $(OTHER_CFLAGS) instead) -# CPPFLAGS (set $(OTHER_CPPFLAGS) instead) -# CXXFLAGS (set $(OTHER_CXXFLAGS) instead) -# LDFLAGS (set $(OTHER_LDFAGS) instead) -# LDLIBS (set $(EXTRA_LIBS) instead) -# LDLIBS_COMMON (set $(EXTRA_LIBS) instead) -# LINTFLAGS (set $(OTHER_LINTFLAGS) instead) -# -# Note: CPPFLAGS are used in C and C++ compiles. -# - -# Get shared JDK settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -ifndef PLATFORM_SRC -PLATFORM_SRC = $(BUILDDIR)/../src/solaris -endif # PLATFORM_SRC - -# Platform specific closed sources -ifndef OPENJDK - ifndef CLOSED_PLATFORM_SRC - CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/solaris - endif -endif - -# platform specific include files -PLATFORM_INCLUDE_NAME = $(PLATFORM) -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# suffix used for make dependencies files -DEPEND_SUFFIX = d -# suffix used for lint files -LINT_SUFFIX = ln -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = a -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! - -ifdef ENABLE_FULL_DEBUG_SYMBOLS -# Only check for Full Debug Symbols support on Solaris if it is -# specifically enabled. Hopefully, it can be enabled by default -# once the .debuginfo size issues are worked out. - -# Default OBJCOPY comes from the SUNWbinutils package: -DEF_OBJCOPY=/usr/sfw/bin/gobjcopy -ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64) - # On Solaris AMD64/X64, gobjcopy is not happy and fails: - # - # usr/sfw/bin/gobjcopy --add-gnu-debuglink=.debuginfo .so - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: libsaproc.debuginfo: Bad value - # BFD: stKPaiop: Not enough room for program headers, try linking with -N - # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value - _JUNK_ := $(shell \ - echo >&2 "INFO: $(DEF_OBJCOPY) is not working on Solaris AMD64/X64") - OBJCOPY= -else - OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY)) - ifneq ($(ALT_OBJCOPY),) - _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)") - # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path - OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY)) - endif -endif - -ifdef LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS -# The setting of OBJCOPY above enables the JDK build to import -# .debuginfo files from the HotSpot build. However, adding FDS -# support to the JDK build will occur in phases so a different -# make variable is used to indicate that a particular library -# supports FDS. - -ifeq ($(OBJCOPY),) - _JUNK_ := $(shell \ - echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.") -else - _JUNK_ := $(shell \ - echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.") - - # Library stripping policies for .debuginfo configs: - # all_strip - strips everything from the library - # min_strip - strips most stuff from the library; leaves minimum symbols - # no_strip - does not strip the library at all - # - # Oracle security policy requires "all_strip". A waiver was granted on - # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE. - # - DEF_STRIP_POLICY="min_strip" - ifeq ($(ALT_STRIP_POLICY),) - STRIP_POLICY=$(DEF_STRIP_POLICY) - else - STRIP_POLICY=$(ALT_STRIP_POLICY) - endif - _JUNK_ := $(shell \ - echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)") -endif -endif -endif - -# -# Java default optimization (-x04/-O2) etc. Applies to the VM. -# -ifndef OPTIMIZATION_LEVEL - ifeq ($(PRODUCT), java) - OPTIMIZATION_LEVEL = HIGHER - else - OPTIMIZATION_LEVEL = LOWER - endif -endif -ifndef FASTDEBUG_OPTIMIZATION_LEVEL - FASTDEBUG_OPTIMIZATION_LEVEL = LOWER -endif - -# -# If -Xa is in CFLAGS_COMMON it will end up ahead of $(CC_OPT) for the -# optimized build, and that ordering of the flags completely freaks -# out cc. Hence, -Xa is instead in each CFLAGS variant. -# -# The more unusual options to the Sun C compiler: -# -v Stricter type checking, more error checking -# (To turn ALL warnings into fatals, use -errwarn=%all) -# -xstrconst Place string literals and constants in read-only area -# (means you can't write on your string literals) -# -xs Force debug information (stabs) into the .so or a.out -# (makes the library/executable debuggable without the -# .o files needing to be around, but at a space cost) -# -g & -O If you add the -g option to the optimized compiles -# you will get better stack retraces, the code is -# still optimized. This includes a space cost too. -# -xc99=%none Do NOT allow for c99 extensions to be used. -# e.g. declarations must precede statements -# -xCC Allow the C++ style of comments in C: // -# Required with many of the source files. -# -mt Assume multi-threaded (important) -# -# The more unusual options to the Sun C compiler: -# +w Print more warnings -# +w2 Maximum warnings -# - -# -# Debug flag for C and C++ compiler -# -CFLAGS_DEBUG_OPTION = -g $(CC_OPT/NONE) -CXXFLAGS_DEBUG_OPTION = -g $(CXX_OPT/NONE) - -# Turn off -g if we are doing tcov build -ifdef TCOV_BUILD - CFLAGS_DEBUG_OPTION= - CXXFLAGS_DEBUG_OPTION= -endif - -# FASTDEBUG: Optimize the -g builds, gives us a faster debug java -# If true adds -O to the debug compiles. This allows for any assert -# tests to remain and debug checking. The resulting code is faster -# but less debuggable. Stack traces are still valid, although only -# approximate line numbers are given. Printing of local variables -# during a debugging session is not possible, but stepping and -# printing of global or static variables should be possible. -# Performance/size of files should be about the same, maybe smaller. -# -ifeq ($(FASTDEBUG), true) - CFLAGS_DEBUG_OPTION = -g $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) - CXXFLAGS_DEBUG_OPTION = -g0 $(CXX_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) -endif - -CFLAGS_COMMON = -L$(OBJDIR) - -# Do not allow C99 language features like declarations in code etc. -CFLAGS_COMMON += -xc99=%none - -# Allow C++ comments in C code -CFLAGS_COMMON += -xCC - -# Show error message tags on errors -CFLAGS_COMMON += -errshort=tags -CXXFLAGS_COMMON += -errtags=yes - -# Optimization flags -CFLAGS_OPT = $(CC_OPT) - -# Debug version flags -CFLAGS_DBG = $(CFLAGS_DEBUG_OPTION) - -# Required C compiler flags -CFLAGS_COMMON += -Xa $(CFLAGS_REQUIRED) - -# Maximum warnings all the time -CXXFLAGS_COMMON += +w -CFLAGS_COMMON += -v - -# Assume MT behavior all the time (important) -CXXFLAGS_COMMON += -mt -CFLAGS_COMMON += -mt - -# Assume no C++ exceptions are used -CXXFLAGS_COMMON += -features=no%except -DCC_NOEX - -# For C++, these options tell it to assume nothing about locating libraries -# either at compile time, or at runtime. Use of these options will likely -# require the use of -L and -R options to indicate where libraries will -# be found at compile time (-L) and at runtime (-R). -# The /usr/lib location comes for free, so no need to specify that one. -# Note: C is much simplier and there is no need for these options. This -# is mostly needed to avoid dependencies on libraries in the -# Compiler install area, also see LIBCXX and LIBM. -CXXFLAGS_COMMON += -norunpath -xnolib - -# -# Treat compiler warnings as errors, if requested -# -ifeq ($(COMPILER_WARNINGS_FATAL),true) - CFLAGS_COMMON += -errwarn=%all - CXXFLAGS_COMMON += -errwarn=%all -endif - -CXXFLAGS_OPT = $(CXX_OPT) -CXXFLAGS_DBG = $(CXXFLAGS_DEBUG_OPTION) -CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) - -# Add -xstrconst to the library compiles. This forces all string -# literals into the read-only data section, which prevents them from -# being written to and increases the runtime pages shared on the system. -# -ifdef LIBRARY - CFLAGS_COMMON +=-xstrconst -endif - -# Source browser database -# -# COMPILE_WITH_SB -# If defined adds -xsb to compiles and creates a -# source browsing database during compilation. -# -ifdef COMPILE_WITH_SB - ifeq ($(LIBRARY), java) - CFLAGS_DBG += -xsb - endif -endif - -# Lint Flags: -# -Xa ANSI C plus K&R, favor ANSI rules -# -fd report on old style func defs -# -errchk=structarg report on 64bit struct args by value -# -errchk=longptr64 report on 64bit to 32bit issues (ignores casts) -# -errchk=parentheses report on suggested use of extra parens -# -v suppress unused args -# -x suppress unused externs -# -u suppress extern func/vars used/defined -# -errfmt=simple use one line errors with position info -# $(LINT_XARCH_OPTION) See Compiler-sun.gwk - -LINTFLAGS_COMMON = -Xa -LINTFLAGS_COMMON += -fd -LINTFLAGS_COMMON += -errchk=structarg,longptr64,parentheses -LINTFLAGS_COMMON += -v -LINTFLAGS_COMMON += -x -LINTFLAGS_COMMON += -u -LINTFLAGS_COMMON += -errfmt=simple -LINTFLAGS_OPT = -LINTFLAGS_DBG = - -# The -W0,-noglobal tells the compiler to NOT generate mangled global -# ELF data symbols for file local static data. -# This can break fix&continue, but we'd rather do the same compilations -# for deliverable bits as we do for non-deliverable bits -# Tell the compilers to never generate globalized names, all the time. -CFLAGS_COMMON += -W0,-noglobal - -# If we have a specific arch value to use, add it -CFLAGS_COMMON += $(XARCH_OPTION) -CXXFLAGS_COMMON += $(XARCH_OPTION) -ASFLAGS_COMMON += $(AS_XARCH_OPTION) -EXTRA_LIBS += $(XARCH_OPTION) -LINTFLAGS_COMMON += $(LINT_XARCH_OPTION) - -# -# uncomment the following to build with PERTURBALOT set -# -# OTHER_CFLAGS += -DPERTURBALOT -# - -CPPFLAGS_COMMON = -D__solaris__ -D$(ARCH_FAMILY) -CPPFLAGS_OPT = -DNDEBUG -CPPFLAGS_DBG = -DDEBUG - -ifneq ($(PRODUCT), java) - CPPFLAGS_DBG += -DLOGGING -DDBINFO -endif - -ifeq ($(ARCH_FAMILY), i586) - # The macro _LITTLE_ENDIAN needs to be defined the same to avoid the - # Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN - # (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h). - # Note: -Dmacro is the same as #define macro 1 - # -Dmacro= is the same as #define macro - # - CPPFLAGS_COMMON += -DcpuIntel -D_LITTLE_ENDIAN= -D$(LIBARCH) - # Turn off a superfluous compiler error message on Intel - CFLAGS_COMMON += -erroff=E_BAD_PRAGMA_PACK_VALUE -endif - -# Java memory management is based on memory mapping by default, but a -# system only assuming malloc/free can be built by adding -DUSE_MALLOC - -CPPFLAGS_COMMON += -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS -CPPFLAGS_OPT += -DTRIMMED - -LDFLAGS_DEFS_OPTION = -z defs -LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) - -# -# -L paths for finding and -ljava -# -LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH) -LDFLAGS_OPT = -LDFLAGS_DBG = - -# -# We never really want the incremental linker, ever -# The -xildoff option tells Sun's compilers to NOT use incremental linker -# -LDFLAGS_COMMON += -xildoff - -ifdef LIBRARY - # Libraries need to locate other libraries at runtime, and you can tell - # a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) - # buried inside the .so. The $ORIGIN says to look relative to where - # the library itself is and it can be followed with relative paths from - # that. By default we always look in $ORIGIN, optionally we add relative - # paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths. - # The environment variable LD_LIBRARY_PATH will over-ride these runpaths. - # Try: 'dump -Lv lib*.so' to see these settings in a library. - # - LDFLAGS_COMMON += -R\$$ORIGIN - LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-R\$$ORIGIN/%) -endif - -EXTRA_LIBS += -lc - -# Postprocessing is done on the images directories only -# -ifeq ($(VARIANT), OPT) - ifeq ($(PARTIAL_GPROF), true) - NO_STRIP = true - endif - ifeq ($(GPROF), true) - NO_STRIP = true - endif - ifneq ($(NO_STRIP), true) - # Debug 'strip -x' leaves local function Elf symbols (better stack traces) - POST_STRIP_PROCESS = $(STRIP) -x - endif -endif -POST_MCS_PROCESS=$(MCS) -d -a "JDK $(FULL_VERSION)" - -# -# Sun C compiler will take -M and pass it on to ld. -# Usage: ld $(LD_MAPFILE_FLAG) mapfile *.o -# -ifeq ($(CC_VERSION),gcc) -LD_MAPFILE_FLAG = -Xlinker -M -Xlinker -else -LD_MAPFILE_FLAG = -M -endif - -# -# Variables globally settable from the make command line (default -# values in brackets): -# GPROF (false) -# Eg: % gnumake GPROF=true -GPROF = false -ifeq ($(GPROF), true) - CFLAGS_COMMON += -DGPROF -xpg - EXTRA_LIBS += -xpg -endif - -# PARTIAL_GPROF is to be used ONLY during compilation - it should not -# appear during linking of libraries or programs. It also should -# prevent linking with -z defs to allow a symbol to remain undefined. -# -PARTIAL_GPROF = false -ifeq ($(PARTIAL_GPROF), true) - CFLAGS_GPROF += -xpg - LDFLAGS_DEFS_OPTION = -z nodefs -endif - -# -# For a TCOV build we add in the TCOV_OPTION -# -ifdef TCOV_BUILD - TCOV_OPTION = -xprofile=tcov - LDFLAGS_COMMON += $(TCOV_OPTION) -Kpic - CFLAGS_COMMON += $(TCOV_OPTION) - CXXFLAGS_COMMON += $(TCOV_OPTION) - EXTRA_LIBS += $(TCOV_OPTION) - LDNOMAP=true -endif - -# -# Solaris only uses native threads. -# -THREADS_FLAG= native -THREADS_DIR= threads - -# -# Support for Quantify. -# -ifdef QUANTIFY - QUANTIFY_CMD = quantify - QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes - LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) - ifdef LIBRARY - CFLAGS_COMMON += -K PIC - endif -endif - -# -# Support for Purify. -# -ifdef PURIFY - PURIFY_CMD = /net/suntools.eng/export/tools/sparc/bin/purify - PURIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes - LINK_PRE_CMD = $(PURIFY_CMD) $(PURIFY_OPTIONS) - ifdef LIBRARY - CFLAGS_COMMON += -K PIC - endif -endif - -# -# Different "levels" of optimization. -# -ifeq ($(CC_VERSION),gcc) - - CC_OPT/NONE = - CC_OPT/LOWER = -O2 - CC_OPT/HIGHER = -O3 - CC_OPT/HIGHEST = -O3 - - CXX_OPT/NONE = - CXX_OPT/LOWER = -O2 - CXX_OPT/HIGHER = -O3 - CXX_OPT/HIGHEST = -O3 - - CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer - CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer - - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - # (See Rules.gmk) May need to wait for gcc 5? - AUTOMATIC_PCH_OPTION = - -else - - # Highest could be -xO5, but indications are that -xO5 should be reserved - # for a per-file use, on sources with known performance impacts. - OPT_LEVEL/LOWER = 2 - OPT_LEVEL/HIGHER = 4 - OPT_LEVEL/HIGHEST = 4 - - CC_OPT/NONE = - CC_OPT/LOWER = $(OPT_LEVEL/LOWER:%=-xO%) - CC_OPT/HIGHER = $(OPT_LEVEL/HIGHER:%=-xO%) - CC_OPT/HIGHEST = $(OPT_LEVEL/HIGHEST:%=-xO%) - - CXX_OPT/NONE = - CXX_OPT/LOWER = $(OPT_LEVEL/LOWER:%=-xO%) - CXX_OPT/HIGHER = $(OPT_LEVEL/HIGHER:%=-xO%) - CXX_OPT/HIGHEST = $(OPT_LEVEL/HIGHEST:%=-xO%) - - # We need stack frames at all times - USE_XKEEPFRAME_OPTION = false - ifeq ($(USE_XKEEPFRAME_OPTION),true) - - # Unknown spelling on this option at this time (Maybe in SS13?) - CC_XKEEPFRAME_OPTIONS = -xkeepframe - CXX_XKEEPFRAME_OPTIONS = -xkeepframe - - else - - # On X86, make sure tail call optimization is off - # The z and y are the tail call optimizations. - ifeq ($(ARCH_FAMILY), i586) - CC_NEWER_THAN_58 := \ - $(shell $(EXPR) $(CC_MAJORVER) \> 5 \| \ - \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \> 8 \) ) - ifeq ($(CC_NEWER_THAN_58),1) - # Somehow, tail call optimization is creeping in. - # Make sure it is off. - # WARNING: These may cause compiler warnings about duplicate -O options - CC_XKEEPFRAME_OPTIONS += -Wu,-O$(OPT_LEVEL/$(OPTIMIZATION_LEVEL))~yz - CXX_XKEEPFRAME_OPTIONS += -Qoption ube -O$(OPT_LEVEL/$(OPTIMIZATION_LEVEL))~yz - endif - endif - - # On i586 we need to tell the code generator to ALWAYS use a - # frame pointer. - ifeq ($(ARCH_FAMILY), i586) - # Note that in 5.7, this is done with -xregs=no%frameptr - ifeq ($(CC_VER), 5.5) - # It's not exactly clear when this optimization kicks in, the - # current assumption is -xO4 or greater and for C++ with - # the -features=no%except option and -xO4 and greater. - # Bottom line is, we ALWAYS want a frame pointer! - CC_XKEEPFRAME_OPTIONS += -Wu,-Z~B - CXX_XKEEPFRAME_OPTIONS += -Qoption ube -Z~B - endif - - CC_NEWER_THAN_56 := \ - $(shell $(EXPR) $(CC_MAJORVER) \> 5 \| \ - \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \> 6 \) ) - ifeq ($(CC_NEWER_THAN_56),1) - # Do NOT use frame pointer register as a general purpose opt register - CC_OPT/NONE += -xregs=no%frameptr - CXX_OPT/NONE += -xregs=no%frameptr - CC_XKEEPFRAME_OPTIONS += -xregs=no%frameptr - CXX_XKEEPFRAME_OPTIONS += -xregs=no%frameptr - endif - endif - - # Optimizer for sparc needs to be told not to do certain things - # related to frames or save instructions. - ifeq ($(ARCH_FAMILY), sparc) - # Do not use save instructions instead of add instructions - # This was an optimization starting in SC5.0 that made it hard for us to - # find the "save" instruction (which got turned into an "add") - CC_XKEEPFRAME_OPTIONS += -Wc,-Qrm-s - CXX_XKEEPFRAME_OPTIONS += -Qoption cg -Qrm-s - # Don't allow tail call code optimization. Started in SC5.0. - # We don't like code of this form: - # save - # - # call foo - # restore - # because we can't tell if the method will have a stack frame - # and register windows or not. - CC_XKEEPFRAME_OPTIONS += -Wc,-Qiselect-T0 - CXX_XKEEPFRAME_OPTIONS += -Qoption cg -Qiselect-T0 - endif - - endif - - # Extra options used with HIGHEST - # - # WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be - # done with care, there are some assumptions below that need to - # be understood about the use of pointers, and IEEE behavior. - # - # Use non-standard floating point mode (not IEEE 754) - CC_HIGHEST_EXTRAS += -fns - # Do some simplification of floating point arithmetic (not IEEE 754) - CC_HIGHEST_EXTRAS += -fsimple - # Use single precision floating point with 'float' - CC_HIGHEST_EXTRAS += -fsingle - # Assume memory references via basic pointer types do not alias - # (Source with excessing pointer casting and data access with mixed - # pointer types are not recommended) - CC_HIGHEST_EXTRAS += -xalias_level=basic - # Use intrinsic or inline versions for math/std functions - # (If you expect perfect errno behavior, do not use this) - CC_HIGHEST_EXTRAS += -xbuiltin=%all - # Loop data dependency optimizations (need -xO3 or higher) - CC_HIGHEST_EXTRAS += -xdepend - # Pointer parameters to functions do not overlap - # (Similar to -xalias_level=basic usage, but less obvious sometimes. - # If you pass in multiple pointers to the same data, do not use this) - CC_HIGHEST_EXTRAS += -xrestrict - # Inline some library routines - # (If you expect perfect errno behavior, do not use this) - CC_HIGHEST_EXTRAS += -xlibmil - # Use optimized math routines - # (If you expect perfect errno behavior, do not use this) - # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now - # CC_HIGHEST_EXTRAS += -xlibmopt - ifeq ($(ARCH_FAMILY), sparc) - # Assume at most 8byte alignment, raise SIGBUS on error - ### Presents an ABI issue with customer JNI libs? - ####CC_HIGHEST_EXTRAS += -xmemalign=8s - # Automatic prefetch instructions, explicit prefetch macros - CC_HIGHEST_EXTRAS += -xprefetch=auto,explicit - # Pick ultra as the chip to optimize to - CC_HIGHEST_EXTRAS += -xchip=ultra - endif - ifeq ($(ARCH), i586) - # Pick pentium as the chip to optimize to - CC_HIGHEST_EXTRAS += -xchip=pentium - endif - ifdef LIBRARY - # The Solaris CBE (Common Build Environment) requires that the use - # of appl registers be disabled when compiling a public library (or - # a library that's loaded by a public library) on sparc. - CFLAGS_REQUIRED_sparc += -xregs=no%appl - CFLAGS_REQUIRED_sparcv9 += -xregs=no%appl - endif - CC_NEWER_THAN_56 := \ - $(shell $(EXPR) $(CC_MAJORVER) \> 5 \| \ - \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \> 6 \) ) - ifeq ($(CC_NEWER_THAN_56),1) - # Presents an ABI issue with customer JNI libs? We must be able to - # to handle 4byte aligned objects? (rare occurance, but possible?) - CFLAGS_REQUIRED_sparc += -xmemalign=4s - endif - # Just incase someone trys to use the SOS9 compilers - ifeq ($(CC_VER), 5.6) - # We MUST allow data alignment of 4 for sparc (sparcv9 is ok at 8s) - CFLAGS_REQUIRED_sparc += -xmemalign=4s - endif - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - # (See Rules.gmk) The SS11 -xpch=auto* options appear to be broken. - AUTOMATIC_PCH_OPTION = - - # Add in keep frame options - CC_OPT/LOWER += $(CC_XKEEPFRAME_OPTIONS) - CC_OPT/HIGHER += $(CC_XKEEPFRAME_OPTIONS) - CC_OPT/HIGHEST += $(CC_XKEEPFRAME_OPTIONS) - CXX_OPT/LOWER += $(CXX_XKEEPFRAME_OPTIONS) - CXX_OPT/HIGHER += $(CXX_XKEEPFRAME_OPTIONS) - CXX_OPT/HIGHEST += $(CXX_XKEEPFRAME_OPTIONS) - - # Add in highest optimization settings - CC_OPT/HIGHEST += $(CC_HIGHEST_EXTRAS) - CXX_OPT/HIGHEST += $(CC_HIGHEST_EXTRAS) - -endif - -# Default optimization settings based on level. -CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) -CXX_OPT = $(CXX_OPT/$(OPTIMIZATION_LEVEL)) - -# Flags required all the time -CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) - -# -# Path and option to link against the VM, if you have to. Note that -# there are libraries that link against only -ljava, but they do get -# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas -# the library itself should not. -# -VM_NAME = server -JVMLIB = -L$(LIBDIR)/$(LIBARCH)/server -L$(LIBDIR)/$(LIBARCH)/client -ljvm -JAVALIB = -ljava $(JVMLIB) - -# Part of INCREMENTAL_BUILD mechanism. -# Compiler emits things like: path/file.o: file.h -# We want something like: relative_path/file.o relative_path/file.d: file.h -# In addition on Solaris, any include file starting with / is deleted, -# this gets rid of things like /usr/include files, which never change. -CC_DEPEND = -xM1 -CC_DEPEND_FILTER = $(SED) -e '/:[ ]*[/]/d' -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' | $(SORT) -u - -# Location of openwin libraries (do we really need this anymore?) -OPENWIN_HOME = /usr/openwin -OPENWIN_LIB = $(OPENWIN_HOME)/lib$(ISA_DIR) - -# Runtime graphics library search paths... -OPENWIN_RUNTIME_LIB = /usr/openwin/lib$(ISA_DIR) -AWT_RUNPATH = -R/usr/dt/lib$(ISA_DIR) -R$(OPENWIN_RUNTIME_LIB) - -# C++ Runtime library (libCrun.so), use instead of -lCrun. -# Originally used instead of -lCrun to guarantee use of the system -# .so version and not the .a or .so that came with the compilers. -# With the newer compilers this could probably change back to -lCrun but -# in general this is ok to continue to do. -LIBCXX = /usr/lib$(ISA_DIR)/libCrun.so.1 - -# JDK now requires Solaris 10, so pick up libm.so.2 -LIBM = /usr/lib$(ISA_DIR)/libm.so.2 - -# Socket library -LIBSOCKET = -lsocket - -# Network Services library -LIBNSL = -lnsl - -# service configuration facility library -LIBSCF = -lscf - -# Dynamic Loading library -LIBDL = -ldl - -# GLOBAL_KPIC: If set means all libraries are PIC, position independent code -# EXCEPT for select compiles -# If a .o file is compiled non-PIC then it should be forced -# into the RW data segment with a mapfile option. This is done -# with object files which generated from .s files. -# The -ztext enforces that no relocations remain in the text segment -# so that it remains purely read-only for optimum system performance. -# Some libraries may use a smaller size (13bit -Kpic) on sparc instead of -# (32 bit -KPIC) and will override GLOBAL_KPIC appropriately. -# -PIC_CODE_LARGE = -KPIC -PIC_CODE_SMALL = -Kpic -ifndef TCOV_BUILD - GLOBAL_KPIC = $(PIC_CODE_LARGE) - CXXFLAGS_COMMON += $(GLOBAL_KPIC) - CFLAGS_COMMON += $(GLOBAL_KPIC) - LDFLAGS_COMMON += -ztext -endif # TCOV_BUILD - -# If your platform has DPS, it will have Type1 fonts too, in which case -# it is best to enable DPS support until such time as 2D's rasteriser -# can fully handle Type1 fonts in all cases. Default is "yes". -# HAVE_DPS should only be "no" if the platform has no DPS headers or libs -# DPS (Displayable PostScript) is available on Solaris machines - -HAVE_DPS = yes - -# -# Japanese manpages -# -JA_SOURCE_ENCODING = eucJP -JA_TARGET_ENCODINGS = eucJP UTF-8 PCK - -# Settings for the JDI - Serviceability Agent binding. -HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH) -SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX) -SA_DEBUGINFO_NAME = $(LIB_PREFIX)saproc.debuginfo -INCLUDE_SA=true - diff --git a/jdk/makefiles/common/Defs-windows.gmk b/jdk/makefiles/common/Defs-windows.gmk deleted file mode 100644 index 54c9879adf5..00000000000 --- a/jdk/makefiles/common/Defs-windows.gmk +++ /dev/null @@ -1,418 +0,0 @@ -# -# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile to specify compiler flags for programs and libraries -# targeted to Windows builds. Should not contain any rules. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Get shared JDK settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -Fo - -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = lib -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = .bat - -# LIB_LOCATION, which for windows identifies where .exe files go, may be -# set by each GNUmakefile. The default is BINDIR. -ifndef LIB_LOCATION - LIB_LOCATION = $(BINDIR) -endif # LIB_LOCATION - -ifndef PLATFORM_SRC - PLATFORM_SRC = $(BUILDDIR)/../src/windows -endif # PLATFORM_SRC - -# Platform specific closed sources -ifndef OPENJDK - ifndef CLOSED_PLATFORM_SRC - CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/windows - endif -endif - -# for backwards compatability, the old "win32" is used here instead of -# the more proper "windows" -PLATFORM_INCLUDE_NAME = win32 -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# The following DLL's are considered MS runtime libraries and should -# not to be REBASEd, see deploy/make/common/Release.gmk. -# msvcr*.dll: Microsoft runtimes -ifeq ($(COMPILER_VERSION), VS2010) - MSVCRNN_DLL = msvcr100.dll - MSVCPNN_DLL = msvcp100.dll -endif - -EXTRA_LFLAGS += /LIBPATH:$(DXSDK_LIB_PATH) - -# C Compiler flag definitions - -# -# Default optimization -# - -ifndef OPTIMIZATION_LEVEL - ifeq ($(PRODUCT), java) - OPTIMIZATION_LEVEL = HIGHER - else - OPTIMIZATION_LEVEL = LOWER - endif -endif -ifndef FASTDEBUG_OPTIMIZATION_LEVEL - FASTDEBUG_OPTIMIZATION_LEVEL = LOWER -endif - -ifeq ($(CC_VERSION),msvc) - # Visual Studio compiler option definitions: - # -O1 Favors reduced size over speed (-Og -Os -Oy -Ob2 -Gs -GF -Gy) - # -O2 Favors speed over reduced size (-Og -Oi -Ot -Oy -Ob2 -Gs -GF -Gy) - # -Ob2 More aggressive inlining - # -Og Global optimizations - # -Oi Replace some functions with intrinsic or special forms - # -fp:precise (should be the default) - # Improve floating point calculations (disables some optimizations) - # -Os Favor small code - # -Ot Favor faster code - # -Oy Frame pointer omission - # -G6 Used to be -GB? - # -GF Pool strings in read-only memory - # -Gf Pool strings in read-write memory (the default) - # -Gs Controls stack probess - # -GS Adds buffer overflow checks on stacks (the default) - # -EHsc Enables exception handling - # -Gy Function level linking only - # - - CC_OPT/NONE = -Od - CC_OPT/LOWER = -O2 - CC_OPT/HIGHER = -O3 - CC_OPT/HIGHEST = -O3 - - ifeq ($(COMPILER_VERSION), VS2010) - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - AUTOMATIC_PCH_OPTION = - GX_OPTION = -EHsc - GZ_OPTION = -RTC1 - ifeq ($(ARCH_DATA_MODEL), 32) - CC_OPT/HIGHEST = -O2 - CC_OPT/HIGHER = -O1 - CC_OPT/LOWER = -O1 - else - CC_OPT/HIGHEST = -O2 - CC_OPT/HIGHER = -O1 - CC_OPT/LOWER = -O1 - endif - endif - -else # CC_VERSION - # GCC not supported, but left for historical reference... - CC_OPT/NONE = - CC_OPT/LOWER = -O2 - CC_OPT/HIGHER = -O2 - CC_OPT/HIGHEST = -O3 - -endif - -CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) - -# Select the runtime support library carefully, need to be consistent -# -# Visual Studio Runtime compiler option definitions: -# -MD Use dynamic multi-threaded runtime library -# -MDd Use debug version (don't use, doesn't mix with -MD DLL's) -# -MT Use static multi-threaded runtime library (-ML is going away) -# -MTd Use static debug version (better than -MDd, no runtime issues) -# -D_DEBUG Change use of malloc/free/etc to use special debug ones (-MTd) -# -# NOTE: We also will use /D _STATIC_CPPLIB so we don't need msvcpnn.dll -# -# If MS_RUNTIME_STATIC is requested we may have a problem, it is no longer -# supported by VS2010 -ifneq ($(MS_RUNTIME_STATIC),true) - MS_RUNTIME_OPTION=-MD -endif -# The _DEBUG macro option (changes things like malloc to use debug version) -MS_RUNTIME_DEBUG_OPTION= -MS_RC_DEBUG_OPTION= -# Externally set environment variable can force any build to use the debug vers -ifeq ($(MFC_DEBUG), true) - ifeq ($(MS_RUNTIME_STATIC),true) - MS_RUNTIME_OPTION=-MTd - else - # This MS debugging flag forces a dependence on the debug - # version of the runtime library (MSVCR*D.DLL), as does -MDd. - # We cannot re-distribute this debug runtime. - MS_RUNTIME_OPTION=-MDd - endif - MS_RUNTIME_DEBUG_OPTION= -D_DEBUG - MS_RC_DEBUG_OPTION= -d _DEBUG -endif - -# Always add _STATIC_CPPLIB definition -STATIC_CPPLIB_OPTION = /D _STATIC_CPPLIB - -# Silence the warning about using _STATIC_CPPLIB -ifneq ($(SHOW_ALL_WARNINGS),true) - # Needed with VS2010 to turn off the deprecated warning. - STATIC_CPPLIB_OPTION += /D _DISABLE_DEPRECATE_STATIC_CPPLIB -endif - -MS_RUNTIME_OPTION += $(STATIC_CPPLIB_OPTION) - -ifeq ($(CC_VERSION),msvc) - # Visual Studio compiler option definitions: - # -Zi Cause *.pdb file to be created, full debug information - # -Z7 Full debug inside the .obj, no .pdb - # -Zd Basic debug, no local variables? In the .obj - # -Zl Don't add runtime library name to obj file? - # -Od Turns off optimization and speeds compilation - # -YX -Fp/.../foobar.pch Use precompiled headers (try someday?) - # -nologo Don't print out startup message - # /D _STATIC_CPPLIB - # Use static link for the C++ runtime (so msvcpnn.dll not needed) - # - CFLAGS_COMMON += -Zi -nologo - CFLAGS_OPT = $(CC_OPT) - CFLAGS_DBG = -Od $(MS_RUNTIME_DEBUG_OPTION) - - CFLAGS_VS2010 += -Zc:wchar_t- - - # All builds get the same runtime setting - CFLAGS_COMMON += $(MS_RUNTIME_OPTION) $(CFLAGS_$(COMPILER_VERSION)) - - LDEBUG = /debug - - ifeq ($(VTUNE_SUPPORT), true) - OTHER_CFLAGS = -Z7 -Ox - LDEBUG += /pdb:NONE - endif - - # VS2010, always need safe exception handlers, not needed on 64bit - ifeq ($(ARCH_DATA_MODEL), 32) - LFLAGS_VS2010 += -SAFESEH - endif - - # LFLAGS are the flags given to $(LINK) and used to build the actual DLL file - BASELFLAGS = -nologo /opt:REF /incremental:no - - LFLAGS = $(BASELFLAGS) $(LDEBUG) $(EXTRA_LFLAGS) $(LFLAGS_$(COMPILER_VERSION)) - LDDFLAGS += $(LFLAGS_$(COMPILER_VERSION)) - -endif - -# -# Preprocessor macro definitions -# -CPPFLAGS_COMMON = -DWIN32 -DIAL -D_LITTLE_ENDIAN -ifeq ($(ARCH), amd64) - CPPFLAGS_COMMON += -D_AMD64_ -Damd64 -else - CPPFLAGS_COMMON += -D_X86_ -Dx86 -endif -CPPFLAGS_COMMON += -DWIN32_LEAN_AND_MEAN - -# -# Output options (use specific filenames to avoid parallel compile errors) -# -CFLAGS_COMMON += -Fd$(OBJDIR)/$(basename $(@F)).pdb -Fm$(OBJDIR)/$(basename $(@F)).map - -# -# Use -wdNNNN to disable warning NNNN. -# C4800 is a warning about bool performance casts (can't make go away) -# -COMPILER_WARNINGS_TO_IGNORE = 4800 -CFLAGS_COMMON += $(COMPILER_WARNINGS_TO_IGNORE:%=-wd%) - -# -# Treat compiler warnings as errors, if requested -# -CFLAGS_COMMON += -W$(COMPILER_WARNING_LEVEL) -ifeq ($(COMPILER_WARNINGS_FATAL),true) - CFLAGS_COMMON += -WX -endif - -# Turn off some warnings by default, enable them all if asked. -ifneq ($(SHOW_ALL_WARNINGS),true) - # The -D _CRT_SECURE_NO_DEPRECATE turns off security/deprecated warnings on - # the standard C library functions like strcpy. - CFLAGS_COMMON += -D _CRT_SECURE_NO_DEPRECATE - # The -D _CRT_NONSTDC_NO_DEPRECATE turns off deprecation warnings about using - # non-standard C POSIX functions. - CFLAGS_COMMON += -D _CRT_NONSTDC_NO_DEPRECATE -endif - -CPPFLAGS_OPT = -DNDEBUG -CPPFLAGS_DBG = -DDEBUG -DLOGGING - -CXXFLAGS_COMMON = $(CFLAGS_COMMON) -CXXFLAGS_OPT = $(CFLAGS_OPT) -CXXFLAGS_DBG = $(CFLAGS_DBG) - -ifneq ($(LIBRARY),fdlibm) - EXTRA_LIBS += advapi32.lib -endif - -# -# Path and option to link against the VM, if you have to. -# -JVMLIB = $(LIBDIR)/jvm.lib -JAVALIB = $(LIBDIR)/java.lib - -ifeq ($(CC_VERSION), msvc) - CC_DEPEND = -FD - CC_DEPEND_FILTER = -else # CC_VERSION -# not supported, but left for historical reference... - CC_DEPEND = -MM - CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)&!g' -endif # CC_VERSION - -LIBRARY_SUFFIX = dll -LIB_SUFFIX = lib - -# Settings for the JDI - Serviceability Agent binding. -HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/bin -SALIB_NAME = $(LIB_PREFIX)sawindbg.$(LIBRARY_SUFFIX) -SAMAP_NAME = $(LIB_PREFIX)sawindbg.map -SAPDB_NAME = $(LIB_PREFIX)sawindbg.pdb - -ifeq ($(ARCH), ia64) - # SA will never be supported here. - INCLUDE_SA = false -else - INCLUDE_SA = true -endif - -# Settings for the VERSIONINFO tap on windows. -VERSIONINFO_RESOURCE = $(BUILDDIR)/../src/windows/resource/version.rc - -ifneq ($(JDK_BUILD_NUMBER),) - COOKED_BUILD_NUMBER = $(shell $(ECHO) $(JDK_BUILD_NUMBER) | $(SED) -e 's/^b//' -e 's/^0//') -else - COOKED_BUILD_NUMBER = 0 -endif - -# If the update version contains non-numeric characters, we need -# to massage it into a numeric format. -# We use the following formula: -# JDK_UPDATE_VER = JDK_UPDATE_VERSION * 10 + EXCEPTION_VERSION -# -# Here are some examples: -# 1.5.0 b01 -> 5,0,0,1 -# 1.5.0_10 b01 -> 5,0,100,1 -# 1.4.2 b01 -> 4,2,0,1 -# 1.4.2_02 b01 -> 4,2,20,1 -# 1.4.2_02a b01 -> 4,2,21,1 -# 1.4.2_02b b01 -> 4,2,22,1 -ifdef JDK_UPDATE_VERSION - VTMP := $(shell $(ECHO) $(JDK_UPDATE_VERSION) | $(TR) "abcde" "12345") - CAB_CHAR1 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 1, 1);}') - CAB_CHAR2 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 2, 1);}') - CAB_CHAR3 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 3, 1);}') - JDK_UPDATE_META_TAG := U$(MARKETING_NUMBER) - ifeq ($(CAB_CHAR3),) - CAB_CHAR3 := 0 - endif - ifeq ($(CAB_CHAR1), 0) - JDK_UPDATE_VER := $(CAB_CHAR2)$(CAB_CHAR3) - else - JDK_UPDATE_VER := $(CAB_CHAR1)$(CAB_CHAR2)$(CAB_CHAR3) - endif -else - JDK_UPDATE_VER := 0 -endif - -#RC_FLAGS = /l 0x409 /r - -#ifeq ($(VARIANT), OPT) -# RC_FLAGS += -d NDEBUG -#else -# RC_FLAGS += $(MS_RC_DEBUG_OPTION) -#endif - -# Values for the RC variables defined in RC_FLAGS -#JDK_RC_BUILD_ID = $(FULL_VERSION) -#JDK_RC_COMPANY = $(COMPANY_NAME) -#JDK_RC_COMPONENT = $(PRODUCT_NAME) $(JDK_RC_PLATFORM_NAME) binary -#JDK_RC_VER = \ -# $(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VER).$(COOKED_BUILD_NUMBER) -#JDK_RC_COPYRIGHT = Copyright \xA9 $(COPYRIGHT_YEAR) -#JDK_RC_NAME = \ -# $(PRODUCT_NAME) $(JDK_RC_PLATFORM_NAME) $(JDK_MINOR_VERSION) $(JDK_UPDATE_META_TAG) -#JDK_RC_FVER = \ -# $(JDK_MINOR_VERSION),$(JDK_MICRO_VERSION),$(JDK_UPDATE_VER),$(COOKED_BUILD_NUMBER) - -# JDK name required here -#RC_FLAGS += -d "JDK_BUILD_ID=$(JDK_RC_BUILD_ID)" \ -# -d "JDK_COMPANY=$(JDK_RC_COMPANY)" \ -# -d "JDK_COMPONENT=$(JDK_RC_COMPONENT)" \ -# -d "JDK_VER=$(JDK_RC_VER)" \ -# -d "JDK_COPYRIGHT=$(JDK_RC_COPYRIGHT)" \ -# -d "JDK_NAME=$(JDK_RC_NAME)" \ -# -d "JDK_FVER=$(JDK_RC_FVER)" - -# Enable 7-Zip LZMA file (de)compression for Java Kernel if it is available -ifeq ($(ARCH_DATA_MODEL), 32) - ifneq ($(KERNEL), off) - # This is a hack to use until 7-Zip (and UPX) bundles can be put - # under /java/devtools. - ifndef DEPLOY_TOPDIR - DEPLOY_TOPDIR=$(JDK_TOPDIR)/../deploy - endif - # Uncomment this block to cause build failure if above assumption false - #DCHK = $(shell if [ ! -d $(DEPLOY_TOPDIR) ] ; then \ - # $(ECHO) deploy_not_a_peer_of_j2se ; \ - #fi ) - #ifeq ($(DCHK), deploy_not_a_peer_of_j2se) - # If a build failure points to control coming here it means - # it means deploy is not in the same directory - # as j2se. Java Kernel can't tolerate that for the time being. - #endif - EC_TMP = $(shell if [ -d $(DEPLOY_TOPDIR)/make/lzma ] ; then \ - $(ECHO) true ; \ - else \ - $(ECHO) false ; \ - fi ) - ifeq ($(EC_TMP), true) - EXTRA_COMP_INSTALL_PATH = lib\\\\deploy\\\\lzma.dll - # Crazy but true: deploy/make/plugin/jinstall/Makefile.jkernel does - # not include deploy/make/common/Defs-windows.gmk, either directly - # or indirectly. But it does include this file, so redundantly declare - # these variables that are in deploy/make/common/Defs-windows.gmk for - # the sake of the Java Kernel part of the deploy build. Whew! - EXTRA_COMP_LIB_NAME = lzma.dll - EXTRA_COMP_PATH = $(OUTPUTDIR)/tmp/deploy/lzma/win32/obj - EXTRA_COMP_CMD_PATH = $(EXTRA_COMP_PATH)/lzma.exe - EXTRA_COMP_LIB_PATH = $(EXTRA_COMP_PATH)/$(EXTRA_COMP_LIB_NAME) - endif - endif -endif diff --git a/jdk/makefiles/common/Defs.gmk b/jdk/makefiles/common/Defs.gmk deleted file mode 100644 index be43455b5fd..00000000000 --- a/jdk/makefiles/common/Defs.gmk +++ /dev/null @@ -1,577 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Common variables used by all the Java makefiles. This file should -# not contain rules. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# Check for strange explicit settings (change to empty or true) -ifdef OPENJDK - ifneq ($(OPENJDK),true) - x:=$(error "OPENJDK (if defined) can only be set to true") - endif -endif - -# -# On Solaris, the 'make' utility from Sun will not work with these makefiles. -# This little rule is only understood by Sun's make, and is harmless -# when seen by the GNU make tool. If using Sun's make, this causes the -# make command to fail. -# -SUN_MAKE_TEST:sh = echo "ERROR: PLEASE USE GNU VERSION OF MAKE"; exit 33 - -include $(SPEC) -include $(JDK_MAKE_SHARED_DIR)/Platform.gmk - -# Historically PLATFORM_SRC used to be src/$(PLATFORM), but we switched it to -# src/solaris so if you want to build on Linux you didn't need a src/linux -# directory. In an ideal world it would be called src/genunix but we are not -# there yet. -# -ifndef SHARE_SRC - SHARE_SRC = $(BUILDDIR)/../src/share -endif - -# Files that cannot be included in the OpenJDK distribution are -# collected under a parent directory which contains just those files. -ifndef CLOSED_SRC - CLOSED_SRC = $(BUILDDIR)/../src/closed -endif - -# If CLOSE_SRC_INCLUDED isn't set to true, check if there's any -# closed directory. -ifneq ($(CLOSED_SRC_INCLUDED), true) - CLOSED_SRC_INCLUDED := $(shell \ - if [ -d $(CLOSED_SRC) ] ; then \ - echo true; \ - else \ - echo false; \ - fi) -endif - -# Set OPENJDK based on CLOSED_SRC_INCLUDED -ifeq ($(CLOSED_SRC_INCLUDED), false) - OPENJDK = true -endif - -# Define where closed directories are -ifdef OPENJDK - CLOSED_SRC = - CLOSED_SHARE_SRC = -else - ifndef CLOSED_SHARE_SRC - CLOSED_SHARE_SRC = $(CLOSED_SRC)/share - endif -endif - -# -# Get platform definitions -# - -include $(JDK_TOPDIR)/makefiles/common/Defs-$(PLATFORM).gmk - -# -# SE-Embedded support, if enabled -# - -include $(JDK_TOPDIR)/makefiles/common/Defs-embedded.gmk - -# -# Cross-compilation Settings -# -ifdef CROSS_COMPILE_ARCH - # Can't run the tools we just built - USE_ONLY_BOOTDIR_TOOLS = true - - # When cross-compiling CC generates code for the target, but - # some parts of the build generate C code that has to be compiled - # and executed on the build host - HOST_CC is the 'local' compiler. - # For linux the default is /usr/bin/gcc; other platforms need to - # set it explicitly - ifeq ($(PLATFORM), linux) - ifndef HOST_CC - HOST_CC = $(USRBIN_PATH)gcc - endif - endif -else - # Must set HOST_CC if not already set - ifndef HOST_CC - HOST_CC = $(CC) - endif -endif - -# Reset the VM name for client-only builds -ifeq ($(JVM_VARIANT),client) - VM_NAME = client -endif - -# -# Freetype logic is applicable to OpenJDK only -# -ifdef OPENJDK - -ifeq ($(PLATFORM), windows) - DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/win32/freetype-$(ARCH) -endif -ifeq ($(PLATFORM), linux) - DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/$(PLATFORM)/freetype-$(ARCH) -endif -ifeq ($(PLATFORM), solaris) - # historically for Solaris we have slightly different devtools - # naming conventions - DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/freetype-$(ARCH) -endif - -DEVTOOLS_FT_DIR_EXISTS = $(shell \ - if [ -f $(DEVTOOLS_FT_DIR)/include/ft2build.h ] ; then \ - echo true; \ - else \ - echo false; \ - fi) - - ifdef ALT_FREETYPE_LIB_PATH - FREETYPE_LIB_PATH = $(ALT_FREETYPE_LIB_PATH) - ifeq ($(PLATFORM), macosx) - USING_SYSTEM_FT_LIB=true - endif - else - ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true) - FREETYPE_LIB_PATH = $(DEVTOOLS_FT_DIR)/lib - else - ifeq ($(PLATFORM), macosx) - FREETYPE_LIB_PATH = /usr/X11R6/lib - else - FREETYPE_LIB_PATH = /usr/lib - endif - USING_SYSTEM_FT_LIB=true - endif - endif - - ifdef ALT_FREETYPE_HEADERS_PATH - FREETYPE_HEADERS_PATH = $(ALT_FREETYPE_HEADERS_PATH) - else - ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true) - FREETYPE_HEADERS_PATH = $(DEVTOOLS_FT_DIR)/include - else - ifeq ($(PLATFORM), macosx) - FREETYPE_HEADERS_PATH = /usr/X11R6/include - else - FREETYPE_HEADERS_PATH = /usr/include - endif - endif - endif -endif - -# -# zlib version -# -ZLIB_VERSION = 1.2.5 - - -# -# Localizations for the different parts of the product beyond English -# - -JRE_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK -PLUGIN_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK -JDK_LOCALES = ja zh_CN - -# -# A list of locales we support but don't have resource files. -# This is defined to optimize the search of resource bundles. -# -JRE_NONEXIST_LOCALES = en en_US de_DE es_ES fr_FR it_IT ja_JP ko_KR sv_SE zh - -# -# For now, most libraries except libjava and libjvm itself link against libjvm -# and libjava, the latter for its exported common utilities. libjava only -# links against libjvm. Programs' makefiles take their own responsibility for -# adding other libs. -# -# The makefiles for these packages do not link against libjvm and libjava. -# This list will eventually go away and each Programs' makefiles -# will have to explicitly declare that they want to link to libjava/libjvm -# -NO_JAVALIB_PKGS = \ - sun.security.mscapi \ - sun.security.krb5 \ - sun.security.pkcs11 \ - sun.security.jgss \ - sun.security.jgss.wrapper \ - sun.security.ec \ - sun.security.smartcardio \ - com.sun.security.auth.module - -ifdef PACKAGE -# put JAVALIB first, but do not lose any platform specific values.... - ifeq (,$(findstring $(PACKAGE),$(NO_JAVALIB_PKGS))) - LDLIBS_COMMON = $(JAVALIB) - endif -endif # PACKAGE - -# -# Libraries that must appear ahead of libc.so on the link command line -# -ifdef PROGRAM - - ifeq ($(PLATFORM), solaris) - LDLIBS_COMMON = -lthread -ldl - endif - - ifeq ($(PLATFORM), linux) - LDLIBS_COMMON = -ldl - endif - - ifeq ($(PLATFORM), macosx) - LDLIBS_COMMON = -pthread - endif - -endif # PROGRAM - -LDLIBS_COMMON += $(EXTRA_LIBS) - -# for generated binaries -BINDIR = $(OUTPUTDIR)/bin$(ISA_DIR) -# for generated libraries -LIBDIR = $(OUTPUTDIR)/lib -ABS_LIBDIR = $(ABS_OUTPUTDIR)/lib -# Optional place to save the windows .lib files -LIBFILES_DIR = $(OUTPUTDIR)/libfiles -# for ext jre files -EXTDIR = $(LIBDIR)/ext -# for generated include files -INCLUDEDIR = $(OUTPUTDIR)/include -# for generated class files -CLASSBINDIR = $(OUTPUTDIR)/classes -DEMOCLASSDIR = $(OUTPUTDIR)/democlasses -# for generated tool class files -BUILDTOOLCLASSDIR = $(OUTPUTDIR)/btclasses -# for build tool jar files -BUILDTOOLJARDIR = $(OUTPUTDIR)/btjars -ABS_BUILDTOOLJARDIR = $(ABS_OUTPUTDIR)/btjars -# for generated tool class files -BUILDTOOLBINDIR = $(OUTPUTDIR)/btbins -# for generated java source files -GENSRCDIR = $(OUTPUTDIR)/gensrc -# for generated C source files (not javah) -GENNATIVESRCDIR = $(OUTPUTDIR)/gennativesrc -# for imported source files -IMPORTSRCDIR = $(OUTPUTDIR)/impsrc -# for imported documents -IMPORTDOCDIR = $(OUTPUTDIR)/impdoc -# for generated demo -DEMODIR = $(OUTPUTDIR)/demo -NEWDEMODIR = $(OUTPUTDIR)/newdemo -# for sample code -SAMPLEDIR = $(OUTPUTDIR)/sample -# for generated documentation -DOCSDIR = $(OUTPUTDIR)/docs$(DOCSDIRSUFFIX) -DOCSDIRSUFFIX = - -# The MESSAGE, WARNING and ERROR files are used to store sanityck and -# warnings and errors. -ifndef ERROR_FILE - ERROR_FILE = $(OUTPUTDIR)/sanityCheckErrors.txt -endif -ifndef WARNING_FILE - WARNING_FILE = $(OUTPUTDIR)/sanityCheckWarnings.txt -endif -ifndef MESSAGE_FILE - MESSAGE_FILE = $(OUTPUTDIR)/sanityCheckMessages.txt -endif - -#where the demo source can be found -DEMOSRCDIR = $(SHARE_SRC)/demo - -#where the sample source can be found -SAMPLESRCDIR = $(SHARE_SRC)/sample - -# An attempt is made to generate unique enough directories for the -# generated files to not have name collisisons. Most build units -# defines PRODUCT (except Release.gmk), but then they may or may -# not define PACKAGE, PROGRAM, and LIBRARY. This code attempts to -# generate a unique OBJDIR/CLASSHDRDIR for each build unit based -# on which of those values are set within each build unit. - -UNIQUE_LOCATION_STRING = tmp - -ifneq ($(PRODUCT),) - UNIQUE_LOCATION_STRING += /$(PRODUCT) -endif - -ifneq ($(PACKAGE),) - UNIQUE_LOCATION_STRING += /$(PACKAGE) -endif - -ifneq ($(PROGRAM),) - UNIQUE_LOCATION_STRING += /$(PROGRAM) -endif - -ifneq ($(LIBRARY),) - ifneq ($(LIBRARY_OUTPUT),) - UNIQUE_LOCATION_STRING += /$(LIBRARY_OUTPUT) - else - UNIQUE_LOCATION_STRING += /$(LIBRARY) - endif -endif - -# the use of += above makes a space separated list which we need to -# remove for filespecs. -# -NULLSTRING := -ONESPACE := $(NULLSTRING) # space before this comment is required. -UNIQUE_PATH = $(subst $(ONESPACE),,$(UNIQUE_LOCATION_STRING)) - -# TEMPDIR is a unique general purpose directory -# need to use 'override' because GNU Make on Linux exports the wrong -# value. -TEMPDIR ?= $(OUTPUTDIR)/$(UNIQUE_PATH) -ABS_TEMPDIR ?= $(ABS_OUTPUTDIR)/$(UNIQUE_PATH) - -# This must be created right away for pattern rules in Sanity.gmk to work. -dummy1:=$(shell $(MKDIR) -p $(TEMPDIR)) -dummy2:=$(shell $(MKDIR) -p $(TEMP_DISK)) - -# OBJDIRNAME is the name of the directory where the object code is to -# be placed. It's name depends on whether the data model architecture -# is 32-bit or not. -ifneq ($(ARCH_DATA_MODEL), 32) - OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX) -else - OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX) -endif -OBJDIR = $(TEMPDIR)/$(OBJDIRNAME) - -# CLASSHDRDIR is where the generated C Class Header files go. -CLASSHDRDIR = $(TEMPDIR)/CClassHeaders - -# -# CLASSDESTDIR can be used to specify the directory where generated classes -# are to be placed. The default is CLASSBINDIR. -# -ifndef CLASSDESTDIR -CLASSDESTDIR = $(CLASSBINDIR) -endif - -INCLUDES = -I. -I$(CLASSHDRDIR) \ - $(patsubst %,-I%,$(subst $(CLASSPATH_SEPARATOR), ,$(VPATH.h))) $(OTHER_INCLUDES) -OTHER_CPPFLAGS += $(INCLUDES) - -# -# vpaths. These are the default locations searched for source files. -# GNUmakefiles of individual areas often override the default settings. -# There are no longer default vpath entries for C and assembler files -# so we can ensure that libraries don't get their hands on JVM files. -# -# We define an intermediate variable for Java files because -# we use its value later to help define $SOURCEPATH - -ifeq ($(PLATFORM), macosx) - VPATH0.java = $(subst $(ONESPACE),:,$(GENSRCDIR) $(call JavaSrcDirList,,classes)) -else - VPATH0.java = $(GENSRCDIR)$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/classes -endif - -ifdef OPENJDK - VPATH.java = $(VPATH0.java) -else - # - # If filenames are duplicated between open/closed workspaces, prefer - # the closed files. - # - # Source ordering is important: some targets depend on closed files - # replacing open ones, and thus the closed file sources must be found - # before the open ones. - # - # Don't reorder without consulting the teams that depend on this behavior. - # - VPATH.java = $(CLOSED_PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(CLOSED_SHARE_SRC)/classes$(CLASSPATH_SEPARATOR)$(VPATH0.java) -endif -vpath %.java $(VPATH.java) -vpath %.class $(CLASSBINDIR) -vpath %.$(OBJECT_SUFFIX) $(OBJDIR) - -# -# VPATH.h is used elsewhere to generate include flags. By default, -# anyone has access to the include files that the JVM area exports, -# namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific -# relatives. -# -VPATH0.h = $(PLATFORM_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/export -ifdef OPENJDK - VPATH.h = $(VPATH0.h) -else - VPATH.h = $(CLOSED_SHARE_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(VPATH0.h) -endif -vpath %.h $(VPATH.h) - -# -# Used in two ways: helps link against libjava.so. Also if overridden -# determines where your shared library is installed. -# -ifndef LIB_LOCATION - LIB_LOCATION = $(LIBDIR)/$(LIBARCH) -endif - -# -# Java header and stub variables -# -CLASSHDRS = $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export))) -CLASSSTUBOBJS = classstubs.$(OBJECT_SUFFIX) -STUBPREAMBLE = $(INCLUDEDIR)/StubPreamble.h - -# -# Classpath seen by javac (different from the one seen by the VM -# running javac), and useful variables. -# -SOURCEPATH = $(VPATH.java) -PKG = $(shell $(EXPR) $(PACKAGE) : '\([a-z]*\)') -PKGDIR = $(subst .,/,$(PACKAGE)) - -# -# The java/javac/jdk variables (JAVAC_CMD, JAVA_CMD, etc.) -# -include $(JDK_MAKE_SHARED_DIR)/Defs-java.gmk - -UNIQUE_PATH_PATTERN = $(subst /,.,$(UNIQUE_PATH)) - -# Run MAKE $@ for a launcher: -# $(call make-launcher, name, mainclass, java-args, main-args) -define make-launcher -$(CD) $(BUILDDIR)/launchers && \ -$(MAKE) -f Makefile.launcher \ - PROGRAM=$(strip $1) \ - MAIN_CLASS=$(strip $2) \ - MAIN_JAVA_ARGS="$(strip $3)" \ - MAIN_ARGS="$(strip $4)" -endef - -# -# Convenient macros -# - -# Prepare $@ target, remove old one and making sure directory exists -define prep-target -mkdir -p $(@D) -rm -f $@ -endef - -# Simple install of $< file to $@ -define install-file -$(prep-target) -$(CP) $< $@ -endef - -define chmod-file -$(CHMOD) $1 $@ -endef - -define install-sym-link -$(LN) -s $1 $@ -endef - -define install-manifest-file -$(install-file) -endef - -# Cleanup rule for after debug java run (hotspot.log file is left around) -# (This could be an old leftover file in a read-only area, use the @- prefix) -HOTSPOT_LOG_NAME = hotspot.log -define java-vm-cleanup -if [ -w $(HOTSPOT_LOG_NAME) ] ; then rm -f $(HOTSPOT_LOG_NAME); fi -endef - -# Current directory -CURRENT_DIRECTORY := $(shell $(PWD)) - -# -# Create BYFILE OPT and DBG settings, if CFLAGS_OPT/foobar.o is set then it is -# used for this file, otherwise the default settings are used. -# -CFLAGS_$(VARIANT)/BYFILE = $(CFLAGS_$(VARIANT)/$(@F)) \ - $(CFLAGS_$(VARIANT)$(CFLAGS_$(VARIANT)/$(@F))) -CXXFLAGS_$(VARIANT)/BYFILE = $(CXXFLAGS_$(VARIANT)/$(@F)) \ - $(CXXFLAGS_$(VARIANT)$(CXXFLAGS_$(VARIANT)/$(@F))) - -# -# Tool flags -# -# EXTRA_CFLAGS are used to define cross-compilation options -# -ASFLAGS = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS) -CFLAGS = $(CFLAGS_$(VARIANT)/BYFILE) $(CFLAGS_COMMON) $(OTHER_CFLAGS) $(EXTRA_CFLAGS) -CXXFLAGS = $(CXXFLAGS_$(VARIANT)/BYFILE) $(CXXFLAGS_COMMON) $(OTHER_CXXFLAGS) $(EXTRA_CFLAGS) -CPPFLAGS = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \ - $(DEFINES) $(OPTIONS:%=-D%) -LDFLAGS = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS) -LDLIBS = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON) -LINTFLAGS = $(LINTFLAGS_$(VARIANT)) $(LINTFLAGS_COMMON) \ - $(OTHER_LINTFLAGS) - -VERSION_DEFINES = -DRELEASE='"$(RELEASE)"' - -ifdef INSANE - export INSANE -endif - -ifdef ALT_COPYRIGHT_YEAR - COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR) -else - COPYRIGHT_YEAR := $(shell $(DATE) '+%Y') -endif - -ifndef OPENJDK -include $(JDK_TOPDIR)/make/closed/common/Defs.gmk -endif - -# Install of imported file (JDK_IMPORT_PATH, or some other external location) -define install-importonly-file -@$(ECHO) "ASSEMBLY_IMPORT: $@" -$(prep-target) -$(CP) $< $@ -@if [ "$(PLATFORM)" = "linux" -a "$(@F)" = "libjvm.so" ] ; then \ - if [ -x /usr/sbin/selinuxenabled ] ; then \ - /usr/sbin/selinuxenabled; \ - if [ $$? = 0 ] ; then \ - $(ECHO) "/usr/bin/chcon -t textrel_shlib_t $@"; \ - /usr/bin/chcon -t textrel_shlib_t $@; \ - if [ $$? != 0 ]; then \ - echo "ERROR: Cannot chcon $@"; \ - fi; \ - fi; \ - fi; \ -fi -endef - -define install-import-file -$(install-importonly-file) -endef - -.PHONY: all build clean clobber diff --git a/jdk/makefiles/common/Demo.gmk b/jdk/makefiles/common/Demo.gmk deleted file mode 100644 index 25e1bd0905c..00000000000 --- a/jdk/makefiles/common/Demo.gmk +++ /dev/null @@ -1,415 +0,0 @@ -# -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c -COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) - -# JDK Demo building jar file. - -# Some names are defined with LIBRARY inside the Defs.gmk file -LIBRARY=$(DEMONAME) -OBJDIR=$(TEMPDIR)/$(DEMONAME) - -# Input: -# DEMONAME - name of the demo -# DEMO_ROOT - path to root of all demo files -# DEMO_DESTDIR - path to final demo destination directory -# -# Optional Input: -# DEMO_SRCDIR - path to source if different from DEMO_ROOT -# DEMO_PSRCDIR - path to additional platform specific source -# DEMO_PKGDIR - sub directory of sources we want -# DEMO_TOPFILES - names of top-level files relative to DEMO_ROOT -# DEMO_MAINCLASS - name of the main class for the jar manifest -# DEMO_NATIVECLASS - name of the class with native methods -# DEMO_DESCRIPTOR - name of service file for jar (relative to DEMO_SRCDIR) -# DEMO_EXTRA_SRCDIR - path to directory that holds extra sources to add -# DEMO_EXTRA_FILES - extra sources relative to DEMO_EXTRA_SRCDIR -# DEMO_OBJECTS - extra native object files needed -# DEMO_MANIFEST_ATTR - extra line to add to the jar manifest file - -# Assume the source directory is the root directory if not set -ifndef DEMO_SRCDIR - DEMO_SRCDIR = $(DEMO_ROOT) -endif -ifndef DEMO_PKGDIR - DEMO_PKGDIR = . -endif - -# Some demos have special needs -ifneq ($(DEMONAME),agent_util) - DEMO_NEEDS_AGENT_UTIL = $(findstring agent_util,$(DEMO_OBJECTS)) -endif -ifneq ($(DEMONAME),java_crw_demo) - DEMO_NEEDS_JAVA_CRW_DEMO = $(findstring java_crw_demo,$(DEMO_OBJECTS)) -endif -ifeq ($(DEMONAME),hprof) - DEMO_NEEDS_NPT = true -endif - -# Place to hold the build area (kind of a temp area) -DEMO_BUILD_AREA = $(DEMOCLASSDIR)/$(PRODUCT)/$(DEMONAME) - -# Destination "src" directory -DEMO_BUILD_SRCDIR = $(DEMO_BUILD_AREA)/src - -ifndef DEMO_SKIP_SRCZIP - DEMO_BUILD_SRCZIP = $(DEMO_BUILD_AREA)/src.zip - DEMO_SOURCE_ZIP = $(DEMO_DESTDIR)/src.zip -endif - -# Place to hold the jar image we are creating -DEMO_JAR_IMAGE = $(DEMO_BUILD_AREA)/jar_image - -# The jar manifest file we will create and use -DEMO_MANIFEST = $(DEMO_BUILD_AREA)/manifest.mf - -# The list of source files or options we will supply to javac -DEMO_JAVAC_INPUT = $(DEMO_BUILD_AREA)/javac_input.txt - -# Any name of javah file -DEMO_JAVAH_FILE = $(DEMO_NATIVECLASS:%=$(DEMO_BUILD_SRCDIR)/%.h) - -# Get complete list of files for this demo -ifdef DEMO_PSRCDIR - DEMO_ALL_FILES2 := $(shell ( $(CD) $(DEMO_PSRCDIR) \ - && $(FIND) $(DEMO_PKGDIR) $(SCM_DIRS_prune) -o -type f -print ) \ - | $(SED) 's@^\./@@' ) - DEMO_ALL_FILES += $(DEMO_ALL_FILES2) -endif -ifdef DEMO_EXTRA_SRCDIR - DEMO_ALL_FILES += $(DEMO_EXTRA_FILES) -endif -DEMO_ALL_FILES1 := $(shell ( $(CD) $(DEMO_SRCDIR) \ - && $(FIND) $(DEMO_PKGDIR) $(SCM_DIRS_prune) -o -type f -print ) \ - | $(SED) 's@^\./@@' ) -DEMO_ALL_FILES += $(DEMO_ALL_FILES1) - -# Just the java sources -DEMO_JAVA_SOURCES = $(filter %.java,$(DEMO_ALL_FILES)) - -# Just the C and C++ sources -DEMO_C_SRC_FILES = $(filter %.c,$(DEMO_ALL_FILES)) -DEMO_CPP_SRC_FILES = $(filter %.cpp,$(DEMO_ALL_FILES)) - -# All the native source files -DEMO_ALL_NATIVE_SOURCES = $(DEMO_C_SRC_FILES) -DEMO_ALL_NATIVE_SOURCES += $(DEMO_CPP_SRC_FILES) -DEMO_ALL_NATIVE_SOURCES += $(filter %.h,$(DEMO_ALL_FILES)) -DEMO_ALL_NATIVE_SOURCES += $(filter %.hpp,$(DEMO_ALL_FILES)) - -# If we have java sources, then define the jar file we will create -ifndef DEMO_JAR_NAME - DEMO_JAR_NAME = $(DEMONAME).jar -endif -ifneq ($(strip $(DEMO_JAVA_SOURCES)),) - DEMO_JAR = $(DEMO_DESTDIR)/$(DEMO_JAR_NAME) -endif - -# If we have native sources, define the native library we will create -ifneq ($(strip $(DEMO_ALL_NATIVE_SOURCES)),) - # Path to native library we will create - DEMO_LIBRARY = \ - $(DEMO_DESTDIR)/lib$(ISA_DIR)/$(LIB_PREFIX)$(DEMONAME).$(LIBRARY_SUFFIX) - # C and C++ compiler flags we need to add to standard flags - DEMO_CPPFLAGS += -I$(DEMO_BUILD_SRCDIR) - # If the npt library is used we need to find the npt.h file - ifneq ($(DEMO_NEEDS_NPT),) - # The npt library is delivered as part of the JRE - DEMO_CPPFLAGS += -I$(SHARE_SRC)/npt -I$(PLATFORM_SRC)/npt - endif - # Is the shared agent_util code needed - ifneq ($(DEMO_NEEDS_AGENT_UTIL),) - DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/agent_util.c - DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/agent_util.h - endif - # Is the shared java_crw_demo code needed - ifneq ($(DEMO_NEEDS_JAVA_CRW_DEMO),) - DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/java_crw_demo.c - DEMO_FULL_SOURCES += $(DEMO_BUILD_SRCDIR)/java_crw_demo.h - endif - # All the native object files we need to build the library - DEMO_OBJECTS += $(DEMO_C_SRC_FILES:%.c=%.$(OBJECT_SUFFIX)) \ - $(DEMO_CPP_SRC_FILES:%.cpp=%.$(OBJECT_SUFFIX)) - # Linking is special depending on whether we had C++ code or on windows - DEMO_NEEDS_CPP = $(strip $(DEMO_CPP_SRC_FILES)) - CPPFLAGS += $(DEMO_CPPFLAGS) - ifeq ($(PLATFORM),windows) - # Note: This is a link with cl.exe, not link.exe, options differ quite - # bit between them. - LINK.demo = $(LINK.c) - LDLIBS.demo = $(EXTRA_LIBS) $(LFLAGS_$(COMPILER_VERSION)) - DEMO_VERSION_INFO = $(OBJDIR)/$(LIBRARY).res - LDLIBS.demo += $(DEMO_VERSION_INFO) - else - ifneq ($(DEMO_NEEDS_CPP),) - LINK.demo = $(LINK.cpp) - LDLIBS.demo = $(LIBCXX) - ifeq ($(PLATFORM),solaris) - LDLIBS.demo += -lc - endif - else - LINK.demo = $(LINK.c) - LDLIBS.demo = $(LDLIBS) - endif - endif -endif - -# Files that are considered resources (need to be in the jar file) -DEMO_RESOURCES += $(filter-out %.java,$(DEMO_ALL_FILES)) - -# All destination files (top level readme files and all sources) -# Note: We exclude the topfiles from the src tree. -DEMO_DEST_TOPFILES = $(DEMO_TOPFILES:%=$(DEMO_DESTDIR)/%) -DEMO_FILTERED_SOURCES = $(filter-out $(DEMO_TOPFILES),$(DEMO_ALL_FILES)) -DEMO_FULL_SOURCES += $(DEMO_FILTERED_SOURCES:%=$(DEMO_BUILD_SRCDIR)/%) - -# Default rule -all: build demo_info - -# Used to populate the destination directories -$(DEMO_DESTDIR)/%: $(DEMO_ROOT)/% - $(install-file) -ifneq ($(DEMO_SRCDIR),$(DEMO_ROOT)) -$(DEMO_DESTDIR)/%: $(DEMO_SRCDIR)/% - $(install-file) -endif -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_SRCDIR)/% - $(install-file) -ifdef DEMO_PSRCDIR -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_PSRCDIR)/% - $(install-file) -endif -ifdef DEMO_EXTRA_SRCDIR -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_EXTRA_SRCDIR)/% - $(install-file) -endif -ifneq ($(DEMO_NEEDS_AGENT_UTIL),) -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_SRCDIR)/../agent_util/% - $(install-file) -endif -ifneq ($(DEMO_NEEDS_JAVA_CRW_DEMO),) -$(DEMO_BUILD_SRCDIR)/%: $(DEMO_SRCDIR)/../java_crw_demo/% - $(install-file) -endif - -# Jar manifest file -MAINMANIFEST = $(JDK_TOPDIR)/make/tools/manifest.mf -$(DEMO_MANIFEST): $(MAINMANIFEST) - @$(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ - $(MAINMANIFEST) >> $@ - $(ECHO) "Main-Class: $(DEMO_MAINCLASS)" >> $@ -ifdef DEMO_MANIFEST_ATTR - $(ECHO) "$(DEMO_MANIFEST_ATTR)" >> $@ -endif - -# Populating the jar image directory -$(DEMO_JAR_IMAGE)/%: $(DEMO_SRCDIR)/% - $(install-file) -ifdef DEMO_PSRCDIR -$(DEMO_JAR_IMAGE)/%: $(DEMO_PSRCDIR)/% - $(install-file) -endif -ifdef DEMO_EXTRA_SRCDIR -$(DEMO_JAR_IMAGE)/%: $(DEMO_EXTRA_SRCDIR)/% - $(install-file) -endif -ifdef DEMO_DESCRIPTOR -$(DEMO_JAR_IMAGE)/META-INF/services/$(DEMO_DESCRIPTOR): \ - $(DEMO_SRCDIR)/$(DEMO_DESCRIPTOR) - $(install-file) -endif - -# If we are creating a jar file (we have java code) -ifdef DEMO_JAR - -# Input file for javac -$(DEMO_JAVAC_INPUT): $(DEMO_JAVA_SOURCES:%=$(DEMO_BUILD_SRCDIR)/%) - @$(prep-target) - @for i in $(DEMO_JAVA_SOURCES) ; do \ - $(ECHO) "$(DEMO_BUILD_SRCDIR)/$$i" >> $@ ; \ - done - -# Jar file creation -$(DEMO_JAR): \ - $(DEMO_JAVAC_INPUT) \ - $(DEMO_MANIFEST) \ - $(DEMO_DESCRIPTOR:%=$(DEMO_JAR_IMAGE)/META-INF/services/%) \ - $(DEMO_RESOURCES:%=$(DEMO_JAR_IMAGE)/%) - @$(prep-target) - $(MKDIR) -p $(DEMO_JAR_IMAGE) - $(JAVAC_CMD) -d $(DEMO_JAR_IMAGE) -sourcepath $(DEMO_BUILD_SRCDIR) \ - @$(DEMO_JAVAC_INPUT) - ifeq ($(DEMO_INCL_SRC),true) - $(CP) $(DEMO_JAVA_SOURCES:%=$(DEMO_BUILD_SRCDIR)/%) $(DEMO_JAR_IMAGE) - endif - ifeq ($(DEMO_ONLY_SRC),true) - $(RM) -r $(DEMO_JAR_IMAGE) - $(MKDIR) -p $(DEMO_JAR_IMAGE) - $(CP) -r $(DEMO_BUILD_SRCDIR)/* $(DEMO_JAR_IMAGE) - ifneq ($(DEMO_TOPFILES),) - $(CP) $(DEMO_ROOT)/$(DEMO_TOPFILES) $(DEMO_JAR_IMAGE) - endif - endif - $(BOOT_JAR_CMD) -cfm $@ $(DEMO_MANIFEST) \ - -C $(DEMO_JAR_IMAGE) . \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -endif - -ifndef DEMO_SKIP_SRCZIP - # Create a src.zip file - $(DEMO_BUILD_SRCZIP): $(DEMO_FULL_SOURCES) - @$(prep-target) - $(CD) $(DEMO_BUILD_AREA)/src && $(ZIPEXE) -q -r ../$(@F) . - - # Install the destination src.zip file and create the src tree - $(DEMO_SOURCE_ZIP): $(DEMO_BUILD_SRCZIP) - $(install-file) -endif - -ifeq ($(PLATFORM),windows) -# JDK name required here -RC_FLAGS += /D "JDK_FNAME=$(LIBRARY).dll" \ - /D "JDK_INTERNAL_NAME=$(LIBRARY)" \ - /D "JDK_FTYPE=0x2L" -endif - -# Native library building -ifdef DEMO_LIBRARY - - # Full paths to object files - DEMO_FULL_OBJECTS = $(DEMO_OBJECTS:%=$(OBJDIR)/%) - VPATH= - -# Native compile rules -$(OBJDIR)/%.$(OBJECT_SUFFIX): $(DEMO_BUILD_SRCDIR)/%.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $< - ifneq ($(DEMO_NEEDS_CPP),) -$(OBJDIR)/%.$(OBJECT_SUFFIX): $(DEMO_BUILD_SRCDIR)/%.cpp - @$(prep-target) - $(COMPILE.cpp) $(CC_OBJECT_OUTPUT_FLAG)$@ $< - endif - - # Actual creation of the native shared library (C++ and C are different) -$(DEMO_LIBRARY): $(DEMO_FULL_OBJECTS) - @$(prep-target) - ifeq ($(PLATFORM),windows) - $(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(DEMO_VERSION_INFO) $(VERSIONINFO_RESOURCE) - $(LINK.demo) $(SHARED_LIBRARY_FLAG) -Fe$@ \ - $(DEMO_FULL_OBJECTS) $(LDLIBS.demo) - else - $(LINK.demo) $(SHARED_LIBRARY_FLAG) -o $@ \ - $(DEMO_FULL_OBJECTS) $(LDLIBS.demo) - endif - @$(call binary_file_verification,$@) - - # Generation of any javah include file, make sure objects are dependent on it - ifdef DEMO_NATIVECLASS -$(DEMO_JAVAH_FILE): $(DEMO_JAR) - @$(prep-target) - $(JAVAH_CMD) -d $(DEMO_BUILD_SRCDIR) -classpath $(DEMO_JAR) \ - $(DEMO_NATIVECLASS) - @$(java-vm-cleanup) -$(DEMO_FULL_OBJECTS): $(DEMO_JAVAH_FILE) - endif - -endif - -# Build involves populating the destination "src" tree, building the jar and -# native library, and creating a source bundle - -sources: $(DEMO_FULL_SOURCES) - @$(ECHO) "Created $@" - -objects: - @$(ECHO) "Created $@" - -# Why the nested make here? It only works this way, don't know why. -bundles: $(DEMO_BUILD_SRCZIP) - $(RM) -r $(DEMO_DESTDIR) - $(MKDIR) -p $(DEMO_DESTDIR) - $(MAKE) $(DEMO_LIBRARY) $(DEMO_JAR) $(DEMO_SOURCE_ZIP) $(DEMO_DEST_TOPFILES) -# Applets are special, no jar file, no src.zip, everything expanded. -ifdef DEMO_IS_APPLET - @$(ECHO) "Expanding jar file into demos area at $(DEMO_DESTDIR)" - ( $(CD) $(DEMO_DESTDIR) && \ - $(BOOT_JAR_CMD) -xfv $(DEMO_JAR_NAME) \ - $(BOOT_JAR_JFLAGS) && \ - $(RM) -r META-INF $(DEMO_JAR_NAME) && \ - $(java-vm-cleanup) ) - @( $(CD) $(DEMO_DESTDIR) && $(java-vm-cleanup) ) - @$(ECHO) "Expanding source into demos area at $(DEMO_DESTDIR)" - ( $(CD) $(DEMO_DESTDIR) && $(UNZIP) -o src.zip && $(RM) src.zip ) -endif - -build: sources bundles - -# Printing out a demo information line -define printDemoSetting -if [ "$2" != "" ] ; then $(PRINTF) "%-20s %s\n" "$1:" "$2"; fi -endef - -# Print out the demo information -demo_info: - @$(ECHO) "=========================================================" - @$(call printDemoSetting,DEMONAME,$(DEMONAME)) - @$(call printDemoSetting,DEMO_ROOT,$(DEMO_ROOT)) - @$(call printDemoSetting,DEMO_SRCDIR,$(DEMO_SRCDIR)) - @$(call printDemoSetting,DEMO_DESTDIR,$(DEMO_DESTDIR)) - @$(call printDemoSetting,DEMO_JAR,$(DEMO_JAR)) - @$(call printDemoSetting,DEMO_MANIFEST_ATTR,$(DEMO_MANIFEST_ATTR)) - @$(call printDemoSetting,DEMO_PSRCDIR,$(DEMO_PSRCDIR)) - @$(call printDemoSetting,DEMO_EXTRA_SRCDIR,$(DEMO_EXTRA_SRCDIR)) - @$(call printDemoSetting,DEMO_EXTRA_FILES,$(DEMO_EXTRA_FILES)) - @$(call printDemoSetting,DEMO_TOPFILES,$(DEMO_TOPFILES)) - @$(call printDemoSetting,DEMO_MAINCLASS,$(DEMO_MAINCLASS)) - @$(call printDemoSetting,DEMO_DESCRIPTOR,$(DEMO_DESCRIPTOR)) - @$(call printDemoSetting,DEMO_NATIVECLASS,$(DEMO_NATIVECLASS)) - @$(call printDemoSetting,DEMO_LIBRARY,$(DEMO_LIBRARY)) - @$(call printDemoSetting,DEMO_OBJECTS,$(DEMO_OBJECTS)) - @$(call printDemoSetting,DEMO_SOURCE_ZIP,$(DEMO_SOURCE_ZIP)) - @$(ECHO) "=========================================================" - -# Clean rule -clean clobber: - $(RM) -r $(DEMO_BUILD_AREA) - $(RM) -r $(DEMO_DESTDIR) - -# This should not be needed, but some versions of GNU make have a bug that -# sometimes deleted these files for some strange and unknown reason -# (GNU make version 3.78.1 has the problem, GNU make version 3.80 doesn't?) -.PRECIOUS: $(DEMO_FULL_SOURCES) $(DEMO_BUILD_SRCZIP) $(DEMO_SOURCE_ZIP) - -# List phony targets -.PHONY: all build clean clobber demo_info \ - sources bundles - diff --git a/jdk/makefiles/common/Library.gmk b/jdk/makefiles/common/Library.gmk deleted file mode 100644 index 03b76ae22b0..00000000000 --- a/jdk/makefiles/common/Library.gmk +++ /dev/null @@ -1,326 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Generic makefile for building shared libraries. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -include $(JDK_TOPDIR)/makefiles/common/Classes.gmk - -# -# It is important to define these *after* including Classes.gmk -# in order to override the values defined inthat makefile. -# - -ifeq ($(LIBRARY), fdlibm) -ifeq ($(PLATFORM),windows) -ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(FDDLIBM_SUFFIX) -ACTUAL_LIBRARY_DIR = $(OBJDIR) -else # PLATFORM -ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(ARCH).$(FDDLIBM_SUFFIX) -ACTUAL_LIBRARY_DIR = $(OBJDIR) -endif #PLATFORM -else # LIBRARY -ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX) -ACTUAL_LIBRARY_DIR = $(LIB_LOCATION) -endif -ACTUAL_LIBRARY = $(ACTUAL_LIBRARY_DIR)/$(ACTUAL_LIBRARY_NAME) - -library:: $(ACTUAL_LIBRARY) - -FILES_o = $(patsubst %.c, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) -FILES_o += $(patsubst %.s, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_s)))) -FILES_o += $(patsubst %.cpp, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_cpp)))) - -ifeq ($(PLATFORM), macosx) -FILES_o += $(patsubst %.m, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_objc)))) -FILES_o += $(patsubst %.mm, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_objcpp)))) - -INCREMENTAL_BUILD=false - -endif # PLATFORM - -ifeq ($(INCREMENTAL_BUILD),true) -FILES_d = $(patsubst %.c, %.$(DEPEND_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) -FILES_d += $(patsubst %.cpp, %.$(DEPEND_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_cpp)))) -endif # INCREMENTAL_BUILD - -ifeq ($(PLATFORM),solaris) -# List of all lint files, one for each .c file (only for C) -FILES_ln = $(patsubst %.c, %.$(LINT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) -endif - -LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) - -# -# C++ libraries must be linked with CC. -# -ifdef CPLUSPLUSLIBRARY -LINKER=$(LINK.cc) -else -LINKER=$(LINK.c) -endif - -$(ACTUAL_LIBRARY):: $(INIT) $(TEMPDIR) $(LIBDIR) $(BINDIR) $(EXTDIR) classheaders - @$(ECHO) Building lib:$(ACTUAL_LIBRARY) -# -# COMPILE_APPROACH: Different approaches to compile up the native object -# files as quickly as possible. -# The setting of parallel works best on Unix, batch on Windows. -# - -COMPILE_FILES_o = $(OBJDIR)/.files_compiled -$(COMPILE_FILES_o): $(FILES_d) $(FILES_o) - @$(ECHO) "$<" >> $@ -clean:: - $(RM) $(COMPILE_FILES_o) - -# -# COMPILE_APPROACH=parallel: Will trigger compilations (just compilations) to -# happen in parallel. Greatly decreases Unix build time, even on single CPU -# machines, more so on multiple CPU machines. Default is 2 compiles -# at a time, but can be adjusted with ALT_PARALLEL_COMPILE_JOBS. -# Note that each .d file will also be dependent on it's .o file, see -# Rules.gmk. -# Note this does not depend on Rules.gmk to work like batch (below) -# and this technique doesn't seem to help Windows build time nor does -# it work very well, it's possible the Windows Visual Studio compilers -# don't work well in a parallel situation, this needs investigation. -# - -ifeq ($(COMPILE_APPROACH),parallel) - -.PHONY: library_parallel_compile - -library_parallel_compile: - @$(ECHO) "Begin parallel compiles: $(shell $(PWD))" - $(MAKE) -j $(PARALLEL_COMPILE_JOBS) $(COMPILE_FILES_o) - @$(ECHO) "Done with parallel compiles: $(shell $(PWD))" - -$(ACTUAL_LIBRARY):: library_parallel_compile - -endif - -# -# COMPILE_APPROACH=batch: Will trigger compilations (just compilations) to -# happen in batch mode. Greatly decreases Windows build time. -# See logic in Rules.gmk for how compiles happen, the $(MAKE) in -# library_batch_compile below triggers the actions in Rules.gmk. -# Note that each .d file will also be dependent on it's .o file, see -# Rules.gmk. -# -ifeq ($(COMPILE_APPROACH),batch) - -.PHONY: library_batch_compile - -library_batch_compile: - @$(ECHO) "Begin BATCH compiles: $(shell $(PWD))" - $(MAKE) $(COMPILE_FILES_o) - $(MAKE) batch_compile - @$(ECHO) "Done with BATCH compiles: $(shell $(PWD))" - $(MAKE) COMPILE_APPROACH=normal $(COMPILE_FILES_o) - -$(ACTUAL_LIBRARY):: library_batch_compile - -endif - -ifeq ($(PLATFORM), windows) - -# -# Library building rules. -# - -$(LIBRARY).lib:: $(OBJDIR) - -ifeq ($(LIBRARY), fdlibm) -$(ACTUAL_LIBRARY):: $(OBJDIR)/$(LIBRARY).lib - -$(OBJDIR)/$(LIBRARY).lib:: $(OBJDIR)/$(LIBRARY).lcf - @$(prep-target) - $(AR) -NODEFAULTLIB:MSVCRT -out:$@ -nologo \ - @$(OBJDIR)/$(LIBRARY).lcf $(OTHER_LCF) $(LDLIBS_COMMON) -else # LIBRARY -# build it into $(OBJDIR) so that the other generated files get put -# there, then copy just the DLL (and MAP file) to the requested directory. -# -$(ACTUAL_LIBRARY):: $(OBJDIR)/$(LIBRARY).lcf - @$(prep-target) - @$(MKDIR) -p $(OBJDIR) - $(LD) -dll -out:$(OBJDIR)/$(@F) \ - -map:$(OBJDIR)/$(LIBRARY).map \ - $(LFLAGS) @$(OBJDIR)/$(LIBRARY).lcf \ - $(OTHER_LCF) $(LDLIBS) - $(CP) $(OBJDIR)/$(@F) $@ - @$(call binary_file_verification,$@) - $(CP) $(OBJDIR)/$(LIBRARY).map $(@D) - $(CP) $(OBJDIR)/$(LIBRARY).pdb $(@D) - -endif # LIBRARY - -$(OBJDIR)/$(LIBRARY).lcf: $(OBJDIR)/$(LIBRARY).res $(COMPILE_FILES_o) $(FILES_m) - @$(prep-target) - @$(MKDIR) -p $(TEMPDIR) - @$(ECHO) $(FILES_o) > $@ -ifndef LOCAL_RESOURCE_FILE - @$(ECHO) $(OBJDIR)/$(LIBRARY).res >> $@ -endif - @$(ECHO) Created $@ - -# JDK name required here -RC_FLAGS += /D "JDK_FNAME=$(LIBRARY).dll" \ - /D "JDK_INTERNAL_NAME=$(LIBRARY)" \ - /D "JDK_FTYPE=0x2L" - -$(OBJDIR)/$(LIBRARY).res: $(VERSIONINFO_RESOURCE) -ifndef LOCAL_RESOURCE_FILE - @$(prep-target) - $(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE) -endif - -# -# Install a .lib file if required. -# -ifeq ($(INSTALL_DOT_LIB), true) -$(ACTUAL_LIBRARY):: $(LIBDIR)/$(LIBRARY).lib - -clean:: - -$(RM) $(LIBDIR)/$(LIBRARY).lib - -$(LIBDIR)/$(LIBRARY).lib:: $(OBJDIR)/$(LIBRARY).lib - $(install-file) - -$(LIBDIR)/$(LIBRARY).dll:: $(OBJDIR)/$(LIBRARY).dll - $(install-file) - -endif # INSTALL_DOT_LIB - -else # PLATFORM - -# -# On Solaris, use mcs to write the version into the comment section of -# the shared library. On other platforms set this to false at the -# make command line. -# - -ifneq ($(PLATFORM), macosx) - ARFLAGS = -r -endif - -$(ACTUAL_LIBRARY):: $(COMPILE_FILES_o) $(FILES_m) $(FILES_reorder) - @$(prep-target) - @$(ECHO) "STATS: LIBRARY=$(LIBRARY), PRODUCT=$(PRODUCT), OPTIMIZATION_LEVEL=$(OPTIMIZATION_LEVEL)" - @$(ECHO) "Rebuilding $@ because of $?" -ifeq ($(LIBRARY), fdlibm) - $(AR) $(ARFLAGS) $@ $(FILES_o) -else # LIBRARY - $(LINKER) $(SHARED_LIBRARY_FLAG) -o $@ $(FILES_o) $(LDLIBS) - @$(call binary_file_verification,$@) -ifeq ($(WRITE_LIBVERSION),true) - $(MCS) -d -a "$(FULL_VERSION)" $@ -endif # WRITE_LIBVERSION -endif # LIBRARY - -endif # PLATFORM - -# -# Cross check all linted files against each other -# -ifeq ($(PLATFORM),solaris) -lint.errors : $(FILES_ln) - $(LINT.c) $(FILES_ln) $(LDLIBS) -endif - -# -# Class libraries with JNI native methods get a include to the package. -# -ifdef PACKAGE -vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR) -vpath %.c $(SHARE_SRC)/native/$(PKGDIR) -OTHER_INCLUDES += -I$(SHARE_SRC)/native/common -I$(PLATFORM_SRC)/native/common -OTHER_INCLUDES += -I$(SHARE_SRC)/native/$(PKGDIR) \ - -I$(PLATFORM_SRC)/native/$(PKGDIR) -endif - -# -# Clean/clobber rules -# -clean:: - $(RM) -r $(ACTUAL_LIBRARY) - -clobber:: clean - -# -# INCREMENTAL_BUILD means that this workspace will be built over and over -# possibly incrementally. This means tracking the object file dependencies -# on include files so that sources get re-compiled when the include files -# change. When building from scratch and doing a one time build (like -# release engineering or nightly builds) set INCREMENTAL_BUILD=false. -# - -ifeq ($(INCREMENTAL_BUILD),true) - -# -# Workaround: gnumake sometimes says files is empty when it shouldn't -# was: files := $(foreach file, $(wildcard $(OBJDIR)/*.$(DEPEND_SUFFIX)), $(file)) -# -files := $(shell $(LS) $(OBJDIR)/*.$(DEPEND_SUFFIX) 2>/dev/null) - -# -# Only include these files if we have any. -# -ifneq ($(strip $(files)),) - -include $(files) - -endif # files - -endif # INCREMENTAL_BUILD - -# -# Default dependencies -# - -all: build - -build: library - -debug: - $(MAKE) VARIANT=DBG build - -fastdebug: - $(MAKE) VARIANT=DBG FASTDEBUG=true build - -openjdk: - $(MAKE) OPENJDK=true build - -FORCE: - -.PHONY: all build debug fastdebug - diff --git a/jdk/makefiles/common/Mapfile-vers.gmk b/jdk/makefiles/common/Mapfile-vers.gmk deleted file mode 100644 index 15c8ccd519a..00000000000 --- a/jdk/makefiles/common/Mapfile-vers.gmk +++ /dev/null @@ -1,97 +0,0 @@ -# -# Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for linking with mapfiles. -# -# NOTE: Not using a mapfile will expose all your extern functions and -# extern data symbols as part of your interface, so unless your -# extern names are safe from being mistaken as names from other -# libraries, you better use a mapfile, or use a unique naming -# convention on all your extern symbols. -# -# The mapfile will establish versioning by defining the exported interface. -# -# The mapfile can also force certain .o files or elf sections into the -# the different segments of the resulting library/program image. -# -# The macro FILES_m can contain any number of mapfiles. -# - -# Always make sure 'all' is the default rule -mapfile_default_rule: all - -ifeq ($(PLATFORM), solaris) - -ifeq ($(VARIANT), OPT) - # OPT build MUST have a mapfile? - ifndef FILES_m - FILES_m = mapfile-vers - endif - - # If we are re-ordering functions in this solaris library, we need to make - # sure that -xF is added to the compile lines. This option is critical and - # enables the functions to be reordered. - ifdef FILES_reorder - CFLAGS_OPT += -xF - CXXFLAGS_OPT += -xF - endif - -INIT += $(TEMPDIR)/mapfile-vers - -$(TEMPDIR)/mapfile-vers : $(FILES_m) $(FILES_reorder) - $(prep-target) - $(CAT) $(FILES_m) > $@ - ifdef FILES_reorder - $(SED) -e 's=OUTPUTDIR=$(OUTPUTDIR)=' $(FILES_reorder) >> $@ - endif -endif # VARIANT - -ifndef LDNOMAP - LDMAPFLAGS_OPT = -M$(TEMPDIR)/mapfile-vers - LDMAPFLAGS_DBG = $(FILES_m:%=-M%) -endif - -endif # PLATFORM - -ifeq ($(PLATFORM), linux) - -ifeq ($(VARIANT), OPT) - # OPT build MUST have a mapfile? - ifndef FILES_m - FILES_m = mapfile-vers - endif -endif # VARIANT - -ifndef LDNOMAP - LDMAPFLAGS_OPT = $(FILES_m:%=-Xlinker -version-script=%) - LDMAPFLAGS_DBG = $(FILES_m:%=-Xlinker -version-script=%) -endif - -endif # PLATFORM - -LDFLAGS_OPT += $(LDMAPFLAGS_OPT) -LDFLAGS_DBG += $(LDMAPFLAGS_DBG) - diff --git a/jdk/makefiles/common/Modules.gmk b/jdk/makefiles/common/Modules.gmk deleted file mode 100644 index 7c6ccfda5f8..00000000000 --- a/jdk/makefiles/common/Modules.gmk +++ /dev/null @@ -1,479 +0,0 @@ -# -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -JDK_MODULE_IMAGE_DIR = $(ABS_OUTPUTDIR)/jdk-module-image -JRE_MODULE_IMAGE_DIR = $(ABS_OUTPUTDIR)/jre-module-image - -# -# modules Target to build jdk and jre module image -# -# There is one jar file per module containing classes only. -# All module jars are currently placed under jre/lib directory. -# -# Open issues that need further investigation: -# 1. Classes in jre/lib/ext/dnsns.jar are currently put in jre/lib/jndi-dns -# module. META-INF/services file is not installed. -# 2. Signed jars -# For JDK build, signed jars are copied to the build. -# All jars in the module image are unsigned. - -MODULE_IMAGEBINDIR = bin - -# -# Targets. -# -INITIAL_MODULE_IMAGE_JRE=initial-module-image-jre -INITIAL_MODULE_IMAGE_JDK=initial-module-image-jdk -ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 64) - INITIAL_MODULE_IMAGE_JRE=initial-module-image-jre-sol64 - INITIAL_MODULE_IMAGE_JDK=initial-module-image-jdk-sol64 - endif -endif - -modules modules-clobber \ -initial-module-image-jre initial-module-image-jdk \ -initial-module-image-jre-sol64 initial-module-image-jdk-sol64 \ -trim-module-image-jre trim-module-image-jdk \ -process-module-image-jre process-module-image-jdk :: - @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..." - -# Order is important here, trim jre after jdk image is created -modules:: gen-modules \ - $(INITIAL_MODULE_IMAGE_JRE) $(INITIAL_MODULE_IMAGE_JDK) \ - trim-module-image-jre trim-module-image-jdk \ - process-module-image-jre process-module-image-jdk - -# Don't use these -module-image-jre:: initial-module-image-jre trim-module-image-jre process-module-image-jre -module-image-jdk:: initial-module-image-jdk trim-module-image-jdk process-module-image-jdk - -# -# Paths to these files we need -JDK_MODULE_LICENSES = $(LICENSE_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%) -JDK_MODULE_64_LICENSES = $(LICENSE_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%64) -JDK_MODULE_DOCFILES = $(OTHER_DOCLIST_JDK:%=$(JDK_MODULE_IMAGE_DIR)/%) - -JRE_MODULE_LICENSES = $(LICENSE_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%) -JRE_MODULE_64_LICENSES = $(LICENSE_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%64) -JRE_MODULE_DOCFILES = $(OTHER_DOCLIST_JRE:%=$(JRE_MODULE_IMAGE_DIR)/%) -JRE_MODULE_DOCFILES += $(JRE_NAMECHANGE_DOCLIST:%=$(JRE_MODULE_IMAGE_DIR)/%$(TEXT_SUFFIX)) - -###### RULES - -# JDK files -$(JDK_MODULE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/% - $(process-doc-file) -# Removes LICENSE_VERSION or not -ifdef LICENSE_VERSION -$(JDK_MODULE_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/%$(LICENSE_VERSION) - $(process-doc-file) -$(JDK_MODULE_IMAGE_DIR)/%64: $(SHARE_JDK_DOC_SRC)/%$(LICENSE_VERSION) - $(process-doc-file) -else -$(JDK_MODULE_IMAGE_DIR)/%64: $(SHARE_JDK_DOC_SRC)/% - $(process-doc-file) -endif - -# JRE files -$(JRE_MODULE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/% - $(process-doc-file) -# Add $(TEXT_SUFFIX) suffix -ifdef TEXT_SUFFIX -$(JRE_MODULE_IMAGE_DIR)/%$(TEXT_SUFFIX): $(SHARE_JRE_DOC_SRC)/% - $(process-doc-file) -endif -# Removes LICENSE_VERSION or not -ifdef LICENSE_VERSION -$(JRE_MODULE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/%$(LICENSE_VERSION) - $(process-doc-file) -$(JRE_MODULE_IMAGE_DIR)/%64: $(SHARE_JRE_DOC_SRC)/%$(LICENSE_VERSION) - $(process-doc-file) -else -$(JRE_MODULE_IMAGE_DIR)/%64: $(SHARE_JRE_DOC_SRC)/% - $(process-doc-file) -endif - -###################################################### -# JRE Image -###################################################### - -MODULES_LIST = $(MODULES_TEMPDIR)/classlist/modules.list - -# Modules in the jre/lib/security directory -POLICY_MODULES = US_export_policy local_policy - -# Modules in the modules/ext directory -EXT_MODULES = localedata security-sunec security-sunjce - -# Build PKCS#11 on all platforms except 64-bit Windows. -PKCS11 = security-sunpkcs11 -ifeq ($(ARCH_DATA_MODEL), 64) - ifeq ($(PLATFORM), windows) - PKCS11 = - endif -endif - -EXT_MODULES += $(PKCS11) - -# Build Microsoft CryptoAPI provider only on (non-64-bit) Windows platform. -ifeq ($(PLATFORM), windows) - ifneq ($(ARCH_DATA_MODEL), 64) - EXT_MODULES += security-sunmscapi - endif -endif - -# Modules for JDK only -JDK_MODULES = tools - -gen-modules: - $(CD) modules; $(MAKE) all - -initial-module-image-jre-setup: - $(RM) -r $(JRE_MODULE_IMAGE_DIR) - $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR) - -# 64-bit solaris jre image contains only the 64-bit add-on files. -initial-module-image-jre-sol64:: initial-module-image-jre-setup \ - $(JRE_MODULE_LICENSES) $(JRE_MODULE_64_LICENSES) - @# Use tar instead of cp to preserve the symbolic links - for dir in bin lib ; do \ - ( $(CD) $(OUTPUTDIR) && \ - $(TAR) cf - `$(FIND) $$dir -name '$(ARCH)' -print` | \ - ($(CD) $(JRE_MODULE_IMAGE_DIR) && $(TAR) xf -) ) ; \ - done - @# Remove some files from the jre area - for t in $(NOTJRETOOLS) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ - done - $(RM) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'orb.idl'` - $(RM) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'ir.idl'` - -# Construct an initial jre image (initial jdk jre) no trimming or stripping -initial-module-image-jre:: initial-module-image-jre-setup \ - $(JRE_LICENSES) $(JRE_MODULE_DOCFILES) \ - $(BUILDMETAINDEX_JARFILE) - @# Copy in bin directory - $(CD) $(OUTPUTDIR) && $(FIND) bin -depth | $(CPIO) -pdum $(JRE_MODULE_IMAGE_DIR) - @# CTE plugin security change require new empty directory lib/applet - $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)/lib/applet - @# Copy files but not .jar in lib directory - $(CD) $(OUTPUTDIR) && $(FIND) lib -depth | $(EGREP) -v ".jar$$" | $(CPIO) -pdum $(JRE_MODULE_IMAGE_DIR) - @# - @# copy modules to jre/lib - @# - for m in `$(NAWK) '{print $$1}' $(MODULES_LIST)` ; do \ - $(CP) $(MODULES_DIR)/$$m/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib ; \ - done - $(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)/lib/ext - for m in $(EXT_MODULES) ; do \ - $(MV) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib/ext ; \ - done - for m in $(POLICY_MODULES) ; do \ - $(MV) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib/security; \ - done - @# Remove jdk modules - for m in $(JDK_MODULES) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar ; \ - done - - @# Make sure all directories are read/execute for everyone - $(CHMOD) a+rx `$(FIND) $(JRE_MODULE_IMAGE_DIR) -type d` - @# Remove some files from the jre area - for t in $(NOTJRETOOLS) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ - done - @# Remove orb.idl and ir.idl from jre - $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'orb.idl' -exec $(RM) \{} \; - $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -name 'ir.idl' -exec $(RM) \{} \; - @# Generate meta-index to make boot and extension class loaders lazier - $(CD) $(JRE_MODULE_IMAGE_DIR)/lib && \ - $(BOOT_JAVA_CMD) -jar $(BUILDMETAINDEX_JARFILE) \ - -o meta-index *.jar - @$(CD) $(JRE_MODULE_IMAGE_DIR)/lib && $(java-vm-cleanup) - $(CD) $(JRE_MODULE_IMAGE_DIR)/lib/ext && \ - $(BOOT_JAVA_CMD) -jar $(BUILDMETAINDEX_JARFILE) \ - -o meta-index *.jar - @$(CD) $(JRE_MODULE_IMAGE_DIR)/lib/ext && $(java-vm-cleanup) -ifeq ($(PLATFORM), windows) - @# Remove certain *.lib files - $(CD) $(JRE_MODULE_IMAGE_DIR)/lib && \ - $(RM) java.$(LIB_SUFFIX) jvm.$(LIB_SUFFIX) \ - hpi.$(LIB_SUFFIX) awt.$(LIB_SUFFIX) jawt.$(LIB_SUFFIX) - ifeq ($(ARCH_DATA_MODEL), 32) - @# The Java Kernel JRE image ships with a special VM. It is not included - @# in the full JRE image, so remove it. Also, is it only for 32-bit windows. - $(CD) $(JRE_MODULE_IMAGE_DIR)/bin && $(RM) -r kernel - endif -endif # Windows -ifneq ($(PLATFORM), windows) - $(call copy-man-pages,$(JRE_MODULE_IMAGE_DIR),$(JRE_MAN_PAGES)) -endif # !windows - -# Trim out any extra files not for the jre shipment but wanted in the jdk jre. -# (Note the jdk WILL want the jre image before this trimming) -# Removes server VM on Windows 32bit. -# Remove certain shared libraries that should not be in the jre image -# but should be in the jdk jre image. -trim-module-image-jre:: -ifeq ($(PLATFORM), windows) - ifeq ($(ARCH_DATA_MODEL), 32) - $(RM) -r $(JRE_MODULE_IMAGE_DIR)/bin/server - endif - ifdef NOTJRE_SHARED_LIBS - for l in $(NOTJRE_SHARED_LIBS) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/bin/$$l ; \ - done ; - endif -else # PLATFORM - ifdef NOTJRE_SHARED_LIBS - for l in $(NOTJRE_SHARED_LIBS) ; do \ - $(RM) $(JRE_MODULE_IMAGE_DIR)/lib/$(LIBARCH)/$$l ; \ - done ; - endif -endif # PLATFORM - -# Get list of all Elf files in the jre -JRE_MODULE_ELF_LIST=$(MODULES_TEMPDIR)/jre-elf-files.list -$(JRE_MODULE_ELF_LIST): - @$(prep-target) -ifneq ($(PLATFORM), windows) - $(RM) $@ - $(FIND) $(JRE_MODULE_IMAGE_DIR)/lib -type f -name \*.$(LIB_SUFFIX) >> $@ - $(FILE) `$(FIND) $(JRE_MODULE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ -endif - -# Post process the image (strips and mcs on Elf files we are shipping) -# (Note the jdk WILL want the jre image before this processing) -process-module-image-jre:: $(JRE_MODULE_ELF_LIST) -ifneq ($(POST_STRIP_PROCESS), ) - for f in `$(CAT) $(JRE_MODULE_ELF_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ - $(POST_STRIP_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif -ifneq ($(POST_MCS_PROCESS), ) - for f in `$(CAT) $(JRE_MODULE_ELF_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_MCS_PROCESS) $${f}; \ - $(POST_MCS_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif - $(RM) $(JRE_MODULE_ELF_LIST) - -###################################################### -# JDK Image -###################################################### -# Note: cpio ($(CPIO)) sometimes leaves directories without rx access. - -initial-module-image-jdk-setup: - $(RM) -r $(JDK_MODULE_IMAGE_DIR) - $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/jre - ($(CD) $(JRE_MODULE_IMAGE_DIR) && $(FIND) . -depth -print \ - | $(CPIO) -pdum $(JDK_MODULE_IMAGE_DIR)/jre ) - $(RM) -rf $(JDK_MODULE_IMAGE_DIR)/jre/man - $(CHMOD) a+rx `$(FIND) $(JDK_MODULE_IMAGE_DIR) -type d` - -initial-module-image-jdk64-bindemos: - for dir in bin demo ; do \ - ( $(CD) $(OUTPUTDIR) && \ - $(TAR) cf - `$(FIND) $$dir -name '$(LIBARCH)' -print` | \ - ($(CD) $(JDK_MODULE_IMAGE_DIR) && $(TAR) xf -) ) ; \ - done - -# Solaris 64 bit image is special -initial-module-image-jdk-sol64:: initial-module-image-jdk-setup \ - initial-module-image-jdk64-bindemos \ - $(JDK_MODULE_LICENSES) $(JDK_MODULARLIZED_64_LICENSES) - -# DB files to add -ifeq ($(OPENJDK),true) - -initial-module-image-jdk-db: - -else - -# Create the list of db *.zip files to bundle with jdk -ABS_DB_PATH :=$(call FullPath,$(CLOSED_SHARE_SRC)/db) -DB_ZIP_LIST = $(shell $(LS) $(ABS_DB_PATH)/*.zip 2>/dev/null) - -initial-module-image-jdk-db: $(DB_ZIP_LIST) - $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/db - for d in $(DB_ZIP_LIST); do \ - ($(CD) $(JDK_MODULE_IMAGE_DIR)/db && $(UNZIP) -o $$d); \ - done - -endif - -# Standard jdk image -initial-module-image-jdk:: initial-module-image-jdk-setup \ - initial-module-image-jdk-db \ - $(JDK_MODULE_LICENSES) $(JDK_MODULE_DOCFILES) - $(MKDIR) $(JDK_MODULE_IMAGE_DIR)/lib - @# - @# copy jdk modules to jdk/lib - @# - $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/lib - for m in $(JDK_MODULES) ; do \ - $(CP) $(MODULES_DIR)/$$m/lib/$$m.jar $(JDK_MODULE_IMAGE_DIR)/lib ; \ - done - ifeq ($(PLATFORM), windows) - @# - @# lib/ - @# - $(CP) $(LIBDIR)/$(LIB_PREFIX)jvm.$(LIB_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/lib - $(CP) $(LIBDIR)/$(LIB_PREFIX)jawt.$(LIB_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/lib - @# - @# bin/ - @# - @# copy all EXE files and only certain DLL files from BINDIR - $(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/bin - $(CP) $(BINDIR)/*$(EXE_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin - $(CP) $(BINDIR)/jli.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin - ifeq ($(COMPILER_VERSION), VS2010) - $(CP) $(BINDIR)/msvc*100.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin - endif - ifeq ($(ARCH_DATA_MODEL), 32) - ifeq ($(COMPILER_VERSION), VS2003) - $(CP) $(BINDIR)/msvc*71.$(LIBRARY_SUFFIX) $(JDK_MODULE_IMAGE_DIR)/bin - endif - endif - else # PLATFORM - @# - @# bin/ - @# - ($(CD) $(BINDIR)/.. && $(TAR) cf - \ - `$(FIND) bin \( -type f -o -type l \) -print `) | \ - ($(CD) $(JDK_MODULE_IMAGE_DIR) && $(TAR) xf -) - endif # PLATFORM - @# - @# lib/ct.sym - @# - $(MKDIR) -p $(OUTPUTDIR)/symbols/META-INF/sym - $(JAVAC_CMD) -XDprocess.packages -proc:only \ - -processor com.sun.tools.javac.sym.CreateSymbols \ - -Acom.sun.tools.javac.sym.Jar=$(RT_JAR) \ - -Acom.sun.tools.javac.sym.Dest=$(OUTPUTDIR)/symbols/META-INF/sym/rt.jar \ - $(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS) - $(BOOT_JAR_CMD) c0f $(LIBDIR)/ct.sym \ - -C $(OUTPUTDIR)/symbols META-INF $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - $(CP) $(LIBDIR)/ct.sym $(JDK_MODULE_IMAGE_DIR)/lib/ct.sym - @# - @# CORBA supported orb.idl and ir.idl should be copied to lib - @# - $(CP) $(LIBDIR)/orb.idl $(JDK_MODULE_IMAGE_DIR)/lib/orb.idl - $(CP) $(LIBDIR)/ir.idl $(JDK_MODULE_IMAGE_DIR)/lib/ir.idl - ifeq ($(PLATFORM), linux) - @# - @# on Linux copy jexec from jre/lib to /lib - @# - $(CP) $(LIBDIR)/jexec $(JDK_MODULE_IMAGE_DIR)/lib/jexec - endif # PLATFORM - @# - @# demo, include - @# - $(CP) -r -f $(DEMODIR) $(JDK_MODULE_IMAGE_DIR) - $(CP) -r -f $(SAMPLEDIR) $(JDK_MODULE_IMAGE_DIR) - $(CP) -r $(INCLUDEDIR) $(JDK_MODULE_IMAGE_DIR) - @# - @# Swing BeanInfo generation - @# - $(CD) javax/swing/beaninfo && $(MAKE) JDK_IMAGE_DIR=$(JDK_MODULE_IMAGE_DIR) swing-1.2-beans -ifneq ($(PLATFORM), windows) - $(call copy-man-pages,$(JDK_MODULE_IMAGE_DIR),$(JDK_MAN_PAGES)) -endif # !windows - -# Trim out files we don't want to ship -trim-module-image-jdk:: - @# Remove tools that should not be part of SDK. - for t in $(NOTJDKTOOLS); do \ - $(RM) $(JDK_MODULE_IMAGE_DIR)/bin/$${t}$(EXE_SUFFIX) \ - $(JDK_MODULE_IMAGE_DIR)/bin/*/native_threads/$${t}$(EXE_SUFFIX); \ - done - -# Get list of Elf files in the jdk -JDK_MODULE_ELF_LIST=$(MODULES_TEMPDIR)/jdk-elf-files.list -$(JDK_MODULE_ELF_LIST): - @$(prep-target) -ifneq ($(PLATFORM), windows) - $(RM) $@ - $(FIND) $(JDK_MODULE_IMAGE_DIR)/jre/lib -type f -name \*.$(LIB_SUFFIX) >> $@ - $(FILE) `$(FIND) $(JDK_MODULE_IMAGE_DIR)/jre/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ - file `$(FIND) $(JDK_MODULE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ -endif - -# Post process the image (strips and mcs on files we are shipping) -process-module-image-jdk:: $(JDK_MODULE_ELF_LIST) -ifneq ($(POST_STRIP_PROCESS), ) - for f in `$(CAT) $(JDK_MODULE_ELF_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ - $(POST_STRIP_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif -ifneq ($(POST_MCS_PROCESS), ) - for f in `$(CAT) $(JDK_MODULE_ELF_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_MCS_PROCESS) $${f}; \ - $(POST_MCS_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif - $(RM) $(JDK_MODULE_ELF_LIST) - -###################################################### -# clobber -###################################################### -modules-clobber:: - $(RM) -r $(JDK_MODULE_IMAGE_DIR) - $(RM) -r $(JRE_MODULE_IMAGE_DIR) - -modules modules-clobber:: - @$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..." - @$(java-vm-cleanup) - -.PHONY: modules module-image-jre module-image-jdk \ - initial-module-image-jre initial-module-image-jdk \ - initial-module-image-jre-sol64 initial-module-image-jdk-sol64 \ - initial-module-image-jdk-setup \ - initial-module-image-jdk-db \ - initial-module-image-jdk64-bindemos \ - initial-module-image-jre-setup \ - trim-module-image-jre trim-module-image-jdk \ - process-module-image-jre process-module-image-jdk \ - install-previous-jre install-previous-jdk \ - modules-clobber - -# Force rule -FRC: - diff --git a/jdk/makefiles/common/Program.gmk b/jdk/makefiles/common/Program.gmk deleted file mode 100644 index 5ace9dc8eda..00000000000 --- a/jdk/makefiles/common/Program.gmk +++ /dev/null @@ -1,319 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Generic makefile for building executables. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - -# -# If building programs, use a normal compile approach -# -ifeq ($(COMPILE_APPROACH),batch) - override COMPILE_APPROACH = normal -endif - -# set the platform specific directory for macosx, also this platform shares -# substantial family ties with its siblings (solaris and linux), thus we add -# solaris src path to its compilation dependencies. -ifeq ($(PLATFORM), macosx) - LAUNCHER_PLATFORM_SRC = $(BUILDDIR)/../src/macosx - LAUNCHER_SOLARIS_PLATFORM_SRC = $(BUILDDIR)/../src/solaris -else - LAUNCHER_PLATFORM_SRC = $(PLATFORM_SRC) -endif - -ifndef LAUNCHER_SHARE_SRC - LAUNCHER_SHARE_SRC = $(SHARE_SRC) -endif - -ACTUAL_PROGRAM_NAME = $(PROGRAM)$(EXE_SUFFIX) -ACTUAL_PROGRAM_DIR = $(BINDIR) -ACTUAL_PROGRAM = $(ACTUAL_PROGRAM_DIR)/$(ACTUAL_PROGRAM_NAME) - -# Make sure the default rule is all -program_default_rule: all - -program: $(ACTUAL_PROGRAM) - -# Work-around for missing processor specific mapfiles -ifndef CROSS_COMPILE_ARCH - # reuse the mapfiles in the launcher's directory, the same should - # be applicable to the tool launchers as well. - FILES_m = $(BUILDDIR)/java/main/java/mapfile-$(ARCH) - include $(BUILDDIR)/common/Mapfile-vers.gmk -endif - -include $(JDK_TOPDIR)/makefiles/common/Rules.gmk - -ifdef NEVER_ACT_AS_SERVER_CLASS_MACHINE - OTHER_CPPFLAGS += -DNEVER_ACT_AS_SERVER_CLASS_MACHINE -endif - -# -# Create a dependency on libjli (Java Launcher Infrastructure) -# -# On UNIX, this is a relative dependency using $ORIGIN. Unfortunately, to -# do this reliably on Linux takes a different syntax than Solaris. -# -# On Windows, this is done by using the same directory as the executable -# itself, as with all the Windows libraries. -# -ifeq ($(PLATFORM), macosx) - ifneq ($(ARCH), universal) - LDFLAGS += -Wl,-all_load - endif - LDFLAGS += $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static/libjli.a - - ifeq ($(SYSTEM_ZLIB),true) - OTHER_LDLIBS += -lz - endif -endif - -ifneq (,$(findstring $(PLATFORM), linux solaris)) # UNIX systems - LDFLAGS += -L $(LIBDIR)/$(LIBARCH)/jli - OTHER_LDLIBS += -ljli - ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 32) - LDFLAGS += -R \$$ORIGIN/../lib/$(LIBARCH)/jli - LDFLAGS += -R \$$ORIGIN/../jre/lib/$(LIBARCH)/jli - else - LDFLAGS += -R \$$ORIGIN/../../lib/$(LIBARCH)/jli - LDFLAGS += -R \$$ORIGIN/../../jre/lib/$(LIBARCH)/jli - endif - endif - ifeq ($(PLATFORM), linux) - LDFLAGS += $(LDFLAG_Z_ORIGIN) - LDFLAGS += -Wl,--allow-shlib-undefined - LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/../lib/$(LIBARCH)/jli - LDFLAGS += -Wl,-rpath -Wl,\$$ORIGIN/../jre/lib/$(LIBARCH)/jli - endif -endif - -ifeq ($(PLATFORM), windows) - JLI_LCF = $(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/jli.lcf - ifdef STATIC_JLI - LDFLAGS += -libpath:$(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME)/static - else - LDFLAGS += -libpath:$(OUTPUTDIR)/tmp/java/jli/$(OBJDIRNAME) - endif - OTHER_LDLIBS += jli.lib -endif - -# -# Launcher specific files. -# -FILES_o = $(OBJDIR)/main.$(OBJECT_SUFFIX) - -$(ACTUAL_PROGRAM):: classes $(INIT) - -# -# Windows only -# -ifeq ($(PLATFORM), windows) - # JDK name required here - RC_FLAGS += /D "JDK_FNAME=$(PROGRAM)$(EXE_SUFFIX)" \ - /D "JDK_INTERNAL_NAME=$(PROGRAM)" \ - /D "JDK_FTYPE=0x1L" - - $(OBJDIR)/$(PROGRAM).res: $(VERSIONINFO_RESOURCE) - @$(prep-target) - ifndef LOCAL_RESOURCE_FILE - $(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE) - endif - - $(OBJDIR)/$(PROGRAM).lcf: $(OBJDIR)/$(PROGRAM).res $(FILES_o) - @$(prep-target) - @$(ECHO) $(FILES_o) > $@ - ifndef LOCAL_RESOURCE_FILE - @$(ECHO) $(OBJDIR)/$(PROGRAM).res >> $@ - endif - @$(ECHO) setargv.obj >> $@ - @$(ECHO) Created $@ - - $(ACTUAL_PROGRAM):: $(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX) - @$(install-file) - - ifeq ($(ARCH_DATA_MODEL), 32) - STACK_SIZE=327680 - else - # We need more Stack for Windows 64bit - STACK_SIZE=1048576 - endif - - IMVERSION=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VER).$(COOKED_BUILD_NUMBER) - $(OBJDIR)/$(PROGRAM).exe.manifest: $(JDK_TOPDIR)/src/windows/resource/java.manifest - @$(prep-target) - $(SED) 's%IMVERSION%$(IMVERSION)%g;s%PROGRAM%$(PROGRAM)%g' $< > $@ - - # We used a hand-crafted manifest file for all executables. - # It is tweaked to embed the build number and executable name. - # Use ";#2" for .dll and ";#1" for .exe in the MT command below: - $(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX):: $(OBJDIR)/$(PROGRAM).lcf $(FILES_o) $(JLI_LCF) $(OBJDIR)/$(PROGRAM).exe.manifest - @$(prep-target) - @set -- $?; \ - $(ECHO) Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...}; - $(LD) -out:$@ /STACK:$(STACK_SIZE) \ - -map:$(OBJDIR)/$(PROGRAM).map $(LFLAGS) $(LDFLAGS) \ - @$(OBJDIR)/$(PROGRAM).lcf $(LDLIBS) - ifdef MT - $(MT) /manifest $(OBJDIR)/$(PROGRAM).exe.manifest /outputresource:$@;#1 - endif - @$(call binary_file_verification,$@) -else - # - # Note that we have to link -lthread even when USE_PTHREADS is true. - # This is becuase checkForCorrectLibthread() croaks otherwise. - # - LIBTHREAD = -lthread - ifeq ($(USE_PTHREADS),true) - THREADLIBS = -lpthread $(LIBTHREAD) - else - THREADLIBS = $(LIBTHREAD) - endif - - ifeq ($(PLATFORM), macosx) - THREADLIBS = -pthread - # Needed for linking the various launchers - LDFLAGS += -framework Cocoa -framework Security \ - -framework ApplicationServices - OTHER_CPPFLAGS += -DPACKAGE_PATH='"$(PACKAGE_PATH)"' - - # Default Info.plist file for the command line tools. This gets overridden by - # some of the jvmstat tools so that they have task_for_pid() privileges - ifndef INFO_PLIST_FILE - INFO_PLIST_FILE = Info-cmdline.plist - endif - LDFLAGS += -sectcreate __TEXT __info_plist $(LAUNCHER_PLATFORM_SRC)/lib/$(INFO_PLIST_FILE) - else - INFO_PLIST_FILE= - endif - - # - # This rule only applies on unix. It supports quantify and its ilk. - # - $(ACTUAL_PROGRAM):: $(FILES_o) - @$(prep-target) - @set -- $?; \ - $(ECHO) Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...}; - @$(MKDIR) -p $(TEMPDIR) - $(LINK_PRE_CMD) $(CC) $(CC_OBJECT_OUTPUT_FLAG)$@ $(LDFLAGS) \ - $(FILES_o) $(THREADLIBS) $(LDLIBS) - ifeq ($(findstring privileged, $(INFO_PLIST_FILE)), privileged) - -codesign -s openjdk_codesign $@ - endif - @$(call binary_file_verification,$@) -endif # PLATFORM - -clean:: -ifeq ($(PLATFORM), windows) - $(RM) $(OBJDIR)/$(PROGRAM).rc - $(RM) $(OBJDIR)/$(PROGRAM).ico - $(RM) $(OBJDIR)/$(PROGRAM).lcf - $(RM) $(OBJDIR)/$(PROGRAM).map - $(RM) $(OBJDIR)/$(PROGRAM).exp - $(RM) $(OBJDIR)/$(PROGRAM).lib - $(RM) $(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX) - $(RM) $(OBJDIR)/$(PROGRAM).ilk - $(RM) *.pdb -endif - - -clobber:: - $(RM) $(ACTUAL_PROGRAM) - -# -# Now include make dependencies (created during compilation, see Rules.gmk) -# -ifeq ($(INCREMENTAL_BUILD),true) - # Workaround: gnumake sometimes says files is empty when it shouldn't - # was: files := $(foreach file, $(wildcard */$(ARCH)/*.$(DEPEND_SUFFIX)), $(file)) - files := $(shell $(LS) $(OBJDIR)/*.$(DEPEND_SUFFIX) 2>/dev/null) - ifneq ($(strip $(files)),) - include $(files) - endif -endif - -ifdef JAVA_ARGS - OTHER_CPPFLAGS += -DJAVA_ARGS='$(JAVA_ARGS)' - OTHER_CPPFLAGS += -DLAUNCHER_NAME='"$(LAUNCHER_NAME)"' -endif - -ifeq ($(PLATFORM), windows) - ifdef RELEASE - OTHER_CPPFLAGS += -DVERSION='"$(RELEASE)"' - endif -endif - - -ifneq ($(PLATFORM), windows) - HAVE_GETHRTIME=true -endif - -ifeq ($(HAVE_GETHRTIME),true) - OTHER_CPPFLAGS += -DHAVE_GETHRTIME -endif - -OTHER_INCLUDES += -I$(LAUNCHER_SHARE_SRC)/bin -I$(LAUNCHER_PLATFORM_SRC)/bin -ifeq ($(PLATFORM), macosx) - OTHER_INCLUDES += -I$(LAUNCHER_SOLARIS_PLATFORM_SRC)/bin - ifneq ($(SYSTEM_ZLIB), true) - OTHER_INCLUDES += -I$(SHARE_SRC)/native/java/util/zip/zlib-1.1.3 - endif -else - OTHER_INCLUDES += -I$(SHARE_SRC)/native/java/util/zip/zlib-1.1.3 -endif - -OTHER_CPPFLAGS += -DPROGNAME='"$(PROGRAM)"' -VERSION_DEFINES += -DFULL_VERSION='"$(FULL_VERSION)"' - -VERSION_DEFINES += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \ - -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' - - - -$(OBJDIR)/main.$(OBJECT_SUFFIX): $(LAUNCHER_SHARE_SRC)/bin/main.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$(OBJDIR)/main.$(OBJECT_SUFFIX) \ - $(VERSION_DEFINES) $< - -# -# Default dependencies -# - -all: build - -build: program - -debug: - $(MAKE) VARIANT=DBG build - -fastdebug: - $(MAKE) VARIANT=DBG FASTDEBUG=true build - -.PHONY: all build program clean clobber debug fastdebug diff --git a/jdk/makefiles/common/Release-embedded.gmk b/jdk/makefiles/common/Release-embedded.gmk deleted file mode 100644 index d5d709fd3b4..00000000000 --- a/jdk/makefiles/common/Release-embedded.gmk +++ /dev/null @@ -1,230 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# SE-Embedded Reduced JRE targets -# -ifdef JAVASE_EMBEDDED - -reduced-image-jre reduced-headless-image-jre :: - @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..." - -# Add the reduced-jre images as pre-reqs. These will be processed last -images:: reduced-image-jre reduced-headless-image-jre - - -###################################################### -# Create the headless rt.jar -###################################################### - -NOT_HEADLESS_RT_JAR_LIST = $(ABS_TEMPDIR)/not_hl_rt_jar.list -HEADLESS_RT_JAR_FILELIST=$(JARFILELISTS_TEMPDIR)/hl_rt_jar_list -TOTAL_HEADLESS_JAR_FILELIST=$(REORDER_TEMPDIR)/hl_file_list -HEADLESS_CLASSLIST=$(ABS_TEMPDIR)/headless_classlist - -# Add the jar file directories that we don't want in the -# headless JRE. If you want to remove most classes in a -# directory, put the directory in the NOT_HEADLESS_RT_JAR_LIST -# and put the individual classes you want to keep in the -# HEADLESS_CLASSLIST file. -$(NOT_HEADLESS_RT_JAR_LIST): $(NOT_RT_JAR_LIST) - $(RM) $(HEADLESS_CLASSLIST) - $(RM) $(NOT_HEADLESS_RT_JAR_LIST) - $(CP) $(NOT_RT_JAR_LIST) $(NOT_HEADLESS_RT_JAR_LIST) -# List all the packages to be excluded - $(ECHO) "sun/awt/motif/" >> $@ - $(ECHO) "sun/awt/X11/" >> $@ - $(ECHO) "sun/applet/" >> $@ - $(ECHO) "sun/java2d/opengl/" >> $@ - $(ECHO) "com/sun/java/swing/plaf/" >> $@ -# List all the individual classes to be included - $(ECHO) "sun/awt/motif/MFontConfiguration.class" >$(HEADLESS_CLASSLIST) - $(ECHO) "sun/applet/AppContextCreator.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/applet/AppletAudioClip.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/java2d/opengl/GLXSurfaceData.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/java2d/opengl/GLXSurfaceData"\$$"GLXOffScreenSurfaceData.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/java2d/opengl/GLXVolatileSurfaceManager.class" >>$(HEADLESS_CLASSLIST) - $(ECHO) "sun/java2d/opengl/OGLSurfaceData.class" >>$(HEADLESS_CLASSLIST) - - -$(TOTAL_HEADLESS_JAR_FILELIST): $(JARREORDER_JARFILE) $(NOT_HEADLESS_RT_JAR_LIST) - $(prep-target) - $(RM) $@.temp - $(CD) $(CLASSBINDIR) ; \ - $(BOOT_JAVA_CMD) -jar $(JARREORDER_JARFILE) \ - -o $@.temp - $(NOT_HEADLESS_RT_JAR_LIST) . -# Add on the explicitly included class files from the otherwise excluded packages - $(CAT) $(HEADLESS_CLASSLIST) >> $@.temp - $(MV) $@.temp $@ - @$(CD) $(CLASSBINDIR); $(java-vm-cleanup) - -# Create the headless rt.jar file list & non-class files list -MakeHeadlessJarFileList: $(TOTAL_HEADLESS_JAR_FILELIST) $(JARSPLIT_JARFILE) - @$(RM) $(HEADLESS_RT_JAR_FILELIST) $(RES_JAR_FILELIST) - $(BOOT_JAVA_CMD) -jar $(JARSPLIT_JARFILE) $(TOTAL_HEADLESS_JAR_FILELIST) \ - -o $(HEADLESS_RT_JAR_FILELIST) $(RES_JAR_FILELIST) - @$(java-vm-cleanup) - -# Create headless rt.jar -HL_RT_JAR=$(ABS_TEMPDIR)/rt-hl-orig.jar -$(HL_RT_JAR): MakeHeadlessJarFileList $(RT_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) ; \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(RT_JAR_MANIFEST_FILE) $@ @$(HEADLESS_RT_JAR_FILELIST) \ - $(JAR_JFLAGS) - @$(CD) $(CLASSBINDIR); $(java-vm-cleanup) - - -# -# Produce a reduced Headful JRE for Embedded Devices -# -# The deployment binaries are added during the deployment build process -# - -# Binaries that don't get included in reduced jre image bin directory -NOT_REDUCEDJRE_BIN = \ - java_vm \ - kinit \ - klist \ - ktab \ - orbd \ - policytool \ - rmid \ - rmiregistry \ - servertool \ - tnameserv \ - pack200 \ - unpack200 - -# jars/resources/libs that don't get included in reduced jre image lib directory -NOT_REDUCEDJRE_LIB = \ - charsets.jar \ - ext/dnsns.jar \ - ext/localedata.jar \ - $(LIBARCH)/client/classes.jsa \ - $(LIBARCH)/libjavaplugin_jni.so \ - $(LIBARCH)/libjavaplugin_nscp_gcc29.so \ - $(LIBARCH)/libjavaplugin_nscp.so \ - $(LIBARCH)/libjavaplugin_oji.so - -# JRE docs that don't get included in reduced jre image top directory -NOT_REDUCEDJRE_DOC = \ - Welcome.html - -reduced-image-jre:: - @$(ECHO) Starting to Produce Reduced JRE - @# - @# First make a copy of the full JRE - @# - $(RM) -r $(JRE_REDUCED_IMAGE_DIR) - $(MKDIR) -p $(JRE_REDUCED_IMAGE_DIR) - $(CD) $(JRE_IMAGE_DIR); \ - $(TAR) cf - . | ($(CD) $(JRE_REDUCED_IMAGE_DIR); $(TAR) xf - ); - - @# - @# Remove all of the files that are not needed for the - @# reduced JRE - @# - for l in $(NOT_REDUCEDJRE_BIN) ; do \ - $(RM) $(JRE_REDUCED_IMAGE_DIR)/bin/$$l ; \ - done - for l in $(NOT_REDUCEDJRE_LIB) ; do \ - $(RM) $(JRE_REDUCED_IMAGE_DIR)/lib/$$l ; \ - done - for l in $(NOT_REDUCEDJRE_DOC) ; do \ - $(RM) $(JRE_REDUCED_IMAGE_DIR)/$$l ; \ - done - - @# Remove misc. other files - $(RM) -r $(JRE_REDUCED_IMAGE_DIR)/man - $(RM) -f $(JRE_REDUCED_IMAGE_DIR)/CHANGES - - @$(ECHO) Done Creating Reduced JRE - -# -# Produce a reduced Headless JRE -# -reduced-headless-image-jre:: $(RT_JAR) $(RESOURCES_JAR) $(BUILD_META_INDEX) $(HL_RT_JAR) - @$(ECHO) Starting to Produce Reduced Headless JRE - @# - @# First make a copy of the reduced JRE we just built - @# - $(RM) -r $(JRE_REDUCED_HEADLESS_IMAGE_DIR) - $(MKDIR) -p $(JRE_REDUCED_HEADLESS_IMAGE_DIR) - $(CD) $(JRE_REDUCED_IMAGE_DIR); \ - $(TAR) cf - . | ($(CD) $(JRE_REDUCED_HEADLESS_IMAGE_DIR); $(TAR) xf - ); - - @# Replace the full rt.jar with the headless rt.jar - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/rt.jar - $(CP) $(HL_RT_JAR) $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/rt.jar - - @# - @# Remove all of the files that are not needed for the - @# reduced Headless JRE - @# - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/gtkhelper - $(RM) $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/libjsoundalsa.so - $(RM) -r $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/audio - $(RM) -fr $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/applet - $(RM) $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/awt_robot - $(RM) $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/libawt_xawt.so - $(RM) -r $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/$(LIBARCH)/libsplashscreen.so - @# Remove oblique fonts and reduce font support to LucidaSansRegular only - $(RM) -fr $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/oblique-fonts - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaBrightDemiBold.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaBrightDemiItalic.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaBrightItalic.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaBrightRegular.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaSansDemiBold.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaTypewriterBold.ttf - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/LucidaTypewriterRegular.ttf - -ifeq ($(PLATFORM), linux) -# put out minimal fonts.dir file for the remaining font - $(RM) -f $(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) 6>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-1">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-2">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-4">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-5">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-7">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - $(ECHO) "LucidaSansRegular.ttf -b&h-lucidasans-medium-r-normal-sans-0-0-0-0-p-0-iso8859-9">>$(JRE_REDUCED_HEADLESS_IMAGE_DIR)/lib/fonts/fonts.dir - -endif # Linux - - @# - @# all done with JRE reduced headless image - @# - - @$(ECHO) Done Creating Reduced Headless JRE - -images-clobber:: - $(RM) -r $(JRE_REDUCED_IMAGE_DIR) - $(RM) -r $(JRE_REDUCED_HEADLESS_IMAGE_DIR) - -.PHONY: reduced-image-jre reduced-headless-image-jre - -endif # JAVASE_EMBEDDED - diff --git a/jdk/makefiles/common/Release-macosx.gmk b/jdk/makefiles/common/Release-macosx.gmk deleted file mode 100644 index f56370f3ca1..00000000000 --- a/jdk/makefiles/common/Release-macosx.gmk +++ /dev/null @@ -1,75 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -MANBASEDIRS=$(JDK_TOPDIR)/src/bsd/doc $(IMPORTDOCDIR) -MAN1SUBDIR = man -JA_DIRNAME=ja_JP.UTF-8 - -# Defines the release targets for Mac OS X build products - -JDK_BUNDLE_DIR = $(ABS_OUTPUTDIR)/j2sdk-bundle/jdk$(JDK_VERSION).jdk/Contents -JRE_BUNDLE_DIR = $(ABS_OUTPUTDIR)/j2re-bundle/jre$(JDK_VERSION).jre/Contents - -MACOSX_SRC = $(JDK_TOPDIR)/src/macosx - -BUNDLE_ID ?= net.java.openjdk -BUNDLE_ID_JRE ?= $(BUNDLE_ID).jre -BUNDLE_ID_JDK ?= $(BUNDLE_ID).jdk - -BUNDLE_NAME ?= OpenJDK $(JDK_MINOR_VERSION) -BUNDLE_NAME_JRE ?= $(BUNDLE_NAME) -BUNDLE_NAME_JDK ?= $(BUNDLE_NAME) - -BUNDLE_INFO ?= OpenJDK ($(JDK_VERSION)) -BUNDLE_INFO_JRE ?= $(BUNDLE_INFO) -BUNDLE_INFO_JDK ?= $(BUNDLE_INFO) - -BUNDLE_PLATFORM_VERSION ?= $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION) -BUNDLE_VERSION ?= $(JDK_VERSION) -BUNDLE_VENDOR ?= UNDEFINED - -jre-bundle-setup: - $(RM) -r $(JRE_BUNDLE_DIR) - -jdk-bundle-setup: - $(RM) -r $(JDK_BUNDLE_DIR) - -jre-bundle-files: - $(MKDIR) -p $(JRE_BUNDLE_DIR)/MacOS - ln -s ../Home/lib/jli/libjli.dylib $(JRE_BUNDLE_DIR)/MacOS/ - $(CP) -r $(JRE_IMAGE_DIR) $(JRE_BUNDLE_DIR)/Home - $(SED) -e "s/@@ID@@/$(BUNDLE_ID_JRE)/g" -e "s/@@NAME@@/$(BUNDLE_NAME_JRE)/g" -e "s/@@INFO@@/$(BUNDLE_INFO_JRE)/g" -e "s/@@PLATFORM_VERSION@@/$(BUNDLE_PLATFORM_VERSION)/g" -e "s/@@VERSION@@/$(BUNDLE_VERSION)/g" -e "s/@@VENDOR@@/$(BUNDLE_VENDOR)/g" < $(MACOSX_SRC)/bundle/JRE-Info.plist > $(JRE_BUNDLE_DIR)/Info.plist - /usr/bin/SetFile -a B $(JRE_BUNDLE_DIR)/../ - -jdk-bundle-files: - $(MKDIR) -p $(JDK_BUNDLE_DIR)/MacOS - ln -s ../Home/jre/lib/jli/libjli.dylib $(JDK_BUNDLE_DIR)/MacOS/ - $(CP) -r $(JDK_IMAGE_DIR) $(JDK_BUNDLE_DIR)/Home - $(SED) -e "s/@@ID@@/$(BUNDLE_ID_JDK)/g" -e "s/@@NAME@@/$(BUNDLE_NAME_JDK)/g" -e "s/@@INFO@@/$(BUNDLE_INFO_JDK)/g" -e "s/@@PLATFORM_VERSION@@/$(BUNDLE_PLATFORM_VERSION)/g" -e "s/@@VERSION@@/$(BUNDLE_VERSION)/g" -e "s/@@VENDOR@@/$(BUNDLE_VENDOR)/g" < $(MACOSX_SRC)/bundle/JDK-Info.plist > $(JDK_BUNDLE_DIR)/Info.plist - /usr/bin/SetFile -a B $(JDK_BUNDLE_DIR)/../ - -EXTRA_IMAGE_TARGETS += jre-bundle-setup jdk-bundle-setup jre-bundle-files jdk-bundle-files - -.PHONY: $(EXTRA_JRE_TARGETS) $(EXTRA_IMAGE_TARGETS) diff --git a/jdk/makefiles/common/Release.gmk b/jdk/makefiles/common/Release.gmk deleted file mode 100644 index 74c84cb4712..00000000000 --- a/jdk/makefiles/common/Release.gmk +++ /dev/null @@ -1,1401 +0,0 @@ -# -# Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -include $(JDK_TOPDIR)/makefiles/docs/CORE_PKGS.gmk -include $(JDK_TOPDIR)/makefiles/docs/NON_CORE_PKGS.gmk -include $(JDK_TOPDIR)/makefiles/Tools.gmk - -# What jdk version are we building -THIS_JDK_VERSION := $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION) - -# -# Perform release engineering tasks. -# -# images An image is what the product looks like when it is -# installed. -# - -IMAGE_BINDIR = bin - -# The compiler should not issue a "Proprietary" warning when compiling -# classes in the com.sun.java.swing.plaf packages, since we've always -# allowed, and even advocated, extending them (see bug 6476749). -# -# This approach is NOT to be used as a general purpose way to avoid such -# compiler warnings for non-core packages. The correct way is to document -# the packages in NON_CORE_PKGS.gmk, and include them in the NON_CORE_PKGS -# definition. -# -# Swing has taken this approach only as a temporary measure to avoid -# the compiler warnings until we can properly document these packages. -# This is covered under 6491853. -EXCLUDE_PROPWARN_PKGS = com.sun.java.swing.plaf.windows \ - com.sun.java.swing.plaf.motif \ - com.sun.java.swing.plaf.gtk - -# -# Include the exported private packages in ct.sym. -# This is an interim solution until the ct.sym is replaced -# with a new module system (being discussed for JDK 8). -# -EXPORTED_PRIVATE_PKGS = com.sun.servicetag \ - com.oracle.net \ - com.oracle.nio - -# 64-bit solaris has a few special cases. We define the variable -# SOLARIS64 for use in this Makefile to easily test those cases -ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 64) - SOLARIS64 = true - IMAGE_BINDIR = bin/$(ARCH) - endif -endif - -JTG_DOCS = $(JDK_TOPDIR)/src/solaris/doc - -ifeq ($(PLATFORM), macosx) - include $(JDK_TOPDIR)/make/common/Release-$(PLATFORM).gmk -endif - -# The base names of all the license and document files for the jdk and jre -# (These files get placed in the jdk and jre install images) -ifdef OPENJDK - # Where to find these files - SHARE_JDK_DOC_SRC = $(JDK_TOPDIR) - SHARE_JRE_DOC_SRC = $(JDK_TOPDIR) - # Same files for jdk and jre, no name changes - IMAGE_DOCLIST_JDK = LICENSE ASSEMBLY_EXCEPTION THIRD_PARTY_README - IMAGE_DOCLIST_JDK_DEMOS_AND_SAMPLES = - IMAGE_DOCLIST_JRE = LICENSE ASSEMBLY_EXCEPTION THIRD_PARTY_README -else - # make/closed/common/Defs.gmk for closed location of SHARE_JDK_DOC_SRC - - IMAGE_DOCLIST_JDK = COPYRIGHT README.html LICENSE THIRDPARTYLICENSEREADME.txt - IMAGE_DOCLIST_JDK_DEMOS_AND_SAMPLES = demo/DEMOS_LICENSE sample/SAMPLES_LICENSE - IMAGE_DOCLIST_JRE = COPYRIGHT Welcome.html LICENSE THIRDPARTYLICENSEREADME.txt - ifeq ($(PLATFORM), windows) - IMAGE_DOCLIST_JRE += README.txt - else - IMAGE_DOCLIST_JRE += README - endif -endif - -# Paths to these files we need -JDK_DOCFILES = $(IMAGE_DOCLIST_JDK:%=$(JDK_IMAGE_DIR)/%) -JRE_DOCFILES = $(IMAGE_DOCLIST_JRE:%=$(JRE_IMAGE_DIR)/%) -JDK_DEMOS_AND_SAMPLES_DOCFILES = $(IMAGE_DOCLIST_JDK_DEMOS_AND_SAMPLES:%=$(JDK_IMAGE_DIR)/%) - -# absolute directory names: note, these must exist prior to build -# time - they are created in the main Makefile. -JRE_IMAGE_BINDIR = $(JRE_IMAGE_DIR)/bin - -MAINMANIFEST = $(JDK_TOPDIR)/make/tools/manifest.mf -BEANMANIFEST = $(JDK_TOPDIR)/make/javax/swing/beaninfo/manifest - -# -# Man pages -# - -JRE_MAN_PAGES = \ - java.1 \ - keytool.1 \ - orbd.1 \ - pack200.1 \ - policytool.1 \ - rmid.1 \ - rmiregistry.1 \ - servertool.1 \ - tnameserv.1 \ - unpack200.1 - -ifndef OPENJDK - JRE_MAN_PAGES += javaws.1 -endif - -JDK_MAN_PAGES = \ - $(JRE_MAN_PAGES) \ - appletviewer.1 \ - extcheck.1 \ - idlj.1 \ - jar.1 \ - jarsigner.1 \ - javac.1 \ - javadoc.1 \ - javah.1 \ - javap.1 \ - jconsole.1 \ - jdb.1 \ - jhat.1 \ - jinfo.1 \ - jmap.1 \ - jps.1 \ - jrunscript.1 \ - jsadebugd.1 \ - jstack.1 \ - jstat.1 \ - jstatd.1 \ - native2ascii.1 \ - rmic.1 \ - schemagen.1 \ - serialver.1 \ - wsgen.1 \ - wsimport.1 \ - xjc.1 - -ifeq ($(PLATFORM), solaris) - MANBASEDIRS=$(JDK_TOPDIR)/src/solaris/doc $(IMPORTDOCDIR) - MAN1SUBDIR=sun/man/man1 -endif # solaris - -ifeq ($(PLATFORM), linux) - MANBASEDIRS=$(JDK_TOPDIR)/src/linux/doc $(IMPORTDOCDIR) - MAN1SUBDIR=man - JA_DIRNAME=ja_JP.UTF-8 -endif # linux - -define copy-man-pages -$(MKDIR) -p $1/man/man1 -for manbase in $(MANBASEDIRS:%=%/$(MAN1SUBDIR)) ; do \ - for manpage in $2; do \ - if [ -f $${manbase}/$${manpage} ] ; then \ - $(CP) $${manbase}/$${manpage} $1/man/man1 ; \ - for ja_encoding in $(JA_TARGET_ENCODINGS); do \ - ja_dir="ja"; \ - if [ "$${ja_encoding}" != "$(JA_SOURCE_ENCODING)" ]; then \ - ja_dir="ja_JP.$${ja_encoding}"; \ - fi; \ - $(MKDIR) -p $1/man/$${ja_dir}/man1; \ - $(CAT) $${manbase}/ja/$${manpage} \ - | $(NATIVE2ASCII) -encoding $(JA_SOURCE_ENCODING) \ - | $(SED) 's/@@VERSION@@/$(THIS_JDK_VERSION)/g' \ - | $(NATIVE2ASCII) -reverse -encoding $${ja_encoding} \ - > $1/man/$${ja_dir}/man1/$${manpage}; \ - done; \ - fi; \ - done; \ -done -$(java-vm-cleanup) -if [ "$(JA_DIRNAME)" != "" ] ; then \ - $(CD) $1/man && $(RM) ja && $(LN) -s $(JA_DIRNAME) ja; \ -fi -endef - - -# no compression unless requested -ifndef COMPRESS_JARS - CREATE_JAR_OPTS = c0mf - CREATE_JAR_OPTS_NOMANIFEST = c0f -else - CREATE_JAR_OPTS = cmf - CREATE_JAR_OPTS_NOMANIFEST = cf -endif - -# -# Targets. -# -INITIAL_IMAGE_JRE=initial-image-jre -INITIAL_IMAGE_JDK=initial-image-jdk -ifeq ($(PLATFORM), solaris) - ifeq ($(ARCH_DATA_MODEL), 64) - INITIAL_IMAGE_JRE=initial-image-jre-sol64 - INITIAL_IMAGE_JDK=initial-image-jdk-sol64 - endif -endif - -images images-clobber \ -initial-image-jre initial-image-jdk \ -initial-image-jre-sol64 initial-image-jdk-sol64 \ -trim-image-jre trim-image-jdk \ -identify-image-jre identify-image-jdk \ -process-image-jre process-image-jdk \ -sec-files sec-files-win jgss-files :: - $(ECHO) ">>>Making "$@" @ `$(DATE)` ..." - -install: images - -# Order is important here, trim jre after jdk image is created -ifeq ($(PLATFORM), macosx) - -images:: $(INITIAL_IMAGE_JRE) $(EXTRA_JRE_TARGETS) $(INITIAL_IMAGE_JDK) \ - trim-image-jre trim-image-jdk \ - identify-image-jre identify-image-jdk \ - process-image-jre process-image-jdk sec-files sec-files-win jgss-files \ - $(EXTRA_IMAGE_TARGETS) -else - -images:: $(INITIAL_IMAGE_JRE) $(INITIAL_IMAGE_JDK) \ - trim-image-jre trim-image-jdk \ - identify-image-jre identify-image-jdk \ - process-image-jre process-image-jdk sec-files sec-files-win jgss-files -endif - -# Don't use these -image-jre:: initial-image-jre trim-image-jre identify-image-jre process-image-jre -image-jdk:: initial-image-jdk trim-image-jdk identify-image-jdk process-image-jdk - -# -# Sources we ship in the SDK. -# -SOURCES = \ - java/applet \ - java/awt \ - java/beans \ - java/io \ - java/lang \ - java/math \ - java/net \ - java/nio \ - java/rmi \ - java/security \ - java/sql \ - java/text \ - java/util \ - com/sun/corba \ - com/sun/image/codec/jpeg \ - com/sun/imageio \ - com/sun/java/swing \ - com/sun/javadoc \ - com/sun/jmx \ - com/sun/source \ - com/sun/naming \ - com/sun/security/auth \ - com/sun/security/jgss \ - javax/accessibility \ - javax/annotation \ - javax/script \ - javax/imageio \ - javax/lang \ - javax/management \ - javax/naming \ - javax/print \ - javax/rmi \ - javax/security \ - javax/sound \ - javax/sql \ - javax/swing \ - javax/tools \ - javax/xml \ - com/sun/org/apache \ - com/sun/java_cup \ - com/sun/jlex \ - org/ietf \ - org/omg \ - org/w3c/dom \ - org/xml/sax \ - sunw -# -# Directories where sources may be found. If a file with the same path -# name exists in more than one of these places, the one found last on this -# list wins. -# -SOURCE_DIRS = $(SHARE_SRC)/classes $(PLATFORM_SRC)/classes -SOURCE_DIRS += $(GENSRCDIR) -SOURCE_DIRS += $(IMPORTSRCDIR) -SOURCE_DIRS += $(JDK_OUTPUTDIR)/gendocsrc_rmic -ifndef OPENJDK - SOURCE_DIRS += $(CLOSED_SRC)/share/classes -endif - - -# -# Specific files and directories that will be filtered out from above areas. -# -SOURCE_FILTERs = $(SCM_DIRs) ',*' -SOURCE_FILES_filter = $(SOURCE_FILTERs:%=-name % -prune -o) - -# -# Bug 4249883 - excluding some unnecessary packages from com.sun.tools -# -# Bug 5008685 - exclude jconsole from sun/tools -# -TOOLS = \ - META-INF/services/com.sun.jdi.connect.Connector \ - META-INF/services/com.sun.jdi.connect.spi.TransportService \ - sun/tools/asm \ - sun/tools/jar \ - sun/tools/java \ - sun/tools/javac \ - sun/tools/jcmd \ - sun/tools/jps \ - sun/tools/jstat \ - sun/tools/jstatd \ - sun/tools/native2ascii \ - sun/tools/serialver \ - sun/tools/tree \ - sun/tools/util \ - sun/security/tools/JarBASE64Encoder.class \ - sun/security/tools/JarSigner.class \ - sun/security/tools/JarSignerParameters.class \ - sun/security/tools/JarSignerResources.class \ - sun/security/tools/JarSignerResources_ja.class \ - sun/security/tools/JarSignerResources_zh_CN.class \ - sun/security/tools/SignatureFile\$$Block.class \ - sun/security/tools/SignatureFile.class \ - sun/security/tools/TimestampedSigner.class \ - sun/rmi/rmic \ - sun/applet \ - sun/jvmstat \ - com/sun/javadoc \ - com/sun/jdi \ - com/sun/jarsigner \ - com/sun/source \ - com/sun/tools/classfile \ - com/sun/tools/doclets \ - com/sun/tools/example/debug/expr \ - com/sun/tools/example/debug/tty \ - com/sun/tools/extcheck \ - com/sun/tools/hat \ - com/sun/tools/javac \ - com/sun/tools/javadoc \ - com/sun/tools/javah \ - com/sun/tools/javap \ - com/sun/tools/corba \ - com/sun/tools/internal/xjc \ - com/sun/tools/internal/ws \ - META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \ - META-INF/services/com.sun.tools.internal.xjc.Plugin \ - com/sun/istack/internal/tools \ - com/sun/tools/internal/jxc/ap \ - com/sun/tools/internal/ws/wscompile/plugin/at_generated \ - com/sun/codemodel \ - com/sun/tools/internal/jxc \ - com/sun/xml/internal/rngom \ - com/sun/xml/internal/xsom \ - org/relaxng/datatype \ - com/sun/xml/internal/dtdparser \ - com/sun/tools/jdi \ - com/sun/tools/script/shell \ - META-INF/services/com.sun.tools.attach.spi.AttachProvider \ - com/sun/tools/attach \ - sun/tools/attach \ - sun/tools/jstack \ - sun/tools/jinfo \ - sun/tools/jmap - -# classes that go into jfr.jar -JFR_CLASSES_DIRS= \ - com/oracle/jrockit/jfr \ - oracle/jrockit/jfr - -# classes that go into jsse.jar -JSSE_CLASSES_DIRS = \ - sun/security/provider/Sun.class \ - sun/security/rsa/SunRsaSign.class \ - sun/security/ssl \ - com/sun/net/ssl/internal/ssl - -# classes that go into dnsns.jar -DNS_CLASSES_DIRS = \ - sun/net/spi/nameservice/dns \ - META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor - -# classes and files that go into localedata.jar -LOCALEDATA_JAR_DIRS = \ - sun/text/resources/*_ar* \ - sun/text/resources/*_hi* \ - sun/text/resources/*_iw* \ - sun/text/resources/*_iw* \ - sun/text/resources/*_ja* \ - sun/text/resources/*_ko* \ - sun/text/resources/*_th.* \ - sun/text/resources/*_th_* \ - sun/text/resources/*_vi* \ - sun/text/resources/*_zh* \ - sun/text/resources/*Data_th \ - sun/text/resources/thai_dict \ - sun/util/resources/*_ar* \ - sun/util/resources/*_hi* \ - sun/util/resources/*_iw* \ - sun/util/resources/*_iw* \ - sun/util/resources/*_ja* \ - sun/util/resources/*_ko* \ - sun/util/resources/*_th_* \ - sun/util/resources/*_th.* \ - sun/util/resources/*_vi* \ - sun/util/resources/*_zh* - -LOCALEDATA_JAR_FILES = $(foreach i,$(LOCALEDATA_JAR_DIRS), $(wildcard $(CLASSBINDIR)/$i)) - -# files under $(OUTPUTDIR) that need to go into sec-bin.zip for builds -# where the corresponding sources are not available -SEC_FILES_DIRS = \ - classes/javax/net \ - classes/javax/security/cert \ - classes/com/sun/net/ssl \ - classes/com/sun/security/cert \ - classes/sun/net/www/protocol/https \ - classes/sun/security/pkcs12 \ - classes/sun/security/ssl \ - classes/sun/security/krb5/*.class \ - classes/sun/security/krb5/internal/*.class \ - classes/sun/security/krb5/internal/ccache \ - classes/sun/security/krb5/internal/crypto \ - classes/sun/security/krb5/internal/ktab \ - classes/sun/security/krb5/internal/rcache \ - classes/sun/security/krb5/internal/util \ - classes/sun/security/jgss/spi/GSSContextSpi.class - -# files under $(OUTPUTDIR) that need to go into sec-windows-win.zip for builds -# where the corresponding sources are not available -SEC_FILES_WIN_DIRS = \ - classes/sun/security/krb5/internal/tools - -# files under $(BINDIR) that need to go into jgss_files.zip for builds -# where the corresponding sources are not available -JGSS_FILES_DIRS = \ - bin/w2k_lsa_auth.dll \ - bin/w2k_lsa_auth.map \ - bin/w2k_lsa_auth.pdb - -# The following get removed from the SDK image. -NOTJDKTOOLS = \ - java_vm - -# The following get removed from the JRE after the bulk-copy of BINDIR... -NOTJRETOOLS = \ - appletviewer$(EXE_SUFFIX) \ - extcheck$(EXE_SUFFIX) \ - idlj$(EXE_SUFFIX) \ - jar$(EXE_SUFFIX) \ - jarsigner$(EXE_SUFFIX) \ - java-rmi.cgi \ - javac$(EXE_SUFFIX) \ - javadoc$(EXE_SUFFIX) \ - javah$(EXE_SUFFIX) \ - javap$(EXE_SUFFIX) \ - jcmd$(EXE_SUFFIX) \ - jdb$(EXE_SUFFIX) \ - jps$(EXE_SUFFIX) \ - jrunscript$(EXE_SUFFIX) \ - jstat$(EXE_SUFFIX) \ - jstatd$(EXE_SUFFIX) \ - jstack$(EXE_SUFFIX) \ - packagebean$(SCRIPT_SUFFIX) \ - rmic$(EXE_SUFFIX) \ - serialver$(EXE_SUFFIX) \ - unregbean$(EXE_SUFFIX) \ - jconsole$(EXE_SUFFIX) \ - jinfo$(EXE_SUFFIX) \ - jmap$(EXE_SUFFIX) \ - native2ascii$(EXE_SUFFIX) \ - xjc$(EXE_SUFFIX) \ - wsgen$(EXE_SUFFIX) \ - wsimport$(EXE_SUFFIX) \ - schemagen$(EXE_SUFFIX) \ - jsadebugd$(EXE_SUFFIX) \ - jhat$(EXE_SUFFIX) - -# The following get removed from the JRE after the bulk-copy of LIBDIR... -NOTJRELIBS = tools.jar \ - jconsole.jar \ - dt.jar - -ifeq ($(INCLUDE_SA), true) - NOTJRELIBS += sa-jdi.jar - - # The following get removed from the JRE after the bulk-copy of LIBDIR... - NOTJRE_SHARED_LIBS = $(SALIB_NAME) -else - NOTJRE_SHARED_LIBS = -endif - -# Attach library is JDK only -NOTJRE_SHARED_LIBS += $(LIB_PREFIX)attach.$(LIBRARY_SUFFIX) - -# -###### RULES - -# Processing license files from source area to image area -# These will be modified to have the platform specific EOL chars. -define process-doc-file -$(prep-target) -$(SED) 's/$$//g' $< > $@ -$(CHMOD) 444 $@ -endef - -# JDK files -$(JDK_IMAGE_DIR)/%: $(SHARE_JDK_DOC_SRC)/% - $(process-doc-file) - -$(JDK_IMAGE_DIR)/demo/DEMOS_LICENSE: $(SHARE_JDK_DOC_SRC)/DEMOS_LICENSE - $(process-doc-file) - -$(JDK_IMAGE_DIR)/sample/SAMPLES_LICENSE: $(SHARE_JDK_DOC_SRC)/SAMPLES_LICENSE - $(process-doc-file) - -# JRE files -$(JRE_IMAGE_DIR)/%: $(SHARE_JRE_DOC_SRC)/% - $(process-doc-file) -ifeq ($(PLATFORM), windows) -$(JRE_IMAGE_DIR)/README.txt: $(SHARE_JRE_DOC_SRC)/README - $(process-doc-file) -endif - - -###################################################### -# List of directories in classes directory that should NOT be in rt.jar -###################################################### - -NOT_RT_JAR_LIST = $(IMAGES_OUTPUTDIR)/tmp/not_rt_jar.list - -$(NOT_RT_JAR_LIST): FRC - $(prep-target) - $(ECHO) "#\n" >> $@ - $(ECHO) "# List of subdirectories not in include in rt.jar" >> $@ - $(ECHO) "# Directories must contain trailing '/'." >> $@ - $(ECHO) "com/sun/javadoc/" >> $@ - $(ECHO) "com/sun/jdi/" >> $@ - $(ECHO) "com/sun/jarsigner/" >> $@ - $(ECHO) "com/sun/source/" >> $@ - $(ECHO) "com/sun/istack/internal/tools/" >> $@ - $(ECHO) "META-INF/services/com.sun.jdi.connect.Connector" >> $@ - $(ECHO) "META-INF/services/com.sun.jdi.connect.spi.TransportService" >> $@ - $(ECHO) "META-INF/services/com.sun.tools.xjc.Plugin" >> $@ - $(ECHO) "com/sun/tools/" >> $@ - $(ECHO) "sun/jvmstat/" >> $@ - $(ECHO) "sun/nio/cs/ext/" >> $@ - $(ECHO) "sun/awt/HKSCS.class" >> $@ - $(ECHO) "sun/awt/motif/X11GB2312\$$Decoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11GB2312\$$Encoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11GB2312.class" >> $@ - $(ECHO) "sun/awt/motif/X11GBK\$$Encoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11GBK.class" >> $@ - $(ECHO) "sun/awt/motif/X11KSC5601\$$Decoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11KSC5601\$$Encoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11KSC5601.class" >> $@ - $(ECHO) "META-INF/services/java.nio.charset.spi.CharsetProvider" >> $@ - $(ECHO) "sun/rmi/rmic/" >> $@ - $(ECHO) "sun/tools/asm/" >> $@ - $(ECHO) "sun/tools/java/" >> $@ - $(ECHO) "sun/tools/javac/" >> $@ - $(ECHO) "com/sun/tools/classfile/" >> $@ - $(ECHO) "com/sun/tools/javap/" >> $@ - $(ECHO) "sun/tools/jcmd/" >> $@ - $(ECHO) "sun/tools/jconsole/" >> $@ - $(ECHO) "sun/tools/jps/" >> $@ - $(ECHO) "sun/tools/jstat/" >> $@ - $(ECHO) "sun/tools/jstatd/" >> $@ - $(ECHO) "sun/tools/native2ascii/" >> $@ - $(ECHO) "sun/tools/serialver/" >> $@ - $(ECHO) "sun/tools/tree/" >> $@ - $(ECHO) "sun/tools/util/" >> $@ - $(ECHO) "sun/security/tools/JarBASE64Encoder.class" >> $@ - $(ECHO) "sun/security/tools/JarSigner.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerParameters.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerResources.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerResources_ja.class" >> $@ - $(ECHO) "sun/security/tools/JarSignerResources_zh_CN.class" >> $@ - $(ECHO) "sun/security/tools/SignatureFile\$$Block.class" >> $@ - $(ECHO) "sun/security/tools/SignatureFile.class" >> $@ - $(ECHO) "sun/security/tools/TimestampedSigner.class" >> $@ - $(ECHO) "sun/security/provider/Sun.class" >> $@ - $(ECHO) "sun/security/rsa/SunRsaSign.class" >> $@ - $(ECHO) "sun/security/ssl/" >> $@ - $(ECHO) "sun/security/pkcs11/" >> $@ - $(ECHO) "sun/security/ec/ECDHKeyAgreement.class" >> $@ - $(ECHO) "sun/security/ec/ECDSASignature.class" >> $@ - $(ECHO) "sun/security/ec/ECKeyPairGenerator.class" >> $@ - $(ECHO) "sun/security/ec/SunEC\$$1.class" >> $@ - $(ECHO) "sun/security/ec/SunEC.class" >> $@ - $(ECHO) "sun/security/ec/SunECEntries.class" >> $@ - $(ECHO) "sun/security/ec/ECDSASignature\$$Raw.class" >> $@ - $(ECHO) "sun/security/ec/ECDSASignature\$$SHA1.class" >> $@ - $(ECHO) "sun/security/ec/ECDSASignature\$$SHA256.class" >> $@ - $(ECHO) "sun/security/ec/ECDSASignature\$$SHA384.class" >> $@ - $(ECHO) "sun/security/ec/ECDSASignature\$$SHA512.class" >> $@ - $(ECHO) "com/sun/net/ssl/internal/ssl/" >> $@ - $(ECHO) "javax/crypto/" >> $@ - $(ECHO) "sun/security/internal/" >> $@ - $(ECHO) "com/sun/crypto/provider/" >> $@ - $(ECHO) "META-INF/services/com.sun.tools.attach.spi.AttachProvider" >> $@ - $(ECHO) "com/sun/tools/attach/" >> $@ - $(ECHO) "org/relaxng/datatype/" >> $@ - $(ECHO) "com/sun/codemodel/" >> $@ - $(ECHO) "com/sun/xml/internal/dtdparser/" >> $@ - $(ECHO) "com/sun/xml/internal/rngom/" >> $@ - $(ECHO) "com/sun/xml/internal/xsom/" >> $@ - $(ECHO) "com/sun/tools/script/shell/" >> $@ - $(ECHO) "sun/tools/attach/" >> $@ - $(ECHO) "sun/tools/jstack/" >> $@ - $(ECHO) "sun/tools/jinfo/" >> $@ - $(ECHO) "sun/tools/jmap/" >> $@ - $(ECHO) "sun/net/spi/nameservice/dns/" >> $@ - $(ECHO) "META-INF/services/sun.net.spi.nameservice.NameServiceDescriptor" >> $@ - $(ECHO) "javax/swing/AbstractButtonBeanInfo.class" >> $@ - $(ECHO) "javax/swing/BoxBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JAppletBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JButtonBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JCheckBoxBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JCheckBoxMenuItemBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JColorChooserBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JComboBoxBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JComponentBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JDesktopPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JDialogBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JEditorPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JFileChooserBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JFormattedTextFieldBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JFrameBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JInternalFrameBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JLabelBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JLayeredPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JListBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JMenuBarBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JMenuBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JMenuItemBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JOptionPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JPanelBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JPasswordFieldBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JPopupMenuBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JProgressBarBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JRadioButtonBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JRadioButtonMenuItemBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JScrollBarBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JScrollPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JSeparatorBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JSliderBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JSpinnerBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JSplitPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JTabbedPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JTableBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JTextAreaBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JTextFieldBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JTextPaneBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JToggleButtonBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JToolBarBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JTreeBeanInfo.class" >> $@ - $(ECHO) "javax/swing/JWindowBeanInfo.class" >> $@ - $(ECHO) "javax/swing/SwingBeanInfoBase.class" >> $@ - $(ECHO) "javax/swing/text/JTextComponentBeanInfo.class" >> $@ - $(ECHO) "sun/swing/BeanInfoUtils.class" >> $@ - $(ECHO) $(patsubst $(CLASSBINDIR)/%,%,$(LOCALEDATA_JAR_FILES)) | $(TR) " " "\n" >> $@ -ifndef OPENJDK -ifndef JAVASE_EMBEDDED - $(ECHO) "com/oracle/jrockit/jfr/" >> $@ - $(ECHO) "com/oracle/jrockit/jfr/client/" >> $@ - $(ECHO) "com/oracle/jrockit/jfr/management/" >> $@ - $(ECHO) "oracle/jrockit/jfr/" >> $@ - $(ECHO) "oracle/jrockit/jfr/events/" >> $@ - $(ECHO) "oracle/jrockit/jfr/openmbean/" >> $@ - $(ECHO) "oracle/jrockit/jfr/parser/" >> $@ - $(ECHO) "oracle/jrockit/jfr/settings/" >> $@ - $(ECHO) "oracle/jrockit/jfr/tools/" >> $@ - $(ECHO) "oracle/jrockit/jfr/util/" >> $@ - $(ECHO) "oracle/jrockit/jfr/util/log/" >> $@ - $(ECHO) "oracle/jrockit/jfr/util/os/" >> $@ - $(ECHO) "oracle/jrockit/jfr/util/text/" >> $@ -endif -endif - (cd $(JDK_OUTPUTDIR)/classes && $(FIND) . -name "_the.*") >> $@ -ifeq ($(PLATFORM), macosx) - $(ECHO) "com/sun/nio/sctp/" >> $@ - $(ECHO) "sun/nio/ch/sctp/" >> $@ - $(ECHO) "sun/jdbc/" >> $@ - $(ECHO) "sun/nio/ch/DevPollArrayWrapper\$$Updator.class" >> $@ - $(ECHO) "sun/nio/ch/DevPollArrayWrapper.class" >> $@ - $(ECHO) "sun/nio/ch/DevPollSelectorImpl.class" >> $@ - $(ECHO) "sun/nio/ch/DevPollSelectorProvider.class" >> $@ - $(ECHO) "sun/nio/ch/EPollArrayWrapper\$$Updator.class" >> $@ - $(ECHO) "sun/nio/ch/EPollArrayWrapper.class" >> $@ - $(ECHO) "sun/nio/ch/EPollSelectorImpl.class" >> $@ - $(ECHO) "sun/nio/ch/EPollSelectorProvider.class" >> $@ -endif - -###################################################### -# List of directories in classes directory that should NOT be in resources.jar -###################################################### - -NOT_RESOURCES_JAR_LIST = $(IMAGES_OUTPUTDIR)/tmp/not_resources_jar.list - -$(NOT_RESOURCES_JAR_LIST): FRC - $(prep-target) - $(ECHO) "#\n" >> $@ - $(ECHO) "# List of subdirectories not in include in resources.jar" >> $@ - $(ECHO) "# Directories must contain trailing '/'." >> $@ - $(ECHO) "javax/swing/beaninfo/" >> $@ - -TOTAL_JAR_EXCLUDE_LIST = $(IMAGES_OUTPUTDIR)/tmp/total_jar_exclude.list - -###################################################### -# Total exclude list -###################################################### - -$(TOTAL_JAR_EXCLUDE_LIST): $(NOT_RT_JAR_LIST) $(NOT_RESOURCES_JAR_LIST) - $(prep-target) - $(ECHO) "#\n" >> $@ - $(ECHO) "# List of subdirectories not in include in resources.jar" >> $@ - $(CAT) $(NOT_RT_JAR_LIST) >>$@ - $(CAT) $(NOT_RESOURCES_JAR_LIST) >>$@ - -# File order list for rt.jar -# - sun.applet is included, till hotjava stops relying on it. -# - sun.tools.jar is included, needs cleanup. -# -REORDER_TEMPDIR=$(IMAGES_OUTPUTDIR)/tmp/reorder -TOTAL_JAR_FILELIST=$(REORDER_TEMPDIR)/file_list - -JARFILELISTS_TEMPDIR=$(IMAGES_OUTPUTDIR)/tmp/jarfilelists -RT_JAR_FILELIST=$(JARFILELISTS_TEMPDIR)/rt_jar_list -RES_JAR_FILELIST=$(JARFILELISTS_TEMPDIR)/resources_jar_list - -$(TOTAL_JAR_FILELIST): $(BUILD_TOOLS) $(TOTAL_JAR_EXCLUDE_LIST) - $(prep-target) - $(RM) $@.temp - ($(CD) $(CLASSBINDIR) && \ - $(TOOL_JARREORDER) \ - -o $@.temp $(ABS_LIBDIR)/classlist $(TOTAL_JAR_EXCLUDE_LIST) . ) - $(MV) $@.temp $@ - ($(CD) $(CLASSBINDIR) && $(java-vm-cleanup)) - -# Create the jfr.jar containing Java Flight Recorder implementation -JFR_JAR= -ifndef OPENJDK -ifndef JAVASE_EMBEDDED -JFR_JAR=$(ABS_TEMPDIR)/jfr-orig.jar -$(JFR_JAR): $(OTHER_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \ - $(JFR_CLASSES_DIRS) $(BOOT_JAR_JFLAGS) - @$(CD) $(CLASSBINDIR) && $(java-vm-cleanup) -endif -endif - -# Create the rt.jar file list & non-class files list - -$(RT_JAR_FILELIST) + $(RES_JAR_FILELIST): \ - $(TOTAL_JAR_FILELIST) $(BUILD_TOOLS) - $(RM) $(RT_JAR_FILELIST) $(RES_JAR_FILELIST) - $(MKDIR) -p $(JARFILELISTS_TEMPDIR) - $(TOOL_JARSPLIT) \ - $(TOTAL_JAR_FILELIST) \ - -o $(RT_JAR_FILELIST) $(RES_JAR_FILELIST) - $(java-vm-cleanup) - -# Create the manifest file. -RT_JAR_MANIFEST_FILE=$(IMAGES_OUTPUTDIR)/tmp/rt_manifest.tmp -$(RT_JAR_MANIFEST_FILE): $(MAINMANIFEST) $(BEANMANIFEST) - $(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ - $(MAINMANIFEST) >> $@ - $(ECHO) >> $@ - $(CAT) $(BEANMANIFEST) >> $@ - -OTHER_JAR_MANIFEST_FILE=$(IMAGES_OUTPUTDIR)/tmp/other_manifest.tmp -$(OTHER_JAR_MANIFEST_FILE): $(MAINMANIFEST) - $(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ - $(MAINMANIFEST) >> $@ - -# Create resources.jar containing non-class files -RESOURCES_JAR=$(IMAGES_OUTPUTDIR)/tmp/resources-orig.jar -$(RESOURCES_JAR): $(RES_JAR_FILELIST) $(OTHER_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \ - @$(RES_JAR_FILELIST) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# Create jsse.jar containing SunJSSE implementation classes -JSSE_JAR=$(IMAGES_OUTPUTDIR)/tmp/jsse-orig.jar -$(JSSE_JAR): $(OTHER_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \ - $(JSSE_CLASSES_DIRS) $(BOOT_JAR_JFLAGS) - @$(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# Create dnsns.jar -# Create without manifest for now to not differ with old buildsystem. -DNS_JAR=$(IMAGES_OUTPUTDIR)/tmp/dns-orig.jar -$(DNS_JAR): $(OTHER_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $@ \ - $(DNS_CLASSES_DIRS) $(BOOT_JAR_JFLAGS) - @$(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# Create localedata.jar containing localedata for non european languages -LOCALEDATA_JAR=$(IMAGES_OUTPUTDIR)/localedata-orig.jar -$(LOCALEDATA_JAR): $(LOCALEDATA_JAR_FILES) - $(prep-target) -# Create without manifest for now to not differ with old buildsystem. -# $(CD) $(CLASSBINDIR) && \ -# $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(OTHER_JAR_MANIFEST_FILE) $@ \ -# $(LOCALEDATA_JAR_DIRS) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $@ \ - $(LOCALEDATA_JAR_DIRS) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# Create sec-bin.zip -SEC_FILES_ZIP=$(IMAGES_OUTPUTDIR)/tmp/sec-bin.zip -sec-files:: - $(prep-target) - $(RM) $(SEC_FILES_ZIP) - $(CD) $(OUTPUTDIR) && \ - $(ZIPEXE) -rq9 $(SEC_FILES_ZIP) $(SEC_FILES_DIRS) - $(java-vm-cleanup) - -# Create sec-windows-bin.zip -SEC_FILES_WIN_ZIP=$(IMAGES_OUTPUTDIR)/tmp/sec-windows-bin.zip -sec-files-win:: -ifeq ($(PLATFORM), windows) - $(prep-target) - $(RM) $(SEC_FILES_WIN_ZIP) - $(CD) $(OUTPUTDIR) && \ - $(ZIPEXE) -rq9 $(SEC_FILES_WIN_ZIP) $(SEC_FILES_WIN_DIRS) - $(java-vm-cleanup) -endif - -# Create JGSS files that contains the native Kerberos library -JGSS_WIN32_FILES_ZIP=$(IMAGES_OUTPUTDIR)/tmp/jgss-windows-i586-bin.zip -JGSS_WIN64_FILES_ZIP=$(IMAGES_OUTPUTDIR)/tmp/jgss-windows-x64-bin.zip -jgss-files:: -ifeq ($(PLATFORM), windows) - $(prep-target) - ifeq ($(ARCH_DATA_MODEL), 32) - $(RM) $(JGSS_WIN32_FILES_ZIP) - $(CD) $(OUTPUTDIR) && \ - $(ZIPEXE) -rq9 $(JGSS_WIN32_FILES_ZIP) $(JGSS_FILES_DIRS) - else - $(RM) $(JGSS_WIN64_FILES_ZIP) - $(CD) $(OUTPUTDIR) && \ - $(ZIPEXE) -rq9 $(JGSS_WIN64_FILES_ZIP) $(JGSS_FILES_DIRS) - endif - $(java-vm-cleanup) -endif - -# Create rt.jar -RT_JAR=$(IMAGES_OUTPUTDIR)/tmp/rt-orig.jar -$(RT_JAR): $(RT_JAR_FILELIST) $(RT_JAR_MANIFEST_FILE) - $(prep-target) - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS) $(RT_JAR_MANIFEST_FILE) $@ \ - @$(RT_JAR_FILELIST) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - -# SE-Embedded targets if enabled -include $(JDK_TOPDIR)/makefiles/common/Release-embedded.gmk - - -###################################################### -# JRE Image -###################################################### - -initial-image-jre-setup: - $(RM) -r $(JRE_IMAGE_DIR) - $(MKDIR) -p $(JRE_IMAGE_DIR) - -# 64-bit solaris jre image contains only the 64-bit add-on files. -initial-image-jre-sol64:: initial-image-jre-setup - @# Use tar instead of cp to preserve the symbolic links - for dir in bin lib ; do \ - ( $(CD) $(OUTPUTDIR) && \ - $(TAR) cf - `$(FIND) $$dir -name '$(ARCH)' -print` | \ - ($(CD) $(JRE_IMAGE_DIR) && $(TAR) xf -) ) ; \ - done - @# Remove some files from the jre area - for t in $(NOTJRETOOLS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ - done - for l in $(NOTJRELIBS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/lib/$$l ; \ - done - $(RM) `$(FIND) $(JRE_IMAGE_DIR)/lib -name 'orb.idl'` - $(RM) `$(FIND) $(JRE_IMAGE_DIR)/lib -name 'ir.idl'` - -# Construct an initial jre image (initial jdk jre) no trimming or stripping -# See "initial-image-jdk-setup" for an explanation of the rm of -# drive names like C: -initial-image-jre:: initial-image-jre-setup \ - $(JRE_DOCFILES) \ - $(RT_JAR) $(RESOURCES_JAR) $(JSSE_JAR) $(JFR_JAR) $(DNS_JAR) $(LOCALEDATA_JAR) \ - $(BUILD_TOOLS) - @# Copy in bin directory - $(CD) $(OUTPUTDIR) && $(FIND) bin -depth | $(CPIO) -pdum $(JRE_IMAGE_DIR) - @# CTE plugin security change require new empty directory lib/applet - $(MKDIR) -p $(JRE_IMAGE_DIR)/lib/applet - @# Copy in lib directory - $(CD) $(OUTPUTDIR) && $(FIND) lib -depth | $(CPIO) -pdum $(JRE_IMAGE_DIR) - ifeq ($(USING_CYGWIN),true) - $(RM) -rf $(JRE_IMAGE_DIR)/[A-Za-z]: - $(RM) -rf $(OUTPUTDIR)/[A-Za-z]: - endif - @# Make sure all directories are read/execute for everyone - $(CHMOD) a+rx `$(FIND) $(JRE_IMAGE_DIR) -type d` - @# Remove some files from the jre area - for t in $(NOTJRETOOLS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/bin$(ISA_DIR)/$$t ; \ - done - for l in $(NOTJRELIBS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/lib/$$l ; \ - done - @# Remove orb.idl and ir.idl from jre - $(FIND) $(JRE_IMAGE_DIR)/lib -name 'orb.idl' -exec $(RM) \{} \; - $(FIND) $(JRE_IMAGE_DIR)/lib -name 'ir.idl' -exec $(RM) \{} \; - @# Copy in rt.jar & resources.jar file - $(CP) $(RT_JAR) $(JRE_IMAGE_DIR)/lib/rt.jar - $(CP) $(RESOURCES_JAR) $(JRE_IMAGE_DIR)/lib/resources.jar - $(CP) $(JSSE_JAR) $(JRE_IMAGE_DIR)/lib/jsse.jar -ifneq ($(JFR_JAR),) - $(CP) $(JFR_JAR) $(JRE_IMAGE_DIR)/lib/jfr.jar -endif - $(CP) $(DNS_JAR) $(JRE_IMAGE_DIR)/lib/ext/dnsns.jar - $(CP) $(LOCALEDATA_JAR) $(JRE_IMAGE_DIR)/lib/ext/localedata.jar - @# Generate meta-index to make boot and extension class loaders lazier - $(CD) $(JRE_IMAGE_DIR)/lib && \ - $(TOOL_BUILDMETAINDEX) \ - -o meta-index *.jar - $(CD) $(JRE_IMAGE_DIR)/lib && $(java-vm-cleanup) - $(CD) $(JRE_IMAGE_DIR)/lib/ext && \ - $(TOOL_BUILDMETAINDEX) \ - -o meta-index *.jar - $(CD) $(JRE_IMAGE_DIR)/lib/ext && $(java-vm-cleanup) -ifeq ($(PLATFORM), macosx) - @#install jobjc, apple mac only - $(CP) $(OUTPUTDIR)/JObjC.build/JObjC.jar $(JRE_IMAGE_DIR)/lib/JObjC.jar -endif -ifeq ($(PLATFORM), windows) - @# Remove certain *.lib files - $(CD) $(JRE_IMAGE_DIR)/lib && \ - $(RM) java.$(LIB_SUFFIX) jvm.$(LIB_SUFFIX) \ - awt.$(LIB_SUFFIX) jawt.$(LIB_SUFFIX) - ifeq ($(ARCH_DATA_MODEL), 32) - @# The Java Kernel JRE image ships with a special VM. It is not included - @# in the full JRE image, so remove it. Also, is it only for 32-bit windows. - $(CD) $(JRE_IMAGE_DIR)/bin && $(RM) -r kernel - endif -endif # Windows -ifneq ($(PLATFORM), windows) - $(call copy-man-pages,$(JRE_IMAGE_DIR),$(JRE_MAN_PAGES)) -endif # !windows - -# Trim out any extra files not for the jre shipment but wanted in the jdk jre. -# (Note the jdk WILL want the jre image before this trimming) -# Removes server VM on Windows 32bit. -# Remove certain shared libraries that should not be in the jre image -# but should be in the jdk jre image. -trim-image-jre:: - @# Clean out all _the. files. - $(FIND) $(JRE_IMAGE_DIR) -name "_the.*" $(FIND_DELETE) -ifeq ($(PLATFORM), windows) - ifeq ($(ARCH_DATA_MODEL), 32) - $(RM) -r $(JRE_IMAGE_DIR)/bin/server - endif - ifdef NOTJRE_SHARED_LIBS - for l in $(NOTJRE_SHARED_LIBS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/bin/$$l ; \ - done ; - endif -else # PLATFORM - ifdef NOTJRE_SHARED_LIBS - for l in $(NOTJRE_SHARED_LIBS) ; do \ - $(RM) $(JRE_IMAGE_DIR)/lib/$(LIBARCH)/$$l ; \ - done ; - endif -endif # PLATFORM - -# Get list of all binary (COFF or Elf) files in the jre -JRE_BIN_LIST=$(TEMPDIR)/jre-bin-files.list -$(JRE_BIN_LIST): - $(RM) $@ -ifeq ($(PLATFORM), windows) - $(FIND) $(JRE_IMAGE_DIR)/bin -type f -name \*.exe \ - -o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)" > $@ -else - $(FIND) $(JRE_IMAGE_DIR)/lib -type f -name \*.$(LIB_SUFFIX) >> $@ - $(FILE) `$(FIND) $(JRE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ -endif - -# Post process the image (strips and mcs on Elf files we are shipping) -# (Note the jdk WILL want the jre image before this processing) -process-image-jre:: $(JRE_BIN_LIST) -ifneq ($(POST_STRIP_PROCESS), ) - @for f in `$(CAT) $(JRE_BIN_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ - $(POST_STRIP_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif -ifneq ($(POST_MCS_PROCESS), ) - @for f in `$(CAT) $(JRE_BIN_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_MCS_PROCESS) $${f}; \ - $(POST_MCS_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif - @for f in `$(CAT) $(JRE_BIN_LIST)`; do \ - $(call binary_file_verification,$${f}); \ - done - $(RM) $(JRE_BIN_LIST) - -###################################################### -# JDK Image -###################################################### -# Note: cpio ($(CPIO)) sometimes leaves directories without rx access. - -# REMIND: the $(RM) calls for patterns like c:, d: following $(CPIO) -# are because the 1.7.x versions of cygwin's cpio command drops these -# in the working directory if the output path begins with that pattern -# The one for the output jre subdirectory gets there because cpio sees its -# own dropping in the input jre subdirectory. Need to remove both of these. -# We can remove these RM's if someone figures out how to stop cpio from -# leaving these there. -# Note that its a real problem not because this directory can end up in the -# bundle (I think it won't since it not in bin or lib and those are the -# only places from which we copy everything), but because the presence -# of this file causes cygwin's find to bomb out, thus breaking the build -# in "install". -initial-image-jdk-setup: - $(RM) -r $(JDK_IMAGE_DIR) - $(MKDIR) -p $(JDK_IMAGE_DIR)/jre - ($(CD) $(JRE_IMAGE_DIR) && $(FIND) . -depth -print \ - | $(CPIO) -pdum $(JDK_IMAGE_DIR)/jre ) - ifeq ($(USING_CYGWIN),true) - $(RM) -rf $(JRE_IMAGE_DIR)/[A-Za-z]: - $(RM) -rf $(JDK_IMAGE_DIR)/jre/[A-Za-z]: - endif - $(RM) -rf $(JDK_IMAGE_DIR)/jre/man - $(CHMOD) a+rx `$(FIND) $(JDK_IMAGE_DIR) -type d` - -initial-image-jdk64-bindemos: - for dir in bin demo ; do \ - ( $(CD) $(OUTPUTDIR) && \ - $(TAR) cf - `$(FIND) $$dir -name '$(LIBARCH)' -print` | \ - ($(CD) $(JDK_IMAGE_DIR) && $(TAR) xf -) ) ; \ - done - -# Solaris 64 bit image is special -initial-image-jdk-sol64:: initial-image-jdk-setup \ - initial-image-jdk64-bindemos - -# DB files to add -ifdef OPENJDK - -initial-image-jdk-db: - -else - -# Create the list of db *.zip files to bundle with jdk -ABS_DB_PATH :=$(call FullPath,$(CLOSED_SHARE_SRC)/db) -DB_ZIP_LIST := $(shell $(LS) $(ABS_DB_PATH)/*.zip 2>/dev/null) -# Can't have : in these file names as they are used in a rule -# below. -ifdef USING_CYGWIN - DB_ZIP_LIST:=$(shell $(CYGPATH) -a -u $(DB_ZIP_LIST)) -endif - -# Java DB image. Move the Java DB demo directory into the JDK's demo -# dir and in the process, rename it to db. Also remove index.html, -# since it presumes docs are co-located. Also remove register.html (no -# longer relevant). -initial-image-jdk-db: $(DB_ZIP_LIST) - $(MKDIR) -p $(JDK_IMAGE_DIR)/db - for d in $(DB_ZIP_LIST); do \ - ($(CD) $(JDK_IMAGE_DIR)/db && $(UNZIP) -o $$d); \ - done - $(CP) $(ABS_DB_PATH)/README-JDK.html $(JDK_IMAGE_DIR)/db -ifndef NO_DEMOS - $(RM) -rf $(NEWDEMODIR)/db - $(MV) $(JDK_IMAGE_DIR)/db/demo $(NEWDEMODIR)/db - $(CP) $(ABS_DB_PATH)/README-JDK-DEMOS.html $(NEWDEMODIR)/db/ -else - $(RM) -rf $(JDK_IMAGE_DIR)/db/demo -endif - $(RM) $(JDK_IMAGE_DIR)/db/index.html $(JDK_IMAGE_DIR)/db/register.html -endif - -# The launcher source files we need for src.zip -FILES_launcher = $(wildcard $(SHARE_SRC)/bin/*) \ - $(wildcard $(PLATFORM_SRC)/bin/java_md*) - -# Standard jdk image -initial-image-jdk:: initial-image-jdk-setup \ - initial-image-jdk-db \ - $(JDK_DOCFILES) \ - $(JDK_DEMOS_AND_SAMPLES_DOCFILES) - $(MKDIR) $(JDK_IMAGE_DIR)/lib - @# - @# Copy in the jars in lib that only belong in the JDK - @# - for l in $(NOTJRELIBS); do \ - if [ -r $(LIBDIR)/$$l ]; then \ - $(CP) $(LIBDIR)/$$l $(JDK_IMAGE_DIR)/lib; \ - fi; \ - done - ifeq ($(PLATFORM), windows) - @# - @# lib/ - @# - $(CP) $(LIBDIR)/$(LIB_PREFIX)jvm.$(LIB_SUFFIX) $(JDK_IMAGE_DIR)/lib - $(CP) $(LIBDIR)/$(LIB_PREFIX)jawt.$(LIB_SUFFIX) $(JDK_IMAGE_DIR)/lib - @# - @# bin/ - @# - @# copy all EXE files and only certain DLL files from BINDIR - $(MKDIR) -p $(JDK_IMAGE_DIR)/bin - $(CP) $(BINDIR)/*$(EXE_SUFFIX) $(JDK_IMAGE_DIR)/bin - $(CP) $(BINDIR)/jli.$(LIBRARY_SUFFIX) $(JDK_IMAGE_DIR)/bin - ifeq ($(COMPILER_VERSION), VS2010) - $(CP) $(BINDIR)/msvc*100.$(LIBRARY_SUFFIX) $(JDK_IMAGE_DIR)/bin - endif - else # PLATFORM - @# - @# bin/ - @# - ($(CD) $(BINDIR)/.. && $(TAR) cf - \ - `$(FIND) bin \( -type f -o -type l \) -print `) | \ - ($(CD) $(JDK_IMAGE_DIR) && $(TAR) xf -) - endif # PLATFORM - @# - @# lib/tools.jar - @# - $(MKDIR) -p $(IMAGES_OUTPUTDIR)/lib - $(CD) $(CLASSBINDIR) && \ - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $(IMAGES_OUTPUTDIR)/lib/tools.jar \ - $(TOOLS) $(BOOT_JAR_JFLAGS) - $(CD) $(CLASSBINDIR) && $(java-vm-cleanup) - $(CP) $(IMAGES_OUTPUTDIR)/lib/tools.jar $(JDK_IMAGE_DIR)/lib/tools.jar - @# - @# lib/ct.sym - @# - $(MKDIR) -p $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym - $(BOOT_JAVA_CMD) \ - -Xbootclasspath/p:$(JAVAC_JAR) \ - -Xbootclasspath/a:$(JDK_OUTPUTDIR)/classes \ - -jar $(JAVAC_JAR) $(JAVACFLAGS) \ - -XDprocess.packages -proc:only \ - -processor com.sun.tools.javac.sym.CreateSymbols \ - -Acom.sun.tools.javac.sym.Jar=$(RT_JAR) \ - -Acom.sun.tools.javac.sym.Dest=$(IMAGES_OUTPUTDIR)/symbols/META-INF/sym/rt.jar \ - $(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS) $(EXPORTED_PRIVATE_PKGS) - $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $(IMAGES_OUTPUTDIR)/lib/ct.sym \ - -C $(IMAGES_OUTPUTDIR)/symbols META-INF $(BOOT_JAR_JFLAGS) - $(java-vm-cleanup) - $(CP) $(IMAGES_OUTPUTDIR)/lib/ct.sym $(JDK_IMAGE_DIR)/lib/ct.sym - @# - @# CORBA supported orb.idl and ir.idl should be copied to lib - @# - $(CP) $(LIBDIR)/orb.idl $(JDK_IMAGE_DIR)/lib/orb.idl - $(CP) $(LIBDIR)/ir.idl $(JDK_IMAGE_DIR)/lib/ir.idl - ifeq ($(PLATFORM), linux) - @# - @# on Linux copy jexec from jre/lib to /lib - @# - $(CP) $(LIBDIR)/jexec $(JDK_IMAGE_DIR)/lib/jexec - endif # PLATFORM - @# - @# src.zip - @# - $(MKDIR) -p $(JDK_IMAGE_DIR)/src - @# - @# The '*-*' pattern in the find command excludes files named with dashes, - @# such as the java.nio templates for generated classes - @# - @# The Linux 'tar' command cannot handle the huge command line argument - @# generated by the more efficient solaris/windows method of copying files. - @# So for Linux, make use of the -T option (like Solaris' -I option) of - @# obtaining the list of files from a file. MKS tar has no such option. - - ifneq (,$(findstring $(PLATFORM), linux macosx)) - for d in $(SOURCE_DIRS); do \ - $(RM) $(IMAGES_OUTPUTDIR)/tmp/src-files.list; \ - ($(CD) $$d && \ - for sd in $(SOURCES) ; do \ - if [ -d $$sd ] ; then \ - $(FIND) $$sd $(SOURCE_FILES_filter) \ - -name '*.java' -print \ - >> $(IMAGES_OUTPUTDIR)/tmp/src-files.list ; \ - fi; \ - done ; \ - ) ; \ - if [ -f $(IMAGES_OUTPUTDIR)/tmp/src-files.list ] ; then \ - ($(CD) $$d && $(TAR) cf - -T $(IMAGES_OUTPUTDIR)/tmp/src-files.list ) \ - | ($(CD) $(JDK_IMAGE_DIR)/src && $(TAR) xf -); \ - fi; \ - done - else - for d in $(SOURCE_DIRS); do \ - $(RM) $(IMAGES_OUTPUTDIR)/tmp/src-files.list; \ - ($(CD) $$d && \ - for sd in $(SOURCES) ; do \ - if [ -d $$sd ] ; then \ - $(FIND) $$sd $(SOURCE_FILES_filter) \ - -name '*.java' -print \ - >> $(IMAGES_OUTPUTDIR)/tmp/src-files.list ; \ - fi; \ - done ; \ - ) ; \ - if [ -f $(IMAGES_OUTPUTDIR)/tmp/src-files.list ] ; then \ - ($(CD) $$d && $(TAR) cf - `$(CAT) $(IMAGES_OUTPUTDIR)/tmp/src-files.list`) \ - | ($(CD) $(JDK_IMAGE_DIR)/src && $(TAR) xf -); \ - fi; \ - done - endif - $(RM) $(IMAGES_OUTPUTDIR)/tmp/src-files.list - $(CHMOD) -R +w $(JDK_IMAGE_DIR)/src - $(MKDIR) -p $(JDK_IMAGE_DIR)/src/launcher - $(CP) $(FILES_launcher) $(JDK_IMAGE_DIR)/src/launcher - $(CD) $(JDK_IMAGE_DIR)/src && $(ZIPEXE) -qr ../src.zip * - $(RM) -r $(JDK_IMAGE_DIR)/src - @# - @# demo, include - @# -ifndef NO_DEMOS - mkdir -p $(JDK_IMAGE_DIR)/demo - $(CP) -r -f $(NEWDEMODIR)/* $(JDK_IMAGE_DIR)/demo - $(FIND) $(JDK_IMAGE_DIR)/demo -name "_the.*" $(FIND_DELETE) -endif -ifndef NO_SAMPLES - $(CP) -r -f $(SAMPLEDIR) $(JDK_IMAGE_DIR) -endif - $(CP) -r $(INCLUDEDIR) $(JDK_IMAGE_DIR) - @# - @# Swing BeanInfo generation - @# - $(CP) $(JDK_OUTPUTDIR)/lib/dt.jar $(JDK_IMAGE_DIR)/lib/dt.jar -ifneq ($(PLATFORM), windows) - $(call copy-man-pages,$(JDK_IMAGE_DIR),$(JDK_MAN_PAGES)) -endif # !windows - -# Trim out files we don't want to ship -trim-image-jdk:: - @# Clean out all _the. files. - $(FIND) $(JDK_IMAGE_DIR) -name "_the.*" $(FIND_DELETE) - @# Remove tools that should not be part of SDK. - for t in $(NOTJDKTOOLS); do \ - $(RM) $(JDK_IMAGE_DIR)/bin/$${t}$(EXE_SUFFIX); \ - done - -# Get list of binary (COFF or Elf) files in the jdk -JDK_BIN_LIST=$(TEMPDIR)/jdk-bin-files.list -$(JDK_BIN_LIST): -ifeq ($(PLATFORM), windows) - $(FIND) $(JDK_IMAGE_DIR)/jre/bin -type f -name \*.exe \ - -o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)" > $@ - $(FIND) $(JDK_IMAGE_DIR)/bin -type f -name \*.exe \ - -o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)" >> $@ -else - $(RM) $@ - $(FIND) $(JDK_IMAGE_DIR)/jre/lib -type f -name \*.$(LIB_SUFFIX) >> $@ - $(FILE) `$(FIND) $(JDK_IMAGE_DIR)/jre/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ - $(FILE) `$(FIND) $(JDK_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \ - | $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@ -endif - -# Post process the image (strips and mcs on files we are shipping) -process-image-jdk:: $(JDK_BIN_LIST) -ifneq ($(POST_STRIP_PROCESS), ) - @for f in `$(CAT) $(JDK_BIN_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_STRIP_PROCESS) $${f}; \ - $(POST_STRIP_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif -ifneq ($(POST_MCS_PROCESS), ) - @for f in `$(CAT) $(JDK_BIN_LIST)`; do \ - $(CHMOD) u+w $${f}; \ - $(ECHO) $(POST_MCS_PROCESS) $${f}; \ - $(POST_MCS_PROCESS) $${f}; \ - $(CHMOD) go-w $${f}; \ - done -endif - @for f in `$(CAT) $(JDK_BIN_LIST)`; do \ - $(call binary_file_verification,$${f}); \ - done - $(RM) $(JDK_BIN_LIST) - -################################################################### -# What did we build -################################################################### - -# The jdk text info file that lives at the root of the install image. - -JDK_INFO_FILE = $(JDK_IMAGE_DIR)/release -JRE_INFO_FILE = $(JRE_IMAGE_DIR)/release - -# Common way to emit a line into the release or info file -define info-file-item # name value -$(PRINTF) '%s="%s"\n' $1 $2 >> $@ -endef - -# Values to emit -MINIMUM_OS_NAME := $(REQUIRED_OS_NAME) -MINIMUM_OS_VERSION := $(REQUIRED_OS_VERSION) -MINIMUM_OS_ARCH := $(ARCH) -ALL_SOURCE_TIPS = $(shell \ - if [ -f $(SOURCE_TIPS) ] ; then \ - $(CAT) $(SOURCE_TIPS) ; \ - fi) - -$(JDK_INFO_FILE): FRC - $(prep-target) - $(call info-file-item, "JAVA_VERSION", "$(THIS_JDK_VERSION)") - $(call info-file-item, "OS_NAME", "$(MINIMUM_OS_NAME)") - $(call info-file-item, "OS_VERSION", "$(MINIMUM_OS_VERSION)") - $(call info-file-item, "OS_ARCH", "$(MINIMUM_OS_ARCH)") - $(call info-file-item, "SOURCE", "$(ALL_SOURCE_TIPS)") - -# Create release file to identify this image -identify-image-jdk:: $(JDK_INFO_FILE) - -$(JRE_INFO_FILE): FRC - $(prep-target) - $(call info-file-item, "JAVA_VERSION", "$(THIS_JDK_VERSION)") - $(call info-file-item, "OS_NAME", "$(MINIMUM_OS_NAME)") - $(call info-file-item, "OS_VERSION", "$(MINIMUM_OS_VERSION)") - $(call info-file-item, "OS_ARCH", "$(MINIMUM_OS_ARCH)") - $(call info-file-item, "SOURCE", "$(ALL_SOURCE_TIPS)") - -# Create release file to identify this image -identify-image-jre:: $(JRE_INFO_FILE) - -images images-clobber:: - $(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..." - $(java-vm-cleanup) - -.PHONY: images image-jre image-jdk \ - initial-image-jre initial-image-jdk \ - initial-image-jre-sol64 initial-image-jdk-sol64 \ - initial-image-jdk-setup \ - initial-image-jdk-db \ - initial-image-jdk64-bindemos \ - initial-image-jre-setup \ - trim-image-jre trim-image-jdk \ - process-image-jre process-image-jdk \ - identify-image-jre identify-image-jdk \ - images-clobber - -# Force rule -FRC: - diff --git a/jdk/makefiles/common/Rules.gmk b/jdk/makefiles/common/Rules.gmk deleted file mode 100644 index 9e9163a887b..00000000000 --- a/jdk/makefiles/common/Rules.gmk +++ /dev/null @@ -1,357 +0,0 @@ -# -# Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# -# Rules shared by all Java makefiles. -# -# Used to apply to source file $<, checks code conventions, issues warnings. -define check-conventions - if [ "$(CONVENTION_WATCH)" = "true" ] ; then \ - if [ "`$(CAT) -n -v -t $< | $(EGREP) -v '\@\(\#\)' | $(EGREP) '\^[MLI]'`" != "" ] ; then \ - $(ECHO) "WARNING: File contains tabs, ^M, or ^L characters: $<"; \ - if [ "$(CONVENTION_DETAILS)" = "true" ] ; then \ - $(CAT) -n -v -t $< | $(EGREP) -v '\@\(\#\)' | $(EGREP) '\^[MLI]' ; \ - fi; \ - fi; \ - fi -endef - -# Make sure the default rule is all -rules_default_rule: all - -# -# Directory set up. (Needed by deploy workspace) -# -$(CLASSDESTDIR) $(CLASSHDRDIR) $(OBJDIR) $(OUTPUTDIR) $(BINDIR) $(LIBDIR) $(LIBDIR)/$(LIBARCH) $(TEMPDIR) $(EXTDIR): - $(MKDIR) -p $@ - -# -# All source tree areas for java/properties files (a few may be closed) -# -ifeq ($(PLATFORM), macosx) - ifdef OPENJDK - ALL_CLASSES_SRC = $(call JavaSrcDirList,,classes) - else - ALL_CLASSES_SRC = \ - $(CLOSED_SHARE_SRC)/classes $(CLOSED_PLATFORM_SRC)/classes \ - $(call JavaSrcDirList,,classes) - endif -else - ifdef OPENJDK - ALL_CLASSES_SRC = $(SHARE_SRC)/classes $(PLATFORM_SRC)/classes - else - ALL_CLASSES_SRC = \ - $(CLOSED_SHARE_SRC)/classes $(CLOSED_PLATFORM_SRC)/classes \ - $(SHARE_SRC)/classes $(PLATFORM_SRC)/classes - endif -endif - -# -# If AUTO_FILES_PROPERTIES_DIRS used, automatically find properties files -# -ifdef AUTO_FILES_PROPERTIES_DIRS - AUTO_FILES_PROPERTIES_FILTERS1 = $(SCM_DIRs) ',*' - AUTO_FILES_PROPERTIES_FILTERS1 += $(AUTO_PROPERTIES_PRUNE) - FILES_properties_find_filters1 = $(AUTO_FILES_PROPERTIES_FILTERS1:%=-name % -prune -o) - FILES_properties_auto1 := \ - $(shell \ - for dir in $(ALL_CLASSES_SRC) ; do \ - if [ -d $$dir ] ; then \ - ( $(CD) $$dir; \ - for sdir in $(AUTO_FILES_PROPERTIES_DIRS); do \ - if [ -d $$sdir ] ; then \ - $(FIND) $$sdir $(FILES_properties_find_filters1) \ - -name '*.properties' -print ; \ - fi ; \ - done \ - ); \ - fi; \ - done \ - ) -else - FILES_properties_auto1 = -endif # AUTO_FILES_PROPERTIES_DIRS - -# Add any automatically found properties files to the properties file list -FILES_properties += $(FILES_properties_auto1) - -# -# Get Resources help -# -include $(JDK_TOPDIR)/makefiles/common/internal/Resources.gmk - -# -# Compiling .java files. -# - -# -# Automatically add to FILES_java if AUTO_FILES_JAVA_DIRS is defined -# -# There are two basic types of sources, normal source files and the -# generated ones. The Normal sources will be located in: -# $(ALL_CLASSES_SRC) -# The generated sources, which might show up late to dinner, are at: -# $(GENSRCDIR) -# and since they could be generated late, we need to be careful that -# we look for these sources late and not use the ':=' assignment which -# might miss their generation. - -ifdef AUTO_FILES_JAVA_DIRS - # Filter out these files or directories - AUTO_FILES_JAVA_SOURCE_FILTERS1 = $(SCM_DIRs) ',*' - AUTO_FILES_JAVA_SOURCE_FILTERS2 = - AUTO_FILES_JAVA_SOURCE_FILTERS1 += $(AUTO_JAVA_PRUNE) - AUTO_FILES_JAVA_SOURCE_FILTERS2 += $(AUTO_JAVA_PRUNE) - - # First list is the normal sources that should always be there, - # by using the ':=', which means we do this processing once. - FILES_java_find_filters1 = $(AUTO_FILES_JAVA_SOURCE_FILTERS1:%=-name % -prune -o) - FILES_java_auto1 := \ - $(shell \ - for dir in $(ALL_CLASSES_SRC) ; do \ - if [ -d $$dir ] ; then \ - ( $(CD) $$dir; \ - for sdir in $(AUTO_FILES_JAVA_DIRS); do \ - if [ -d $$sdir ] ; then \ - $(FIND) $$sdir $(FILES_java_find_filters1) \ - -name '*.java' -print ; \ - fi ; \ - done \ - ); \ - fi; \ - done \ - ) - # Second list is the generated sources that should be rare, but will likely - # show up late and we need to look for them at the last minute, so we - # cannot use the ':=' assigment here. But if this gets expanded multiple - # times, the if tests should make them relatively cheap. - FILES_java_find_filters2 = $(AUTO_FILES_JAVA_SOURCE_FILTERS2:%=-name % -prune -o) - FILES_java_auto2 = \ - $(shell \ - for dir in $(GENSRCDIR); do \ - if [ -d $$dir ] ; then \ - ( $(CD) $$dir; \ - for sdir in $(AUTO_FILES_JAVA_DIRS); do \ - if [ -d $$sdir ] ; then \ - $(FIND) $$sdir $(FILES_java_find_filters2) \ - -name '*.java' -print ; \ - fi ; \ - done \ - ); \ - fi; \ - done \ - ) -else - FILES_java_auto1 = - FILES_java_auto2 = -endif - -# Add all found java sources to FILES_java macro (if AUTO_FILES_JAVA_DIRS used) -FILES_java += $(FILES_java_auto1) $(FILES_java_auto2) - -# File that will hold java source names that need compiling -JAVA_SOURCE_LIST=$(TEMPDIR)/.classes.list - -# Add a java source to the list -define add-java-file -$(ECHO) "$?" >> $(JAVA_SOURCE_LIST) -$(check-conventions) -endef - -ifdef DEMOS -$(CLASSDESTDIR)/%.class: $(SOURCEPATH)/%.java - $(add-java-file) -#Redirect zh_HK java files to tmp directory which created from zh_TW -#$(CLASSDESTDIR)/%_zh_HK.class: $(JDK_L10N_TMP_OUTPUTDIR)/%_zh_HK.java -# $(add-java-file) -else - -# -# Rules for closed files -# -# If filenames are duplicated between open/closed workspaces, prefer -# the closed files. -# -# Rule ordering in this Makefile is important: some targets depend -# on closed files replacing open ones, and thus the closed file rules -# must be found before the open ones. -# -# Don't reorder without consulting teams that depend on this behavior. -# -ifndef OPENJDK -$(CLASSDESTDIR)/%.class: $(CLOSED_PLATFORM_SRC)/classes/%.java - $(add-java-file) -$(CLASSDESTDIR)/%.class: $(CLOSED_SHARE_SRC)/classes/%.java - $(add-java-file) -endif - -$(CLASSDESTDIR)/%.class: $(GENSRCDIR)/%.java - $(add-java-file) - -ifeq ($(PLATFORM), macosx) -$(CLASSDESTDIR)/%.class: $(JDK_TOPDIR)/src/macosx/classes/%.java - $(add-java-file) -endif -$(CLASSDESTDIR)/%.class: $(PLATFORM_SRC)/classes/%.java - $(add-java-file) - -$(CLASSDESTDIR)/%.class: $(SHARE_SRC)/classes/%.java - $(add-java-file) - -#Redirect zh_HK java files to tmp directory which created from zh_TW -$(CLASSDESTDIR)/%_zh_HK.class: $(JDK_L10N_TMP_OUTPUTDIR)/%_zh_HK.java - $(add-java-file) -endif - -# List of class files needed -FILES_class = $(FILES_java:%.java=$(CLASSDESTDIR)/%.class) - -# Got to include exported files. -FILES_class += $(FILES_export:%.java=$(CLASSDESTDIR)/%.class) - -# Construct list of java sources we need to compile -source_list_prime: - mkdir -p $(TEMPDIR) -# Note that we slip resources in so that compiled properties files get created: -$(JAVA_SOURCE_LIST) : source_list_prime resources $(FILES_class) - touch $@ - -.delete.classlist: - rm -f $(JAVA_SOURCE_LIST) - -# Make sure all newer sources are compiled (in a batch) -classes : $(CLASSES_INIT) .delete.classlist .compile.classlist - -.compile.classlist : $(JAVA_SOURCE_LIST) - $(MKDIR) -p $(CLASSDESTDIR) - $(RM) $<.filtered - $(CAT) $< | $(NAWK) 'length>0' | $(SORT) -u > $<.filtered - numfiles=`$(WC) -l < $<.filtered` ; \ - if [ $$numfiles -ge 1 ] ; then \ - $(ECHO) "# Java sources to be compiled: (listed in file $<)"; \ - $(CAT) $<.filtered; \ - $(ECHO) "# Running javac: $$numfiles files; in $(CURDIR)"; \ - $(ECHO) $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered; \ - $(JAVAC_CMD) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$<.filtered && \ - $(ECHO) "# javac finished"; \ - fi - $(java-vm-cleanup) - -clobber clean:: - rm -f $(JAVA_SOURCE_LIST) - -ifndef DONT_CLOBBER_CLASSES - ifndef PACKAGE - DONT_CLOBBER_CLASSES = true - else - DONT_CLOBBER_CLASSES = false - endif -endif - -packages.clean: -ifeq ($(DONT_CLOBBER_CLASSES),false) - ifdef AUTO_FILES_JAVA_DIRS - for sdir in $(AUTO_FILES_JAVA_DIRS); do \ - echo "rm -f -r $(CLASSDESTDIR)/$$sdir"; \ - rm -f -r $(CLASSDESTDIR)/$$sdir; \ - done - else - rm -f -r $(CLASSDESTDIR)/$(PKGDIR) - endif -endif - -ifdef DEMOS -classes.clean: - rm -f -r $(DEMODST) $(CLASSDESTDIR) -else -classes.clean: packages.clean - rm -f $(JAVA_SOURCE_LIST) -endif - -# -# C and C++ make dependencies -# -include $(JDK_TOPDIR)/makefiles/common/internal/NativeCompileRules.gmk - -# -# Running Javah to generate stuff into CClassHeaders. -# - -ifdef FILES_export - -CLASSES.export = $(subst /,.,$(FILES_export:%.java=%)) -CLASSES.export += $(subst /,.,$(FILES_export2:%.java=%)) -CLASSES.export += $(subst /,.,$(FILES_export3:%.java=%)) -CLASSES_export = $(FILES_export:%.java=$(CLASSDESTDIR)/%.class) -CLASSES_export += $(FILES_export2:%.java=$(CLASSDESTDIR)/%.class) -CLASSES_export += $(FILES_export3:%.java=$(CLASSDESTDIR)/%.class) - -# Fix when deploy workspace makefiles don't depend on this name -#CLASSHDR_DOTFILE=$(CLASSHDRDIR)/.classheaders - -CLASSHDR_DOTFILE=$(OBJDIR)/.class.headers.$(ARCH) - -classheaders: classes $(CLASSHDR_DOTFILE) - -$(CLASSHDR_DOTFILE): $(CLASSES_export) - $(prep-target) - echo "# Running javah:" - echo $(UNCYGDRIVE) $(JAVAH_CMD) -d $(CLASSHDRDIR)/ \ - $(CLASSES.export) $(subst $$,\$$,$(EXPORTED_inner)) - $(UNCYGDRIVE) $(JAVAH_CMD) -d $(CLASSHDRDIR)/ \ - $(CLASSES.export) $(subst $$,\$$,$(EXPORTED_inner)) - $(java-vm-cleanup) - touch $@ - -classheaders.clean: - rm -f $(CLASSHDR_DOTFILE) - rm -f -r $(CLASSHDRDIR) - -else # FILES_export - -classheaders: classes - -classheaders.clean: - -endif # FILES_export - -clean clobber:: classheaders.clean classes.clean .delete.classlist - -# -# Default dependencies -# - -all: build - -build: classheaders - -default: all - -.PHONY: all build clean clobber \ - .delete.classlist classes .compile.classlist classes.clean \ - classheaders classheaders.clean \ - batch_compile - diff --git a/jdk/makefiles/common/Subdirs.gmk b/jdk/makefiles/common/Subdirs.gmk deleted file mode 100644 index b8c5405d160..00000000000 --- a/jdk/makefiles/common/Subdirs.gmk +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Generic makefile for building subdirectories. -# -# SUBDIRS variables to specify the subdirectories to build recursively. -# Makefile has to include Subdirs.gmk AFTER all SUBDIRS variables are -# defined. -# -# This file does not contain any rule. -# -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. - -# -# SUBDIRS subdirs for the base module always get built -# SUBDIRS_ subdirs for the named group -# -# By default, subdirs specified in the SUBDIRS and all SUBDIRS_* -# variables will be built. -# -# Variables of the currently supported groups are: -# SUBDIRS_desktop -# SUBDIRS_management -# SUBDIRS_enterprise -# SUBDIRS_misc -# SUBDIRS_tools -# -# Change to the above list also need to update -# make/common/shared/Sanity.gmk. NOTE: this list is subject -# to change. -# -# Eventually we want to restructure the make directory -# according to these grouping (e.g. make/desktop/...) and -# the SUBDIRS_ variables would not be needed. -# - -# Iterate the subdirectories specified in $1. -# - cd into each subdir and make them - -# Given a SUBDIRS* list (first argument), cd into them and make them -# SUBDIRS_MAKEFLAGS Make settings for a subdir make -# SUBDIRS_MAKEFLAGS-$@ Make settings specific to this target -# -define subdirs-group-loop -$(ECHO) "Begin Processing SUBDIRS: $($1)" -for i in DUMMY $($1) ; do \ - if [ "$$i" != "DUMMY" ] ; then \ - $(MAKE) -C $$i $@ $(SUBDIRS_MAKEFLAGS) $(SUBDIRS_MAKEFLAGS-$@) \ - FULL_VERSION=$(FULL_VERSION) RELEASE=$(RELEASE) || exit 1; \ - fi ; \ -done -$(ECHO) "Done Processing SUBDIRS: $($1)" -endef - -# Given a OTHERSUBDIRS list, cd into them and make them (extra loop define) -# OTHERSUBDIRS_MAKEFLAGS Make settings for a subdir make -define OTHERSUBDIRS-loop -$(ECHO) "Begin Processing OTHERSUBDIRS: $(OTHERSUBDIRS)" -for i in DUMMY $(OTHERSUBDIRS) ; do \ - if [ "$$i" != "DUMMY" ] ; then \ - $(MAKE) -C $$i $@ $(OTHERSUBDIRS_MAKEFLAGS) \ - FULL_VERSION=$(FULL_VERSION) RELEASE=$(RELEASE) || exit 1; \ - fi ; \ -done -$(ECHO) "Done Processing OTHERSUBDIRS: $(OTHERSUBDIRS)" -endef - -# -# Iterate the list specified in SUBDIRS_ only if -# SUBDIRS_ is set. -# -ifdef SUBDIRS_desktop - define subdirs-desktop-loop - $(call subdirs-group-loop,SUBDIRS_desktop) - endef -else - define subdirs-desktop-loop - endef -endif # SUBDIRS_desktop - -ifdef SUBDIRS_enterprise - define subdirs-enterprise-loop - $(call subdirs-group-loop,SUBDIRS_enterprise) - endef -else -define subdirs-enterprise-loop -endef -endif # SUBDIRS_enterprise - -ifdef SUBDIRS_management - define subdirs-management-loop - $(call subdirs-group-loop,SUBDIRS_management) - endef -else - define subdirs-management-loop - endef -endif # SUBDIRS_management - -ifdef SUBDIRS_misc - define subdirs-misc-loop - $(call subdirs-group-loop,SUBDIRS_misc) - endef -else - define subdirs-misc-loop - endef -endif # SUBDIRS_misc - -ifdef SUBDIRS_tools - define subdirs-tools-loop - $(call subdirs-group-loop,SUBDIRS_tools) - endef -else - define subdirs-tools-loop - endef -endif # SUBDIRS_tools - -# -# If BUILD_MODULES is not set or it's set to "all", -# iterate all groups. -SUBDIRS_all = $(SUBDIRS) $(SUBDIRS_desktop) $(SUBDIRS_enterprise) \ - $(SUBDIRS_management) $(SUBDIRS_misc) $(SUBDIRS_tools) - -define SUBDIRS-loop - $(call subdirs-group-loop,SUBDIRS_all) -endef diff --git a/jdk/makefiles/common/internal/Defs-corba.gmk b/jdk/makefiles/common/internal/Defs-corba.gmk deleted file mode 100644 index 20468696196..00000000000 --- a/jdk/makefiles/common/internal/Defs-corba.gmk +++ /dev/null @@ -1,63 +0,0 @@ -# -# Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# The specific packages that come from or go to rt.jar and tools.jar -IMPORT_RT_PACKAGES += \ - org/omg/CORBA \ - org/omg/CORBA_2_3 \ - org/omg/CosNaming \ - org/omg/Dynamic \ - org/omg/DynamicAny \ - org/omg/IOP \ - org/omg/Messaging \ - org/omg/PortableInterceptor \ - org/omg/PortableServer \ - org/omg/SendingContext \ - org/omg/stub/java/rmi \ - javax/rmi \ - javax/rmi/CORBA \ - javax/activity \ - javax/transaction \ - com/sun/corba/se/GiopIDL \ - com/sun/corba/se/PortableActivationIDL \ - com/sun/corba/se/impl \ - com/sun/corba/se/internal \ - com/sun/corba/se/org/omg/CORBA \ - com/sun/corba/se/pept \ - com/sun/corba/se/spi \ - com/sun/org/omg/CORBA \ - com/sun/org/omg/SendingContext \ - com/sun/tools/corba/se/logutil \ - sun/corba \ - sun/rmi/rmic/iiop - -IMPORT_TOOLS_PACKAGES += \ - com/sun/tools/corba/se/idl \ - sun/rmi/rmic/iiop - -IMPORT_CORBA_BINARIES += \ - lib/orb.idl \ - lib/ir.idl - diff --git a/jdk/makefiles/common/internal/Defs-jaxp.gmk b/jdk/makefiles/common/internal/Defs-jaxp.gmk deleted file mode 100644 index eb5813c970e..00000000000 --- a/jdk/makefiles/common/internal/Defs-jaxp.gmk +++ /dev/null @@ -1,53 +0,0 @@ -# -# Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# The specific packages that come from or go to rt.jar and tools.jar -IMPORT_RT_PACKAGES += \ - org/w3c/dom \ - org/xml/sax \ - javax/xml/XMLConstants.class \ - javax/xml/datatype \ - javax/xml/namespace \ - javax/xml/parsers \ - javax/xml/stream \ - javax/xml/transform \ - javax/xml/validation \ - javax/xml/xpath \ - com/sun/java_cup \ - com/sun/org/apache/bcel \ - com/sun/org/apache/regexp \ - com/sun/org/apache/xalan \ - com/sun/org/apache/xerces \ - com/sun/org/apache/xml/internal/dtm \ - com/sun/org/apache/xml/internal/res \ - com/sun/org/apache/xml/internal/resolver \ - com/sun/org/apache/xml/internal/serialize \ - com/sun/org/apache/xml/internal/serializer \ - com/sun/org/apache/xml/internal/utils \ - com/sun/org/apache/xpath \ - com/sun/xml/internal/stream - -IMPORT_TOOLS_PACKAGES += - diff --git a/jdk/makefiles/common/internal/Defs-jaxws.gmk b/jdk/makefiles/common/internal/Defs-jaxws.gmk deleted file mode 100644 index f0ba12b292a..00000000000 --- a/jdk/makefiles/common/internal/Defs-jaxws.gmk +++ /dev/null @@ -1,63 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# The specific packages that come from or go to rt.jar and tools.jar -IMPORT_RT_PACKAGES += \ - META-INF/mailcap.default \ - META-INF/mimetypes.default \ - javax/activation \ - com/sun/activation \ - javax/xml/bind \ - javax/xml/soap \ - javax/xml/ws \ - javax/jws \ - javax/annotation \ - com/sun/xml/internal/bind \ - com/sun/xml/internal/fastinfoset \ - com/sun/xml/internal/messaging \ - com/sun/xml/internal/org/jvnet \ - com/sun/xml/internal/txw2 \ - com/sun/xml/internal/ws \ - com/sun/xml/internal/stream/buffer - -NOT_USED_PACKAGES += \ - com/sun/tools/internal/txw2 - -IMPORT_TOOLS_PACKAGES += \ - com/sun/codemodel \ - com/sun/istack/internal/tools \ - com/sun/xml/internal/rngom \ - com/sun/xml/internal/xsom \ - com/sun/xml/internal/dtdparser \ - com/sun/tools/internal/xjc \ - com/sun/tools/internal/ws \ - com/sun/tools/internal/jxc \ - org/relaxng \ - META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \ - META-INF/services/com.sun.tools.internal.xjc.Plugin \ - com/sun/tools/internal/jxc/ap \ - com/sun/tools/internal/ws/wscompile/plugin/at_generated - - diff --git a/jdk/makefiles/common/internal/Defs-langtools.gmk b/jdk/makefiles/common/internal/Defs-langtools.gmk deleted file mode 100644 index eebbfd0cbcb..00000000000 --- a/jdk/makefiles/common/internal/Defs-langtools.gmk +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# The specific packages that come from or go to rt.jar and tools.jar - -IMPORT_RT_PACKAGES += \ - javax/annotation/processing \ - javax/lang/model \ - javax/tools - -IMPORT_TOOLS_PACKAGES += \ - com/sun/javadoc \ - com/sun/source \ - com/sun/tools/classfile \ - com/sun/tools/doclets \ - com/sun/tools/javac \ - com/sun/tools/javadoc \ - com/sun/tools/javah \ - com/sun/tools/javap - diff --git a/jdk/makefiles/common/internal/ImportComponents.gmk b/jdk/makefiles/common/internal/ImportComponents.gmk deleted file mode 100644 index 995de5b6e9a..00000000000 --- a/jdk/makefiles/common/internal/ImportComponents.gmk +++ /dev/null @@ -1,173 +0,0 @@ -# -# Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - --include $(SPEC) - -# JDK jars where component classes come from as second choice -JDK_RT_JAR = $(JDK_IMPORT_PATH)/jre/lib/rt.jar -JDK_TOOLS_JAR = $(JDK_IMPORT_PATH)/lib/tools.jar -JDK_RESOURCES_JAR = $(JDK_IMPORT_PATH)/jre/lib/resources.jar - -# The specific packages that come from or go to rt.jar and tools.jar -# IF the component deliverables are not available. -IMPORT_TOOLS_PACKAGES = -IMPORT_RT_PACKAGES = - -# The following will add to IMPORT_TOOLS_PACKAGES and/or IMPORT_RT_PACKAGES -ifndef LANGTOOLS_DIST - include $(BUILDDIR)/common/internal/Defs-langtools.gmk -endif -ifndef CORBA_DIST - include $(BUILDDIR)/common/internal/Defs-corba.gmk -endif -ifndef JAXP_DIST - include $(BUILDDIR)/common/internal/Defs-jaxp.gmk -endif -ifndef JAXWS_DIST - include $(BUILDDIR)/common/internal/Defs-jaxws.gmk -endif - -# Clean up these lists so empty lists are empty -IMPORT_TOOLS_PACKAGES := $(strip $(IMPORT_TOOLS_PACKAGES)) -IMPORT_RT_PACKAGES := $(strip $(IMPORT_RT_PACKAGES)) - -# Relative paths to import component deliverables -CLASSES_JAR_FILE=lib/classes.jar -SRC_ZIP_FILE=lib/src.zip -BIN_ZIP_FILE=lib/bin.zip -DOC_ZIP_FILE=lib/doc.zip - -################################################################# -# Macros: - -# Importing component class files -define import-one-classes -if [ "$($1)" != "" ] ; then \ - $(ECHO) "Importing classes from component $1"; \ - $(call Unjar,$2,$($1)/$(CLASSES_JAR_FILE),); \ -fi -endef - -# Importing optional component doc files (for man pages?) -define import-one-docs -if [ "$($1)" != "" -a -f $($1)/$(DOC_ZIP_FILE) ] ; then \ - $(ECHO) "Importing docs from component $1"; \ - $(call Unzipper,$2,$($1)/$(DOC_ZIP_FILE)); \ -fi -endef - -# Importing optional component src files (for jdk src.zip and javadoc) -define import-one-sources -if [ "$($1)" != "" ] ; then \ - $(ECHO) "Importing sources from component $1"; \ - $(call Unzipper,$2,$($1)/$(SRC_ZIP_FILE)); \ -fi -endef - -# Importing optional component bin files (for install image) -define import-one-binaries -if [ "$($1)" != "" -a -f $($1)/$(BIN_ZIP_FILE) ] ; then \ - $(ECHO) "Importing binaries from component $1"; \ - $(call Unzipper,$2,$($1)/$(BIN_ZIP_FILE)); \ -fi -endef - -# Unzip zip file $2 into directory $1 (if $2 exists) -# Warning: $2 must be absolute path not relative -define Unzipper -( \ - $(MKDIR) -p $1; \ - ( $(CD) $1 && $(UNZIP) -o $2 > /dev/null ) \ -) -endef - -# Unjar directories $3 from jar file $2 into directory $1 (if $2 exists) -# Warning: $2 must be absolute path not relative -define Unjar -( \ - $(MKDIR) -p $1; \ - ( $(CD) $1 && $(BOOT_JAR_CMD) xf $2 $3 $(BOOT_JAR_JFLAGS) ) && \ - ( $(CD) $1 && $(java-vm-cleanup) ) \ -) -endef - -# Import all component sources into directory $1 -define import-component-sources -$(call import-one-sources,LANGTOOLS_DIST,$1) -$(call import-one-sources,CORBA_DIST,$1) -$(call import-one-sources,JAXP_DIST,$1) -$(call import-one-sources,JAXWS_DIST,$1) -endef - -# Import all component docs into directory $1 (optional) -define import-component-docs -$(call import-one-docs,LANGTOOLS_DIST,$1) -$(call import-one-docs,CORBA_DIST,$1) -$(call import-one-docs,JAXP_DIST,$1) -$(call import-one-docs,JAXWS_DIST,$1) -endef - -# Import all component bins into directory $1 (optional) -define import-component-binaries -$(call import-one-binaries,LANGTOOLS_DIST,$1) -$(call import-one-binaries,CORBA_DIST,$1) -$(call import-one-binaries,JAXP_DIST,$1) -$(call import-one-binaries,JAXWS_DIST,$1) -if [ "$(CORBA_DIST)" = "" ] ; then \ - $(MKDIR) -p $(OUTPUTDIR)/lib ; \ - ( $(CD) $(JDK_IMPORT_PATH) && $(CP) $(IMPORT_CORBA_BINARIES) $(ABS_OUTPUTDIR)/lib ) ; \ -fi -endef - -# Import all component classes into directory $1 -# Here we special case classes coming from JDK when component not supplied -define import-component-classes -$(ECHO) "Import classes from $(JDK_IMPORT_PATH)" -if [ "$(IMPORT_TOOLS_PACKAGES)" != "" ] ; then \ - $(call Unjar,$1,$(JDK_RESOURCES_JAR),$(IMPORT_TOOLS_PACKAGES)); \ - $(call Unjar,$1,$(JDK_TOOLS_JAR),$(IMPORT_TOOLS_PACKAGES)); \ -fi -if [ "$(IMPORT_RT_PACKAGES)" != "" ] ; then \ - $(call Unjar,$1,$(JDK_RESOURCES_JAR),$(IMPORT_RT_PACKAGES)); \ - $(call Unjar,$1,$(JDK_RT_JAR),$(IMPORT_RT_PACKAGES)); \ -fi -$(call import-one-classes,LANGTOOLS_DIST,$1) -$(call import-one-classes,CORBA_DIST,$1) -$(call import-one-classes,JAXP_DIST,$1) -$(call import-one-classes,JAXWS_DIST,$1) -endef - -# Clean up import files -define import-component-sources-clean -$(RM) -r $1 -endef -define import-component-docs-clean -$(RM) -r $1 -endef -define import-component-classes-clean -$(RM) -r $(IMPORT_TOOLS_PACKAGES:%=$1/%) -$(RM) -r $(IMPORT_RT_PACKAGES:%=$1/%) -endef - diff --git a/jdk/makefiles/common/internal/NativeCompileRules.gmk b/jdk/makefiles/common/internal/NativeCompileRules.gmk deleted file mode 100644 index 68d5eca4d69..00000000000 --- a/jdk/makefiles/common/internal/NativeCompileRules.gmk +++ /dev/null @@ -1,238 +0,0 @@ -# -# Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Native C/C++ Compile Rules -# - --include $(SPEC) --include $(VARS) - -COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c -COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c - -# -# INCREMENTAL_BUILD: Record the #include file dependencies. -# -# NOTE: We build make include files with the suffix -# $(DEPEND_SUFFIX) on every compilation. These are initially -# created as temp files just in case a ^C kills it in the middle. -# Compiler is smart enough to handle ^C and not create the .o file, or -# is supposed to be that smart, but the .$(DEPEND_SUFFIX) file -# creation here isn't. -# These .$(DEPEND_SUFFIX) files are included by Library.gmk and -# Program.gmk, when they exist (Search for 'make dependencies'). -# - -ifeq ($(INCREMENTAL_BUILD),true) - -$(OBJDIR)/%.$(DEPEND_SUFFIX): %.c - @$(prep-target) - @$(ECHO) "Creating $@" - @$(RM) $@.temp - @$(CC) $(CC_DEPEND) $(CPPFLAGS) $< 2> $(DEV_NULL) | \ - $(CC_DEPEND_FILTER) > $@.temp - @$(MV) $@.temp $@ - -$(OBJDIR)/%.$(DEPEND_SUFFIX): %.cpp - @$(prep-target) - @$(ECHO) "Creating $@" - @$(RM) $@.temp - @$(CXX) $(CC_DEPEND) $(CPPFLAGS) $(CXXFLAGS) $< 2> $(DEV_NULL) | \ - $(CC_DEPEND_FILTER) > $@.temp - @$(MV) $@.temp $@ - -endif # INCREMENTAL_BUILD - -# -# C, C++, asm files. -# -# Normal or parallel compile rule is the same, but batch compiles require -# we save up the sources files that use the same compile line so that we -# can do one compile line. -# - -ifneq ($(COMPILE_APPROACH), batch) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.cpp - @$(prep-target) - $(COMPILE.cc) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -else - - # - # Batch compiling might be faster if the compiler was smart about recognizing - # optimization opportunities available when all files are being compiled - # the same way. Unfortunately this is rare. - # Automatic pre-compiled headers (pch) might be a possibility so we - # add any auto pch options here. - # So we save all the source files that have the same compile line as the - # first file. A normal compile pass is made after the batch compile - # to catch anything missed. - # If the compilers had a -o option that allowed us to direct where to - # write the object files to, then we would not need to save the object - # file list or move them from the make directory to the build directory. - # - - # Source names - COMPILE_LIST.c = $(OBJDIR)/.source_names_c - COMPILE_LIST.cpp = $(OBJDIR)/.source_names_cpp - - # Object file list - COMPILE_OBJ_LIST.c = $(OBJDIR)/.obj_names_c - COMPILE_OBJ_LIST.cpp = $(OBJDIR)/.obj_names_cpp - - # The compile line - COMPILE_BATCH.c = $(OBJDIR)/.compile_c - COMPILE_BATCH.cpp = $(OBJDIR)/.compile_cpp - - # The compile line for the current target - THIS_COMPILE_BATCH.c = $(COMPILE_BATCH.c)-$(@F) - THIS_COMPILE_BATCH.cpp = $(COMPILE_BATCH.cpp)-$(@F) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c - @$(prep-target) - @$(ECHO) "$(COMPILE.c) $(CFLAGS_GPROF)" > $(THIS_COMPILE_BATCH.c) - @if [ ! -s $(COMPILE_BATCH.c) ] ; then \ - $(CP) $(THIS_COMPILE_BATCH.c) $(COMPILE_BATCH.c) ; \ - $(ECHO) $< > $(COMPILE_LIST.c); \ - $(ECHO) $(@F) > $(COMPILE_OBJ_LIST.c); \ - elif [ "`$(DIFF) -w -b $(THIS_COMPILE_BATCH.c) $(COMPILE_BATCH.c)`" \ - = "" ] ; then \ - $(ECHO) $< >> $(COMPILE_LIST.c); \ - $(ECHO) $(@F) >> $(COMPILE_OBJ_LIST.c); \ - fi - @$(RM) $(THIS_COMPILE_BATCH.c) - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.cpp - @$(prep-target) - @$(ECHO) "$(COMPILE.cc) $(CFLAGS_GPROF)" > $(THIS_COMPILE_BATCH.cpp) - @if [ ! -s $(COMPILE_BATCH.cpp) ] ; then \ - $(CP) $(THIS_COMPILE_BATCH.cpp) $(COMPILE_BATCH.cpp) ; \ - $(ECHO) $< > $(COMPILE_LIST.cpp); \ - $(ECHO) $(@F) > $(COMPILE_OBJ_LIST.cpp); \ - elif [ "`$(DIFF) -w -b $(THIS_COMPILE_BATCH.cpp) $(COMPILE_BATCH.cpp)`"\ - = "" ] ; then \ - $(ECHO) $< >> $(COMPILE_LIST.cpp); \ - $(ECHO) $(@F) >> $(COMPILE_OBJ_LIST.cpp); \ - fi - @$(RM) $(THIS_COMPILE_BATCH.cpp) - @$(check-conventions) - -batch_compile: $(FILES_o) - @$(ECHO) "Doing batch compilations" - @if [ -s $(COMPILE_LIST.c) ] ; then \ - $(ECHO) "$(COMPILE.c) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.c)`" ; \ - ( $(COMPILE.c) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.c)` && \ - $(ECHO) "$(MV) `$(CAT) $(COMPILE_OBJ_LIST.c)` $(OBJDIR)" && \ - $(MV) `$(CAT) $(COMPILE_OBJ_LIST.c)` $(OBJDIR) ) || exit 1 ; \ - fi - @if [ -s $(COMPILE_LIST.cpp) ] ; then \ - $(ECHO) "$(COMPILE.cc) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.cpp)`" ; \ - ( $(COMPILE.cc) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.cpp)` && \ - $(ECHO) "$(MV) `$(CAT) $(COMPILE_OBJ_LIST.cpp)` $(OBJDIR)" && \ - $(MV) `$(CAT) $(COMPILE_OBJ_LIST.cpp)` $(OBJDIR) ) || exit 1 ; \ - fi - @$(RM) $(COMPILE_BATCH.c) $(COMPILE_LIST.c) $(COMPILE_OBJ_LIST.c) - @$(RM) $(COMPILE_BATCH.cpp) $(COMPILE_LIST.cpp) $(COMPILE_OBJ_LIST.cpp) - -endif - -# newer as does not handle c++ style comments -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.s - ifneq ($(CC_VERSION), gcc) - @$(prep-target) - $(COMPILE.s) $(CC_OBJECT_OUTPUT_FLAG)$@ $< - else - @$(prep-target) - $(CPP) -x assembler-with-cpp $< | $(COMPILE.s) -o $@ - endif - @$(check-conventions) - -# Obj-C files (Mac OS X only). -ifeq ($(PLATFORM), macosx) -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.m - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.mm - @$(prep-target) - $(COMPILE.cc) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) -endif # PLATFORM - -# -# Quick hack for making the compiler generate just the assembly file. -# $ gnumake obj/sparc/myfile.s -# -$(OBJDIR)/%.s: %.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ -S $< - @$(check-conventions) - -# remove the intermediate files from the directories. -# (If VARIANT=OPT, this removes all debug and fastdebug files too) -clobber clean:: - $(RM) -r $(OBJDIR) - $(RM) -r $(OBJDIR)_* - -# -# Lint support -# (The 'lint' rule below is an older rule not using the .$(LINT_SUFFIX) files) -# - -ifeq ($(PLATFORM), solaris) -$(OBJDIR)/%.$(LINT_SUFFIX): %.c - @$(prep-target) - $(LINT.c) -dirout=$(OBJDIR) -c $< -lint.clean: - $(RM) $(OBJDIR)/*.$(LINT_SUFFIX) -# Old rule -lint: $(FILES_c) - ifneq ($(FILES_c),) - $(LINT.c) -Ncheck -Nlevel=3 $? $(LDLIBS) > lint.$(ARCH) 2>&1 - endif -endif - -.PHONY: batch_compile - - diff --git a/jdk/makefiles/common/internal/Resources.gmk b/jdk/makefiles/common/internal/Resources.gmk deleted file mode 100644 index 2b5c1e7bd16..00000000000 --- a/jdk/makefiles/common/internal/Resources.gmk +++ /dev/null @@ -1,262 +0,0 @@ -# -# Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Generic mechanism for installing properties files, resource bundles, -# and other resource files. -# -# FILES_properties should be defined. -# FILES_compiled_properties should be defined. -# -# If COMPILED_PROPERTIES_SUPERCLASS is defined, ALL the FILES_properties -# files will be compiled into java with this super class. -# -# You can add locales to LOCALE_SUFFIXES explicitly, or use the -# LOCALE_SET_DEFINITION variable to add some pre-defined locale lists. -# The LOCALE_SET_DEFINITION can have the value: jre, plugin, or jdk. -# -# Resource bundles to be installed are identified using the following variables. -# Note that only the file name of the base bundle is given; localized versions -# are added automatically. For Java files, use a format suitable for inclusion -# in the FILES_java list; dito for properties, all relative paths. -# -# NEW_RESOURCE_BUNDLES_JAVA - new resource bundles implemented in -# Java, not localized -# RESOURCE_BUNDLES_JAVA - resource bundles implemented in -# Java, localized -# -# The following variable is now used for most .properties files in the JDK. -# These properties files are converted into java and compiled with javac. -# The resulting .class files are usually smaller and are always faster to load. -# The relative path to the properties file becomes a relative path to a -# java source file. -# -# RESOURCE_BUNDLES_COMPILED_PROPERTIES - resource bundles implemented as -# properties files, localized -# NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES - same as above, not localized -# -# For non-compiled properties files, use the following variables: -# -# NEW_RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES - new resource bundles implemented as -# properties files, not localized -# RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES - resource bundles implemented as -# properties files, localized -# -# Other properties files to be installed are identified using the variable: -# -# OTHER_PROPERTIES -# - -include $(SPEC) -include $(SRC_ROOT)/jdk/makefiles/Tools.gmk - -# Compile properties files into java source? -ifdef COMPILED_PROPERTIES_SUPERCLASS - # Add all properties files to the compiled properties list (all or nothing) - COMPILED_PROPERTIES += $(FILES_compiled_properties) $(FILES_properties) -else - COMPILED_PROPERTIES_SUPERCLASS = ListResourceBundle - COMPILED_PROPERTIES += $(FILES_compiled_properties) -endif - -# Determine the locale suffixes needed beyond the base bundle - -ifeq ($(LOCALE_SET_DEFINITION), plugin) - LOCALE_SUFFIXES += $(PLUGIN_LOCALES) -endif -ifeq ($(LOCALE_SET_DEFINITION), jdk) - LOCALE_SUFFIXES += $(JDK_LOCALES) -endif -ifeq ($(LOCALE_SET_DEFINITION), jre) - LOCALE_SUFFIXES += $(JRE_LOCALES) -endif - -# Java files get tacked onto the standard list of files to compile -RESOURCE_BUNDLE_FILES_java += $(NEW_RESOURCE_BUNDLES_JAVA) -RESOURCE_BUNDLE_FILES_java += $(RESOURCE_BUNDLES_JAVA) \ - $(foreach file,$(RESOURCE_BUNDLES_JAVA), \ - $(foreach locale,$(LOCALE_SUFFIXES), \ - $(basename $(file))_$(locale).java)) - -# Add to java sources list -FILES_java += $(RESOURCE_BUNDLE_FILES_java) - -# Compiled properties files are translated to .java. -# The .java files are generated into GENSRCDIR. -COMPILED_PROPERTIES += $(NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES) -COMPILED_PROPERTIES += $(RESOURCE_BUNDLES_COMPILED_PROPERTIES) \ - $(foreach file,$(RESOURCE_BUNDLES_COMPILED_PROPERTIES),\ - $(foreach locale,$(LOCALE_SUFFIXES),\ - $(basename $(file))_$(locale)$(suffix $(file)))) - -# Add to java sources list -FILES_java += $(COMPILED_PROPERTIES:%.properties=%.java) - -# Non-compiled files -PROPERTIES_FILES += $(NEW_RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES) -PROPERTIES_FILES += $(RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES) \ - $(foreach file,$(RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES), \ - $(foreach locale,$(LOCALE_SUFFIXES), \ - $(basename $(file))_$(locale)$(suffix $(file)))) -# other properties -PROPERTIES_FILES += $(OTHER_PROPERTIES) - -# -# Process and strip all non-compiled properties files (in a batch mode) -# -STRIP_PROP_FILES = $(PROPERTIES_FILES:%=$(CLASSDESTDIR)/%) -# To efficiently strip properties we use one run of StripProperties. -# This macro gathers an option for use later. -STRIP_PROP_options=$(TEMPDIR)/strip_prop_options -define install-properties-file -$(install-file) -$(call chmod-file, a+rw) -@$(ECHO) "# Adding to strip properties list: $@" -$(ECHO) "$@" >> $(STRIP_PROP_options) -endef - -# Constructs command line options file -$(STRIP_PROP_options): $(STRIP_PROP_FILES) - @$(TOUCH) $@ -strip_prop_options_clean: - @$(RM) $(STRIP_PROP_options) - -# Strip the properties files -strip_all_props: $(BUILD_TOOLS) $(STRIP_PROP_options) - @if [ -s $(STRIP_PROP_options) ] ; then \ - $(ECHO) "$(TOOL_STRIPPROPERTIES) @$(STRIP_PROP_options)" ; \ - $(TOOL_STRIPPROPERTIES) @$(STRIP_PROP_options) ; \ - fi - @$(java-vm-cleanup) - -# -# Creates files in CLASSDESTDIR -# - -# In some cases, we move files from package to resources subdir -$(CLASSDESTDIR)/$(PKGDIR)/resources/%.properties: \ - $(SHARE_SRC)/classes/$(PKGDIR)/%.properties - $(install-properties-file) -$(CLASSDESTDIR)/%.properties: $(SHARE_SRC)/classes/%.properties - $(install-properties-file) -$(CLASSDESTDIR)/%.res: $(SHARE_SRC)/classes/%.res - $(install-file) -$(CLASSDESTDIR)/%.dtd: $(SHARE_SRC)/classes/%.dtd - $(install-file) -$(CLASSDESTDIR)/%.xml: $(SHARE_SRC)/classes/%.xml - $(install-file) -$(CLASSDESTDIR)/%.prp: $(SHARE_SRC)/classes/%.prp - $(install-file) - -# -# To efficiently compile properties into java sources we use one run -# of compileproperties. This macro gathers an option for use later. -# Note: The properties file and java source name can be different -# locales, e.g. zh_TW and zh_HK. The java source filename -# determines the name of the class. -COMPILE_PROP_options=$(TEMPDIR)/compile_prop_options -define add-property-java-file -@$(prep-target) -@$(ECHO) "# Adding to compile properties list: $? -> $@" -$(ECHO) "-compile $? $@ $(COMPILED_PROPERTIES_SUPERCLASS)" \ - >> $(COMPILE_PROP_options) -endef - -$(GENSRCDIR)/%.java: $(PLATFORM_SRC)/classes/%.properties - $(add-property-java-file) -$(GENSRCDIR)/%.java: $(SHARE_SRC)/classes/%.properties - $(add-property-java-file) -$(GENSRCDIR)/%.java: $(GENSRCDIR)/%.properties - $(add-property-java-file) -ifndef OPENJDK -$(GENSRCDIR)/%.java: $(CLOSED_PLATFORM_SRC)/classes/%.properties - $(add-property-java-file) -$(GENSRCDIR)/%.java: $(CLOSED_SHARE_SRC)/classes/%.properties - $(add-property-java-file) -endif - -# Create HK java file from zh_TW (explicit resource bundles only) -define create-hk-java-file -@$(prep-target) -$(CAT) $< | $(SED) -e '/class/s/_zh_TW/_zh_HK/' > $@ -endef - -# Explicit resource bundles -$(GENSRCDIR)/%_zh_HK.java: $(PLATFORM_SRC)/classes/%_zh_TW.java - $(create-hk-java-file) -$(GENSRCDIR)/%_zh_HK.java: $(SHARE_SRC)/classes/%_zh_TW.java - $(create-hk-java-file) - -# Compile of zh_HK properties just uses the zh_TW properties files -$(GENSRCDIR)/%_zh_HK.java: $(PLATFORM_SRC)/classes/%_zh_TW.properties - $(add-property-java-file) -$(GENSRCDIR)/%_zh_HK.java: $(SHARE_SRC)/classes/%_zh_TW.properties - $(add-property-java-file) - -# Simple delivery of zh_HK properties files just copies zh_TW properties files -$(CLASSDESTDIR)/%_zh_HK.properties: \ - $(PLATFORM_SRC)/classes/%_zh_TW.properties - $(install-properties-file) -$(CLASSDESTDIR)/%_zh_HK.properties: \ - $(SHARE_SRC)/classes/%_zh_TW.properties - $(install-properties-file) - -# List of java files converted from properties files needed -COMPILE_PROP_JAVA_FILES = $(COMPILED_PROPERTIES:%.properties=$(GENSRCDIR)/%.java) - -# Constructs command line options file -$(COMPILE_PROP_options): $(COMPILE_PROP_JAVA_FILES) - @$(TOUCH) $@ -compile_prop_options_clean: - @$(RM) $(COMPILE_PROP_options) - -# Make sure all are compiled, one compiler run -compile_all_props: $(BUILD_TOOLS) $(COMPILE_PROP_options) - @if [ `$(CAT) $(COMPILE_PROP_options) | $(WC) -l` -ge 1 ] ; then \ - $(MKDIR) -p $(GENSRCDIR); \ - $(ECHO) "$(TOOL_COMPILEPROPERTIES) @$(COMPILE_PROP_options)";\ - $(TOOL_COMPILEPROPERTIES) @$(COMPILE_PROP_options) ; \ - $(java-vm-cleanup); \ - fi - -# Make sure the build rule creates all the properties -resources: - -ifneq ($(strip $(PROPERTIES_FILES)),) - resources: strip_prop_options_clean strip_all_props - clobber clean:: - $(RM) $(STRIP_PROP_FILES) $(STRIP_PROP_options) -endif - -ifneq ($(strip $(COMPILED_PROPERTIES)),) - resources: compile_prop_options_clean compile_all_props - clobber clean:: - $(RM) $(COMPILE_PROP_JAVA_FILES) $(COMPILE_PROP_options) -endif - -.PHONY: resources \ - compile_prop_options_clean compile_all_props \ - strip_prop_options_clean strip_all_props - diff --git a/jdk/makefiles/common/shared/Compiler-gcc.gmk b/jdk/makefiles/common/shared/Compiler-gcc.gmk deleted file mode 100644 index 3b6923eac06..00000000000 --- a/jdk/makefiles/common/shared/Compiler-gcc.gmk +++ /dev/null @@ -1,98 +0,0 @@ -# -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# GCC Compiler settings -# - -ifeq ($(PLATFORM), windows) - - # Settings specific to Windows, pretty stale, hasn't been used - CC ?= $(COMPILER_PATH)gcc - CPP ?= $(COMPILER_PATH)gcc -E - CXX ?= $(COMPILER_PATH)g++ - CCC ?= $(COMPILER_PATH)g++ - AR ?= $(COMPILER_PATH)lib - LINK ?= $(COMPILER_PATH)link - RC ?= $(COMPILER_PATH)rc - LINK32 = $(LINK) - RSC = $(RC) - # unset any GNU Make settings of MFLAGS and MAKEFLAGS which may mess up nmake - NMAKE = MFLAGS= MAKEFLAGS= $(COMPILER_PATH)nmake -nologo - ifeq ($(ARCH_DATA_MODEL), 32) - CC_VER = UNKNOWN - else - CC_VER = UNKNOWN - endif - _LINK_VER :=$(shell $(LINK) 2>&1 | $(HEAD) -n 1) - LINK_VER :=$(call GetVersion,"$(_LINK_VER)") - -endif - -ifeq ($(PLATFORM), linux) - -# Settings specific to Linux - CC ?= $(COMPILER_PATH)gcc - CPP ?= $(COMPILER_PATH)gcc -E -# Acquire the paths to the compilers and tools - # statically link libstdc++ before C++ ABI is stablized on Linux - STATIC_CXX = true - ifeq ($(STATIC_CXX),true) - # g++ always dynamically links libstdc++, even we use "-Wl,-Bstatic -lstdc++" - # We need to use gcc to statically link the C++ runtime. gcc and g++ use - # the same subprocess to compile C++ files, so it is OK to build using gcc. - CXX ?= $(CC) - #$(COMPILER_PATH)gcc - else -# CXX = $(COMPILER_PATH)g++ - endif - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -shared - SUN_COMP_VER := $(shell $(CC) --verbose 2>&1 ) - -endif - -ifeq ($(PLATFORM), solaris) - - # Settings specific to Solaris - CC ?= $(COMPILER_PATH)gcc - CPP ?= $(COMPILER_PATH)gcc -E - CXX ?= $(COMPILER_PATH)g++ - - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -G - -endif - -# Get gcc version -_CC_VER :=$(shell $(CC) -dumpversion 2>&1 ) -CC_VER :=$(call GetVersion,"$(_CC_VER)") -CC_MAJORVER :=$(call MajorVersion,$(CC_VER)) -CC_MINORVER :=$(call MinorVersion,$(CC_VER)) - -# Name of compiler -COMPILER_NAME = GCC$(call MajorVersion,$(CC_VER)) -COMPILER_VERSION = $(COMPILER_NAME) - diff --git a/jdk/makefiles/common/shared/Compiler-llvm.gmk b/jdk/makefiles/common/shared/Compiler-llvm.gmk deleted file mode 100644 index 0b26a08cd24..00000000000 --- a/jdk/makefiles/common/shared/Compiler-llvm.gmk +++ /dev/null @@ -1,59 +0,0 @@ -# -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# LLVM Compiler settings -# - -ifeq ($(PLATFORM), macosx) - - # Settings specific to Mac OS X - ifeq ($(origin CC), default) - CC = $(COMPILER_PATH)llvm-gcc - endif - CPP = $(COMPILER_PATH)llvm-gcc -E - ifeq ($(origin CXX), default) - CXX = $(COMPILER_PATH)llvm-g++ - endif - - REQUIRED_CC_VER = 4.2.1 - - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -Wl,-install_name,@rpath/$(@F) -dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 - SUN_COMP_VER := $(shell $(CC) --verbose 2>&1 ) - - AR = $(CC) - ARFLAGS = -nostdlib -r -arch i386 -arch x86_64 -o - -endif - -# Get llvm version -_CC_VER :=$(shell $(CC) -dumpversion 2>&1 ) -CC_VER :=$(call GetVersion,"$(_CC_VER)") - -# Name of compiler -COMPILER_NAME = LLVM-GCC$(call MajorVersion,$(CC_VER)) -COMPILER_VERSION = $(COMPILER_NAME) - diff --git a/jdk/makefiles/common/shared/Compiler-msvc.gmk b/jdk/makefiles/common/shared/Compiler-msvc.gmk deleted file mode 100644 index b5007022664..00000000000 --- a/jdk/makefiles/common/shared/Compiler-msvc.gmk +++ /dev/null @@ -1,93 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# MSVC Compiler settings -# - -ifeq ($(PLATFORM), windows) - CC ?= $(COMPILER_PATH)cl - CPP ?= $(COMPILER_PATH)cl - CXX ?= $(COMPILER_PATH)cl - CCC ?= $(COMPILER_PATH)cl - AR ?= $(COMPILER_PATH)lib - LINK ?= $(COMPILER_PATH)link - LINK32 ?= $(LINK) -# TODO Add dumpbin.exe to configure - DUMPBIN ?= $(COMPILER_PATH)dumpbin.exe - - # Fill in unknown values - COMPILER_NAME=Unknown MSVC Compiler - COMPILER_VERSION= - - # unset any GNU Make settings of MFLAGS and MAKEFLAGS which may mess up nmake - NMAKE = MFLAGS= MAKEFLAGS= $(COMPILER_PATH)nmake -nologo - - # Compiler version and type (Always get word after "Version") - CC_VER := $(shell $(CC) 2>&1 | $(HEAD) -n 1 | $(SED) 's/.*\(Version.*\)/\1/' | $(NAWK) '{print $$2}') - - LINK_VER := $(shell $(LINK) | $(HEAD) -n 1 | $(NAWK) '{print $$6}') - CC_MAJORVER :=$(call MajorVersion,$(CC_VER)) - - # The VS2010 compiler is the same one used on both 32bit and 64bit - ifeq ($(CC_MAJORVER), 16) - COMPILER_NAME=Microsoft Visual Studio 10 (16.00.30319.01) - COMPILER_VERSION=VS2010 - ifeq ($(WINDOWSSDKDIR),) - WINDOWSSDKDIR := $(error WINDOWSSDKDIR cannot be empty here) - endif - ifeq ($(ARCH_DATA_MODEL), 32) - _OTHER_TOOLS_BIN = $(WINDOWSSDKDIR)/Bin - else - ifeq ($(ARCH), ia64) - _OTHER_TOOLS_BIN = $(WINDOWSSDKDIR)/Bin/ia64 - else - _OTHER_TOOLS_BIN = $(WINDOWSSDKDIR)/Bin/x64 - endif - endif - RC = $(_OTHER_TOOLS_BIN)/RC.Exe - REBASE = $(_OTHER_TOOLS_BIN)/ReBase.Exe - MT = $(_OTHER_TOOLS_BIN)/mt.exe - MTL = $(_OTHER_TOOLS_BIN)/midl.exe - endif - - # These variables can never be empty - ifndef COMPILER_PATH - COMPILER_PATH := $(error COMPILER_PATH cannot be empty here) - endif - ifndef COMPILER_VERSION - COMPILER_VERSION := $(error COMPILER_VERSION cannot be empty here) - endif - ifneq ($(COMPILER_VERSION),VS2010) - COMPILER_VERSION := $(error COMPILER_VERSION must be VS2010) - endif - - # Shared library generation flag - SHARED_LIBRARY_FLAG = -LD - # RSC is always same as RC (Not sure who uses this RSC variable) - RSC = $(RC) - -endif - diff --git a/jdk/makefiles/common/shared/Compiler-sun.gmk b/jdk/makefiles/common/shared/Compiler-sun.gmk deleted file mode 100644 index 539ba98f22a..00000000000 --- a/jdk/makefiles/common/shared/Compiler-sun.gmk +++ /dev/null @@ -1,138 +0,0 @@ -# -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Sun Studio Compiler settings -# - -# Sun Studio Compiler settings specific to Solaris -ifeq ($(PLATFORM), solaris) - CC ?= $(COMPILER_PATH)cc - CPP ?= $(COMPILER_PATH)cc -E - CXX ?= $(COMPILER_PATH)CC - LINT ?= $(COMPILER_PATH)lint - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -G - GCC =$(GCC_COMPILER_PATH)gcc -endif - -# Sun Studio Compiler settings specific to Linux -ifeq ($(PLATFORM), linux) - # This has not been tested - CC ?= $(COMPILER_PATH)cc - CPP ?= $(COMPILER_PATH)cc -E - CXX ?= $(COMPILER_PATH)CC - LINT ?= $(COMPILER_PATH)lint - # statically link libstdc++ before C++ ABI is stablized on Linux - STATIC_CXX = true - ifeq ($(STATIC_CXX),true) - # CC always dynamically links libstdc++, even we use "-Wl,-Bstatic -lstdc++" - # We need to use cc to statically link the C++ runtime. - CXX ?= $(COMPILER_PATH)cc - else - CXX ?= $(COMPILER_PATH)CC - endif - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -G -endif - -# Get compiler version -_CC_VER :=$(shell $(CC) -V 2>&1 | $(HEAD) -n 1) -CC_VER :=$(call GetVersion,"$(_CC_VER)") -CC_MAJORVER :=$(call MajorVersion,$(CC_VER)) -CC_MINORVER :=$(call MinorVersion,$(CC_VER)) - -# Name of compilers being used -COMPILER_VERSION-5.7 = SS10 -COMPILER_NAME-5.7 = Sun Studio 10 -COMPILER_VERSION-5.8 = SS11 -COMPILER_NAME-5.8 = Sun Studio 11 -COMPILER_VERSION-5.9 = SS12 -COMPILER_NAME-5.9 = Sun Studio 12 -COMPILER_VERSION-5.10 = SS12u1 -COMPILER_NAME-5.10 = Sun Studio 12 Update 1 -COMPILER_VERSION-5.11 = OSS12u2 -COMPILER_NAME-5.11 = Oracle Solaris Studio 12 Update 2 -COMPILER_VERSION = $(COMPILER_VERSION-$(CC_VER)) -COMPILER_NAME = $(COMPILER_NAME-$(CC_VER)) - -# Arch specific settings (determines type of .o files and instruction set) -# Starting in SS12 (5.9), the arch options changed. -# The assembler /usr/ccs/bin/as wants older SS11 (5.8) style options. -# Note: We need to have both 32 and 64 values at all times for awt Makefiles. -# -XARCH_OPTION_OLD/32 = -XARCH_OPTION_OLD/64 = -XARCH_OPTION_NEW/32 = -m32 -XARCH_OPTION_NEW/64 = -m64 -# Lint options are slightly different -LINT_XARCH_OPTION_OLD/32 = -LINT_XARCH_OPTION_OLD/64 = -LINT_XARCH_OPTION_NEW/32 = -m32 -LINT_XARCH_OPTION_NEW/64 = -m64 -ifeq ($(ARCH_FAMILY), sparc) - ifdef VIS_NEEDED - XARCH_OPTION_OLD/32 += -xarch=v8plusa - XARCH_OPTION_OLD/64 += -xarch=v9a - XARCH_OPTION_NEW/32 += -xarch=sparcvis - XARCH_OPTION_NEW/64 += -xarch=sparcvis - else - # Someday this should change to improve optimization on UltraSPARC - # and abandon v8, even change to sparcvis or sparcvis2, this - # abandons machines like the SPARCstation 10. - # Indications with jdk6 is that alacrity runs do not show a - # big improvement using v8plus over v8, but other benchmarks might. - XARCH_OPTION_OLD/32 += -xarch=v8 - XARCH_OPTION_OLD/64 += -xarch=v9 - # Note that this new option (SS12+) effectively means v8plus - XARCH_OPTION_NEW/32 += -xarch=sparc - XARCH_OPTION_NEW/64 += -xarch=sparc - endif - LINT_XARCH_OPTION_OLD/64 += -Xarch=v9 -endif -ifeq ($(ARCH_FAMILY), i586) - XARCH_OPTION_OLD/64 += -xarch=amd64 - LINT_XARCH_OPTION_OLD/64 += -Xarch=amd64 -endif -# Pick the options we want based on the compiler being used. (5.9 or newer) -CC_59_OR_NEWER := \ - $(shell expr $(CC_MAJORVER) \> 5 \| \ - \( $(CC_MAJORVER) = 5 \& $(CC_MINORVER) \>= 9 \) ) -ifeq ($(CC_59_OR_NEWER), 1) - XARCH_OPTION/32 = $(XARCH_OPTION_NEW/32) - XARCH_OPTION/64 = $(XARCH_OPTION_NEW/64) - LINT_XARCH_OPTION/32 = $(LINT_XARCH_OPTION_NEW/32) - LINT_XARCH_OPTION/64 = $(LINT_XARCH_OPTION_NEW/64) -else - XARCH_OPTION/32 = $(XARCH_OPTION_OLD/32) - XARCH_OPTION/64 = $(XARCH_OPTION_OLD/64) - LINT_XARCH_OPTION/32 = $(LINT_XARCH_OPTION_OLD/32) - LINT_XARCH_OPTION/64 = $(LINT_XARCH_OPTION_OLD/64) -endif -XARCH_OPTION = $(XARCH_OPTION/$(ARCH_DATA_MODEL)) -LINT_XARCH_OPTION = $(LINT_XARCH_OPTION/$(ARCH_DATA_MODEL)) -# The /usr/ccs/bin/as assembler always wants the older SS11 (5.8) options. -AS_XARCH_OPTION = $(XARCH_OPTION_OLD/$(ARCH_DATA_MODEL)) - diff --git a/jdk/makefiles/common/shared/Defs-control.gmk b/jdk/makefiles/common/shared/Defs-control.gmk deleted file mode 100644 index 3a5dc1686d2..00000000000 --- a/jdk/makefiles/common/shared/Defs-control.gmk +++ /dev/null @@ -1,143 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Common variables used by all the Java makefiles. This file should -# not contain rules. -# - -# WARNING: This file is shared with other components. -# - -ifndef JDK_MAKE_SHARED_DIR - JDK_MAKE_SHARED_DIR = $(JDK_TOPDIR)/makefiles/common/shared -endif - -ifndef HOTSPOT_TOPDIR - HOTSPOT_TOPDIR=$(TOPDIR)/hotspot -endif -ifndef LANGTOOLS_TOPDIR - LANGTOOLS_TOPDIR=$(TOPDIR)/langtools -endif -ifndef CORBA_TOPDIR - CORBA_TOPDIR=$(TOPDIR)/corba -endif -ifndef JAXP_TOPDIR - JAXP_TOPDIR=$(TOPDIR)/jaxp -endif -ifndef JAXWS_TOPDIR - JAXWS_TOPDIR=$(TOPDIR)/jaxws -endif -ifndef JDK_TOPDIR - JDK_TOPDIR=$(TOPDIR)/jdk -endif -ifndef INSTALL_TOPDIR - INSTALL_TOPDIR=$(TOPDIR)/install -endif -ifndef SPONSORS_TOPDIR - SPONSORS_TOPDIR=$(TOPDIR)/sponsors -endif -ifndef DEPLOY_TOPDIR - DEPLOY_TOPDIR=$(TOPDIR)/deploy -endif - -# Get shared platform settings -include $(JDK_MAKE_SHARED_DIR)/Platform.gmk - -# Default directory immediately above the "build" output directory (OUTPUTDIR) -BUILD_PARENT_DIRECTORY=$(TOPDIR) - -# Get platform specific settings -include $(JDK_MAKE_SHARED_DIR)/Defs.gmk - -SRC_BUNDLEDIR = $(OUTPUTDIR)/source-bundles -ABS_SRC_BUNDLEDIR = $(ABS_OUTPUTDIR)/source-bundles -BIN_BUNDLEDIR = $(OUTPUTDIR)/bundles -BIN_DEMOS_BUNDLEDIR = $(OUTPUTDIR)/demos-bundles -ABS_BIN_BUNDLEDIR = $(ABS_OUTPUTDIR)/bundles - -dummy := $(shell $(MKDIR) -p $(BIN_BUNDLEDIR)) -dummy := $(shell $(MKDIR) -p $(BIN_DEMOS_BUNDLEDIR) ) -dummy := $(shell $(MKDIR) -p $(SRC_BUNDLEDIR) ) - -TEMP_DIR = $(OUTPUTDIR)/tmp -ABS_TEMP_DIR = $(ABS_OUTPUTDIR)/tmp - -dummy := $(shell $(MKDIR) -p $(TEMP_DIR)) - -# The language version we want for this jdk build -SOURCE_LANGUAGE_VERSION=7 -# The class version we want for this jdk build -TARGET_CLASS_VERSION=7 - -# The MESSAGE, WARNING and ERROR files are used to store sanity check and -# source check messages, warnings and errors. -export ERROR_FILE := $(ABS_OUTPUTDIR)/sanityCheckErrors.txt -export WARNING_FILE := $(ABS_OUTPUTDIR)/sanityCheckWarnings.txt -export MESSAGE_FILE := $(ABS_OUTPUTDIR)/sanityCheckMessages.txt - -# source bundle generation definitions -BUNDLE_DATE := $(shell $(DATE) '+%d_%b_%Y' | $(TR) "[A-Z]" "[a-z]") -ifdef ALT_BUNDLE_DATE - BUNDLE_DATE := $(ALT_BUNDLE_DATE) -endif - -# If the update version contains non-numeric characters, we need -# to massage it into a numeric format. Unfortunately, the -# Windows VERSIONINFO resource that we stick in jvm.dll cannot -# handle non-numeric characters. We have to do this here because -# Hotspot (nmake) cannot handle calculations. So we use the -# following formula: -# COOKED_JDK_UPDATE_VERSION = JDK_UPDATE_VERSION * 10 + EXCEPTION_VERSION -# -# Here are some examples: -# 1.5.0 b01 -> 5,0,0,1 -# 1.5.0_10 b01 -> 5,0,100,1 -# 1.4.2 b01 -> 4,2,0,1 -# 1.4.2_02 b01 -> 4,2,20,1 -# 1.4.2_02a b01 -> 4,2,21,1 -# 1.4.2_02b b01 -> 4,2,22,1 -ifdef JDK_UPDATE_VERSION - VTMP := $(shell $(ECHO) $(JDK_UPDATE_VERSION) | $(TR) "abcde" "12345") - CHAR1 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 1, 1);}') - CHAR2 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 2, 1);}') - CHAR3 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 3, 1);}') - ifeq ($(CHAR3),) - CHAR3 := 0 - endif - ifeq ($(CHAR1), 0) - COOKED_JDK_UPDATE_VERSION := $(CHAR2)$(CHAR3) - else - COOKED_JDK_UPDATE_VERSION := $(CHAR1)$(CHAR2)$(CHAR3) - endif -endif - -ifneq ($(JDK_BUILD_NUMBER),) - COOKED_BUILD_NUMBER = $(shell $(ECHO) $(JDK_BUILD_NUMBER) \ - | $(SED) -e 's/^b//' | $(SED) -e 's/^0//') -else - COOKED_BUILD_NUMBER = 0 -endif - diff --git a/jdk/makefiles/common/shared/Defs-java.gmk b/jdk/makefiles/common/shared/Defs-java.gmk deleted file mode 100644 index 897b24d77a3..00000000000 --- a/jdk/makefiles/common/shared/Defs-java.gmk +++ /dev/null @@ -1,249 +0,0 @@ -# -# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Common java/javac/jdk variables used by all the Java makefiles. -# This file should not contain rules. -# - -# WARNING: This file is shared with other workspaces. -# So when it includes other files, it must use JDK_TOPDIR. -# - --include $(SPEC) - -# -# Memory related -J flags that all uses of java tools should use. -# -#JAVA_MEM_FLAGS = -Xmx$(MAX_VM_MEMORY)m -#ifeq ($(ARCH), ia64) - # Special flags for javac on ia64 to work around a VM problem with - # bad code generation during inlining (what version had this problem?): - # Suspect this may not be needed anymore. -# JAVA_MEM_FLAGS += -Xms$(MAX_VM_MEMORY)m -XX:-Inline -#else -# JAVA_MEM_FLAGS += -Xms$(MIN_VM_MEMORY)m -XX:PermSize=32m -XX:MaxPermSize=160m -#endif - -# -# All java tools (javac, javah, and javadoc) run faster with certain java -# options, this macro should be used with all these tools. -# In particular, the client VM makes these tools run faster when -# it's available. -# -ADD_CLIENT_VM_OPTION = false -ifeq ($(PLATFORM), solaris) - ADD_CLIENT_VM_OPTION = true -else - ifeq ($(ARCH_DATA_MODEL), 32) - ADD_CLIENT_VM_OPTION = true - endif -endif - -# Options for hotspot to turn off printing of options with fastdebug version -# and creating the hotspot.log file. -#JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS = \ -# -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput - -# JVM options -ifeq ($(PLATFORM), macosx) - JAVA_JVM_FLAGS = $(JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS) -Djava.awt.headless=true -else - JAVA_JVM_FLAGS = $(JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS) -endif - -#ifeq ($(ADD_CLIENT_VM_OPTION), true) -# JAVA_JVM_FLAGS += -client -#endif -#ifdef USE_HOTSPOT_INTERPRETER_MODE -# JAVA_JVM_FLAGS += -Xint -#endif - -# Various VM flags -JAVA_TOOLS_FLAGS = $(JAVA_JVM_FLAGS) $(JAVA_MEM_FLAGS) - -# The VM flags for javac -JAVAC_JVM_FLAGS = - -# 64-bit builds require a larger thread stack size. -#ifeq ($(ARCH_DATA_MODEL), 32) -# JAVAC_JVM_FLAGS += -J-XX:ThreadStackSize=768 -#else -# JAVAC_JVM_FLAGS += -J-XX:ThreadStackSize=1536 -#endif -JAVAC_JVM_FLAGS += $(JAVA_TOOLS_FLAGS:%=-J%) - -# The jar -J options are special, must be added at the end of the command line -JAR_JFLAGS = $(JAVA_TOOLS_FLAGS:%=-J%) - -# JAVA_TOOLS_DIR is the default location to find Java tools to run, if -# langtools is not available. -# This should be the latest promoted JDK javac. -ifndef JAVA_TOOLS_DIR - JAVA_TOOLS_DIR = $(JDK_IMPORT_PATH)/bin -endif - -# -# Invoking the Java compiler. In leaf makefiles, choose as follows: -# -- Use JAVAC if you want to take full control of what options get -# passed to javac. -# -- Use JAVAC_CMD if you want to take the defaults given to you. -# - -ifndef DEBUG_CLASSFILES - ifeq ($(VARIANT), DBG) - DEBUG_CLASSFILES = true - endif -endif -JAVACFLAGS = -ifeq ($(DEBUG_CLASSFILES),true) - JAVACFLAGS += -g -endif -ifeq ($(JAVAC_MAX_WARNINGS), true) - JAVAC_LINT_OPTIONS += -Xlint:all -endif -ifeq ($(JAVAC_WARNINGS_FATAL), true) - JAVACFLAGS += -Werror -endif - -# TODO: Workaround for CR 7063027. Remove -path eventually. -JAVAC_LINT_OPTIONS += -Xlint:-path - -JAVACFLAGS += $(JAVAC_LINT_OPTIONS) - -# -# Some licensees do not get the Security Source bundles. We will -# fall back on the prebuilt jce.jar so that we can do a best -# attempt at building. If sources exist, we always want to -# build/use the most recent source instead of an older jce.jar, whether -# built implicitly/explicitly. -# -ifeq ($(wildcard $(SHARE_SRC)/classes/javax/crypto/Cipher.java),) - JCE_PATH = $(CLASSPATH_SEPARATOR)$(LIBDIR)/jce.jar -endif - -# Add the source level -SOURCE_LANGUAGE_VERSION = 7 -LANGUAGE_VERSION = -source $(SOURCE_LANGUAGE_VERSION) -JAVACFLAGS += $(LANGUAGE_VERSION) - -# Add the class version we want -TARGET_CLASS_VERSION = 7 -CLASS_VERSION = -target $(TARGET_CLASS_VERSION) -JAVACFLAGS += $(CLASS_VERSION) -JAVACFLAGS += -encoding ascii -JAVACFLAGS += "-Xbootclasspath:$(CLASSBINDIR)$(JCE_PATH)" -JAVACFLAGS += $(OTHER_JAVACFLAGS) - -# Needed for javah -JAVAHFLAGS += -bootclasspath "$(CLASSBINDIR)$(JCE_PATH)" - -# Needed for javadoc to ensure it builds documentation -# against the newly built classes -JAVADOCFLAGS += -bootclasspath $(CLASSBINDIR) - -# Needed for JAVADOC and BOOT_JAVACFLAGS -NO_PROPRIETARY_API_WARNINGS = -XDignore.symbol.file=true - -# Langtools -LANGTOOLS_DIST ?= $(ALT_LANGTOOLS_DIST) - -ifdef LANGTOOLS_DIST - JAVAC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javac.jar - JAVAH_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javah.jar - JAVADOC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javadoc.jar - DOCLETS_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/doclets.jar - JAVAC_CMD = $(BOOT_JAVA_CMD) \ - "-Xbootclasspath/p:$(JAVAC_JAR)" \ - -jar $(JAVAC_JAR) $(JAVACFLAGS) - JAVAH_CMD = $(BOOT_JAVA_CMD) \ - "-Xbootclasspath/p:$(JAVAH_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)" \ - -jar $(JAVAH_JAR) $(JAVAHFLAGS) - JAVADOC_CMD = $(BOOT_JAVA_CMD) \ - "-Xbootclasspath/p:$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)$(CLASSPATH_SEPARATOR)$(DOCLETS_JAR)" \ - -jar $(JAVADOC_JAR) $(JAVADOCFLAGS) -else - # If no explicit tools, use boot tools (add VM flags in this case) - JAVAC_CMD = $(UNCYGDRIVE) $(JAVA_TOOLS_DIR)/javac $(JAVAC_JVM_FLAGS) \ - $(JAVACFLAGS) - JAVAH_CMD = $(UNCYGDRIVE) $(JAVA_TOOLS_DIR)/javah \ - $(JAVAHFLAGS) - JAVADOC_CMD = $(UNCYGDRIVE) $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%) \ - $(JAVADOCFLAGS) -endif - -# Override of what javac to use (see deploy workspace) -#ifdef JAVAC -# JAVAC_CMD = $(JAVAC) -#endif - -# -# The bootstrap java compiler (defined as the javac in the ALT_BOOTDIR jdk). -# Will be used to compile java code used to build the jdk, e.g. class files -# created by this compiler will NOT become part of this built jdk, but just -# used to build this jdk, e.g. run with the java in the ALT_BOOTDIR jdk. -# -# The javac supplied with the LANGTOOLS_DIST should be used to build the -# classes that will be put into the built jdk. But note that this javac -# will use the ALT_BOOTDIR java runtime. Any classes created by the -# LANGTOOLS_DIST javac should not be run during this jdk build and indeed -# may not even run with the ALT_BOOTDIR jdk because they may be a newer -# class file version that the ALT_BOOTDIR jdk doesn't understand. -# -# The important observation here is that the built jdk is NOT run during -# the build. If the built jdk needs to be verified that it can build this -# same jdk, then it should be supplied to the build process as the ALT_BOOTDIR -# jdk, and this resulting built jdk should be compared to the first one. -# (They should be the same). Re-using this built jdk as the ALT_BOOTDIR -# jdk will be the only way and the recommeneded way to verify the built jdk -# can bootstrap itself. -# - -# The javac options supplied to the boot javac is limited. This compiler -# should only be used to build the 'make/tools' sources, which are not -# class files that end up in the classes directory. -BOOT_JAVACFLAGS += $(JAVAC_LINT_OPTIONS) -ifeq ($(JAVAC_WARNINGS_FATAL), true) - BOOT_JAVACFLAGS += -Werror -endif - -BOOT_JAVACFLAGS += -encoding ascii -BOOT_JAR_JFLAGS += $(JAR_JFLAGS) - -BOOT_JAVACFLAGS += $(NO_PROPRIETARY_API_WARNINGS) - -BOOT_JAVA_CMD = $(UNCYGDRIVE) $(BOOTDIR)/bin/java $(JAVA_TOOLS_FLAGS) -BOOT_JAVAC_CMD = $(UNCYGDRIVE) $(BOOTDIR)/bin/javac $(JAVAC_JVM_FLAGS) $(BOOT_JAVACFLAGS) -BOOT_JAR_CMD = $(UNCYGDRIVE) $(BOOTDIR)/bin/jar -BOOT_JARSIGNER_CMD = $(UNCYGDRIVE) $(BOOTDIR)/bin/jarsigner - -# Various tools we need to run (FIXUP: Are these the right ones?) -NATIVE2ASCII = $(UNCYGDRIVE) $(BOOTDIR)/bin/native2ascii $(JAVA_TOOLS_FLAGS:%=-J%) -RMIC = $(UNCYGDRIVE) $(BOOTDIR)/bin/rmic $(JAVA_TOOLS_FLAGS:%=-J%) -IDLJ = $(UNCYGDRIVE) $(BOOTDIR)/bin/idlj $(JAVA_TOOLS_FLAGS:%=-J%) - -# Should not be used -#JAVA = /should/not/be/used - diff --git a/jdk/makefiles/common/shared/Defs-javadoc.gmk b/jdk/makefiles/common/shared/Defs-javadoc.gmk deleted file mode 100644 index c222ad10fa4..00000000000 --- a/jdk/makefiles/common/shared/Defs-javadoc.gmk +++ /dev/null @@ -1,71 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# Copyright year for beginning of Java and some of the apis -# (Needed when creating the javadocs) -FIRST_COPYRIGHT_YEAR = 1993 -DOMAPI_FIRST_COPYRIGHT_YEAR = 2005 -MIRROR_FIRST_COPYRIGHT_YEAR = 2004 -DOCLETAPI_FIRST_COPYRIGHT_YEAR = 1993 -TAGLETAPI_FIRST_COPYRIGHT_YEAR = 1993 -JDI_FIRST_COPYRIGHT_YEAR = 1999 -JAAS_FIRST_COPYRIGHT_YEAR = 1998 -JGSS_FIRST_COPYRIGHT_YEAR = 2000 -SMARTCARDIO_FIRST_COPYRIGHT_YEAR = 2005 -HTTPSERVER_FIRST_COPYRIGHT_YEAR = 2005 -MGMT_FIRST_COPYRIGHT_YEAR = 2003 -ATTACH_FIRST_COPYRIGHT_YEAR = 2005 -JCONSOLE_FIRST_COPYRIGHT_YEAR = 2006 -SCTPAPI_FIRST_COPYRIGHT_YEAR = 2009 -TRACING_FIRST_COPYRIGHT_YEAR = 2008 -TREEAPI_FIRST_COPYRIGHT_YEAR = 2005 -JNLP_FIRST_COPYRIGHT_YEAR = 1998 -PLUGIN2_FIRST_COPYRIGHT_YEAR = 2007 - -# Oracle name -FULL_COMPANY_NAME = Oracle and/or its affiliates - -# Copyright address -COMPANY_ADDRESS = 500 Oracle Parkway
Redwood Shores, CA 94065 USA. - -# The trademark symbol -TRADEMARK = ™ - -# Common copyright lines used -# The word "Copyright" might optionally be a link to the file cpyr.html. -# The first year of copyright may vary or not be available. -# The address to the company might be optional. -COMMA:= , -EMPTY:= -SPACE:=$(EMPTY) $(EMPTY) -COPYRIGHT_SYMBOL = &\#x00a9; -# Macro to construct the copyright line -# (The GNU make 3.78.1 "if" conditional is broken, fixed in GNU make 3.81) -define CopyrightLine # optionalurl optionalfirstyear optionaladdress -$(if $(strip $1),Copyright,Copyright) \ -$(COPYRIGHT_SYMBOL) $(if $2,$2${COMMA},) $(COPYRIGHT_YEAR),\ -$(FULL_COMPANY_NAME). $3 All rights reserved. -endef - diff --git a/jdk/makefiles/common/shared/Defs-linux.gmk b/jdk/makefiles/common/shared/Defs-linux.gmk deleted file mode 100644 index 1e0559dbf4a..00000000000 --- a/jdk/makefiles/common/shared/Defs-linux.gmk +++ /dev/null @@ -1,213 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Definitions for Linux. -# - -# Default for COMPILER_WARNINGS_FATAL on Linux (C & C++ compiler warnings) -ifndef COMPILER_WARNINGS_FATAL - COMPILER_WARNINGS_FATAL=false -endif - -# Linux should use parallel compilation for best build times -ifndef COMPILE_APPROACH - COMPILE_APPROACH = parallel -endif - -# Indication that we are doing an incremental build. -# This may trigger the creation of make depend files. -ifndef INCREMENTAL_BUILD - INCREMENTAL_BUILD = false -endif - -# FullPath just makes sure it never ends with a / and no duplicates -define FullPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef - -# OptFullPath: Absolute path name of a dir that might not initially exist. -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) -endef - -# Location on system where jdk installs might be -USRJDKINSTANCES_PATH =/opt/java - -# UNIXCOMMAND_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCOMMAND_PATH)" "undefined" - UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) -else - UNIXCOMMAND_PATH = /bin/ -endif - -# USRBIN_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_USRBIN_PATH)" "undefined" - USRBIN_PATH :=$(call PrefixPath,$(ALT_USRBIN_PATH)) -else - USRBIN_PATH = /usr/bin/ -endif - -# UNIXCCS_PATH: path to where the Solaris ported UNIX commands can be found -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCCS_PATH)" "undefined" - UNIXCCS_PATH :=$(call PrefixPath,$(ALT_UNIXCCS_PATH)) -else - UNIXCCS_PATH = /usr/ccs/bin/ -endif - -# SLASH_JAVA: location of all network accessable files -ifdef ALT_SLASH_JAVA - SLASH_JAVA :=$(ALT_SLASH_JAVA) -else - SLASH_JAVA := $(call DirExists,/java,/java,/NOT-SET) -endif - -# JDK_DEVTOOLS_DIR: common path for all the java devtools -ifdef ALT_JDK_DEVTOOLS_DIR - JDK_DEVTOOLS_DIR =$(ALT_JDK_DEVTOOLS_DIR) -else - JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools -endif - -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_COMPILER_PATH)" "undefined" - COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH)) -else - COMPILER_PATH =/usr/bin/ -endif - -# OPENWIN_HOME: path to where the X11 environment is installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq ($(ALT_OPENWIN_HOME),) - OPENWIN_HOME :=$(call PrefixPath,$(ALT_OPENWIN_HOME)) -else - OPENWIN_HOME ?=$(SYS_ROOT)/usr/X11R6/ -endif - -# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined" - DEVTOOLS_PATH :=$(call PrefixPath,$(ALT_DEVTOOLS_PATH)) -else - DEVTOOLS_PATH =/usr/bin/ -endif - -# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK. -# _BOOTDIR2: Second choice -ifndef ALT_BOOTDIR - _BOOTDIR1 =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/binaries/$(PLATFORM)-$(ARCH) - _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION) -endif - -# Always build headless on Linux -BUILD_HEADLESS = true -LIBM=-lm - -# GCC29_COMPILER_PATH: is the path to where the gcc 2.9 compiler is installed -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifdef ALT_GCC29_COMPILER_PATH - GCC29_COMPILER_PATH :=$(call PrefixPath,$(ALT_GCC29_COMPILER_PATH)) -else - GCC29_COMPILER_PATH = $(JDK_DEVTOOLS_DIR)/$(PLATFORM)/gcc29/usr/ -endif - -_CUPS_HEADERS_PATH=/usr/include - -# Import JDK images allow for partial builds, components not built are -# imported (or copied from) these import areas when needed. - -# BUILD_JDK_IMPORT_PATH: location of JDK install trees to import for -# multiple platforms, e.g. windows-i586, solaris-sparc, linux-586, etc. -ifdef ALT_BUILD_JDK_IMPORT_PATH - BUILD_JDK_IMPORT_PATH :=$(call FullPath,$(ALT_BUILD_JDK_IMPORT_PATH)) -else - BUILD_JDK_IMPORT_PATH = $(PROMOTED_BUILD_BINARIES) -endif - -# JDK_IMPORT_PATH: location of JDK install tree (this version) to import -ifdef ALT_JDK_IMPORT_PATH - JDK_IMPORT_PATH :=$(call FullPath,$(ALT_JDK_IMPORT_PATH)) -else - JDK_IMPORT_PATH = $(BUILD_JDK_IMPORT_PATH)/$(PLATFORM)-$(ARCH)$(_JDK_IMPORT_VARIANT) -endif - -# HOTSPOT_IMPORT_PATH: location of hotspot pre-built files -ifdef ALT_HOTSPOT_IMPORT_PATH - HOTSPOT_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_IMPORT_PATH)) -else - HOTSPOT_IMPORT_PATH ?=$(JDK_IMPORT_PATH) -endif - -# HOTSPOT_CLIENT_PATH: location of client jvm library file. -ifeq ($(ARCH_DATA_MODEL), 32) - ifdef ALT_HOTSPOT_CLIENT_PATH - HOTSPOT_CLIENT_PATH :=$(call FullPath,$(ALT_HOTSPOT_CLIENT_PATH)) - else - HOTSPOT_CLIENT_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/client - endif -endif - -# HOTSPOT_SERVER_PATH: location of server jvm library file. -ifdef ALT_HOTSPOT_SERVER_PATH - HOTSPOT_SERVER_PATH :=$(call FullPath,$(ALT_HOTSPOT_SERVER_PATH)) -else - HOTSPOT_SERVER_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/server -endif - -# Special define for checking the binaries - -# Debug builds should downgrade warnings to just info -MAPFILE_WARNING-DBG=INFO -MAPFILE_WARNING-OPT=WARNING -MAPFILE_WARNING-=WARNING -MAPFILE_WARNING=$(MAPFILE_WARNING-$(VARIANT)) - -# Macro to check it's input file for banned dependencies and verify the -# binary built properly. Relies on process exit code. -ifndef CROSS_COMPILE_ARCH -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(NM) -D -g --defined-only $1 | $(EGREP) 'SUNWprivate'`" = "" ] ; then \ - $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(LDD) $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(READELF) -d $1 | $(EGREP) 'NEEDED|RUNPATH|RPATH' ) \ -) -endef -else -define binary_file_verification -( \ - $(ECHO) "Skipping binary file verification for cross-compile build" \ -) -endef -endif - diff --git a/jdk/makefiles/common/shared/Defs-macosx.gmk b/jdk/makefiles/common/shared/Defs-macosx.gmk deleted file mode 100644 index a847d8ae9f3..00000000000 --- a/jdk/makefiles/common/shared/Defs-macosx.gmk +++ /dev/null @@ -1,252 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Definitions for Bsd. -# - -# Default for COMPILER_WARNINGS_FATAL on Bsd (C & C++ compiler warnings) -ifndef COMPILER_WARNINGS_FATAL - COMPILER_WARNINGS_FATAL=false -endif - -# Bsd should use parallel compilation for best build times -ifndef COMPILE_APPROACH - COMPILE_APPROACH = parallel -endif - -# Indication that we are doing an incremental build. -# This may trigger the creation of make depend files. -ifndef INCREMENTAL_BUILD - INCREMENTAL_BUILD = false -endif - -# FullPath just makes sure it never ends with a / and no duplicates -define FullPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef - -# OptFullPath: Absolute path name of a dir that might not initially exist. -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) -endef - -# Location on system where jdk installs might be -USRJDKINSTANCES_PATH = $(PACKAGE_PATH) - -# UNIXCOMMAND_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCOMMAND_PATH)" "undefined" - UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) -else - UNIXCOMMAND_PATH = /bin/ -endif - -# USRBIN_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_USRBIN_PATH)" "undefined" - USRBIN_PATH :=$(call PrefixPath,$(ALT_USRBIN_PATH)) -else - USRBIN_PATH = /usr/bin/ -endif - -# UNIXCCS_PATH: path to where the Solaris ported UNIX commands can be found -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCCS_PATH)" "undefined" - UNIXCCS_PATH :=$(call PrefixPath,$(ALT_UNIXCCS_PATH)) -else - UNIXCCS_PATH = /usr/ccs/bin/ -endif - -# SLASH_JAVA: location of all network accessable files -ifdef ALT_SLASH_JAVA - SLASH_JAVA :=$(ALT_SLASH_JAVA) -else - SLASH_JAVA := $(call DirExists,/java,/java,/NOT-SET) -endif - -# JDK_DEVTOOLS_DIR: common path for all the java devtools -ifdef ALT_JDK_DEVTOOLS_DIR - JDK_DEVTOOLS_DIR =$(ALT_JDK_DEVTOOLS_DIR) -else - JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools -endif - -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_COMPILER_PATH)" "undefined" - COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH)) -else - ifeq ($(OS_VENDOR), Apple) - ifndef DEVELOPER_DIR - DEVELOPER_DIR = $(shell /usr/bin/xcode-select -print-path)/usr/bin/ - endif - - COMPILER_PATH := $(call DirExists,$(DEVELOPER_DIR),/usr/bin/,/NOT-SET) - else - COMPILER_PATH =/usr/bin/ - endif -endif - -# OPENWIN_HOME: path to where the X11 environment is installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq ($(ALT_OPENWIN_HOME),) - OPENWIN_HOME :=$(call PrefixPath,$(ALT_OPENWIN_HOME)) -else - OPENWIN_HOME ?=$(X11_PATH) -endif - -# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined" - DEVTOOLS_PATH :=$(call PrefixPath,$(ALT_DEVTOOLS_PATH)) -else - DEVTOOLS_PATH =$(PACKAGE_PATH)/bin/ -endif - -# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK. -# _BOOTDIR2: Second choice -ifndef ALT_BOOTDIR - _BOOTDIR1 =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/binaries/$(PLATFORM)-$(ARCH) - _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION) -endif - -# Always build headless on Bsd -BUILD_HEADLESS = true -LIBM=-lm - -ifeq ($(OS_VENDOR), Apple) - _CUPS_HEADERS_PATH=/usr/include -else - _CUPS_HEADERS_PATH=$(PACKAGE_PATH)/include -endif - -# Import JDK images allow for partial builds, components not built are -# imported (or copied from) these import areas when needed. - -# BUILD_JDK_IMPORT_PATH: location of JDK install trees to import for -# multiple platforms, e.g. windows-i586, solaris-sparc, bsd-586, etc. -ifdef ALT_BUILD_JDK_IMPORT_PATH - BUILD_JDK_IMPORT_PATH :=$(call FullPath,$(ALT_BUILD_JDK_IMPORT_PATH)) -else - BUILD_JDK_IMPORT_PATH = $(PROMOTED_BUILD_BINARIES) -endif -BUILD_JDK_IMPORT_PATH:=$(call AltCheckValue,BUILD_JDK_IMPORT_PATH) - -# JDK_IMPORT_PATH: location of JDK install tree (this version) to import -ifdef ALT_JDK_IMPORT_PATH - JDK_IMPORT_PATH :=$(call FullPath,$(ALT_JDK_IMPORT_PATH)) -else - JDK_IMPORT_PATH = $(BUILD_JDK_IMPORT_PATH)/$(PLATFORM)-$(ARCH)$(_JDK_IMPORT_VARIANT) -endif -JDK_IMPORT_PATH:=$(call AltCheckValue,JDK_IMPORT_PATH) - -# HOTSPOT_IMPORT_PATH: location of hotspot pre-built files -ifdef ALT_HOTSPOT_IMPORT_PATH - HOTSPOT_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_IMPORT_PATH)) -else - HOTSPOT_IMPORT_PATH ?=$(JDK_IMPORT_PATH) -endif -HOTSPOT_IMPORT_PATH:=$(call AltCheckValue,HOTSPOT_IMPORT_PATH) - -# HOTSPOT_CLIENT_PATH: location of client jvm library file. -ifeq ($(ARCH_DATA_MODEL), 32) - ifdef ALT_HOTSPOT_CLIENT_PATH - HOTSPOT_CLIENT_PATH :=$(call FullPath,$(ALT_HOTSPOT_CLIENT_PATH)) - else - HOTSPOT_CLIENT_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/client - endif - HOTSPOT_CLIENT_PATH:=$(call AltCheckValue,HOTSPOT_CLIENT_PATH) -endif - -# HOTSPOT_SERVER_PATH: location of server jvm library file. -ifdef ALT_HOTSPOT_SERVER_PATH - HOTSPOT_SERVER_PATH :=$(call FullPath,$(ALT_HOTSPOT_SERVER_PATH)) -else - HOTSPOT_SERVER_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/server -endif -HOTSPOT_SERVER_PATH:=$(call AltCheckValue,HOTSPOT_SERVER_PATH) - -# Special define for checking the binaries - -# Debug builds should downgrade warnings to just info -MAPFILE_WARNING-DBG=INFO -MAPFILE_WARNING-OPT=WARNING -MAPFILE_WARNING-=WARNING -MAPFILE_WARNING=$(MAPFILE_WARNING-$(VARIANT)) - -# Macro to check it's input file for banned dependencies and verify the -# binary built properly. Relies on process exit code. -ifndef CROSS_COMPILE_ARCH -ifeq ($(OS_VENDOR), Apple) -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(NM) -g $1 | $(EGREP) 'SUNWprivate'`" = "" ] ; then \ - $(ECHO) "WARNING: File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(OTOOL) -L $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(OTOOL) -l $1 | $(EGREP) 'path ' ) \ -) || true -endef -else -ifeq ($(OS_VENDOR), OpenBSD) -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(OBJDUMP) -T $1 | $(EGREP) '[0-9a-f]* g *DF \.text.*SUNWprivate'`" = "" ] ; then \ - $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(LDD) $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(READELF) -d $1 | $(EGREP) 'NEEDED|RUNPATH|RPATH' ) \ -) || true -endef -else -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(NM) -D -g --defined-only $1 | $(EGREP) 'SUNWprivate'`" = "" ] ; then \ - $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(LDD) $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(READELF) -d $1 | $(EGREP) 'NEEDED|RUNPATH|RPATH' ) \ -) -endef -endif # OS_VENDOR == OpenBSD -endif # OS_VENDOR == Apple -else -define binary_file_verification -( \ - $(ECHO) "Skipping binary file verification for cross-compile build" \ -) -endef -endif - diff --git a/jdk/makefiles/common/shared/Defs-solaris.gmk b/jdk/makefiles/common/shared/Defs-solaris.gmk deleted file mode 100644 index cd7fa15d27c..00000000000 --- a/jdk/makefiles/common/shared/Defs-solaris.gmk +++ /dev/null @@ -1,239 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Definitions for Solaris. -# - -# Default for COMPILER_WARNINGS_FATAL on Solaris (C & C++ compiler warnings) -ifndef COMPILER_WARNINGS_FATAL - COMPILER_WARNINGS_FATAL=false -endif - -# Solaris should use parallel compilation for best build times -ifndef COMPILE_APPROACH - COMPILE_APPROACH = parallel -endif - -# Indication that we are doing an incremental build. -# This may trigger the creation of make depend files. -ifndef INCREMENTAL_BUILD - INCREMENTAL_BUILD = false -endif - -# FullPath just makes sure it never ends with a / and no duplicates -define FullPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef - -# OptFullPath: Absolute path name of a dir that might not initially exist. -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) -endef - -# Location on system where jdk installs might be -USRJDKINSTANCES_PATH =/usr/jdk/instances - -# UNIXCOMMAND_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCOMMAND_PATH)" "undefined" - UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) -else - UNIXCOMMAND_PATH = /usr/bin/ -endif - -# UNIXCCS_PATH: path to where the less common UNIX commands can be found -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_UNIXCCS_PATH)" "undefined" - UNIXCCS_PATH :=$(call PrefixPath,$(ALT_UNIXCCS_PATH)) -else - UNIXCCS_PATH = /usr/ccs/bin/ -endif - -# SLASH_JAVA: location of all network accessable files -ifdef ALT_SLASH_JAVA - SLASH_JAVA :=$(ALT_SLASH_JAVA) -else - SLASH_JAVA := $(call DirExists,/java,/java,/NOT-SET) -endif - -# JDK_DEVTOOLS_DIR: common path for all the java devtools -ifdef ALT_JDK_DEVTOOLS_DIR - JDK_DEVTOOLS_DIR =$(ALT_JDK_DEVTOOLS_DIR) -else - JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools -endif - -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_COMPILER_PATH)" "undefined" - COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH)) -else - # If the place where we keep a set of Sun Studio compilers doesn't exist, - # try and use /opt/SUNWspro, the default location for the SS compilers. - # (DirExists checks for this path twice, an automount double check) - _SUNSTUDIO_SET_ROOT=$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/SUNWspro - SUNSTUDIO_SET_ROOT:=$(call DirExists,$(_SUNSTUDIO_SET_ROOT),$(_SUNSTUDIO_SET_ROOT),) - ifneq ($(SUNSTUDIO_SET_ROOT),) - COMPILER_PATH =$(SUNSTUDIO_SET_ROOT)/$(REQUIRED_COMPILER_VERSION)/bin/ - else - COMPILER_PATH =/opt/SUNWspro/bin/ - endif -endif - -# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined" - DEVTOOLS_PATH :=$(call PrefixPath,$(ALT_DEVTOOLS_PATH)) -else - ifdef ALT_JDK_DEVTOOLS_DIR - DEVTOOLS_PATH =$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/bin/ - else - ifdef OPENJDK - DEVTOOLS_PATH = /usr/bin/ - else - DEVTOOLS_PATH =$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/bin/ - endif - endif -endif - -# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK. -# _BOOTDIR2: Second choice -ifndef ALT_BOOTDIR - _BOOTDIR1 =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/binaries/$(PLATFORM)-$(ARCH) - _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION) -endif - -# GCC_COMPILER_PATH: path to where the gcc/g++ compiler and tools are installed -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_GCC_COMPILER_PATH)" "undefined" - GCC_COMPILER_PATH :=$(call PrefixPath,$(ALT_GCC_COMPILER_PATH)) -else - GCC_COMPILER_PATH = $(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/gnucc/bin/ -endif - - -# Always build headless on Solaris -BUILD_HEADLESS = true - -_CUPS_HEADERS_PATH=/opt/sfw/cups/include - -# Import JDK images allow for partial builds, components not built are -# imported (or copied from) these import areas when needed. - -# BUILD_JDK_IMPORT_PATH: location of JDK install trees to import for -# multiple platforms, e.g. windows-i586, solaris-sparc, linux-586, etc. -ifdef ALT_BUILD_JDK_IMPORT_PATH - BUILD_JDK_IMPORT_PATH :=$(call FullPath,$(ALT_BUILD_JDK_IMPORT_PATH)) -else - BUILD_JDK_IMPORT_PATH = $(PROMOTED_BUILD_BINARIES) -endif - -# JDK_IMPORT_PATH: location of previously built JDK (this version) to import -ifdef ALT_JDK_IMPORT_PATH - JDK_IMPORT_PATH :=$(call FullPath,$(ALT_JDK_IMPORT_PATH)) -else - JDK_IMPORT_PATH = $(BUILD_JDK_IMPORT_PATH)/$(PLATFORM)-$(ARCH)$(_JDK_IMPORT_VARIANT) -endif - -# HOTSPOT_IMPORT_PATH: location of hotspot pre-built files -ifdef ALT_HOTSPOT_IMPORT_PATH - HOTSPOT_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_IMPORT_PATH)) -else - HOTSPOT_IMPORT_PATH ?=$(JDK_IMPORT_PATH) -endif - -# HOTSPOT_CLIENT_PATH: location of client jvm library file. -ifeq ($(ARCH_DATA_MODEL), 32) - ifdef ALT_HOTSPOT_CLIENT_PATH - HOTSPOT_CLIENT_PATH :=$(call FullPath,$(ALT_HOTSPOT_CLIENT_PATH)) - else - HOTSPOT_CLIENT_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/client - endif -endif - -# HOTSPOT_SERVER_PATH: location of server jvm library file. -ifdef ALT_HOTSPOT_SERVER_PATH - HOTSPOT_SERVER_PATH :=$(call FullPath,$(ALT_HOTSPOT_SERVER_PATH)) -else - HOTSPOT_SERVER_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/server -endif - -# Special define for checking the binaries - -# Debug builds should downgrade warnings to just info -MAPFILE_WARNING-DBG=INFO -MAPFILE_WARNING-OPT=WARNING -MAPFILE_WARNING-=WARNING -MAPFILE_WARNING=$(MAPFILE_WARNING-$(VARIANT)) - -# Some libraries do not have mapfiles for multiple reasons. -# These libraries for sparc and sparcv9 are exceptions to the mapfile rule: -# libjdgaSUNWafb.so -# libjdgaSUNWcg6.so -# libjdgaSUNWffb.so -# libjdgaSUNWm64.so -# libxinerama.so -# The library libJdbcOdbc.so has also been given an exception. -# The JNI/JVMTI demo libraries are also missing mapfiles, no exceptions yet. -ifeq ($(ARCH_FAMILY),sparc) - MAPFILE_EXCEPTIONS = \ - (libJdbcOdbc|libjdgaSUNWafb|libjdgaSUNWcg6|libjdgaSUNWffb|libjdgaSUNWm64|libxinerama) -else - MAPFILE_EXCEPTIONS = (libJdbcOdbc) -endif - -# Macro to check it's input file for banned dependencies and verify the -# binary built properly. Relies on process exit code. -ifndef CROSS_COMPILE_ARCH -ifneq (,$(DUMP)) -define binary_file_verification # binary_file -( \ - $(ECHO) "Checking for mapfile use in: $1" && \ - if [ "`$(ECHO) $(basename $(notdir $1)) | $(EGREP) '$(MAPFILE_EXCEPTIONS)'`" = "" \ - -a "`$(NM) -g -D $1 | $(EGREP) -v 'UNDEF' | $(EGREP) 'SUNWprivate'`" = "" ] ; then \ - $(ECHO) "$(MAPFILE_WARNING): File was not built with a mapfile: $1"; \ - fi && \ - $(ECHO) "Library loads for: $1" && \ - $(LDD) $1 && \ - $(ECHO) "RUNPATH for: $1" && \ - ( $(DUMP) -L -v $1 | $(EGREP) 'NEEDED|RUNPATH|RPATH' ) \ -) -endef -else -define binary_file_verification -( \ - $(ECHO) "Skipping binary file verification since no dump command found" \ -) -endef -endif -else -define binary_file_verification -( \ - $(ECHO) "Skipping binary file verification for cross-compile build" \ -) -endef -endif - diff --git a/jdk/makefiles/common/shared/Defs-versions.gmk b/jdk/makefiles/common/shared/Defs-versions.gmk deleted file mode 100644 index fba70370ba2..00000000000 --- a/jdk/makefiles/common/shared/Defs-versions.gmk +++ /dev/null @@ -1,215 +0,0 @@ -# -# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# WARNING: This file is shared with other workspaces. -# - -# This file needs these set: PLATFORM, ARCH_FAMILY, and ARCH_DATA_MODEL. - -# Windows uses Microsoft compilers by default -ifeq ($(PLATFORM), windows) - override CC_VERSION = msvc -endif - -# Solaris uses Sun Studio compilers by default -ifeq ($(PLATFORM), solaris) - override CC_VERSION = sun -endif - -# Linux uses GNU compilers by default -ifeq ($(PLATFORM), linux) - override CC_VERSION = gcc -endif - -# Mac OS X uses LLVM by default -ifeq ($(PLATFORM), macosx) - override CC_VERSION = llvm -endif - -########################################################################## -# -# List of JDK official minimum, expected, or required versions: -# -# REQUIRED_ALSA_VERSION -# Linux only: The ALSA sound library version expected. -# -# REQUIRED_ANT_VER -# The minimum 'ant' version. -# -# REQUIRED_BOOT_VER -# The minimum boot jdk version. -# -# REQUIRED_CC_VER -# The primary C compiler version expected. -# -# REQUIRED_COMPILER_NAME -# The long descriptive name of the compiler we should use -# -# REQUIRED_COMPILER_VERSION -# The one word name that identifies the compilers being used. -# -# REQUIRED_CYGWIN_VER -# Windows only: If CYGWIN is used, the minimum CYGWIN version. -# -# REQUIRED_DXSDK_VER -# Windows only: The version of DirectX SDK expected. -# -# REQUIRED_FREETYPE_VERSION -# If we are using freetype, the freetype version expected. -# -# REQUIRED_GCC_VER -# Solaris and Linux only. The required version of gcc/g++ for the legacy OJI plugin. -# -# REQUIRED_LINK_VER -# Windows only: The version of link.exe expected. -# -# REQUIRED_MAKE_VER -# The minimum version of GNU make. -# -# REQUIRED_MKS_VER -# Windows only: If MKS used instead of CYGWIN, the minimum version of MKS. -# -# REQUIRED_OS_VARIANT_NAME -# The OS variation name required. -# Solaris: Solaris or OpenSolaris -# Windows: Windows2000, WindowsXP, Windows2003, etc. -# Linux: Fedora, RedHat, SuSE, Ubuntu, etc. -# -# REQUIRED_OS_VARIANT_VERSION -# The version number associated with the above OS variant name. -# Solaris: output of uname -r -# Windows: 5.0 for Windows2000, 5.1 for WindowsXP, 5.2 for Windows2003, etc. -# Linux: number for the variant, e.g. 9 for Fedora 9 -# -# REQUIRED_OS_VERSION -# The formal OS version number. -# Solaris & Windows: same as REQUIRED_OS_VARIANT_VERSION -# Linux: the kernel version, or output of uname -r -# -# REQUIRED_UNZIP_VER -# The minimum version of unzip. -# -# REQUIRED_ZIP_VER -# The minimum version of unzip. -# -########### -# -# Differences in the build platform from these versions may trigger warnings -# messages during the sanity checking when building the JDK. -# -# When building the OpenJDK most of these required or expected versions are -# ignored or allowed to vary widely to accomodate the many build situations -# of the OpenJDK. -# -########################################################################## - -# Solaris specific -ifeq ($(PLATFORM), solaris) - REQUIRED_OS_NAME = SunOS - REQUIRED_OS_VERSION = 5.10 - REQUIRED_OS_VARIANT_NAME = Solaris - REQUIRED_OS_VARIANT_VERSION = $(REQUIRED_OS_VERSION) - REQUIRED_COMPILER_NAME = Sun Studio 12 Update 1 - REQUIRED_COMPILER_VERSION = SS12u1 - # Cross-compilation compiler versions are target specific - # so don't set a required version if cross-compiling - ifndef CROSS_COMPILE_ARCH - ifeq ($(CC_VERSION),sun) - REQUIRED_CC_VER = 5.10 - endif - ifeq ($(CC_VERSION),gcc) - REQUIRED_CC_VER = 3.4.3 - endif - endif - REQUIRED_GCC_VER = 2.95.2 -endif - -# Linux specific -ifeq ($(PLATFORM), linux) - REQUIRED_OS_NAME = Linux - REQUIRED_OS_VERSION = 2.6 - REQUIRED_OS_VARIANT_NAME = Fedora - REQUIRED_OS_VARIANT_VERSION = 9 - REQUIRED_ALSA_VERSION = 0.9.1 - REQUIRED_COMPILER_NAME = GCC4 - REQUIRED_COMPILER_VERSION = GCC4 - REQUIRED_GCC_VER = 2.95 - # Cross-compilation compiler versions are target specific - # so don't set a required version if cross-compiling - ifndef CROSS_COMPILE_ARCH - ifeq ($(CC_VERSION),gcc) - REQUIRED_CC_VER = 4.3.0 - endif - ifeq ($(CC_VERSION),sun) - REQUIRED_CC_VER = 5.10 - endif - endif -endif - -# Mac specific -ifeq ($(PLATFORM), macosx) - REQUIRED_OS_NAME = Darwin - REQUIRED_OS_VERSION = 11.2 - REQUIRED_OS_VARIANT_NAME = MacOSX - REQUIRED_OS_VARIANT_VERSION = 10.7.2 - REQUIRED_COMPILER_NAME = GCC4 - REQUIRED_COMPILER_VERSION = GCC4 - REQUIRED_CC_VER = 4.2.1 -endif - -# Windows specific -ifeq ($(PLATFORM), windows) - REQUIRED_OS_NAME = Windows - ifeq ($(ARCH_DATA_MODEL),64) - REQUIRED_OS_VERSION = 5.2 - REQUIRED_OS_VARIANT_NAME = Windows2003 - else - REQUIRED_OS_VERSION = 5.1 - REQUIRED_OS_VARIANT_NAME = WindowsXP - endif - REQUIRED_OS_VARIANT_VERSION = $(REQUIRED_OS_VERSION) - REQUIRED_CYGWIN_VER = 4.0 - REQUIRED_MKS_VER = 6.1 - REQUIRED_DXSDK_VER = 0x0900 - ifeq ($(CC_VERSION),msvc) - REQUIRED_COMPILER_NAME = Visual Studio 10 - REQUIRED_COMPILER_VERSION = VS2010 - REQUIRED_CC_VER = 16.00.30319.01 - REQUIRED_LINK_VER = 10.00.30319.01 - endif - ifeq ($(CC_VERSION),gcc) - REQUIRED_CC_VER = 3.4.3 - endif -endif - -# Generic -REQUIRED_ANT_VER = 1.7.1 -REQUIRED_BOOT_VER = 1.7 -REQUIRED_FREETYPE_VERSION = 2.3.0 -REQUIRED_MAKE_VER = 3.81 -REQUIRED_UNZIP_VER = 5.12 -REQUIRED_ZIP_VER = 2.2 - diff --git a/jdk/makefiles/common/shared/Defs-windows.gmk b/jdk/makefiles/common/shared/Defs-windows.gmk deleted file mode 100644 index da796ee3f9f..00000000000 --- a/jdk/makefiles/common/shared/Defs-windows.gmk +++ /dev/null @@ -1,696 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Definitions for Windows. -# - -# Default for COMPILER_WARNINGS_FATAL on Windows (C++ compiler warnings) -# Level: Default is 3, 0 means none, 4 is the most but may be unreliable -# Some makefiles may have set this to 0 to turn off warnings completely, -# which also effectively creates a COMPILER_WARNINGS_FATAL=false situation. -# Program.gmk may turn this down to 2 (building .exe's). -# Windows 64bit platforms are less likely to be warning free. -# Historically, Windows 32bit builds should be mostly warning free. -# VS2010 introduced a large number of security warnings that are off by -# default but will be turned back on with SHOW_ALL_WARNINGS=true. -ifndef COMPILER_WARNING_LEVEL - COMPILER_WARNING_LEVEL=3 -endif -ifndef COMPILER_WARNINGS_FATAL - COMPILER_WARNINGS_FATAL=false -endif -ifndef SHOW_ALL_WARNINGS - SHOW_ALL_WARNINGS = false -endif - -# Windows should use parallel compilation for best build times -ifndef COMPILE_APPROACH - COMPILE_APPROACH = normal -endif - -# Indication that we are doing an incremental build. -# This may trigger the creation of make depend files. -# (This may not be working on windows yet, always force to false.) -override INCREMENTAL_BUILD = false - -# WARNING: This is extremely touch stuff, between CYGWIN vs. MKS and all -# variations of MKS and CYGWIN releases, and 32bit vs 64bit, -# this file can give you nightmares. -# -# Notes: -# Keep all paths in the windows "mixed" style except CYGWIN UNXIXCOMMAND_PATH. -# Use of PrefixPath is critical, some variables must end with / (see NOTE). -# Use of quotes is critical due to possible spaces in paths coming from -# the environment variables, be careful. -# First convert \ to / with subst, keep it quoted due to blanks, then -# use cygpath -s or dosname -s to get the short non-blank name. -# If the MKS is old and doesn't have a dosname -s, you will be forced -# to set ALT variables with the short non-space directory names. -# If dosname doesn't appear to work, we won't use it. -# The dosname utility also wants to accept stdin if it is not supplied -# any path on the command line, this is really dangerous when using -# make variables that can easily become empty, so I use: -# echo $1 | dosname -s instead of dosname -s $1 -# to prevent dosname from hanging up the make process when $1 is empty. -# The cygpath utility does not have this problem. -# The ALT values should never really have spaces or use \. -# Suspect these environment variables to have spaces and/or \ characters: -# SYSTEMROOT, SystemRoot, WINDIR, windir, PROGRAMFILES, ProgramFiles, -# DXSDK_DIR, MSTOOLS, Mstools, MSSDK, MSSdk, VCnnCOMNTOOLS, -# MSVCDIR, MSVCDir. -# So use $(subst \,/,) on them first adding quotes and placing them in -# their own variable assigned with :=, then use FullPath. -# - -ifdef USING_CYGWIN -# Macro to effectively do a toupper without an exec -define ToUpper -$(subst a,A,$(subst b,B,$(subst c,C,$(subst d,D,$(subst e,E,$(subst f,F,\ -$(subst g,G,$(subst h,H,$(subst i,I,$(subst j,J,$(subst k,K,$(subst l,L,\ -$(subst m,M,$(subst n,N,$(subst o,O,$(subst p,P,$(subst q,Q,$(subst r,R,\ -$(subst s,S,$(subst t,T,$(subst u,U,$(subst v,V,$(subst w,W,$(subst x,X,\ -$(subst y,Y,$(subst z,Z,$1)))))))))))))))))))))))))) -endef -# All possible drive letters -drives=a b c d e f g h i j k l m n o p q r s t v u w x y z -# Convert /cygdrive/ paths to the mixed style without an exec of cygpath -# Must be a path with no spaces. /cygdrive/letter is always lowercase -# and letter:/ is always uppercase coming from cygpath. -define MixedPath -$(patsubst /%,$(CYGWIN_HOME)/%,$(sort $(filter-out /cygdrive/%,$(foreach drive,$(drives),$(patsubst /cygdrive/$(drive)/%,$(call ToUpper,$(drive)):/%,$1))))) -endef -# Use FullPath to get C:/ style non-spaces path. Never ends with a /! -# We assume cygpath is available in the search path -# NOTE: Use of 'pwd' with CYGWIN will not get you a mixed style path! -define FullPath -$(if $(word 2,$1),$(shell $(CYGPATH_CMD) $1 2> $(DEV_NULL)),$(call MixedPath,$(realpath $(subst ",,$1)))) -endef -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then $(CYGPATH_CMD) "$1" 2> $(DEV_NULL); else echo "$1"; fi) -endef -else -# Temporary until we upgrade to MKS 8.7, MKS pwd returns mixed mode path -define FullPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef -define OptFullPath -$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) -endef -endif - -# System drive -ifdef SYSTEMDRIVE - _system_drive =$(SYSTEMDRIVE) -else - ifdef SystemDrive - _system_drive =$(SystemDrive) - endif -endif -_system_drive:=$(call CheckValue,_system_drive,C:) - -# UNIXCOMMAND_PATH: path to where the most common Unix commands are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -# With cygwin, just use this as is don't use FullPath on it. -ifdef ALT_UNIXCOMMAND_PATH - ifdef USING_CYGWIN - UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) - else - xALT_UNIXCOMMAND_PATH :="$(subst \,/,$(ALT_UNIXCOMMAND_PATH))" - fxALT_UNIXCOMMAND_PATH :=$(call FullPath,$(xALT_UNIXCOMMAND_PATH)) - UNIXCOMMAND_PATH :=$(call PrefixPath,$(fxALT_UNIXCOMMAND_PATH)) - endif -else - ifdef USING_CYGWIN - UNIXCOMMAND_PATH :=$(call PrefixPath,/usr/bin) - else - ifdef ROOTDIR - xROOTDIR :="$(subst \,/,$(ROOTDIR))" - _rootdir :=$(call FullPath,$(xROOTDIR)) - else - xROOTDIR :="$(_system_drive)/mksnt" - _rootdir :=$(call FullPath,$(xROOTDIR)) - endif - ifneq ($(_rootdir),) - UNIXCOMMAND_PATH :=$(call PrefixPath,$(_rootdir)/mksnt) - endif - endif -endif -UNIXCOMMAND_PATH:=$(call AltCheckSpaces,UNIXCOMMAND_PATH) - -# Get version of MKS or CYGWIN -ifndef USING_CYGWIN -_MKS_VER :=$(shell $(MKSINFO) 2>&1 | $(GREP) Release | $(TAIL) -1 | $(SED) -e 's@.*\(Release.*\)@\1@') -MKS_VER :=$(call GetVersion,$(_MKS_VER)) -# At this point, we can re-define FullPath to use DOSNAME_CMD -CHECK_MKS87:=$(call CheckVersions,$(MKS_VER),8.7) -TRY_DOSNAME:=false -ifeq ($(CHECK_MKS87),same) -TRY_DOSNAME:=true -endif -# Newer should be ok -ifeq ($(CHECK_MKS87),newer) -TRY_DOSNAME:=true -endif -ifeq ($(TRY_DOSNAME),true) -ifeq ($(shell $(UNIXCOMMAND_PATH)dosname -s $(_system_drive)/ 2> $(DEV_NULL)),$(_system_drive)/) -_DOSNAME=$(UNIXCOMMAND_PATH)dosname -DOSNAME_CMD:=$(_DOSNAME) -s -define FullPath -$(subst //,/,$(shell echo $1 | $(DOSNAME_CMD) 2> $(DEV_NULL))) -endef -endif # test dosname -s -endif # TRY_DOSNAME -endif # MKS - -# We try to get references to what we need via the default component -# environment variables, or what was used historically. - -# Process Windows values into FullPath values, these paths may have \ chars - -# System root -ifdef SYSTEMROOT - xSYSTEMROOT :="$(subst \,/,$(SYSTEMROOT))" - _system_root :=$(call FullPath,$(xSYSTEMROOT)) -else - ifdef SystemRoot - xSYSTEMROOT :="$(subst \,/,$(SystemRoot))" - _system_root :=$(call FullPath,$(xSYSTEMROOT)) - else - ifdef WINDIR - xWINDIR :="$(subst \,/,$(WINDIR))" - _system_root :=$(call FullPath,$(xWINDIR)) - else - ifdef windir - xWINDIR :="$(subst \,/,$(windir))" - _system_root :=$(call FullPath,$(xWINDIR)) - endif - endif - endif -endif -_system_root:=$(call CheckValue,_system_root,$(_system_drive)/WINNT) - -# Program Files directory -ifdef PROGRAMFILES - xPROGRAMFILES :="$(subst \,/,$(PROGRAMFILES))" -else - ifeq ($(ARCH_DATA_MODEL), 32) - xPROGRAMFILES :="$(_system_drive)/Program Files" - else - xPROGRAMFILES :="$(_system_drive)/Program Files (x86)" - endif -endif -ifeq ($(ARCH_DATA_MODEL), 32) - _program_files :=$(call FullPath,$(xPROGRAMFILES)) - _program_files32 :=$(_program_files) -else - ifdef PROGRAMW6432 - xPROGRAMW6432 :="$(subst \,/,$(PROGRAMW6432))" - else - xPROGRAMW6432 :="$(_system_drive)/Program Files" - endif - _program_files :=$(call FullPath,$(xPROGRAMW6432)) - _program_files32 :=$(call FullPath,$(xPROGRAMFILES)) - ifneq ($(word 1,$(_program_files32)),$(_program_files32)) - _program_files32:= - endif -endif -ifneq ($(word 1,$(_program_files)),$(_program_files)) - _program_files:= -endif - -# DirectX SDK -ifdef ALT_DXSDK_DRIVE - _dx_sdk_dir =$(ALT_DXSDK_DRIVE):/DXSDK -else - ifdef DXSDK_DIR - xDXSDK_DIR :="$(subst \,/,$(DXSDK_DIR))" - else - xDXSDK_DIR :="$(_system_drive)/DXSDK" - endif - _dx_sdk_dir :=$(call FullPath,$(xDXSDK_DIR)) -endif - -# Use of the Visual Studio compilers requires certain env variables be set: -# PATH should include the path to cl.exe -# INCLUDE should be defined -# LIB should be defined -# LIBPATH should be defined -# VS100COMNTOOLS should be defined -# WINDOWSSDKDIR should be defined -# The 7.0a path is from VS2010 Pro, the 7.1 path is the standalone SDK. -# For 64bit either will work for us. -# If a developer chooses to install the standalone SDK in some other -# location, then they need to set WINDOWSSDKDIR. -# -# Compilers for 64bit may be from the free SDK, or Visual Studio Professional. -# The free Express compilers don't contain 64 bit compilers, which is why -# you instead need the SDK. -# Release enginering will use VS2010 Pro, so the frequency of testing of -# SDK based builds will depend entirely on individual usage. - -# We only need to do this once -ifndef VS2010_EXISTS - # The 2 key paths we need are WINDOWSSDKDIR and VS100COMNTOOLS. - # If not defined try to see if default location exists. - # If defined make sure that the path has no spaces. - # Finally, export path with no spaces so logic minimizes FullPath calls. - ifndef WINDOWSSDKDIR - # The 7.0a SDK is the second choice. - xWINDOWSSDKDIR :="$(_program_files32)/Microsoft SDKs/Windows/v7.0a/" - fWINDOWSSDKDIR :=$(call FullPath,$(xWINDOWSSDKDIR)) - # The 7.1 SDK is the second choice. - ifeq ($(fWINDOWSSDKDIR),) - xWINDOWSSDKDIR :="$(_program_files32)/Microsoft SDKs/Windows/v7.1/" - fWINDOWSSDKDIR :=$(call FullPath,$(xWINDOWSSDKDIR)) - endif - else - ifneq ($(word 2,$(WINDOWSSDKDIR)),) - xWINDOWSSDKDIR :="$(subst \,/,$(WINDOWSSDKDIR))" - fWINDOWSSDKDIR :=$(call FullPath,$(xWINDOWSSDKDIR)) - else - fWINDOWSSDKDIR :=$(WINDOWSSDKDIR) - endif - endif - ifneq ($(fWINDOWSSDKDIR),) - WINDOWSSDKDIR :=$(fWINDOWSSDKDIR)/ - endif - ifndef VS100COMNTOOLS - xVS100COMNTOOLS :="$(_program_files32)/Microsoft Visual Studio 10.0/Common7/Tools/" - fVS100COMNTOOLS :=$(call FullPath,$(xVS100COMNTOOLS)) - else - xVS100COMNTOOLS :="$(subst \,/,$(VS100COMNTOOLS))" - ifneq ($(word 2,$(VS100COMNTOOLS)),) - fVS100COMNTOOLS :=$(call FullPath,$(xVS100COMNTOOLS)) - else - fVS100COMNTOOLS :=$(xVS100COMNTOOLS) - endif - endif - ifneq ($(fVS100COMNTOOLS),) - VS100COMNTOOLS :=$(fVS100COMNTOOLS)/ - endif - # Check to see that both exist - ifeq ($(WINDOWSSDKDIR),) - _vs2010_message := No WINDOWSSDKDIR found on system. $(_vs2010_message) - VS2010_EXISTS := false - endif - ifeq ($(VS100COMNTOOLS),) - _vs2010_message := No VS100COMNTOOLS found on system. $(_vs2010_message) - VS2010_EXISTS := false - endif - ifeq ($(VS2010_EXISTS),false) - x:=$(warning WARNING: No VS2010 available. $(_vs2010_message)) - VS100COMNTOOLS := - WINDOWSSDKDIR := - else - VS2010_EXISTS := true - _msvc_dir :=$(VS100COMNTOOLS)/../../Vc - endif - export VS2010_EXISTS - export VS100COMNTOOLS - export WINDOWSSDKDIR -endif - -ifneq ($(VS2010_EXISTS),true) - x:=$(error ERROR: No VS2010 found on system.) -endif - -# VS2010 Compiler root directory -_msvc_dir :=$(VS100COMNTOOLS)/../../Vc -# SDK root directory -_ms_sdk :=$(WINDOWSSDKDIR) -# Compiler bin directory and redist directory -ifeq ($(ARCH_DATA_MODEL), 32) - _compiler_bin :=$(_msvc_dir)/Bin - _redist_sdk :=$(call FullPath,$(_msvc_dir)/redist/x86/Microsoft.VC100.CRT) -endif -ifeq ($(ARCH_DATA_MODEL), 64) - _compiler_bin :=$(_msvc_dir)/bin/amd64 - _redist_sdk :=$(call FullPath,$(_msvc_dir)/redist/x64/Microsoft.VC100.CRT) -endif -ifeq ($(_redist_sdk),) - _redist_sdk :=$(_system_root)/system32 -endif - -# Location on system where jdk installs might be -ifneq ($(_program_files),) - USRJDKINSTANCES_PATH =$(_program_files)/Java -else - USRJDKINSTANCES_PATH =$(_system_drive)/ -endif - -# SLASH_JAVA: location of all network accessable files -# NOTE: Do not use FullPath on this because it's often a drive letter and -# plain drive letters are ambiguous, so just use this 'as is'. -ifdef ALT_SLASH_JAVA - xALT_SLASH_JAVA :="$(subst \,/,$(ALT_SLASH_JAVA))" - SLASH_JAVA :=$(xALT_SLASH_JAVA) -else - ifdef ALT_JDK_JAVA_DRIVE - SLASH_JAVA =$(JDK_JAVA_DRIVE) - else - SLASH_JAVA =J: - endif -endif -#SLASH_JAVA:=$(call AltCheckSpaces,SLASH_JAVA) - -# JDK_DEVTOOLS_DIR: common path for all the java devtools -ifdef ALT_JDK_DEVTOOLS_DIR - xALT_JDK_DEVTOOLS_DIR :="$(subst \,/,$(ALT_JDK_DEVTOOLS_DIR))" - JDK_DEVTOOLS_DIR :=$(call FullPath,$(xALT_JDK_DEVTOOLS_DIR)) -else - JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools -endif -JDK_DEVTOOLS_DIR:=$(call AltCheckSpaces,JDK_DEVTOOLS_DIR) - -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifdef ALT_COMPILER_PATH - xALT_COMPILER_PATH :="$(subst \,/,$(ALT_COMPILER_PATH))" - fxALT_COMPILER_PATH :=$(call FullPath,$(xALT_COMPILER_PATH)) - COMPILER_PATH :=$(call PrefixPath,$(fxALT_COMPILER_PATH)) -else - COMPILER_PATH :=$(call PrefixPath,$(_compiler_bin)) -endif -COMPILER_PATH :=$(call AltCheckSpaces,COMPILER_PATH) - -# MSDEVTOOLS_PATH: path to where the additional MS Compiler tools are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifdef ALT_MSDEVTOOLS_PATH - xALT_MSDEVTOOLS_PATH :="$(subst \,/,$(ALT_MSDEVTOOLS_PATH))" - fxALT_MSDEVTOOLS_PATH :=$(call FullPath,$(xALT_MSDEVTOOLS_PATH)) - MSDEVTOOLS_PATH :=$(call PrefixPath,$(fxALT_MSDEVTOOLS_PATH)) -else - ifeq ($(ARCH_DATA_MODEL), 64) - ifdef MSTOOLS - xMSTOOLS :="$(subst \,/,$(MSTOOLS))" - _ms_tools :=$(call FullPath,$(xMSTOOLS)) - else - ifdef Mstools - xMSTOOLS :="$(subst \,/,$(Mstools))" - _ms_tools :=$(call FullPath,$(xMSTOOLS)) - else - _ms_tools := - endif - endif - ifneq ($(_ms_tools),) - _ms_tools_bin :=$(_ms_tools)/Bin - else - # Assumes compiler bin is .../Bin/win64/x86/AMD64, rc.exe is 3 levels up - _ms_tools_bin :=$(_compiler_bin)/../../.. - endif - else - _ms_tools_bin :=$(_compiler_bin) - endif - MSDEVTOOLS_PATH :=$(call PrefixPath,$(_ms_tools_bin)) -endif -MSDEVTOOLS_PATH:=$(call AltCheckSpaces,MSDEVTOOLS_PATH) - -# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifdef ALT_DEVTOOLS_PATH - xALT_DEVTOOLS_PATH :="$(subst \,/,$(ALT_DEVTOOLS_PATH))" - fxALT_DEVTOOLS_PATH :=$(call FullPath,$(xALT_DEVTOOLS_PATH)) - DEVTOOLS_PATH :=$(call PrefixPath,$(fxALT_DEVTOOLS_PATH)) -else - ifdef USING_CYGWIN - DEVTOOLS_PATH :=$(UNIXCOMMAND_PATH) - else - xDEVTOOLS_PATH :="$(_system_drive)/utils" - fxDEVTOOLS_PATH :=$(call FullPath,$(xDEVTOOLS_PATH)) - DEVTOOLS_PATH :=$(call PrefixPath,$(fxDEVTOOLS_PATH)) - endif -endif -DEVTOOLS_PATH:=$(call AltCheckSpaces,DEVTOOLS_PATH) - -# _BOOTDIR1: First choice for a Bootstrap JDK, previous released JDK. -# _BOOTDIR2: Second choice -# The _BOOTDIR3 is defind optionally. -ifndef ALT_BOOTDIR - _BOOTDIR1 =$(_system_drive)/jdk$(PREVIOUS_JDK_VERSION) - _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION) - _BOOTDIR3 =$(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs/binaries/$(PLATFORM)-$(ARCH) -endif - -# Everybody needs the MSVCRNN runtime starting with VS2010 -_NEEDS_MSVCRNN = true - -ifeq ($(_NEEDS_MSVCRNN), true) - # MSVCRNN_DLL_PATH: location of msvcrnn.dll that will be re-distributed - ifdef ALT_MSVCRNN_DLL_PATH - xALT_MSVCRNN_DLL_PATH :="$(subst \,/,$(ALT_MSVCRNN_DLL_PATH))" - MSVCRNN_DLL_PATH :=$(call FullPath,$(xALT_MSVCRNN_DLL_PATH)) - else - MSVCRNN_DLL_PATH :=$(_redist_sdk) - endif - MSVCRNN_DLL_PATH :=$(call AltCheckSpaces,MSVCRNN_DLL_PATH) -endif - -# DXSDK_PATH: path to Microsoft DirectX SDK Include and Lib -ifdef ALT_DXSDK_PATH - xALT_DXSDK_PATH :="$(subst \,/,$(ALT_DXSDK_PATH))" - DXSDK_PATH :=$(call FullPath,$(xALT_DXSDK_PATH)) -else - _DXSDK_PATH1 :=$(_dx_sdk_dir) - _DXSDK_PATH2 :=$(JDK_DEVTOOLS_DIR)/windows/dxsdk - DXSDK_PATH :=$(call DirExists,$(_DXSDK_PATH1),$(_DXSDK_PATH2),$(_dx_sdk_dir)) -endif -DXSDK_PATH :=$(call AltCheckSpaces,DXSDK_PATH) - -# DXSDK_INCLUDE_PATH: path to Microsoft DirectX SDK Include -ifdef ALT_DXSDK_INCLUDE_PATH - xALT_DXSDK_INCLUDE_PATH :="$(subst \,/,$(ALT_DXSDK_INCLUDE_PATH))" - DXSDK_INCLUDE_PATH :=$(call FullPath,$(xALT_DXSDK_INCLUDE_PATH)) -else - DXSDK_INCLUDE_PATH =$(subst //,/,$(DXSDK_PATH)/Include) -endif - -# DXSDK_LIB_PATH: path to Microsoft DirectX SDK Lib -ifdef ALT_DXSDK_LIB_PATH - xALT_DXSDK_LIB_PATH :="$(subst \,/,$(ALT_DXSDK_LIB_PATH))" - DXSDK_LIB_PATH :=$(call FullPath,$(xALT_DXSDK_LIB_PATH)) -else - ifeq ($(ARCH_DATA_MODEL), 64) - # 64bit libs are located in "Lib/x64" subdir - DXSDK_LIB_PATH =$(subst //,/,$(DXSDK_PATH)/Lib/x64) - else - DXSDK_LIB_PATH =$(subst //,/,$(DXSDK_PATH)/Lib) - endif -endif - -# DEPLOY_MSSDK: Microsoft SDK for this platform (for deploy) -ifdef ALT_DEPLOY_MSSDK - xALT_DEPLOY_MSSDK :="$(subst \,/,$(ALT_DEPLOY_MSSDK))" - DEPLOY_MSSDK :=$(call FullPath,$(xALT_DEPLOY_MSSDK)) -else - DEPLOY_MSSDK :=$(_ms_sdk) -endif -DEPLOY_MSSDK:=$(call AltCheckSpaces,DEPLOY_MSSDK) - -# INSTALL_MSSDK: Microsoft Installer SDK for this platform (for install) -ifdef ALT_INSTALL_MSSDK - xALT_INSTALL_MSSDK :="$(subst \,/,$(ALT_INSTALL_MSSDK))" - INSTALL_MSSDK :=$(call FullPath,$(xALT_INSTALL_MSSDK)) -else - INSTALL_MSSDK :=$(_ms_sdk) -endif -INSTALL_MSSDK:=$(call AltCheckSpaces,INSTALL_MSSDK) - -# WSCRIPT: path to wscript.exe (used in creating install bundles) -ifdef ALT_WSCRIPT - xALT_WSCRIPT :="$(subst \,/,$(ALT_WSCRIPT))" - WSCRIPT =$(xALT_WSCRIPT) -else - _WSCRIPT1 :=$(_system_root)/system32/wscript.exe - _WSCRIPT2 :=$(DEVTOOLS_PATH)wscript.exe - WSCRIPT :=$(call FileExists,$(_WSCRIPT1),$(_WSCRIPT2)) -endif -WSCRIPT:=$(call AltCheckSpaces,WSCRIPT) -# batch mode no modal dialogs on errors, please. -WSCRIPT += -B - -# CSCRIPT: path to cscript.exe (used in creating install bundles) -ifdef ALT_CSCRIPT - xALT_CSCRIPT :="$(subst \,/,$(ALT_CSCRIPT))" - CSCRIPT =$(xALT_CSCRIPT) -else - _CSCRIPT1 :=$(_system_root)/system32/cscript.exe - _CSCRIPT2 :=$(DEVTOOLS_PATH)cscript.exe - CSCRIPT :=$(call FileExists,$(_CSCRIPT1),$(_CSCRIPT2)) -endif -CSCRIPT:=$(call AltCheckSpaces,CSCRIPT) - -# CABARC: path to cabarc.exe (used in creating install bundles) -ifdef ALT_CABARC - xALT_CABARC :="$(subst \,/,$(ALT_CABARC))" - CABARC =$(xALT_CABARC) -else - _CABARC1 :=$(_system_root)/system32/cabarc.exe - _CABARC2 :=$(DEVTOOLS_PATH)cabarc.exe - CABARC :=$(call FileExists,$(_CABARC1),$(_CABARC2)) -endif -CABARC:=$(call AltCheckSpaces,CABARC) - -# MSICERT: path to msicert.exe (used in creating install bundles) -ifdef ALT_MSICERT - xALT_MSICERT :="$(subst \,/,$(ALT_MSICERT))" - MSICERT =$(xALT_MSICERT) -else - _MSICERT1 :=$(INSTALL_MSSDK)/Bin/msicert.exe - _MSICERT2 :=$(DEVTOOLS_PATH)msicert.exe - MSICERT :=$(call FileExists,$(_MSICERT1),$(_MSICERT2)) -endif -MSICERT:=$(call AltCheckSpaces,MSICERT) - -# Import JDK images allow for partial builds, components not built are -# imported (or copied from) these import areas when needed. - -# BUILD_JDK_IMPORT_PATH: location of JDK install trees to import for -# multiple platforms, e.g. windows-i586, solaris-sparc, linux-586, etc. -ifdef ALT_BUILD_JDK_IMPORT_PATH - BUILD_JDK_IMPORT_PATH :=$(call FullPath,$(ALT_BUILD_JDK_IMPORT_PATH)) -else - BUILD_JDK_IMPORT_PATH = $(PROMOTED_BUILD_BINARIES) -endif -BUILD_JDK_IMPORT_PATH:=$(call AltCheckSpaces,BUILD_JDK_IMPORT_PATH) - -# JDK_IMPORT_PATH: location of previously built JDK (this version) to import -ifdef ALT_JDK_IMPORT_PATH - JDK_IMPORT_PATH :=$(call FullPath,$(ALT_JDK_IMPORT_PATH)) -else - JDK_IMPORT_PATH = $(BUILD_JDK_IMPORT_PATH)/$(PLATFORM)-$(ARCH)$(_JDK_IMPORT_VARIANT) -endif -JDK_IMPORT_PATH:=$(call AltCheckSpaces,JDK_IMPORT_PATH) - -# HOTSPOT_CLIENT_PATH: location of client jvm library file. -ifeq ($(ARCH_DATA_MODEL), 32) - ifdef ALT_HOTSPOT_CLIENT_PATH - HOTSPOT_CLIENT_PATH :=$(call FullPath,$(ALT_HOTSPOT_CLIENT_PATH)) - else - HOTSPOT_CLIENT_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/client - endif - HOTSPOT_CLIENT_PATH:=$(call AltCheckSpaces,HOTSPOT_CLIENT_PATH) -endif - -# HOTSPOT_SERVER_PATH: location of server jvm library file. -ifdef ALT_HOTSPOT_SERVER_PATH - HOTSPOT_SERVER_PATH :=$(call FullPath,$(ALT_HOTSPOT_SERVER_PATH)) -else - HOTSPOT_SERVER_PATH =$(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/server -endif -HOTSPOT_SERVER_PATH:=$(call AltCheckSpaces,HOTSPOT_SERVER_PATH) - -# HOTSPOT_LIB_PATH: location of jvm.lib file. -ifdef ALT_HOTSPOT_LIB_PATH - xALT_HOTSPOT_LIB_PATH :="$(subst \,/,$(ALT_HOTSPOT_LIB_PATH))" - HOTSPOT_LIB_PATH :=$(call FullPath,$(xALT_HOTSPOT_LIB_PATH)) -else - HOTSPOT_LIB_PATH =$(HOTSPOT_IMPORT_PATH)/lib -endif -HOTSPOT_LIB_PATH:=$(call AltCheckSpaces,HOTSPOT_LIB_PATH) - -# Special define for checking the binaries - -# All windows dll and exe files should have been built with /NXCOMPAT -# and be setup for dynamic base addresses. -# In addition, we should not be dependent on certain dll files that -# we do not or cannot redistribute. - -# List of filenames we should NOT be dependent on -ifeq ($(MFC_DEBUG),true) - BANNED_DLLS=msvcp100[.]dll -else - BANNED_DLLS=msvcp100[.]dll|msvcr100d[.]dll|msvcrtd[.]dll -endif - -# Check for /safeseh (only used on 32bit) -define binary_file_safeseh_verification # binary_file -( \ - $(ECHO) "Checking for /SAFESEH usage in: $1" && \ - if [ "`$(DUMPBIN) /loadconfig $1 | $(EGREP) -i 'Safe Exception Handler Table'`" = "" ] ; then \ - $(ECHO) "ERROR: Did not find 'Safe Exception Handler Table' in loadconfig: $1" ; \ - $(DUMPBIN) /loadconfig $1 ; \ - exit 6 ; \ - fi ; \ -) -endef - -# Check for /NXCOMPAT usage -define binary_file_nxcompat_verification # binary_file -( \ - $(ECHO) "Checking for /NXCOMPAT usage in: $1" && \ - if [ "`$(DUMPBIN) /headers $1 | $(EGREP) -i 'NX compatible'`" = "" ] ; then \ - $(ECHO) "ERROR: Did not find 'NX compatible' in headers: $1" ; \ - $(DUMPBIN) /headers $1 ; \ - exit 7 ; \ - fi ; \ -) -endef - -# Check for /DYNAMICBASE usage -define binary_file_dynamicbase_verification # binary_file -( \ - $(ECHO) "Checking for /DYNAMICBASE usage in: $1" && \ - if [ "`$(DUMPBIN) /headers $1 | $(EGREP) -i 'Dynamic base'`" = "" ] ; then \ - $(ECHO) "ERROR: Did not find 'Dynamic base' in headers: $1" ; \ - $(DUMPBIN) /headers $1 ; \ - exit 8 ; \ - fi ; \ -) -endef - -# Check for banned dll usage -define binary_file_dll_verification # binary_file -( \ - $(ECHO) "Checking for banned dependencies in: $1" && \ - if [ "`$(DUMPBIN) /dependents $1 | $(EGREP) -i '$(BANNED_DLLS)'`" != "" ] ; then \ - $(ECHO) "ERROR: Found use of $(BANNED_DLLS)"; \ - $(DUMPBIN) /dependents $1 ; \ - exit 9 ; \ - fi ; \ -) -endef - -# Macro to check it's input file for properly built executables. -# Relies on process exit code. Different for 32bit vs 64bit. -ifeq ($(ARCH_DATA_MODEL),32) -define binary_file_verification # binary_file -( \ - $(call binary_file_safeseh_verification,$1); \ - $(call binary_file_nxcompat_verification,$1); \ - $(call binary_file_dynamicbase_verification,$1); \ - $(call binary_file_dll_verification,$1); \ -) -endef -else -define binary_file_verification # binary_file -( \ - $(call binary_file_nxcompat_verification,$1); \ - $(call binary_file_dynamicbase_verification,$1); \ - $(call binary_file_dll_verification,$1); \ -) -endef -endif - diff --git a/jdk/makefiles/common/shared/Defs.gmk b/jdk/makefiles/common/shared/Defs.gmk deleted file mode 100644 index 89af038a7cb..00000000000 --- a/jdk/makefiles/common/shared/Defs.gmk +++ /dev/null @@ -1,662 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Definitions for all platforms. -# -# Normally the convention is that these alternate definitions of -# primary make variables are never defined inside the Makefiles anywhere -# but are defined via environment variables or set on the make command -# line. So you should never see an ALT_* variable defined in any -# makefiles, just used. This is the convention and there are some -# exceptions, either mistakes or unusual circumstances. -# -# The naming convention for the default value of one of these variables -# that has an ALT_* override capability is to name the default value with a -# leading underscore (_). So for XXX you would have: -# _XXX default value -# ALT_XXX any override the user is providing if any -# XXX the final value, either the default _XXX or the ALT_XXX value. -# - -# On Directory names. In very rare cases should the Windows directory -# names use the backslash, please use the C:/ style of windows paths. -# Avoid duplicating the // characters in paths, this has known to cause -# strange problems with jar and other utilities, e.g. /a//b/ != /a/b/. -# Some of these variables have an explicit trailing / character, but in -# general, they should NOT have the trailing / character. - --include $(SPEC) --include $(VARS) - -# Assumes ARCH, PLATFORM, ARCH_VM_SUBDIR, JDK_TOPDIR, etc. have been defined. - -# Simple pwd path -# NOTE: Just use the shell's cd and pwd here, more reliable at sanity time. -define PwdPath -$(shell cd $1 2> $(DEV_NULL) && pwd) -endef -define AbsPwdPathCheck -$(shell cd .. 2> $(DEV_NULL) && cd $1 2> $(DEV_NULL) && pwd) -endef - -# Checks an ALT value for spaces (should be one word), -# warns and returns Check_ALT_$1 if spaces -define AltCheckSpaces -$(if $(word 2,$($1)),$(warning "WARNING: Value of $1 contains a space: '$($1)', check or set ALT_$1")Check_ALT_$1,$($1)) -endef - -# Checks an ALT value for empty, warns and returns Check_ALT_$1 if empty -define AltCheckValue -$(if $($1),$($1),$(warning "WARNING: Value of $1 cannot be empty, check or set ALT_$1")Check_ALT_$1) -endef - -# Checks any value for empty, warns and returns $2 if empty -define CheckValue -$(if $($1),$($1),$(warning "WARNING: Value of $1 cannot be empty, will use '$2'")$2) -endef - -# Prefix for a utility prefix path, if empty leave alone, otherwise end with a / -define PrefixPath -$(if $1,$(subst //,/,$1/),) -endef - -# Select a directory if it exists, or the alternate 2 or the alternate 3 -define DirExists -$(shell \ - if [ -d "$1" ]; then \ - echo "$1"; \ - elif [ -d "$2" ]; then \ - echo "$2"; \ - else \ - echo "$3"; \ - fi) -endef - -# Select a directory if it exists, or the alternate 2, or the alternate 3, or the alternate 4 -define DirExists4 -$(shell \ - if [ -d "$1" ]; then \ - echo "$1"; \ - elif [ -d "$2" ]; then \ - echo "$2"; \ - elif [ -d "$3" ]; then \ - echo "$3"; \ - else \ - echo "$4"; \ - fi) -endef - - -# Select a writable directory if it exists and is writable, or the alternate -define WriteDirExists -$(shell \ - if [ -d "$1" -a -w "$1" ]; then \ - echo "$1"; \ - else \ - echo "$2"; \ - fi) -endef - -# Select a file if it exists, or the alternate 1, or the alternate 2 -define FileExists -$(shell \ - if [ -r "$1" ]; then \ - echo "$1"; \ - elif [ -r "$2" ]; then \ - echo "$2"; \ - else \ - echo "NO_FILE_EXISTS"; \ - fi) -endef - -# Given a line of text, get the version number from it -define GetVersion -$(shell echo $1 | sed -e 's@[^0-9]*\([0-9][0-9]*\.[0-9][.0-9]*\).*@\1@' ) -endef - -# Return one part of the version numbers, watch out for non digits. -define VersionWord # Number Version -$(word $1,$(subst ., ,$(subst -, ,$2))) -endef - -# Given a major.minor.micro version, return the major, minor, or micro number -define MajorVersion -$(if $(call VersionWord,1,$1),$(call VersionWord,1,$1),0) -endef -define MinorVersion -$(if $(call VersionWord,2,$1),$(call VersionWord,2,$1),0) -endef -define MicroVersion -$(if $(call VersionWord,3,$1),$(call VersionWord,3,$1),0) -endef - -# Macro that returns missing, same, newer, or older $1=version $2=required -define CheckVersions -$(shell \ - if [ "$1" = "" -o "$2" = "" ]; then \ - echo missing; \ - elif [ "$1" = "$2" ]; then \ - echo same; \ - elif [ $(call MajorVersion,$1) -lt $(call MajorVersion,$2) ] ; then \ - echo older; \ - elif [ $(call MajorVersion,$1) -gt $(call MajorVersion,$2) ] ; then \ - echo newer; \ - elif [ $(call MinorVersion,$1) -lt $(call MinorVersion,$2) ]; then \ - echo older; \ - elif [ $(call MinorVersion,$1) -gt $(call MinorVersion,$2) ]; then \ - echo newer; \ - elif [ $(call MicroVersion,$1) -lt $(call MicroVersion,$2) ]; then \ - echo older; \ - elif [ $(call MicroVersion,$1) -gt $(call MicroVersion,$2) ]; then \ - echo newer; \ - else \ - echo same; \ - fi) -endef - -# Expand SRCDIR_LIST, which is used to automatically include various -# platform and shared sources/headers. This is mainly useful for the -# Mac OS X build, which pulls its platform sources from the solaris and/or -# macosx trees, depending on the component. -ifeq ($(PLATFORM), macosx) - define JavaSrcDirList - $(JAVA_SRCDIR_LIST:%=$1$(JDK_TOPDIR)/%/$2) - endef - define NativeSrcDirList - $(NATIVE_SRCDIR_LIST:%=$1$(JDK_TOPDIR)/%/$2) - endef -endif - -# Make sure certain variables are non-empty at this point -_check_values:=\ -$(call CheckValue,ARCH,),\ -$(call CheckValue,ARCH_DATA_MODEL,),\ -$(call CheckValue,ARCH_VM_SUBDIR,),\ -$(call CheckValue,JDK_TOPDIR,),\ -$(call CheckValue,JDK_MAKE_SHARED_DIR,),\ -$(call CheckValue,VARIANT,),\ -$(call CheckValue,PLATFORM,) - -# Misc common settings for all workspaces -# This determines the version of the product, and the previous version or boot -ifndef JDK_MAJOR_VERSION - JDK_MAJOR_VERSION = 1 - PREVIOUS_MAJOR_VERSION = 1 -endif - -ifndef JDK_MINOR_VERSION - JDK_MINOR_VERSION = 8 - PREVIOUS_MINOR_VERSION = 7 -endif - -ifndef JDK_MICRO_VERSION - JDK_MICRO_VERSION = 0 - PREVIOUS_MICRO_VERSION = 0 -endif - -ifndef MILESTONE - MILESTONE = internal -endif - -# Default names -ifdef OPENJDK - LAUNCHER_NAME = openjdk - PRODUCT_NAME = OpenJDK - PRODUCT_SUFFIX = Runtime Environment - JDK_RC_PLATFORM_NAME = Platform - COMPANY_NAME = N/A -else - LAUNCHER_NAME = java - PRODUCT_NAME = Java(TM) - PRODUCT_SUFFIX = SE Runtime Environment - JDK_RC_PLATFORM_NAME = Platform SE - COMPANY_NAME = Oracle Corporation -endif - -RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX) - -ifndef BUILD_NUMBER - JDK_BUILD_NUMBER = b00 -else - ifndef JDK_BUILD_NUMBER - JDK_BUILD_NUMBER = $(BUILD_NUMBER) - endif -endif - -# Default variant is the optimized version of everything -# can be OPT or DBG, default is OPT -# Determine the extra pattern to add to the release name for debug/fastdebug. -# Determine the JDK_IMPORT_VARIANT, so we get the right VM files copied over. -# Determine suffix for obj directory or OBJDIR, for .o files. -# (by keeping .o files separate, just .o files, they don't clobber each -# other, however, the library files will clobber each other). -# -ifeq ($(VARIANT), DBG) - BUILD_VARIANT_RELEASE=-debug - OBJDIRNAME_SUFFIX=_g -else - BUILD_VARIANT_RELEASE= - OBJDIRNAME_SUFFIX= -endif -ifeq ($(FASTDEBUG), true) - VARIANT=DBG - BUILD_VARIANT_RELEASE=-fastdebug - OBJDIRNAME_SUFFIX=_gO - _JDK_IMPORT_VARIANT=/fastdebug -endif - -# Depending on the flavor of the build, add a -debug or -fastdebug to the name -ifdef DEBUG_NAME - BUILD_VARIANT_RELEASE=-$(DEBUG_NAME) -endif - -# These default values are redefined during a release build. -# CTE can set JDK_UPDATE_VERSION during the update release -ifdef JDK_UPDATE_VERSION - JDK_VERSION = $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION)_$(JDK_UPDATE_VERSION) - MARKETING_NUMBER := $(shell \ - $(ECHO) $(JDK_UPDATE_VERSION) | $(NAWK) '{if (substr($$0,1,1)=="0") print substr($$0, 2); else print $$0;}') - MARKET_NAME= $(shell $(ECHO) " Update $(MARKETING_NUMBER)") - JDK_MKTG_VERSION = $(JDK_MINOR_VERSION)u$(MARKETING_NUMBER) -else - JDK_VERSION = $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION) - JDK_MKTG_VERSION = $(JDK_MINOR_VERSION) - MARKET_NAME= -endif -JDK_UNDERSCORE_VERSION = $(subst .,_,$(JDK_VERSION)) -JDK_MKTG_UNDERSCORE_VERSION = $(subst .,_,$(JDK_MKTG_VERSION)) - -# RELEASE is JDK_VERSION and -MILESTONE if MILESTONE is set -ifneq ($(MILESTONE),fcs) - RELEASE = $(JDK_VERSION)-$(MILESTONE)$(BUILD_VARIANT_RELEASE) -else - RELEASE = $(JDK_VERSION)$(BUILD_VARIANT_RELEASE) -endif - -# FULL_VERSION is RELEASE and -BUILD_NUMBER if BUILD_NUMBER is set -ifdef BUILD_NUMBER - FULL_VERSION = $(RELEASE)-$(BUILD_NUMBER) -else - BUILD_NUMBER = b00 - ifndef USER_RELEASE_SUFFIX - BUILD_DATE := $(shell $(DATE) '+%Y_%m_%d_%H_%M') - # Avoid [:alnum:] since it depends on the locale. - CLEAN_USERNAME := $(shell $(ECHO) "$(USER)" | $(TR) -d -c 'abcdefghijklmnopqrstuvqxyz0123456789') - USER_RELEASE_SUFFIX := $(shell $(ECHO) "$(CLEAN_USERNAME)_$(BUILD_DATE)" | $(TR) 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz') - endif - export USER_RELEASE_SUFFIX - FULL_VERSION = $(RELEASE)-$(USER_RELEASE_SUFFIX)-$(BUILD_NUMBER) -endif - -# Promoted build location -PROMOTED_RE_AREA = $(SLASH_JAVA)/re/jdk/$(JDK_VERSION)/promoted -PROMOTED_BUILD_LATEST = latest -PROMOTED_BUILD_BASEDIR = $(PROMOTED_RE_AREA)/$(PROMOTED_BUILD_LATEST) -PROMOTED_BUILD_DISTDIR = $(PROMOTED_BUILD_BASEDIR)/dist/$(PLATFORM)-$(ARCH) -PROMOTED_BUILD_BINARIES = $(PROMOTED_BUILD_BASEDIR)/binaries - -# PARALLEL_COMPILE_JOBS: is the number of compiles done in parallel. -# If the user sets ALT_PARALLEL_COMPILE_JOBS, then COMPILE_APPROACH is set -# to parallel. -# -# Recommended setting: 2 seems to be ideal for single cpu machines, -# 2 times the number of CPU's is a basic formula, -# but probably not more than 4 if the machine is -# being shared by others, or the machine is limited -# in RAM or swap. -# -ifdef ALT_PARALLEL_COMPILE_JOBS - PARALLEL_COMPILE_JOBS=$(ALT_PARALLEL_COMPILE_JOBS) -else - PARALLEL_COMPILE_JOBS=2 -endif - -# Previous JDK release (version of BOOTDIR version) -ifdef ALT_PREVIOUS_JDK_VERSION - PREVIOUS_JDK_VERSION = $(ALT_PREVIOUS_JDK_VERSION) -else - PREVIOUS_JDK_VERSION = $(PREVIOUS_MAJOR_VERSION).$(PREVIOUS_MINOR_VERSION).$(PREVIOUS_MICRO_VERSION) -endif -export PREVIOUS_JDK_VERSION -PREVIOUS_JDK_VERSION:=$(call AltCheckSpaces,PREVIOUS_JDK_VERSION) - -# Version with _ instead of . in number -ifeq ($(PREVIOUS_MINOR_VERSION),5) - PREVIOUS_JDK_UNDERSCORE_VERSION = $(subst .,_,$(PREVIOUS_JDK_VERSION)) -else - PREVIOUS_JDK_UNDERSCORE_VERSION = $(PREVIOUS_MINOR_VERSION) -endif - -# Include any private definitions for this set of workspaces -_PRIVATE_DEFS_FILE=$(JDK_MAKE_SHARED_DIR)/PrivateDefs.gmk -ifeq ($(USING_PRIVATE_DEFS),) - USING_PRIVATE_DEFS:=$(shell if [ -f $(_PRIVATE_DEFS_FILE) ]; then echo true; else echo false; fi) -endif -ifeq ($(USING_PRIVATE_DEFS),true) -dummy:=$(warning "WARNING: Using definitions from $(_PRIVATE_DEFS_FILE)") -include $(_PRIVATE_DEFS_FILE) -endif - -# OUTPUTDIR: Location of all output for the build -ifdef ALT_OUTPUTDIR - OUTPUTDIR:=$(subst \,/,$(ALT_OUTPUTDIR)) - # Assumes this is absolute (checks later) - ABS_OUTPUTDIR:=$(OUTPUTDIR) -else - ifndef _OUTPUTDIR - # Default: Get "build" parent directory, which should always exist - ifndef BUILD_PARENT_DIRECTORY - BUILD_PARENT_DIRECTORY=$(BUILDDIR)/.. - endif - ifdef OPENJDK - _OUTPUTDIRNAME=$(PLATFORM)-$(ARCH)$(OPENJDK_SUFFIX) - else - _OUTPUTDIRNAME=$(PLATFORM)-$(ARCH) - endif - _OUTPUTDIR=$(BUILD_PARENT_DIRECTORY)/build/$(_OUTPUTDIRNAME) - endif - OUTPUTDIR:=$(_OUTPUTDIR) -endif -# Check for spaces and null value -OUTPUTDIR:=$(call AltCheckSpaces,OUTPUTDIR) - -# Get platform specific settings -# NB: OUTPUTDIR must be defined. Otherwise hotspot import detection will not work correctly -# On other hand this must be included early as it provides platform specific defines such as FullPath -include $(JDK_MAKE_SHARED_DIR)/Defs-versions.gmk - -# Get platform specific settings (defines COMPILER_PATH) -include $(JDK_MAKE_SHARED_DIR)/Defs-$(PLATFORM).gmk - -# Components -ifdef ALT_LANGTOOLS_DIST - LANGTOOLS_DIST :=$(call FullPath,$(ALT_LANGTOOLS_DIST)) -else - LANGTOOLS_DIST = -endif -ifdef ALT_CORBA_DIST - CORBA_DIST :=$(call FullPath,$(ALT_CORBA_DIST)) -else - CORBA_DIST = -endif -ifdef ALT_JAXP_DIST - JAXP_DIST :=$(call FullPath,$(ALT_JAXP_DIST)) -else - JAXP_DIST = -endif -ifdef ALT_JAXWS_DIST - JAXWS_DIST :=$(call FullPath,$(ALT_JAXWS_DIST)) -else - JAXWS_DIST = -endif - -# HOTSPOT_DOCS_IMPORT_PATH: Path to hotspot docs files to import into the docs generation -ifdef ALT_HOTSPOT_DOCS_IMPORT_PATH - HOTSPOT_DOCS_IMPORT_PATH :=$(call FullPath,$(ALT_HOTSPOT_DOCS_IMPORT_PATH)) -else - HOTSPOT_DOCS_IMPORT_PATH :=$(call DirExists,$(HOTSPOT_IMPORT_PATH)/docs,$(PROMOTED_BUILD_BASEDIR)/docs,/NO_DOCS_DIR) -endif - -# These are the same on all platforms but require the above platform include 1st - -# BOOTDIR: Bootstrap JDK, previous released JDK. -# _BOOTDIR1 and _BOOTDIR2 picked by platform -# Platform may optionally define _BOOTDIR3 as well. -ifdef ALT_BOOTDIR - BOOTDIR =$(ALT_BOOTDIR) -else - ifdef _BOOTDIR3 - BOOTDIR :=$(call DirExists4,$(_BOOTDIR1),$(_BOOTDIR2),$(_BOOTDIR3),/NO_BOOTDIR) - else - BOOTDIR :=$(call DirExists,$(_BOOTDIR1),$(_BOOTDIR2),/NO_BOOTDIR) - endif -endif -export BOOTDIR -BOOTDIR:=$(call AltCheckSpaces,BOOTDIR) - -# PREVIOUS_FCS_RE_AREA: re path to where previous release binaries/bundles are -PREVIOUS_FCS_RE_AREA = $(SLASH_JAVA)/re/jdk/$(PREVIOUS_JDK_VERSION)/archive/fcs - -# PREVIOUS_RELEASE_IMAGE: Previous install image to compare against -ifdef ALT_PREVIOUS_RELEASE_IMAGE - - # Explicit image provided, no bundle access needed - PREVIOUS_RELEASE_IMAGE :=$(call FullPath,$(ALT_PREVIOUS_RELEASE_IMAGE)) - -else - - # PREVIOUS_RELEASE_PATH: path to where previous release bundles are - ifdef ALT_PREVIOUS_RELEASE_PATH - PREVIOUS_RELEASE_PATH :=$(call OptFullPath,$(ALT_PREVIOUS_RELEASE_PATH)) - else - PREVIOUS_RELEASE_PATH := \ - $(call DirExists,$(PREVIOUS_FCS_RE_AREA)/bundles/$(PLATFORM)-$(ARCH),,) - endif - - # Depending on if we have access to these bundles - ifeq ($(PREVIOUS_RELEASE_PATH),) - # Use images in re area or BOOTDIR (which is normally the previous release) - PREVIOUS_RELEASE_IMAGE := \ - $(call DirExists,$(PREVIOUS_FCS_RE_AREA)/binaries/$(PLATFORM)-$(ARCH),$(BOOTDIR),) - else - # Get names of and paths to bundles - PREVIOUS_RELEASE_PATH:=$(call AltCheckSpaces,PREVIOUS_RELEASE_PATH) - export PREVIOUS_RELEASE_PATH - - # PREVIOUS_JDK_FILE: filename of install bundle for previous JDK - ifdef ALT_PREVIOUS_JDK_FILE - PREVIOUS_JDK_FILE =$(ALT_PREVIOUS_JDK_FILE) - else - PREVIOUS_JDK_FILE = \ - jdk-$(PREVIOUS_JDK_UNDERSCORE_VERSION)-$(PLATFORM)-$(ARCH)$(BUNDLE_FILE_SUFFIX) - endif - export PREVIOUS_JDK_FILE - PREVIOUS_JDK_FILE:=$(call AltCheckSpaces,PREVIOUS_JDK_FILE) - - # PREVIOUS_JRE_FILE: filename of install bundle for previous JRE - ifdef ALT_PREVIOUS_JRE_FILE - PREVIOUS_JRE_FILE =$(ALT_PREVIOUS_JRE_FILE) - else - PREVIOUS_JRE_FILE = \ - jre-$(PREVIOUS_JDK_UNDERSCORE_VERSION)-$(PLATFORM)-$(ARCH)$(BUNDLE_FILE_SUFFIX) - endif - export PREVIOUS_JRE_FILE - PREVIOUS_JRE_FILE:=$(call AltCheckSpaces,PREVIOUS_JRE_FILE) - - # Paths to these bundles - PREVIOUS_JRE_BUNDLE = $(PREVIOUS_RELEASE_PATH)/$(PREVIOUS_JRE_FILE) - PREVIOUS_JDK_BUNDLE = $(PREVIOUS_RELEASE_PATH)/$(PREVIOUS_JDK_FILE) - endif - -endif - -# Indicate we are using an image comparison -ifneq ($(PREVIOUS_RELEASE_IMAGE),) - PREVIOUS_RELEASE_PATH = USING-PREVIOUS_RELEASE_IMAGE - PREVIOUS_JRE_BUNDLE = USING-PREVIOUS_RELEASE_IMAGE - PREVIOUS_JDK_BUNDLE = USING-PREVIOUS_RELEASE_IMAGE -endif - -# CACERTS_FILE: if OPENJDK is false and the internal version of the file -# (that is, non-empty) is available, use it, otherwise use an -# empty keystore. -# -# We put this variable here for sanity checks and in case another -# components will need to know which cacerts file is being used. -# -ifdef ALT_CACERTS_FILE - CACERTS_FILE = $(ALT_CACERTS_FILE) -else - CACERTS_EXT = $(SHARE_SRC)/lib/security/cacerts - ifdef OPENJDK - CACERTS_FILE :=$(CACERTS_EXT) - else # (!OPENJDK) - CACERTS_INT = $(CLOSED_SHARE_SRC)/lib/security/cacerts.internal - CACERTS_FILE :=$(call FileExists,$(CACERTS_INT),$(CACERTS_EXT)) - endif # (OPENJDK) -endif -CACERTS_FILE:=$(call AltCheckSpaces,CACERTS_FILE) - -# -# When signing the JCE framework and provider, we could be using built -# bits on a read-only filesystem. If so, this test will fail and crash -# the build. -# -ifndef IGNORE_WRITABLE_OUTPUTDIR_TEST -# Create the output directory and make sure it exists and is writable -_create_outputdir:=$(shell $(MKDIR) -p "$(OUTPUTDIR)" > $(DEV_NULL) 2>&1) -ifeq ($(call WriteDirExists,$(OUTPUTDIR),/dev/null),/dev/null) - _outputdir_error:=$(error "ERROR: OUTPUTDIR '$(OUTPUTDIR)' not created or not writable") -endif -endif - -# Define absolute path if needed and check for spaces and null value -ifndef ABS_OUTPUTDIR - ifdef _OUTPUTDIRNAME - #Could not define this at the same time as _OUTPUTDIRNAME as FullPath is not defined at that point - ABS_BUILD_PARENT_DIRECTORY:=$(call FullPath,$(BUILD_PARENT_DIRECTORY)) - ABS_OUTPUTDIR:=$(ABS_BUILD_PARENT_DIRECTORY)/build/$(_OUTPUTDIRNAME) - else - ABS_OUTPUTDIR:=$(call FullPath,$(OUTPUTDIR)) - endif -endif -ABS_OUTPUTDIR:=$(call AltCheckSpaces,ABS_OUTPUTDIR) -# Make doubly sure this is a full path -ifeq ($(call AbsPwdPathCheck,$(ABS_OUTPUTDIR)), ) - ifdef ALT_OUTPUTDIR - _outputdir_error:=$(error "ERROR: Trouble with the absolute path for OUTPUTDIR '$(OUTPUTDIR)', was ALT_OUTPUTDIR '$(ALT_OUTPUTDIR)' an absolute path?") - else - _outputdir_error:=$(error "ERROR: Trouble with the absolute path for OUTPUTDIR '$(OUTPUTDIR)'") - endif -endif -_dir1:=$(call FullPath,$(ABS_OUTPUTDIR)) -_dir2:=$(call FullPath,$(OUTPUTDIR)) -ifneq ($(_dir1),$(_dir2)) - _outputdir_error:=$(error "ERROR: ABS_OUTPUTDIR '$(ABS_OUTPUTDIR)' is not the same directory as OUTPUTDIR '$(OUTPUTDIR)', '$(_dir1)'!='$(_dir2)'") -endif - -# Bin directory -# NOTE: ISA_DIR is usually empty, on Solaris it might be /sparcv9 or /amd64 -BINDIR = $(OUTPUTDIR)/bin$(ISA_DIR) - -# MOZILLA_HEADERS_PATH: path to mozilla header files for plugin -ifdef ALT_MOZILLA_HEADERS_PATH - MOZILLA_HEADERS_PATH :=$(call FullPath,$(ALT_MOZILLA_HEADERS_PATH)) -else - MOZILLA_HEADERS_PATH =$(JDK_DEVTOOLS_DIR)/share/plugin -endif -MOZILLA_HEADERS_PATH:=$(call AltCheckSpaces,MOZILLA_HEADERS_PATH) - -# CUPS_HEADERS_PATH: path to Cups headers files for Unix printing -#ifneq ($(PLATFORM), windows) -#JDK_CUPS_HEADERS_PATH=$(JDK_DEVTOOLS_DIR)/share/cups/include -# ifdef ALT_CUPS_HEADERS_PATH -# CUPS_HEADERS_PATH:=$(call FullPath,$(ALT_CUPS_HEADERS_PATH)) -# CUPS_HEADERS_PATH:=$(call AltCheckValue,CUPS_HEADERS_PATH) -# else -# CUPS_HEADERS_PATH:= \ -# $(shell if [ -d "$(JDK_CUPS_HEADERS_PATH)" ]; then \ -# echo "$(JDK_CUPS_HEADERS_PATH)"; \ -# else \ -# echo "$(_CUPS_HEADERS_PATH)";\ -# fi) -# endif -#endif - -# Utilities ant -ifeq ($(PLATFORM), windows) - ifeq ($(ANT_HOME),) - ANT_HOME := $(call DirExists,$(JDK_DEVTOOLS_DIR)/share/ant/latest,,) - endif -endif - -# There are few problems with ant we need to workaround: -# 1) ant is using temporary directory java.io.tmpdir -# However, this directory is not unique enough and two separate ant processes -# can easily end up using the exact same temp directory. This may lead to weird build failures -# To workaround this we will define tmp dir explicitly -# 2) ant attempts to detect JDK location based on java.exe location -# This is fragile as developer may have JRE first on the PATH. -# To workaround this we will specify JAVA_HOME explicitly - -ANT_TMPDIR = $(ABS_OUTPUTDIR)/tmp -ANT_WORKAROUNDS = ANT_OPTS=-Djava.io.tmpdir='$(ANT_TMPDIR)' JAVA_HOME='$(BOOTDIR)' - -ifeq ($(ANT_HOME),) - ANT = $(ANT_WORKAROUNDS) ant -else - ANT = $(ANT_WORKAROUNDS) $(ANT_HOME)/bin/ant -endif - -ifdef ALT_COPYRIGHT_YEAR - COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR) -else - COPYRIGHT_YEAR = $(shell $(DATE) '+%Y') -endif - -# Create file with source information -SOURCE_TIPS=$(ABS_OUTPUTDIR)/source_tips - -# The source tips can come from the Mercurial repository, or in the files -# $(HGTIP_FILENAME) which contains the tip but is also positioned in the same -# directory as the original $(HGDIR) directory. -# These should not be := assignments, only used from the root Makefile. -HG_VERSION = $(shell $(HG) version 2> $(DEV_NULL)) -HG_DIRECTORY=.hg -HGTIP_FILENAME=.hgtip -HG_SEARCH = ./REPO ./*/REPO ./*/*/REPO ./*/*/*/REPO -REPO_LIST = $(patsubst ./%,%,$(patsubst %/,%,$(sort $(dir \ - $(shell ( $(LS) -d $(HG_SEARCH:%/REPO=%/$(HG_DIRECTORY)) ; \ - $(LS) $(HG_SEARCH:%/REPO=%/$(HGTIP_FILENAME)) ) \ - 2> $(DEV_NULL)))))) - -# Emit the repo:tip pairs to $@ -define GetSourceTips -for i in $(REPO_LIST) IGNORE ; do \ - if [ "$${i}" = "IGNORE" ] ; then \ - continue; \ - elif [ -d $${i}/$(HG_DIRECTORY) -a "$(HG_VERSION)" != "" ] ; then \ - $(PRINTF) " %s:%s" \ - "$${i}" `$(HG) tip --repository $${i} --template '{node|short}\n'` ; \ - elif [ -f $${i}/$(HGTIP_FILENAME) ] ; then \ - $(PRINTF) " %s:%s" \ - "$${i}" `$(CAT) $${i}/$(HGTIP_FILENAME)` ; \ - fi; \ -done >> $@ -$(PRINTF) "\n" >> $@ -endef - -# Create the HGTIP_FILENAME file -define CreateHgTip -$(HG) tip --repository $1 --template '{node|short}\n' > $1/$(HGTIP_FILENAME);\ -$(ECHO) $1/$(HGTIP_FILENAME) -endef - -# Get the compiler specific settings (will run the compiler to find out) -# NOTE: COMPILER_PATH must be set by this time. -# Up until we include this file, we don't know what specific compiler -# version is actually being used (i.e. what is in PATH or COMPILER_PATH). -include $(JDK_MAKE_SHARED_DIR)/Compiler-$(CC_VERSION).gmk diff --git a/jdk/makefiles/common/shared/Platform.gmk b/jdk/makefiles/common/shared/Platform.gmk deleted file mode 100644 index 56ee0195d14..00000000000 --- a/jdk/makefiles/common/shared/Platform.gmk +++ /dev/null @@ -1,526 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Shared platform (OS/ARCH) variable settings for the JDK builds. -# -# Includes basic system requirements, versions of utilities required, -# suffixes on files, and basic defaults attributed to the build platform. -# - -# -# Assumes some basic unix system utilities (e.g. uname) are in the search path -# in order to figure out the system. -# - -ifndef PLATFORM_SHARED - -PLATFORM_SHARED=done - -# Possible Input variables: -# ARCH_DATA_MODEL 32 or 64, default to 32 -# USER, LOGNAME user name (runs logname, or id if not set) -# PROCESSOR_IDENTIFIER windows only: needed in environment -# -# (Also gets input by running the utilities uname, logname, isainfo, or id.) -# -# Variables set by this file: -# SYSTEM_UNAME what 'uname' says this system is -# USER login name of user (minus blanks) -# PLATFORM windows, solaris, or linux -# VARIANT OPT or DBG, OPT is the default -# TEMP_DISK /tmp or C:/temp -# ARCH_DATA_MODEL 32 or 64 -# ARCH sparc, sparcv9, i586, amd64, or ia64 -# ARCH_FAMILY sparc or i586 -# ARCHPROP sparc or x86 -# ARCH_VM_SUBDIR jre/bin, jre/lib/sparc, etc. -# LIBARCH sparc, sparcv9, i386, amd64, or ia64 -# DEV_NULL destination of /dev/null, NUL or /dev/NULL -# CLASSPATH_SEPARATOR separator in classpath, ; or : -# LIB_PREFIX dynamic or static library prefix, lib or empty -# LIB_SUFFIX static library file suffix, .lib or .a? -# LIBRARY_SUFFIX dynamic library file suffix, .dll or .so -# OBJECT_SUFFIX object file suffix, .o or .obj -# EXE_SUFFIX executable file suffix, .exe or empty -# BUNDLE_FILE_SUFFIX suffix for bundles: .tar or .tar.gz -# ISA_DIR solaris only: /sparcv9 or /amd64 -# LIBARCH32 solaris only: sparc or i386 -# LIBARCH64 solaris only: sparcv9 or amd64 -# USING_CYGWIN windows only: true or false -# ISHIELD_TEMP_MIN windows only: minimum disk space in temp area - -# Only run uname once in this make session. -ifndef SYSTEM_UNAME - SYSTEM_UNAME := $(shell uname) - export SYSTEM_UNAME -endif - -# -# Prune out all known SCM (Source Code Management) directories -# so they will not be included when copying directory trees -# or packaging up .jar files, etc. This applies to all workspaces. -# -SCM_DIRs = .hg .svn CVS RCS SCCS Codemgr_wsdata deleted_files .hgignore .hgtags -# When changing SCM_DIRs also change SCM_DIRS_rexp and SCM_DIRS_prune: -SCM_DIRS_rexp = ".hg|.svn|CVS|RCS|SCCS|Codemgr_wsdata|deleted_files|.hgignore|.hgtags" -SCM_DIRS_prune = \( -name .hg -o -name .svn -o -name CVS -o -name RCS -o -name SCCS -o -name Codemgr_wsdata -o -name deleted_files -o -name .hgignore -o -name .hgtags \) -prune - -# Don't define this unless it's not defined -ifndef VARIANT - VARIANT=OPT -endif - -# Platform settings specific to Solaris -ifeq ($(SYSTEM_UNAME), SunOS) - PLATFORM = solaris - # Solaris sparc build can be either 32-bit or 64-bit. - # Default to 32, but allow explicit setting to 32 or 64. - ifndef ARCH_DATA_MODEL - ARCH_DATA_MODEL=32 - endif - ifeq ($(ARCH_DATA_MODEL), 32) - processor := $(shell uname -p) - archExpr = case "$(processor)" in \ - i[3-9]86) \ - echo i586 \ - ;; \ - sparc*) \ - echo sparc \ - ;; \ - *) \ - echo $(processor) \ - ;; \ - esac - ARCH := $(shell $(archExpr)) - else - ARCH := $(shell isainfo -n) - # ISA_DIR is used to locate 64-bit specific libraries which are generally - # in the same general place as other libraries under the ./$(ARCH) directory - ISA_DIR = /$(ARCH) - endif - # Need to maintain the jre/lib/i386 location for 32-bit Intel - ifeq ($(ARCH), i586) - ARCH_FAMILY = $(ARCH) - LIBARCH = i386 - # Value of Java os.arch property - ARCHPROP = x86 - else - ifeq ($(ARCH), amd64) - ARCH_FAMILY = i586 - else - ARCH_FAMILY = sparc - endif - LIBARCH = $(ARCH) - # Value of Java os.arch property - ARCHPROP = $(LIBARCH) - endif - # The two LIBARCH names - ifeq ($(ARCH_FAMILY), sparc) - LIBARCH32 = sparc - LIBARCH64 = sparcv9 - else - LIBARCH32 = i386 - LIBARCH64 = amd64 - endif - # Suffix for file bundles used in previous release - BUNDLE_FILE_SUFFIX=.tar - # How much RAM does this machine have (zones send an error to stderr): - MB_OF_MEMORY:=$(shell /usr/sbin/prtconf 2>/dev/null | fgrep 'Memory size:' | expand | cut -d' ' -f3) -endif - -# Platform settings specific to Linux -ifeq ($(SYSTEM_UNAME), Linux) - PLATFORM = linux - # Arch and OS name/version - ifdef CROSS_COMPILE_ARCH - mach := $(CROSS_COMPILE_ARCH) - else - mach := $(shell uname -m) - endif - archExpr = case "$(mach)" in \ - i[3-9]86) \ - echo i586 \ - ;; \ - ia64) \ - echo ia64 \ - ;; \ - x86_64) \ - echo amd64 \ - ;; \ - sparc*) \ - echo sparc \ - ;; \ - arm*) \ - echo arm \ - ;; \ - *) \ - echo $(mach) \ - ;; \ - esac - ARCH := $(shell $(archExpr) ) - ARCH_FAMILY := $(ARCH) - - # Linux builds may be 32-bit or 64-bit data model. - ifeq ($(ARCH), sparc) - # Linux sparc build can be either 32-bit or 64-bit. - # Default to 32, but allow explicit setting to 32 or 64. - ifndef ARCH_DATA_MODEL - ARCH_DATA_MODEL=32 - endif - ifeq ($(ARCH_DATA_MODEL), 32) - ARCH=sparc - else - ARCH=sparcv9 - endif - else - # Most archs are 32-bit - ifndef ARCH_DATA_MODEL - ARCH_DATA_MODEL=32 - ifeq ($(ARCH), amd64) - ARCH_DATA_MODEL=64 - endif - ifeq ($(ARCH), ia64) - ARCH_DATA_MODEL=64 - endif - endif - endif - - # Need to maintain the jre/lib/i386 location for 32-bit Intel - ifeq ($(ARCH), i586) - LIBARCH = i386 - else - LIBARCH = $(ARCH) - endif - - # Value of Java os.arch property - ARCHPROP = $(LIBARCH) - - # Suffix for file bundles used in previous release - BUNDLE_FILE_SUFFIX=.tar.gz - # How much RAM does this machine have: - MB_OF_MEMORY := $(shell free -m | fgrep Mem: | awk '{print $$2;}' ) -endif - -ifeq ($(SYSTEM_UNAME), Darwin) - PLATFORM = macosx - OS_NAME = darwin - OS_VENDOR = Apple - GB_OF_MEMORY := $(shell system_profiler SPHardwareDataType | fgrep Memory: | awk '{print $$2}') - MB_OF_MEMORY := $(shell expr ${GB_OF_MEMORY} '*' 1024) -endif - -# Platform settings specific to BSD/Mac OS X -ifeq ($(PLATFORM), macosx) - OS_VERSION := $(shell uname -r) - - # Arch and OS name/version - # Darwin x86 builds are i386/amd64 universal by default. - # Allow arch to be set from the environment to avoid this. - ifeq ($(origin ARCH), undefined) - ifeq ($(PLATFORM), macosx) -# ifdef OPENJDK -- when universal 32/64 binaries available in Hotspot -# mach := universal -# else - mach := x86_64 -# endif - else - mach := $(shell uname -m) - endif - else - mach := $(ARCH) - endif - - archExpr = case "$(mach)" in \ - i[3-9]86) \ - echo i586 \ - ;; \ - sparc64) \ - echo sparcv9 \ - ;; \ - sparc*) \ - echo sparc \ - ;; \ - x86_64) \ - echo amd64 \ - ;; \ - universal) \ - echo universal \ - ;; \ - "Power Macintosh") \ - echo ppc \ - ;; \ - *) \ - echo $(mach) \ - ;; \ - esac - ARCH := $(shell $(archExpr) ) - ARCH_FAMILY := $(ARCH) - - # i586, sparc, and ppc are 32 bit, amd64 and sparc64 are 64 - # ARCH_DATA_MODEL does not exactly mean anything in universal - # but it has to be one or the other, so pick 32 - ifneq (,$(findstring $(ARCH), i586 sparc ppc universal)) - ARCH_DATA_MODEL=32 - else - ARCH_DATA_MODEL=64 - endif - - # Need to maintain the jre/lib/i386 location for 32-bit Intel - ifeq ($(ARCH), i586) - LIBARCH = i386 - else - LIBARCH = $(ARCH) - endif - - # Value of Java os.arch property - ARCHPROP = $(LIBARCH) - - # Suffix for file bundles used in previous release - BUNDLE_FILE_SUFFIX=.tar.gz - # How much RAM does this machine have: -endif - -# Windows with and without CYGWIN will be slightly different -ifeq ($(SYSTEM_UNAME), Windows_NT) - PLATFORM = windows -endif -ifneq (,$(findstring CYGWIN,$(SYSTEM_UNAME))) - PLATFORM = windows - USING_CYGWIN = true - export USING_CYGWIN - CYGPATH_CMD=cygpath -a -s -m - # Only run "cygpath /" once in this make session. - ifndef CYGWIN_HOME - CYGWIN_HOME := $(shell $(CYGPATH_CMD) /) - export CYGWIN_HOME - endif -endif - -# Platform settings specific to Windows -ifeq ($(PLATFORM), windows) - # Windows builds default to the appropriate for the underlaying - # architecture. - # Temporary disk area - TEMP_DISK=C:/temp - # GNU Make or MKS overrides $(PROCESSOR_ARCHITECTURE) to always - # return "x86". Use the first word of $(PROCESSOR_IDENTIFIER) instead. - # And sometimes PROCESSOR_IDENTIFIER is not defined at all - # (in some restricted shells), so we use uname if we have to. - ifeq ($(PROCESSOR_IDENTIFIER),) - # Only run uname -m once in this make session. - ifndef SYSTEM_UNAME_M - SYSTEM_UNAME_M := $(shell uname -m) - export SYSTEM_UNAME_M - endif - PROC_ARCH:=$(SYSTEM_UNAME_M) - else - PROC_ARCH:=$(word 1, $(PROCESSOR_IDENTIFIER)) - endif - # Cover all the possibilities, MKS uname, CYGWIN uname, PROCESSOR_IDENTIFIER - # Get: X86, X64, or IA64 - PROC_ARCH:=$(patsubst 386,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst 486,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst 586,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst 686,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst i386,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst i486,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst i586,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst i686,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst x86,X86,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst intel64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst Intel64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst INTEL64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst em64t,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst EM64T,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst amd64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst AMD64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst 8664,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst x86_64,X64,$(PROC_ARCH)) - PROC_ARCH:=$(patsubst ia64,IA64,$(PROC_ARCH)) - ifndef ARCH_DATA_MODEL - ifeq ($(PROC_ARCH),IA64) - ARCH_DATA_MODEL=64 - else - ifeq ($(PROC_ARCH),X64) - ARCH_DATA_MODEL=64 - else - ARCH_DATA_MODEL=32 - endif - endif - endif - export ARCH_DATA_MODEL - ifeq ($(ARCH_DATA_MODEL), 64) - # If the user wants to perform a cross compile build then they must - # - set ARCH_DATA_MODEL=64 and either - # + set ARCH to ia64 or amd64, or - ifeq ($(PROC_ARCH),X64) - ARCH=amd64 - else - ifeq ($(PROC_ARCH),IA64) - ARCH=ia64 - endif - endif - LIBARCH=$(ARCH) - # Value of Java os.arch property - ARCHPROP=$(LIBARCH) - else - # LIBARCH is used to preserve the jre/lib/i386 directory name for 32-bit intel - ARCH=i586 - LIBARCH=i386 - # Value of Java os.arch property - ARCHPROP=x86 - endif - ARCH_FAMILY = $(ARCH) - # Where is unwanted output to be delivered? - # MKS uses the special file "NUL", cygwin uses the customary unix file. - ifeq ($(USING_CYGWIN),true) - DEV_NULL = /dev/null - else - DEV_NULL = NUL - endif - export DEV_NULL - # Classpath separator - CLASSPATH_SEPARATOR = ; - # The suffix used for object file (.o for unix .obj for windows) - OBJECT_SUFFIX = obj - # The suffix applied to executables (.exe for windows, nothing for solaris) - EXE_SUFFIX = .exe - # The prefix applied to library files (lib for solaris, nothing for windows) - LIB_PREFIX= - LIBRARY_SUFFIX = dll - LIB_SUFFIX = lib - # User name determination (set _USER) - ifndef USER - ifdef USERNAME - _USER := $(USERNAME) - else - ifdef LOGNAME - _USER := $(LOGNAME) - else - _USER := $(shell id -un) - endif - endif - else - _USER:=$(USER) - endif - # Location of client/server directories - ARCH_VM_SUBDIR=jre/bin - # Suffix for file bundles used in previous release - BUNDLE_FILE_SUFFIX=.tar - # ISHIELD_TEMP_MIN is the difference of an empty C:\TEMP vs. one after a - # bundles build on windows. - ISHIELD_TEMP_MIN=250000 - # How much RAM does this machine have: - ifeq ($(JDK_HAS_MEM_INFO),) - MB_OF_MEMORY := 1024 - endif -endif - -# Unix type settings (same for all unix platforms) -ifneq ($(PLATFORM), windows) - # Temporary disk area - TEMP_DISK=/tmp - # Where is unwanted output to be delivered? - DEV_NULL = /dev/null - export DEV_NULL - # Character used between entries in classpath - CLASSPATH_SEPARATOR = : - # suffix used for object file (.o for unix .obj for windows) - OBJECT_SUFFIX = o - # The suffix applied to runtime libraries - LIBRARY_SUFFIX = so - # The suffix applied to link libraries - LIB_SUFFIX = so - # The suffix applied to executables (.exe for windows, nothing for solaris) - EXE_SUFFIX = - # The prefix applied to library files (lib for solaris, nothing for windows) - LIB_PREFIX = lib - # User name determination (set _USER) - ifndef USER - ifdef LOGNAME - _USER := $(LOGNAME) - else - _USER := $(shell logname) - endif - else - _USER:=$(USER) - endif - # Location of client/server directories - ARCH_VM_SUBDIR=jre/lib/$(LIBARCH) -endif - -# Darwin-specific Overrides -ifeq ($(SYSTEM_UNAME),Darwin) - # The suffix applied to runtime libraries - LIBRARY_SUFFIX = dylib - # The suffix applied to link libraries - ifeq ($(ARCH), universal) - LIB_SUFFIX = o - else - LIB_SUFFIX = a - endif - - ifeq ($(PLATFORM), macosx) - ARCH_VM_SUBDIR=jre/lib/$(LIBARCH) - endif -endif - -# Machines with 512Mb or less of real memory are considered low memory -# build machines and adjustments will be made to prevent excessing -# system swapping during the build. -ifeq ($(JDK_HAS_MEM_INFO),) - JDK_HAS_MEM_INFO=true - export JDK_HAS_MEM_INFO - ifneq ($(MB_OF_MEMORY),) - LOW_MEMORY_MACHINE := $(shell \ - if [ $(MB_OF_MEMORY) -le 512 ] ; then \ - echo "true"; \ - else \ - echo "false"; \ - fi) - MAX_VM_MEMORY := 512 - MIN_VM_MEMORY := $(MAX_VM_MEMORY) - else - MB_OF_MEMORY := unknown - LOW_MEMORY_MACHINE := true - MAX_VM_MEMORY := 384 - MIN_VM_MEMORY := 128 - endif - export MB_OF_MEMORY - export LOW_MEMORY_MACHINE - export MAX_VM_MEMORY - export MIN_VM_MEMORY -endif - -# If blanks in the username, use the first 4 words and pack them together -_USER1:=$(subst ', ,$(_USER)) -_USER2:=$(subst ", ,$(_USER1)) -USER:=$(word 1,$(_USER2))$(word 2,$(_USER2))$(word 3,$(_USER2))$(word 4,$(_USER2)) -export USER - -export PLATFORM -endif - diff --git a/jdk/makefiles/common/shared/PrivateDefs.gmk-example b/jdk/makefiles/common/shared/PrivateDefs.gmk-example deleted file mode 100644 index 93f6a43fb47..00000000000 --- a/jdk/makefiles/common/shared/PrivateDefs.gmk-example +++ /dev/null @@ -1,19 +0,0 @@ - -# This file, when re-named to PrivateDefs.gmk will get included in the -# makefile definitions (before the ALT_ variables are read) so that you can -# override makefile settings permanently for a workspace. -# Use of this file will cause WARNING errors, repeatedly, for a reason. -# -# WARNING: Use with caution. -# - -# EXAMPLE: Testing a special build of hotspot -# (this is the build/solaris/export-solaris-sparc directory from doing -# a 'cd hotspot/make; gnumake' build) -# -ifeq ($(PLATFORM),solaris) - ifeq ($(ARCH),sparc) - ALT_HOTSPOT_IMPORT_PATH=$(JDK_TOPDIR)/../export-solaris-sparc - endif -endif - diff --git a/jdk/makefiles/common/shared/Sanity-Settings.gmk b/jdk/makefiles/common/shared/Sanity-Settings.gmk deleted file mode 100644 index e571b068f82..00000000000 --- a/jdk/makefiles/common/shared/Sanity-Settings.gmk +++ /dev/null @@ -1,267 +0,0 @@ -# -# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Shared sanity settings file. Fills in the variable ALL_SETTINGS. -# - -# On Windows in particular, it can happen that quotes get into the PATH -# variable. This is very bad, and must be caught early or you can -# see errors like: sh: -c: line 0: syntax error near unexpected token -# -ifneq ($(PATH), $(subst ",,$(PATH))) - dummy1:=$(error ERROR: PATH variable contains double quotes, fix your PATH.) -endif -ifneq ($(PATH), $(subst ',,$(PATH))) - dummy1:=$(error ERROR: PATH variable contains single quotes, fix your PATH.) -endif - -# Used to add a heading to ALL_SETTINGS -define addHeading -"\n$1:\n" -endef - -# Used to add a line to ALL_SETTINGS for an optional value -# (need if test for windows which has issues with ; characters in values) -define addOptionalSetting -$(if $($1)," $1 = $($1)\n"," $1 = $($1)\n") -endef - -# Used to add a line to ALL_SETTINGS for something that must have a value -define addRequiredSetting -$(if $($1)," $1 = $($1)\n",$(warning WARNING: $1 should not be empty [Sanity-Settings.gmk])) -endef - -# Used to add a line to ALL_SETTINGS for something that must have a value -define addRequiredVersionSetting -$(if $($1)," $1 = $($1) [requires at least $(REQUIRED_$1)]\n",$(warning WARNING: $1 should not be empty [Sanity-Settings.gmk])) -endef - -# Used to add a series of lines to ALL_SETTINGS -define addAltSetting -" $1 = $($1)\n ALT_$1 = $(ALT_$1)\n" -endef - -# Variable that contains a string of all information - -# Make sure this is a 'do it now' variable. -ALL_SETTINGS:=$(call addHeading,Bootstrap Settings) -ALL_SETTINGS+=$(call addAltSetting,BOOTDIR) -ALL_SETTINGS+=$(call addRequiredVersionSetting,BOOT_VER) -ALL_SETTINGS+=$(call addAltSetting,OUTPUTDIR) -ALL_SETTINGS+=$(call addRequiredSetting,ABS_OUTPUTDIR) - - -ALL_SETTINGS+=$(call addHeading,Build Tool Settings) -ALL_SETTINGS+=$(call addAltSetting,SLASH_JAVA) -ALL_SETTINGS+=$(call addRequiredSetting,VARIANT) -ALL_SETTINGS+=$(call addAltSetting,JDK_DEVTOOLS_DIR) -ALL_SETTINGS+=$(call addOptionalSetting,ANT_HOME) -ALL_SETTINGS+=$(call addAltSetting,UNIXCOMMAND_PATH) -ALL_SETTINGS+=$(call addAltSetting,COMPILER_PATH) -ALL_SETTINGS+=$(call addAltSetting,DEVTOOLS_PATH) -ifeq ($(PLATFORM),linux) - ALL_SETTINGS+=$(call addAltSetting,UNIXCCS_PATH) - ALL_SETTINGS+=$(call addAltSetting,USRBIN_PATH) - ifndef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,GCC29_COMPILER_PATH) - endif -endif -ifeq ($(PLATFORM),solaris) - ALL_SETTINGS+=$(call addAltSetting,UNIXCCS_PATH) - ifndef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,GCC_COMPILER_PATH) - endif -endif -ifeq ($(PLATFORM),windows) - ifneq ($(MSVCRNN_DLL),) - ALL_SETTINGS+=$(call addAltSetting,MSVCRNN_DLL_PATH) - endif - ALL_SETTINGS+=$(call addRequiredSetting,INCLUDE) - ALL_SETTINGS+=$(call addRequiredSetting,LIB) -endif -ALL_SETTINGS+=$(call addOptionalSetting,COMPILER_NAME) -ALL_SETTINGS+=$(call addOptionalSetting,COMPILER_VERSION) -ifdef REQUIRED_CC_VER - ALL_SETTINGS+=$(call addRequiredVersionSetting,CC_VER) -else - ALL_SETTINGS+=$(call addOptionalSetting,CC_VER) -endif -ifeq ($(PLATFORM),solaris) - ifeq ($(ARCH_DATA_MODEL), 32) - ifndef OPENJDK - ALL_SETTINGS+=$(call addRequiredVersionSetting,GCC_VER) - endif - endif -endif -ALL_SETTINGS+=$(call addRequiredVersionSetting,ZIP_VER) -ALL_SETTINGS+=$(call addRequiredVersionSetting,UNZIP_VER) -ifeq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addRequiredVersionSetting,LINK_VER) - ALL_SETTINGS+=$(call addRequiredSetting,CC) - ALL_SETTINGS+=$(call addRequiredSetting,LINK) - ALL_SETTINGS+=$(call addRequiredSetting,DUMPBIN) -endif -ALL_SETTINGS+=$(call addRequiredVersionSetting,ANT_VER) -ALL_SETTINGS+=$(call addRequiredSetting,TEMPDIR) - - -ALL_SETTINGS+=$(call addHeading,Build Directives) -ALL_SETTINGS+=$(call addOptionalSetting,OPENJDK) -ALL_SETTINGS+=$(call addOptionalSetting,USE_HOTSPOT_INTERPRETER_MODE) -ALL_SETTINGS+=$(call addOptionalSetting,PEDANTIC) -ALL_SETTINGS+=$(call addOptionalSetting,DEV_ONLY) -ALL_SETTINGS+=$(call addOptionalSetting,NO_DOCS) -ALL_SETTINGS+=$(call addOptionalSetting,NO_DEMOS) -ALL_SETTINGS+=$(call addOptionalSetting,NO_SAMPLES) -ALL_SETTINGS+=$(call addOptionalSetting,NO_IMAGES) -ALL_SETTINGS+=$(call addOptionalSetting,TOOLS_ONLY) -ALL_SETTINGS+=$(call addOptionalSetting,INSANE) -ALL_SETTINGS+=$(call addRequiredSetting,COMPILE_APPROACH) -ifeq ($(COMPILE_APPROACH), parallel) - ALL_SETTINGS+=$(call addAltSetting,PARALLEL_COMPILE_JOBS) -endif -ALL_SETTINGS+=$(call addOptionalSetting,FASTDEBUG) -ALL_SETTINGS+=$(call addRequiredSetting,COMPILER_WARNINGS_FATAL) -ALL_SETTINGS+=$(call addOptionalSetting,COMPILER_WARNING_LEVEL) -ALL_SETTINGS+=$(call addOptionalSetting,SHOW_ALL_WARNINGS) -ALL_SETTINGS+=$(call addRequiredSetting,INCREMENTAL_BUILD) -ALL_SETTINGS+=$(call addOptionalSetting,CC_HIGHEST_OPT) -ALL_SETTINGS+=$(call addOptionalSetting,CC_HIGHER_OPT) -ALL_SETTINGS+=$(call addOptionalSetting,CC_LOWER_OPT) -ALL_SETTINGS+=$(call addOptionalSetting,CXXFLAGS) -ALL_SETTINGS+=$(call addOptionalSetting,CFLAGS) - -ALL_SETTINGS+=$(call addOptionalSetting,BOOT_JAVA_CMD) -ALL_SETTINGS+=$(call addOptionalSetting,BOOT_JAVAC_CMD) -ALL_SETTINGS+=$(call addOptionalSetting,BOOT_JAR_CMD) -ALL_SETTINGS+=$(call addOptionalSetting,BOOT_JARSIGNER_CMD) - -# These don't print out well with windows due to the ';' characters -ifneq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addOptionalSetting,JAVAC_CMD) - ALL_SETTINGS+=$(call addOptionalSetting,JAVAH_CMD) - ALL_SETTINGS+=$(call addOptionalSetting,JAVADOC_CMD) -endif - -ALL_SETTINGS+=$(call addHeading,Build Platform Settings) -ALL_SETTINGS+=$(call addRequiredSetting,USER) -ALL_SETTINGS+=$(call addRequiredSetting,PLATFORM) -ALL_SETTINGS+=$(call addRequiredSetting,ARCH) -ALL_SETTINGS+=$(call addRequiredSetting,LIBARCH) -ALL_SETTINGS+=$(call addRequiredSetting,ARCH_FAMILY) -ALL_SETTINGS+=$(call addRequiredSetting,ARCH_DATA_MODEL) -ALL_SETTINGS+=$(call addRequiredSetting,ARCHPROP) -ifeq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addRequiredSetting,PROCESSOR_ARCHITECTURE) - ALL_SETTINGS+=$(call addRequiredSetting,PROCESSOR_IDENTIFIER) - ifdef USING_CYGWIN - ALL_SETTINGS+=$(call addRequiredSetting,USING_CYGWIN) - ALL_SETTINGS+=$(call addRequiredVersionSetting,CYGWIN_VER) - ALL_SETTINGS+=$(call addRequiredSetting,CYGPATH_CMD) - else - ALL_SETTINGS+=$(call addRequiredVersionSetting,MKS_VER) - ALL_SETTINGS+=$(call addOptionalSetting,DOSNAME_CMD) - endif -endif -ifeq ($(PLATFORM),linux) - ifdef REQUIRED_ALSA_VERSION - ALL_SETTINGS+=$(call addRequiredSetting,ALSA_VERSION) - endif -endif -ALL_SETTINGS+=$(call addRequiredVersionSetting,OS_VERSION) -ALL_SETTINGS+=$(call addOptionalSetting,OS_VARIANT_NAME) -ALL_SETTINGS+=$(call addOptionalSetting,OS_VARIANT_VERSION) -ALL_SETTINGS+=$(call addRequiredSetting,MB_OF_MEMORY) - - -ALL_SETTINGS+=$(call addHeading,GNU Make Settings) -ALL_SETTINGS+=$(call addRequiredSetting,MAKE) -ALL_SETTINGS+=$(call addRequiredVersionSetting,MAKE_VER) -ALL_SETTINGS+=$(call addOptionalSetting,MAKECMDGOALS) -ALL_SETTINGS+=$(call addOptionalSetting,MAKEFLAGS) -ALL_SETTINGS+=$(call addRequiredSetting,SHELL) - - -ALL_SETTINGS+=$(call addHeading,Target Build Versions) -ALL_SETTINGS+=$(call addRequiredSetting,JDK_VERSION) -ALL_SETTINGS+=$(call addOptionalSetting,MILESTONE) -ALL_SETTINGS+=$(call addOptionalSetting,RELEASE) -ALL_SETTINGS+=$(call addRequiredSetting,FULL_VERSION) -ALL_SETTINGS+=$(call addOptionalSetting,BUILD_NUMBER) - - -ALL_SETTINGS+=$(call addHeading,External File/Binary Locations) -ALL_SETTINGS+=$(call addRequiredSetting,USRJDKINSTANCES_PATH) -ALL_SETTINGS+=$(call addAltSetting,BUILD_JDK_IMPORT_PATH) -ALL_SETTINGS+=$(call addAltSetting,JDK_IMPORT_PATH) -ALL_SETTINGS+=$(call addAltSetting,LANGTOOLS_DIST) -ALL_SETTINGS+=$(call addAltSetting,CORBA_DIST) -ALL_SETTINGS+=$(call addAltSetting,JAXP_DIST) -ALL_SETTINGS+=$(call addAltSetting,JAXWS_DIST) -ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_DOCS_IMPORT_PATH) -ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_IMPORT_PATH) -ifeq ($(ARCH_DATA_MODEL), 32) - ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_CLIENT_PATH) -endif -ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_SERVER_PATH) -ifeq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addAltSetting,HOTSPOT_LIB_PATH) - ALL_SETTINGS+=$(call addRequiredSetting,DXSDK_VER) - ALL_SETTINGS+=$(call addAltSetting,DXSDK_PATH) - ALL_SETTINGS+=$(call addAltSetting,DXSDK_INCLUDE_PATH) - ALL_SETTINGS+=$(call addAltSetting,DXSDK_LIB_PATH) - ALL_SETTINGS+=$(call addAltSetting,WINDOWSSDKDIR) - ALL_SETTINGS+=$(call addRequiredSetting,RC) - ALL_SETTINGS+=$(call addRequiredSetting,REBASE) - ifndef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,DEPLOY_MSSDK) - ALL_SETTINGS+=$(call addAltSetting,INSTALL_MSSDK) - ALL_SETTINGS+=$(call addAltSetting,WSCRIPT) - ALL_SETTINGS+=$(call addAltSetting,MSICERT) - endif -endif -ALL_SETTINGS+=$(call addAltSetting,CACERTS_FILE) -ifndef OPENJDK - ALL_SETTINGS+=$(call addAltSetting,MOZILLA_HEADERS_PATH) -endif -ifneq ($(PLATFORM),windows) - ALL_SETTINGS+=$(call addAltSetting,CUPS_HEADERS_PATH) -endif - -ifdef OPENJDK - ALL_SETTINGS+=$(call addHeading,OpenJDK-specific settings) - ALL_SETTINGS+=$(call addAltSetting,FREETYPE_HEADERS_PATH) - ALL_SETTINGS+=$(call addAltSetting,FREETYPE_LIB_PATH) -endif - -ifdef OPENJDK - ALL_SETTINGS+=$(call addHeading,Previous JDK Settings) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_RELEASE_PATH) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_JDK_VERSION) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_JDK_FILE) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_JRE_FILE) - ALL_SETTINGS+=$(call addAltSetting,PREVIOUS_RELEASE_IMAGE) -endif diff --git a/jdk/makefiles/java/Makefile b/jdk/makefiles/java/Makefile deleted file mode 100644 index 57399f5ac83..00000000000 --- a/jdk/makefiles/java/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building all of java -# - -PRODUCT=java -BUILDDIR=.. -include $(BUILDDIR)/common/Defs.gmk - -# -# The order of subdirs here is important -# -SUBDIRS += redist - -# Others -# Note: java_crw_demo java_hprof_demo are demos but must be delivered built in sdk - -SUBDIRS += - -SUBDIRS_management = -SUBDIRS_misc = - -#TODO Check invoke -# logging instrument invoke sql rmi - -ifeq ($(PLATFORM), macosx) - SUBDIRS += jobjc -endif # PLATFORM - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/java/invoke/Makefile b/jdk/makefiles/java/invoke/Makefile deleted file mode 100644 index 93b1f46f5d3..00000000000 --- a/jdk/makefiles/java/invoke/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. - -PACKAGE = java.lang.invoke -PRODUCT = java -include $(BUILDDIR)/common/Defs.gmk - -AUTO_FILES_JAVA_DIRS = java/lang/invoke sun/invoke -FILES_java = \ - java/lang/ClassValue.java \ - java/lang/BootstrapMethodError.java - -# The sources built here use new language syntax to generate -# method handle calls. Let's be sure we are using that format. -LANGUAGE_VERSION = -source 7 -CLASS_VERSION = -target 7 - -include $(BUILDDIR)/common/Classes.gmk diff --git a/jdk/makefiles/java/redist/Makefile b/jdk/makefiles/java/redist/Makefile deleted file mode 100644 index 88420927a80..00000000000 --- a/jdk/makefiles/java/redist/Makefile +++ /dev/null @@ -1,497 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Imports files exported by a hotspot build or provided from an external -# location into the OUTPUTDIR, and also primes the OUTPUTDIR with files -# that are provided inside this workspace. -# -# IMPORT_LIST contains the list of destination files that are copied -# from external places (outside this workspace). -# -# INTERNAL_IMPORT_LIST is the list of destination files from BUILDDIR. -# - -BUILDDIR = ../.. -PRODUCT = java -include $(BUILDDIR)/common/Defs.gmk -include $(BUILDDIR)/Tools.gmk - -$(info ENTERING redist) - -SERVER_LOCATION = server -CLIENT_LOCATION = client -KERNEL_LOCATION = kernel - -DB_SUFFIX = _db -DTRACE_SUFFIX = _dtrace - -ifeq ($(PLATFORM), windows) - LIB_LOCATION = $(BINDIR) -else ifeq ($(PLATFORM), macosx) - LIB_LOCATION = $(LIBDIR) -else - LIB_LOCATION = $(LIBDIR)/$(LIBARCH) -endif - -JVM_NAME = $(LIB_PREFIX)jvm.$(LIBRARY_SUFFIX) -JVMLIB_NAME = $(LIB_PREFIX)jvm.$(LIB_SUFFIX) -JVMMAP_NAME = $(LIB_PREFIX)jvm.map -JVMPDB_NAME = $(LIB_PREFIX)jvm.pdb -LIBJSIG_NAME = $(LIB_PREFIX)jsig.$(LIBRARY_SUFFIX) -JVMDB_NAME = $(LIB_PREFIX)jvm$(DB_SUFFIX).$(LIBRARY_SUFFIX) -JVMDTRACE_NAME = $(LIB_PREFIX)jvm$(DTRACE_SUFFIX).$(LIBRARY_SUFFIX) - -JVM_DEBUGINFO_NAME = $(LIB_PREFIX)jvm.debuginfo -LIBJSIG_DEBUGINFO_NAME = $(LIB_PREFIX)jsig.debuginfo -JVMDB_DEBUGINFO_NAME = $(LIB_PREFIX)jvm$(DB_SUFFIX).debuginfo -JVMDTRACE_DEBUGINFO_NAME = $(LIB_PREFIX)jvm$(DTRACE_SUFFIX).debuginfo - -CLASSSHARINGDATA_DIR = $(BUILDDIR)/../make/tools/sharing - -# Needed to do file copy -ABS_BUILDDIR :=$(call FullPath,$(BUILDDIR)) - -SUBDIRS_desktop = -SUBDIRS_tools = sajdi -include $(BUILDDIR)/common/Subdirs.gmk - -all clean clobber:: - $(SUBDIRS-loop) - -all:: build - -# List of files created here or coming from BUILDDIR area (this workspace) -INTERNAL_IMPORT_LIST = $(LIBDIR)/classlist - -# List of files coming from outside this workspace -ifeq ($(JVM_VARIANT_SERVER),true) - IMPORT_LIST = $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_NAME) \ - $(LIB_LOCATION)/$(SERVER_LOCATION)/Xusage.txt - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVM_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DEBUGINFO_NAME) - endif - endif -endif -ifeq ($(JVM_VARIANT_CLIENT),true) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_NAME) \ - $(LIB_LOCATION)/$(CLIENT_LOCATION)/Xusage.txt - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVM_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DEBUGINFO_NAME) - endif - endif -endif - -$(info ENTERING redist 2) -ifeq ($(PLATFORM), windows) - IMPORT_LIST += $(BINDIR)/$(notdir $(MSVCR100DLL)) - - $(BINDIR)/$(notdir $(MSVCR100DLL)): $(MSVCR100DLL) - $(install-import-file) - $(call chmod-file, a+x) - - # Get the hotspot .map and .pdb files for client and server - ifeq ($(JVM_VARIANT_SERVER),true) - IMPORT_LIST += \ - $(LIBDIR)/$(JVMLIB_NAME) \ - $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMMAP_NAME) \ - $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMPDB_NAME) - endif - - # Add .map and .pdb files to the import path for client and kernel VMs. - ifeq ($(JVM_VARIANT_CLIENT),true) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMMAP_NAME) \ - $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMPDB_NAME) - endif - ifeq ($(JVM_VARIANT_KERNEL),true) - IMPORT_LIST += $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMMAP_NAME) \ - $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMPDB_NAME) - endif - - $(info XXXX $(LIBDIR)/$(JVMLIB_NAME): $(HOTSPOT_LIB_PATH)/$(JVMLIB_NAME)) - $(LIBDIR)/$(JVMLIB_NAME): $(HOTSPOT_LIB_PATH)/$(JVMLIB_NAME) - $(install-import-file) - - # it is OK for the .map and .pdb files to not exist, so do not force a - # dependency on them from the bootstrap location, and allow the copy to fail. - $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMMAP_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_CLIENT_PATH)/$(JVMMAP_NAME) $@ - - $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMMAP_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_KERNEL_PATH)/$(JVMMAP_NAME) $@ - - $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMMAP_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_SERVER_PATH)/$(JVMMAP_NAME) $@ - - $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMPDB_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_CLIENT_PATH)/$(JVMPDB_NAME) $@ - - $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMPDB_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_KERNEL_PATH)/$(JVMPDB_NAME) $@ - - $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMPDB_NAME): - @$(prep-target) - -$(CP) $(HOTSPOT_SERVER_PATH)/$(JVMPDB_NAME) $@ - -else - # Posix like systems - IMPORT_LIST += $(LIB_LOCATION)/$(LIBJSIG_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) - endif - endif - ifeq ($(JVM_VARIANT_CLIENT),true) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain the target of the symlink - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) - endif - endif - endif - ifeq ($(JVM_VARIANT_SERVER),true) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain the target of the symlink - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) - endif - endif - endif - - ifeq ($(PLATFORM), solaris) - - ifeq ($(JVM_VARIANT_CLIENT),true) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_NAME) - - # The conditional can be removed when import JDKs contain these files. - ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_NAME) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_NAME) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME) - IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME) - endif - endif - else - $(warning WARNING: $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_NAME) not found!) - endif - - $(LIB_LOCATION)/$(JVM_NAME): $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_NAME) - @$(prep-target) - endif - - ifeq ($(JVM_VARIANT_SERVER),true) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDB_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_DEBUGINFO_NAME) - endif - endif - # The conditional can be removed when import JDKs contain these files. - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME) - endif - endif - else - $(warning WARNING: $(HOTSPOT_SERVER_PATH)/$(JVMDB_NAME) not found!) - endif - - # The conditional can be removed when import JDKs contain these files. - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME) - endif - endif - else - $(warning WARNING: $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_NAME) not found!) - endif - - # The conditional can be removed when import JDKs contain these files. - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_NAME) - ifneq ($(OBJCOPY),) - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME) - endif - endif - else - $(warning WARNING: $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_NAME) not found!) - endif - endif - endif -endif - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVM_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVM_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVM_NAME): $(HOTSPOT_KERNEL_PATH)/$(JVM_NAME) - $(install-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(LIBJSIG_NAME): $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME): $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_NAME): - @$(prep-target) - $(call install-sym-link, ../$(LIBJSIG_NAME)) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) \ -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME): - @$(prep-target) - $(call install-sym-link, ../$(LIBJSIG_DEBUGINFO_NAME)) -endif -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_NAME): - @$(prep-target) - $(call install-sym-link, ../$(LIBJSIG_NAME)) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME): - @$(prep-target) - $(call install-sym-link, ../$(LIBJSIG_DEBUGINFO_NAME)) -endif - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDB_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDB_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDB_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDB_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDB_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDB_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDTRACE_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDTRACE_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_NAME): $(HOTSPOT_SERVER_PATH)/$(JVM_NAME) - $(install-import-file) - @$(call binary_file_verification,$@) - -ifneq ($(OBJCOPY),) -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_DEBUGINFO_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/$(JVM_DEBUGINFO_NAME) - $(install-import-file) -endif - -$(LIB_LOCATION)/$(SERVER_LOCATION)/Xusage.txt : $(HOTSPOT_SERVER_PATH)/Xusage.txt - $(install-import-file) - - -$(LIB_LOCATION)/$(CLIENT_LOCATION)/Xusage.txt : $(HOTSPOT_CLIENT_PATH)/Xusage.txt - $(install-import-file) - -$(LIB_LOCATION)/$(KERNEL_LOCATION)/Xusage.txt : $(HOTSPOT_KERNEL_PATH)/Xusage.txt - $(install-file) - -# -# Specific to non-OpenJDK building -# -ifndef OPENJDK - -INTERNAL_IMPORT_LIST += \ - $(LIBDIR)/security/US_export_policy.jar \ - $(LIBDIR)/security/local_policy.jar \ - $(LIBDIR)/jce.jar - -$(LIBDIR)/jce.jar: \ - $(JDK_TOPDIR)/make/closed/tools/crypto/jce/jce.jar - $(install-file) -$(LIBDIR)/security/US_export_policy.jar: \ - $(JDK_TOPDIR)/make/closed/tools/crypto/jce/US_export_policy.jar - $(install-file) -$(LIBDIR)/security/local_policy.jar: \ - $(JDK_TOPDIR)/make/closed/tools/crypto/jce/local_policy.jar - $(install-file) - -endif # OPENJDK - -# Construct classlist file -$(LIBDIR)/classlist: \ - $(CLASSSHARINGDATA_DIR)/classlist.$(PLATFORM) \ - $(ADDJSUM_JARFILE) - @$(prep-target) - @$(RM) -f $@.temp - $(TOOL_ADDJSUM) \ - $(CLASSSHARINGDATA_DIR)/classlist.$(PLATFORM) $@.temp - $(MV) $@.temp $@ - -# Import internal files (ones that are stashed in this source tree) -import_internal_files : $(INTERNAL_IMPORT_LIST) - -# Import files from the JDK that we are not building -import_files: $(IMPORT_LIST) - -# Get component information variables and rules -include $(BUILDDIR)/common/internal/ImportComponents.gmk - -# Security files we need to import -SEC_FILES_ZIP=$(ABS_BUILDDIR)/tools/crypto/sec-bin.zip -SEC_FILES_WIN_ZIP=$(ABS_BUILDDIR)/tools/crypto/sec-windows-bin.zip -JGSS_WIN32_FILES_ZIP=$(ABS_BUILDDIR)/tools/crypto/jgss-windows-i586-bin.zip -JGSS_WIN64_FILES_ZIP=$(ABS_BUILDDIR)/tools/crypto/jgss-windows-x64-bin.zip - -# Unzip zip file $2 into directory $1 (if $2 exists) -# Warning: $2 must be absolute path not relative -define SecUnzipper -if [ -f $2 ] ; then \ - $(MKDIR) -p $1; \ - $(ECHO) "( $(CD) $1 && $(UNZIP) -o $2 )"; \ - ( $(CD) $1 && $(UNZIP) -o $2 ); \ -fi -endef - -# If sec-bin exists, unpack it into the build directory -# Also, the library recompile build indirectly depends on two SSL classes, -# so copy those as well FIXUP -# if sec-windows-bin exists, unpack it into the build directory -# if JGSS files exists, unpack it into the build directory -$(TEMPDIR)/security_imported: - @$(prep-target) - @$(call SecUnzipper,$(OUTPUTDIR),$(SEC_FILES_ZIP)) -ifeq ($(PLATFORM), windows) - @$(call SecUnzipper,$(OUTPUTDIR),$(SEC_FILES_WIN_ZIP)) -endif -ifeq ($(PLATFORM), windows) - ifeq ($(ARCH_DATA_MODEL), 32) - @$(call SecUnzipper,$(OUTPUTDIR),$(JGSS_WIN32_FILES_ZIP)) - else - @$(call SecUnzipper,$(OUTPUTDIR),$(JGSS_WIN64_FILES_ZIP)) - endif -endif - @$(ECHO) "Imported on `$(DATE)`" > $@ - -# Import all files from other components -$(TEMPDIR)/components_imported: - @$(prep-target) - $(call import-component-binaries,$(ABS_OUTPUTDIR)) - $(call import-component-sources,$(IMPORTSRCDIR)) - $(call import-component-docs,$(IMPORTDOCDIR)) - $(call import-component-classes,$(CLASSDESTDIR)) - @$(ECHO) "Imported on `$(DATE)`" > $@ - -# Do pretty much everything -build : import_files \ - import_internal_files \ - $(TEMPDIR)/components_imported \ - $(TEMPDIR)/security_imported - -# Clean up what we imported (except for component files) -clean clobber:: - $(RM) $(IMPORT_LIST) - $(RM) $(INTERNAL_IMPORT_LIST) - $(call import-component-sources-clean,$(IMPORTSRCDIR)) - $(call import-component-docs-clean,$(IMPORTDOCDIR)) - $(call import-component-classes-clean,$(CLASSDESTDIR)) - $(RM) $(TEMPDIR)/components_imported - $(RM) $(TEMPDIR)/security_imported - -.PHONY: import_files import_internal_files - diff --git a/jdk/makefiles/java/redist/sajdi/Makefile b/jdk/makefiles/java/redist/sajdi/Makefile deleted file mode 100644 index 6bec18ce9d0..00000000000 --- a/jdk/makefiles/java/redist/sajdi/Makefile +++ /dev/null @@ -1,116 +0,0 @@ -# -# Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PRODUCT = java -include $(BUILDDIR)/common/Defs.gmk - -ifeq ($(PLATFORM), windows) - LIB_LOCATION = $(BINDIR) -else ifeq ($(PLATFORM), macosx) - LIB_LOCATION = $(LIBDIR) -else - LIB_LOCATION = $(LIBDIR)/$(LIBARCH) -endif - -# INCLUDE_SA is false on platforms where SA is not supported. -# On platforms where it is supported, we want to allow it to -# not be present, at least temporarily. So, -# if the SA files (well, just sa-jdi.jar) do not exist -# in the HOTSPOT_IMPORT_PATH, then we won't build SA. -SA_EXISTS := $(shell if [ -r $(HOTSPOT_IMPORT_PATH)/lib/sa-jdi.jar ] ; then \ - $(ECHO) true; \ - else \ - $(ECHO) false; \ - fi) - -ifeq ($(SA_EXISTS), false) - INCLUDE_SA := false -endif - -IMPORT_LIST = -ifeq ($(INCLUDE_SA), true) - IMPORT_LIST += $(LIBDIR)/sa-jdi.jar \ - $(LIB_LOCATION)/$(SALIB_NAME) - ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) - # the import JDK may not contain .diz files - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(SA_DIZ_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SA_DIZ_NAME) - endif - else - ifeq ($(PLATFORM), windows) - # the import JDK may not contain .pdb files - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(SAPDB_NAME)),) - # assume .map file is present if .pdb is present - IMPORT_LIST += $(LIB_LOCATION)/$(SAMAP_NAME) \ - $(LIB_LOCATION)/$(SAPDB_NAME) - endif - else - # the import JDK may not contain .debuginfo files - ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(SA_DEBUGINFO_NAME)),) - IMPORT_LIST += $(LIB_LOCATION)/$(SA_DEBUGINFO_NAME) - endif - endif - endif - endif -endif # INCLUDE_SA - - -ifeq ($(INCLUDE_SA), true) -# The Serviceability Agent is built in the Hotspot workspace. -# It contains two files: -# - sa-jdi.jar: This goes into the same dir as tools.jar. -# - a shared library: sawindbg.dll on windows / libproc.sa on unix -# This goes into the same dir as the other -# shared libs, eg. libjdwp.so. -$(LIBDIR)/sa-jdi.jar: $(HOTSPOT_IMPORT_PATH)/lib/sa-jdi.jar - $(install-importonly-file) - -$(LIB_LOCATION)/$(SALIB_NAME): $(HOTSPOT_SALIB_PATH)/$(SALIB_NAME) - $(install-import-file) - - ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) -$(LIB_LOCATION)/$(SA_DIZ_NAME): $(HOTSPOT_SALIB_PATH)/$(SA_DIZ_NAME) - $(install-import-file) - else - ifeq ($(PLATFORM), windows) -$(LIB_LOCATION)/$(SAPDB_NAME): $(HOTSPOT_SALIB_PATH)/$(SAPDB_NAME) - $(install-import-file) - -$(LIB_LOCATION)/$(SAMAP_NAME): $(HOTSPOT_SALIB_PATH)/$(SAMAP_NAME) - $(install-import-file) - else -$(LIB_LOCATION)/$(SA_DEBUGINFO_NAME): $(HOTSPOT_SALIB_PATH)/$(SA_DEBUGINFO_NAME) - $(install-import-file) - endif - endif - endif -endif # INCLUDE_SA - -all: $(IMPORT_LIST) - -clean clobber:: diff --git a/jdk/makefiles/javax/crypto/Defs-jce.gmk b/jdk/makefiles/javax/crypto/Defs-jce.gmk deleted file mode 100644 index 0bfd00c8cf8..00000000000 --- a/jdk/makefiles/javax/crypto/Defs-jce.gmk +++ /dev/null @@ -1,105 +0,0 @@ -# -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -include $(BUILDDIR)/common/Release.gmk - -# -# Include these extra attributes for now, should probably take out. -# -JCE_MANIFEST_FILE = $(TEMPDIR)/manifest.mf -$(JCE_MANIFEST_FILE): $(MAINMANIFEST) - $(prep-target) - $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \ - $(MAINMANIFEST) >> $@ - $(ECHO) "Extension-Name: javax.crypto" >> $@ - $(ECHO) "Implementation-Vendor-Id: com.sun" >> $@ - -README-MAKEFILE_WARNING = \ - "\nPlease read make/javax/crypto/Makefile for further build instructions." - -define no-source-warning - @$(ECHO) "\n***JCE sources are not available, skipping build.***" \ - $(README-MAKEFILE_WARNING) -endef - -ifndef OPENJDK - -PREBUILT_DIR = $(JDK_TOPDIR)/make/closed/tools/crypto - -define build-warning - @$(ECHO) "\n***JCE in JDK builds require special tools/procedures.***" \ - $(README-MAKEFILE_WARNING) -endef - -# -# Location for JCE codesigning key. -# -SIGNING_KEY_DIR = /security/ws/JCE-signing/src -SIGNING_KEYSTORE = $(SIGNING_KEY_DIR)/KeyStore.jks -SIGNING_PASSPHRASE = $(SIGNING_KEY_DIR)/passphrase.txt -SIGNING_ALIAS = oracle_jce_rsa - -# -# Defines for signing the various jar files. -# - -define presign - @if [ ! -f $(SIGNING_KEYSTORE) -o ! -f $(SIGNING_PASSPHRASE) ]; then \ - $(ECHO) "\n$(SIGNING_KEYSTORE): Signing mechanism *NOT* available..." \ - $(README-MAKEFILE_WARNING); \ - exit 2; \ - fi -endef - -define sign-target - $(BOOT_JARSIGNER_CMD) -keystore $(SIGNING_KEYSTORE) \ - $@ $(SIGNING_ALIAS) < $(SIGNING_PASSPHRASE) - @$(java-vm-cleanup) - @$(ECHO) "\nJar codesigning finished." -endef - -RELEASE_DIR = $(OUTPUTDIR)/jce-release - -define release-warning - @$(ECHO) \ - "\n***The jar files built by the 'release' target must***" \ - "\n***still be checked into the closed workspace! ***" \ - $(README-MAKEFILE_WARNING) -endef - -# -# Convenience macros for signing a jar file. -# -# Call through $(call sign-file, target file) -# -define sign-file - $(presign) - $(prep-target) - $(CP) $1 $@ - $(sign-target) -endef - -endif # !OPENJDK diff --git a/jdk/makefiles/javax/crypto/Makefile b/jdk/makefiles/javax/crypto/Makefile deleted file mode 100644 index f9089f902d3..00000000000 --- a/jdk/makefiles/javax/crypto/Makefile +++ /dev/null @@ -1,484 +0,0 @@ -# -# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building jce.jar and the various cryptographic strength -# policy jar files. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. There are some -# javac options currently specific to JCE, so we recompile now to make -# sure any implicit compilations didn't use any incorrect flags. -# -# For OpenJDK, the jar files built here are installed directly into the -# OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built and signed, and the resulting jar files *MUST BE CHECKED INTO -# THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT BE -# FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual. -# If OpenJDK: builds/installs the -# jce.jar/limited policy files. -# If JDK: builds but does not install. -# During full tops-down builds, -# prebuilt/presigned jce.jar & -# limited policy files are copied -# in by make/java/redist/Makefile. -# If you are working in this directory -# and want to install the prebuilts, -# use the "install-prebuilt" target. -# -# jar Builds/installs jce.jar -# If OpenJDK, does not sign -# If JDK, tries to sign -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds jce.jar (does not sign/install) -# -# build-policy Builds policy files (does not sign/install) -# -# install-jar Alias for "jar" above -# -# install-limited Builds/installs limited policy files -# If OpenJDK, does not sign -# If JDK, tries to sign -# install-unlimited Builds/nstalls unlimited policy files -# If OpenJDK, does not sign -# If JDK, tries to sign -# -# Other targets (JDK only): -# -# sign Alias for sign-jar and sign-policy -# sign-jar Builds/signs jce.jar file (no install) -# sign-policy Builds/signs policy files (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../.. -PACKAGE = javax.crypto -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -JAVAC_MAX_WARNINGS = true -JAVAC_WARNINGS_FATAL = true -include $(BUILDDIR)/common/Defs.gmk - -# -# Location for the newly built classfiles. -# -CLASSDESTDIR = $(TEMPDIR)/classes - -# -# Subdirectories of these are automatically included. -# -AUTO_FILES_JAVA_DIRS = \ - javax/crypto \ - sun/security/internal/interfaces \ - sun/security/internal/spec - -include $(BUILDDIR)/common/Classes.gmk - -# -# Rules -# - -# -# Some licensees do not get the security sources, but we still need to -# be able to build "all" for them. Check here to see if the sources were -# available. If not, then we don't need to continue this rule. -# - -ifdef OPENJDK -all: build-jar install-jar build-policy install-limited -else # OPENJDK -ifeq ($(strip $(FILES_java)),) -all: - $(no-source-warning) -else # FILES_java/policy files available -all: build-jar build-policy - $(build-warning) -endif # $(FILES_java)/policy files available -endif # OPENJDK - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, they will be -# placed in the appropriate areas. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -include Defs-jce.gmk - - -# ===================================================== -# Build the unsigned jce.jar file. Signing comes later. -# - -JAR_DESTFILE = $(LIBDIR)/jce.jar - -# -# JCE building is somewhat involved. -# -# OpenJDK: Since we do not ship prebuilt JCE files, previous compiles -# in the build may have needed JCE class signatures. There were then -# implicitly built by javac (likely using the boot javac). While using -# those class files was fine for signatures, we need to rebuild using -# the right compiler. -# -# JDK: Even through the jce.jar was previously installed, since the -# source files are accessible in the source directories, they will -# always be "newer" than the prebuilt files inside the jar, and thus -# make will always rebuild them. (We could "hide" the JCE source in a -# separate directory, but that would make the build logic for JDK and -# OpenJDK more complicated.) -# -# Thus in either situation, we shouldn't use these files. -# -# To make sure the classes were built with the right compiler options, -# delete the existing files in $(CLASSBINDIR), rebuild the right way in a -# directory under $(TEMPDIR), then copy the files back to -# $(CLASSBINDIR). Building in $(TEMPDIR) allows us to use our make -# infrastructure without modification: .classes.list, macros, etc. -# - -# -# The list of directories that will be remade from scratch, using the -# right compilers/options. -# -DELETE_DIRS = $(patsubst %, $(CLASSBINDIR)/%, $(AUTO_FILES_JAVA_DIRS)) - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/jce.jar - -# -# Build jce.jar, then replace the previously built JCE files in the -# classes directory with these. This ensures we have consistently built -# files throughout the workspaces. -# -$(UNSIGNED_DIR)/jce.jar: prebuild build $(JCE_MANIFEST_FILE) - $(prep-target) - $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - $(CP) -r $(CLASSDESTDIR)/* $(CLASSBINDIR) - @$(java-vm-cleanup) - -build: prebuild - -prebuild: - $(RM) -r $(DELETE_DIRS) - - -# ===================================================== -# Build the unsigned policy files. -# -# Given the current state of world export/import policies, -# these settings work for Sun's situation. This note is not -# legal guidance, you must still resolve any export/import issues -# applicable for your situation. Contact your export/import -# counsel for more information. -# - -POLICY_DESTDIR = $(LIBDIR)/security -UNSIGNED_POLICY_BUILDDIR = $(UNSIGNED_DIR)/policy - -build-policy: unlimited limited - -# -# Build the unsigned unlimited policy files. -# -unlimited: \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar - -$(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar: \ - policy/unlimited/default_US_export.policy \ - policy/unlimited/UNLIMITED - $(prep-target) - $(BOOT_JAR_CMD) cmf policy/unlimited/UNLIMITED $@ \ - -C policy/unlimited default_US_export.policy \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -$(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar: \ - policy/unlimited/default_local.policy \ - policy/unlimited/UNLIMITED - $(prep-target) - $(BOOT_JAR_CMD) cmf policy/unlimited/UNLIMITED $@ \ - -C policy/unlimited default_local.policy \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -# -# Build the unsigned limited policy files. -# -# NOTE: We currently do not place restrictions on our limited export -# policy. This was not a typo. -# -limited: \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar - -$(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar - $(install-file) - -$(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \ - policy/limited/default_local.policy \ - policy/limited/exempt_local.policy \ - policy/limited/LIMITED - $(prep-target) - $(BOOT_JAR_CMD) cmf policy/limited/LIMITED $@ \ - -C policy/limited default_local.policy \ - -C policy/limited exempt_local.policy \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - -UNSIGNED_POLICY_FILES = \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar \ - - -ifndef OPENJDK -# ===================================================== -# Sign the various jar files. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed -SIGNED_POLICY_BUILDDIR = $(SIGNED_DIR)/policy - -SIGNED_POLICY_FILES = \ - $(patsubst $(UNSIGNED_POLICY_BUILDDIR)/%,$(SIGNED_POLICY_BUILDDIR)/%, \ - $(UNSIGNED_POLICY_FILES)) - -sign: sign-jar sign-policy - -sign-jar: $(SIGNED_DIR)/jce.jar - -sign-policy: $(SIGNED_POLICY_FILES) - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/jce.jar: $(UNSIGNED_DIR)/jce.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/jce.jar: - @if [ ! -r $(UNSIGNED_DIR)/jce.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/jce.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/jce.jar) - -$(SIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar - $(call sign-file, $<) - -$(SIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar - $(call sign-file, $<) - -$(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar - $(call sign-file, $<) - -$(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \ - $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar - $(call sign-file, $<) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, -# unlimited policy file distribution, etc. -# - -CLOSED_DIR = $(BUILDDIR)/closed/javax/crypto - -release: $(SIGNED_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/README.txt - $(RM) -r \ - $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy \ - $(JCE_BUILD_DIR)/release/jce.jar \ - $(JCE_BUILD_DIR)/release/US_export_policy.jar \ - $(JCE_BUILD_DIR)/release/local_policy.jar \ - $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy.zip - $(MKDIR) -p $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy - $(CP) $(SIGNED_DIR)/jce.jar $(JCE_BUILD_DIR)/release - $(CP) \ - $(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \ - $(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar \ - $(JCE_BUILD_DIR)/release - $(CP) \ - $(SIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar \ - $(SIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar \ - $(CLOSED_DIR)/doc/README.txt \ - $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy - cd $(JCE_BUILD_DIR)/release ; \ - $(ZIPEXE) -qr UnlimitedJCEPolicy.zip UnlimitedJCEPolicy - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install jce.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/jce.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/jce.jar -endif - $(install-file) - -# -# Install the appropriate policy file, depending on the type of build. -# -ifdef OPENJDK -INSTALL_POLICYDIR = $(UNSIGNED_POLICY_BUILDDIR) -else -INSTALL_POLICYDIR = $(SIGNED_POLICY_BUILDDIR) -endif - -install-limited-jars: \ - $(INSTALL_POLICYDIR)/limited/US_export_policy.jar \ - $(INSTALL_POLICYDIR)/limited/local_policy.jar - $(MKDIR) -p $(POLICY_DESTDIR) - $(RM) \ - $(POLICY_DESTDIR)/US_export_policy.jar \ - $(POLICY_DESTDIR)/local_policy.jar - $(CP) $^ $(POLICY_DESTDIR) - -install-limited: install-limited-jars -ifndef OPENJDK - $(release-warning) -endif - -install-unlimited-jars: \ - $(INSTALL_POLICYDIR)/unlimited/US_export_policy.jar \ - $(INSTALL_POLICYDIR)/unlimited/local_policy.jar - $(MKDIR) -p $(POLICY_DESTDIR) - $(RM) \ - $(POLICY_DESTDIR)/US_export_policy.jar \ - $(POLICY_DESTDIR)/local_policy.jar - $(CP) $^ $(POLICY_DESTDIR) - -install-unlimited: install-unlimited-jars -ifndef OPENJDK - $(release-warning) -endif - -ifndef OPENJDK -install-prebuilt-jars: - @$(ECHO) "\n>>>Installing prebuilt JCE framework..." - $(RM) $(JAR_DESTFILE) \ - $(POLICY_DESTDIR)/US_export_policy.jar \ - $(POLICY_DESTDIR)/local_policy.jar - $(CP) $(PREBUILT_DIR)/jce/jce.jar $(JAR_DESTFILE) - $(CP) \ - $(PREBUILT_DIR)/jce/US_export_policy.jar \ - $(PREBUILT_DIR)/jce/local_policy.jar \ - $(POLICY_DESTDIR) - -install-prebuilt: install-prebuilt-jars -endif - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(POLICY_DESTDIR)/US_export_policy.jar \ - $(POLICY_DESTDIR)/local_policy.jar $(DELETE_DIRS) $(TEMPDIR) \ - $(JCE_BUILD_DIR) - -.PHONY: build-jar jar build-policy unlimited limited install-jar \ - install-limited install-unlimited -ifndef OPENJDK -.PHONY: sign sign-jar sign-policy release install-prebuilt -endif diff --git a/jdk/makefiles/javax/crypto/policy/limited/LIMITED b/jdk/makefiles/javax/crypto/policy/limited/LIMITED deleted file mode 100644 index b58f7acd930..00000000000 --- a/jdk/makefiles/javax/crypto/policy/limited/LIMITED +++ /dev/null @@ -1 +0,0 @@ -Crypto-Strength: limited diff --git a/jdk/makefiles/javax/crypto/policy/limited/default_local.policy b/jdk/makefiles/javax/crypto/policy/limited/default_local.policy deleted file mode 100644 index 2a6d5134047..00000000000 --- a/jdk/makefiles/javax/crypto/policy/limited/default_local.policy +++ /dev/null @@ -1,14 +0,0 @@ -// Some countries have import limits on crypto strength. This policy file -// is worldwide importable. - -grant { - permission javax.crypto.CryptoPermission "DES", 64; - permission javax.crypto.CryptoPermission "DESede", *; - permission javax.crypto.CryptoPermission "RC2", 128, - "javax.crypto.spec.RC2ParameterSpec", 128; - permission javax.crypto.CryptoPermission "RC4", 128; - permission javax.crypto.CryptoPermission "RC5", 128, - "javax.crypto.spec.RC5ParameterSpec", *, 12, *; - permission javax.crypto.CryptoPermission "RSA", *; - permission javax.crypto.CryptoPermission *, 128; -}; diff --git a/jdk/makefiles/javax/crypto/policy/limited/exempt_local.policy b/jdk/makefiles/javax/crypto/policy/limited/exempt_local.policy deleted file mode 100644 index f3255a2d970..00000000000 --- a/jdk/makefiles/javax/crypto/policy/limited/exempt_local.policy +++ /dev/null @@ -1,13 +0,0 @@ -// Some countries have import limits on crypto strength. So this file -// will be useful. - -grant { - // There is no restriction to any algorithms if KeyRecovery is enforced. - permission javax.crypto.CryptoPermission *, "KeyRecovery"; - - // There is no restriction to any algorithms if KeyEscrow is enforced. - permission javax.crypto.CryptoPermission *, "KeyEscrow"; - - // There is no restriction to any algorithms if KeyWeakening is enforced. - permission javax.crypto.CryptoPermission *, "KeyWeakening"; -}; diff --git a/jdk/makefiles/javax/crypto/policy/unlimited/UNLIMITED b/jdk/makefiles/javax/crypto/policy/unlimited/UNLIMITED deleted file mode 100644 index 7fc7743c416..00000000000 --- a/jdk/makefiles/javax/crypto/policy/unlimited/UNLIMITED +++ /dev/null @@ -1 +0,0 @@ -Crypto-Strength: unlimited diff --git a/jdk/makefiles/javax/crypto/policy/unlimited/default_US_export.policy b/jdk/makefiles/javax/crypto/policy/unlimited/default_US_export.policy deleted file mode 100644 index 67d0acc47a3..00000000000 --- a/jdk/makefiles/javax/crypto/policy/unlimited/default_US_export.policy +++ /dev/null @@ -1,5 +0,0 @@ -// Manufacturing policy file. -grant { - // There is no restriction to any algorithms. - permission javax.crypto.CryptoAllPermission; -}; diff --git a/jdk/makefiles/javax/crypto/policy/unlimited/default_local.policy b/jdk/makefiles/javax/crypto/policy/unlimited/default_local.policy deleted file mode 100644 index 8dc9702e9da..00000000000 --- a/jdk/makefiles/javax/crypto/policy/unlimited/default_local.policy +++ /dev/null @@ -1,5 +0,0 @@ -// Country-specific policy file for countries with no limits on crypto strength. -grant { - // There is no restriction to any algorithms. - permission javax.crypto.CryptoAllPermission; -}; diff --git a/jdk/makefiles/mapfiles/libjava/mapfile-vers b/jdk/makefiles/mapfiles/libjava/mapfile-vers index 8517e713dd9..23cca532fd7 100644 --- a/jdk/makefiles/mapfiles/libjava/mapfile-vers +++ b/jdk/makefiles/mapfiles/libjava/mapfile-vers @@ -232,7 +232,6 @@ SUNWprivate_1.1 { Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedExceptionAction_2Ljava_security_AccessControlContext_2; Java_java_security_AccessController_getStackAccessControlContext; Java_java_security_AccessController_getInheritedAccessControlContext; - Java_java_sql_DriverManager_getCallerClassLoader; Java_java_util_ResourceBundle_getClassContext; Java_java_util_TimeZone_getSystemTimeZoneID; Java_java_util_TimeZone_getSystemGMTOffsetID; diff --git a/jdk/makefiles/mapfiles/libjfr/mapfile-vers b/jdk/makefiles/mapfiles/libjfr/mapfile-vers index aed19a75be3..5ed216eee9d 100644 --- a/jdk/makefiles/mapfiles/libjfr/mapfile-vers +++ b/jdk/makefiles/mapfiles/libjfr/mapfile-vers @@ -6,34 +6,34 @@ # Define library interface. SUNWprivate_1.1 { - global: - Java_oracle_jrockit_jfr_util_os_Process_getpid; - Java_oracle_jrockit_jfr_util_os_Timing_counterTime; - Java_oracle_jrockit_jfr_util_os_Timing_init; - Java_oracle_jrockit_jfr_util_log_NativeLogger_output0; - Java_oracle_jrockit_jfr_VMJFR_isEnabled; - Java_oracle_jrockit_jfr_VMJFR_options; - Java_oracle_jrockit_jfr_VMJFR_init; - Java_oracle_jrockit_jfr_VMJFR_addConstPool; - Java_oracle_jrockit_jfr_VMJFR_removeConstPool; - Java_oracle_jrockit_jfr_VMJFR_storeConstPool; - Java_oracle_jrockit_jfr_VMJFR_classID; - Java_oracle_jrockit_jfr_VMJFR_stackTraceID; - Java_oracle_jrockit_jfr_VMJFR_threadID; - Java_oracle_jrockit_jfr_VMJFR_rotate; - Java_oracle_jrockit_jfr_VMJFR_shutdown; - Java_oracle_jrockit_jfr_VMJFR_start; - Java_oracle_jrockit_jfr_VMJFR_stop; - Java_oracle_jrockit_jfr_VMJFR_buffer; - Java_oracle_jrockit_jfr_VMJFR_flush; - Java_oracle_jrockit_jfr_VMJFR_write; - Java_oracle_jrockit_jfr_VMJFR_add; - Java_oracle_jrockit_jfr_VMJFR_remove; - Java_oracle_jrockit_jfr_VMJFR_setThreshold; - Java_oracle_jrockit_jfr_VMJFR_setPeriod; - Java_oracle_jrockit_jfr_VMJFR_getPeriod; - Java_oracle_jrockit_jfr_VMJFR_descriptors; + global: + Java_oracle_jrockit_jfr_Process_getpid; + Java_oracle_jrockit_jfr_Timing_counterTime; + Java_oracle_jrockit_jfr_Timing_init; + Java_oracle_jrockit_jfr_NativeLogger_output0; + Java_oracle_jrockit_jfr_VMJFR_isEnabled; + Java_oracle_jrockit_jfr_VMJFR_options; + Java_oracle_jrockit_jfr_VMJFR_init; + Java_oracle_jrockit_jfr_VMJFR_addConstPool; + Java_oracle_jrockit_jfr_VMJFR_removeConstPool; + Java_oracle_jrockit_jfr_VMJFR_storeConstPool; + Java_oracle_jrockit_jfr_VMJFR_classID; + Java_oracle_jrockit_jfr_VMJFR_stackTraceID; + Java_oracle_jrockit_jfr_VMJFR_threadID; + Java_oracle_jrockit_jfr_VMJFR_rotate; + Java_oracle_jrockit_jfr_VMJFR_shutdown; + Java_oracle_jrockit_jfr_VMJFR_start; + Java_oracle_jrockit_jfr_VMJFR_stop; + Java_oracle_jrockit_jfr_VMJFR_buffer; + Java_oracle_jrockit_jfr_VMJFR_flush; + Java_oracle_jrockit_jfr_VMJFR_write; + Java_oracle_jrockit_jfr_VMJFR_add; + Java_oracle_jrockit_jfr_VMJFR_remove; + Java_oracle_jrockit_jfr_VMJFR_setThreshold; + Java_oracle_jrockit_jfr_VMJFR_setPeriod; + Java_oracle_jrockit_jfr_VMJFR_getPeriod; + Java_oracle_jrockit_jfr_VMJFR_descriptors; JNI_OnLoad; - local: - *; + local: + *; }; diff --git a/jdk/makefiles/mapfiles/libnio/mapfile-linux b/jdk/makefiles/mapfiles/libnio/mapfile-linux index d72244170b9..63c9cbf1443 100644 --- a/jdk/makefiles/mapfiles/libnio/mapfile-linux +++ b/jdk/makefiles/mapfiles/libnio/mapfile-linux @@ -39,7 +39,6 @@ SUNWprivate_1.1 { Java_sun_nio_ch_EPollArrayWrapper_epollCreate; Java_sun_nio_ch_EPollArrayWrapper_epollCtl; Java_sun_nio_ch_EPollArrayWrapper_epollWait; - Java_sun_nio_ch_EPollArrayWrapper_fdLimit; Java_sun_nio_ch_EPollArrayWrapper_init; Java_sun_nio_ch_EPollArrayWrapper_interrupt; Java_sun_nio_ch_EPollArrayWrapper_offsetofData; @@ -87,7 +86,9 @@ SUNWprivate_1.1 { Java_sun_nio_ch_IOUtil_configureBlocking; Java_sun_nio_ch_IOUtil_drain; Java_sun_nio_ch_IOUtil_fdVal; + Java_sun_nio_ch_IOUtil_fdLimit; Java_sun_nio_ch_IOUtil_initIDs; + Java_sun_nio_ch_IOUtil_iovMax; Java_sun_nio_ch_IOUtil_makePipe; Java_sun_nio_ch_IOUtil_randomBytes; Java_sun_nio_ch_IOUtil_setfdVal; diff --git a/jdk/makefiles/mapfiles/libnio/mapfile-solaris b/jdk/makefiles/mapfiles/libnio/mapfile-solaris index 4d86f28a566..5a4908e1f6d 100644 --- a/jdk/makefiles/mapfiles/libnio/mapfile-solaris +++ b/jdk/makefiles/mapfiles/libnio/mapfile-solaris @@ -36,7 +36,6 @@ SUNWprivate_1.1 { Java_sun_nio_ch_DatagramDispatcher_readv0; Java_sun_nio_ch_DatagramDispatcher_write0; Java_sun_nio_ch_DatagramDispatcher_writev0; - Java_sun_nio_ch_DevPollArrayWrapper_fdLimit; Java_sun_nio_ch_DevPollArrayWrapper_init; Java_sun_nio_ch_DevPollArrayWrapper_interrupt; Java_sun_nio_ch_DevPollArrayWrapper_poll0; @@ -74,8 +73,10 @@ SUNWprivate_1.1 { Java_sun_nio_ch_InheritedChannel_soType0; Java_sun_nio_ch_IOUtil_configureBlocking; Java_sun_nio_ch_IOUtil_drain; + Java_sun_nio_ch_IOUtil_fdLimit; Java_sun_nio_ch_IOUtil_fdVal; Java_sun_nio_ch_IOUtil_initIDs; + Java_sun_nio_ch_IOUtil_iovMax; Java_sun_nio_ch_IOUtil_makePipe; Java_sun_nio_ch_IOUtil_randomBytes; Java_sun_nio_ch_IOUtil_setfdVal; @@ -112,13 +113,13 @@ SUNWprivate_1.1 { Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_accept0; Java_sun_nio_ch_UnixAsynchronousServerSocketChannelImpl_initIDs; Java_sun_nio_ch_UnixAsynchronousSocketChannelImpl_checkConnect; - Java_sun_nio_ch_SolarisEventPort_init; - Java_sun_nio_ch_SolarisEventPort_portCreate; - Java_sun_nio_ch_SolarisEventPort_portClose; - Java_sun_nio_ch_SolarisEventPort_portAssociate; - Java_sun_nio_ch_SolarisEventPort_portGet; - Java_sun_nio_ch_SolarisEventPort_portGetn; - Java_sun_nio_ch_SolarisEventPort_portSend; + Java_sun_nio_ch_SolarisEventPort_port_1create; + Java_sun_nio_ch_SolarisEventPort_port_1close; + Java_sun_nio_ch_SolarisEventPort_port_1associate; + Java_sun_nio_ch_SolarisEventPort_port_1dissociate; + Java_sun_nio_ch_SolarisEventPort_port_1get; + Java_sun_nio_ch_SolarisEventPort_port_1getn; + Java_sun_nio_ch_SolarisEventPort_port_1send; Java_sun_nio_fs_GnomeFileTypeDetector_initializeGio; Java_sun_nio_fs_GnomeFileTypeDetector_probeUsingGio; Java_sun_nio_fs_GnomeFileTypeDetector_initializeGnomeVfs; diff --git a/jdk/makefiles/mkdemo/Makefile b/jdk/makefiles/mkdemo/Makefile deleted file mode 100644 index 4cbe431a884..00000000000 --- a/jdk/makefiles/mkdemo/Makefile +++ /dev/null @@ -1,68 +0,0 @@ -# -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building all the demos -# - -BUILDDIR = .. -PRODUCT = demos -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = jni -SUBDIRS_desktop = -SUBDIRS_management = -SUBDIRS_misc = -SUBDIRS_tools = jvmti - -include $(BUILDDIR)/common/Subdirs.gmk - -TOPLEVEL_FILES = \ - $(DEMODIR)/README - -all build:: nbproject - $(SUBDIRS-loop) - -all build:: $(TOPLEVEL_FILES) - -nbproject: - $(RM) -r $(DEMODIR)/nbproject - $(MKDIR) -p $(DEMODIR) - ( $(CD) $(SHARE_SRC)/demo && $(TAR) -cf - \ - `$(FIND) nbproject $(SCM_DIRS_prune) -o -type f -print` ) | \ - ( $(CD) $(DEMODIR) && $(TAR) -xf - ) -ifndef OPENJDK - ( $(CD) $(CLOSED_SHARE_SRC)/demo && $(TAR) -cf - \ - `$(FIND) nbproject $(SCM_DIRS_prune) -o -type f -print` ) | \ - ( $(CD) $(DEMODIR) && $(TAR) -xf - ) -endif - -$(DEMODIR)/%: $(DEMOSRCDIR)/% - $(install-file) - -clean clobber:: - $(SUBDIRS-loop) - $(RM) -r $(DEMODIR) - $(RM) -r $(DEMOCLASSDIR) diff --git a/jdk/makefiles/mkdemo/jni/Makefile b/jdk/makefiles/mkdemo/jni/Makefile deleted file mode 100644 index b24a5f32ac6..00000000000 --- a/jdk/makefiles/mkdemo/jni/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building the jni demo(s) -# - -BUILDDIR = ../.. -PRODUCT = demos -include $(BUILDDIR)/common/Defs.gmk - -SUBDIRS = - -ifeq ($(PLATFORM),solaris) - SUBDIRS += Poller -endif - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - diff --git a/jdk/makefiles/mkdemo/jni/Poller/Makefile b/jdk/makefiles/mkdemo/jni/Poller/Makefile deleted file mode 100644 index baf23e39c8d..00000000000 --- a/jdk/makefiles/mkdemo/jni/Poller/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Build Poller class demo. -# - -BUILDDIR = ../../.. -PRODUCT = demo/jni -DEMONAME = Poller -include $(BUILDDIR)/common/Defs.gmk - -DEMO_ROOT = $(PLATFORM_SRC)/demo/jni/$(DEMONAME) -DEMO_TOPFILES = ./README.txt -DEMO_MAINCLASS = Client -DEMO_NATIVECLASS= $(DEMONAME) -DEMO_DESTDIR = $(DEMODIR)/jni/$(DEMONAME) - -# -# Demo jar building rules. -# -include $(BUILDDIR)/common/Demo.gmk - diff --git a/jdk/makefiles/mkdemo/jvmti/Makefile b/jdk/makefiles/mkdemo/jvmti/Makefile deleted file mode 100644 index 88434cf464e..00000000000 --- a/jdk/makefiles/mkdemo/jvmti/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -# -# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building the jvmti demo(s) -# - -BUILDDIR = ../.. -PRODUCT = demos -include $(BUILDDIR)/common/Defs.gmk - -# Can be built in any order, the JRE version of hprof and java_crw_demo are -# really built in make/java. -# The hprof target here just delivers the sources and README files. -# The java_crw_demo and agent_util files are copied into each demo that -# uses them. -SUBDIRS = \ - hprof - -include $(BUILDDIR)/common/Subdirs.gmk - -all build clean clobber:: - $(SUBDIRS-loop) - -all build :: $(DEMODIR)/jvmti/index.html - -$(DEMODIR)/jvmti/index.html: $(SHARE_SRC)/demo/jvmti/index.html - $(install-file) - diff --git a/jdk/makefiles/mkdemo/jvmti/README.txt b/jdk/makefiles/mkdemo/jvmti/README.txt deleted file mode 100644 index 99e2a8f021d..00000000000 --- a/jdk/makefiles/mkdemo/jvmti/README.txt +++ /dev/null @@ -1,58 +0,0 @@ -# -# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -Instructions on adding a jvmti demo agent. - -Basically you want to mimic the jvmti demo agent "mtrace". - -* Create and populate a source directory at src/share/demo/jvmti - (Try and re-use code in agent_util area like src/share/demo/jvmti/mtrace) - (This should include a small README.txt document on what this demo is) - -* Make sure the appropriate "demo" copyright notice is added to all the - source files. - -* Edit src/share/demo/jvmti/index.html and add in reference to this demo. - -* Create make directory at make/mkdemo/jvmti - (Mimic make/mkdemo/jvmti/mtrace/Makefile) - -* Edit make/mkdemo/jvmti/Makefile and add in the new demo - -* Create test directory at test/demo/jvmti, create at least one test - (Use test/demo/jvmti/mtrace as a template) - -* Don't forget to check in all the new files - -* Build and create images (cd make && gnumake && gnumake images) - (Do this on Solaris, Linux, and at least one Windows platform) - -* Verify that browsing build/*/j2sdk-images/demo/jvmti looks right - -* Run the tests: cd test/demo/jvmti && runregress . - (Do this on Solaris, Linux, and at least one Windows platform) - -Contact: serviceability-dev@openjdk.java.net for more information or help. - diff --git a/jdk/makefiles/mkdemo/jvmti/hprof/Makefile b/jdk/makefiles/mkdemo/jvmti/hprof/Makefile deleted file mode 100644 index e2529192a8e..00000000000 --- a/jdk/makefiles/mkdemo/jvmti/hprof/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -# -# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../../.. -PRODUCT = demo/jvmti -DEMONAME = hprof -include $(BUILDDIR)/common/Defs.gmk - -DEMO_ROOT = $(SHARE_SRC)/demo/jvmti/$(DEMONAME) -DEMO_TOPFILES = ./README.txt -DEMO_PSRCDIR = $(PLATFORM_SRC)/demo/jvmti/$(DEMONAME) -DEMO_DESTDIR = $(DEMODIR)/jvmti/$(DEMONAME) - -DEMO_OBJECTS = java_crw_demo.$(OBJECT_SUFFIX) - -ifeq ($(PLATFORM), windows) - EXTRA_LIBS += wsock32.lib winmm.lib -endif -ifeq ($(PLATFORM), solaris) - OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) -ldl -endif -ifeq ($(PLATFORM), linux) - OTHER_LDLIBS += $(LIBSOCKET) $(LIBNSL) -ldl -lpthread -endif - -# -# Demo jar building rules. -# -include $(BUILDDIR)/common/Demo.gmk - diff --git a/jdk/makefiles/mkdemo/management/README.txt b/jdk/makefiles/mkdemo/management/README.txt deleted file mode 100644 index ab667a17078..00000000000 --- a/jdk/makefiles/mkdemo/management/README.txt +++ /dev/null @@ -1,57 +0,0 @@ -# -# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -Instructions on adding a java.lang.management demo. - -Basically you want to mimic the java.lang.management demo "FullThreadDump". - -* Create and populate a source directory at src/demo/management - (This should include a small README.txt document on what this demo is) - -* Make sure the appropriate "demo" copyright notice is added to all the - source files. - -* Edit src/share/demo/management/index.html and add in reference to this demo. - -* Create make directory at make/mkdemo/management - (Mimic make/mkdemo/management/FullThreadDump/Makefile) - -* Edit make/mkdemo/management/Makefile and add in the new demo - -* Create test directory at test/demo/management, create at least one test - (Use test/demo/management/FullThreadDump as a template) - -* Don't forget to put all files under SCM control - -* Build and create images (cd make && gnumake && gnumake images) - (Do this on Solaris, Linux, and at least one Windows platform) - -* Verify that browsing build/*/j2sdk-images/demo/management looks right - -* Run the tests: cd test/demo/management && runregress . - (Do this on Solaris, Linux, and at least one Windows platform) - -Contact: jk-svc-group@sun.com for more information or help. - diff --git a/jdk/makefiles/sun/jkernel/Makefile b/jdk/makefiles/sun/jkernel/Makefile deleted file mode 100644 index 5abf87b57f5..00000000000 --- a/jdk/makefiles/sun/jkernel/Makefile +++ /dev/null @@ -1,94 +0,0 @@ -# -# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -BUILDDIR = ../.. -MODULE = jkernel -PACKAGE = sun.jkernel -LIBRARY = jkernel -PRODUCT = sun - -include $(BUILDDIR)/common/Defs.gmk - -# -# Use highest optimization level -# -_OPT = $(CC_HIGHEST_OPT) - -# -# Java source files -# -include FILES_java.gmk -AUTO_FILES_JAVA_DIRS = sun/jkernel - -LOCALE_SUFFIXES = $(JDK_LOCALES) - -# -# Native source files -# - -ifeq ($(ARCH_DATA_MODEL), 32) - -ifeq ($(PLATFORM), windows) - -# If this is the VS Express compiler it will lack vc/atlmfc/ -ATL_MFC_DIR :=$(call DirExists,$(COMPILER_PATH)/../atlmfc,,) - -ifneq ($(ATL_MFC_DIR),) - -include FILES_c_windows.gmk - -vpath %.cpp $(PLATFORM_SRC)/native/sun/jkernel - - -VERSIONINFO_RESOURCE = $(PLATFORM_SRC)/native/sun/jkernel/kernel.rc - -LDLIBS += urlmon.lib wininet.lib shlwapi.lib version.lib comctl32.lib gdi32.lib -def:$(PLATFORM_SRC)/native/sun/jkernel/kernel.def - -include $(BUILDDIR)/common/Library.gmk - -endif - -endif - -endif - -# -# Resources -# -include $(JDK_TOPDIR)/makefiles/common/internal/Resources.gmk - -# -# Rules -# -include $(BUILDDIR)/common/Classes.gmk - -# If extra compression is going to be available in the deploy build enable -# its use here by defining the JRE-relative pathname of the shared library - -ifeq ($(PLATFORM), windows) - ifdef EXTRA_COMP_INSTALL_PATH - CPPFLAGS += -DEXTRA_COMP_INSTALL_PATH=$(EXTRA_COMP_INSTALL_PATH) - endif -endif diff --git a/jdk/makefiles/sun/security/ec/Makefile b/jdk/makefiles/sun/security/ec/Makefile deleted file mode 100644 index d09dbecf629..00000000000 --- a/jdk/makefiles/sun/security/ec/Makefile +++ /dev/null @@ -1,333 +0,0 @@ -# -# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building sunec.jar and sunec native library. -# -# This file was derived from make/com/sun/crypto/provider/Makefile. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. For OpenJDK, -# the jar files built here are installed directly into the OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built, signed, and then the resulting jar files MUST BE CHECKED -# INTO THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT -# BE FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual, plus the native libraries. -# If OpenJDK, installs sunec.jar. -# If JDK, installs prebuilt -# sunec.jar. -# -# jar Builds/installs sunec.jar -# If OpenJDK, does not sign. -# If JDK, tries to sign. -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds sunec.jar -# (does not sign/install) -# -# install-jar Alias for "jar" above. -# -# Other targets (JDK only): -# -# sign Alias for sign-jar -# sign-jar Builds/signs sunec.jar (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.ec -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -JAVAC_MAX_WARNINGS=false -JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation -JAVAC_WARNINGS_FATAL=true -include $(BUILDDIR)/common/Defs.gmk - -# -# Location for the newly built classfiles. -# -CLASSDESTDIR = $(TEMPDIR)/classes - -# -# Java files -# -AUTO_FILES_JAVA_DIRS = $(PKGDIR) - -# -# Exclude the sources that get built by ../other/Makefile -# -AUTO_JAVA_PRUNE = \ - ECKeyFactory.java \ - ECParameters.java \ - ECPrivateKeyImpl.java \ - ECPublicKeyImpl.java \ - NamedCurve.java - -# -# Some licensees do not get the native ECC sources, but we still need to -# be able to build "all" for them. Check here to see if the sources are -# available. If not, then skip them. -# - -NATIVE_ECC_AVAILABLE := $(shell \ - if [ -d $(SHARE_SRC)/native/$(PKGDIR)/impl ] ; then \ - $(ECHO) true; \ - else \ - $(ECHO) false; \ - fi) - -ifeq ($(NATIVE_ECC_AVAILABLE), true) - - LIBRARY = sunec - - # - # Java files that define native methods - # - FILES_export = \ - $(PKGDIR)/ECDHKeyAgreement.java \ - $(PKGDIR)/ECDSASignature.java \ - $(PKGDIR)/ECKeyPairGenerator.java - - JAVAHFLAGS = -bootclasspath \ - "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)$(JCE_PATH)" - - # - # C and C++ files - # - include FILES_c.gmk - - FILES_cpp = ECC_JNI.cpp - - CPLUSPLUSLIBRARY=true - - FILES_m = mapfile-vers - - # - # Find native code - # - vpath %.cpp $(SHARE_SRC)/native/$(PKGDIR) - - vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/impl - - # - # Find include files - # - OTHER_INCLUDES += -I$(SHARE_SRC)/native/$(PKGDIR)/impl - - # - # Compiler flags - # - OTHER_CFLAGS += -DMP_API_COMPATIBLE -DNSS_ECC_MORE_THAN_SUITE_B - - # - # Libraries to link - # - ifneq ($(PLATFORM), windows) - OTHER_LDLIBS = $(LIBCXX) - endif - - include $(BUILDDIR)/common/Mapfile-vers.gmk - - include $(BUILDDIR)/common/Library.gmk - -else # NATIVE_ECC_AVAILABLE - - include $(BUILDDIR)/common/Classes.gmk - -endif # NATIVE_ECC_AVAILABLE - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, -# they will be placed in the appropriate area. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -include $(BUILDDIR)/javax/crypto/Defs-jce.gmk - -# -# Rules -# - -ifdef OPENJDK -all: build-jar install-jar -else -all: build-jar install-prebuilt - $(build-warning) -endif - - -# ===================================================== -# Build the unsigned sunec.jar file. -# - -JAR_DESTFILE = $(EXTDIR)/sunec.jar - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/sunec.jar - -# -# Build sunec.jar. -# -$(UNSIGNED_DIR)/sunec.jar: build - $(prep-target) - $(BOOT_JAR_CMD) cf $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - - -ifndef OPENJDK -# ===================================================== -# Sign the provider jar file. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed - -sign: sign-jar - -sign-jar: $(SIGNED_DIR)/sunec.jar - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/sunec.jar: $(UNSIGNED_DIR)/sunec.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/sunec.jar: - @if [ ! -r $(UNSIGNED_DIR)/sunec.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/sunec.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/sunec.jar) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, etc. -# - -release: $(SIGNED_DIR)/sunec.jar - $(RM) $(JCE_BUILD_DIR)/release/sunec.jar - $(MKDIR) -p $(JCE_BUILD_DIR)/release - $(CP) $(SIGNED_DIR)/sunec.jar $(JCE_BUILD_DIR)/release - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install sunec.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/sunec.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/sunec.jar -endif - $(install-file) - -ifndef OPENJDK -install-prebuilt: - @$(ECHO) "\n>>>Installing prebuilt SunEC provider..." - $(RM) $(JAR_DESTFILE) - $(CP) $(PREBUILT_DIR)/ec/sunec.jar $(JAR_DESTFILE) -endif - - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR) - -.PHONY: build-jar jar install-jar -ifndef OPENJDK -.PHONY: sign sign-jar release install-prebuilt -endif diff --git a/jdk/makefiles/sun/security/pkcs11/Makefile b/jdk/makefiles/sun/security/pkcs11/Makefile deleted file mode 100644 index b94a6dbc109..00000000000 --- a/jdk/makefiles/sun/security/pkcs11/Makefile +++ /dev/null @@ -1,313 +0,0 @@ -# -# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Makefile for building sunpkcs11.jar and native libraries. -# -# This file was derived from make/com/sun/crypto/provider/Makefile. -# - -# -# (The terms "OpenJDK" and "JDK" below refer to OpenJDK and Sun JDK builds -# respectively.) -# -# JCE builds are very different between OpenJDK and JDK. The OpenJDK JCE -# jar files do not require signing, but those for JDK do. If an unsigned -# jar file is installed into JDK, things will break when the crypto -# routines are called. -# -# This Makefile does the "real" build of the JCE files. For OpenJDK, -# the jar files built here are installed directly into the OpenJDK. -# -# For JDK, the binaries use pre-built/pre-signed binary files stored in -# the closed workspace that are not shipped in the OpenJDK workspaces. -# We still build the JDK files here to verify the files compile, and in -# preparation for possible signing. Developers working on JCE in JDK -# must sign the JCE files before testing. The JCE signing key is kept -# separate from the JDK workspace to prevent its disclosure. -# -# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually -# be built, signed, and then the resulting jar files MUST BE CHECKED -# INTO THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT -# BE FORGOTTEN*, otherwise a bug fixed in the source code will not be -# reflected in the shipped binaries. The "release" target should be -# used to generate the required files. -# -# There are a number of targets to help both JDK/OpenJDK developers. -# -# Main Targets (JDK/OPENJDK): -# -# all/clobber/clean The usual, plus the native libraries. -# If OpenJDK, installs sunpkcs11.jar. -# If JDK, installs prebuilt -# sunpkcs11.jar. -# -# jar Builds/installs sunpkcs11.jar -# If OpenJDK, does not sign. -# If JDK, tries to sign. -# -# Other lesser-used Targets (JDK/OPENJDK): -# -# build-jar Builds sunpkcs11.jar -# (does not sign/install) -# -# install-jar Alias for "jar" above. -# -# Other targets (JDK only): -# -# sign Alias for sign-jar -# sign-jar Builds/signs sunpkcs11.jar (no install) -# -# release Builds all targets in preparation -# for workspace integration. -# -# install-prebuilt Installs the pre-built jar files -# -# This makefile was written to support parallel target execution. -# - -BUILDDIR = ../../.. -PACKAGE = sun.security.pkcs11 -LIBRARY = j2pkcs11 -PRODUCT = sun - -# -# The following is for when we need to do postprocessing -# (signing/obfuscation) against a read-only build. If the OUTPUTDIR -# isn't writable, the build currently crashes out. -# -ifndef OPENJDK - ifdef ALT_JCE_BUILD_DIR - # ===================================================== - # Where to place the output, in case we're building from a read-only - # build area. (e.g. a release engineering build.) - JCE_BUILD_DIR=${ALT_JCE_BUILD_DIR} - IGNORE_WRITABLE_OUTPUTDIR_TEST=true - else - JCE_BUILD_DIR=${TEMPDIR} - endif -endif - -JAVAC_MAX_WARNINGS=false -JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation -JAVAC_WARNINGS_FATAL=true -include $(BUILDDIR)/common/Defs.gmk - -# -# C and Java Files -# -include FILES_c.gmk - -# -# Subdirectories of these are automatically included. -# -AUTO_FILES_JAVA_DIRS = sun/security/pkcs11 - -# -# Java files that define native methods -# -FILES_export = \ - sun/security/pkcs11/wrapper/PKCS11.java \ - sun/security/pkcs11/Secmod.java - -# -# Find native code -# -vpath %.c \ - $(SHARE_SRC)/native/sun/security/pkcs11/wrapper \ - $(PLATFORM_SRC)/native/sun/security/pkcs11/wrapper \ - -# -# Find include files -# -OTHER_INCLUDES += \ - -I$(SHARE_SRC)/native/sun/security/pkcs11/wrapper \ - -I$(PLATFORM_SRC)/native/sun/security/pkcs11/wrapper - -# -# Rules -# -CLASSDESTDIR = $(TEMPDIR)/classes -JAVAHFLAGS = -bootclasspath \ - "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)$(JCE_PATH)" - -include $(BUILDDIR)/common/Mapfile-vers.gmk - -include $(BUILDDIR)/common/Library.gmk - -# -# Libraries to link -# -ifneq ($(PLATFORM), windows) - OTHER_LDLIBS = $(LIBDL) -endif - -# Other config files -SUNPKCS11_CFG = - -ifeq ($(PLATFORM), solaris) -#SUNPKCS11_CFG = sunpkcs11-cfg -endif # PLATFORM - -SUNPKCS11_CFG_SRC = $(TOPDIR)/src/share/lib/security/sunpkcs11-solaris.cfg -SUNPKCS11_CFG_BUILD = $(LIBDIR)/security/sunpkcs11-solaris.cfg - -# -# We use a variety of subdirectories in the $(TEMPDIR) depending on what -# part of the build we're doing. Both OPENJDK/JDK builds are initially -# done in the unsigned area. When files are signed in JDK, -# they will be placed in the appropriate area. -# -UNSIGNED_DIR = $(TEMPDIR)/unsigned - -# -# Rules -# - -ifdef OPENJDK -all: $(SUNPKCS11_CFG) build-jar install-jar -else -all: $(SUNPKCS11_CFG) build-jar install-prebuilt - $(build-warning) -endif - -sunpkcs11-cfg: $(SUNPKCS11_CFG_BUILD) - -$(SUNPKCS11_CFG_BUILD): $(SUNPKCS11_CFG_SRC) - $(install-file) - -include $(BUILDDIR)/javax/crypto/Defs-jce.gmk - - -# ===================================================== -# Build the unsigned sunpkcs11.jar file. -# - -JAR_DESTFILE = $(EXTDIR)/sunpkcs11.jar - -# -# The sunpkcs11.jar needs to be in the extension class directory, -# therefore none of its classes can appear in $(CLASSBINDIR). -# Currently no one is using any of the PKCS11 internals, so these files -# should not have been built. -# - -# -# Since the -C option to jar is used below, each directory entry must be -# preceded with the appropriate directory to "cd" into. -# -JAR_DIRS = $(patsubst %, -C $(CLASSDESTDIR) %, $(AUTO_FILES_JAVA_DIRS)) - -build-jar: $(UNSIGNED_DIR)/sunpkcs11.jar - -# -# Build sunpkcs11.jar. -# -$(UNSIGNED_DIR)/sunpkcs11.jar: build - $(prep-target) - $(BOOT_JAR_CMD) cf $@ $(JAR_DIRS) \ - $(BOOT_JAR_JFLAGS) - @$(java-vm-cleanup) - - -ifndef OPENJDK -# ===================================================== -# Sign the provider jar file. Not needed for OpenJDK. -# - -SIGNED_DIR = $(JCE_BUILD_DIR)/signed - -sign: sign-jar - -sign-jar: $(SIGNED_DIR)/sunpkcs11.jar - -ifndef ALT_JCE_BUILD_DIR -$(SIGNED_DIR)/sunpkcs11.jar: $(UNSIGNED_DIR)/sunpkcs11.jar -else -# -# We have to remove the build dependency, otherwise, we'll try to rebuild it -# which we can't do on a read-only filesystem. -# -$(SIGNED_DIR)/sunpkcs11.jar: - @if [ ! -r $(UNSIGNED_DIR)/sunpkcs11.jar ] ; then \ - $(ECHO) "Couldn't find $(UNSIGNED_DIR)/sunpkcs11.jar"; \ - exit 1; \ - fi -endif - $(call sign-file, $(UNSIGNED_DIR)/sunpkcs11.jar) - - -# ===================================================== -# Create the Release Engineering files. Signed builds, etc. -# - -release: $(SIGNED_DIR)/sunpkcs11.jar - $(RM) $(JCE_BUILD_DIR)/release/sunpkcs11.jar - $(MKDIR) -p $(JCE_BUILD_DIR)/release - $(CP) $(SIGNED_DIR)/sunpkcs11.jar $(JCE_BUILD_DIR)/release - $(release-warning) - -endif # OPENJDK - - -# ===================================================== -# Install routines. -# - -# -# Install sunpkcs11.jar, depending on which type is requested. -# -install-jar jar: $(JAR_DESTFILE) -ifndef OPENJDK - $(release-warning) -endif - -ifdef OPENJDK -$(JAR_DESTFILE): $(UNSIGNED_DIR)/sunpkcs11.jar -else -$(JAR_DESTFILE): $(SIGNED_DIR)/sunpkcs11.jar -endif - $(install-file) - -ifndef OPENJDK -install-prebuilt: - @$(ECHO) "\n>>>Installing prebuilt SunPKCS11 provider..." - $(RM) $(JAR_DESTFILE) - $(CP) $(PREBUILT_DIR)/pkcs11/sunpkcs11.jar $(JAR_DESTFILE) -endif - - -# ===================================================== -# Support routines. -# - -clobber clean:: - $(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR) - $(RM) $(SUNPKCS11_CFG_BUILD) - -.PHONY: build-jar jar install-jar -ifndef OPENJDK -.PHONY: sign sign-jar release install-prebuilt -endif diff --git a/jdk/makefiles/sun/security/pkcs11/mapfile-vers b/jdk/makefiles/sun/security/pkcs11/mapfile-vers deleted file mode 100644 index 7301c11417d..00000000000 --- a/jdk/makefiles/sun/security/pkcs11/mapfile-vers +++ /dev/null @@ -1,110 +0,0 @@ -# -# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# Define public interface. - -SUNWprivate_1.1 { - global: - JNI_OnLoad; - Java_sun_security_pkcs11_wrapper_PKCS11_initializeLibrary; - Java_sun_security_pkcs11_wrapper_PKCS11_finalizeLibrary; - Java_sun_security_pkcs11_wrapper_PKCS11_connect; - Java_sun_security_pkcs11_wrapper_PKCS11_disconnect; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Initialize; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Finalize; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetInfo; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetSlotList; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetSlotInfo; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetTokenInfo; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetMechanismList; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetMechanismInfo; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1InitToken; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1InitPIN; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1SetPIN; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1OpenSession; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1CloseSession; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1CloseAllSessions; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetSessionInfo; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetOperationState; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SetOperationState; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Login; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Logout; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1CreateObject; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1CopyObject; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DestroyObject; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetObjectSize; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetAttributeValue; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SetAttributeValue; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1FindObjectsInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1FindObjects; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1FindObjectsFinal; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1EncryptInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Encrypt; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1EncryptUpdate; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1EncryptFinal; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DecryptInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Decrypt; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DecryptUpdate; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DecryptFinal; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DigestInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DigestSingle; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DigestUpdate; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DigestKey; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DigestFinal; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SignInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Sign; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SignUpdate; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SignFinal; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SignRecoverInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SignRecover; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1VerifyInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1Verify; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1VerifyUpdate; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1VerifyFinal; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1VerifyRecoverInit; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1VerifyRecover; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1DigestEncryptUpdate; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1DecryptDigestUpdate; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1SignEncryptUpdate; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1DecryptVerifyUpdate; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GenerateKey; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GenerateKeyPair; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1WrapKey; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1UnwrapKey; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1DeriveKey; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1SeedRandom; - Java_sun_security_pkcs11_wrapper_PKCS11_C_1GenerateRandom; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1GetFunctionStatus; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1CancelFunction; -# Java_sun_security_pkcs11_wrapper_PKCS11_C_1WaitForSlotEvent; - Java_sun_security_pkcs11_Secmod_nssGetLibraryHandle; - Java_sun_security_pkcs11_Secmod_nssLoadLibrary; - Java_sun_security_pkcs11_Secmod_nssVersionCheck; - Java_sun_security_pkcs11_Secmod_nssInit; - Java_sun_security_pkcs11_Secmod_nssGetModuleList; - - local: - *; -}; diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaPanelUI.java b/jdk/src/macosx/classes/com/apple/laf/AquaPanelUI.java index 07a758f7d9f..960705b8ead 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaPanelUI.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaPanelUI.java @@ -32,10 +32,20 @@ import javax.swing.plaf.basic.BasicPanelUI; import com.apple.laf.AquaUtils.RecyclableSingleton; import com.apple.laf.AquaUtils.RecyclableSingletonFromDefaultConstructor; +import java.awt.Graphics; + public class AquaPanelUI extends BasicPanelUI { static RecyclableSingleton instance = new RecyclableSingletonFromDefaultConstructor(AquaPanelUI.class); public static ComponentUI createUI(final JComponent c) { return instance.get(); } + + @Override + public final void update(final Graphics g, final JComponent c) { + if (c.isOpaque()) { + AquaUtils.fillRect(g, c); + } + paint(g, c); + } } diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java b/jdk/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java index e7277128fe7..6f3c1f2534f 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java @@ -319,4 +319,12 @@ public class AquaRootPaneUI extends BasicRootPaneUI implements AncestorListener, updateComponentTreeUIActivation(element, active); } } + + @Override + public final void update(final Graphics g, final JComponent c) { + if (c.isOpaque()) { + AquaUtils.fillRect(g, c); + } + paint(g, c); + } } diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaToolBarUI.java b/jdk/src/macosx/classes/com/apple/laf/AquaToolBarUI.java index 660cff318d6..bf87e2d1bb7 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaToolBarUI.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaToolBarUI.java @@ -73,9 +73,7 @@ public class AquaToolBarUI extends BasicToolBarUI implements SwingConstants { g.translate(x, y); if (c.isOpaque()) { - final Color background = c.getBackground(); - g.setColor(background); - g.fillRect(0, 0, w - 1, h - 1); + AquaUtils.fillRect(g, c, c.getBackground(), 0, 0, w - 1, h - 1); } final Color oldColor = g.getColor(); @@ -137,4 +135,12 @@ public class AquaToolBarUI extends BasicToolBarUI implements SwingConstants { return true; } } + + @Override + public final void update(final Graphics g, final JComponent c) { + if (c.isOpaque()) { + AquaUtils.fillRect(g, c); + } + paint(g, c); + } } diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java b/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java index 58b0d1efb98..0592da714a2 100644 --- a/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java +++ b/jdk/src/macosx/classes/com/apple/laf/AquaUtils.java @@ -28,18 +28,19 @@ package com.apple.laf; import java.awt.*; import java.awt.image.*; import java.lang.ref.SoftReference; -import java.lang.ref.WeakReference; import java.lang.reflect.Method; import java.security.PrivilegedAction; import java.util.*; import javax.swing.*; import javax.swing.border.Border; +import javax.swing.plaf.UIResource; import sun.awt.AppContext; import sun.lwawt.macosx.CImage; import sun.lwawt.macosx.CImage.Creator; +import sun.lwawt.macosx.CPlatformWindow; import sun.swing.SwingUtilities2; import com.apple.laf.AquaImageFactory.SlicedImageControl; @@ -389,4 +390,51 @@ public class AquaUtils { return false; } } + + protected static boolean isWindowTextured(final Component c) { + if (!(c instanceof JComponent)) { + return false; + } + final JRootPane pane = ((JComponent) c).getRootPane(); + if (pane == null) { + return false; + } + Object prop = pane.getClientProperty( + CPlatformWindow.WINDOW_BRUSH_METAL_LOOK); + if (prop != null) { + return Boolean.parseBoolean(prop.toString()); + } + prop = pane.getClientProperty(CPlatformWindow.WINDOW_STYLE); + return prop != null && "textured".equals(prop); + } + + private static Color resetAlpha(final Color color) { + return new Color(color.getRed(), color.getGreen(), color.getBlue(), 0); + } + + protected static void fillRect(final Graphics g, final Component c) { + fillRect(g, c, c.getBackground(), 0, 0, c.getWidth(), c.getHeight()); + } + + protected static void fillRect(final Graphics g, final Component c, + final Color color, final int x, final int y, + final int w, final int h) { + if (!(g instanceof Graphics2D)) { + return; + } + final Graphics2D cg = (Graphics2D) g.create(); + try { + if (color instanceof UIResource && isWindowTextured(c) + && color.equals(SystemColor.window)) { + cg.setComposite(AlphaComposite.Src); + cg.setColor(resetAlpha(color)); + } else { + cg.setColor(color); + } + cg.fillRect(x, y, w, h); + } finally { + cg.dispose(); + } + } } + diff --git a/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferences.java b/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferences.java index cba98be1b2a..42c61009d11 100644 --- a/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferences.java +++ b/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferences.java @@ -35,16 +35,16 @@ class MacOSXPreferences extends AbstractPreferences { private static final String defaultAppName = "com.apple.java.util.prefs"; // true if this node is a child of userRoot or is userRoot - private boolean isUser; + private final boolean isUser; // true if this node is userRoot or systemRoot - private boolean isRoot; + private final boolean isRoot; // CF's storage location for this node and its keys - private MacOSXPreferencesFile file; + private final MacOSXPreferencesFile file; // absolutePath() + "/" - private String path; + private final String path; // User root and system root nodes private static MacOSXPreferences userRoot = null; @@ -73,36 +73,40 @@ class MacOSXPreferences extends AbstractPreferences { // Create a new root node. Called by getUserRoot() and getSystemRoot() // Synchronization is provided by the caller. - private MacOSXPreferences(boolean newIsUser) - { - super(null, ""); - isUser = newIsUser; - isRoot = true; - - initFields(); + private MacOSXPreferences(boolean newIsUser) { + this(null, "", false, true, newIsUser); } // Create a new non-root node with the given parent. // Called by childSpi(). - private MacOSXPreferences(MacOSXPreferences parent, String name) + private MacOSXPreferences(MacOSXPreferences parent, String name) { + this(parent, name, false, false, false); + } + + private MacOSXPreferences(MacOSXPreferences parent, String name, + boolean isNew) + { + this(parent, name, isNew, false, false); + } + + private MacOSXPreferences(MacOSXPreferences parent, String name, + boolean isNew, boolean isRoot, boolean isUser) { super(parent, name); - isUser = isUserNode(); - isRoot = false; - - initFields(); - } - - - private void initFields() - { + this.isRoot = isRoot; + if (isRoot) + this.isUser = isUser; + else + this.isUser = isUserNode(); path = isRoot ? absolutePath() : absolutePath() + "/"; file = cfFileForNode(isUser); - newNode = file.addNode(path); + if (isNew) + newNode = isNew; + else + newNode = file.addNode(path); } - // Create and return the MacOSXPreferencesFile for this node. // Does not write anything to the file. private MacOSXPreferencesFile cfFileForNode(boolean isUser) @@ -160,7 +164,7 @@ class MacOSXPreferences extends AbstractPreferences { // AbstractPreferences implementation @Override protected void removeNodeSpi() - throws BackingStoreException + throws BackingStoreException { // Disallow flush or sync between these two operations // (they may be manipulating two different files) @@ -180,7 +184,7 @@ class MacOSXPreferences extends AbstractPreferences { // AbstractPreferences implementation @Override protected String[] childrenNamesSpi() - throws BackingStoreException + throws BackingStoreException { String[] result = file.getChildrenForNode(path); if (result == null) throw new BackingStoreException("Couldn't get list of children for node '" + path + "'"); @@ -190,7 +194,7 @@ class MacOSXPreferences extends AbstractPreferences { // AbstractPreferences implementation @Override protected String[] keysSpi() - throws BackingStoreException + throws BackingStoreException { String[] result = file.getKeysForNode(path); if (result == null) throw new BackingStoreException("Couldn't get list of keys for node '" + path + "'"); @@ -204,22 +208,27 @@ class MacOSXPreferences extends AbstractPreferences { // Add to parent's child list here and disallow sync // because parent and child might be in different files. synchronized(MacOSXPreferencesFile.class) { - file.addChildToNode(path, name); - return new MacOSXPreferences(this, name); + boolean isNew = file.addChildToNode(path, name); + return new MacOSXPreferences(this, name, isNew); } } // AbstractPreferences override @Override public void flush() - throws BackingStoreException + throws BackingStoreException { // Flush should *not* check for removal, unlike sync, but should // prevent simultaneous removal. synchronized(lock) { - // fixme! overkill - if (!MacOSXPreferencesFile.flushWorld()) { - throw new BackingStoreException("Synchronization failed for node '" + path + "'"); + if (isUser) { + if (!MacOSXPreferencesFile.flushUser()) { + throw new BackingStoreException("Synchronization failed for node '" + path + "'"); + } + } else { + if (!MacOSXPreferencesFile.flushWorld()) { + throw new BackingStoreException("Synchronization failed for node '" + path + "'"); + } } } } @@ -227,7 +236,7 @@ class MacOSXPreferences extends AbstractPreferences { // AbstractPreferences implementation @Override protected void flushSpi() - throws BackingStoreException + throws BackingStoreException { // nothing here - overridden flush() doesn't call this } @@ -235,7 +244,7 @@ class MacOSXPreferences extends AbstractPreferences { // AbstractPreferences override @Override public void sync() - throws BackingStoreException + throws BackingStoreException { synchronized(lock) { if (isRemoved()) @@ -256,7 +265,7 @@ class MacOSXPreferences extends AbstractPreferences { // AbstractPreferences implementation @Override protected void syncSpi() - throws BackingStoreException + throws BackingStoreException { // nothing here - overridden sync() doesn't call this } diff --git a/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java b/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java index 31355b5be46..ee9b652dfc8 100644 --- a/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java +++ b/jdk/src/macosx/classes/java/util/prefs/MacOSXPreferencesFile.java @@ -233,7 +233,23 @@ class MacOSXPreferencesFile { return ok; } - + //Flush only current user preferences + static synchronized boolean flushUser() { + boolean ok = true; + if (changedFiles != null && !changedFiles.isEmpty()) { + Iterator iterator = changedFiles.iterator(); + while(iterator.hasNext()) { + MacOSXPreferencesFile f = iterator.next(); + if (f.user == cfCurrentUser) { + if (!f.synchronize()) + ok = false; + else + iterator.remove(); + } + } + } + return ok; + } // Write all prefs changes to disk, but do not clear all cached prefs // values. Also kills any scheduled flush task. @@ -360,11 +376,11 @@ class MacOSXPreferencesFile { } } - void addChildToNode(String path, String child) + boolean addChildToNode(String path, String child) { synchronized(MacOSXPreferencesFile.class) { markChanged(); - addChildToNode(path, child+"/", appName, user, host); + return addChildToNode(path, child+"/", appName, user, host); } } @@ -433,7 +449,7 @@ class MacOSXPreferencesFile { addNode(String path, String name, long user, long host); private static final native void removeNode(String path, String name, long user, long host); - private static final native void + private static final native boolean addChildToNode(String path, String child, String name, long user, long host); private static final native void diff --git a/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java b/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java index dba798062df..431a1e000d4 100644 --- a/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java +++ b/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java @@ -48,6 +48,9 @@ public class CGraphicsDevice extends GraphicsDevice { private static AWTPermission fullScreenExclusivePermission; + // Save/restore DisplayMode for the Full Screen mode + private DisplayMode originalMode; + public CGraphicsDevice(int displayID) { this.displayID = displayID; configs = new GraphicsConfiguration[] { @@ -124,18 +127,22 @@ public class CGraphicsDevice extends GraphicsDevice { } boolean fsSupported = isFullScreenSupported(); + if (fsSupported && old != null) { // enter windowed mode (and restore original display mode) exitFullScreenExclusive(old); - - // TODO: restore display mode + if (originalMode != null) { + setDisplayMode(originalMode); + originalMode = null; + } } super.setFullScreenWindow(w); if (fsSupported && w != null) { - // TODO: save current display mode - + if (isDisplayChangeSupported()) { + originalMode = getDisplayMode(); + } // enter fullscreen mode enterFullScreenExclusive(w); } diff --git a/jdk/src/macosx/classes/sun/awt/CGraphicsEnvironment.java b/jdk/src/macosx/classes/sun/awt/CGraphicsEnvironment.java index 15ed911dee7..ab435a93fac 100644 --- a/jdk/src/macosx/classes/sun/awt/CGraphicsEnvironment.java +++ b/jdk/src/macosx/classes/sun/awt/CGraphicsEnvironment.java @@ -200,29 +200,25 @@ public class CGraphicsEnvironment extends SunGraphicsEnvironment { return true; } - private Font[] allFontsWithLogical; static String[] sLogicalFonts = { "Serif", "SansSerif", "Monospaced", "Dialog", "DialogInput" }; @Override public Font[] getAllFonts() { - if (allFontsWithLogical == null) + + Font[] newFonts; + Font[] superFonts = super.getAllFonts(); + + int numLogical = sLogicalFonts.length; + int numOtherFonts = superFonts.length; + + newFonts = new Font[numOtherFonts + numLogical]; + System.arraycopy(superFonts,0,newFonts,numLogical,numOtherFonts); + + for (int i = 0; i < numLogical; i++) { - Font[] newFonts; - Font[] superFonts = super.getAllFonts(); - - int numLogical = sLogicalFonts.length; - int numOtherFonts = superFonts.length; - - newFonts = new Font[numOtherFonts + numLogical]; - System.arraycopy(superFonts,0,newFonts,numLogical,numOtherFonts); - - for (int i = 0; i < numLogical; i++) - { - newFonts[i] = new Font(sLogicalFonts[i], Font.PLAIN, 1); - } - allFontsWithLogical = newFonts; + newFonts[i] = new Font(sLogicalFonts[i], Font.PLAIN, 1); } - return java.util.Arrays.copyOf(allFontsWithLogical, allFontsWithLogical.length); + return newFonts; } } diff --git a/jdk/src/macosx/classes/sun/java2d/opengl/CGLLayer.java b/jdk/src/macosx/classes/sun/java2d/opengl/CGLLayer.java index 219c84cc108..674b97951af 100644 --- a/jdk/src/macosx/classes/sun/java2d/opengl/CGLLayer.java +++ b/jdk/src/macosx/classes/sun/java2d/opengl/CGLLayer.java @@ -68,11 +68,12 @@ public class CGLLayer extends CFRetainedResource { } public boolean isOpaque() { - return peer.isOpaque(); + return !peer.isTranslucent(); } public int getTransparency() { - return (peer.isOpaque() ? Transparency.OPAQUE : Transparency.TRANSLUCENT); + return peer.isTranslucent() ? Transparency.TRANSLUCENT : + Transparency.OPAQUE; } public Object getDestination() { diff --git a/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java index f0cd54d93b3..e5f8838c8cd 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWButtonPeer.java @@ -47,8 +47,8 @@ final class LWButtonPeer extends LWComponentPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setLabel(getTarget().getLabel()); synchronized (getDelegateLock()) { getDelegate().addActionListener(this); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java index b639e6c2903..69bce89adae 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java @@ -61,8 +61,8 @@ final class LWCheckboxPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setLabel(getTarget().getLabel()); setState(getTarget().getState()); setCheckboxGroup(getTarget().getCheckboxGroup()); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java b/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java index b0ab9d0e3f0..dc781d3d682 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWChoicePeer.java @@ -55,8 +55,8 @@ final class LWChoicePeer extends LWComponentPeer> } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); final Choice choice = getTarget(); final JComboBox combo = getDelegate(); synchronized (getDelegateLock()) { diff --git a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java index 035cfe1596b..f6ad8838051 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java @@ -81,19 +81,10 @@ public abstract class LWComponentPeer // lock is not used as there are many peers related ops // to be done on the toolkit thread, and we don't want to // depend on a public lock on this thread - private final static Object peerTreeLock = + private static final Object peerTreeLock = new StringBuilder("LWComponentPeer.peerTreeLock"); - /** - * A custom tree-lock used for the hierarchy of the delegate Swing - * components. - * The lock synchronizes access to the delegate - * internal state. Think of it as a 'virtual EDT'. - */ -// private final Object delegateTreeLock = -// new StringBuilder("LWComponentPeer.delegateTreeLock"); - - private T target; + private final T target; // Container peer. It may not be the peer of the target's direct // parent, for example, in the case of hw/lw mixing. However, @@ -108,10 +99,10 @@ public abstract class LWComponentPeer // be updated when the component is reparented to another container private LWWindowPeer windowPeer; - private AtomicBoolean disposed = new AtomicBoolean(false); + private final AtomicBoolean disposed = new AtomicBoolean(false); // Bounds are relative to parent peer - private Rectangle bounds = new Rectangle(); + private final Rectangle bounds = new Rectangle(); private Region region; // Component state. Should be accessed under the state lock @@ -122,9 +113,11 @@ public abstract class LWComponentPeer private Color foreground; private Font font; - // Paint area to coalesce all the paint events and store - // the target dirty area - private RepaintArea targetPaintArea; + /** + * Paint area to coalesce all the paint events and store the target dirty + * area. + */ + private final RepaintArea targetPaintArea; // private volatile boolean paintPending; private volatile boolean isLayouting; @@ -137,7 +130,7 @@ public abstract class LWComponentPeer private int fNumDropTargets = 0; private CDropTarget fDropTarget = null; - private PlatformComponent platformComponent; + private final PlatformComponent platformComponent; private final class DelegateContainer extends Container { { @@ -175,6 +168,7 @@ public abstract class LWComponentPeer } public LWComponentPeer(T target, PlatformComponent platformComponent) { + targetPaintArea = new LWRepaintArea(); this.target = target; this.platformComponent = platformComponent; @@ -201,10 +195,13 @@ public abstract class LWComponentPeer synchronized (getDelegateLock()) { delegate = createDelegate(); if (delegate != null) { + delegate.setVisible(false); delegateContainer = new DelegateContainer(); delegateContainer.add(delegate); delegateContainer.addNotify(); delegate.addNotify(); + resetColorsAndFont(delegate); + delegate.setOpaque(true); } else { return; } @@ -278,27 +275,28 @@ public abstract class LWComponentPeer return getDelegate(); } - /* - * Initializes this peer by fetching all the properties from the target. - * The call to initialize() is not placed to LWComponentPeer ctor to - * let the subclass ctor to finish completely first. Instead, it's the - * LWToolkit object who is responsible for initialization. + /** + * Initializes this peer. The call to initialize() is not placed to + * LWComponentPeer ctor to let the subclass ctor to finish completely first. + * Instead, it's the LWToolkit object who is responsible for initialization. + * Note that we call setVisible() at the end of initialization. */ - public void initialize() { + public final void initialize() { platformComponent.initialize(target, this, getPlatformWindow()); - targetPaintArea = new LWRepaintArea(); - if (getDelegate() != null) { - synchronized (getDelegateLock()) { - resetColorsAndFont(delegate); - getDelegate().setOpaque(true); - } - } + initializeImpl(); + setVisible(target.isVisible()); + } + + /** + * Fetching general properties from the target. Should be overridden in + * subclasses to initialize specific peers properties. + */ + void initializeImpl() { setBackground(target.getBackground()); setForeground(target.getForeground()); setFont(target.getFont()); setBounds(target.getBounds()); setEnabled(target.isEnabled()); - setVisible(target.isVisible()); } private static void resetColorsAndFont(final Container c) { @@ -314,15 +312,18 @@ public abstract class LWComponentPeer return stateLock; } - // Synchronize all operations with the Swing delegates under - // AWT tree lock, using a new separate lock to synchronize - // access to delegates may lead deadlocks + /** + * Synchronize all operations with the Swing delegates under AWT tree lock, + * using a new separate lock to synchronize access to delegates may lead + * deadlocks. Think of it as a 'virtual EDT'. + * + * @return DelegateLock + */ final Object getDelegateLock() { - //return delegateTreeLock; return getTarget().getTreeLock(); } - protected final static Object getPeerTreeLock() { + protected static final Object getPeerTreeLock() { return peerTreeLock; } @@ -423,8 +424,7 @@ public abstract class LWComponentPeer @Override public final Graphics getGraphics() { - Graphics g = getWindowPeerOrSelf().isOpaque() ? getOnscreenGraphics() - : getOffscreenGraphics(); + final Graphics g = getOnscreenGraphics(); if (g != null) { synchronized (getPeerTreeLock()){ applyConstrain(g); @@ -442,13 +442,7 @@ public abstract class LWComponentPeer final LWWindowPeer wp = getWindowPeerOrSelf(); return wp.getOnscreenGraphics(getForeground(), getBackground(), getFont()); - } - public final Graphics getOffscreenGraphics() { - final LWWindowPeer wp = getWindowPeerOrSelf(); - - return wp.getOffscreenGraphics(getForeground(), getBackground(), - getFont()); } private void applyConstrain(final Graphics g) { @@ -462,7 +456,7 @@ public abstract class LWComponentPeer } //TODO Move this method to SG2D? - private void SG2DConstraint(final SunGraphics2D sg2d, Region r) { + void SG2DConstraint(final SunGraphics2D sg2d, Region r) { sg2d.constrainX = sg2d.transX; sg2d.constrainY = sg2d.transY; @@ -709,7 +703,7 @@ public abstract class LWComponentPeer // Obtain the metrics from the offscreen window where this peer is // mostly drawn to. // TODO: check for "use platform metrics" settings - Graphics g = getWindowPeer().getOffscreenGraphics(); + Graphics g = getWindowPeer().getGraphics(); try { if (g != null) { return g.getFontMetrics(f); @@ -758,14 +752,17 @@ public abstract class LWComponentPeer } @Override - public void setVisible(boolean v) { + public void setVisible(final boolean v) { synchronized (getStateLock()) { if (visible == v) { return; } visible = v; } + setVisibleImpl(v); + } + protected void setVisibleImpl(final boolean v) { final D delegate = getDelegate(); if (delegate != null) { @@ -1007,14 +1004,33 @@ public abstract class LWComponentPeer @Override public final void applyShape(final Region shape) { synchronized (getStateLock()) { - region = shape; + if (region == shape || (region != null && region.equals(shape))) { + return; + } + } + applyShapeImpl(shape); + } + + void applyShapeImpl(final Region shape) { + synchronized (getStateLock()) { + if (shape != null) { + region = Region.WHOLE_REGION.getIntersection(shape); + } else { + region = null; + } } repaintParent(getBounds()); } protected final Region getRegion() { synchronized (getStateLock()) { - return region == null ? Region.getInstance(getSize()) : region; + return isShaped() ? region : Region.getInstance(getSize()); + } + } + + public boolean isShaped() { + synchronized (getStateLock()) { + return region != null; } } @@ -1355,7 +1371,7 @@ public abstract class LWComponentPeer * * @see #isVisible() */ - protected boolean isShowing() { + protected final boolean isShowing() { synchronized (getPeerTreeLock()) { if (isVisible()) { final LWContainerPeer container = getContainerPeer(); @@ -1382,11 +1398,6 @@ public abstract class LWComponentPeer } } - // Just a helper method, thus final - protected final void flushOffscreenGraphics() { - flushOffscreenGraphics(getSize()); - } - protected static final void flushOnscreenGraphics(){ final OGLRenderQueue rq = OGLRenderQueue.getInstance(); rq.lock(); @@ -1397,36 +1408,6 @@ public abstract class LWComponentPeer } } - /* - * Flushes the given rectangle from the back buffer to the screen. - */ - protected void flushOffscreenGraphics(Rectangle r) { - flushOffscreenGraphics(r.x, r.y, r.width, r.height); - } - - private void flushOffscreenGraphics(int x, int y, int width, int height) { - Image bb = getWindowPeerOrSelf().getBackBuffer(); - if (bb != null) { - // g is a screen Graphics from the delegate - final Graphics g = getOnscreenGraphics(); - - if (g != null && g instanceof Graphics2D) { - try { - Graphics2D g2d = (Graphics2D)g; - Point p = localToWindow(new Point(0, 0)); - Composite composite = g2d.getComposite(); - g2d.setComposite(AlphaComposite.Src); - g.drawImage(bb, x, y, x + width, y + height, p.x + x, - p.y + y, p.x + x + width, p.y + y + height, - null); - g2d.setComposite(composite); - } finally { - g.dispose(); - } - } - } - } - /** * Used by ContainerPeer to skip all the paint events during layout. * diff --git a/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java index 7577007fa7f..f8c764364cc 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java @@ -60,8 +60,8 @@ final class LWLabelPeer extends LWComponentPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setText(getTarget().getText()); setAlignment(getTarget().getAlignment()); } diff --git a/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java index df705fd5068..1e6154fd64f 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java @@ -49,8 +49,8 @@ final class LWListPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); setMultipleMode(getTarget().isMultipleMode()); final int[] selectedIndices = getTarget().getSelectedIndexes(); synchronized (getDelegateLock()) { diff --git a/jdk/src/macosx/classes/sun/lwawt/LWRepaintArea.java b/jdk/src/macosx/classes/sun/lwawt/LWRepaintArea.java index 54cbd332db4..e67b2fa435e 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWRepaintArea.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWRepaintArea.java @@ -58,9 +58,6 @@ final class LWRepaintArea extends RepaintArea { private static void flushBuffers(final LWComponentPeer peer) { if (peer != null) { - if (!peer.getWindowPeerOrSelf().isOpaque()) { - peer.flushOffscreenGraphics(); - } peer.flushOnscreenGraphics(); } } diff --git a/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java index d376a6b1d82..688f9e96f16 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java @@ -54,8 +54,8 @@ final class LWScrollBarPeer extends LWComponentPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); final Scrollbar target = getTarget(); setValues(target.getValue(), target.getVisibleAmount(), target.getMinimum(), target.getMaximum()); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java b/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java index 1b1bdf5369e..1e386f25725 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWScrollPanePeer.java @@ -70,8 +70,8 @@ final class LWScrollPanePeer extends LWContainerPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); final int policy = getTarget().getScrollbarDisplayPolicy(); synchronized (getDelegateLock()) { getDelegate().getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java index ebe97745d49..8517313b741 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java @@ -59,8 +59,8 @@ final class LWTextAreaPeer } @Override - public void initialize() { - super.initialize(); + void initializeImpl() { + super.initializeImpl(); final int visibility = getTarget().getScrollbarVisibility(); synchronized (getDelegateLock()) { setScrollBarVisibility(visibility); diff --git a/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java index 01de62b6c96..f0215d40f75 100644 --- a/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java +++ b/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java @@ -63,8 +63,8 @@ abstract class LWTextComponentPeer 1; - replaceSurfaceData(numBuffers - 1, caps); + replaceSurfaceData(numBuffers - 1, caps, false); } catch (InvalidPipeException z) { throw new AWTException(z.toString()); } @@ -437,19 +430,44 @@ public class LWWindowPeer public final void setOpaque(final boolean isOpaque) { if (this.isOpaque != isOpaque) { this.isOpaque = isOpaque; - getPlatformWindow().setOpaque(isOpaque); - replaceSurfaceData(); - repaintPeer(); + updateOpaque(); } } - public final boolean isOpaque() { - return isOpaque; + private void updateOpaque() { + getPlatformWindow().setOpaque(!isTranslucent()); + replaceSurfaceData(false); + repaintPeer(); } @Override public void updateWindow() { - flushOffscreenGraphics(); + } + + public final boolean isTextured() { + return textured; + } + + public final void setTextured(final boolean isTextured) { + textured = isTextured; + } + + public final boolean isTranslucent() { + synchronized (getStateLock()) { + /* + * Textured window is a special case of translucent window. + * The difference is only in nswindow background. So when we set + * texture property our peer became fully translucent. It doesn't + * fill background, create non opaque backbuffers and layer etc. + */ + return !isOpaque || isShaped() || isTextured(); + } + } + + @Override + final void applyShapeImpl(final Region shape) { + super.applyShapeImpl(shape); + updateOpaque(); } @Override @@ -604,7 +622,20 @@ public class LWWindowPeer getFont()); if (g != null) { try { - g.clearRect(0, 0, w, h); + if (g instanceof Graphics2D) { + ((Graphics2D) g).setComposite(AlphaComposite.Src); + } + if (isTranslucent()) { + g.setColor(nonOpaqueBackground); + g.fillRect(0, 0, w, h); + } + if (!isTextured()) { + if (g instanceof SunGraphics2D) { + SG2DConstraint((SunGraphics2D) g, getRegion()); + } + g.setColor(getBackground()); + g.fillRect(0, 0, w, h); + } } finally { g.dispose(); } @@ -911,35 +942,6 @@ public class LWWindowPeer }); } - /** - * This method returns a back buffer Graphics to render all the - * peers to. After the peer is painted, the back buffer contents - * should be flushed to the screen. All the target painting - * (Component.paint() method) should be done directly to the screen. - */ - protected final Graphics getOffscreenGraphics(Color fg, Color bg, Font f) { - final Image bb = getBackBuffer(); - if (bb == null) { - return null; - } - if (fg == null) { - fg = SystemColor.windowText; - } - if (bg == null) { - bg = SystemColor.window; - } - if (f == null) { - f = DEFAULT_FONT; - } - final Graphics2D g = (Graphics2D) bb.getGraphics(); - if (g != null) { - g.setColor(fg); - g.setBackground(bg); - g.setFont(f); - } - return g; - } - /* * May be called by delegate to provide SD to Java2D code. */ @@ -950,11 +952,16 @@ public class LWWindowPeer } private void replaceSurfaceData() { - replaceSurfaceData(backBufferCount, backBufferCaps); + replaceSurfaceData(true); + } + + private void replaceSurfaceData(boolean blit) { + replaceSurfaceData(backBufferCount, backBufferCaps, blit); } private void replaceSurfaceData(int newBackBufferCount, - BufferCapabilities newBackBufferCaps) { + BufferCapabilities newBackBufferCaps, + boolean blit) { synchronized (surfaceDataLock) { final SurfaceData oldData = getSurfaceData(); surfaceData = platformWindow.replaceSurfaceData(); @@ -967,7 +974,10 @@ public class LWWindowPeer if (getSurfaceData() != null && oldData != getSurfaceData()) { clearBackground(size.width, size.height); } - blitSurfaceData(oldData, getSurfaceData()); + + if (blit) { + blitSurfaceData(oldData, getSurfaceData()); + } if (oldData != null && oldData != getSurfaceData()) { // TODO: drop oldData for D3D/WGL pipelines @@ -982,8 +992,18 @@ public class LWWindowPeer Graphics g = backBuffer.getGraphics(); try { Rectangle r = getBounds(); - g.setColor(getBackground()); + if (g instanceof Graphics2D) { + ((Graphics2D) g).setComposite(AlphaComposite.Src); + } + g.setColor(nonOpaqueBackground); g.fillRect(0, 0, r.width, r.height); + if (g instanceof SunGraphics2D) { + SG2DConstraint((SunGraphics2D) g, getRegion()); + } + if (!isTextured()) { + g.setColor(getBackground()); + g.fillRect(0, 0, r.width, r.height); + } if (oldBB != null) { // Draw the old back buffer to the new one g.drawImage(oldBB, 0, 0, null); @@ -1007,7 +1027,7 @@ public class LWWindowPeer CompositeType.Src, dst.getSurfaceType()); if (blit != null) { - blit.Blit(src, dst, ((Graphics2D) getGraphics()).getComposite(), + blit.Blit(src, dst, AlphaComposite.Src, getRegion(), 0, 0, 0, 0, size.width, size.height); } } diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java index 815a71822e5..aeff2833d9a 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java @@ -117,7 +117,7 @@ public class CPlatformEmbeddedFrame implements PlatformWindow { Rectangle r = peer.getBounds(); Image im = null; if (!r.isEmpty()) { - int transparency = (peer.isOpaque() ? Transparency.OPAQUE : Transparency.TRANSLUCENT); + int transparency = peer.isTranslucent() ? Transparency.TRANSLUCENT : Transparency.OPAQUE; im = peer.getGraphicsConfiguration().createCompatibleImage(r.width, r.height, transparency); } return im; diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java index 5c072a69800..8439ca67c2d 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java @@ -64,7 +64,7 @@ public class CPlatformView extends CFRetainedResource { } public boolean isOpaque() { - return peer.isOpaque(); + return !peer.isTranslucent(); } /* diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java index 1ea54e90280..b2f0d832999 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java @@ -56,7 +56,6 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo private static native void nativePushNSWindowToBack(long nsWindowPtr); private static native void nativePushNSWindowToFront(long nsWindowPtr); private static native void nativeSetNSWindowTitle(long nsWindowPtr, String title); - private static native void nativeSetNSWindowAlpha(long nsWindowPtr, float alpha); private static native void nativeRevalidateNSWindowShadow(long nsWindowPtr); private static native void nativeSetNSWindowMinimizedIcon(long nsWindowPtr, long nsImage); private static native void nativeSetNSWindowRepresentedFilename(long nsWindowPtr, String representedFilename); @@ -210,6 +209,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo private boolean undecorated; // initialized in getInitialStyleBits() private Rectangle normalBounds = null; // not-null only for undecorated maximized windows private CPlatformResponder responder; + private volatile boolean zoomed = false; // from native perspective public CPlatformWindow(final PeerType peerType) { super(0, true); @@ -244,17 +244,6 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo // TODO: implement on top of JObjC bridged class // NSWindow window = JObjC.getInstance().AppKit().NSWindow().getInstance(nativeWindowPtr, JObjCRuntime.getInstance()); - // Since JDK7 we have standard way to set opacity, so we should not pick - // background's alpha. - // TODO: set appropriate opacity value - // this.opacity = target.getOpacity(); - // this.setOpacity(this.opacity); - - final float windowAlpha = target.getOpacity(); - if (windowAlpha != 1.0f) { - nativeSetNSWindowAlpha(nativeWindowPtr, windowAlpha); - } - if (target instanceof javax.swing.RootPaneContainer) { final javax.swing.JRootPane rootpane = ((javax.swing.RootPaneContainer)target).getRootPane(); if (rootpane != null) rootpane.addPropertyChangeListener("ancestor", new PropertyChangeListener() { @@ -310,7 +299,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo // If the target is a dialog, popup or tooltip we want it to ignore the brushed metal look. if (isPopup) { - styleBits = SET(styleBits, TEXTURED, true); + styleBits = SET(styleBits, TEXTURED, false); // Popups in applets don't activate applet's process styleBits = SET(styleBits, NONACTIVATING, true); } @@ -384,6 +373,8 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo } } + peer.setTextured(IS(TEXTURED, styleBits)); + return styleBits; } @@ -419,15 +410,9 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo if (owner != null) { CWrapper.NSWindow.removeChildWindow(owner.getNSWindowPtr(), getNSWindowPtr()); } - // Make sure window is ordered out before it is disposed, we could order it out right here or - // we could postpone the disposal, I think postponing is probably better. - EventQueue.invokeLater(new Runnable() { - public void run() { - contentView.dispose(); - nativeDispose(getNSWindowPtr()); - CPlatformWindow.super.dispose(); - } - }); + contentView.dispose(); + nativeDispose(getNSWindowPtr()); + CPlatformWindow.super.dispose(); } @Override // PlatformWindow @@ -485,26 +470,42 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo nativeSetNSWindowBounds(getNSWindowPtr(), x, y, w, h); } - private void zoom() { + private boolean isMaximized() { + return undecorated ? this.normalBounds != null : zoomed; + } + + private void maximize() { + if (isMaximized()) { + return; + } if (!undecorated) { + zoomed = true; CWrapper.NSWindow.zoom(getNSWindowPtr()); } else { - // OS X handles -zoom incorrectly for undecorated windows - final boolean isZoomed = this.normalBounds == null; - deliverZoom(isZoomed); + deliverZoom(true); - Rectangle toBounds; - if (isZoomed) { - this.normalBounds = peer.getBounds(); - long screen = CWrapper.NSWindow.screen(getNSWindowPtr()); - toBounds = CWrapper.NSScreen.visibleFrame(screen).getBounds(); - // Flip the y coordinate - Rectangle frame = CWrapper.NSScreen.frame(screen).getBounds(); - toBounds.y = frame.height - toBounds.y - toBounds.height; - } else { - toBounds = normalBounds; - this.normalBounds = null; - } + this.normalBounds = peer.getBounds(); + long screen = CWrapper.NSWindow.screen(getNSWindowPtr()); + Rectangle toBounds = CWrapper.NSScreen.visibleFrame(screen).getBounds(); + // Flip the y coordinate + Rectangle frame = CWrapper.NSScreen.frame(screen).getBounds(); + toBounds.y = frame.height - toBounds.y - toBounds.height; + setBounds(toBounds.x, toBounds.y, toBounds.width, toBounds.height); + } + } + + private void unmaximize() { + if (!isMaximized()) { + return; + } + if (!undecorated) { + zoomed = false; + CWrapper.NSWindow.zoom(getNSWindowPtr()); + } else { + deliverZoom(false); + + Rectangle toBounds = this.normalBounds; + this.normalBounds = null; setBounds(toBounds.x, toBounds.y, toBounds.width, toBounds.height); } } @@ -517,9 +518,9 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo public void setVisible(boolean visible) { final long nsWindowPtr = getNSWindowPtr(); - // 1. Process parent-child relationship when hiding + // Process parent-child relationship when hiding if (!visible) { - // 1a. Unparent my children + // Unparent my children for (Window w : target.getOwnedWindows()) { WindowPeer p = (WindowPeer)w.getPeer(); if (p instanceof LWWindowPeer) { @@ -530,30 +531,17 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo } } - // 1b. Unparent myself + // Unparent myself if (owner != null && owner.isVisible()) { CWrapper.NSWindow.removeChildWindow(owner.getNSWindowPtr(), nsWindowPtr); } } - // 2. Configure stuff + // Configure stuff updateIconImages(); updateFocusabilityForAutoRequestFocus(false); - // 3. Manage the extended state when hiding - if (!visible) { - // Cancel out the current native state of the window - switch (peer.getState()) { - case Frame.ICONIFIED: - CWrapper.NSWindow.deminiaturize(nsWindowPtr); - break; - case Frame.MAXIMIZED_BOTH: - zoom(); - break; - } - } - - // 4. Actually show or hide the window + // Actually show or hide the window LWWindowPeer blocker = peer.getBlocker(); if (blocker == null || !visible) { // If it ain't blocked, or is being hidden, go regular way @@ -582,16 +570,19 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo } this.visible = visible; - // 5. Manage the extended state when showing + // Manage the extended state when showing if (visible) { - // Re-apply the extended state as expected in shared code + // Apply the extended state as expected in shared code if (target instanceof Frame) { switch (((Frame)target).getExtendedState()) { case Frame.ICONIFIED: CWrapper.NSWindow.miniaturize(nsWindowPtr); break; case Frame.MAXIMIZED_BOTH: - zoom(); + maximize(); + break; + default: // NORMAL + unmaximize(); // in case it was maximized, otherwise this is a no-op break; } } @@ -599,12 +590,12 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo nativeSynthesizeMouseEnteredExitedEvents(nsWindowPtr); - // 6. Configure stuff #2 + // Configure stuff #2 updateFocusabilityForAutoRequestFocus(true); - // 7. Manage parent-child relationship when showing + // Manage parent-child relationship when showing if (visible) { - // 7a. Add myself as a child + // Add myself as a child if (owner != null && owner.isVisible()) { CWrapper.NSWindow.addChildWindow(owner.getNSWindowPtr(), nsWindowPtr, CWrapper.NSWindow.NSWindowAbove); if (target.isAlwaysOnTop()) { @@ -612,7 +603,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo } } - // 7b. Add my own children to myself + // Add my own children to myself for (Window w : target.getOwnedWindows()) { WindowPeer p = (WindowPeer)w.getPeer(); if (p instanceof LWWindowPeer) { @@ -627,7 +618,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo } } - // 8. Deal with the blocker of the window being shown + // Deal with the blocker of the window being shown if (blocker != null && visible) { // Make sure the blocker is above its siblings ((CPlatformWindow)blocker.getPlatformWindow()).orderAboveSiblings(); @@ -751,10 +742,19 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo @Override public void setOpaque(boolean isOpaque) { CWrapper.NSWindow.setOpaque(getNSWindowPtr(), isOpaque); - if (!isOpaque) { + if (!isOpaque && !peer.isTextured()) { long clearColor = CWrapper.NSColor.clearColor(); CWrapper.NSWindow.setBackgroundColor(getNSWindowPtr(), clearColor); } + + //This is a temporary workaround. Looks like after 7124236 will be fixed + //the correct place for invalidateShadow() is CGLayer.drawInCGLContext. + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + invalidateShadow(); + } + }); } @Override @@ -785,7 +785,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo if (prevWindowState == Frame.MAXIMIZED_BOTH) { // let's return into the normal states first // the zoom call toggles between the normal and the max states - zoom(); + unmaximize(); } CWrapper.NSWindow.miniaturize(nsWindowPtr); break; @@ -794,14 +794,14 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo // let's return into the normal states first CWrapper.NSWindow.deminiaturize(nsWindowPtr); } - zoom(); + maximize(); break; case Frame.NORMAL: if (prevWindowState == Frame.ICONIFIED) { CWrapper.NSWindow.deminiaturize(nsWindowPtr); } else if (prevWindowState == Frame.MAXIMIZED_BOTH) { // the zoom call toggles between the normal and the max states - zoom(); + unmaximize(); } break; default: @@ -823,6 +823,10 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo nativeSetEnabled(getNSWindowPtr(), !blocked); } + public final void invalidateShadow(){ + nativeRevalidateNSWindowShadow(getNSWindowPtr()); + } + // ---------------------------------------------------------------------- // UTILITY METHODS // ---------------------------------------------------------------------- diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java index d3565b845ad..774d31228d5 100644 --- a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java @@ -216,7 +216,6 @@ public class LWCToolkit extends LWToolkit { @Override public SystemTrayPeer createSystemTray(SystemTray target) { SystemTrayPeer peer = new CSystemTray(); - targetCreatedPeer(target, peer); return peer; } @@ -750,6 +749,11 @@ public class LWCToolkit extends LWToolkit { (modalityType == Dialog.ModalityType.TOOLKIT_MODAL); } + @Override + public boolean isWindowShapingSupported() { + return true; + } + @Override public boolean isWindowTranslucencySupported() { return true; @@ -760,6 +764,10 @@ public class LWCToolkit extends LWToolkit { return true; } + public boolean isSwingBackbufferTranslucencySupported() { + return true; + } + @Override public boolean enableInputMethodsForTextComponent() { return true; diff --git a/jdk/src/macosx/native/java/util/MacOSXPreferencesFile.m b/jdk/src/macosx/native/java/util/MacOSXPreferencesFile.m index a564e4bce38..d8bef393ad6 100644 --- a/jdk/src/macosx/native/java/util/MacOSXPreferencesFile.m +++ b/jdk/src/macosx/native/java/util/MacOSXPreferencesFile.m @@ -641,7 +641,7 @@ Java_java_util_prefs_MacOSXPreferencesFile_removeNode // child must end with '/' -JNIEXPORT void JNICALL +JNIEXPORT Boolean JNICALL Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode (JNIEnv *env, jobject klass, jobject jpath, jobject jchild, jobject jname, jlong juser, jlong jhost) @@ -656,6 +656,7 @@ Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode CFDictionaryRef node; CFStringRef topKey; CFMutableDictionaryRef topValue; + Boolean beforeAdd = false; if (!path || !child || !name) goto badparams; @@ -665,9 +666,12 @@ Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode // copyMutableNode creates the node if necessary parent = copyMutableNode(path, name, user, host, &topKey, &topValue); throwIfNull(parent, "copyMutableNode failed"); - + beforeAdd = CFDictionaryContainsKey(parent, child); CFDictionaryAddValue(parent, child, node); - + if (!beforeAdd) + beforeAdd = CFDictionaryContainsKey(parent, child); + else + beforeAdd = false; CFPreferencesSetValue(topKey, topValue, name, user, host); CFRelease(parent); @@ -680,6 +684,7 @@ Java_java_util_prefs_MacOSXPreferencesFile_addChildToNode if (path) CFRelease(path); if (child) CFRelease(child); if (name) CFRelease(name); + return beforeAdd; } diff --git a/jdk/src/macosx/native/jobjc/build.xml b/jdk/src/macosx/native/jobjc/build.xml index 46e726c6278..19e29ad51af 100644 --- a/jdk/src/macosx/native/jobjc/build.xml +++ b/jdk/src/macosx/native/jobjc/build.xml @@ -140,8 +140,16 @@ - + includeantruntime="false"> + + + + + + + + + diff --git a/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs b/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs index 544998ee859..2759733ec6f 100644 --- a/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs +++ b/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs @@ -2,7 +2,7 @@ {- /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011,2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -196,6 +196,8 @@ sizeofRet nt = c2java ntype = unlines [ "// native " ++ ntypeS ++ " -> java " ++ jprimS, + "/* No native methods here, but the constants are needed in the supporting JNI code */", + "@GenerateNativeHeader", "public static final class " ++ className ++ " extends PrimitiveCoder<" ++ jclassS ++ ">{", "\tpublic static final " ++ className ++ " INST = new " ++ className ++ "();", "\tpublic " ++ className ++ "(){ super("++ffitypeVal ntype++", \"" ++ [encoding ntype] ++ "\", "++jclassS++".class, "++jprimS++".class); }", @@ -246,10 +248,13 @@ main = do putStrLn "package com.apple.jobjc;" putStrLn "import com.apple.jobjc.JObjCRuntime.Width;" + putStrLn "import javax.tools.annotation.GenerateNativeHeader;" putStrLn "// Auto generated by PrimitiveCoder.hs" putStrLn "// Do not edit by hand." + putStrLn "/* No native methods here, but the constants are needed in the supporting JNI code */" + putStrLn "@GenerateNativeHeader" putStrLn "public abstract class PrimitiveCoder extends Coder{" putStrLn "\tpublic PrimitiveCoder(int ffiTypeCode, String objCEncoding, Class jclass, Class jprim){" diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CFType.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CFType.java index aeeca30d29e..835b3793538 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CFType.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CFType.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class CFType extends Pointer { protected CFType(long ptr) { super(ptr); } protected CFType(Pointer ptr) { super(ptr.ptr); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java index a6a714f3933..f1bc68283ac 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java @@ -35,6 +35,7 @@ import com.apple.jobjc.PrimitiveCoder.SCharCoder; import com.apple.jobjc.PrimitiveCoder.SIntCoder; import com.apple.jobjc.PrimitiveCoder.SLongLongCoder; import com.apple.jobjc.PrimitiveCoder.SShortCoder; +import javax.tools.annotation.GenerateNativeHeader; public abstract class Coder { private static native long getNativeFFITypePtrForCode(final int code); @@ -142,6 +143,8 @@ public abstract class Coder { // + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class VoidCoder extends Coder{ public static final VoidCoder INST = new VoidCoder(); public VoidCoder(){ super(FFI_VOID, "v", Void.class, void.class); } @@ -150,6 +153,8 @@ public abstract class Coder { @Override public void push(JObjCRuntime runtime, long addr, Object x) { throw new RuntimeException("Trying to push a Void."); } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class UnknownCoder extends Coder { public static final UnknownCoder INST = new UnknownCoder(); public UnknownCoder(){ super(-1, "?", null, null); } @@ -158,6 +163,8 @@ public abstract class Coder { @Override public Object pop(JObjCRuntime runtime, long addr) { throw new RuntimeException("Coder not implemented"); } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class PrimitivePointerCoder extends Coder { public static final PrimitivePointerCoder INST = new PrimitivePointerCoder(); public PrimitivePointerCoder(){ super(Coder.FFI_PTR, "^?", Long.class, long.class); } @@ -187,6 +194,8 @@ public abstract class Coder { @Override public void push(JObjCRuntime runtime, long addr, Long x) { push(runtime, addr, (long) x); } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class PointerCoder extends Coder { public static final PointerCoder INST = new PointerCoder(); public PointerCoder(){ super(FFI_PTR, "^?", Pointer.class); } @@ -200,6 +209,8 @@ public abstract class Coder { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class SELCoder extends Coder { public static final SELCoder INST = new SELCoder(); public SELCoder(){ super(FFI_PTR, ":", SEL.class); } @@ -213,6 +224,8 @@ public abstract class Coder { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static abstract class StructCoder extends Coder { private final FFIType ffiType; final int sizeof; @@ -254,6 +267,8 @@ public abstract class Coder { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class IDCoder extends Coder{ public static final IDCoder INST = new IDCoder(); public IDCoder(){ super(FFI_PTR, "@", ID.class); } @@ -272,6 +287,8 @@ public abstract class Coder { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class NSClassCoder extends Coder{ public static final NSClassCoder INST = new NSClassCoder(); public NSClassCoder(){ super(FFI_PTR, "#", NSClass.class); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/FFIType.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/FFIType.java index fcfddd6edec..c045b210c6c 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/FFIType.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/FFIType.java @@ -26,6 +26,10 @@ package com.apple.jobjc; import com.apple.jobjc.Coder.PrimitivePointerCoder; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader class FFIType{ private static native void makeFFIType(long ffi_type_buf, long elements_buf); private static native int getFFITypeSizeof(); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Function.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Function.java index 0acfccce91d..b5257cc83ef 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Function.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Function.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class Function { private static native long getFxnPtrForFunctionName(final String functionName); private static native long getFxnPtrForFunctionNameAndLib(final long libPtr, final String functionName); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/ID.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/ID.java index f2b3718df7e..192e6feafa0 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/ID.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/ID.java @@ -29,6 +29,10 @@ import java.lang.reflect.Constructor; import java.util.LinkedHashMap; import java.util.Map; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class ID extends Pointer{ static native String getNativeDescription(final long objPtr); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Invoke.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Invoke.java index c6cab308a93..19e79ddc165 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Invoke.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Invoke.java @@ -30,12 +30,18 @@ import com.apple.jobjc.Coder.PrimitivePointerCoder; import com.apple.jobjc.Coder.SELCoder; import com.apple.jobjc.Coder.StructCoder; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class Invoke { public abstract void invoke(NativeArgumentBuffer argBuf); public abstract void invoke(NativeArgumentBuffer buffer, Struct retvalStruct); // + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class FunCall extends Invoke{ static native void invoke(long cifPtr, long fxnPtr, long retValPtr, long argsPtr); @@ -72,6 +78,8 @@ public abstract class Invoke { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class MsgSend extends Invoke{ static{ System.load("/usr/lib/libobjc.dylib"); } @@ -157,6 +165,8 @@ public abstract class Invoke { } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static final class MsgSendSuper extends Invoke{ static{ System.load("/usr/lib/libobjc.dylib"); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java index b5e08478c1c..03f636696b2 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/JObjCRuntime.java @@ -31,10 +31,16 @@ import java.util.List; import sun.misc.Unsafe; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public final class JObjCRuntime { static { System.loadLibrary("JObjC"); } + @GenerateNativeHeader public static enum Arch{ ppc, i386, x86_64 }; + @GenerateNativeHeader public static enum Width{ W32, W64 }; public static final Arch ARCH = getArch(); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/MacOSXFramework.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/MacOSXFramework.java index bfc77501db8..09737c80925 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/MacOSXFramework.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/MacOSXFramework.java @@ -25,6 +25,10 @@ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class MacOSXFramework { private static native long retainFramework(final String frameworkName); private static native void releaseFramework(final long frameworkPtr); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NSClass.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NSClass.java index dbc784f6940..15de180200d 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NSClass.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NSClass.java @@ -27,7 +27,13 @@ package com.apple.jobjc; import java.lang.ref.WeakReference; import java.lang.reflect.Constructor; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class NSClass extends ID { + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class NSClassNotFoundException extends RuntimeException{ public NSClassNotFoundException(String m){ super(m); } public NSClassNotFoundException(String m, Throwable cause){ super(m, cause); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeArgumentBuffer.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeArgumentBuffer.java index 1e3c42452bf..3a6a792af56 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeArgumentBuffer.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeArgumentBuffer.java @@ -28,6 +28,10 @@ import java.nio.ByteOrder; import com.apple.jobjc.Coder.PrimitivePointerCoder; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public final class NativeArgumentBuffer{ private static final ThreadLocal threadLocal = new ThreadLocal(); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeBuffer.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeBuffer.java index ee0ac05d687..f7285f145a5 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeBuffer.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeBuffer.java @@ -27,9 +27,13 @@ package com.apple.jobjc; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import javax.tools.annotation.GenerateNativeHeader; + /** * A wrapper around a direct ByteBuffer and its native pointer. For documentation, @see java.nio.ByteBuffer */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class NativeBuffer { static native long getPtrOfBuffer(final ByteBuffer byteBuffer); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeObjectLifecycleManager.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeObjectLifecycleManager.java index b4d3dbfe0b8..928f0012425 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeObjectLifecycleManager.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/NativeObjectLifecycleManager.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class NativeObjectLifecycleManager { private static native void retainNativeObject(final long ptr); private static native void releaseNativeObject(final long ptr); @@ -33,6 +37,8 @@ public abstract class NativeObjectLifecycleManager { abstract void end(final long ptr); boolean shouldPreRetain() { return false; } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class CFRetainRelease extends NativeObjectLifecycleManager { public static final NativeObjectLifecycleManager INST = new CFRetainRelease(); @Override void begin(final long ptr) { retainNativeObject(ptr); } @@ -40,12 +46,16 @@ public abstract class NativeObjectLifecycleManager { @Override boolean shouldPreRetain() { return true; } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Free extends NativeObjectLifecycleManager { public static final NativeObjectLifecycleManager INST = new Free(); @Override void begin(final long ptr) { } @Override void end(final long ptr) { freeNativeObject(ptr); } } + /* No native methods here, but the constants are needed in the supporting JNI code */ + @GenerateNativeHeader public static class Nothing extends NativeObjectLifecycleManager { public static final NativeObjectLifecycleManager INST = new Nothing(); @Override void begin(final long ptr) { } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Opaque.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Opaque.java index cbc5acca39e..82bceb93ce8 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Opaque.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Opaque.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class Opaque extends Pointer { protected Opaque(long ptr) { super(ptr); } protected Opaque(Pointer ptr) { super(ptr.ptr); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Pointer.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Pointer.java index 5d8c3c85c2e..cc0487f2e69 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Pointer.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Pointer.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class Pointer implements Comparable>{ long ptr; diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/PrimitiveCoder.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/PrimitiveCoder.java index 8dcc42482da..975b88848d5 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/PrimitiveCoder.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/PrimitiveCoder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011,2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,8 +24,11 @@ */ package com.apple.jobjc; import com.apple.jobjc.JObjCRuntime.Width; +import javax.tools.annotation.GenerateNativeHeader; // Auto generated by PrimitiveCoder.hs // Do not edit by hand. +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class PrimitiveCoder extends Coder{ public PrimitiveCoder(int ffiTypeCode, String objCEncoding, Class jclass, Class jprim){ super(ffiTypeCode, objCEncoding, jclass, jprim); @@ -127,6 +130,8 @@ public abstract class PrimitiveCoder extends Coder{ // native BOOL -> java boolean +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class BoolCoder extends PrimitiveCoder{ public static final BoolCoder INST = new BoolCoder(); public BoolCoder(){ super(FFI_SINT8, "B", Boolean.class, boolean.class); } @@ -170,6 +175,8 @@ public static final class BoolCoder extends PrimitiveCoder{ } // native schar -> java byte +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SCharCoder extends PrimitiveCoder{ public static final SCharCoder INST = new SCharCoder(); public SCharCoder(){ super(FFI_SINT8, "c", Byte.class, byte.class); } @@ -213,6 +220,8 @@ public static final class SCharCoder extends PrimitiveCoder{ } // native uchar -> java byte +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class UCharCoder extends PrimitiveCoder{ public static final UCharCoder INST = new UCharCoder(); public UCharCoder(){ super(FFI_UINT8, "C", Byte.class, byte.class); } @@ -256,6 +265,8 @@ public static final class UCharCoder extends PrimitiveCoder{ } // native sshort -> java short +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SShortCoder extends PrimitiveCoder{ public static final SShortCoder INST = new SShortCoder(); public SShortCoder(){ super(FFI_SINT16, "s", Short.class, short.class); } @@ -299,6 +310,8 @@ public static final class SShortCoder extends PrimitiveCoder{ } // native ushort -> java short +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class UShortCoder extends PrimitiveCoder{ public static final UShortCoder INST = new UShortCoder(); public UShortCoder(){ super(FFI_UINT16, "S", Short.class, short.class); } @@ -342,6 +355,8 @@ public static final class UShortCoder extends PrimitiveCoder{ } // native sint -> java int +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SIntCoder extends PrimitiveCoder{ public static final SIntCoder INST = new SIntCoder(); public SIntCoder(){ super(FFI_SINT32, "i", Integer.class, int.class); } @@ -385,6 +400,8 @@ public static final class SIntCoder extends PrimitiveCoder{ } // native uint -> java int +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class UIntCoder extends PrimitiveCoder{ public static final UIntCoder INST = new UIntCoder(); public UIntCoder(){ super(FFI_UINT32, "I", Integer.class, int.class); } @@ -428,6 +445,8 @@ public static final class UIntCoder extends PrimitiveCoder{ } // native slong -> java long +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SLongCoder extends PrimitiveCoder{ public static final SLongCoder INST = new SLongCoder(); public SLongCoder(){ super((JObjCRuntime.IS64 ? (FFI_SINT64) : (FFI_SINT32)), "l", Long.class, long.class); } @@ -477,6 +496,8 @@ public static final class SLongCoder extends PrimitiveCoder{ } // native ulong -> java long +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class ULongCoder extends PrimitiveCoder{ public static final ULongCoder INST = new ULongCoder(); public ULongCoder(){ super((JObjCRuntime.IS64 ? (FFI_UINT64) : (FFI_UINT32)), "L", Long.class, long.class); } @@ -526,6 +547,8 @@ public static final class ULongCoder extends PrimitiveCoder{ } // native slonglong -> java long +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class SLongLongCoder extends PrimitiveCoder{ public static final SLongLongCoder INST = new SLongLongCoder(); public SLongLongCoder(){ super(FFI_SINT64, "q", Long.class, long.class); } @@ -569,6 +592,8 @@ public static final class SLongLongCoder extends PrimitiveCoder{ } // native ulonglong -> java long +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class ULongLongCoder extends PrimitiveCoder{ public static final ULongLongCoder INST = new ULongLongCoder(); public ULongLongCoder(){ super(FFI_UINT64, "Q", Long.class, long.class); } @@ -612,6 +637,8 @@ public static final class ULongLongCoder extends PrimitiveCoder{ } // native float -> java float +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class FloatCoder extends PrimitiveCoder{ public static final FloatCoder INST = new FloatCoder(); public FloatCoder(){ super(FFI_FLOAT, "f", Float.class, float.class); } @@ -655,6 +682,8 @@ public static final class FloatCoder extends PrimitiveCoder{ } // native double -> java double +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public static final class DoubleCoder extends PrimitiveCoder{ public static final DoubleCoder INST = new DoubleCoder(); public DoubleCoder(){ super(FFI_DOUBLE, "d", Double.class, double.class); } diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/SEL.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/SEL.java index b6d719e1158..44d679ab539 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/SEL.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/SEL.java @@ -24,6 +24,10 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public class SEL { static native long getSelectorPtr(String selectorName); static native String getSelectorName(long ptr); diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Struct.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Struct.java index 8329cf17f04..117710402e8 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Struct.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Struct.java @@ -24,9 +24,13 @@ */ package com.apple.jobjc; +import javax.tools.annotation.GenerateNativeHeader; + /** * A struct is malloced on the C heap and accessed in Java through a ByteBuffer. */ +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader public abstract class Struct{ protected final NativeBuffer raw; private final JObjCRuntime runtime; diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Subclassing.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Subclassing.java index b2084dfd706..d3bfc1b0e41 100644 --- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Subclassing.java +++ b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Subclassing.java @@ -33,6 +33,10 @@ import com.apple.jobjc.Coder.PrimitivePointerCoder; import com.apple.jobjc.Coder.VoidCoder; import com.apple.jobjc.Invoke.MsgSend; +import javax.tools.annotation.GenerateNativeHeader; + +/* No native methods here, but the constants are needed in the supporting JNI code */ +@GenerateNativeHeader final class Subclassing { static native long allocateClassPair(long superClass, String name); static native boolean addIVarForJObj(long clazz); diff --git a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/classes/FrameworkClassFile.java b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/classes/FrameworkClassFile.java index 20b27b6c548..8a27daaa0af 100644 --- a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/classes/FrameworkClassFile.java +++ b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/classes/FrameworkClassFile.java @@ -28,6 +28,7 @@ import java.io.File; import java.io.PrintStream; import java.util.ArrayList; import java.util.List; +import java.util.TreeSet; import com.apple.internal.jobjc.generator.FunctionGenerator; import com.apple.internal.jobjc.generator.Utils; @@ -130,7 +131,11 @@ public class FrameworkClassFile extends GeneratedClassFile { } } - for (final Clazz clazz : framework.classes) { + /** + * Order classes to get stable output + */ + TreeSet sortedClasses = new TreeSet(framework.classes); + for (final Clazz clazz : sortedClasses) { final String classClassName = clazz.name + "Class"; out.println(JavaLang.makeSingleton("_" + classClassName, clazz.name, classClassName, "getRuntime()")); } diff --git a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/Clazz.java b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/Clazz.java index 9dfb8228a82..be4278ffef9 100644 --- a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/Clazz.java +++ b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/Clazz.java @@ -147,4 +147,8 @@ public class Clazz extends Element implements OutputFileGenerator { return null; } + + int compareTo(Clazz o) { + return toString().compareTo(o.toString()); + } } diff --git a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/coders/ComplexCoderDescriptor.java b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/coders/ComplexCoderDescriptor.java index 11ee8cc9fe3..7ffb14b0f31 100644 --- a/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/coders/ComplexCoderDescriptor.java +++ b/jdk/src/macosx/native/jobjc/src/generator/java/com/apple/internal/jobjc/generator/model/coders/ComplexCoderDescriptor.java @@ -25,7 +25,7 @@ package com.apple.internal.jobjc.generator.model.coders; import java.util.HashMap; -import java.util.HashSet; +import java.util.TreeSet; import java.util.Map; import java.util.Set; @@ -40,7 +40,7 @@ import com.apple.jobjc.JObjCRuntime; */ public class ComplexCoderDescriptor extends CoderDescriptor { static Map, ComplexCoderDescriptor> cache = new HashMap, ComplexCoderDescriptor>(); - static Set mixedEncodingDescriptors = new HashSet(); + static Set mixedEncodingDescriptors = new TreeSet(); public static Set getMixedEncoders() { return mixedEncodingDescriptors; } @@ -76,7 +76,7 @@ public class ComplexCoderDescriptor extends CoderDescriptor { // ** Subclasses // ------------- - public static class MixedEncodingDescriptor extends ComplexCoderDescriptor { + public static class MixedEncodingDescriptor extends ComplexCoderDescriptor implements java.lang.Comparable { protected final PrimitiveCoderDescriptor desc32; public MixedEncodingDescriptor(final PrimitiveCoderDescriptor desc32, final PrimitiveCoderDescriptor desc64) { @@ -97,5 +97,6 @@ public class ComplexCoderDescriptor extends CoderDescriptor { } static String getBaseNameOfCoder(final String coderName) { return coderName.substring(0, coderName.indexOf("Coder")); } + public int compareTo(Object _o) { MixedEncodingDescriptor o = (MixedEncodingDescriptor)_o; return getMixedName().compareTo(o.getMixedName()); } } } diff --git a/jdk/src/macosx/native/sun/awt/AWTWindow.m b/jdk/src/macosx/native/sun/awt/AWTWindow.m index b5b545e6b86..48ab428521c 100644 --- a/jdk/src/macosx/native/sun/awt/AWTWindow.m +++ b/jdk/src/macosx/native/sun/awt/AWTWindow.m @@ -932,27 +932,6 @@ AWT_ASSERT_NOT_APPKIT_THREAD; JNF_COCOA_EXIT(env); } -/* - * Class: sun_lwawt_macosx_CPlatformWindow - * Method: nativeSetNSWindowAlpha - * Signature: (JF)V - */ -JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetNSWindowAlpha -(JNIEnv *env, jclass clazz, jlong windowPtr, jfloat alpha) -{ -JNF_COCOA_ENTER(env); -AWT_ASSERT_NOT_APPKIT_THREAD; - - NSWindow *nsWindow = OBJC(windowPtr); - [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ - AWT_ASSERT_APPKIT_THREAD; - - [nsWindow setAlphaValue:alpha]; - }]; - -JNF_COCOA_EXIT(env); -} - /* * Class: sun_lwawt_macosx_CPlatformWindow * Method: nativeRevalidateNSWindowShadow @@ -962,14 +941,17 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeRevalidateNSW (JNIEnv *env, jclass clazz, jlong windowPtr) { JNF_COCOA_ENTER(env); -AWT_ASSERT_NOT_APPKIT_THREAD; NSWindow *nsWindow = OBJC(windowPtr); - [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ - AWT_ASSERT_APPKIT_THREAD; - + if ([NSThread isMainThread]) { [nsWindow invalidateShadow]; - }]; + } else { + [JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ + AWT_ASSERT_APPKIT_THREAD; + + [nsWindow invalidateShadow]; + }]; + } JNF_COCOA_EXIT(env); } diff --git a/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m b/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m index 62034c82514..9bc5393d765 100644 --- a/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m +++ b/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m @@ -28,7 +28,7 @@ /* * Convert the mode string to the more convinient bits per pixel value */ -static int getBPPFromModeString(CFStringRef mode) +static int getBPPFromModeString(CFStringRef mode) { if ((CFStringCompare(mode, CFSTR(kIO30BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo)) { // This is a strange mode, where we using 10 bits per RGB component and pack it into 32 bits @@ -44,7 +44,7 @@ static int getBPPFromModeString(CFStringRef mode) else if (CFStringCompare(mode, CFSTR(IO8BitIndexedPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) { return 8; } - + return 0; } @@ -68,6 +68,11 @@ static CGDisplayModeRef getBestModeForParameters(CFArrayRef allModes, int w, int // One of the key parameters does not match continue; } + + if (refrate == 0) { // REFRESH_RATE_UNKNOWN + return cRef; + } + // Refresh rate might be 0 in display mode and we ask for specific display rate // but if we do not find exact match then 0 refresh rate might be just Ok if (CGDisplayModeGetRefreshRate(cRef) == refrate) { @@ -165,7 +170,10 @@ Java_sun_awt_CGraphicsDevice_nativeSetDisplayMode } } }]; + } else { + [JNFException raise:env as:kIllegalArgumentException reason:"Invalid display mode"]; } + CFRelease(allModes); JNF_COCOA_EXIT(env); } diff --git a/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java b/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java index 9b3cbc27449..74b3cc408d9 100644 --- a/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java +++ b/jdk/src/share/classes/com/sun/crypto/provider/OAEPParameters.java @@ -105,22 +105,6 @@ public final class OAEPParameters extends AlgorithmParametersSpi { } } - private static String convertToStandardName(String internalName) { - if (internalName.equals("SHA")) { - return "SHA-1"; - } else if (internalName.equals("SHA224")) { - return "SHA-224"; - } else if (internalName.equals("SHA256")) { - return "SHA-256"; - } else if (internalName.equals("SHA384")) { - return "SHA-384"; - } else if (internalName.equals("SHA512")) { - return "SHA-512"; - } else { - return internalName; - } - } - protected void engineInit(byte[] encoded) throws IOException { DerInputStream der = new DerInputStream(encoded); @@ -132,8 +116,8 @@ public final class OAEPParameters extends AlgorithmParametersSpi { DerValue data = datum[i]; if (data.isContextSpecific((byte) 0x00)) { // hash algid - mdName = convertToStandardName(AlgorithmId.parse - (data.data.getDerValue()).getName()); + mdName = AlgorithmId.parse + (data.data.getDerValue()).getName(); } else if (data.isContextSpecific((byte) 0x01)) { // mgf algid AlgorithmId val = AlgorithmId.parse(data.data.getDerValue()); @@ -142,7 +126,7 @@ public final class OAEPParameters extends AlgorithmParametersSpi { } AlgorithmId params = AlgorithmId.parse( new DerValue(val.getEncodedParams())); - String mgfDigestName = convertToStandardName(params.getName()); + String mgfDigestName = params.getName(); if (mgfDigestName.equals("SHA-1")) { mgfSpec = MGF1ParameterSpec.SHA1; } else if (mgfDigestName.equals("SHA-224")) { diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java index fcfb1783605..6fb52a4cd4a 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java @@ -796,9 +796,10 @@ public class GTKLookAndFeel extends SynthLookAndFeel { "Menu.margin", zeroInsets, "Menu.cancelMode", "hideMenuTree", "Menu.alignAcceleratorText", Boolean.FALSE, + "Menu.useMenuBarForTopLevelMenus", Boolean.TRUE, - "MenuBar.windowBindings", new Object[] { + "MenuBar.windowBindings", new Object[] { "F10", "takeFocus" }, "MenuBar.font", new FontLazyValue(Region.MENU_BAR), diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java index 5c28db4e23d..cfc2fc3ccb3 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKStyleFactory.java @@ -92,7 +92,13 @@ class GTKStyleFactory extends SynthStyleFactory { boolean defaultCapable = btn.isDefaultCapable(); key = new ComplexKey(wt, toolButton, defaultCapable); } + } else if (id == Region.MENU) { + if (c instanceof JMenu && ((JMenu) c).isTopLevelMenu() && + UIManager.getBoolean("Menu.useMenuBarForTopLevelMenus")) { + wt = WidgetType.MENU_BAR; + } } + if (key == null) { // Otherwise, just use the WidgetType as the key. key = wt; diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java index 960e2d40432..7ecbca05ef2 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java @@ -36,6 +36,7 @@ import java.io.OutputStream; import java.io.PrintStream; import java.text.MessageFormat; import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -381,12 +382,15 @@ class Driver { String prefix = base.getName(); if (prefix.length() < 3) prefix += "tmp"; - File where = base.getParentFile(); + File where = (base.getParentFile() == null && suffix.equals(".bak")) + ? new File(".").getAbsoluteFile() + : base.getParentFile(); - if ( base.getParentFile() == null && suffix.equals(".bak")) - where = new File(".").getAbsoluteFile(); + Path tmpfile = (where == null) + ? Files.createTempFile(prefix, suffix) + : Files.createTempFile(where.toPath(), prefix, suffix); - return Files.createTempFile(where.toPath(), prefix, suffix).toFile(); + return tmpfile.toFile(); } static private diff --git a/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java b/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java index 464e3d1bfdd..2b8b410f4cb 100644 --- a/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java +++ b/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -680,9 +680,11 @@ public final class Connection implements Runnable { ldr = ldr.next; } } - parent.processConnectionClosure(); } } + if (nparent) { + parent.processConnectionClosure(); + } } diff --git a/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java b/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java index 0053758c26f..788152929b2 100644 --- a/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java +++ b/jdk/src/share/classes/com/sun/jndi/ldap/LdapClient.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -488,14 +488,16 @@ public final class LdapClient implements PooledConnection { */ void processConnectionClosure() { // Notify listeners - if (unsolicited.size() > 0) { - String msg; - if (conn != null) { - msg = conn.host + ":" + conn.port + " connection closed"; - } else { - msg = "Connection closed"; + synchronized (unsolicited) { + if (unsolicited.size() > 0) { + String msg; + if (conn != null) { + msg = conn.host + ":" + conn.port + " connection closed"; + } else { + msg = "Connection closed"; + } + notifyUnsolicited(new CommunicationException(msg)); } - notifyUnsolicited(new CommunicationException(msg)); } // Remove from pool diff --git a/jdk/src/share/classes/java/awt/image/DirectColorModel.java b/jdk/src/share/classes/java/awt/image/DirectColorModel.java index 1f6099c59d7..751d780ba64 100644 --- a/jdk/src/share/classes/java/awt/image/DirectColorModel.java +++ b/jdk/src/share/classes/java/awt/image/DirectColorModel.java @@ -27,7 +27,6 @@ package java.awt.image; import java.awt.color.ColorSpace; import java.awt.Transparency; -import javax.tools.annotation.GenerateNativeHeader; /** * The DirectColorModel class is a ColorModel @@ -107,8 +106,6 @@ import javax.tools.annotation.GenerateNativeHeader; * @see ColorModel#getRGBdefault * */ -/* No native methods here, but the constants are needed in the supporting JNI code */ -@GenerateNativeHeader public class DirectColorModel extends PackedColorModel { private int red_mask; private int green_mask; diff --git a/jdk/src/share/classes/java/net/HttpCookie.java b/jdk/src/share/classes/java/net/HttpCookie.java index 1963e1fc913..fe4edc6ac12 100644 --- a/jdk/src/share/classes/java/net/HttpCookie.java +++ b/jdk/src/share/classes/java/net/HttpCookie.java @@ -137,7 +137,7 @@ public final class HttpCookie implements Cloneable { private HttpCookie(String name, String value, String header) { name = name.trim(); - if (name.length() == 0 || !isToken(name) || isReserved(name)) { + if (name.length() == 0 || !isToken(name)) { throw new IllegalArgumentException("Illegal cookie name"); } @@ -781,33 +781,6 @@ public final class HttpCookie implements Cloneable { return true; } - /* - * @param name - * the name to be tested - * - * @return {@code true} if the name is reserved by cookie specification, - * {@code false} if it is not - */ - private static boolean isReserved(String name) { - if (name.equalsIgnoreCase("Comment") - || name.equalsIgnoreCase("CommentURL") // rfc2965 only - || name.equalsIgnoreCase("Discard") // rfc2965 only - || name.equalsIgnoreCase("Domain") - || name.equalsIgnoreCase("Expires") // netscape draft only - || name.equalsIgnoreCase("Max-Age") - || name.equalsIgnoreCase("Path") - || name.equalsIgnoreCase("Port") // rfc2965 only - || name.equalsIgnoreCase("Secure") - || name.equalsIgnoreCase("Version") - || name.equalsIgnoreCase("HttpOnly") - || name.charAt(0) == '$') - { - return true; - } - - return false; - } - /* * Parse header string to cookie object. * diff --git a/jdk/src/share/classes/java/net/NetworkInterface.java b/jdk/src/share/classes/java/net/NetworkInterface.java index b6cd711bb1b..aa8e0bcffcf 100644 --- a/jdk/src/share/classes/java/net/NetworkInterface.java +++ b/jdk/src/share/classes/java/net/NetworkInterface.java @@ -326,8 +326,10 @@ public final class NetworkInterface { } /** - * Returns all the interfaces on this machine. Returns null if no - * network interfaces could be found on this machine. + * Returns all the interfaces on this machine. The {@code Enumeration} + * contains at least one element, possibly representing a loopback + * interface that only supports communication between entities on + * this machine. * * NOTE: can use getNetworkInterfaces()+getInetAddresses() * to obtain all IP addresses for this node diff --git a/jdk/src/share/classes/java/net/package.html b/jdk/src/share/classes/java/net/package.html index c0146760d4d..b5bd261be9f 100644 --- a/jdk/src/share/classes/java/net/package.html +++ b/jdk/src/share/classes/java/net/package.html @@ -65,6 +65,7 @@ Provides the classes for implementing networking applications.

Sending and receiving with TCP sockets is done through InputStreams and OutputStreams which can be obtained via the {@link java.net.Socket#getInputStream} and {@link java.net.Socket#getOutputStream} methods.

Interfaces

The {@link java.net.NetworkInterface} class provides APIs to browse and query all the networking interfaces (e.g. ethernet connection or PPP endpoint) of the local machine. It is through that class that you can check if any of the local interfaces is configured to support IPv6.

+

Note, all conforming implementations must support at least one {@code NetworkInterface} object, which must either be connected to a network, or be a "loopback" interface that can only communicate with entities on the same machine.

High level API

A number of classes in the java.net package do provide for a much higher level of abstraction and allow for easy access to resources on the network. The classes are: diff --git a/jdk/src/share/classes/java/util/InvalidPropertiesFormatException.java b/jdk/src/share/classes/java/util/InvalidPropertiesFormatException.java index 64dde4d42a4..2d92ae66e85 100644 --- a/jdk/src/share/classes/java/util/InvalidPropertiesFormatException.java +++ b/jdk/src/share/classes/java/util/InvalidPropertiesFormatException.java @@ -44,6 +44,9 @@ import java.io.IOException; */ public class InvalidPropertiesFormatException extends IOException { + + private static final long serialVersionUID = 7763056076009360219L; + /** * Constructs an InvalidPropertiesFormatException with the specified * cause. diff --git a/jdk/src/share/classes/java/util/regex/Pattern.java b/jdk/src/share/classes/java/util/regex/Pattern.java index 6c32f6a30bb..1c3d9fe0752 100644 --- a/jdk/src/share/classes/java/util/regex/Pattern.java +++ b/jdk/src/share/classes/java/util/regex/Pattern.java @@ -2026,6 +2026,7 @@ loop: for(int x=0, offset=0; x RFC4120. */ - private void writeObject(ObjectOutputStream oos) - throws IOException { + throws IOException { - PrincipalName krb5Principal = null; + PrincipalName krb5Principal; try { - krb5Principal = new PrincipalName(fullName,nameType); + krb5Principal = new PrincipalName(fullName, nameType); oos.writeObject(krb5Principal.asn1Encode()); oos.writeObject(krb5Principal.getRealm().asn1Encode()); } catch (Exception e) { - IOException ioe = new IOException(e.getMessage()); - ioe.initCause(e); - throw ioe; + throw new IOException(e); } } /** * Reads this object from a stream (i.e., deserializes it) */ - private void readObject(ObjectInputStream ois) - throws IOException, ClassNotFoundException { + throws IOException, ClassNotFoundException { byte[] asn1EncPrincipal = (byte [])ois.readObject(); byte[] encRealm = (byte [])ois.readObject(); try { - PrincipalName krb5Principal = new PrincipalName(new - DerValue(asn1EncPrincipal)); - realm = (new Realm(new DerValue(encRealm))).toString(); - fullName = krb5Principal.toString() + NAME_REALM_SEPARATOR + - realm.toString(); + Realm realmObject = new Realm(new DerValue(encRealm)); + PrincipalName krb5Principal = new PrincipalName( + new DerValue(asn1EncPrincipal), realmObject); + realm = realmObject.toString(); + fullName = krb5Principal.toString(); nameType = krb5Principal.getNameType(); } catch (Exception e) { - IOException ioe = new IOException(e.getMessage()); - ioe.initCause(e); - throw ioe; + throw new IOException(e); } } @@ -288,9 +279,7 @@ public final class KerberosPrincipal * RFC4120. * * @return the name type. - * */ - public int getNameType() { return nameType; } diff --git a/jdk/src/share/classes/javax/swing/JViewport.java b/jdk/src/share/classes/javax/swing/JViewport.java index 51975d7cd6c..c2ea60bf0ec 100644 --- a/jdk/src/share/classes/javax/swing/JViewport.java +++ b/jdk/src/share/classes/javax/swing/JViewport.java @@ -1586,10 +1586,18 @@ public class JViewport extends JComponent implements Accessible int bdx = blitToX - blitFromX; int bdy = blitToY - blitFromY; + Composite oldComposite = null; // Shift the scrolled region + if (g instanceof Graphics2D) { + Graphics2D g2d = (Graphics2D) g; + oldComposite = g2d.getComposite(); + g2d.setComposite(AlphaComposite.Src); + } rm.copyArea(this, g, blitFromX, blitFromY, blitW, blitH, bdx, bdy, false); - + if (oldComposite != null) { + ((Graphics2D) g).setComposite(oldComposite); + } // Paint the newly exposed region. int x = view.getX(); int y = view.getY(); diff --git a/jdk/src/share/classes/javax/swing/RepaintManager.java b/jdk/src/share/classes/javax/swing/RepaintManager.java index d1ba1f4c528..aa3f8bdf50c 100644 --- a/jdk/src/share/classes/javax/swing/RepaintManager.java +++ b/jdk/src/share/classes/javax/swing/RepaintManager.java @@ -118,6 +118,11 @@ public class RepaintManager // Whether or not a VolatileImage should be used for double-buffered painting static boolean volatileImageBufferEnabled = true; + /** + * Type of VolatileImage which should be used for double-buffered + * painting. + */ + private static final int volatileBufferType; /** * Value of the system property awt.nativeDoubleBuffering. */ @@ -204,6 +209,13 @@ public class RepaintManager ((SunGraphicsEnvironment)ge).addDisplayChangedListener( new DisplayChangedHandler()); } + Toolkit tk = Toolkit.getDefaultToolkit(); + if ((tk instanceof SunToolkit) + && ((SunToolkit) tk).isSwingBackbufferTranslucencySupported()) { + volatileBufferType = Transparency.TRANSLUCENT; + } else { + volatileBufferType = Transparency.OPAQUE; + } } /** @@ -989,7 +1001,8 @@ public class RepaintManager if (image != null) { image.flush(); } - image = config.createCompatibleVolatileImage(width, height); + image = config.createCompatibleVolatileImage(width, height, + volatileBufferType); volatileMap.put(config, image); } return image; @@ -1483,9 +1496,26 @@ public class RepaintManager for(y=clipY, maxy = clipY + clipH; y < maxy ; y += bh) { osg.translate(-x, -y); osg.setClip(x,y,bw,bh); + if (volatileBufferType != Transparency.OPAQUE + && osg instanceof Graphics2D) { + final Graphics2D g2d = (Graphics2D) osg; + final Color oldBg = g2d.getBackground(); + g2d.setBackground(c.getBackground()); + g2d.clearRect(x, y, bw, bh); + g2d.setBackground(oldBg); + } c.paintToOffscreen(osg, x, y, bw, bh, maxx, maxy); g.setClip(x, y, bw, bh); - g.drawImage(image, x, y, c); + if (volatileBufferType != Transparency.OPAQUE + && g instanceof Graphics2D) { + final Graphics2D g2d = (Graphics2D) g; + final Composite oldComposite = g2d.getComposite(); + g2d.setComposite(AlphaComposite.Src); + g2d.drawImage(image, x, y, c); + g2d.setComposite(oldComposite); + } else { + g.drawImage(image, x, y, c); + } osg.translate(x, y); } } diff --git a/jdk/src/share/classes/javax/swing/SwingUtilities.java b/jdk/src/share/classes/javax/swing/SwingUtilities.java index ecbe32e293f..956bb838be7 100644 --- a/jdk/src/share/classes/javax/swing/SwingUtilities.java +++ b/jdk/src/share/classes/javax/swing/SwingUtilities.java @@ -319,7 +319,8 @@ public class SwingUtilities implements SwingConstants newEvent = new MouseWheelEvent(newSource, sourceWheelEvent.getID(), sourceWheelEvent.getWhen(), - sourceWheelEvent.getModifiers(), + sourceWheelEvent.getModifiers() + | sourceWheelEvent.getModifiersEx(), p.x,p.y, sourceWheelEvent.getXOnScreen(), sourceWheelEvent.getYOnScreen(), @@ -334,7 +335,8 @@ public class SwingUtilities implements SwingConstants newEvent = new MenuDragMouseEvent(newSource, sourceMenuDragEvent.getID(), sourceMenuDragEvent.getWhen(), - sourceMenuDragEvent.getModifiers(), + sourceMenuDragEvent.getModifiers() + | sourceMenuDragEvent.getModifiersEx(), p.x,p.y, sourceMenuDragEvent.getXOnScreen(), sourceMenuDragEvent.getYOnScreen(), @@ -347,7 +349,8 @@ public class SwingUtilities implements SwingConstants newEvent = new MouseEvent(newSource, sourceEvent.getID(), sourceEvent.getWhen(), - sourceEvent.getModifiers(), + sourceEvent.getModifiers() + | sourceEvent.getModifiersEx(), p.x,p.y, sourceEvent.getXOnScreen(), sourceEvent.getYOnScreen(), diff --git a/jdk/src/share/classes/javax/swing/border/TitledBorder.java b/jdk/src/share/classes/javax/swing/border/TitledBorder.java index 6b5fdf543ca..244a45bc8de 100644 --- a/jdk/src/share/classes/javax/swing/border/TitledBorder.java +++ b/jdk/src/share/classes/javax/swing/border/TitledBorder.java @@ -440,7 +440,7 @@ public class TitledBorder extends AbstractBorder * @return the title-font of the titled border */ public Font getTitleFont() { - return titleFont; + return titleFont == null ? UIManager.getFont("TitledBorder.font") : titleFont; } /** @@ -449,7 +449,7 @@ public class TitledBorder extends AbstractBorder * @return the title-color of the titled border */ public Color getTitleColor() { - return titleColor; + return titleColor == null ? UIManager.getColor("TitledBorder.titleColor") : titleColor; } @@ -681,10 +681,6 @@ public class TitledBorder extends AbstractBorder if (font != null) { return font; } - font = UIManager.getFont("TitledBorder.font"); - if (font != null) { - return font; - } if (c != null) { font = c.getFont(); if (font != null) { @@ -699,10 +695,6 @@ public class TitledBorder extends AbstractBorder if (color != null) { return color; } - color = UIManager.getColor("TitledBorder.titleColor"); - if (color != null) { - return color; - } return (c != null) ? c.getForeground() : null; diff --git a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java index 6f309861ba5..a55aa715fe3 100644 --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuUI.java @@ -299,7 +299,8 @@ public class SynthMenuUI extends BasicMenuUI */ @Override public void propertyChange(PropertyChangeEvent e) { - if (SynthLookAndFeel.shouldUpdateStyle(e)) { + if (SynthLookAndFeel.shouldUpdateStyle(e) || + (e.getPropertyName().equals("ancestor") && UIManager.getBoolean("Menu.useMenuBarForTopLevelMenus"))) { updateStyle((JMenu)e.getSource()); } } diff --git a/jdk/src/share/classes/sun/awt/CharsetString.java b/jdk/src/share/classes/sun/awt/CharsetString.java index aba0cbdb611..434ac731377 100644 --- a/jdk/src/share/classes/sun/awt/CharsetString.java +++ b/jdk/src/share/classes/sun/awt/CharsetString.java @@ -24,10 +24,6 @@ */ package sun.awt; -import javax.tools.annotation.GenerateNativeHeader; - -/* No native methods here, but the constants are needed in the supporting JNI code */ -@GenerateNativeHeader public class CharsetString { /** * chars for this string. See also offset, length. diff --git a/jdk/src/share/classes/sun/awt/SunToolkit.java b/jdk/src/share/classes/sun/awt/SunToolkit.java index a1c0d184eb9..68ec628b6ed 100644 --- a/jdk/src/share/classes/sun/awt/SunToolkit.java +++ b/jdk/src/share/classes/sun/awt/SunToolkit.java @@ -1984,6 +1984,13 @@ public abstract class SunToolkit extends Toolkit return false; } + /** + * Returns true if swing backbuffer should be translucent. + */ + public boolean isSwingBackbufferTranslucencySupported() { + return false; + } + /** * Returns whether or not a containing top level window for the passed * component is @@ -2105,25 +2112,41 @@ class PostEventQueue { private EventQueueItem queueTail = null; private final EventQueue eventQueue; + // For the case when queue is cleared but events are not posted + private volatile boolean isFlushing = false; + PostEventQueue(EventQueue eq) { eventQueue = eq; } public synchronized boolean noEvents() { - return queueHead == null; + return queueHead == null && !isFlushing; } /* * Continually post pending AWTEvents to the Java EventQueue. The method * is synchronized to ensure the flush is completed before a new event * can be posted to this queue. + * + * 7177040: The method couldn't be wholly synchronized because of calls + * of EventQueue.postEvent() that uses pushPopLock, otherwise it could + * potentially lead to deadlock */ - public synchronized void flush() { - EventQueueItem tempQueue = queueHead; - queueHead = queueTail = null; - while (tempQueue != null) { - eventQueue.postEvent(tempQueue.event); - tempQueue = tempQueue.next; + public void flush() { + EventQueueItem tempQueue; + synchronized (this) { + tempQueue = queueHead; + queueHead = queueTail = null; + isFlushing = true; + } + try { + while (tempQueue != null) { + eventQueue.postEvent(tempQueue.event); + tempQueue = tempQueue.next; + } + } + finally { + isFlushing = false; } } diff --git a/jdk/src/share/classes/sun/font/SunLayoutEngine.java b/jdk/src/share/classes/sun/font/SunLayoutEngine.java index efeebca9180..eb763cd8d9e 100644 --- a/jdk/src/share/classes/sun/font/SunLayoutEngine.java +++ b/jdk/src/share/classes/sun/font/SunLayoutEngine.java @@ -137,8 +137,9 @@ public final class SunLayoutEngine implements LayoutEngine, LayoutEngineFactory LayoutEngine e = (LayoutEngine)cache.get(key); if (e == null) { - e = new SunLayoutEngine(key.copy()); - cache.put(key, e); + LayoutEngineKey copy = key.copy(); + e = new SunLayoutEngine(copy); + cache.put(copy, e); } return e; } diff --git a/jdk/src/share/classes/sun/java2d/pipe/RegionIterator.java b/jdk/src/share/classes/sun/java2d/pipe/RegionIterator.java index 9fdef6ae7af..b46cb11f3a4 100644 --- a/jdk/src/share/classes/sun/java2d/pipe/RegionIterator.java +++ b/jdk/src/share/classes/sun/java2d/pipe/RegionIterator.java @@ -27,14 +27,10 @@ package sun.java2d.pipe; import java.awt.Rectangle; -import javax.tools.annotation.GenerateNativeHeader; - /** * This class defines the API for iterating through the bands * of a region object. */ -/* No native methods here, but the constants are needed in the supporting JNI code */ -@GenerateNativeHeader public class RegionIterator { Region region; int curIndex; diff --git a/jdk/src/share/classes/sun/nio/cs/SingleByte.java b/jdk/src/share/classes/sun/nio/cs/SingleByte.java index c78b8e2ca63..d6c89e19752 100644 --- a/jdk/src/share/classes/sun/nio/cs/SingleByte.java +++ b/jdk/src/share/classes/sun/nio/cs/SingleByte.java @@ -107,7 +107,7 @@ public class SingleByte return decodeBufferLoop(src, dst); } - private final char decode(int b) { + public final char decode(int b) { return b2c[b + 128]; } @@ -221,7 +221,7 @@ public class SingleByte return encodeBufferLoop(src, dst); } - private final int encode(char ch) { + public final int encode(char ch) { char index = c2bIndex[ch >> 8]; if (index == UNMAPPABLE_ENCODING) return UNMAPPABLE_ENCODING; diff --git a/jdk/src/share/classes/sun/nio/cs/ext/DoubleByte.java b/jdk/src/share/classes/sun/nio/cs/ext/DoubleByte.java index ce66105a4e2..4b9bff254a0 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/DoubleByte.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/DoubleByte.java @@ -33,6 +33,8 @@ import java.nio.charset.CharsetEncoder; import java.nio.charset.CoderResult; import java.util.Arrays; import sun.nio.cs.Surrogate; +import sun.nio.cs.ArrayDecoder; +import sun.nio.cs.ArrayEncoder; import static sun.nio.cs.CharsetMapping.*; /* @@ -107,7 +109,7 @@ public class DoubleByte { } public static class Decoder extends CharsetDecoder - implements DelegatableDecoder + implements DelegatableDecoder, ArrayDecoder { final char[][] b2c; @@ -209,6 +211,29 @@ public class DoubleByte { return decodeBufferLoop(src, dst); } + public int decode(byte[] src, int sp, int len, char[] dst) { + int dp = 0; + int sl = sp + len; + char repl = replacement().charAt(0); + while (sp < sl) { + int b1 = src[sp++] & 0xff; + char c = b2cSB[b1]; + if (c == UNMAPPABLE_DECODING) { + if (sp < sl) { + int b2 = src[sp++] & 0xff; + if (b2 >= b2Min && b2 <= b2Max) { + c = b2c[b1][b2 - b2Min]; + } + } + if (c == UNMAPPABLE_DECODING) { + c = repl; + } + } + dst[dp++] = c; + } + return dp; + } + public void implReset() { super.implReset(); } @@ -224,7 +249,8 @@ public class DoubleByte { } public char decodeDouble(int b1, int b2) { - if (b2 < b2Min || b2 > b2Max) + if (b1 < 0 || b1 > b2c.length || + b2 < b2Min || b2 > b2Max) return UNMAPPABLE_DECODING; return b2c[b1][b2 - b2Min]; } @@ -367,17 +393,57 @@ public class DoubleByte { src.position(mark); } } + + public int decode(byte[] src, int sp, int len, char[] dst) { + int dp = 0; + int sl = sp + len; + currentState = SBCS; + char repl = replacement().charAt(0); + while (sp < sl) { + int b1 = src[sp++] & 0xff; + if (b1 == SO) { // Shift out + if (currentState != SBCS) + dst[dp++] = repl; + else + currentState = DBCS; + } else if (b1 == SI) { + if (currentState != DBCS) + dst[dp++] = repl; + else + currentState = SBCS; + } else { + char c = UNMAPPABLE_DECODING; + if (currentState == SBCS) { + c = b2cSB[b1]; + if (c == UNMAPPABLE_DECODING) + c = repl; + } else { + if (sl == sp) { + c = repl; + } else { + int b2 = src[sp++] & 0xff; + if (b2 < b2Min || b2 > b2Max || + (c = b2c[b1][b2 - b2Min]) == UNMAPPABLE_DECODING) { + c = repl; + } + } + } + dst[dp++] = c; + } + } + return dp; + } } - // EBCDIC_DBCS_ONLY - public static class Decoder_EBCDIC_DBCSONLY extends Decoder { - static final char[] b2cSB; + // DBCS_ONLY + public static class Decoder_DBCSONLY extends Decoder { + static final char[] b2cSB_UNMAPPABLE; static { - b2cSB = new char[0x100]; - Arrays.fill(b2cSB, UNMAPPABLE_DECODING); + b2cSB_UNMAPPABLE = new char[0x100]; + Arrays.fill(b2cSB_UNMAPPABLE, UNMAPPABLE_DECODING); } - Decoder_EBCDIC_DBCSONLY(Charset cs, char[][] b2c, int b2Min, int b2Max) { - super(cs, 0.5f, 1.0f, b2c, b2cSB, b2Min, b2Max); + Decoder_DBCSONLY(Charset cs, char[][] b2c, char[] b2cSB, int b2Min, int b2Max) { + super(cs, 0.5f, 1.0f, b2c, b2cSB_UNMAPPABLE, b2Min, b2Max); } } @@ -405,9 +471,37 @@ public class DoubleByte { return CoderResult.malformedForLength(1); return CoderResult.unmappableForLength(2); } + + public int decode(byte[] src, int sp, int len, char[] dst) { + int dp = 0; + int sl = sp + len; + char repl = replacement().charAt(0); + while (sp < sl) { + int b1 = src[sp++] & 0xff; + char c = b2cSB[b1]; + if (c == UNMAPPABLE_DECODING) { + if (sp < sl) { + int b2 = src[sp++] & 0xff; + if (b2 < b2Min || b2 > b2Max || + (c = b2c[b1][b2 - b2Min]) == UNMAPPABLE_DECODING) { + if (b1 == SS2 || b1 == SS3) { + sp--; + } + c = repl; + } + } else { + c = repl; + } + } + dst[dp++] = c; + } + return dp; + } } - public static class Encoder extends CharsetEncoder { + public static class Encoder extends CharsetEncoder + implements ArrayEncoder + { final int MAX_SINGLEBYTE = 0xff; private final char[] c2b; private final char[] c2bIndex; @@ -516,6 +610,35 @@ public class DoubleByte { return encodeBufferLoop(src, dst); } + public int encode(char[] src, int sp, int len, byte[] dst) { + int dp = 0; + int sl = sp + len; + int dl = dst.length; + while (sp < sl) { + char c = src[sp++]; + int bb = encodeChar(c); + if (bb == UNMAPPABLE_ENCODING) { + if (Character.isHighSurrogate(c) && sp < sl && + Character.isLowSurrogate(src[sp])) { + sp++; + } + byte[] repl = replacement(); + dst[dp++] = repl[0]; + if (repl.length > 1) + dst[dp++] = repl[1]; + continue; + } //else + if (bb > MAX_SINGLEBYTE) { // DoubleByte + dst[dp++] = (byte)(bb >> 8); + dst[dp++] = (byte)bb; + } else { // SingleByte + dst[dp++] = (byte)bb; + } + + } + return dp; + } + public int encodeChar(char ch) { return c2b[c2bIndex[ch >> 8] + (ch & 0xff)]; } @@ -604,10 +727,9 @@ public class DoubleByte { } } - // EBCDIC_DBCS_ONLY - public static class Encoder_EBCDIC_DBCSONLY extends Encoder { - Encoder_EBCDIC_DBCSONLY(Charset cs, byte[] repl, - char[] c2b, char[] c2bIndex) { + public static class Encoder_DBCSONLY extends Encoder { + Encoder_DBCSONLY(Charset cs, byte[] repl, + char[] c2b, char[] c2bIndex) { super(cs, 2.0f, 2.0f, repl, c2b, c2bIndex); } @@ -619,7 +741,8 @@ public class DoubleByte { } } - // for IBM_EBCDIC_DBCS + + public static class Encoder_EBCDIC extends Encoder { static final int SBCS = 0; static final int DBCS = 1; @@ -741,6 +864,47 @@ public class DoubleByte { src.position(mark); } } + + public int encode(char[] src, int sp, int len, byte[] dst) { + int dp = 0; + int sl = sp + len; + while (sp < sl) { + char c = src[sp++]; + int bb = encodeChar(c); + + if (bb == UNMAPPABLE_ENCODING) { + if (Character.isHighSurrogate(c) && sp < sl && + Character.isLowSurrogate(src[sp])) { + sp++; + } + byte[] repl = replacement(); + dst[dp++] = repl[0]; + if (repl.length > 1) + dst[dp++] = repl[1]; + continue; + } //else + if (bb > MAX_SINGLEBYTE) { // DoubleByte + if (currentState == SBCS) { + currentState = DBCS; + dst[dp++] = SO; + } + dst[dp++] = (byte)(bb >> 8); + dst[dp++] = (byte)bb; + } else { // SingleByte + if (currentState == DBCS) { + currentState = SBCS; + dst[dp++] = SI; + } + dst[dp++] = (byte)bb; + } + } + + if (currentState == DBCS) { + currentState = SBCS; + dst[dp++] = SI; + } + return dp; + } } // EUC_SIMPLE @@ -749,4 +913,5 @@ public class DoubleByte { super(cs, c2b, c2bIndex); } } + } diff --git a/jdk/src/share/classes/sun/nio/cs/ext/DoubleByteDecoder.java b/jdk/src/share/classes/sun/nio/cs/ext/DoubleByteDecoder.java deleted file mode 100644 index da244faa78a..00000000000 --- a/jdk/src/share/classes/sun/nio/cs/ext/DoubleByteDecoder.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - */ - -package sun.nio.cs.ext; - -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.CoderResult; - -abstract class DoubleByteDecoder - extends CharsetDecoder -{ - - private short index1[]; - - /* - * 2nd level index, provided by subclass - * every string has 0x10*(end-start+1) characters. - */ - private String index2[]; - - protected int start; - protected int end; - - protected static final char REPLACE_CHAR = '\uFFFD'; - protected char highSurrogate; - protected char lowSurrogate; - - protected DoubleByteDecoder(Charset cs, short[] index1, String[] index2, - int start, int end ) { - super(cs, 0.5f, 1.0f); - this.index1 = index1; - this.index2 = index2; - this.start = start; - this.end = end; - } - - private CoderResult decodeArrayLoop(ByteBuffer src, CharBuffer dst) { - byte[] sa = src.array(); - int sp = src.arrayOffset() + src.position(); - int sl = src.arrayOffset() + src.limit(); - assert (sp <= sl); - sp = (sp <= sl ? sp : sl); - char[] da = dst.array(); - int dp = dst.arrayOffset() + dst.position(); - int dl = dst.arrayOffset() + dst.limit(); - assert (dp <= dl); - dp = (dp <= dl ? dp : dl); - - try { - while (sp < sl) { - int b1, b2; - b1 = sa[sp]; - int inputSize = 1; - int outputSize = 1; - highSurrogate = lowSurrogate = 0; - char c = decodeSingle(b1); - if (c == REPLACE_CHAR) { - b1 &= 0xff; - if (sl - sp < 2) - return CoderResult.UNDERFLOW; - b2 = sa[sp + 1] & 0xff; - c = decodeDouble(b1, b2); - inputSize = 2; - if (c == REPLACE_CHAR) - return CoderResult.unmappableForLength(inputSize); - outputSize = (highSurrogate > 0) ? 2: 1; - } - - if (dl - dp < outputSize) - return CoderResult.OVERFLOW; - if (outputSize == 2) { - da[dp++] = highSurrogate; - da[dp++] = lowSurrogate; - } else { - da[dp++] = c; - } - sp += inputSize; - } - return CoderResult.UNDERFLOW; - } finally { - src.position(sp - src.arrayOffset()); - dst.position(dp - dst.arrayOffset()); - } - } - - private CoderResult decodeBufferLoop(ByteBuffer src, CharBuffer dst) { - int mark = src.position(); - int inputSize = 0; - int outputSize = 0; - try { - while (src.hasRemaining()) { - int b1 = src.get(); - inputSize = 1; - outputSize = 1; - highSurrogate = lowSurrogate = 0; - - char c = decodeSingle(b1); - - if (c == REPLACE_CHAR) { - if (src.remaining() < 1) - return CoderResult.UNDERFLOW; - b1 &= 0xff; - int b2 = src.get() & 0xff; - inputSize = 2; - - c = decodeDouble(b1, b2); - - if (c == REPLACE_CHAR) - return CoderResult.unmappableForLength(2); - - outputSize = (highSurrogate > 0) ? 2: 1; - } - if (dst.remaining() < outputSize) - return CoderResult.OVERFLOW; - mark += inputSize; - - if (outputSize == 2) { - dst.put(highSurrogate); - dst.put(lowSurrogate); - } else { - dst.put(c); - } - } - return CoderResult.UNDERFLOW; - } finally { - src.position(mark); - } - } - - protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) { - if (src.hasArray() && dst.hasArray()) - return decodeArrayLoop(src, dst); - else - return decodeBufferLoop(src, dst); - } - - /* - * Can be changed by subclass - */ - protected char decodeSingle(int b) { - if (b >= 0) - return (char) b; - return REPLACE_CHAR; - } - - protected char decodeDouble(int byte1, int byte2) { - if (((byte1 < 0) || (byte1 > index1.length)) - || ((byte2 < start) || (byte2 > end))) - return REPLACE_CHAR; - - int n = (index1[byte1] & 0xf) * (end - start + 1) + (byte2 - start); - return index2[index1[byte1] >> 4].charAt(n); - } -} diff --git a/jdk/src/share/classes/sun/nio/cs/ext/EUC_JP.java b/jdk/src/share/classes/sun/nio/cs/ext/EUC_JP.java index 53c868c64cc..b6ede2363d9 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/EUC_JP.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/EUC_JP.java @@ -23,9 +23,6 @@ * questions. */ -/* - */ - package sun.nio.cs.ext; import java.nio.ByteBuffer; @@ -36,6 +33,8 @@ import java.nio.charset.CharsetEncoder; import java.nio.charset.CoderResult; import sun.nio.cs.HistoricallyNamedCharset; import sun.nio.cs.Surrogate; +import sun.nio.cs.SingleByte; +import static sun.nio.cs.CharsetMapping.*; public class EUC_JP extends Charset @@ -62,52 +61,47 @@ public class EUC_JP } public CharsetEncoder newEncoder() { - - // Need to force the replacement byte to 0x3f - // because JIS_X_0208_Encoder defines its own - // alternative 2 byte substitution to permit it - // to exist as a self-standing Encoder - - byte[] replacementBytes = { (byte)0x3f }; - return new Encoder(this).replaceWith(replacementBytes); + return new Encoder(this); } - - static class Decoder extends JIS_X_0208_Decoder + static class Decoder extends CharsetDecoder implements DelegatableDecoder { - JIS_X_0201.Decoder decoderJ0201; - JIS_X_0212_Decoder decoderJ0212; + final static SingleByte.Decoder DEC0201 = + (SingleByte.Decoder)new JIS_X_0201().newDecoder(); - private static final short[] j0208Index1 = - JIS_X_0208_Decoder.getIndex1(); - private static final String[] j0208Index2 = - JIS_X_0208_Decoder.getIndex2(); + final static DoubleByte.Decoder DEC0208 = + (DoubleByte.Decoder)new JIS_X_0208().newDecoder(); + + final static DoubleByte.Decoder DEC0212 = + (DoubleByte.Decoder)new JIS_X_0212().newDecoder(); + + private final SingleByte.Decoder dec0201; + private final DoubleByte.Decoder dec0208; + private final DoubleByte.Decoder dec0212; protected Decoder(Charset cs) { - super(cs); - decoderJ0201 = new JIS_X_0201.Decoder(cs); - decoderJ0212 = new JIS_X_0212_Decoder(cs); - start = 0xa1; - end = 0xfe; + this(cs, 0.5f, 1.0f, DEC0201, DEC0208, DEC0212); } - protected char decode0212(int byte1, int byte2) { - return decoderJ0212.decodeDouble(byte1, byte2); + + protected Decoder(Charset cs, float avgCpb, float maxCpb, + SingleByte.Decoder dec0201, + DoubleByte.Decoder dec0208, + DoubleByte.Decoder dec0212) { + super(cs, avgCpb, maxCpb); + this.dec0201 = dec0201; + this.dec0208 = dec0208; + this.dec0212 = dec0212; } + protected char decodeDouble(int byte1, int byte2) { if (byte1 == 0x8e) { - return decoderJ0201.decode(byte2 - 256); + if (byte2 < 0x80) + return UNMAPPABLE_DECODING; + return dec0201.decode((byte)byte2); } - // Fix for bug 4121358 - similar fix for bug 4117820 put - // into ByteToCharDoubleByte.getUnicode() - if (((byte1 < 0) || (byte1 > getIndex1().length)) - || ((byte2 < start) || (byte2 > end))) - return REPLACE_CHAR; - - int n = (j0208Index1[byte1 - 0x80] & 0xf) * (end - start + 1) - + (byte2 - start); - return j0208Index2[j0208Index1[byte1 - 0x80] >> 4].charAt(n); + return dec0208.decodeDouble(byte1 - 0x80, byte2 - 0x80); } private CoderResult decodeArrayLoop(ByteBuffer src, @@ -127,8 +121,7 @@ public class EUC_JP int b1 = 0, b2 = 0; int inputSize = 0; - char outputChar = REPLACE_CHAR; // U+FFFD; - + char outputChar = UNMAPPABLE_DECODING; try { while (sp < sl) { b1 = sa[sp] & 0xff; @@ -136,17 +129,17 @@ public class EUC_JP if ((b1 & 0x80) == 0) { outputChar = (char)b1; - } - else { // Multibyte char - if ((b1 & 0xff) == 0x8f) { // JIS0212 + } else { // Multibyte char + if (b1 == 0x8f) { // JIS0212 if (sp + 3 > sl) return CoderResult.UNDERFLOW; b1 = sa[sp + 1] & 0xff; b2 = sa[sp + 2] & 0xff; inputSize += 2; - outputChar = decode0212(b1-0x80, b2-0x80); - } else { - // JIS0208 + if (dec0212 == null) // JIS02012 not supported + return CoderResult.unmappableForLength(inputSize); + outputChar = dec0212.decodeDouble(b1-0x80, b2-0x80); + } else { // JIS0201, JIS0208 if (sp + 2 > sl) return CoderResult.UNDERFLOW; b2 = sa[sp + 1] & 0xff; @@ -154,7 +147,7 @@ public class EUC_JP outputChar = decodeDouble(b1, b2); } } - if (outputChar == REPLACE_CHAR) { // can't be decoded + if (outputChar == UNMAPPABLE_DECODING) { // can't be decoded return CoderResult.unmappableForLength(inputSize); } if (dp + 1 > dl) @@ -175,26 +168,25 @@ public class EUC_JP int mark = src.position(); int b1 = 0, b2 = 0; int inputSize = 0; - - char outputChar = REPLACE_CHAR; // U+FFFD; + char outputChar = UNMAPPABLE_DECODING; try { while (src.hasRemaining()) { b1 = src.get() & 0xff; inputSize = 1; - if ((b1 & 0x80) == 0) { outputChar = (char)b1; - } else { // Multibyte char - if ((b1 & 0xff) == 0x8f) { // JIS0212 + } else { // Multibyte char + if (b1 == 0x8f) { // JIS0212 if (src.remaining() < 2) return CoderResult.UNDERFLOW; b1 = src.get() & 0xff; b2 = src.get() & 0xff; inputSize += 2; - outputChar = decode0212(b1-0x80, b2-0x80); - } else { - // JIS0208 + if (dec0212 == null) // JIS02012 not supported + return CoderResult.unmappableForLength(inputSize); + outputChar = dec0212.decodeDouble(b1-0x80, b2-0x80); + } else { // JIS0201 JIS0208 if (src.remaining() < 1) return CoderResult.UNDERFLOW; b2 = src.get() & 0xff; @@ -202,8 +194,7 @@ public class EUC_JP outputChar = decodeDouble(b1, b2); } } - - if (outputChar == REPLACE_CHAR) { + if (outputChar == UNMAPPABLE_DECODING) { return CoderResult.unmappableForLength(inputSize); } if (dst.remaining() < 1) @@ -233,65 +224,67 @@ public class EUC_JP } - static class Encoder extends JIS_X_0208_Encoder { + static class Encoder extends CharsetEncoder { - JIS_X_0201.Encoder encoderJ0201; - JIS_X_0212_Encoder encoderJ0212; + final static SingleByte.Encoder ENC0201 = + (SingleByte.Encoder)new JIS_X_0201().newEncoder(); - private static final short[] j0208Index1 = - JIS_X_0208_Encoder.getIndex1(); - private static final String[] j0208Index2 = - JIS_X_0208_Encoder.getIndex2(); + final static DoubleByte.Encoder ENC0208 = + (DoubleByte.Encoder)new JIS_X_0208().newEncoder(); + + final static DoubleByte.Encoder ENC0212 = + (DoubleByte.Encoder)new JIS_X_0212().newEncoder(); private final Surrogate.Parser sgp = new Surrogate.Parser(); + + private final SingleByte.Encoder enc0201; + private final DoubleByte.Encoder enc0208; + private final DoubleByte.Encoder enc0212; + protected Encoder(Charset cs) { - super(cs, 3.0f, 3.0f); - encoderJ0201 = new JIS_X_0201.Encoder(cs); - encoderJ0212 = new JIS_X_0212_Encoder(cs); + this(cs, 3.0f, 3.0f, ENC0201, ENC0208, ENC0212); + } + + protected Encoder(Charset cs, float avgBpc, float maxBpc, + SingleByte.Encoder enc0201, + DoubleByte.Encoder enc0208, + DoubleByte.Encoder enc0212) { + super(cs, avgBpc, maxBpc); + this.enc0201 = enc0201; + this.enc0208 = enc0208; + this.enc0212 = enc0212; } public boolean canEncode(char c) { byte[] encodedBytes = new byte[3]; - - if (encodeSingle(c, encodedBytes) == 0) { //doublebyte - if (encodeDouble(c) == 0) - return false; - } - return true; + return encodeSingle(c, encodedBytes) != 0 || + encodeDouble(c) != UNMAPPABLE_ENCODING; } protected int encodeSingle(char inputChar, byte[] outputByte) { - byte b; - - if (inputChar == 0) { - outputByte[0] = (byte)0; - return 1; - } - - if ((b = encoderJ0201.encode(inputChar)) == 0) + int b = enc0201.encode(inputChar); + if (b == UNMAPPABLE_ENCODING) return 0; - - if (b > 0 && b < 128) { - outputByte[0] = b; + if (b >= 0 && b < 128) { + outputByte[0] = (byte)b; return 1; } - outputByte[0] = (byte)0x8e; - outputByte[1] = b; + outputByte[1] = (byte)b; return 2; } protected int encodeDouble(char ch) { - int offset = j0208Index1[((ch & 0xff00) >> 8 )] << 8; - int r = j0208Index2[offset >> 12].charAt((offset & 0xfff) + - (ch & 0xff)); - if (r != 0) - return r + 0x8080; - r = encoderJ0212.encodeDouble(ch); - if (r == 0) - return r; - return r + 0x8F8080; + int b = enc0208.encodeChar(ch); + if (b != UNMAPPABLE_ENCODING) + return b + 0x8080; + if (enc0212 != null) { + b = enc0212.encodeChar(ch); + if (b != UNMAPPABLE_ENCODING) + b += 0x8F8080; + } + return b; } private CoderResult encodeArrayLoop(CharBuffer src, @@ -317,18 +310,15 @@ public class EUC_JP while (sp < sl) { outputByte = tmpBuf; char c = sa[sp]; - if (Character.isSurrogate(c)) { if (sgp.parse(c, sa, sp, sl) < 0) return sgp.error(); return sgp.unmappableResult(); } - outputSize = encodeSingle(c, outputByte); - if (outputSize == 0) { // DoubleByte int ncode = encodeDouble(c); - if (ncode != 0 ) { + if (ncode != UNMAPPABLE_ENCODING) { if ((ncode & 0xFF0000) == 0) { outputByte[0] = (byte) ((ncode & 0xff00) >> 8); outputByte[1] = (byte) (ncode & 0xff); @@ -340,7 +330,7 @@ public class EUC_JP outputSize = 3; } } else { - return CoderResult.unmappableForLength(1); + return CoderResult.unmappableForLength(1); } } if (dl - dp < outputSize) @@ -377,11 +367,10 @@ public class EUC_JP return sgp.error(); return sgp.unmappableResult(); } - outputSize = encodeSingle(c, outputByte); if (outputSize == 0) { // DoubleByte int ncode = encodeDouble(c); - if (ncode != 0 ) { + if (ncode != UNMAPPABLE_ENCODING) { if ((ncode & 0xFF0000) == 0) { outputByte[0] = (byte) ((ncode & 0xff00) >> 8); outputByte[1] = (byte) (ncode & 0xff); @@ -393,10 +382,9 @@ public class EUC_JP outputSize = 3; } } else { - return CoderResult.unmappableForLength(1); + return CoderResult.unmappableForLength(1); } } - if (dst.remaining() < outputSize) return CoderResult.OVERFLOW; // Put the byte in the output buffer diff --git a/jdk/src/share/classes/sun/nio/cs/ext/EUC_JP_LINUX.java b/jdk/src/share/classes/sun/nio/cs/ext/EUC_JP_LINUX.java index dccb0f8bf9c..9e4921bfd49 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/EUC_JP_LINUX.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/EUC_JP_LINUX.java @@ -23,9 +23,6 @@ * questions. */ -/* - */ - package sun.nio.cs.ext; import java.nio.ByteBuffer; @@ -35,7 +32,6 @@ import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; import java.nio.charset.CoderResult; import sun.nio.cs.HistoricallyNamedCharset; -import sun.nio.cs.Surrogate; public class EUC_JP_LINUX extends Charset @@ -63,308 +59,15 @@ public class EUC_JP_LINUX return new Encoder(this); } - private static class Decoder extends CharsetDecoder { - JIS_X_0201.Decoder decoderJ0201; - protected final char REPLACE_CHAR='\uFFFD'; - - private static final int start = 0xa1; - private static final int end = 0xfe; - private static final short[] jis0208Index1 = - JIS_X_0208_Decoder.getIndex1(); - private static final String[] jis0208Index2 = - JIS_X_0208_Decoder.getIndex2(); - + private static class Decoder extends EUC_JP.Decoder { private Decoder(Charset cs) { - super(cs, 1.0f, 1.0f); - decoderJ0201 = new JIS_X_0201.Decoder(cs); - } - - protected char convSingleByte(int b) { - if (b < 0 || b > 0x7f) - return REPLACE_CHAR; - return decoderJ0201.decode(b); - } - - protected char decodeDouble(int byte1, int byte2) { - if (byte1 == 0x8e) { - return decoderJ0201.decode(byte2 - 256); - } - - if (((byte1 < 0) || (byte1 > jis0208Index1.length)) - || ((byte2 < start) || (byte2 > end))) - return REPLACE_CHAR; - - int n = (jis0208Index1[byte1 - 0x80] & 0xf) * (end - start + 1) - + (byte2 - start); - return jis0208Index2[jis0208Index1[byte1 - 0x80] >> 4].charAt(n); - } - - private CoderResult decodeArrayLoop(ByteBuffer src, - CharBuffer dst) - { - byte[] sa = src.array(); - int sp = src.arrayOffset() + src.position(); - int sl = src.arrayOffset() + src.limit(); - assert (sp <= sl); - sp = (sp <= sl ? sp : sl); - - char[] da = dst.array(); - int dp = dst.arrayOffset() + dst.position(); - int dl = dst.arrayOffset() + dst.limit(); - assert (dp <= dl); - dp = (dp <= dl ? dp : dl); - - int b1 = 0, b2 = 0; - int inputSize = 0; - char outputChar = REPLACE_CHAR; // U+FFFD; - - try { - while (sp < sl) { - b1 = sa[sp] & 0xff; - inputSize = 1; - if ((b1 & 0x80) == 0) { - outputChar = (char)b1; - } - else { // Multibyte char - if ((b1 & 0xff) == 0x8f) { // JIS0212 - if (sp + 3 > sl) - return CoderResult.UNDERFLOW; - inputSize = 3; - return CoderResult.unmappableForLength(inputSize); // substitute - } else { - // JIS0208 - if (sp + 2 > sl) - return CoderResult.UNDERFLOW; - b2 = sa[sp + 1] & 0xff; - inputSize = 2; - outputChar = decodeDouble(b1, b2); - } - } - if (outputChar == REPLACE_CHAR) { // can't be decoded - return CoderResult.unmappableForLength(inputSize); - } - if (dp + 1 > dl) - return CoderResult.OVERFLOW; - da[dp++] = outputChar; - sp += inputSize; - } - return CoderResult.UNDERFLOW; - } finally { - src.position(sp - src.arrayOffset()); - dst.position(dp - dst.arrayOffset()); - } - } - - private CoderResult decodeBufferLoop(ByteBuffer src, - CharBuffer dst) - { - int mark = src.position(); - char outputChar = REPLACE_CHAR; // U+FFFD; - - try { - while (src.hasRemaining()) { - int b1 = src.get() & 0xff; - int inputSize = 1; - - if ((b1 & 0x80) == 0) { - outputChar = (char)b1; - } else { // Multibyte char - - if ((b1 & 0xff) == 0x8f) { // JIS0212 not supported - if (src.remaining() < 2) - return CoderResult.UNDERFLOW; - return CoderResult.unmappableForLength(3); - } else { - // JIS0208 - if (src.remaining() < 1) - return CoderResult.UNDERFLOW; - int b2 = src.get() & 0xff; - inputSize++; - outputChar = decodeDouble(b1, b2); - } - } - - if (outputChar == REPLACE_CHAR) - return CoderResult.unmappableForLength(inputSize); - if (dst.remaining() < 1) - return CoderResult.OVERFLOW; - dst.put(outputChar); - mark += inputSize; - } - return CoderResult.UNDERFLOW; - } finally { - src.position(mark); - } - } - - protected CoderResult decodeLoop(ByteBuffer src, - CharBuffer dst) - { - if (src.hasArray() && dst.hasArray()) - return decodeArrayLoop(src, dst); - else - return decodeBufferLoop(src, dst); + super(cs, 1.0f, 1.0f, DEC0201, DEC0208, null); } } - - private static class Encoder extends CharsetEncoder { - - JIS_X_0201.Encoder encoderJ0201; - - private final Surrogate.Parser sgp = new Surrogate.Parser(); - private static final short[] jis0208Index1 = - JIS_X_0208_Encoder.getIndex1(); - private static final String[] jis0208Index2 = - JIS_X_0208_Encoder.getIndex2(); - + private static class Encoder extends EUC_JP.Encoder { private Encoder(Charset cs) { - super(cs, 2.0f, 2.0f); - encoderJ0201 = new JIS_X_0201.Encoder(cs); - } - - public boolean canEncode(char c) { - byte[] encodedBytes = new byte[2]; - - if (encodeSingle(c, encodedBytes) == 0) { //doublebyte - if (encodeDouble(c) == 0) - return false; - } - return true; - } - - protected int encodeSingle(char inputChar, byte[] outputByte) { - byte b; - - if (inputChar == 0) { - outputByte[0] = (byte)0; - return 1; - } - - if ((b = encoderJ0201.encode(inputChar)) == 0) - return 0; - - if (b > 0 && b < 128) { - outputByte[0] = b; - return 1; - } - outputByte[0] = (byte)0x8e; - outputByte[1] = b; - return 2; - } - - protected int encodeDouble(char ch) { - int offset = jis0208Index1[((ch & 0xff00) >> 8 )] << 8; - int r = jis0208Index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff)); - if (r != 0) - return r + 0x8080; - return r; - } - - private CoderResult encodeArrayLoop(CharBuffer src, - ByteBuffer dst) - { - char[] sa = src.array(); - int sp = src.arrayOffset() + src.position(); - int sl = src.arrayOffset() + src.limit(); - assert (sp <= sl); - sp = (sp <= sl ? sp : sl); - byte[] da = dst.array(); - int dp = dst.arrayOffset() + dst.position(); - int dl = dst.arrayOffset() + dst.limit(); - assert (dp <= dl); - dp = (dp <= dl ? dp : dl); - - final byte[] outputByte = new byte[2]; - - try { - while (sp < sl) { - char c = sa[sp]; - - if (Character.isSurrogate(c)) { - if (sgp.parse(c, sa, sp, sl) < 0) - return sgp.error(); - return sgp.unmappableResult(); - } - - int outputSize = encodeSingle(c, outputByte); - if (outputSize == 0) { // DoubleByte - int ncode = encodeDouble(c); - if (ncode != 0 && ((ncode & 0xFF0000) == 0)) { - outputByte[0] = (byte) ((ncode & 0xff00) >> 8); - outputByte[1] = (byte) (ncode & 0xff); - outputSize = 2; - } else { - return CoderResult.unmappableForLength(1); - } - } - - if (dl - dp < outputSize) - return CoderResult.OVERFLOW; - // Put the byte in the output buffer - for (int i = 0; i < outputSize; i++) { - da[dp++] = outputByte[i]; - } - sp++; - } - return CoderResult.UNDERFLOW; - } finally { - src.position(sp - src.arrayOffset()); - dst.position(dp - dst.arrayOffset()); - } - } - - private CoderResult encodeBufferLoop(CharBuffer src, - ByteBuffer dst) - { - final byte[] outputByte = new byte[4]; - int mark = src.position(); - - try { - while (src.hasRemaining()) { - char c = src.get(); - if (Character.isSurrogate(c)) { - if (sgp.parse(c, src) < 0) - return sgp.error(); - return sgp.unmappableResult(); - } - - int outputSize = encodeSingle(c, outputByte); - if (outputSize == 0) { // DoubleByte - int ncode = encodeDouble(c); - if (ncode != 0 ) { - if ((ncode & 0xFF0000) == 0) { - outputByte[0] = (byte) ((ncode & 0xff00) >> 8); - outputByte[1] = (byte) (ncode & 0xff); - outputSize = 2; - } - } else { - return CoderResult.unmappableForLength(1); - } - } - - if (dst.remaining() < outputSize) - return CoderResult.OVERFLOW; - - // Put the byte in the output buffer - for (int i = 0; i < outputSize; i++) { - dst.put(outputByte[i]); - } - mark++; - } - return CoderResult.UNDERFLOW; - } finally { - src.position(mark); - } - } - - protected CoderResult encodeLoop(CharBuffer src, - ByteBuffer dst) - { - if (src.hasArray() && dst.hasArray()) - return encodeArrayLoop(src, dst); - else - return encodeBufferLoop(src, dst); + super(cs, 2.0f, 2.0f, ENC0201, ENC0208, null); } } } diff --git a/jdk/src/share/classes/sun/nio/cs/ext/EUC_JP_Open.java b/jdk/src/share/classes/sun/nio/cs/ext/EUC_JP_Open.java index d6ad2fa0e83..d9ad659281e 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/EUC_JP_Open.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/EUC_JP_Open.java @@ -23,9 +23,6 @@ * questions. */ -/* - */ - package sun.nio.cs.ext; import java.nio.ByteBuffer; @@ -35,7 +32,7 @@ import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; import java.nio.charset.CoderResult; import sun.nio.cs.HistoricallyNamedCharset; -import sun.nio.cs.Surrogate; +import static sun.nio.cs.CharsetMapping.*; public class EUC_JP_Open extends Charset @@ -60,118 +57,55 @@ public class EUC_JP_Open } public CharsetEncoder newEncoder() { - - // Need to force the replacement byte to 0x3f - // because JIS_X_0208_Encoder defines its own - // alternative 2 byte substitution to permit it - // to exist as a self-standing Encoder - - byte[] replacementBytes = { (byte)0x3f }; - return new Encoder(this).replaceWith(replacementBytes); + return new Encoder(this); } private static class Decoder extends EUC_JP.Decoder { - JIS_X_0201.Decoder decoderJ0201; - JIS_X_0212_Solaris_Decoder decodeMappingJ0212; - JIS_X_0208_Solaris_Decoder decodeMappingJ0208; - - private static final short[] j0208Index1 = - JIS_X_0208_Solaris_Decoder.getIndex1(); - private static final String[] j0208Index2 = - JIS_X_0208_Solaris_Decoder.getIndex2(); - private static final int start = 0xa1; - private static final int end = 0xfe; - - protected final char REPLACE_CHAR='\uFFFD'; + private static DoubleByte.Decoder DEC0208_Solaris = + (DoubleByte.Decoder)new JIS_X_0208_Solaris().newDecoder(); + private static DoubleByte.Decoder DEC0212_Solaris = + (DoubleByte.Decoder)new JIS_X_0212_Solaris().newDecoder(); private Decoder(Charset cs) { - super(cs); - decoderJ0201 = new JIS_X_0201.Decoder(cs); - decodeMappingJ0212 = new JIS_X_0212_Solaris_Decoder(cs); - } - - - protected char decode0212(int byte1, int byte2) { - return decodeMappingJ0212.decodeDouble(byte1, byte2); - + // JIS_X_0208_Solaris only has the "extra" mappings, it + // does not have the JIS_X_0208 entries + super(cs, 0.5f, 1.0f, DEC0201, DEC0208, DEC0212_Solaris); } protected char decodeDouble(int byte1, int byte2) { - if (byte1 == 0x8e) { - return decoderJ0201.decode(byte2 - 256); - } - - if (((byte1 < 0) - || (byte1 > j0208Index1.length)) - || ((byte2 < start) - || (byte2 > end))) - return REPLACE_CHAR; - - char result = super.decodeDouble(byte1, byte2); - if (result != '\uFFFD') { - return result; - } else { - int n = (j0208Index1[byte1 - 0x80] & 0xf) * - (end - start + 1) - + (byte2 - start); - return j0208Index2[j0208Index1[byte1 - 0x80] >> 4].charAt(n); - } + char c = super.decodeDouble(byte1, byte2); + if (c == UNMAPPABLE_DECODING) + return DEC0208_Solaris.decodeDouble(byte1 - 0x80, byte2 - 0x80); + return c; } } - private static class Encoder extends EUC_JP.Encoder { + private static DoubleByte.Encoder ENC0208_Solaris = + (DoubleByte.Encoder)new JIS_X_0208_Solaris().newEncoder(); - JIS_X_0201.Encoder encoderJ0201; - JIS_X_0212_Solaris_Encoder encoderJ0212; - - private static final short[] j0208Index1 = - JIS_X_0208_Solaris_Encoder.getIndex1(); - private static final String[] j0208Index2 = - JIS_X_0208_Solaris_Encoder.getIndex2(); - - private final Surrogate.Parser sgp = new Surrogate.Parser(); + private static DoubleByte.Encoder ENC0212_Solaris = + (DoubleByte.Encoder)new JIS_X_0212_Solaris().newEncoder(); private Encoder(Charset cs) { + // The EUC_JP_Open has some interesting tweak for the + // encoding, so can't just pass the euc0208_solaris to + // the euc_jp. Have to override the encodeDouble() as + // showed below (mapping testing catches this). + // super(cs, 3.0f, 3.0f, ENC0201, ENC0208_Solaris, ENC0212_Solaris); super(cs); - encoderJ0201 = new JIS_X_0201.Encoder(cs); - encoderJ0212 = new JIS_X_0212_Solaris_Encoder(cs); - } - - protected int encodeSingle(char inputChar, byte[] outputByte) { - byte b; - - if (inputChar == 0) { - outputByte[0] = (byte)0; - return 1; - } - - if ((b = encoderJ0201.encode(inputChar)) == 0) - return 0; - - if (b > 0 && b < 128) { - outputByte[0] = b; - return 1; - } - - outputByte[0] = (byte)0x8e; - outputByte[1] = b; - return 2; } protected int encodeDouble(char ch) { - int r = super.encodeDouble(ch); - if (r != 0) { - return r; + int b = super.encodeDouble(ch); + if (b != UNMAPPABLE_ENCODING) + return b; + b = ENC0208_Solaris.encodeChar(ch); + if (b != UNMAPPABLE_ENCODING && b > 0x7500) { + return 0x8F8080 + ENC0212_Solaris.encodeChar(ch); } - else { - int offset = j0208Index1[((ch & 0xff00) >> 8 )] << 8; - r = j0208Index2[offset >> 12].charAt((offset & 0xfff) + - (ch & 0xFF)); - if (r > 0x7500) - return 0x8F8080 + encoderJ0212.encodeDouble(ch); - } - return (r==0 ? 0: r + 0x8080); + return b == UNMAPPABLE_ENCODING ? b : b + 0x8080; + } } } diff --git a/jdk/src/share/classes/sun/nio/cs/ext/HKSCS.java b/jdk/src/share/classes/sun/nio/cs/ext/HKSCS.java index 69002ee2b82..4fef90a66fb 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/HKSCS.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/HKSCS.java @@ -175,6 +175,40 @@ public class HKSCS { } } + public int decode(byte[] src, int sp, int len, char[] dst) { + int dp = 0; + int sl = sp + len; + char repl = replacement().charAt(0); + while (sp < sl) { + int b1 = src[sp++] & 0xff; + char c = decodeSingle(b1); + if (c == UNMAPPABLE_DECODING) { + if (sl == sp) { + c = repl; + } else { + int b2 = src[sp++] & 0xff; + if (b2 < b2Min || b2 > b2Max) { + c = repl; + } else if ((c = decodeDouble(b1, b2)) == UNMAPPABLE_DECODING) { + c = decodeDoubleEx(b1, b2); //supp + if (c == UNMAPPABLE_DECODING) { + c = decodeBig5(b1, b2); //big5 + if (c == UNMAPPABLE_DECODING) + c = repl; + } else { + // supplementary character in u+2xxxx area + dst[dp++] = Surrogate.high(0x20000 + c); + dst[dp++] = Surrogate.low(0x20000 + c); + continue; + } + } + } + } + dst[dp++] = c; + } + return dp; + } + public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) { if (src.hasArray() && dst.hasArray()) return decodeArrayLoop(src, dst); @@ -322,6 +356,36 @@ public class HKSCS { return encodeBufferLoop(src, dst); } + public int encode(char[] src, int sp, int len, byte[] dst) { + int dp = 0; + int sl = sp + len; + while (sp < sl) { + char c = src[sp++]; + int bb = encodeChar(c); + if (bb == UNMAPPABLE_ENCODING) { + if (!Character.isHighSurrogate(c) || sp == sl || + !Character.isLowSurrogate(src[sp]) || + (bb = encodeSupp(Character.toCodePoint(c, src[sp++]))) + == UNMAPPABLE_ENCODING) { + byte[] repl = replacement(); + dst[dp++] = repl[0]; + if (repl.length > 1) + dst[dp++] = repl[1]; + continue; + } + sp++; + } + if (bb > MAX_SINGLEBYTE) { // DoubleByte + dst[dp++] = (byte)(bb >> 8); + dst[dp++] = (byte)bb; + } else { // SingleByte + dst[dp++] = (byte)bb; + } + } + return dp; + } + + static char[] C2B_UNMAPPABLE = new char[0x100]; static { Arrays.fill(C2B_UNMAPPABLE, (char)UNMAPPABLE_ENCODING); diff --git a/jdk/src/share/classes/sun/nio/cs/ext/IBM834.java b/jdk/src/share/classes/sun/nio/cs/ext/IBM834.java index 523411ea707..48945dc4555 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/IBM834.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/IBM834.java @@ -49,8 +49,8 @@ public class IBM834 extends Charset public CharsetDecoder newDecoder() { IBM933.initb2c(); - return new DoubleByte.Decoder_EBCDIC_DBCSONLY( - this, IBM933.b2c, 0x40, 0xfe); // hardcode the b2min/max + return new DoubleByte.Decoder_DBCSONLY( + this, IBM933.b2c, null, 0x40, 0xfe); // hardcode the b2min/max } public CharsetEncoder newEncoder() { @@ -58,7 +58,7 @@ public class IBM834 extends Charset return new Encoder(this); } - protected static class Encoder extends DoubleByte.Encoder_EBCDIC_DBCSONLY { + protected static class Encoder extends DoubleByte.Encoder_DBCSONLY { public Encoder(Charset cs) { super(cs, new byte[] {(byte)0xfe, (byte)0xfe}, IBM933.c2b, IBM933.c2bIndex); diff --git a/jdk/src/share/classes/sun/nio/cs/ext/ISO2022_JP.java b/jdk/src/share/classes/sun/nio/cs/ext/ISO2022_JP.java index 2acc80968c4..4df06b7424b 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/ISO2022_JP.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/ISO2022_JP.java @@ -35,6 +35,7 @@ import java.nio.charset.CodingErrorAction; import sun.nio.cs.HistoricallyNamedCharset; import sun.nio.cs.Surrogate; import sun.nio.cs.US_ASCII; +import static sun.nio.cs.CharsetMapping.*; /* * Implementation notes: @@ -154,71 +155,41 @@ public class ISO2022_JP } public CharsetDecoder newDecoder() { - return new Decoder(this, - getDecIndex1(), - getDecIndex2(), - get0212Decoder()); + return new Decoder(this); } public CharsetEncoder newEncoder() { - return new Encoder(this, - getEncIndex1(), - getEncIndex2(), - get0212Encoder(), - doSBKANA()); - } - - protected short[] getDecIndex1() { - return JIS_X_0208_Decoder.getIndex1(); - } - - protected String[] getDecIndex2() { - return JIS_X_0208_Decoder.getIndex2(); - } - - protected DoubleByteDecoder get0212Decoder() { - return null; - } - - protected short[] getEncIndex1() { - return JIS_X_0208_Encoder.getIndex1(); - } - - protected String[] getEncIndex2() { - return JIS_X_0208_Encoder.getIndex2(); - } - - protected DoubleByteEncoder get0212Encoder() { - return null; + return new Encoder(this); } protected boolean doSBKANA() { return true; } - private static class Decoder extends DoubleByteDecoder + static class Decoder extends CharsetDecoder implements DelegatableDecoder { + final static DoubleByte.Decoder DEC0208 = + (DoubleByte.Decoder)new JIS_X_0208().newDecoder(); + private int currentState; private int previousState; - private DoubleByteDecoder decoder0212; - protected Decoder(Charset cs, - short[] index1, - String[] index2, - DoubleByteDecoder decoder0212) { - super(cs, - index1, - index2, - 0x21, - 0x7e); - this.decoder0212 = decoder0212; - currentState = ASCII; - previousState = ASCII; + private DoubleByte.Decoder dec0208; + private DoubleByte.Decoder dec0212; + + private Decoder(Charset cs) { + this(cs, DEC0208, null); } - protected char convSingleByte(int b) { - return REPLACE_CHAR; + protected Decoder(Charset cs, + DoubleByte.Decoder dec0208, + DoubleByte.Decoder dec0212) { + super(cs, 0.5f, 1.0f); + this.dec0208 = dec0208; + this.dec0212 = dec0212; + currentState = ASCII; + previousState = ASCII; } public void implReset() { @@ -231,7 +202,7 @@ public class ISO2022_JP { int inputSize = 0; int b1 = 0, b2 = 0, b3 = 0, b4 = 0; - char c = REPLACE_CHAR; + char c = UNMAPPABLE_DECODING; byte[] sa = src.array(); int sp = src.arrayOffset() + src.position(); int sl = src.arrayOffset() + src.limit(); @@ -273,7 +244,7 @@ public class ISO2022_JP currentState = JISX0208_1978; } else if (b3 == 'B'){ currentState = JISX0208_1983; - } else if (b3 == '(' && decoder0212 != null) { + } else if (b3 == '(' && dec0212 != null) { if (sp + inputSize + 1 > sl) return CoderResult.UNDERFLOW; b4 = sa[sp + inputSize++] & 0xff; @@ -322,8 +293,8 @@ public class ISO2022_JP if (sp + inputSize + 1 > sl) return CoderResult.UNDERFLOW; b2 = sa[sp + inputSize++] & 0xff; - c = decodeDouble(b1,b2); - if (c == REPLACE_CHAR) + c = dec0208.decodeDouble(b1,b2); + if (c == UNMAPPABLE_DECODING) return CoderResult.unmappableForLength(inputSize); da[dp++] = c; break; @@ -331,8 +302,8 @@ public class ISO2022_JP if (sp + inputSize + 1 > sl) return CoderResult.UNDERFLOW; b2 = sa[sp + inputSize++] & 0xff; - c = decoder0212.decodeDouble(b1,b2); - if (c == REPLACE_CHAR) + c = dec0212.decodeDouble(b1,b2); + if (c == UNMAPPABLE_DECODING) return CoderResult.unmappableForLength(inputSize); da[dp++] = c; break; @@ -358,7 +329,7 @@ public class ISO2022_JP { int mark = src.position(); int b1 = 0, b2 = 0, b3 = 0, b4=0; - char c = REPLACE_CHAR; + char c = UNMAPPABLE_DECODING; int inputSize = 0; try { while (src.hasRemaining()) { @@ -391,7 +362,7 @@ public class ISO2022_JP currentState = JISX0208_1978; } else if (b3 == 'B'){ currentState = JISX0208_1983; - } else if (b3 == '(' && decoder0212 != null) { + } else if (b3 == '(' && dec0212 != null) { if (!src.hasRemaining()) return CoderResult.UNDERFLOW; b4 = src.get() & 0xff; @@ -442,8 +413,8 @@ public class ISO2022_JP return CoderResult.UNDERFLOW; b2 = src.get() & 0xff; inputSize++; - c = decodeDouble(b1,b2); - if (c == REPLACE_CHAR) + c = dec0208.decodeDouble(b1,b2); + if (c == UNMAPPABLE_DECODING) return CoderResult.unmappableForLength(inputSize); dst.put(c); break; @@ -452,8 +423,8 @@ public class ISO2022_JP return CoderResult.UNDERFLOW; b2 = src.get() & 0xff; inputSize++; - c = decoder0212.decodeDouble(b1,b2); - if (c == REPLACE_CHAR) + c = dec0212.decodeDouble(b1,b2); + if (c == UNMAPPABLE_DECODING) return CoderResult.unmappableForLength(inputSize); dst.put(c); break; @@ -486,25 +457,29 @@ public class ISO2022_JP } } - private static class Encoder extends DoubleByteEncoder { + static class Encoder extends CharsetEncoder { + + final static DoubleByte.Encoder ENC0208 = + (DoubleByte.Encoder)new JIS_X_0208().newEncoder(); + private static byte[] repl = { (byte)0x21, (byte)0x29 }; private int currentMode = ASCII; private int replaceMode = JISX0208_1983; - private DoubleByteEncoder encoder0212 = null; + private DoubleByte.Encoder enc0208; + private DoubleByte.Encoder enc0212; private boolean doSBKANA; - private Encoder(Charset cs, - short[] index1, - String[] index2, - DoubleByteEncoder encoder0212, - boolean doSBKANA) { - super(cs, - index1, - index2, - repl, - 4.0f, - (encoder0212 != null)? 9.0f : 8.0f); - this.encoder0212 = encoder0212; + private Encoder(Charset cs) { + this(cs, ENC0208, null, true); + } + + Encoder(Charset cs, + DoubleByte.Encoder enc0208, + DoubleByte.Encoder enc0212, + boolean doSBKANA) { + super(cs, 4.0f, (enc0212 != null)? 9.0f : 8.0f, repl); + this.enc0208 = enc0208; + this.enc0212 = enc0212; this.doSBKANA = doSBKANA; } @@ -545,8 +520,8 @@ public class ISO2022_JP (c >= 0xFF61 && c <= 0xFF9F) || (c == '\u00A5') || (c == '\u203E') || - super.canEncode(c) || - (encoder0212!=null && encoder0212.canEncode(c))); + enc0208.canEncode(c) || + (enc0212!=null && enc0212.canEncode(c))); } private final Surrogate.Parser sgp = new Surrogate.Parser(); @@ -607,8 +582,8 @@ public class ISO2022_JP return CoderResult.OVERFLOW; da[dp++] = (c == '\u00A5')?(byte)0x5C:(byte)0x7e; } else { - int index = encodeDouble(c); - if (index != 0) { + int index = enc0208.encodeChar(c); + if (index != UNMAPPABLE_ENCODING) { if (currentMode != JISX0208_1983) { if (dl - dp < 3) return CoderResult.OVERFLOW; @@ -621,8 +596,8 @@ public class ISO2022_JP return CoderResult.OVERFLOW; da[dp++] = (byte)(index >> 8); da[dp++] = (byte)(index & 0xff); - } else if (encoder0212 != null && - (index = encoder0212.encodeDouble(c)) != 0) { + } else if (enc0212 != null && + (index = enc0212.encodeChar(c)) != UNMAPPABLE_ENCODING) { if (currentMode != JISX0212_1990) { if (dl - dp < 4) return CoderResult.OVERFLOW; @@ -715,8 +690,8 @@ public class ISO2022_JP return CoderResult.OVERFLOW; dst.put((c == '\u00A5')?(byte)0x5C:(byte)0x7e); } else { - int index = encodeDouble(c); - if (index != 0) { + int index = enc0208.encodeChar(c); + if (index != UNMAPPABLE_ENCODING) { if (currentMode != JISX0208_1983) { if (dst.remaining() < 3) return CoderResult.OVERFLOW; @@ -729,8 +704,8 @@ public class ISO2022_JP return CoderResult.OVERFLOW; dst.put((byte)(index >> 8)); dst.put((byte)(index & 0xff)); - } else if (encoder0212 != null && - (index = encoder0212.encodeDouble(c)) != 0) { + } else if (enc0212 != null && + (index = enc0212.encodeChar(c)) != UNMAPPABLE_ENCODING) { if (currentMode != JISX0212_1990) { if (dst.remaining() < 4) return CoderResult.OVERFLOW; diff --git a/jdk/src/share/classes/sun/nio/cs/ext/ISO2022_JP_2.java b/jdk/src/share/classes/sun/nio/cs/ext/ISO2022_JP_2.java index 47ce7e9940a..37e496c56b3 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/ISO2022_JP_2.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/ISO2022_JP_2.java @@ -26,6 +26,8 @@ package sun.nio.cs.ext; import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CharsetEncoder; public class ISO2022_JP_2 extends ISO2022_JP { @@ -44,12 +46,18 @@ public class ISO2022_JP_2 extends ISO2022_JP (cs instanceof ISO2022_JP_2); } - protected DoubleByteDecoder get0212Decoder() { - return new JIS_X_0212_Decoder(this); + public CharsetDecoder newDecoder() { + return new Decoder(this, Decoder.DEC0208, DEC0212); } - protected DoubleByteEncoder get0212Encoder() { - return new JIS_X_0212_Encoder(this); + public CharsetEncoder newEncoder() { + return new Encoder(this, Encoder.ENC0208, ENC0212, true); } + private final static DoubleByte.Decoder DEC0212 = + (DoubleByte.Decoder)new JIS_X_0212().newDecoder(); + + private final static DoubleByte.Encoder ENC0212 = + (DoubleByte.Encoder)new JIS_X_0212().newEncoder(); + } diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_MS5022X_Decoder.java b/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_MS5022X_Decoder.java deleted file mode 100644 index e38b5a9ce61..00000000000 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_MS5022X_Decoder.java +++ /dev/null @@ -1,1119 +0,0 @@ -/* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.nio.cs.ext; - -import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; - -class JIS_X_0208_MS5022X_Decoder -{ - private final static String innerIndex0= - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3000\u3001"+ - "\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01"+ - "\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F"+ - "\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006"+ - "\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\u301C\u2016"+ - "\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08"+ - "\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008"+ - "\u3009\u300A\u300B\u300C\u300D\u300E\u300F\u3010"+ - "\u3011\uFF0B\u2212\u00B1\u00D7\u00F7\uFF1D\u2260"+ - "\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640"+ - "\u00B0\u2032\u2033\u2103\uFFE5\uFF04\u00A2\u00A3"+ - "\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605"+ - "\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3"+ - "\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191"+ - "\u2193\u3013\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2208\u220B\u2286"+ - "\u2287\u2282\u2283\u222A\u2229\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2227\u2228\u00AC"+ - "\u21D2\u21D4\u2200\u2203\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2220"+ - "\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B"+ - "\u221A\u223D\u221D\u2235\u222B\u222C\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u212B\u2030\u266F"+ - "\u266D\u266A\u2020\u2021\u00B6\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\u25EF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16"+ - "\uFF17\uFF18\uFF19\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26"+ - "\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E"+ - "\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36"+ - "\uFF37\uFF38\uFF39\uFF3A\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46"+ - "\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E"+ - "\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56"+ - "\uFF57\uFF58\uFF59\uFF5A\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048"+ - "\u3049\u304A\u304B\u304C\u304D\u304E\u304F\u3050"+ - "\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058"+ - "\u3059\u305A\u305B\u305C\u305D\u305E\u305F\u3060"+ - "\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068"+ - "\u3069\u306A\u306B\u306C\u306D\u306E\u306F\u3070"+ - "\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078"+ - "\u3079\u307A\u307B\u307C\u307D\u307E\u307F\u3080"+ - "\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088"+ - "\u3089\u308A\u308B\u308C\u308D\u308E\u308F\u3090"+ - "\u3091\u3092\u3093\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u30A1\u30A2"+ - "\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA"+ - "\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2"+ - "\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA"+ - "\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2"+ - "\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA"+ - "\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2"+ - "\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA"+ - "\u30DB\u30DC\u30DD\u30DE\u30DF\u30E0\u30E1\u30E2"+ - "\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA"+ - "\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2"+ - "\u30F3\u30F4\u30F5\u30F6\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\u0391\u0392\u0393\u0394"+ - "\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C"+ - "\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5"+ - "\u03A6\u03A7\u03A8\u03A9\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\u03B1\u03B2\u03B3\u03B4"+ - "\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC"+ - "\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5"+ - "\u03C6\u03C7\u03C8\u03C9\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\u0410\u0411\u0412\u0413\u0414\u0415"+ - "\u0401\u0416\u0417\u0418\u0419\u041A\u041B\u041C"+ - "\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424"+ - "\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C"+ - "\u042D\u042E\u042F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\u0430\u0431\u0432\u0433\u0434\u0435"+ - "\u0451\u0436\u0437\u0438\u0439\u043A\u043B\u043C"+ - "\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444"+ - "\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C"+ - "\u044D\u044E\u044F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C"+ - "\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B"+ - "\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F"+ - "\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2460\u2461"+ - "\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469"+ - "\u246A\u246B\u246C\u246D\u246E\u246F\u2470\u2471"+ - "\u2472\u2473\u2160\u2161\u2162\u2163\u2164\u2165"+ - "\u2166\u2167\u2168\u2169\uFFFD\u3349\u3314\u3322"+ - "\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D"+ - "\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E"+ - "\u338E\u338F\u33C4\u33A1\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\u337B\u301E\u301F\u2116"+ - "\u33CD\u2121\u32A4\u32A5\u32A6\u32A7\u32A8\u3231"+ - "\u3232\u3239\u337E\u337D\u337C\uFFFD\uFFFD\uFFFD"+ - "\u222E\u2211\uFFFD\uFFFD\uFFFD\u221F\u22BF\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\u4E9C\u5516\u5A03\u963F"+ - "\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50"+ - "\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893"+ - "\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62"+ - "\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309"+ - "\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D"+ - "\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF"+ - "\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB"+ - "\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A"+ - "\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00"+ - "\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141"+ - "\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB"+ - "\u80E4\u852D\u9662\u9670\u96A0\u97FB\u540B\u53F3"+ - "\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA"+ - "\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A"+ - "\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91"+ - "\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71"+ - "\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8"+ - "\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB"+ - "\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD"+ - "\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9"+ - "\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F"+ - "\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869"+ - "\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC"+ - "\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956"+ - "\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B"+ - "\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069"+ - "\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D"+ - "\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6"+ - "\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B"+ - "\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304"+ - "\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6"+ - "\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B"+ - "\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB"+ - "\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A"+ - "\u6094\u6062\u61D0\u6212\u62D0\u6539\u9B41\u6666"+ - "\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9"+ - "\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3"+ - "\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72"+ - "\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE"+ - "\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C"+ - "\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B"+ - "\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D"+ - "\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D"+ - "\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1"+ - "\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A"+ - "\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B"+ - "\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6"+ - "\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB"+ - "\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79"+ - "\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853"+ - "\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0"+ - "\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36"+ - "\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084"+ - "\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218"+ - "\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9"+ - "\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E"+ - "\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90"+ - "\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F"+ - "\u68CB\u68C4\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F"+ - "\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4"+ - "\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D"+ - "\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0"+ - "\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA"+ - "\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827"+ - "\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18"+ - "\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025"+ - "\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76"+ - "\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB"+ - "\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31"+ - "\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC"; - - private final static String innerIndex1= - "\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354"+ - "\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A"+ - "\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2"+ - "\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1"+ - "\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D"+ - "\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4"+ - "\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981"+ - "\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39"+ - "\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A"+ - "\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2"+ - "\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047"+ - "\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\u6398\u7A9F"+ - "\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817"+ - "\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4"+ - "\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211"+ - "\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84"+ - "\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F"+ - "\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B"+ - "\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD"+ - "\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483"+ - "\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74"+ - "\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065"+ - "\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA"+ - "\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC"+ - "\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19"+ - "\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78"+ - "\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384"+ - "\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B"+ - "\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27"+ - "\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1"+ - "\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867"+ - "\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F"+ - "\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E"+ - "\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF"+ - "\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A"+ - "\u53E3\u5411\u540E\u5589\u5751\u57A2\u597D\u5B54"+ - "\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A"+ - "\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B"+ - "\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F"+ - "\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F"+ - "\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF"+ - "\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B"+ - "\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4"+ - "\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7"+ - "\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B"+ - "\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344"+ - "\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC"+ - "\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068"+ - "\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A"+ - "\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6"+ - "\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF"+ - "\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9"+ - "\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73"+ - "\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E"+ - "\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750"+ - "\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4"+ - "\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B"+ - "\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F"+ - "\u685C\u9BAD\u7B39\u5319\u518A\u5237\u5BDF\u62F6"+ - "\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6"+ - "\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2"+ - "\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523"+ - "\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC"+ - "\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8"+ - "\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50"+ - "\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C"+ - "\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345"+ - "\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3"+ - "\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC"+ - "\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57"+ - "\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E"+ - "\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494"+ - "\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8"+ - "\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4"+ - "\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0"+ - "\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199"+ - "\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005"+ - "\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A"+ - "\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2"+ - "\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A"+ - "\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112"+ - "\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA"+ - "\u53CE\u5468\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE"+ - "\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F"+ - "\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B"+ - "\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93"+ - "\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283"+ - "\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E"+ - "\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC"+ - "\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89"+ - "\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187"+ - "\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6"+ - "\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9"+ - "\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F"+ - "\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617"+ - "\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A"+ - "\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C"+ - "\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F"+ - "\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167"+ - "\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11"+ - "\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3"+ - "\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266"+ - "\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57"+ - "\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5"+ - "\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8"+ - "\u8B72\u91B8\u9320\u5631\u57F4\u98FE\u62ED\u690D"+ - "\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755"+ - "\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD"+ - "\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B"+ - "\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33"+ - "\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032"+ - "\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B"+ - "\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25"+ - "\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782"+ - "\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870"+ - "\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07"+ - "\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919"+ - "\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16"+ - "\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81"+ - "\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816"+ - "\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0"+ - "\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752"+ - "\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A"+ - "\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A"+ - "\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5"+ - "\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76"+ - "\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02"+ - "\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9"+ - "\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F"+ - "\u7BAD\u7DDA\u7E4A\u7FA8\u817A\u821B\u8239\u85A6"+ - "\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583"+ - "\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55"+ - "\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD"+ - "\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97"+ - "\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7"+ - "\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D"+ - "\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F"+ - "\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15"+ - "\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C"+ - "\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70"+ - "\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E"+ - "\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373"+ - "\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E"+ - "\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58"+ - "\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A"+ - "\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1"+ - "\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE"+ - "\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF"+ - "\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000"+ - "\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C"+ - "\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85"+ - "\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438"+ - "\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\u53E9\u4F46"+ - "\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA"+ - "\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606"+ - "\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD"+ - "\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95"+ - "\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5"+ - "\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A"+ - "\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3"+ - "\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92"+ - "\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD"+ - "\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3"+ - "\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01"+ - "\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14"+ - "\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E"+ - "\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF"+ - "\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5"+ - "\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673"+ - "\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A"+ - "\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB"+ - "\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C"+ - "\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C"+ - "\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95"+ - "\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF"+ - "\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6"+ - "\u8E44\u9013\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458"+ - "\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA"+ - "\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B"+ - "\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2"+ - "\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E"+ - "\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C"+ - "\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825"+ - "\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A"+ - "\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95"+ - "\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC"+ - "\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53"+ - "\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230"; - - private final static String innerIndex2= - "\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003"+ - "\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5"+ - "\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5"+ - "\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97"+ - "\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC"+ - "\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6"+ - "\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566"+ - "\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948"+ - "\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A"+ - "\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF"+ - "\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1"+ - "\u8089\u8679\u5EFF\u65E5\u4E73\u5165\u5982\u5C3F"+ - "\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962"+ - "\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A"+ - "\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9"+ - "\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4"+ - "\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436"+ - "\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD"+ - "\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29"+ - "\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD"+ - "\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7"+ - "\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D"+ - "\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206"+ - "\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8"+ - "\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B"+ - "\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C"+ - "\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34"+ - "\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F"+ - "\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C"+ - "\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D"+ - "\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351"+ - "\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB"+ - "\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB"+ - "\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB"+ - "\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435"+ - "\u7709\u7F8E\u9F3B\u67CA\u7A17\u5339\u758B\u9AED"+ - "\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46"+ - "\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5"+ - "\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55"+ - "\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2"+ - "\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015"+ - "\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0"+ - "\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276"+ - "\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A"+ - "\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE"+ - "\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953"+ - "\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D"+ - "\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8"+ - "\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4"+ - "\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587"+ - "\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A"+ - "\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB"+ - "\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F"+ - "\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF"+ - "\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703"+ - "\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893"+ - "\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8"+ - "\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29"+ - "\u5E96\u62B1\u6367\u653E\u65B9\u670B\u6CD5\u6CE1"+ - "\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702"+ - "\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C"+ - "\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8"+ - "\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21"+ - "\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420"+ - "\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267"+ - "\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C"+ - "\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54"+ - "\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9"+ - "\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6"+ - "\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D"+ - "\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A"+ - "\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1"+ - "\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922"+ - "\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18"+ - "\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4"+ - "\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762"+ - "\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B"+ - "\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE"+ - "\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F"+ - "\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A"+ - "\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC"+ - "\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108"+ - "\u6CB9\u7652\u8AED\u8F38\u552F\u4F51\u512A\u52C7"+ - "\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA"+ - "\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98"+ - "\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59"+ - "\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9"+ - "\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B"+ - "\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9"+ - "\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291"+ - "\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA"+ - "\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D"+ - "\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D"+ - "\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483"+ - "\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387"+ - "\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409"+ - "\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E"+ - "\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE"+ - "\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7"+ - "\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1"+ - "\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A"+ - "\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E"+ - "\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2"+ - "\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62"+ - "\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B"+ - "\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\u84EE\u9023"+ - "\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732"+ - "\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A"+ - "\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE"+ - "\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C"+ - "\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99"+ - "\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897"+ - "\u8155\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\u5F0C\u4E10\u4E15\u4E2A"+ - "\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82"+ - "\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F"+ - "\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4"+ - "\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09"+ - "\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88"+ - "\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86"+ - "\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1"+ - "\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A"+ - "\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE"+ - "\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050"+ - "\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085"+ - "\u50B4\u50B2\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE"+ - "\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101"+ - "\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137"+ - "\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162"+ - "\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C"+ - "\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6"+ - "\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0"+ - "\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9"+ - "\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E"+ - "\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B"+ - "\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F"+ - "\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8"+ - "\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7"+ - "\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8"+ - "\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315"+ - "\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346"+ - "\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E"+ - "\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5"+ - "\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC"+ - "\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440"+ - "\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E"+ - "\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492"+ - "\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2"+ - "\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\u54AB\u54C2"+ - "\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514"+ - "\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563"+ - "\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533"+ - "\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E"+ - "\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8"+ - "\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614"+ - "\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650"+ - "\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F"+ - "\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F"+ - "\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3"+ - "\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9"+ - "\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713"+ - "\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E"+ - "\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F"+ - "\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3"+ - "\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B"+ - "\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0"+ - "\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA"+ - "\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7"+ - "\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA"+ - "\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B"+ - "\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2"+ - "\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967"+ - "\u596C\u5969\u5978\u5981\u599D\u4F5E\u4FAB\u59A3"+ - "\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25"+ - "\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49"+ - "\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB"+ - "\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA"+ - "\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36"+ - "\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B"+ - "\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A"+ - "\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4"+ - "\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0"+ - "\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20"+ - "\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53"; - - private final static String innerIndex3= - "\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79"+ - "\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC"+ - "\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA"+ - "\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F"+ - "\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C"+ - "\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84"+ - "\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7"+ - "\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB"+ - "\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36"+ - "\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F"+ - "\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F"+ - "\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\u5ED6\u5EE3"+ - "\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC"+ - "\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09"+ - "\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38"+ - "\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57"+ - "\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F"+ - "\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0"+ - "\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1"+ - "\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029"+ - "\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A"+ - "\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D"+ - "\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081"+ - "\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097"+ - "\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4"+ - "\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106"+ - "\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB"+ - "\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A"+ - "\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173"+ - "\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165"+ - "\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187"+ - "\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC"+ - "\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB"+ - "\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF"+ - "\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C"+ - "\u6214\u621B\u621E\u6221\u622A\u622E\u6230\u6232"+ - "\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268"+ - "\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4"+ - "\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6"+ - "\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B"+ - "\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF"+ - "\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E"+ - "\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5"+ - "\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9"+ - "\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426"+ - "\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476"+ - "\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC"+ - "\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1"+ - "\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C"+ - "\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C"+ - "\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536"+ - "\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E"+ - "\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F"+ - "\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2"+ - "\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603"+ - "\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644"+ - "\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F"+ - "\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698"+ - "\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\u66C4\u66B8"+ - "\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5"+ - "\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E"+ - "\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760"+ - "\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A"+ - "\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4"+ - "\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2"+ - "\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846"+ - "\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859"+ - "\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D"+ - "\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA"+ - "\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922"+ - "\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936"+ - "\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF"+ - "\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977"+ - "\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974"+ - "\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A"+ - "\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE"+ - "\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991"+ - "\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B"+ - "\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E"+ - "\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13"+ - "\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59"+ - "\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84"+ - "\u6AA2\u6AA3\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8"+ - "\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA"+ - "\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F"+ - "\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49"+ - "\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79"+ - "\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E"+ - "\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7"+ - "\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3"+ - "\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23"+ - "\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81"+ - "\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1"+ - "\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE"+ - "\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36"+ - "\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C"+ - "\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95"+ - "\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6"+ - "\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5"+ - "\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E"+ - "\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B"+ - "\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF"+ - "\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3"+ - "\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5"+ - "\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE"+ - "\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\u6F3E\u6F13"+ - "\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B"+ - "\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2"+ - "\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA"+ - "\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB"+ - "\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B"+ - "\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032"+ - "\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8"+ - "\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD"+ - "\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C"+ - "\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC"+ - "\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0"+ - "\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210"+ - "\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C"+ - "\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282"+ - "\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2"+ - "\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1"+ - "\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D"+ - "\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8"+ - "\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A"+ - "\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE"+ - "\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455"+ - "\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463"+ - "\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF"+ - "\u74D4\u73F1\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2"+ - "\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C"+ - "\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C"+ - "\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569"+ - "\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587"+ - "\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5"+ - "\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC"+ - "\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE"+ - "\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B"+ - "\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624"+ - "\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658"+ - "\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670"+ - "\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B"+ - "\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8"+ - "\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1"+ - "\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704"+ - "\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738"+ - "\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E"+ - "\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6"+ - "\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7"+ - "\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926"+ - "\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A"+ - "\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB"+ - "\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\u78E7\u78DA"+ - "\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B"+ - "\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A"+ - "\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3"+ - "\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3"+ - "\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31"+ - "\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62"+ - "\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95"+ - "\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4"+ - "\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3"+ - "\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0"+ - "\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E"+ - "\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B"+ - "\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71"+ - "\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A"+ - "\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC"+ - "\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6"+ - "\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17"+ - "\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B"+ - "\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58"+ - "\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90"+ - "\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2"+ - "\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8"+ - "\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6"+ - "\u7CFA\u7D06\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B"+ - "\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E"+ - "\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B"+ - "\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7"+ - "\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F"+ - "\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1"+ - "\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09"+ - "\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43"+ - "\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59"+ - "\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5"+ - "\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90"+ - "\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A"; - - private final static String innerIndex4= - "\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54"+ - "\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82"+ - "\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D"+ - "\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8"+ - "\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6"+ - "\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012"+ - "\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A"+ - "\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073"+ - "\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086"+ - "\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB"+ - "\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF"+ - "\u80F1\u811B\u8129\u8123\u812F\u814B\u968B\u8146"+ - "\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166"+ - "\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195"+ - "\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE"+ - "\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1"+ - "\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA"+ - "\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D"+ - "\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259"+ - "\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A"+ - "\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292"+ - "\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2"+ - "\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE"+ - "\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332"+ - "\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317"+ - "\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323"+ - "\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0"+ - "\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403"+ - "\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D"+ - "\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A"+ - "\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482"+ - "\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462"+ - "\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0"+ - "\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517"+ - "\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563"+ - "\u8558\u8548\u8541\u8602\u854B\u8555\u8580\u85A4"+ - "\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA"+ - "\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF"+ - "\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A"+ - "\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630"+ - "\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693"+ - "\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4"+ - "\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9"+ - "\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700"+ - "\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734"+ - "\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F"+ - "\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759"+ - "\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF"+ - "\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3"+ - "\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D"+ - "\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815"+ - "\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844"+ - "\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E"+ - "\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892"+ - "\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1"+ - "\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902"+ - "\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913"+ - "\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B"+ - "\u8936\u8938\u894C\u891D\u8960\u895E\u8966\u8964"+ - "\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988"+ - "\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF"+ - "\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD"+ - "\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B"+ - "\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48"+ - "\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8"+ - "\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD"+ - "\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14"+ - "\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A"+ - "\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26"+ - "\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49"+ - "\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74"+ - "\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99"+ - "\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50"+ - "\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85"+ - "\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD"+ - "\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1"+ - "\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05"+ - "\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD"+ - "\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99"+ - "\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB"+ - "\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09"+ - "\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30"+ - "\u8E34\u8E4A\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59"+ - "\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C"+ - "\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91"+ - "\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1"+ - "\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB"+ - "\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13"+ - "\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39"+ - "\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57"+ - "\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD"+ - "\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087"+ - "\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D"+ - "\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8"+ - "\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056"+ - "\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082"+ - "\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF"+ - "\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112"+ - "\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165"+ - "\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB"+ - "\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9"+ - "\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5"+ - "\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E"+ - "\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B"+ - "\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9"+ - "\u92B7\u92E9\u930F\u92FA\u9344\u932E\u9319\u9322"+ - "\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C"+ - "\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6"+ - "\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8"+ - "\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436"+ - "\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B"+ - "\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477"+ - "\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587"+ - "\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7"+ - "\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3"+ - "\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5"+ - "\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F"+ - "\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672"+ - "\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1"+ - "\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB"+ - "\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704"+ - "\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719"+ - "\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746"+ - "\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768"+ - "\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A"+ - "\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3"+ - "\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED"+ - "\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838"+ - "\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B"+ - "\u986F\u9870\u9871\u9874\u9873\u98AA\u98AF\u98B1"+ - "\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909"+ - "\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920"+ - "\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950"+ - "\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5"+ - "\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1"+ - "\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F"+ - "\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40"+ - "\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62"+ - "\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC"+ - "\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2"+ - "\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7"+ - "\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25"+ - "\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44"+ - "\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93"+ - "\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4"+ - "\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3"+ - "\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0"+ - "\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12"+ - "\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30"+ - "\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76"+ - "\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03"+ - "\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15"+ - "\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\u9D5D\u9D5E"+ - "\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB"+ - "\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1"+ - "\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3"+ - "\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E"+ - "\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92"+ - "\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD"+ - "\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE"+ - "\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7"+ - "\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15"+ - "\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F"+ - "\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72"+ - "\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464"+ - "\u51DC\u7199\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uE000\uE001\uE002\uE003\uE004\uE005"+ - "\uE006\uE007\uE008\uE009\uE00A\uE00B\uE00C\uE00D"+ - "\uE00E\uE00F\uE010\uE011\uE012\uE013\uE014\uE015"+ - "\uE016\uE017\uE018\uE019\uE01A\uE01B\uE01C\uE01D"+ - "\uE01E\uE01F\uE020\uE021\uE022\uE023\uE024\uE025"+ - "\uE026\uE027\uE028\uE029\uE02A\uE02B\uE02C\uE02D"+ - "\uE02E\uE02F\uE030\uE031\uE032\uE033\uE034\uE035"+ - "\uE036\uE037\uE038\uE039\uE03A\uE03B\uE03C\uE03D"+ - "\uE03E\uE03F\uE040\uE041\uE042\uE043\uE044\uE045"+ - "\uE046\uE047\uE048\uE049\uE04A\uE04B\uE04C\uE04D"+ - "\uE04E\uE04F\uE050\uE051\uE052\uE053\uE054\uE055"+ - "\uE056\uE057\uE058\uE059\uE05A\uE05B\uE05C\uE05D"; - - private final static String innerIndex5= - "\uE05E\uE05F\uE060\uE061\uE062\uE063\uE064\uE065"+ - "\uE066\uE067\uE068\uE069\uE06A\uE06B\uE06C\uE06D"+ - "\uE06E\uE06F\uE070\uE071\uE072\uE073\uE074\uE075"+ - "\uE076\uE077\uE078\uE079\uE07A\uE07B\uE07C\uE07D"+ - "\uE07E\uE07F\uE080\uE081\uE082\uE083\uE084\uE085"+ - "\uE086\uE087\uE088\uE089\uE08A\uE08B\uE08C\uE08D"+ - "\uE08E\uE08F\uE090\uE091\uE092\uE093\uE094\uE095"+ - "\uE096\uE097\uE098\uE099\uE09A\uE09B\uE09C\uE09D"+ - "\uE09E\uE09F\uE0A0\uE0A1\uE0A2\uE0A3\uE0A4\uE0A5"+ - "\uE0A6\uE0A7\uE0A8\uE0A9\uE0AA\uE0AB\uE0AC\uE0AD"+ - "\uE0AE\uE0AF\uE0B0\uE0B1\uE0B2\uE0B3\uE0B4\uE0B5"+ - "\uE0B6\uE0B7\uE0B8\uE0B9\uE0BA\uE0BB\uE0BC\uE0BD"+ - "\uE0BE\uE0BF\uE0C0\uE0C1\uE0C2\uE0C3\uE0C4\uE0C5"+ - "\uE0C6\uE0C7\uE0C8\uE0C9\uE0CA\uE0CB\uE0CC\uE0CD"+ - "\uE0CE\uE0CF\uE0D0\uE0D1\uE0D2\uE0D3\uE0D4\uE0D5"+ - "\uE0D6\uE0D7\uE0D8\uE0D9\uE0DA\uE0DB\uE0DC\uE0DD"+ - "\uE0DE\uE0DF\uE0E0\uE0E1\uE0E2\uE0E3\uE0E4\uE0E5"+ - "\uE0E6\uE0E7\uE0E8\uE0E9\uE0EA\uE0EB\uE0EC\uE0ED"+ - "\uE0EE\uE0EF\uE0F0\uE0F1\uE0F2\uE0F3\uE0F4\uE0F5"+ - "\uE0F6\uE0F7\uE0F8\uE0F9\uE0FA\uE0FB\uE0FC\uE0FD"+ - "\uE0FE\uE0FF\uE100\uE101\uE102\uE103\uE104\uE105"+ - "\uE106\uE107\uE108\uE109\uE10A\uE10B\uE10C\uE10D"+ - "\uE10E\uE10F\uE110\uE111\uE112\uE113\uE114\uE115"+ - "\uE116\uE117\uE118\uE119\uE11A\uE11B\uE11C\uE11D"+ - "\uE11E\uE11F\uE120\uE121\uE122\uE123\uE124\uE125"+ - "\uE126\uE127\uE128\uE129\uE12A\uE12B\uE12C\uE12D"+ - "\uE12E\uE12F\uE130\uE131\uE132\uE133\uE134\uE135"+ - "\uE136\uE137\uE138\uE139\uE13A\uE13B\uE13C\uE13D"+ - "\uE13E\uE13F\uE140\uE141\uE142\uE143\uE144\uE145"+ - "\uE146\uE147\uE148\uE149\uE14A\uE14B\uE14C\uE14D"+ - "\uE14E\uE14F\uE150\uE151\uE152\uE153\uE154\uE155"+ - "\uE156\uE157\uE158\uE159\uE15A\uE15B\uE15C\uE15D"+ - "\uE15E\uE15F\uE160\uE161\uE162\uE163\uE164\uE165"+ - "\uE166\uE167\uE168\uE169\uE16A\uE16B\uE16C\uE16D"+ - "\uE16E\uE16F\uE170\uE171\uE172\uE173\uE174\uE175"+ - "\uE176\uE177\uE178\uE179\uE17A\uE17B\uE17C\uE17D"+ - "\uE17E\uE17F\uE180\uE181\uE182\uE183\uE184\uE185"+ - "\uE186\uE187\uE188\uE189\uE18A\uE18B\uE18C\uE18D"+ - "\uE18E\uE18F\uE190\uE191\uE192\uE193\uE194\uE195"+ - "\uE196\uE197\uE198\uE199\uE19A\uE19B\uE19C\uE19D"+ - "\uE19E\uE19F\uE1A0\uE1A1\uE1A2\uE1A3\uE1A4\uE1A5"+ - "\uE1A6\uE1A7\uE1A8\uE1A9\uE1AA\uE1AB\uE1AC\uE1AD"+ - "\uE1AE\uE1AF\uE1B0\uE1B1\uE1B2\uE1B3\uE1B4\uE1B5"+ - "\uE1B6\uE1B7\uE1B8\uE1B9\uE1BA\uE1BB\uE1BC\uE1BD"+ - "\uE1BE\uE1BF\uE1C0\uE1C1\uE1C2\uE1C3\uE1C4\uE1C5"+ - "\uE1C6\uE1C7\uE1C8\uE1C9\uE1CA\uE1CB\uE1CC\uE1CD"+ - "\uE1CE\uE1CF\uE1D0\uE1D1\uE1D2\uE1D3\uE1D4\uE1D5"+ - "\uE1D6\uE1D7\uE1D8\uE1D9\uE1DA\uE1DB\uE1DC\uE1DD"+ - "\uE1DE\uE1DF\uE1E0\uE1E1\uE1E2\uE1E3\uE1E4\uE1E5"+ - "\uE1E6\uE1E7\uE1E8\uE1E9\uE1EA\uE1EB\uE1EC\uE1ED"+ - "\uE1EE\uE1EF\uE1F0\uE1F1\uE1F2\uE1F3\uE1F4\uE1F5"+ - "\uE1F6\uE1F7\uE1F8\uE1F9\uE1FA\uE1FB\uE1FC\uE1FD"+ - "\uE1FE\uE1FF\uE200\uE201\uE202\uE203\uE204\uE205"+ - "\uE206\uE207\uE208\uE209\uE20A\uE20B\uE20C\uE20D"+ - "\uE20E\uE20F\uE210\uE211\uE212\uE213\uE214\uE215"+ - "\uE216\uE217\uE218\uE219\uE21A\uE21B\uE21C\uE21D"+ - "\uE21E\uE21F\uE220\uE221\uE222\uE223\uE224\uE225"+ - "\uE226\uE227\uE228\uE229\uE22A\uE22B\uE22C\uE22D"+ - "\uE22E\uE22F\uE230\uE231\uE232\uE233\uE234\uE235"+ - "\uE236\uE237\uE238\uE239\uE23A\uE23B\uE23C\uE23D"+ - "\uE23E\uE23F\uE240\uE241\uE242\uE243\uE244\uE245"+ - "\uE246\uE247\uE248\uE249\uE24A\uE24B\uE24C\uE24D"+ - "\uE24E\uE24F\uE250\uE251\uE252\uE253\uE254\uE255"+ - "\uE256\uE257\uE258\uE259\uE25A\uE25B\uE25C\uE25D"+ - "\uE25E\uE25F\uE260\uE261\uE262\uE263\uE264\uE265"+ - "\uE266\uE267\uE268\uE269\uE26A\uE26B\uE26C\uE26D"+ - "\uE26E\uE26F\uE270\uE271\uE272\uE273\uE274\uE275"+ - "\uE276\uE277\uE278\uE279\uE27A\uE27B\uE27C\uE27D"+ - "\uE27E\uE27F\uE280\uE281\uE282\uE283\uE284\uE285"+ - "\uE286\uE287\uE288\uE289\uE28A\uE28B\uE28C\uE28D"+ - "\uE28E\uE28F\uE290\uE291\uE292\uE293\uE294\uE295"+ - "\uE296\uE297\uE298\uE299\uE29A\uE29B\uE29C\uE29D"+ - "\uE29E\uE29F\uE2A0\uE2A1\uE2A2\uE2A3\uE2A4\uE2A5"+ - "\uE2A6\uE2A7\uE2A8\uE2A9\uE2AA\uE2AB\uE2AC\uE2AD"+ - "\uE2AE\uE2AF\uE2B0\uE2B1\uE2B2\uE2B3\uE2B4\uE2B5"+ - "\uE2B6\uE2B7\uE2B8\uE2B9\uE2BA\uE2BB\uE2BC\uE2BD"+ - "\uE2BE\uE2BF\uE2C0\uE2C1\uE2C2\uE2C3\uE2C4\uE2C5"+ - "\uE2C6\uE2C7\uE2C8\uE2C9\uE2CA\uE2CB\uE2CC\uE2CD"+ - "\uE2CE\uE2CF\uE2D0\uE2D1\uE2D2\uE2D3\uE2D4\uE2D5"+ - "\uE2D6\uE2D7\uE2D8\uE2D9\uE2DA\uE2DB\uE2DC\uE2DD"+ - "\uE2DE\uE2DF\uE2E0\uE2E1\uE2E2\uE2E3\uE2E4\uE2E5"+ - "\uE2E6\uE2E7\uE2E8\uE2E9\uE2EA\uE2EB\uE2EC\uE2ED"+ - "\uE2EE\uE2EF\uE2F0\uE2F1\uE2F2\uE2F3\uE2F4\uE2F5"+ - "\uE2F6\uE2F7\uE2F8\uE2F9\uE2FA\uE2FB\uE2FC\uE2FD"+ - "\uE2FE\uE2FF\uE300\uE301\uE302\uE303\uE304\uE305"+ - "\uE306\uE307\uE308\uE309\uE30A\uE30B\uE30C\uE30D"+ - "\uE30E\uE30F\uE310\uE311\uE312\uE313\uE314\uE315"+ - "\uE316\uE317\uE318\uE319\uE31A\uE31B\uE31C\uE31D"+ - "\uE31E\uE31F\uE320\uE321\uE322\uE323\uE324\uE325"+ - "\uE326\uE327\uE328\uE329\uE32A\uE32B\uE32C\uE32D"+ - "\uE32E\uE32F\uE330\uE331\uE332\uE333\uE334\uE335"+ - "\uE336\uE337\uE338\uE339\uE33A\uE33B\uE33C\uE33D"+ - "\uE33E\uE33F\uE340\uE341\uE342\uE343\uE344\uE345"+ - "\uE346\uE347\uE348\uE349\uE34A\uE34B\uE34C\uE34D"+ - "\uE34E\uE34F\uE350\uE351\uE352\uE353\uE354\uE355"+ - "\uE356\uE357\uE358\uE359\uE35A\uE35B\uE35C\uE35D"+ - "\uE35E\uE35F\uE360\uE361\uE362\uE363\uE364\uE365"+ - "\uE366\uE367\uE368\uE369\uE36A\uE36B\uE36C\uE36D"+ - "\uE36E\uE36F\uE370\uE371\uE372\uE373\uE374\uE375"+ - "\uE376\uE377\uE378\uE379\uE37A\uE37B\uE37C\uE37D"+ - "\uE37E\uE37F\uE380\uE381\uE382\uE383\uE384\uE385"+ - "\uE386\uE387\uE388\uE389\uE38A\uE38B\uE38C\uE38D"+ - "\uE38E\uE38F\uE390\uE391\uE392\uE393\uE394\uE395"+ - "\uE396\uE397\uE398\uE399\uE39A\uE39B\uE39C\uE39D"+ - "\uE39E\uE39F\uE3A0\uE3A1\uE3A2\uE3A3\uE3A4\uE3A5"+ - "\uE3A6\uE3A7\uE3A8\uE3A9\uE3AA\uE3AB"; - - protected final static short index1[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 9, 0, 0, - 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, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }; - - protected final static String index2[] = { - innerIndex0, - innerIndex1, - innerIndex2, - innerIndex3, - innerIndex4, - innerIndex5 - }; - -} diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_MS5022X_Encoder.java b/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_MS5022X_Encoder.java deleted file mode 100644 index 914c65a30c2..00000000000 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_MS5022X_Encoder.java +++ /dev/null @@ -1,3307 +0,0 @@ -/* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.nio.cs.ext; - -import java.nio.charset.Charset; -import java.nio.charset.CharsetEncoder; - -class JIS_X_0208_MS5022X_Encoder -{ - private final static String innerIndex0= - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u2171\u2172\u0000\u0000\u0000\u2178"+ - "\u212F\u0000\u0000\u0000\u224C\u0000\u0000\u0000"+ - "\u216B\u215E\u0000\u0000\u212D\u0000\u2279\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u215F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2160"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2621\u2622\u2623\u2624\u2625\u2626\u2627"+ - "\u2628\u2629\u262A\u262B\u262C\u262D\u262E\u262F"+ - "\u2630\u2631\u0000\u2632\u2633\u2634\u2635\u2636"+ - "\u2637\u2638\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2641\u2642\u2643\u2644\u2645\u2646\u2647"+ - "\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F"+ - "\u2650\u2651\u0000\u2652\u2653\u2654\u2655\u2656"+ - "\u2657\u2658\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2727\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2721\u2722\u2723\u2724\u2725\u2726\u2728\u2729"+ - "\u272A\u272B\u272C\u272D\u272E\u272F\u2730\u2731"+ - "\u2732\u2733\u2734\u2735\u2736\u2737\u2738\u2739"+ - "\u273A\u273B\u273C\u273D\u273E\u273F\u2740\u2741"+ - "\u2751\u2752\u2753\u2754\u2755\u2756\u2758\u2759"+ - "\u275A\u275B\u275C\u275D\u275E\u275F\u2760\u2761"+ - "\u2762\u2763\u2764\u2765\u2766\u2767\u2768\u2769"+ - "\u276A\u276B\u276C\u276D\u276E\u276F\u2770\u2771"+ - "\u0000\u2757\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u213E\u0000\u0000\u0000\u0000\u213D\u2142\u0000"+ - "\u2146\u2147\u0000\u0000\u2148\u2149\u0000\u0000"+ - "\u2277\u2278\u0000\u0000\u0000\u2145\u2144\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2273\u0000\u216C\u216D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u2228\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u216E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u2D62\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2D64\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u2272\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2D35\u2D36\u2D37\u2D38\u2D39\u2D3A\u2D3B\u2D3C"+ - "\u2D3D\u2D3E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u222B\u222C\u222A\u222D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u224D\u0000\u224E\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u224F\u0000\u225F\u2250\u0000\u0000\u0000\u2260"+ - "\u223A\u0000\u0000\u223B\u0000\u0000\u0000\u0000"+ - "\u0000\u2D74\u215D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u2265\u0000\u0000\u2267\u2167\u2D78"+ - "\u225C\u0000\u0000\u0000\u0000\u2142\u0000\u224A"+ - "\u224B\u2241\u2240\u2269\u226A\u0000\u2D73\u0000"+ - "\u0000\u0000\u0000\u0000\u2168\u2268\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u2266\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u2262\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2162\u2261\u0000\u0000\u0000\u0000\u2165\u2166"+ - "\u0000\u0000\u2263\u2264\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u223E\u223F\u0000\u0000\u223C\u223D"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u225D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2D79"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u225E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2D21\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27\u2D28"+ - "\u2D29\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F\u2D30"+ - "\u2D31\u2D32\u2D33\u2D34\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2821\u282C\u2822\u282D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2823\u0000\u0000\u282E"+ - "\u2824\u0000\u0000\u282F\u2826\u0000\u0000\u2831"+ - "\u2825\u0000\u0000\u2830\u2827\u283C\u0000\u0000"+ - "\u2837\u0000\u0000\u2832\u2829\u283E\u0000\u0000"+ - "\u2839\u0000\u0000\u2834\u2828\u0000\u0000\u2838"+ - "\u283D\u0000\u0000\u2833\u282A\u0000\u0000\u283A"+ - "\u283F\u0000\u0000\u2835\u282B\u0000\u0000\u283B"+ - "\u0000\u0000\u2840\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u2836\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2223\u2222\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u2225\u2224\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2227\u2226\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u2221\u217E"+ - "\u0000\u0000\u0000\u217B\u0000\u0000\u217D\u217C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u227E"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u217A\u2179\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u216A\u0000\u2169\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u2276\u0000\u0000\u2275\u0000\u2274"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2121\u2122\u2123\u2137\u0000\u2139\u213A\u213B"+ - "\u2152\u2153\u2154\u2155\u2156\u2157\u2158\u2159"+ - "\u215A\u215B\u2229\u222E\u214C\u214D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2141\u0000\u2D60\u2D61"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2421\u2422\u2423\u2424\u2425\u2426\u2427"+ - "\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F"+ - "\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437"+ - "\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F"+ - "\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447"+ - "\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F"+ - "\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457"+ - "\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F"+ - "\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467"+ - "\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F"+ - "\u2470\u2471\u2472\u2473\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u212B\u212C\u2135\u2136\u0000"+ - "\u0000\u2521\u2522\u2523\u2524\u2525\u2526\u2527"+ - "\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F"+ - "\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537"+ - "\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F"+ - "\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547"+ - "\u2548\u2549\u254A\u254B\u254C\u254D\u254E\u254F"+ - "\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557"+ - "\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F"+ - "\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567"+ - "\u2568\u2569\u256A\u256B\u256C\u256D\u256E\u256F"+ - "\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u0000"+ - "\u0000\u0000\u0000\u2126\u213C\u2133\u2134\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2D6A\u2D6B\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2D6C\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2D65\u2D66\u2D67\u2D68"+ - "\u2D69\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u2D46\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u2D4A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2D41\u0000\u0000\u0000"+ - "\u2D44\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u2D42\u2D4C\u0000\u0000\u2D4B\u2D45"+ - "\u0000\u0000\u0000\u2D4D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u2D47\u0000"+ - "\u0000\u0000\u0000\u2D4F\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2D40\u2D4E\u0000\u0000\u2D43\u0000\u0000"+ - "\u0000\u2D48\u0000\u0000\u0000\u0000\u0000\u2D49"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u2D5F\u2D6F\u2D6E\u2D6D\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u2D53\u2D54"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2D50\u2D51\u2D52\u0000"+ - "\u0000\u2D56\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2D55\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u2D63\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u306C\u437A\u0000\u3C37\u0000\u0000\u0000\u4B7C"+ - "\u3E66\u3B30\u3E65\u323C\u0000\u4954\u4D3F\u0000"+ - "\u5022\u312F\u0000\u0000\u336E\u5023\u4024\u5242"+ - "\u3556\u4A3A\u0000\u0000\u0000\u0000\u3E67\u0000"+ - "\u0000\u4E3E\u0000\u0000\u0000\u0000\u4A42\u0000"+ - "\u0000\u0000\u5024\u0000\u0000\u4366\u0000\u0000"+ - "\u0000\u5025\u367A\u0000\u0000\u0000\u5026\u0000"+ - "\u345D\u4330\u0000\u3C67\u5027\u0000\u0000\u5028"+ - "\u0000\u0000\u5029\u4735\u0000\u3557\u0000\u0000"+ - "\u0000\u0000\u0000\u4737\u0000\u4663\u3843\u4B33"+ - "\u0000\u0000\u0000\u0000\u0000\u6949\u502A\u3E68"+ - "\u502B\u3235\u0000\u0000\u0000\u3665\u3870\u4C69"+ - "\u0000\u0000\u5626\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4D70\u0000\u467D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3425\u0000"+ - "\u3535\u0000\u502C\u0000\u0000\u502D\u4E3B\u0000"+ - "\u4D3D\u4168\u502F\u3B76\u4673\u0000\u5032\u0000"+ - "\u0000\u313E\u385F\u0000\u385E\u3066\u0000\u0000"+ - "\u4F4B\u4F4A\u0000\u3A33\u3021\u0000\u5033\u5034"+ - "\u5035\u4B34\u5036\u0000\u3872\u3067\u4B72\u0000"+ - "\u357C\u0000\u0000\u357D\u357E\u4462\u4E3C\u0000"+ - "\u5037\u0000\u0000\u5038\u0000\u0000\u5039\u0000"+ - "\u0000\u0000\u3F4D\u0000\u0000\u0000\u0000\u0000"+ - "\u3D3A\u3F4E\u503E\u0000\u503C\u0000\u503D\u3558"+ - "\u0000\u0000\u3A23\u3270\u0000\u503B\u503A\u4A29"+ - "\u0000\u0000\u0000\u0000\u3B46\u3B45\u423E\u503F"+ - "\u4955\u4067\u0000\u0000\u0000\u2138\u5040\u5042"+ - "\u0000\u0000\u0000\u4265\u4E61\u304A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5041\u323E\u0000"+ - "\u3644\u0000\u4367\u0000\u0000\u0000\u376F\u5043"+ - "\u0000\u0000\u0000\u4724\u0000\u0000\u0000\u0000"+ - "\u0000\u346B\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5044\u304B\u0000\u0000\u3860\u346C\u497A"+ - "\u4832\u3559\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3271\u0000\u5067\u4541\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u476C"+ - "\u5046\u0000\u0000\u0000\u483C\u0000\u4E62\u0000"+ - "\u3F2D\u0000\u3B47\u0000\u3B77\u3240\u0000\u0000"+ - "\u0000\u0000\u0000\u4451\u0000\u0000\u4322\u504A"+ - "\u0000\u0000\u0000\u0000\u0000\u304C\u4463\u3D3B"+ - "\u3A34\u4D24\u0000\u424E\u0000\u323F\u0000\u5049"+ - "\u0000\u4D3E\u5045\u5047\u3A6E\u5048\u5524\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5050\u0000\u0000\u0000\u0000\u0000\u5053"+ - "\u5051\u0000\u0000\u3242\u0000\u4A3B\u504B\u0000"+ - "\u0000\u0000\u0000\u504F\u3873\u0000\u0000\u3B48"+ - "\u0000\u0000\u0000\u3426\u0000\u0000\u5054\u0000"+ - "\u504C\u0000\u0000\u4E63\u0000\u3B78\u0000\u504D"+ - "\u0000\u5052\u0000\u0000\u0000\u0000\u5055\u0000"+ - "\u504E\u0000\u0000\u3621\u0000\u304D\u0000\u0000"+ - "\u3622\u3241\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5525\u0000\u4B79\u496E\u3874"+ - "\u0000\u0000\u0000\u0000\u0000\u3F2F\u4E37\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4A58"+ - "\u0000\u0000\u3738\u4225\u3264\u0000\u0000\u0000"+ - "\u0000\u0000\u3D53\u0000\u0000\u0000\u5059\u0000"+ - "\u505E\u505C\u0000\u0000\u5057\u0000\u0000\u422F"+ - "\u505A\u0000\u505D\u505B\u0000\u4A5D\u0000\u5058"+ - "\u0000\u3F2E\u0000\u4B73\u505F\u5060\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3D24\u506D"+ - "\u0000\u0000\u0000\u4750\u0000\u4936\u5068\u0000"+ - "\u4A70\u0000\u3236\u0000\u0000\u0000\u506C\u0000"; - - private final static String innerIndex1= - "\u0000\u0000\u0000\u0000\u0000\u5066\u506F\u0000"+ - "\u0000\u4152\u0000\u3844\u0000\u475C\u0000\u6047"+ - "\u0000\u506E\u455D\u0000\u5063\u0000\u3876\u0000"+ - "\u0000\u3875\u5061\u0000\u0000\u0000\u0000\u3C5A"+ - "\u0000\u5069\u0000\u4A6F\u434D\u5065\u3771\u0000"+ - "\u5062\u506A\u5064\u4E51\u506B\u4F41\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3666\u0000"+ - "\u0000\u3770\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5070\u0000\u0000\u0000\u5071"+ - "\u5075\u304E\u0000\u0000\u0000\u0000\u0000\u4A50"+ - "\u5074\u0000\u0000\u0000\u0000\u5073\u5077\u0000"+ - "\u0000\u0000\u5076\u0000\u4464\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3772\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5078\u0000\u0000\u0000"+ - "\u0000\u0000\u3C45\u0000\u4226\u4465\u3676\u0000"+ - "\u5079\u0000\u0000\u0000\u0000\u3536\u0000\u0000"+ - "\u507A\u0000\u0000\u0000\u0000\u507C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4B35\u0000\u0000"+ - "\u0000\u3766\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3B31\u4877\u507B\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3A45\u4D43\u0000\u0000"+ - "\u0000\u0000\u507E\u5123\u507D\u3A44\u0000\u3D7D"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3739\u0000"+ - "\u0000\u0000\u5124\u0000\u0000\u364F\u0000\u0000"+ - "\u0000\u5121\u5122\u0000\u0000\u462F\u0000\u417C"+ - "\u0000\u3623\u0000\u0000\u0000\u4B4D\u5125\u0000"+ - "\u0000\u0000\u4E3D\u0000\u0000\u0000\u5126\u0000"+ - "\u0000\u0000\u0000\u5129\u0000\u5127\u0000\u414E"+ - "\u0000\u0000\u0000\u0000\u0000\u5128\u512A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u512C\u0000\u0000"+ - "\u0000\u512B\u0000\u4A48\u0000\u0000\u0000\u0000"+ - "\u3537\u512E\u512F\u0000\u322F\u0000\u0000\u0000"+ - "\u0000\u512D\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3C74\u0000\u5132\u5131\u5130\u0000"+ - "\u5056\u0000\u5133\u0000\u0000\u0000\u0000\u3D7E"+ - "\u0000\u5134\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4D25\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4C59\u0000\u0000\u0000\u0000\u5136"+ - "\u0000\u0000\u5135\u5138\u5137\u0000\u0000\u5139"+ - "\u513A\u3074\u0000\u3835\u373B\u3D3C\u437B\u3624"+ - "\u4068\u3877\u0000\u396E\u513C\u4C48\u4546\u0000"+ - "\u3B79\u0000\u513B\u0000\u513D\u0000\u0000\u0000"+ - "\u0000\u0000\u455E\u0000\u3375\u0000\u0000\u0000"+ - "\u0000\u0000\u513E\u0000\u0000\u467E\u0000\u0000"+ - "\u4134\u5140\u5141\u482C\u3878\u4F3B\u5142\u0000"+ - "\u0000\u3626\u0000\u0000\u0000\u4A3C\u4236\u3671"+ - "\u4535\u0000\u0000\u0000\u3773\u0000\u0000\u0000"+ - "\u5143\u0000\u5144\u0000\u0000\u4662\u315F\u0000"+ - "\u0000\u5147\u3A7D\u0000\u5146\u3A46\u0000\u5148"+ - "\u666E\u5149\u4B41\u514A\u0000\u514B\u514C\u3E69"+ - "\u0000\u3C4C\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3427\u0000\u514F\u0000\u514D\u4C3D\u514E\u0000"+ - "\u495A\u5150\u5151\u5152\u455F\u0000\u0000\u0000"+ - "\u5156\u5154\u5155\u5153\u3A63\u5157\u4C6A\u4E64"+ - "\u0000\u0000\u0000\u0000\u0000\u5158\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4028\u5159\u3D5A\u0000"+ - "\u0000\u515A\u0000\u437C\u4E3F\u4560\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5245\u0000"+ - "\u0000\u0000\u0000\u515B\u7425\u3645\u0000\u0000"+ - "\u515C\u4B5E\u0000\u0000\u0000\u0000\u3D68\u427C"+ - "\u0000\u515E\u4664\u0000\u0000\u515F\u0000\u0000"+ - "\u5160\u332E\u0000\u0000\u0000\u5161\u3627\u0000"+ - "\u464C\u317A\u3D50\u0000\u0000\u4821\u5162\u0000"+ - "\u4561\u0000\u0000\u3F4F\u5163\u0000\u4A2C\u405A"+ - "\u3422\u0000\u3429\u5164\u0000\u0000\u5166\u0000"+ - "\u0000\u373A\u0000\u0000\u5165\u0000\u0000\u4E73"+ - "\u0000\u0000\u0000\u0000\u0000\u3D69\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u483D\u4A4C\u0000\u5167"+ - "\u0000\u4D78\u5168\u0000\u0000\u0000\u5169\u0000"+ - "\u457E\u0000\u0000\u516A\u0000\u0000\u4029\u3A7E"+ - "\u3774\u516B\u3B49\u396F\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4466\u516D\u0000\u0000\u4227"+ - "\u0000\u0000\u3A6F\u516E\u516F\u4130\u0000\u516C"+ - "\u0000\u0000\u0000\u0000\u5171\u0000\u4B36\u0000"+ - "\u0000\u0000\u0000\u3964\u0000\u0000\u5170\u0000"+ - "\u0000\u0000\u0000\u3775\u3A5E\u476D\u0000\u0000"+ - "\u0000\u5174\u5172\u0000\u0000\u0000\u0000\u497B"+ - "\u3E6A\u517B\u3364\u5175\u5173\u414F\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5177\u0000\u5176"+ - "\u0000\u0000\u0000\u3344\u0000\u0000\u0000\u3760"+ - "\u517C\u4E2D\u0000\u0000\u0000\u5178\u0000\u0000"+ - "\u0000\u517D\u517A\u0000\u5179\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4E4F\u0000\u0000\u0000\u3879"+ - "\u3243\u0000\u0000\u4E74\u0000\u0000\u0000\u0000"+ - "\u0000\u3D75\u4558\u3965\u5222\u5223\u0000\u0000"+ - "\u0000\u4E65\u0000\u0000\u4F2B\u5225\u0000\u0000"+ - "\u0000\u387A\u0000\u0000\u5224\u0000\u332F\u0000"+ - "\u0000\u5226\u0000\u4B56\u0000\u443C\u0000\u4D26"+ - "\u0000\u4A59\u0000\u0000\u0000\u5227\u0000\u0000"+ - "\u0000\u0000\u7055\u0000\u0000\u4630\u0000\u5228"+ - "\u342A\u4C33\u0000\u0000\u0000\u3E21\u5229\u4A67"+ - "\u522D\u0000\u402A\u522A\u3650\u0000\u522B\u342B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u372E\u522E\u0000\u522F\u0000\u0000"+ - "\u5230\u5231\u3C5B\u0000\u0000\u0000\u387B\u4C5E"+ - "\u0000\u4C68\u4677\u0000\u0000\u4A71\u5232\u0000"+ - "\u5233\u0000\u0000\u0000\u0000\u5235\u0000\u5237"+ - "\u5236\u0000\u0000\u0000\u0000\u5238\u323D\u4B4C"+ - "\u0000\u3A7C\u5239\u0000\u0000\u4159\u0000\u0000"+ - "\u3E22\u3629\u0000\u523A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u485B\u0000\u0000\u0000\u0000\u523B"+ - "\u0000\u523C\u0000\u523D\u0000\u0000\u0000\u0000"+ - "\u523E\u4924\u3668\u3065\u0000\u0000\u0000\u463F"+ - "\u523F\u3D3D\u0000\u4069\u0000\u5241\u5240\u3E23"+ - "\u3861\u5243\u483E\u0000\u0000\u5244\u0000\u0000"+ - "\u0000\u485C\u4234\u426E\u3628\u0000\u0000\u466E"+ - "\u4331\u0000\u476E\u0000\u4B4E\u0000\u5246\u0000"+ - "\u406A\u0000\u0000\u0000\u0000\u0000\u3735\u0000"+ - "\u0000\u5247\u0000\u0000\u0000\u0000\u5248\u312C"+ - "\u3075\u346D\u0000\u4228\u3551\u4D71\u0000\u524B"+ - "\u3237\u0000\u0000\u524A\u0000\u0000\u0000\u362A"+ - "\u0000\u0000\u524C\u0000\u4C71\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u524D\u0000"+ - "\u4E52\u0000\u387C\u0000\u0000\u0000\u0000\u3836"+ - "\u524E\u0000\u0000\u0000\u0000\u5250\u524F\u0000"+ - "\u3F5F\u3139\u0000\u0000\u0000\u315E\u5251\u0000"+ - "\u5252\u0000\u0000\u3837\u0000\u0000\u5253\u0000"+ - "\u0000\u0000\u0000\u356E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3B32\u5254\u0000\u0000\u0000\u0000"+ - "\u4B74\u3A35\u355A\u4D27\u4150\u483F\u3C7D\u0000"+ - "\u0000\u0000\u0000\u0000\u3D47\u0000\u3C68\u3C75"+ - "\u0000\u3D76\u0000\u4840\u0000\u0000\u0000\u5257"+ - "\u0000\u3143\u4151\u387D\u3845\u3667\u0000\u0000"+ - "\u525B\u4321\u427E\u362B\u3E24\u525C\u525A\u3244"+ - "\u4266\u3C38\u3B4B\u3126\u0000\u0000\u3370\u3966"+ - "\u3B4A\u0000\u525D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u525E\u0000\u3549\u3346\u0000\u0000\u0000"+ - "\u3967\u3548\u445F\u3125\u4631\u4C3E\u3921\u4D79"+ - "\u4547\u387E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u372F\u0000\u5267\u0000\u3663"+ - "\u4B4A\u0000\u0000\u0000\u0000\u0000\u485D\u0000"+ - "\u0000\u5266\u0000\u345E\u5261\u5262\u5264\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5265\u0000"+ - "\u355B\u3F61\u0000\u4A2D\u5263\u525F\u3863\u0000"+ - "\u5260\u0000\u4F24\u0000\u0000\u0000\u4A72\u0000"+ - "\u4468\u3862\u3970\u0000\u0000\u0000\u5268\u0000"+ - "\u0000\u465D\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u526C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3C7E\u0000\u3C76\u0000\u0000\u0000\u0000\u0000"+ - "\u526F\u526D\u0000\u4C23\u0000\u526A\u5273\u526E"+ - "\u0000\u0000\u0000\u5271\u3846\u4C3F\u0000\u0000"+ - "\u5272\u0000\u0000\u0000\u5274\u0000\u5276\u0000"+ - "\u0000\u0000\u0000\u3A70\u4F42\u0000\u526B\u5269"+ - "\u5275\u0000\u5270\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5278\u0000\u5323\u527A\u0000\u0000"+ - "\u527E\u0000\u0000\u5321\u527B\u0000\u0000\u533E"+ - "\u0000\u0000\u3A69\u3331\u0000\u0000\u0000\u0000"+ - "\u5279\u0000\u0000\u0000\u5325\u3076\u5324\u0000"+ - "\u3025\u494A\u5322\u0000\u527C\u0000\u0000\u5277"+ - "\u527D\u3A48\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5326\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3077\u532F\u0000\u0000\u5327\u5328\u0000"+ - "\u3E25\u4B69\u0000\u0000\u0000\u532D\u532C\u0000"+ - "\u0000\u0000\u452F\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u532E\u0000\u0000\u532B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3134\u0000\u3A36\u3F30"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5329"+ - "\u4562\u0000\u0000\u0000\u532A\u0000\u3022\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5334\u4D23"+ - "\u0000\u3E27\u0000\u533A\u0000\u0000\u0000\u0000"+ - "\u5339\u5330\u0000\u0000\u0000\u0000\u4243\u0000"+ - "\u5331\u0000\u0000\u0000\u426F\u5336\u3E26\u0000"+ - "\u0000\u0000\u0000\u0000\u5333\u0000\u0000\u4C64"+ - "\u0000\u0000\u0000\u373C\u0000\u0000\u5337\u5338"+ - "\u0000\u0000\u0000\u0000\u5335\u533B\u0000\u0000"+ - "\u0000\u0000\u0000\u5332\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5341\u5346\u0000\u5342\u0000"+ - "\u533D\u0000\u0000\u5347\u4131\u0000\u0000\u5349"+ - "\u0000\u3922\u533F\u437D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5343\u533C\u342D\u0000\u346E\u3365\u5344\u5340"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3776"+ - "\u534A\u5348\u4153\u354A\u362C\u0000\u5345\u0000"+ - "\u3674\u0000\u0000\u0000\u0000\u0000\u3144\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u534E\u534C\u0000\u5427"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5351\u0000\u0000\u0000"+ - "\u0000\u0000\u534B\u0000\u534F\u0000\u0000\u534D"+ - "\u0000\u0000\u0000\u3B4C\u5350\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5353"+ - "\u0000\u5358\u0000\u0000\u0000\u5356\u5355\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4332\u0000"+ - "\u0000\u3245\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5352\u0000\u5354\u3E28"+ - "\u3133\u0000\u0000\u5357\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u325E\u0000\u0000\u0000\u0000\u0000\u5362"+ - "\u0000\u3E7C\u535E\u0000\u535C\u0000\u535D\u0000"+ - "\u535F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u313D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4139\u0000\u5359\u0000"+ - "\u535A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u337A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5361\u0000\u0000\u0000"+ - "\u346F\u0000\u5364\u5360\u5363\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4A2E\u0000\u0000\u0000"+ - "\u4655\u0000\u4838\u0000\u0000\u0000\u0000\u0000"+ - "\u5366\u0000\u0000\u0000\u0000\u0000\u5365\u3345"+ - "\u0000\u0000\u5367\u0000\u0000\u0000\u0000\u536A"+ - "\u0000\u0000\u0000\u0000\u5369\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5368\u0000\u4739\u0000\u0000\u536B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u536C\u0000"+ - "\u0000\u0000\u0000\u0000\u536E\u0000\u536D\u0000"+ - "\u0000\u0000\u0000\u0000\u5370\u0000\u0000\u0000"+ - "\u5373\u5371\u536F\u5372\u0000\u0000\u0000\u0000"+ - "\u5374\u0000\u0000\u0000\u0000\u0000\u5375\u0000"+ - "\u0000\u5376\u0000\u5377\u0000\u0000\u0000\u5378"+ - "\u5145\u0000\u3C7C\u3B4D\u0000\u0000\u3273\u0000"+ - "\u3078\u0000\u0000\u4344\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5379\u0000"+ - "\u3A24\u0000\u304F\u3F5E\u0000\u0000\u0000\u0000"+ - "\u0000\u537A\u3847\u0000\u0000\u3971\u0000\u537C"+ - "\u537B\u0000\u0000\u4A60\u537D\u0000\u0000\u0000"+ - "\u5421\u537E\u0000\u5422\u0000\u5423\u0000\u3777"+ - "\u0000\u0000\u3160\u5424\u0000\u0000\u5426\u0000"+ - "\u5425\u0000\u0000\u0000\u5428\u0000\u0000\u455A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5429\u3035"+ - "\u3A5F\u0000\u0000\u0000\u0000\u373D\u0000\u0000"+ - "\u434F\u0000\u0000\u0000\u0000\u0000\u0000\u542A"+ - "\u542B\u0000\u0000\u542D\u0000\u0000\u0000\u0000"+ - "\u542E\u0000\u3A64\u0000\u0000\u0000\u0000\u3651"+ - "\u0000\u0000\u4B37\u0000\u0000\u0000\u542C\u542F"+ - "\u3A41\u3923\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5433\u0000\u0000\u3A25\u0000\u4333\u0000"+ - "\u0000\u5430\u445A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5434"+ - "\u0000\u0000\u3F62\u0000\u0000\u0000\u0000\u0000"+ - "\u5432\u5435\u0000\u373F\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5436\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5437\u0000\u3924\u3340\u5439\u0000\u0000\u0000"+ - "\u0000\u0000\u543A\u0000\u0000\u0000\u0000\u0000"+ - "\u543B\u0000\u0000\u5438\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5431\u0000\u0000\u543C\u0000\u0000\u543D\u0000"+ - "\u0000\u0000\u0000\u4B64\u0000\u0000\u3E6B\u0000"+ - "\u0000\u0000\u543F\u5440\u543E\u0000\u5442\u0000"+ - "\u0000\u0000\u0000\u0000\u4738\u0000\u0000\u3068"+ - "\u4956\u0000\u0000\u5443\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3E7D\u0000\u0000\u3C39"+ - "\u0000\u475D\u3470\u0000\u3A6B\u0000\u0000\u0000"+ - "\u4B59\u0000\u4632\u0000\u0000\u3778\u424F\u0000"+ - "\u0000\u0000\u5441\u5444\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4244\u0000\u0000"+ - "\u0000\u5445\u0000\u0000\u0000\u5446\u0000\u0000"+ - "\u0000\u5448\u0000\u0000\u4469\u0000\u0000\u0000"+ - "\u0000\u0000\u342E\u0000\u0000\u0000\u0000\u7421"+ - "\u3161\u4A73\u0000\u0000\u3E6C\u4548\u0000\u0000"+ - "\u0000\u0000\u3A66\u0000\u0000\u544E\u0000\u0000"+ - "\u4A3D\u4E5D\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3274\u544A\u0000\u0000\u0000\u0000"+ - "\u0000\u413A\u544D\u0000\u4563\u0000\u0000\u4549"+ - "\u4564\u4839\u444D\u0000\u0000\u0000\u3A49\u0000"+ - "\u0000\u0000\u5449\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3176\u0000\u4536\u0000\u0000\u0000\u0000"+ - "\u544B\u0000\u5447\u0000\u0000\u3F50\u0000\u0000"+ - "\u0000\u544F\u0000\u0000\u0000\u0000\u3D4E\u0000"+ - "\u0000\u0000\u0000\u362D\u0000\u5450\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4A68\u0000\u0000\u0000\u417D"+ - "\u0000\u0000\u0000\u0000\u4446\u0000\u0000\u5452"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4B4F\u0000\u0000\u5453\u0000\u0000\u5458\u0000"+ - "\u0000\u0000\u0000\u4A2F\u0000\u0000\u0000\u0000"+ - "\u5457\u5451\u5454\u5456\u0000\u0000\u3A26\u0000"+ - "\u0000\u4A49\u0000\u0000\u0000\u5459\u0000\u4345"+ - "\u0000\u0000\u3275\u0000\u3E6D\u0000\u0000\u0000"+ - "\u0000\u545B\u0000\u545A\u0000\u3968\u0000\u545C"+ - "\u545E\u545D\u0000\u0000\u5460\u0000\u5455\u5462"+ - "\u0000\u0000\u0000\u0000\u5461\u545F\u0000\u0000"+ - "\u0000\u0000\u0000\u3B4E\u3F51\u0000\u4154\u5463"+ - "\u403C\u306D\u4764\u0000\u0000\u0000\u0000\u445B"+ - "\u0000\u5465\u5464\u5466\u5467\u5468\u0000\u0000"+ - "\u0000\u0000\u5469\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4A51\u546A\u0000\u0000\u0000\u0000\u3246"+ - "\u546B\u0000\u0000\u0000\u0000\u4D3C\u3330\u0000"+ - "\u5249\u3D48\u423F\u546C\u4C6B\u0000\u0000\u0000"+ - "\u0000\u0000\u4C34\u0000\u0000\u546E\u0000\u4267"+ - "\u0000\u4537\u4240\u4957\u546F\u5470\u317B\u0000"+ - "\u0000\u3C3A\u5471\u0000\u0000\u0000\u0000\u3050"+ - "\u5472\u0000\u0000\u0000\u0000\u0000\u5473\u0000"+ - "\u0000\u0000\u0000\u0000\u3162\u0000\u0000\u3471"+ - "\u4660\u4A74\u0000\u0000\u0000\u0000\u5477\u4155"+ - "\u5476\u3740\u0000\u0000\u4B5B\u5475\u0000\u4565"+ - "\u5479\u0000\u5478\u0000\u0000\u0000\u0000\u0000"+ - "\u547B\u0000\u547A\u0000\u0000\u317C\u0000\u547C"+ - "\u3E29\u547E\u4325\u0000\u547D\u0000\u4A33\u0000"+ - "\u0000\u0000\u0000\u3D77\u455B\u0000\u0000\u0000"+ - "\u5521\u0000\u0000\u0000\u0000\u3925\u0000\u0000"+ - "\u0000\u5522\u4721\u485E\u4C51\u0000\u0000\u0000"+ - "\u0000\u0000\u4725\u0000\u0000\u552B\u0000\u0000"+ - "\u0000\u0000\u0000\u3538\u0000\u0000\u4D45\u0000"+ - "\u0000\u4C2F\u0000\u562C\u0000\u5523\u0000\u0000"+ - "\u0000\u0000\u0000\u5526\u0000\u4245\u0000\u0000"+ - "\u4B38\u0000\u0000\u0000\u454A\u0000\u0000\u0000"+ - "\u0000\u0000\u5527\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4B65\u0000\u3A4A\u0000\u0000\u3E2A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5528\u0000"+ - "\u0000\u3B50\u0000\u3B4F\u0000\u0000\u0000\u0000"+ - "\u3039\u3848\u0000\u402B\u3051\u0000\u0000\u0000"+ - "\u0000\u552C\u552D\u0000\u552A\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3138\u342F\u0000"+ - "\u5529\u0000\u4C45\u4931\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3028\u0000"+ - "\u0000\u0000\u0000\u3079\u0000\u0000\u0000\u3B51"+ - "\u0000\u3052\u0000\u3023\u0000\u0000\u0000\u0000"+ - "\u0000\u5532\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5530\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4C3C\u0000\u5533\u0000\u5531\u0000\u0000\u552F"+ - "\u3F31\u0000\u0000\u0000\u0000\u552E\u0000\u0000"+ - "\u0000\u4A5A\u0000\u0000\u0000\u0000\u0000\u3864"+ - "\u0000\u0000\u0000\u0000\u0000\u5537\u5538\u0000"+ - "\u0000\u0000\u0000\u0000\u3E2B\u0000\u0000\u0000"+ - "\u5534\u4F2C\u0000\u0000\u0000\u0000\u474C\u0000"+ - "\u0000\u5536\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3A27\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5539\u0000\u0000\u0000\u4958\u0000"+ - "\u0000\u0000\u553A\u0000\u5535\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4C3B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u475E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u553B\u4932\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u553C\u5540\u553D\u0000"+ - "\u0000\u3247\u553F\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3C3B\u0000\u553E\u3779\u0000\u0000\u0000"+ - "\u554C\u0000\u0000\u0000\u0000\u0000\u5545\u5542"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4364\u0000\u5541\u0000\u0000\u5543\u0000"+ - "\u0000\u5544\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5546\u5547\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3472\u0000\u5549\u5548\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u554A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3E6E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u554D\u0000\u445C\u0000\u0000\u0000"+ - "\u3145\u0000\u554B\u0000\u0000\u0000\u554E\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u554F\u0000"+ - "\u5552\u0000\u0000\u5550\u0000\u5551\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3B52\u5553\u0000\u0000\u3926\u5554\u0000\u3B7A"+ - "\u4238\u0000\u5555\u5556\u3B5A\u3927\u0000\u4C52"+ - "\u0000\u0000\u0000\u3528\u3849\u5557\u3358\u0000"+ - "\u0000\u5558\u0000\u4239\u0000\u0000\u0000\u0000"+ - "\u5559\u5623\u0000\u555A\u0000\u555B\u0000\u0000"+ - "\u555C\u0000\u555E\u0000\u0000\u0000\u0000\u0000"+ - "\u555F\u0000\u0000\u5560\u0000\u4270\u0000\u3127"+ - "\u3C69\u3042\u0000\u4157\u3430\u3C35\u0000\u3928"+ - "\u0000\u0000\u0000\u0000\u0000\u4566\u0000\u3D21"+ - "\u3431\u4368\u446A\u3038\u3539\u4A75\u0000\u3C42"+ - "\u0000\u0000\u3552\u406B\u3C3C\u4D28\u5561\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u355C\u0000"+ - "\u3A4B\u0000\u0000\u3332\u3163\u3E2C\u3248\u0000"+ - "\u5562\u4D46\u0000\u0000\u0000\u0000\u0000\u3D49"+ - "\u0000\u0000\u3C64\u5563\u3473\u4652\u4C29\u5564"+ - "\u0000\u5565\u0000\u0000\u4959\u0000\u0000\u0000"+ - "\u5567\u0000\u3428\u3677\u5566\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3432\u0000\u3F32\u556B\u3B21"+ - "\u0000\u3249\u556A\u0000\u5568\u556C\u5569\u472B"+ - "\u5C4D\u3F33\u0000\u556D\u0000\u0000\u4E40\u0000"+ - "\u556E\u0000\u0000\u5570\u0000\u437E\u556F\u0000"+ - "\u4023\u0000\u3B7B\u0000\u0000\u0000\u4250\u3C77"+ - "\u0000\u4975\u406C\u0000\u3C4D\u5571\u3E2D\u5572"+ - "\u5573\u3053\u423A\u3F52\u0000\u5574\u4633\u3E2E"+ - "\u0000\u3E2F\u0000\u5575\u0000\u0000\u406D\u0000"+ - "\u0000\u0000\u3E30\u0000\u0000\u0000\u0000\u0000"+ - "\u5576\u0000\u5577\u0000\u4C60\u0000\u0000\u0000"+ - "\u5578\u0000\u0000\u0000\u0000\u3646\u0000\u0000"+ - "\u0000\u3D22\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5579\u557A\u3C5C\u3F2C\u4674\u3F54\u4878\u4722"+ - "\u3649\u557B\u0000\u0000\u0000\u356F\u557C\u0000"+ - "\u367E\u0000\u464F\u3230\u0000\u3B53\u557D\u5622"+ - "\u5621\u367D\u0000\u557E\u0000\u4538\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4230\u0000"+ - "\u454B\u3C48\u0000\u0000\u4158\u4D7A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5624\u0000\u5625\u4656"+ - "\u0000\u3B33\u0000\u0000\u0000\u0000\u5627\u0000"+ - "\u0000\u5628\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5629\u0000\u0000\u0000"+ - "\u3474\u562A\u0000\u0000\u562B\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u322C\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u413B\u3464\u0000\u562D\u4C28\u0000\u0000\u0000"+ - "\u0000\u4252\u0000\u3359\u0000\u0000\u562F\u5631"+ - "\u345F\u0000\u0000\u562E\u5630\u0000\u5633\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5632\u0000\u5634"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5635\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u463D\u362E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3265\u5636\u563B\u0000\u0000\u5639\u0000\u4A77"+ - "\u4A76\u0000\u0000\u0000\u0000\u0000\u4567\u0000"+ - "\u0000\u0000\u5638\u3D54\u0000\u5637\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3F72"+ - "\u0000\u0000\u0000\u563C\u0000\u0000\u3A6A\u0000"+ - "\u0000\u5642\u0000\u0000\u5643\u563D\u3333\u563E"+ - "\u5647\u5646\u5645\u5641\u0000\u0000\u0000\u5640"+ - "\u0000\u0000\u5644\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4A78\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u564B\u5648\u0000\u564A\u0000"+ - "\u4D72\u0000\u5649\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u563F\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3F73\u0000\u0000\u564C\u0000\u0000\u3A37"+ - "\u0000\u0000\u0000\u564D\u0000\u0000\u564E\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5651\u0000\u5650\u0000\u0000\u564F"+ - "\u0000\u0000\u0000\u4568\u563A\u0000\u0000\u0000"+ - "\u5657\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5653\u0000\u0000"+ - "\u0000\u0000\u5652\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5654\u0000\u5655\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5658"+ - "\u0000\u0000\u4E66\u0000\u5659\u5656\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u565A\u0000\u0000\u3460\u565B\u0000\u0000"+ - "\u0000\u0000\u565D\u565C\u0000\u0000\u565E\u0000"+ - "\u0000\u0000\u0000\u565F\u0000\u406E\u3D23\u0000"+ - "\u0000\u3D64\u0000\u4163\u0000\u3929\u3A38\u392A"+ - "\u3570\u0000\u0000\u5660\u0000\u0000\u3A39\u0000"+ - "\u0000\u384A\u5661\u4C26\u4743\u5662\u0000\u392B"+ - "\u0000\u0000\u0000\u342C\u0000\u4327\u3652\u0000"+ - "\u0000\u0000\u3B54\u495B\u0000\u0000\u4841\u0000"+ - "\u0000\u0000\u0000\u5663\u3475\u0000\u0000\u0000"+ - "\u0000\u5666\u0000\u0000\u0000\u0000\u4421\u0000"+ - "\u0000\u5665\u5664\u5667\u0000\u446B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3F63\u0000\u0000"+ - "\u0000\u0000\u0000\u3B55\u0000\u404A\u0000\u4253"+ - "\u3522\u0000\u0000\u4422\u0000\u0000\u5668\u5669"+ - "\u3E6F\u0000\u0000\u0000\u0000\u4B39\u0000\u0000"+ - "\u566C\u0000\u0000\u566B\u566A\u497D\u0000\u5673"+ - "\u0000\u0000\u0000\u0000\u4B5A\u0000\u566D\u0000"+ - "\u0000\u0000\u0000\u0000\u566F\u4B6B\u0000\u566E"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5670"+ - "\u0000\u4828\u5671\u4A3E\u5672\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3433\u4A3F\u472F\u5674\u5675\u0000"+ - "\u392C\u3434\u5676\u3838\u4D44\u4D29\u3476\u5678"+ - "\u0000\u4423\u0000\u392D\u3E31\u0000\u0000\u485F"+ - "\u0000\u0000\u3E32\u0000\u0000\u0000\u0000\u3D78"+ - "\u0000\u0000\u0000\u0000\u0000\u446C\u4A79\u4539"+ - "\u0000\u0000\u392E\u0000\u495C\u0000\u0000\u0000"+ - "\u5679\u0000\u0000\u0000\u0000\u0000\u4559\u3A42"+ - "\u0000\u0000\u0000\u384B\u0000\u446D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3043\u3D6E\u392F"+ - "\u4D47\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u567A\u567B\u4751\u0000\u0000\u0000\u0000"+ - "\u567C\u4E77\u4F2D\u0000\u0000\u0000\u0000\u567E"+ - "\u567D\u0000\u0000\u3347\u0000\u0000\u5721\u0000"+ - "\u0000\u0000\u5724\u5725\u0000\u5723\u0000\u4940"+ - "\u3E33\u5727\u5726\u5722\u0000\u0000\u0000\u0000"+ - "\u5728\u5729\u0000\u0000\u572A\u0000\u0000\u0000"+ - "\u572D\u572B\u0000\u572C\u572E\u0000\u3164\u446E"+ - "\u572F\u0000\u377A\u3276\u4736\u0000\u5730\u467B"+ - "\u0000\u4A5B\u0000\u5731\u4F2E\u0000\u0000\u0000"+ - "\u0000\u5732\u4A40\u5735\u5021\u5031\u0000\u3C30"+ - "\u4675\u5736\u0000\u355D\u4424\u307A\u5737\u4A26"+ - "\u3930\u0000\u0000\u4350\u0000\u0000\u0000\u446F"+ - "\u0000\u0000\u0000\u0000\u0000\u4C6F\u3839\u384C"+ - "\u0000\u5738\u0000\u0000\u0000\u5739\u0000\u573F"+ - "\u0000\u3C65\u0000\u0000\u0000\u4425\u0000\u362F"+ - "\u573A\u0000\u0000\u0000\u492B\u0000\u4346\u0000"+ - "\u0000\u573B\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u573C\u0000\u3630\u0000\u573D\u0000\u573E\u0000"+ - "\u0000\u5740\u0000\u4576\u0000\u0000\u5741\u5742"+ - "\u0000\u5743\u0000\u0000\u5734\u5733\u0000\u0000"+ - "\u0000\u5744\u3741\u0000\u0000\u0000\u4927\u0000"+ - "\u0000\u3A4C\u4937\u4426\u494B\u5745\u0000\u0000"+ - "\u3E34\u3146\u0000\u5746\u0000\u0000\u0000\u5747"+ - "\u0000\u4C72\u0000\u0000\u4860\u0000\u0000\u574A"+ - "\u317D\u402C\u5749\u5748\u3742\u4254\u0000\u574E"+ - "\u574C\u0000\u574B\u4E27\u3865\u0000\u0000\u0000"+ - "\u3D79\u574D\u454C\u3D3E\u0000\u0000\u0000\u4640"+ - "\u5751\u5750\u0000\u0000\u0000\u0000\u574F\u0000"+ - "\u5752\u3866\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5753\u497C\u3D5B\u0000\u0000\u5754\u4879\u0000"+ - "\u0000\u0000\u0000\u4641\u4427\u0000\u0000\u0000"+ - "\u0000\u4530\u0000\u0000\u5755\u352B\u0000\u0000"+ - "\u0000\u0000\u0000\u3F34\u0000\u492C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3477\u4726\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5756\u3B56"+ - "\u4B3A\u4B3B\u0000\u0000\u317E\u575B\u0000\u0000"+ - "\u4369\u0000\u0000\u0000\u5758\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3277\u0000\u0000\u0000\u0000"+ - "\u582D\u575A\u0000\u0000\u0000\u4730\u0000\u0000"+ - "\u5759\u0000\u0000\u5757\u0000\u397A\u0000\u575D"; - - private final static String innerIndex2= - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5763\u5769"+ - "\u5761\u0000\u455C\u0000\u0000\u5766\u495D\u0000"+ - "\u0000\u5760\u0000\u5765\u4E67\u3B57\u0000\u0000"+ - "\u4255\u575E\u0000\u0000\u0000\u355E\u5768\u402D"+ - "\u3165\u5762\u3278\u5767\u0000\u0000\u0000\u3631"+ - "\u0000\u5764\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u576A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u576C\u5776\u5774\u0000\u0000\u5771\u0000"+ - "\u0000\u0000\u5770\u4E78\u0000\u5772\u0000\u0000"+ - "\u3632\u0000\u3931\u0000\u0000\u3D7A\u0000\u0000"+ - "\u0000\u5779\u576B\u0000\u0000\u0000\u0000\u576F"+ - "\u575F\u0000\u327A\u5773\u5775\u4351\u0000\u0000"+ - "\u3A28\u3238\u576D\u5778\u5777\u3633\u0000\u4229"+ - "\u3366\u0000\u0000\u0000\u0000\u3743\u0000\u576E"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u577A\u0000\u577D\u5821\u0000\u0000\u0000"+ - "\u0000\u3C3D\u0000\u5827\u4470\u577B\u0000\u0000"+ - "\u0000\u0000\u5825\u0000\u3279\u0000\u5823\u5824"+ - "\u0000\u0000\u577E\u5822\u0000\u0000\u0000\u3867"+ - "\u4D2A\u0000\u0000\u3435\u0000\u0000\u3159\u5826"+ - "\u0000\u473A\u302D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4861\u575C\u582C\u5830\u4C65\u0000"+ - "\u5829\u0000\u0000\u0000\u4569\u582E\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3E70\u582F\u4657"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4F47\u0000\u582B\u0000\u0000\u0000\u0000"+ - "\u5831\u0000\u397B\u0000\u404B\u0000\u0000\u3054"+ - "\u582A\u5828\u0000\u415A\u0000\u0000\u0000\u577C"+ - "\u3B34\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4246\u583D\u0000\u415B\u5838\u0000\u5835\u5836"+ - "\u0000\u3C66\u5839\u583C\u0000\u0000\u0000\u0000"+ - "\u5837\u3D25\u0000\u583A\u0000\u0000\u5834\u0000"+ - "\u4C7C\u4C7B\u0000\u0000\u0000\u583E\u583F\u3055"+ - "\u0000\u0000\u0000\u0000\u0000\u5833\u0000\u0000"+ - "\u0000\u0000\u3672\u3026\u0000\u0000\u0000\u3436"+ - "\u0000\u583B\u0000\u0000\u0000\u0000\u0000\u5843"+ - "\u5842\u0000\u0000\u0000\u5847\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5848\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5846\u5849\u5841\u5845"+ - "\u0000\u0000\u584A\u0000\u584B\u0000\u0000\u5840"+ - "\u3B7C\u0000\u5844\u4256\u3932\u5832\u3F35\u0000"+ - "\u0000\u0000\u0000\u5858\u0000\u4A69\u0000\u0000"+ - "\u584E\u584F\u5850\u0000\u0000\u5857\u0000\u5856"+ - "\u0000\u0000\u4B7D\u3437\u0000\u5854\u0000\u3745"+ - "\u3334\u0000\u0000\u5851\u0000\u0000\u4E38\u5853"+ - "\u3056\u5855\u0000\u584C\u5852\u5859\u3744\u584D"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4D5D\u0000"+ - "\u0000\u0000\u4D2B\u0000\u0000\u0000\u0000\u585C"+ - "\u0000\u0000\u5860\u0000\u0000\u0000\u417E\u0000"+ - "\u4E79\u5861\u0000\u0000\u585E\u0000\u585B\u0000"+ - "\u0000\u585A\u585F\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4A30\u0000\u0000\u4634"+ - "\u0000\u3746\u0000\u5862\u585D\u0000\u5863\u0000"+ - "\u0000\u0000\u377B\u0000\u0000\u0000\u3231\u0000"+ - "\u0000\u0000\u586B\u0000\u0000\u0000\u3438\u0000"+ - "\u0000\u0000\u0000\u5869\u0000\u0000\u586A\u3A29"+ - "\u5868\u5866\u5865\u586C\u5864\u586E\u0000\u0000"+ - "\u327B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5870\u0000\u0000\u586F\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4428\u0000\u5873\u0000\u5871\u5867"+ - "\u377C\u0000\u5872\u0000\u5876\u5875\u5877\u5874"+ - "\u5878\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5879\u587A\u4A6A\u0000\u587C\u587B\u3D3F\u0000"+ - "\u402E\u3266\u327C\u0000\u587D\u0000\u303F\u0000"+ - "\u0000\u0000\u404C\u587E\u0000\u6C43\u5921\u3761"+ - "\u0000\u5922\u0000\u0000\u0000\u0000\u406F\u0000"+ - "\u0000\u0000\u5923\u0000\u0000\u0000\u5924\u353A"+ - "\u5925\u0000\u5926\u5927\u4257\u0000\u0000\u0000"+ - "\u384D\u0000\u0000\u4C61\u0000\u0000\u0000\u4B3C"+ - "\u3D6A\u5928\u0000\u0000\u0000\u0000\u0000\u4070"+ - "\u6E3D\u4862\u0000\u3C6A\u0000\u3A4D\u5929\u0000"+ - "\u0000\u0000\u0000\u4247\u0000\u4A27\u0000\u0000"+ - "\u4271\u0000\u0000\u592C\u0000\u0000\u592A\u0000"+ - "\u592D\u0000\u0000\u592B\u0000\u0000\u0000\u0000"+ - "\u592E\u0000\u0000\u0000\u0000\u0000\u4A31\u0000"+ - "\u0000\u3037\u0000\u0000\u0000\u0000\u495E\u0000"+ - "\u0000\u4863\u0000\u0000\u592F\u0000\u5932\u3E35"+ - "\u353B\u0000\u5930\u5937\u3E36\u0000\u0000\u0000"+ - "\u0000\u5931\u4744\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4D5E\u5933\u5934\u5938\u456A\u5935\u3933"+ - "\u405E\u0000\u0000\u5946\u4834\u0000\u4272\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4864\u5A2D\u0000\u0000\u0000"+ - "\u0000\u4A7A\u0000\u0000\u0000\u4471\u0000\u0000"+ - "\u0000\u4B75\u0000\u593B\u3221\u436A\u0000\u0000"+ - "\u0000\u0000\u5944\u0000\u0000\u4334\u593E\u5945"+ - "\u5940\u5947\u5943\u0000\u5942\u476F\u0000\u593C"+ - "\u327D\u593A\u3571\u4273\u5936\u0000\u0000\u5939"+ - "\u3934\u405B\u0000\u3E37\u5941\u4752\u0000\u0000"+ - "\u3572\u3348\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3367\u3F21\u5949\u594E"+ - "\u0000\u594A\u0000\u377D\u0000\u594F\u3B22\u3969"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3D26\u593D"+ - "\u0000\u3B7D\u594C\u0000\u0000\u0000\u0000\u3B58"+ - "\u594D\u3044\u0000\u0000\u5948\u0000\u0000\u0000"+ - "\u0000\u4429\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3573\u0000\u0000\u0000\u0000\u0000\u3634"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u594B"+ - "\u3027\u0000\u0000\u3A43\u0000\u0000\u0000\u3F36"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4472\u0000\u0000\u4854\u5951\u415E"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u422A\u0000\u0000\u3B2B\u5952\u0000\u5954"+ - "\u5950\u0000\u0000\u0000\u0000\u4A61\u0000\u443D"+ - "\u0000\u0000\u0000\u0000\u415C\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4A7B"+ - "\u3C4E\u5960\u0000\u595F\u0000\u0000\u3F78\u0000"+ - "\u0000\u0000\u377E\u0000\u0000\u0000\u5959\u3E39"+ - "\u0000\u0000\u4668\u4731\u0000\u0000\u0000\u0000"+ - "\u5957\u0000\u0000\u415D\u0000\u0000\u0000\u0000"+ - "\u3C78\u595C\u0000\u0000\u3E38\u0000\u5956\u595B"+ - "\u0000\u0000\u4753\u0000\u0000\u0000\u5955\u0000"+ - "\u3721\u0000\u0000\u335D\u0000\u0000\u0000\u595D"+ - "\u4E2B\u3A4E\u4335\u595A\u0000\u405C\u0000\u3935"+ - "\u3F64\u3166\u413C\u5958\u3545\u0000\u0000\u0000"+ - "\u0000\u0000\u3747\u0000\u444F\u595E\u0000\u0000"+ - "\u0000\u0000\u0000\u415F\u0000\u0000\u5961\u0000"+ - "\u5963\u0000\u0000\u4237\u5969\u0000\u5964\u0000"+ - "\u0000\u5966\u0000\u0000\u0000\u0000\u0000\u4941"+ - "\u4473\u0000\u5967\u0000\u0000\u0000\u4D2C\u0000"+ - "\u0000\u0000\u4D48\u3439\u0000\u0000\u0000\u0000"+ - "\u0000\u302E\u0000\u5965\u0000\u0000\u0000\u0000"+ - "\u0000\u5962\u0000\u0000\u0000\u0000\u3478\u0000"+ - "\u0000\u0000\u0000\u0000\u3167\u0000\u5968\u0000"+ - "\u0000\u0000\u4D49\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u596C\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u423B\u0000\u5973"+ - "\u0000\u0000\u0000\u596D\u0000\u0000\u596A\u5971"+ - "\u0000\u0000\u0000\u0000\u5953\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u596E\u0000"+ - "\u5972\u0000\u0000\u0000\u4842\u456B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u596B\u0000\u596F\u0000"+ - "\u0000\u0000\u3748\u0000\u0000\u0000\u3A71\u0000"+ - "\u0000\u0000\u405D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5977\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4526\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5974"+ - "\u0000\u4B60\u0000\u0000\u0000\u0000\u0000\u5975"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5976\u0000"+ - "\u4C4E\u0000\u4022\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3762\u0000\u0000\u0000\u0000"+ - "\u597D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3B35\u597A\u0000\u5979\u0000\u0000"+ - "\u0000\u0000\u4732\u0000\u0000\u0000\u4635\u0000"+ - "\u0000\u0000\u0000\u0000\u4531\u597B\u0000\u0000"+ - "\u0000\u597C\u0000\u496F\u0000\u4745\u3B23\u0000"+ - "\u4071\u0000\u4B50\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3349\u0000\u5A25\u597E\u0000\u0000\u0000"+ - "\u0000\u4D4A\u5A27\u0000\u0000\u5A23\u0000\u5A24"+ - "\u0000\u0000\u0000\u0000\u0000\u4160\u0000\u0000"+ - "\u0000\u0000\u5A22\u0000\u593F\u0000\u0000\u0000"+ - "\u5A26\u0000\u5A21\u0000\u0000\u0000\u0000\u0000"+ - "\u5A2B\u5A2C\u4527\u5A2E\u0000\u0000\u3B24\u5A29"+ - "\u0000\u0000\u0000\u0000\u353C\u0000\u0000\u5A2F"+ - "\u0000\u5A28\u5A33\u0000\u5A32\u0000\u5A31\u0000"+ - "\u0000\u0000\u5A34\u0000\u0000\u5A36\u3E71\u0000"+ - "\u5A35\u0000\u0000\u0000\u0000\u5A39\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5A37\u0000\u0000\u0000\u5A38\u5970\u0000\u0000"+ - "\u0000\u0000\u0000\u5A3B\u5A3A\u0000\u0000\u0000"+ - "\u0000\u0000\u5978\u5A3C\u5A30\u0000\u0000\u3B59"+ - "\u0000\u0000\u0000\u0000\u5A3D\u5A3E\u5A40\u5A3F"+ - "\u5A41\u327E\u0000\u3936\u0000\u0000\u4A7C\u402F"+ - "\u0000\u0000\u0000\u0000\u0000\u384E\u0000\u0000"+ - "\u5A43\u0000\u0000\u0000\u0000\u5A46\u0000\u4952"+ - "\u0000\u355F\u0000\u0000\u0000\u5A45\u5A44\u4754"+ - "\u5A47\u3635\u0000\u0000\u0000\u5A49\u5A48\u0000"+ - "\u0000\u0000\u343A\u3B36\u0000\u0000\u4658\u0000"+ - "\u0000\u0000\u0000\u0000\u3749\u0000\u0000\u0000"+ - "\u3F74\u0000\u5A4A\u0000\u4030\u4528\u0000\u495F"+ - "\u5A4B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5A4C\u5A4D\u0000\u0000\u0000\u4A38"+ - "\u555D\u4046\u0000\u0000\u494C\u0000\u3A58\u0000"+ - "\u4865\u4843\u0000\u0000\u0000\u0000\u0000\u454D"+ - "\u0000\u4E41\u0000\u5A4F\u3C50\u0000\u0000\u5A50"+ - "\u0000\u3036\u0000\u0000\u3654\u404D\u0000\u4960"+ - "\u0000\u0000\u0000\u5A51\u3B42\u4347\u0000\u3B5B"+ - "\u3F37\u0000\u0000\u0000\u0000\u0000\u0000\u5A52"+ - "\u0000\u4A7D\u0000\u0000\u3177\u3B5C\u0000\u0000"+ - "\u0000\u5A55\u0000\u5A53\u5A56\u4E39\u5A54\u0000"+ - "\u0000\u0000\u0000\u407B\u5A57\u0000\u0000\u4232"+ - "\u0000\u0000\u5A58\u0000\u0000\u0000\u0000\u347A"+ - "\u0000\u5A5A\u0000\u5A59\u0000\u0000\u0000\u0000"+ - "\u5A5B\u5A5C\u347B\u0000\u0000\u467C\u4336\u356C"+ - "\u3B5D\u4161\u0000\u0000\u3D5C\u3030\u0000\u0000"+ - "\u0000\u5A5D\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3222\u5A61\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3937\u5A60\u0000\u0000\u3A2B\u3E3A"+ - "\u0000\u0000\u5A5F\u0000\u3E3B\u0000\u4C40\u3A2A"+ - "\u0000\u0000\u0000\u3057\u404E\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5A66\u0000\u0000\u4031"+ - "\u3147\u0000\u0000\u0000\u0000\u3D55\u0000\u4B66"+ - "\u3A72\u0000\u0000\u0000\u0000\u3E3C\u0000\u4027"+ - "\u0000\u0000\u0000\u0000\u5A65\u5A63\u5A64\u0000"+ - "\u0000\u0000\u0000\u0000\u436B\u0000\u0000\u5B26"+ - "\u0000\u5A6A\u3B7E\u3938\u5A68\u0000\u0000\u0000"+ - "\u0000\u5A69\u0000\u3F38\u0000\u0000\u0000\u5A67"+ - "\u0000\u0000\u3B2F\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5A6C\u5A6B\u5A70"+ - "\u0000\u0000\u5A71\u0000\u5A6D\u0000\u3322\u5A6E"+ - "\u5A6F\u4855\u0000\u0000\u0000\u0000\u4961\u374A"+ - "\u5A72\u0000\u0000\u0000\u4032\u0000\u3E3D\u0000"+ - "\u0000\u0000\u4352\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3647\u0000\u5A73\u5A77\u0000\u0000\u324B"+ - "\u5A74\u5A76\u0000\u0000\u0000\u0000\u5A75\u0000"+ - "\u0000\u3D6B\u0000\u0000\u0000\u0000\u4348\u3045"+ - "\u5A78\u0000\u0000\u0000\u0000\u5A79\u0000\u0000"+ - "\u0000\u0000\u442A\u0000\u0000\u0000\u4E71\u0000"+ - "\u0000\u0000\u0000\u3B43\u0000\u0000\u4A6B\u0000"+ - "\u0000\u0000\u0000\u0000\u4B3D\u0000\u0000\u0000"+ - "\u5B22\u5A7B\u0000\u0000\u5A7E\u0000\u5A7D\u0000"+ - "\u0000\u5A7A\u0000\u0000\u5B21\u0000\u0000\u465E"+ - "\u0000\u5A7C\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5B23\u0000"+ - "\u0000\u3D6C\u5B24\u0000\u4D4B\u4778\u0000\u0000"+ - "\u5B25\u0000\u0000\u0000\u0000\u0000\u5B27\u0000"+ - "\u0000\u5B28\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5B29\u0000\u364A\u3148\u3939\u5B2A\u0000\u5B2B"+ - "\u3D71\u4162\u0000\u0000\u5258\u413E\u413D\u4258"+ - "\u3A47\u0000\u0000\u5072\u0000\u0000\u0000\u0000"+ - "\u376E\u4D2D\u0000\u4A7E\u0000\u497E\u0000\u5B2C"+ - "\u0000\u0000\u0000\u0000\u3A73\u443F\u5B2D\u4F2F"+ - "\u0000\u0000\u0000\u4B3E\u0000\u442B\u5B2E\u347C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5B2F\u5B30"+ - "\u4C5A\u0000\u4C24\u4B76\u4B5C\u3B25\u5B32\u0000"+ - "\u0000\u3C6B\u0000\u0000\u4B51\u0000\u5B34\u5B37"+ - "\u5B36\u0000\u3479\u0000\u0000\u3560\u0000\u5B33"+ - "\u0000\u5B35\u0000\u0000\u0000\u0000\u5B38\u0000"+ - "\u0000\u3F79\u0000\u0000\u0000\u0000\u4D7B\u3049"+ - "\u3A60\u423C\u0000\u3C5D\u0000\u0000\u3E73\u0000"+ - "\u0000\u5B3B\u0000\u0000\u454E\u0000\u5B39\u422B"+ - "\u5B3A\u3E72\u4C5D\u5B3C\u5B3D\u4D68\u0000\u0000"+ - "\u0000\u0000\u5B42\u0000\u0000\u393A\u0000\u4755"+ - "\u5B3F\u456C\u5A5E\u5A62\u0000\u354F\u0000\u4747"+ - "\u0000\u0000\u0000\u0000\u5B41\u0000\u3E3E\u4844"+ - "\u0000\u0000\u0000\u0000\u0000\u5B47\u0000\u487A"+ - "\u0000\u5B3E\u0000\u5B44\u5B43\u0000\u0000\u0000"+ - "\u404F\u0000\u0000\u0000\u0000\u4B6D\u0000\u4E53"+ - "\u0000\u0000\u4B67\u0000\u324C\u3B5E\u0000\u0000"+ - "\u4F48\u5B46\u3F75\u0000\u0000\u0000\u5B45\u0000"+ - "\u0000\u5B40\u0000\u0000\u0000\u0000\u0000\u384F"+ - "\u0000\u0000\u0000\u5B4C\u5B4A\u0000\u324D\u5B48"+ - "\u5B4E\u5B54\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4248\u0000\u0000\u4A41\u0000\u5B56\u0000"+ - "\u0000\u0000\u4922\u0000\u0000\u0000\u5B55\u4770"+ - "\u4B3F\u343B\u0000\u4077\u3D40\u0000\u0000\u0000"+ - "\u4453\u0000\u4D2E\u0000\u0000\u5B51\u5B50\u0000"+ - "\u0000\u0000\u5B52\u0000\u5B4F\u0000\u0000\u5B57"+ - "\u0000\u5B4D\u0000\u0000\u5B4B\u0000\u5B53\u5B49"+ - "\u0000\u436C\u0000\u4C78\u3C46\u3A74\u0000\u0000"+ - "\u0000\u0000\u0000\u3A3A\u0000\u0000\u4B6F\u3341"+ - "\u0000\u0000\u444E\u464A\u3149\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4072\u0000\u0000\u4034\u372A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5B59\u0000"+ - "\u0000\u393B\u337C\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5B5B\u3374\u5B61\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5B5E\u0000\u4073\u0000\u0000\u0000"+ - "\u334B\u3A2C\u0000\u0000\u334A\u3A4F\u0000\u0000"+ - "\u5B5C\u3765\u374B\u456D\u0000\u0000\u5B5A\u0000"+ - "\u3046\u0000\u0000\u0000\u0000\u5B5D\u5B5F\u0000"+ - "\u364D\u372C\u0000\u343C\u354B\u0000\u0000\u0000"+ - "\u0000\u5B62\u0000\u0000\u3A79\u4B71\u0000\u3B37"+ - "\u0000\u0000\u0000\u5B63\u0000\u0000\u0000\u4930"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5B6F\u0000\u3233\u5B64"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5B75\u5B65"+ - "\u0000\u4E42\u0000\u5B6C\u0000\u475F\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5B74\u0000\u5B67"+ - "\u0000\u0000\u0000\u3034\u5B69\u0000\u0000\u393C"+ - "\u0000\u0000\u0000\u5B6B\u0000\u5B6A\u0000\u5B66"+ - "\u5B71\u0000\u3E3F\u0000\u0000\u0000\u546D\u3868"+ - "\u4D7C\u0000\u0000\u0000\u0000\u5B68\u0000\u4474"+ - "\u3323\u3A2D\u0000\u5B60\u0000\u5B70\u3361\u0000"+ - "\u0000\u5B6E\u5B72\u0000\u456E\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u347E\u0000\u5C32\u0000"+ - "\u0000\u4C49\u5B77\u347D\u0000\u5B7E\u0000\u0000"+ - "\u0000\u0000\u4B40\u0000\u5C21\u5C23\u0000\u5C27"+ - "\u5B79\u0000\u432A\u0000\u0000\u0000\u0000\u456F"+ - "\u5C2B\u5B7C\u0000\u5C28\u0000\u0000\u0000\u5C22"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3F39\u5C2C"+ - "\u0000\u0000\u4033\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5C2A\u343D\u0000\u0000\u0000\u0000\u0000"+ - "\u4F50\u5B76\u0000\u0000\u5C26\u3058\u0000\u0000"+ - "\u5B78\u0000\u0000\u4C3A\u5B7D\u3F22\u4447\u5B73"+ - "\u0000\u0000\u5C25\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3F7A\u5C2F\u3371\u3821\u0000\u0000\u0000"+ - "\u0000\u5C31\u5B7A\u5C30\u0000\u5C29\u5B7B\u0000"+ - "\u5C2D\u0000\u5C2E\u0000\u0000\u0000\u0000\u0000"+ - "\u5C3F\u0000\u0000\u0000\u464E\u0000\u5C24\u0000"+ - "\u0000\u5C3B\u0000\u0000\u0000\u5C3D\u0000\u4458"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4D4C\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4976\u5C38\u424A\u0000\u0000"+ - "\u0000\u5C3E\u413F\u0000\u5C35\u5C42\u5C41\u0000"+ - "\u466F\u5C40\u466A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5C44\u5C37\u0000\u3648\u5C3A\u3D5D"+ - "\u0000\u0000\u0000\u4760\u5C3C\u364B\u0000\u5C34"+ - "\u5C36\u5C33\u0000\u0000\u4F30\u335A\u5C39\u0000"+ - "\u0000\u5C43\u3335\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3A67\u0000\u0000\u0000\u315D\u0000"+ - "\u0000\u5C54\u0000\u0000\u4F31\u5C57\u0000\u0000"+ - "\u0000\u0000\u0000\u3F3A\u5C56\u0000\u0000\u0000"+ - "\u5C55\u0000\u0000\u0000\u0000\u0000\u0000\u5C52"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5C46\u0000"+ - "\u0000\u5C63\u5C45\u0000\u5C58\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5C50\u0000\u0000\u5C4B\u5C48"+ - "\u0000\u5C49\u0000\u5C51\u0000\u0000\u0000\u7422"+ - "\u0000\u0000\u5C4E\u393D\u4448\u4164\u5C4C\u0000"+ - "\u5C47\u0000\u0000\u5C4A\u0000\u0000\u0000\u0000"+ - "\u4D4D\u4B6A\u0000\u0000\u0000\u5C4F\u5C59\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5C61"+ - "\u5C5A\u0000\u0000\u5C67\u0000\u5C65\u0000\u0000"+ - "\u0000\u0000\u5C60\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5C5F\u0000\u4450\u0000\u4165\u0000\u5C5D"+ - "\u0000\u0000\u5C5B\u0000\u0000\u5C62\u0000\u0000"+ - "\u0000\u0000\u5C68\u4875\u5C6E\u0000\u0000\u0000"+ - "\u0000\u0000\u5C69\u5C6C\u5C66\u0000\u0000\u4374"+ - "\u0000\u4938\u0000\u5C5C\u0000\u0000\u5C64\u3E40"+ - "\u0000\u4C4F\u5C78\u5C6B\u0000\u0000\u0000\u0000"+ - "\u0000\u3822\u3223\u335F\u0000\u0000\u5C53\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3E41\u5C70\u0000"+ - "\u5C77\u3C79\u3372\u0000\u0000\u432E\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5C6D\u0000\u0000\u5C72"+ - "\u5C76\u0000\u0000\u3636\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u354C\u5C74\u0000\u0000\u0000\u0000\u0000\u3521"+ - "\u0000\u464B\u5C73\u0000\u0000\u0000\u5C75\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5C6F\u0000\u0000\u0000\u0000\u0000"+ - "\u5C71\u0000\u0000\u0000\u0000\u0000\u0000\u3360"+ - "\u4349\u0000\u0000\u0000\u5C7C\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5C7A\u3869\u0000"+ - "\u5C79\u0000\u0000\u0000\u0000\u0000\u0000\u5D21"+ - "\u0000\u0000\u0000\u0000\u5B58\u0000\u0000\u0000"+ - "\u5C7B\u0000\u5C7D\u5C7E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5D2C\u0000\u5D28\u0000\u5B6D\u0000"+ - "\u0000\u0000\u0000\u5D27\u0000\u0000\u0000\u0000"+ - "\u5D26\u0000\u0000\u5D23\u0000\u0000\u0000\u0000"+ - "\u0000\u5C6A\u5D25\u5D24\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5D2A\u0000\u4F26\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5D2D\u367B\u0000\u0000\u5D29\u5D2B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4827\u0000\u5D2E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5D32\u5D2F\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4D73\u5D30\u0000\u0000"+ - "\u0000\u0000\u5C5E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5D33\u0000\u0000\u0000\u5D34\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3135\u0000\u5D36"+ - "\u3767\u3C21\u0000\u3655\u0000\u0000\u0000\u3224"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4D5F\u0000\u0000\u0000\u0000\u5D38"+ - "\u5D37\u5D3A\u353D\u0000\u0000\u3656\u343E\u0000"+ - "\u0000\u0000\u0000\u5D3D\u0000\u0000\u0000\u5D3C"+ - "\u0000\u5D3E\u0000\u0000\u324E\u0000\u4337\u0000"+ - "\u5D3F\u0000\u0000\u343F\u5D41\u0000\u0000\u0000"+ - "\u0000\u5D40\u0000\u5D42\u0000\u0000\u0000\u5D43"+ - "\u0000\u5D44\u3B5F\u4035\u3A21\u0000\u4970\u0000"+ - "\u0000\u4A62\u4F44\u0000\u0000\u0000\u0000\u3B75"+ - "\u0000\u0000\u0000\u3A50\u4E72\u0000\u0000\u0000"+ - "\u5D45\u5D46\u0000\u3B60\u0000\u0000\u0000\u5D47"+ - "\u5D48\u0000\u0000\u5D4A\u5D49\u0000\u4B58\u0000"+ - "\u0000\u3D5E\u3C6C\u3B44\u0000\u5D4B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5D4D\u3F23\u0000"+ - "\u5D4C\u0000\u0000\u0000\u0000\u0000\u5D4E\u0000"+ - "\u0000\u0000\u0000\u0000\u5D4F\u0000\u0000\u0000"+ - "\u0000\u0000\u5D50\u5D51\u0000\u0000\u0000\u5D52"+ - "\u0000\u5D54\u5D53\u5D55\u3225\u434A\u0000\u5D56"+ - "\u0000\u0000\u3B26\u334C\u5D57\u0000\u0000\u4542"+ - "\u544C\u0000\u0000\u0000\u0000\u3523\u5D58\u0000"+ - "\u0000\u0000\u0000\u5D59\u0000\u4A6C\u4B68\u0000"+ - "\u0000\u0000\u4647\u5D5A\u4866\u0000\u0000\u0000"+ - "\u487B\u0000\u0000\u4C53\u0000\u0000\u0000\u5D5B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5D5D\u5D5C\u0000\u0000\u5D5F"+ - "\u0000\u0000\u0000\u5D5E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5D61\u0000\u0000\u0000\u0000\u0000\u0000\u3B61"+ - "\u0000\u4C31\u0000\u5D62\u5D63\u0000\u0000\u3524"+ - "\u0000\u0000\u0000\u5D64\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5D66\u5D65\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3F65\u0000\u0000\u4939"+ - "\u314A\u0000\u0000\u0000\u0000\u0000\u4845\u0000"+ - "\u4475\u3D41\u3561\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4846\u0000"+ - "\u3C2E\u0000\u0000\u0000\u0000\u5D68\u0000\u3440"+ - "\u0000\u0000\u3178\u0000\u0000\u4672\u5D67\u393E"+ - "\u4353\u0000\u5D69\u0000\u0000\u0000\u0000\u0000"+ - "\u5D71\u0000\u5D6A\u0000\u0000\u0000\u0000\u0000"+ - "\u4241\u0000\u3562\u5D72\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3768\u0000\u0000\u3525\u5D70\u0000"+ - "\u0000\u5D6E\u5D6B\u4D60\u0000\u0000\u0000\u0000"+ - "\u4440\u0000\u0000\u0000\u4659\u5D6C\u0000\u0000"+ - "\u5D74\u0000\u5D73\u3723\u0000\u0000\u322D\u0000"+ - "\u0000\u3A3B\u5D6D\u5D6F\u0000\u0000\u0000\u0000"+ - "\u0000\u4B57\u4274\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4B77\u0000\u0000\u5D7C\u0000"+ - "\u0000\u5D7D\u0000\u324F\u0000\u0000\u0000\u0000"+ - "\u4A28\u4C7D\u5E21\u3C23\u3E42\u5D78\u5D7E\u3168"+ - "\u0000\u3637\u0000\u0000\u5D75\u5D7A\u0000\u0000"+ - "\u0000\u4074\u4771\u0000\u4867\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5D77\u0000\u4B21\u0000\u5D79"+ - "\u0000\u5E24\u0000\u5E22\u0000\u5D7B\u0000\u0000"+ - "\u0000\u4B22\u4748\u3563\u0000\u4525\u0000\u0000"+ - "\u436D\u0000\u5E25\u0000\u0000\u0000\u0000\u5E23"+ - "\u4259\u5D76\u0000\u314B\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4D4E\u5E30\u0000\u0000\u0000"+ - "\u0000\u0000\u5E2F\u0000\u0000\u0000\u0000\u4076"+ - "\u0000\u5E2C\u0000\u4D6C\u0000\u0000\u4636\u5E26"+ - "\u0000\u0000\u0000\u0000\u0000\u4445\u0000\u0000"+ - "\u0000\u314C\u393F\u5E29\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3D27\u5E2E\u0000\u5E2D\u5E28\u0000"+ - "\u5E2B\u0000\u0000\u3368\u0000\u5E2A\u4749\u0000"+ - "\u0000\u4E2E\u0000\u0000\u3E74\u4075\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5E36\u5E34\u0000\u494D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5E31\u5E33\u0000\u313A\u0000"+ - "\u0000\u3940\u4F32\u0000\u333D\u0000\u4962\u0000"+ - "\u0000\u0000\u0000\u0000\u4D61\u0000\u0000\u3324"+ - "\u3F3B\u5E35\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5E3A\u0000\u0000"+ - "\u3E43\u0000\u0000\u0000\u4D30\u0000\u5E37\u0000"+ - "\u0000\u0000\u0000\u5E32\u0000\u5E38\u0000\u0000"+ - "\u0000\u4E5E\u0000\u4573\u4642\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3336"+ - "\u0000\u0000\u3155\u0000\u0000\u5E3E\u0000\u0000"+ - "\u5E41\u0000\u0000\u0000\u4E43\u0000\u0000\u0000"+ - "\u4D64\u0000\u0000\u0000\u0000\u5E48\u5E42\u5E3F"+ - "\u0000\u0000\u0000\u4E54\u5E45\u0000\u0000\u0000"+ - "\u0000\u3D4A\u5E47\u0000\u0000\u5E4C\u0000\u0000"+ - "\u4571\u5E4A\u0000\u0000\u0000\u0000\u5E44\u0000"+ - "\u0000\u4338\u0000\u0000\u5E4B\u0000\u5E40\u0000"+ - "\u5E46\u0000\u5E4D\u307C\u5E43\u0000\u5E4E\u0000"+ - "\u0000\u3F3C\u0000\u3D5F\u0000\u4A25\u0000\u3A2E"+ - "\u0000\u5E3B\u5E49\u453A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4036\u0000\u3369"+ - "\u3A51\u3E44\u5E3D\u3D42\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u374C\u0000\u5E3C\u0000\u0000"+ - "\u0000\u5E52\u3D6D\u383A\u0000\u5E61\u0000\u5E5B"+ - "\u3574\u454F\u0000\u5E56\u5E5F\u302F\u3132\u0000"+ - "\u0000\u3239\u0000\u5E58\u422C\u5E4F\u5E51\u3941"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5E62\u0000\u5E5D\u0000\u0000\u0000\u5E55\u0000"+ - "\u0000\u0000\u0000\u5E5C\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4C2B\u0000\u0000\u5E5A\u5E5E\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3850\u0000"+ - "\u3E45\u0000\u0000\u4339\u0000\u0000\u0000\u5E54"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4D2F"+ - "\u0000\u0000\u0000\u5E57\u0000\u0000\u5E50\u4572"+ - "\u0000\u0000\u5E53\u0000\u0000\u0000\u5E59\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4F51\u3C3E"+ - "\u4B7E\u0000\u5E63\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u482E\u0000\u0000\u5E6F"+ - "\u383B\u0000\u0000\u0000\u0000\u0000\u3D60\u0000"+ - "\u5E65\u0000\u0000\u0000\u4E2F\u3942\u0000\u5E72"+ - "\u0000\u0000\u306E\u0000\u0000\u5E70\u0000\u0000"+ - "\u0000\u0000\u5E64\u0000\u0000\u0000\u0000\u5E6A"+ - "\u0000\u0000\u5E6C\u0000\u0000\u0000\u4D4F\u5E67"+ - "\u0000\u0000\u452E\u0000\u0000\u5E69\u0000\u0000"+ - "\u0000\u0000\u5E71\u0000\u5E6B\u4C47\u0000\u0000"+ - "\u0000\u5E66\u0000\u3C22\u5E7E\u0000\u0000\u0000"+ - "\u0000\u336A\u0000\u5E68\u5E6D\u5E6E\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u426C\u425A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5E76\u0000\u0000\u5E7C"+ - "\u0000\u0000\u5E7A\u0000\u4529\u0000\u0000\u5F23"+ - "\u5E77\u0000\u0000\u0000\u0000\u0000\u5E78\u5E60"+ - "\u0000\u3579\u493A\u0000\u0000\u0000\u3C3F\u0000"+ - "\u0000\u3977\u0000\u0000\u0000\u0000\u0000\u4F33"+ - "\u0000\u5E74\u0000\u5F22\u3169\u4166\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4779\u0000\u3441\u4E7A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4C21\u4452\u0000\u0000\u0000"+ - "\u0000\u5E7B\u5E7D\u0000\u0000\u0000\u0000\u0000"+ - "\u4132\u0000\u0000\u0000\u0000\u0000\u5F21\u5E79"+ - "\u0000\u5E73\u0000\u0000\u0000\u3443\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3769\u0000\u0000\u0000"+ - "\u5F2F\u0000\u0000\u5F2A\u4078\u0000\u0000\u3363"+ - "\u0000\u0000\u0000\u0000\u3D61\u0000\u5F33\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5F2C\u442C\u5F29"+ - "\u4459\u0000\u0000\u0000\u5F4C\u0000\u0000\u0000"+ - "\u5F26\u0000\u5F25\u0000\u5F2E\u0000\u0000\u0000"+ - "\u5F28\u5F27\u5F2D\u0000\u4021\u0000\u5F24\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5F30\u0000"+ - "\u0000\u5F31\u0000\u0000\u0000\u0000\u0000\u3442"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5F36\u0000\u5F35\u5F37\u0000\u0000\u0000"+ - "\u0000\u0000\u5F3A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4543\u0000\u5F34\u0000\u0000\u0000\u0000"+ - "\u0000\u5F38\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3763\u4279\u5F32\u473B\u0000\u0000\u5F39\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5F3E\u5F3C\u0000\u0000"+ - "\u5F3F\u0000\u0000\u5F42\u0000\u0000\u0000\u5F3B"+ - "\u396A\u4728\u0000\u0000\u5E39\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4D74\u5F3D\u0000\u5F41\u4275"+ - "\u0000\u5F40\u0000\u5F2B\u0000\u0000\u6F69\u0000"+ - "\u0000\u0000\u5F45\u0000\u0000\u0000\u5F49\u0000"; - - private final static String innerIndex3= - "\u0000\u5F47\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5F43\u0000\u5F44\u0000\u0000\u0000\u5F48"+ - "\u0000\u5F46\u0000\u0000\u0000\u494E\u0000\u0000"+ - "\u5F4E\u0000\u5F4B\u5F4A\u0000\u5F4D\u4654\u5F4F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4375\u426D"+ - "\u0000\u0000\u0000\u0000\u4025\u0000\u0000\u0000"+ - "\u5F50\u0000\u5F52\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5F51\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5E75\u0000\u0000\u0000"+ - "\u0000\u5F53\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4667\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5F54\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3250\u0000\u0000\u0000\u4574"+ - "\u3325\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3564\u0000\u0000\u0000\u3C5E\u3A52\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4F27\u3F66\u0000\u0000\u0000\u316A\u0000"+ - "\u0000\u0000\u5F56\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5F55\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5F59\u433A\u5F5C\u5F57"+ - "\u0000\u0000\u0000\u5F5B\u0000\u0000\u0000\u0000"+ - "\u5F5A\u4540\u3059\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4E75\u0000\u0000\u5F5E\u0000\u0000\u0000\u3128"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5F60\u0000\u0000\u0000\u5F5F\u0000\u5F5D"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5F58\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4B23\u0000\u0000\u0000\u5F62\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5F61\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u316B\u0000\u0000\u0000"+ - "\u0000\u5F64\u4A32\u0000\u5F63\u0000\u0000\u0000"+ - "\u0000\u4C35\u0000\u0000\u0000\u0000\u3E47\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4133\u0000"+ - "\u0000\u0000\u0000\u0000\u3E46\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4E7B\u0000\u0000\u5F6A\u0000\u4079\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5F66\u5F6B\u0000"+ - "\u0000\u316C\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5F69\u0000\u4761\u5F65\u5F68\u3E48"+ - "\u0000\u4851\u0000\u0000\u5F6C\u0000\u3C51\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u407A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5F6F\u0000\u0000\u0000"+ - "\u5F67\u0000\u3727\u0000\u0000\u0000\u0000\u5F6D"+ - "\u0000\u0000\u0000\u0000\u4D50\u5F70\u0000\u0000"+ - "\u0000\u7426\u0000\u0000\u0000\u0000\u0000\u3D4F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5F71\u0000\u0000\u0000\u5F72\u0000\u0000\u0000"+ - "\u0000\u472E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5F74\u0000\u0000\u0000\u0000\u5F75\u0000"+ - "\u0000\u0000\u0000\u4733\u0000\u0000\u0000\u0000"+ - "\u4575\u5F77\u0000\u0000\u0000\u0000\u5F79\u0000"+ - "\u4E55\u0000\u5F76\u0000\u5F78\u316D\u0000\u5F73"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u535B"+ - "\u5F7A\u0000\u0000\u0000\u0000\u4167\u3B38\u5F7C"+ - "\u0000\u0000\u0000\u0000\u5F7B\u3F24\u5259\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5F7D\u0000\u0000"+ - "\u0000\u6021\u0000\u5F6E\u5F7E\u0000\u0000\u6022"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u477A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6023\u0000\u0000"+ - "\u6024\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6025\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6026\u0000\u445E\u0000\u6028\u6027\u0000\u0000"+ - "\u6029\u0000\u602A\u0000\u0000\u3C5F\u4963\u0000"+ - "\u0000\u0000\u4C6C\u602B\u602C\u4156\u3C24\u602D"+ - "\u602E\u0000\u0000\u0000\u0000\u0000\u602F\u4A52"+ - "\u4847\u0000\u0000\u6030\u4757\u0000\u0000\u0000"+ - "\u0000\u0000\u442D\u0000\u0000\u0000\u0000\u0000"+ - "\u6031\u3267\u0000\u356D\u0000\u4C46\u0000\u4C36"+ - "\u0000\u3234\u4F34\u0000\u0000\u0000\u0000\u4B52"+ - "\u0000\u4A2A\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4037\u0000\u6032\u0000\u0000\u0000"+ - "\u0000\u4643\u0000\u0000\u0000\u3823\u6033\u0000"+ - "\u3A54\u6035\u6034\u0000\u0000\u0000\u0000\u6036"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6037\u0000\u0000\u0000\u6038\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u353E\u0000\u6039\u0000\u0000\u0000\u0000\u603A"+ - "\u0000\u0000\u0000\u0000\u3824\u0000\u0000\u4848"+ - "\u0000\u0000\u603C\u0000\u0000\u0000\u3E75\u0000"+ - "\u0000\u603B\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3638\u603D\u603F\u0000\u603E\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6040\u0000"+ - "\u3851\u0000\u6041\u0000\u0000\u0000\u0000\u3669"+ - "\u0000\u4140\u0000\u397D\u0000\u0000\u0000\u0000"+ - "\u6043\u6044\u6042\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3C6D\u0000\u0000\u4648\u3639\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6046"+ - "\u432C\u6045\u0000\u0000\u4F35\u4762\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6049\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u604B\u6048"+ - "\u0000\u0000\u0000\u4C54\u604A\u604C\u0000\u4E44"+ - "\u0000\u0000\u0000\u0000\u0000\u6050\u0000\u0000"+ - "\u0000\u604F\u4376\u472D\u0000\u0000\u3825\u604E"+ - "\u0000\u0000\u0000\u0000\u604D\u0000\u4D31\u4D32"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6051\u316E"+ - "\u0000\u0000\u0000\u0000\u3976\u3B62\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6052\u6053"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6055"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3D43\u0000\u0000\u0000\u0000"+ - "\u6057\u0000\u6056\u0000\u0000\u0000\u0000\u0000"+ - "\u6058\u0000\u334D\u0000\u0000\u605A\u0000\u0000"+ - "\u6059\u0000\u605C\u605B\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u383C\u0000\u0000\u4E28"+ - "\u0000\u364C\u0000\u3226\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u366A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3461\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4E68\u605E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6060\u0000\u0000\u0000\u0000"+ - "\u6061\u0000\u3251\u0000\u0000\u0000\u0000\u0000"+ - "\u605D\u0000\u3B39\u0000\u0000\u4441\u605F\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6064\u0000"+ - "\u3C6E\u0000\u0000\u0000\u0000\u6062\u0000\u0000"+ - "\u0000\u0000\u373E\u0000\u0000\u4849\u6063\u0000"+ - "\u0000\u607E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6069\u0000\u0000\u0000\u0000\u0000\u383D\u0000"+ - "\u0000\u0000\u0000\u3565\u0000\u6066\u4D7D\u0000"+ - "\u0000\u4E30\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4276\u0000\u0000\u6068\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u606A\u4E56\u3657\u487C\u474A\u0000"+ - "\u0000\u0000\u606B\u0000\u0000\u0000\u0000\u606D"+ - "\u0000\u6070\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u606C\u0000\u0000"+ - "\u0000\u606F\u386A\u314D\u6071\u0000\u3F70\u606E"+ - "\u4E5C\u0000\u0000\u6074\u7424\u0000\u0000\u0000"+ - "\u0000\u6072\u6075\u0000\u0000\u0000\u0000\u6067"+ - "\u6073\u0000\u0000\u3A3C\u0000\u0000\u6076\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6077\u0000"+ - "\u0000\u0000\u0000\u4D7E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6078\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6079\u0000"+ - "\u0000\u0000\u6065\u0000\u0000\u0000\u0000\u607A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3444\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3C25\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u607B\u0000\u0000\u0000\u0000\u607C"+ - "\u0000\u0000\u0000\u0000\u607D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u313B\u0000\u0000\u0000"+ - "\u6121\u0000\u493B\u6122\u0000\u0000\u3424\u6123"+ - "\u0000\u6124\u0000\u0000\u0000\u0000\u6125\u0000"+ - "\u6127\u6128\u6126\u0000\u0000\u0000\u4953\u612A"+ - "\u6129\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u612C\u612B\u612D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u612E\u6130\u612F\u0000"+ - "\u0000\u3979\u0000\u6132\u0000\u6131\u0000\u0000"+ - "\u3445\u0000\u3F53\u0000\u453C\u0000\u6133\u4038"+ - "\u0000\u0000\u0000\u3B3A\u0000\u3179\u6134\u0000"+ - "\u4D51\u0000\u0000\u4A63\u6135\u0000\u0000\u0000"+ - "\u4544\u4D33\u3943\u3F3D\u0000\u0000\u0000\u434B"+ - "\u5234\u0000\u442E\u3268\u6136\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6137\u0000\u613C\u0000"+ - "\u0000\u613A\u6139\u5A42\u3326\u6138\u0000\u305A"+ - "\u0000\u482A\u0000\u0000\u484A\u0000\u0000\u0000"+ - "\u0000\u4E31\u613D\u613B\u435C\u4026\u0000\u0000"+ - "\u482B\u0000\u492D\u0000\u613F\u4E2C\u374D\u6140"+ - "\u0000\u613E\u4856\u6141\u0000\u6142\u0000\u0000"+ - "\u305B\u0000\u0000\u3E76\u6147\u0000\u6144\u466D"+ - "\u6143\u0000\u0000\u0000\u0000\u0000\u0000\u3526"+ - "\u0000\u0000\u614A\u0000\u0000\u0000\u6145\u6146"+ - "\u0000\u6149\u6148\u4925\u0000\u0000\u4142\u4141"+ - "\u0000\u353F\u0000\u0000\u614B\u0000\u0000\u0000"+ - "\u0000\u0000\u614C\u0000\u0000\u614D\u0000\u0000"+ - "\u0000\u0000\u0000\u614F\u0000\u614E\u0000\u0000"+ - "\u0000\u0000\u0000\u3156\u0000\u0000\u0000\u0000"+ - "\u0000\u6157\u4868\u6151\u0000\u6153\u0000\u0000"+ - "\u6155\u3F3E\u0000\u0000\u6156\u6154\u3C40\u0000"+ - "\u0000\u0000\u6150\u6152\u0000\u4942\u0000\u3E49"+ - "\u0000\u0000\u6159\u0000\u0000\u6158\u0000\u0000"+ - "\u0000\u0000\u615A\u0000\u3C26\u3A2F\u0000\u0000"+ - "\u4577\u615B\u0000\u444B\u0000\u0000\u615D\u0000"+ - "\u0000\u0000\u4E21\u615C\u0000\u0000\u0000\u0000"+ - "\u0000\u4169\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6162\u0000\u6164\u6165\u4354\u0000\u0000\u0000"+ - "\u0000\u0000\u6163\u0000\u6160\u0000\u615E\u615F"+ - "\u0000\u6161\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6168\u0000\u6166\u0000\u6167\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6169"+ - "\u616B\u616C\u616D\u0000\u616E\u0000\u0000\u616A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6170\u0000\u0000\u0000\u616F\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6171\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4E45\u0000\u0000\u0000\u6174\u6172"+ - "\u6173\u0000\u0000\u0000\u3462\u0000\u0000\u0000"+ - "\u0000\u0000\u4C7E\u0000\u0000\u0000\u4A4A\u0000"+ - "\u6176\u0000\u0000\u0000\u6175\u0000\u0000\u0000"+ - "\u0000\u6177\u6178\u0000\u0000\u0000\u0000\u617C"+ - "\u6179\u617A\u617B\u0000\u617D\u0000\u0000\u0000"+ - "\u617E\u0000\u6221\u0000\u0000\u0000\u6222\u0000"+ - "\u6223\u0000\u482F\u4550\u6224\u4772\u4934\u0000"+ - "\u6225\u0000\u0000\u6226\u452A\u0000\u3327\u3944"+ - "\u6227\u0000\u0000\u6228\u0000\u0000\u6229\u0000"+ - "\u3B29\u0000\u0000\u622B\u0000\u0000\u622A\u0000"+ - "\u0000\u622C\u622D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4869\u0000"+ - "\u622E\u0000\u0000\u0000\u622F\u0000\u0000\u7369"+ - "\u6230\u6231\u6232\u0000\u0000\u0000\u0000\u3B2E"+ - "\u0000\u0000\u6233\u4756\u0000\u0000\u4B5F\u0000"+ - "\u314E\u0000\u3157\u0000\u0000\u6234\u0000\u0000"+ - "\u0000\u0000\u6236\u0000\u0000\u0000\u6235\u4570"+ - "\u0000\u0000\u0000\u4039\u5D39\u0000\u6237\u4C41"+ - "\u0000\u6238\u0000\u3446\u4857\u6239\u0000\u623A"+ - "\u0000\u0000\u623B\u0000\u0000\u0000\u4C5C\u0000"+ - "\u0000\u0000\u4C55\u0000\u443E\u0000\u0000\u0000"+ - "\u416A\u0000\u0000\u623D\u0000\u0000\u3D62\u0000"+ - "\u0000\u3E4A\u0000\u0000\u6240\u0000\u0000\u623F"+ - "\u623E\u487D\u0000\u3447\u3829\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6246\u0000\u0000\u6243\u3F3F"+ - "\u4C32\u0000\u0000\u0000\u6242\u6244\u6245\u0000"+ - "\u0000\u6241\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6247"+ - "\u6248\u0000\u442F\u0000\u3463\u0000\u0000\u0000"+ - "\u4365\u0000\u0000\u0000\u0000\u0000\u0000\u6249"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u624A\u624D\u0000\u0000\u0000\u0000"+ - "\u0000\u3F67\u0000\u4644\u0000\u624E\u4B53\u0000"+ - "\u624B\u0000\u0000\u624C\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6251\u0000\u0000\u0000\u0000\u6250\u624F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6253\u0000\u0000\u6252\u0000"+ - "\u0000\u6254\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6256\u0000"+ - "\u6255\u0000\u0000\u0000\u0000\u4A4D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3D56\u4E46\u0000\u0000"+ - "\u6257\u0000\u0000\u4637\u0000\u0000\u6258\u0000"+ - "\u0000\u6259\u0000\u625D\u625B\u625C\u0000\u625A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u625E"+ - "\u0000\u0000\u0000\u0000\u0000\u625F\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6260"+ - "\u0000\u0000\u6261\u4C37\u6262\u0000\u0000\u0000"+ - "\u0000\u0000\u4C70\u6263\u0000\u434E\u0000\u476A"+ - "\u0000\u366B\u0000\u0000\u0000\u433B\u6264\u363A"+ - "\u0000\u0000\u0000\u4050\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6265\u0000\u0000\u0000"+ - "\u0000\u0000\u3A3D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6266\u0000\u0000\u0000"+ - "\u0000\u0000\u6267\u0000\u3826\u3A55\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6269\u0000\u0000\u0000\u0000\u4556\u3A56\u354E"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4B24\u0000\u474B\u0000\u0000\u0000"+ - "\u0000\u0000\u4557\u0000\u0000\u0000\u0000\u395C"+ - "\u0000\u0000\u0000\u0000\u0000\u626B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3E4B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4E32\u3945\u0000\u0000\u3827"+ - "\u0000\u0000\u4823\u0000\u626D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u626F\u0000\u0000\u0000"+ - "\u0000\u386B\u0000\u0000\u0000\u0000\u626E\u4476"+ - "\u0000\u0000\u0000\u0000\u6271\u3337\u626C\u0000"+ - "\u0000\u486A\u0000\u3130\u0000\u3A6C\u0000\u4F52"+ - "\u0000\u0000\u6270\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6272\u0000\u0000\u0000\u4A4B"+ - "\u0000\u4059\u6274\u0000\u0000\u0000\u0000\u6275"+ - "\u0000\u0000\u0000\u0000\u0000\u6273\u0000\u0000"+ - "\u0000\u0000\u334E\u0000\u627B\u0000\u627A\u0000"+ - "\u0000\u3C27\u0000\u0000\u0000\u627C\u6277\u0000"+ - "\u0000\u0000\u627D\u6278\u0000\u0000\u0000\u0000"+ - "\u4858\u6276\u0000\u0000\u6279\u0000\u0000\u0000"+ - "\u0000\u0000\u6322\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6321"+ - "\u4B61\u0000\u0000\u0000\u627E\u0000\u0000\u306B"+ - "\u0000\u0000\u0000\u0000\u6324\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6323\u0000\u0000"+ - "\u0000\u3E4C\u0000\u0000\u0000\u0000\u0000\u6325"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4143\u0000"+ - "\u0000\u6327\u6326\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6328\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6268\u0000"+ - "\u0000\u0000\u626A\u632A\u6329\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3C28\u0000\u4E69\u0000\u3C52\u0000"+ - "\u632B\u3737\u0000\u0000\u0000\u0000\u0000\u3540"+ - "\u3527\u3B63\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4D34\u0000\u0000\u6331\u0000\u6330\u4144\u632D"+ - "\u0000\u0000\u632F\u0000\u0000\u3D4B\u3F40\u632E"+ - "\u632C\u0000\u472A\u0000\u0000\u3E4D\u0000\u0000"+ - "\u493C\u0000\u0000\u0000\u0000\u3A57\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4578"+ - "\u0000\u0000\u6332\u0000\u0000\u0000\u0000\u6333"+ - "\u6349\u3658\u0000\u0000\u4F3D\u4135\u0000\u0000"+ - "\u0000\u0000\u6334\u0000\u0000\u3252\u4477\u4A21"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6335\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u357A\u6336"+ - "\u0000\u0000\u6338\u0000\u0000\u0000\u6339\u0000"+ - "\u4729\u0000\u0000\u633A\u0000\u0000\u0000\u0000"+ - "\u0000\u633B\u633C\u0000\u0000\u3659\u3253\u4645"+ - "\u3D28\u3B64\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u633D\u0000\u3D29\u0000\u0000\u0000\u0000"+ - "\u0000\u324A\u4943\u0000\u0000\u633E\u0000\u0000"+ - "\u486B\u0000\u0000\u0000\u0000\u0000\u0000\u4145"+ - "\u0000\u6341\u0000\u6342\u4769\u0000\u3F41\u633F"+ - "\u0000\u4361\u0000\u0000\u6340\u0000\u0000\u0000"+ - "\u3E4E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u305C\u0000\u0000\u0000\u0000"+ - "\u3529\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6343\u0000\u0000\u4478\u0000\u6344\u4047\u0000"+ - "\u0000\u0000\u0000\u0000\u4C2D\u0000\u0000\u4923"+ - "\u6345\u6346\u4355\u0000\u4E47\u0000\u0000\u6348"+ - "\u6347\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3C6F\u0000"+ - "\u0000\u634A\u3070\u0000\u0000\u0000\u0000\u634D"+ - "\u0000\u0000\u0000\u634B\u3254\u374E\u634C\u3946"+ - "\u3972\u0000\u4A66\u634E\u0000\u0000\u4B54\u0000"+ - "\u0000\u6350\u0000\u0000\u0000\u4051\u314F\u323A"+ - "\u302C\u0000\u0000\u0000\u0000\u0000\u0000\u634F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6351\u6352\u3E77\u0000\u0000\u0000\u0000"+ - "\u0000\u6353\u0000\u334F\u0000\u0000\u0000\u0000"+ - "\u6355\u0000\u0000\u0000\u376A\u0000\u3566\u0000"+ - "\u0000\u6356\u3675\u0000\u0000\u6357\u0000\u407C"+ - "\u0000\u464D\u0000\u4060\u3A75\u0000\u0000\u0000"+ - "\u6358\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4362\u416B\u0000\u635A\u635C\u6359"+ - "\u635B\u0000\u0000\u0000\u0000\u0000\u0000\u3722"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u635D\u3726\u0000\u0000\u0000\u3567\u4D52"+ - "\u635F\u0000\u0000\u0000\u0000\u0000\u6360\u0000"+ - "\u0000\u0000\u312E\u0000\u0000\u0000\u0000\u6363"+ - "\u0000\u0000\u0000\u3376\u6362\u6361\u0000\u6365"+ - "\u635E\u0000\u6366\u4E29\u0000\u6367\u0000\u6368"+ - "\u0000\u0000\u5474\u636A\u0000\u6369\u0000\u0000"+ - "\u0000\u636B\u636C\u0000\u4E35\u636D\u0000\u706F"+ - "\u3E4F\u636E\u636F\u3D57\u0000\u4638\u6370\u0000"+ - "\u0000\u0000\u4328\u0000\u0000\u6371\u0000\u433C"+ - "\u6372\u0000\u0000\u0000\u0000\u0000\u3625\u0000"+ - "\u513F\u435D\u3C33\u0000\u0000\u0000\u0000\u3448"+ - "\u0000\u0000\u6373\u0000\u6422\u0000\u6376\u0000"+ - "\u3568\u0000\u6375\u6424\u0000\u0000\u0000\u6374"+ - "\u0000\u3E50\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6378\u6379\u0000\u452B\u0000\u0000\u637A\u0000"+ - "\u335E\u0000\u0000\u0000\u0000\u3F5A\u4964\u0000"+ - "\u637C\u0000\u0000\u0000\u4268\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6377\u0000\u637B\u637D\u0000"+ - "\u0000\u3A7B\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6426\u492E\u0000"+ - "\u4826\u4579\u0000\u365A\u6425\u6423\u0000\u4835"+ - "\u637E\u435E\u457B\u0000\u457A\u0000\u3A76\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6438\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6428\u0000\u642A"+ - "\u0000\u0000\u0000\u0000\u642D\u0000\u642E\u0000"+ - "\u642B\u642C\u0000\u0000\u6429\u6427\u0000\u0000"+ - "\u0000\u0000\u6421\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4A4F\u3255"+ - "\u0000\u0000\u0000\u6435\u0000\u6432\u0000\u6437"+ - "\u0000\u0000\u6436\u0000\u4773\u4C27\u0000\u3B3B"+ - "\u6430\u6439\u6434\u0000\u6433\u642F\u0000\u6431"+ - "\u0000\u3449\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u433D\u0000\u0000\u407D\u0000\u0000"+ - "\u0000\u4822\u0000\u0000\u643E\u0000\u0000\u0000"+ - "\u4824\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4061\u643B\u0000\u0000\u484F\u0000\u643F\u4A53"+ - "\u0000\u435B\u0000\u643A\u643C\u0000\u0000\u643D"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6440\u0000\u0000"+ - "\u3C44\u0000\u0000\u0000\u4646\u6445\u6444\u0000"+ - "\u0000\u6441\u0000\u0000\u0000\u4F36\u0000\u0000"+ - "\u0000\u0000\u0000\u644A\u0000\u0000\u644E\u644B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6447\u0000\u0000\u0000\u0000\u0000\u0000\u6448"+ - "\u0000\u0000\u0000\u0000\u0000\u644D\u0000\u0000"+ - "\u0000\u6442\u5255\u6449\u6443\u0000\u0000\u644C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6452"+ - "\u0000\u344A\u0000\u644F\u0000\u0000\u0000\u6450"+ - "\u0000\u0000\u6451\u6454\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6453"+ - "\u4876\u0000\u0000\u0000\u0000\u6455\u4E7C\u4A6D"+ - "\u645A\u0000\u0000\u6457\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6456\u4052\u0000\u6459"+ - "\u645B\u0000\u0000\u0000\u6458\u0000\u645F\u0000"+ - "\u645C\u0000\u0000\u0000\u0000\u0000\u0000\u645D"+ - "\u6446\u0000\u0000\u0000\u645E\u6460\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6461\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4A46\u0000\u6462\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4C62\u0000"+ - "\u0000\u364E\u3729\u6463\u0000\u0000\u0000\u0000"+ - "\u0000\u4A34\u0000\u3F68\u0000\u4C30\u0000\u0000"+ - "\u6464\u0000\u4E33\u0000\u0000\u4774\u0000\u4146"+ - "\u4734\u0000\u0000\u3D4D\u0000\u0000\u0000\u3040"+ - "\u0000\u6469\u6467\u0000\u6465\u3421\u0000\u3E51"+ - "\u646A\u0000\u0000\u6468\u0000\u6466\u646E\u0000"+ - "\u0000\u646D\u646C\u646B\u0000\u0000\u0000\u0000"+ - "\u0000\u646F\u0000\u0000\u0000\u6470\u403A\u0000"+ - "\u6471\u0000\u6473\u0000\u0000\u6472\u0000\u0000"+ - "\u0000\u0000\u3852\u0000\u0000\u0000\u4138\u0000"+ - "\u0000\u0000\u6475\u0000\u0000\u0000\u457C\u0000"+ - "\u6474\u0000\u0000\u0000\u6476\u0000\u4A35\u416C"+ - "\u3947\u0000\u6477\u0000\u0000\u0000\u0000\u4E48"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6479"+ - "\u0000\u0000\u647A\u0000\u647B\u0000\u647C\u0000"+ - "\u3B65\u0000\u647D\u374F\u0000\u0000\u356A\u0000"+ - "\u352A\u0000\u6521\u0000\u4C73\u3948\u647E\u0000"+ - "\u0000\u0000\u6524\u4C66\u0000\u473C\u0000\u0000"+ - "\u4933\u0000\u0000\u0000\u3D63\u6523\u0000\u3C53"+ - "\u3949\u3B66\u3569\u4A36\u6522\u0000\u0000\u0000"+ - "\u4147\u4B42\u3A77\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3B67\u445D\u0000\u6527\u4E5F"+ - "\u3A59\u0000\u6528\u3F42\u0000\u652A\u0000\u0000"+ - "\u0000\u3E52\u3A30\u0000\u0000\u0000\u0000\u6529"+ - "\u0000\u0000\u3D2A\u383E\u4148\u6525\u652B\u0000"+ - "\u0000\u0000\u0000\u6526\u3750\u0000\u652E\u6532"+ - "\u376B\u0000\u0000\u0000\u0000\u0000\u652D\u0000"+ - "\u0000\u0000\u0000\u6536\u0000\u0000\u394A\u0000"+ - "\u0000\u4D6D\u303C\u6533\u0000\u0000\u356B\u0000"+ - "\u6530\u0000\u0000\u0000\u0000\u0000\u6531\u0000"+ - "\u0000\u457D\u652F\u652C\u0000\u3328\u4064\u0000"+ - "\u0000\u3828\u0000\u0000\u0000\u6538\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6535\u0000\u0000\u0000\u0000\u0000\u6537"+ - "\u0000\u0000\u0000\u6534\u0000\u0000\u0000\u0000"+ - "\u0000\u3751\u4233\u6539\u416E\u0000\u0000\u6546"+ - "\u0000\u0000\u6542\u653C\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6540\u3C7A\u305D\u653B\u6543"+ - "\u6547\u394B\u4C56\u0000\u4456\u653D\u0000\u0000"+ - "\u6545\u0000\u653A\u433E\u0000\u653F\u303D\u4C4A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u653E"+ - "\u0000\u0000\u365B\u486C\u0000\u0000\u0000\u416D"+ - "\u0000\u4E50\u3D6F\u0000\u0000\u656E\u0000\u0000"+ - "\u6548\u0000\u407E\u0000\u6544\u6549\u654B\u0000"+ - "\u4479\u654E\u0000\u0000\u654A\u0000\u0000\u0000"+ - "\u4A54\u344B\u0000\u0000\u4C4B\u0000\u0000\u305E"+ - "\u0000\u0000\u654D\u0000\u4E7D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u654C\u0000\u0000\u0000\u0000"+ - "\u0000\u316F\u0000\u0000\u466C\u654F\u0000\u0000"+ - "\u0000\u6556\u6550\u6557\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6553\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u477B\u0000\u0000\u3C4A\u6555"+ - "\u0000\u6552\u6558\u6551\u0000\u0000\u3D44\u0000"+ - "\u0000\u0000\u0000\u4B25\u0000\u0000\u3D4C\u0000"+ - "\u0000\u6554\u6560\u0000\u0000\u655C\u0000\u655F"+ - "\u0000\u655D\u6561\u655B\u0000\u6541\u4053\u0000"+ - "\u0000\u484B\u0000\u655E\u0000\u0000\u6559\u0000"+ - "\u0000\u0000\u4121\u3752\u0000\u3D2B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3F25\u4136\u6564\u0000"+ - "\u0000\u6566\u6567\u0000\u0000\u6563\u6565\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u655A\u6562"+ - "\u0000\u656A\u6569\u0000\u0000\u4B7A\u0000\u0000"+ - "\u372B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6568\u0000\u656C\u656B\u656F\u0000\u6571"+ - "\u0000\u0000\u3B3C\u656D\u0000\u0000\u0000\u0000"+ - "\u6572\u6573\u0000\u0000\u6574\u0000\u657A\u453B"+ - "\u6576\u0000\u6575\u6577\u6578\u0000\u6579\u0000"+ - "\u0000\u0000\u0000\u657B\u657C\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u344C\u0000"+ - "\u657D\u0000\u657E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6621\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6622\u6623\u6624\u0000"+ - "\u6625\u6626\u0000\u0000\u6628\u6627\u0000\u0000"+ - "\u6629\u0000\u0000\u0000\u0000\u0000\u0000\u662A"+ - "\u662B\u0000\u0000\u0000\u0000\u0000\u0000\u662E"+ - "\u662C\u662D\u3A61\u3753\u0000\u0000\u4356\u0000"+ - "\u4833\u0000\u3D70\u0000\u0000\u474D\u0000\u486D"+ - "\u662F\u586D\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6630\u6632\u0000\u4D65\u6631\u6634"+ - "\u6633\u0000\u4D53\u0000\u6635\u0000\u487E\u0000"+ - "\u0000\u0000\u0000\u0000\u6636\u0000\u0000\u0000"+ - "\u0000\u0000\u6639\u0000\u0000\u6638\u6637\u0000"+ - "\u0000\u0000\u0000\u663A\u3732\u0000\u0000\u0000"+ - "\u4122\u3541\u0000\u0000\u0000\u0000\u663E\u663B"+ - "\u0000\u0000\u663C\u0000\u0000\u0000\u663F\u0000"+ - "\u6640\u663D\u0000\u0000\u0000\u3129\u0000\u0000"+ - "\u0000\u3227\u0000\u0000\u0000\u6642\u6643\u0000"+ - "\u0000\u0000\u6644\u0000\u4D62\u0000\u0000\u0000"+ - "\u0000\u0000\u3D2C\u0000\u6646\u6645\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3F69\u6647\u0000\u0000\u0000\u0000\u6648\u0000"+ - "\u0000\u6649\u0000\u3465\u0000\u0000\u0000\u0000"+ - "\u344D\u0000\u0000\u664A\u0000\u0000\u0000\u0000"+ - "\u0000\u664B\u0000\u4B5D\u4D63\u0000\u0000\u0000"; - - private final static String innerIndex4= - "\u4D54\u4F37\u0000\u394D\u664E\u3C54\u664D\u0000"+ - "\u0000\u0000\u0000\u664F\u3C29\u0000\u0000\u0000"+ - "\u4251\u0000\u6650\u0000\u0000\u394C\u0000\u4C57"+ - "\u6651\u6652\u0000\u0000\u6653\u0000\u0000\u0000"+ - "\u0000\u6654\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6655\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3C2A\u0000\u0000\u4C6D\u0000"+ - "\u0000\u0000\u0000\u6657\u0000\u433F\u0000\u6656"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6659\u0000"+ - "\u0000\u0000\u6658\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u665A\u0000\u0000\u0000\u403B\u0000"+ - "\u665B\u0000\u665C\u0000\u0000\u0000\u4A39\u665D"+ - "\u0000\u416F\u665E\u0000\u0000\u0000\u0000\u0000"+ - "\u665F\u0000\u0000\u0000\u0000\u0000\u0000\u4E7E"+ - "\u6662\u0000\u6661\u6660\u4430\u0000\u6663\u3F26"+ - "\u0000\u6664\u0000\u0000\u0000\u6665\u4F38\u6666"+ - "\u0000\u0000\u0000\u0000\u6667\u6669\u6668\u4825"+ - "\u0000\u4679\u0000\u4F3E\u4829\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u666B\u0000\u0000\u3E53\u0000"+ - "\u492A\u0000\u666C\u666A\u0000\u344E\u0000\u0000"+ - "\u0000\u3854\u3B68\u0000\u0000\u486E\u0000\u0000"+ - "\u0000\u382A\u4B43\u0000\u666F\u666D\u0000\u394E"+ - "\u0000\u394F\u3069\u0000\u3A68\u0000\u0000\u0000"+ - "\u0000\u0000\u4759\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u305F\u6674\u0000\u4340\u0000"+ - "\u0000\u0000\u0000\u0000\u4758\u0000\u425B\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6676\u0000"+ - "\u0000\u6672\u6675\u6670\u0000\u6673\u4B26\u0000"+ - "\u0000\u3855\u0000\u0000\u307D\u6671\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6678"+ - "\u0000\u6679\u0000\u0000\u4639\u0000\u0000\u0000"+ - "\u363B\u0000\u0000\u0000\u6726\u473D\u0000\u0000"+ - "\u0000\u0000\u3B69\u0000\u0000\u363C\u4048\u4F46"+ - "\u4C2E\u6677\u4054\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3553\u667A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u667C\u0000\u0000\u0000\u0000"+ - "\u0000\u667B\u0000\u0000\u0000\u0000\u0000\u667D"+ - "\u0000\u4326\u0000\u473E\u0000\u0000\u0000\u0000"+ - "\u0000\u4431\u0000\u0000\u0000\u0000\u6723\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6722\u0000"+ - "\u0000\u0000\u0000\u667E\u0000\u0000\u3F55\u0000"+ - "\u4965\u6725\u0000\u6724\u3950\u4F53\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6735"+ - "\u0000\u0000\u0000\u0000\u0000\u6729\u672A\u0000"+ - "\u0000\u0000\u0000\u3C70\u0000\u0000\u6728\u0000"+ - "\u3978\u6727\u0000\u0000\u672B\u0000\u0000\u0000"+ - "\u4432\u4A22\u4123\u0000\u0000\u0000\u0000\u425C"+ - "\u672F\u0000\u6730\u672C\u0000\u0000\u0000\u0000"+ - "\u672D\u0000\u672E\u0000\u0000\u0000\u0000\u3951"+ - "\u0000\u0000\u0000\u6736\u0000\u6732\u0000\u0000"+ - "\u0000\u0000\u4966\u0000\u4B6C\u4928\u0000\u0000"+ - "\u6731\u0000\u0000\u6734\u6733\u0000\u0000\u0000"+ - "\u4B44\u6737\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6738\u0000\u0000\u4137\u0000\u6739\u0000\u0000"+ - "\u673B\u0000\u673F\u0000\u0000\u673C\u673A\u473F"+ - "\u673D\u0000\u673E\u0000\u0000\u0000\u3232\u0000"+ - "\u6745\u6740\u0000\u0000\u0000\u6741\u0000\u0000"+ - "\u0000\u6742\u0000\u4221\u0000\u0000\u0000\u0000"+ - "\u6744\u6743\u6746\u0000\u0000\u0000\u0000\u6747"+ - "\u6748\u0000\u0000\u3F43\u0000\u3269\u0000\u6749"+ - "\u4E57\u0000\u3C2B\u0000\u0000\u3D2D\u0000\u0000"+ - "\u0000\u0000\u0000\u3B6A\u4357\u0000\u0000\u0000"+ - "\u0000\u0000\u674A\u674B\u3131\u0000\u674C\u0000"+ - "\u0000\u674D\u674E\u0000\u0000\u674F\u0000\u6750"+ - "\u363D\u5A2A\u6751\u0000\u4065\u6752\u3C4B\u0000"+ - "\u6753\u0000\u5030\u0000\u0000\u0000\u6754\u4A5E"+ - "\u345C\u0000\u0000\u4124\u3D58\u0000\u4971\u3D2E"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6755\u3952\u6756\u484C\u0000\u6764\u0000"+ - "\u0000\u0000\u0000\u6758\u0000\u4249\u4775\u383F"+ - "\u6757\u4125\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6759\u0000\u0000\u0000\u0000\u0000\u0000\u447A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u675B\u675A\u675D\u0000\u0000\u675C\u0000\u675E"+ - "\u0000\u0000\u6760\u0000\u675F\u0000\u344F\u0000"+ - "\u6761\u0000\u6762\u6763\u0000\u0000\u3A31\u4E49"+ - "\u0000\u6765\u3F27\u0000\u0000\u0000\u3170\u6766"+ - "\u6767\u0000\u0000\u0000\u0000\u0000\u6768\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3072\u0000\u6769\u0000\u0000"+ - "\u0000\u0000\u676A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4967\u0000\u0000\u0000\u3C47\u0000\u676C"+ - "\u0000\u0000\u0000\u0000\u0000\u3329\u3032\u0000"+ - "\u0000\u0000\u0000\u676B\u676E\u474E\u0000\u3F44"+ - "\u0000\u3256\u0000\u4B27\u0000\u0000\u0000\u0000"+ - "\u375D\u365C\u0000\u676D\u0000\u326A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3423\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3171\u6772\u4E6A\u425D\u0000\u0000\u4944"+ - "\u0000\u677E\u0000\u3257\u677C\u0000\u677A\u6771"+ - "\u0000\u676F\u0000\u6770\u0000\u3C63\u366C\u4377"+ - "\u0000\u0000\u0000\u4651\u0000\u0000\u0000\u0000"+ - "\u0000\u3151\u0000\u6774\u6773\u0000\u0000\u0000"+ - "\u0000\u6779\u6775\u6778\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4C50\u6777\u3258\u337D\u677B\u0000"+ - "\u0000\u677D\u0000\u0000\u0000\u0000\u3754\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6823\u682C"+ - "\u682D\u0000\u0000\u0000\u302B\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6834\u0000\u0000\u0000\u0000"+ - "\u3071\u0000\u0000\u682B\u0000\u0000\u0000\u682A"+ - "\u0000\u6825\u6824\u0000\u6822\u6821\u4363\u0000"+ - "\u427B\u6827\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6826\u0000\u0000\u0000\u0000\u6829\u0000\u0000"+ - "\u0000\u4170\u3755\u0000\u0000\u0000\u0000\u3141"+ - "\u6828\u0000\u3953\u0000\u0000\u0000\u0000\u0000"+ - "\u4171\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u683A\u0000\u683B\u0000\u3259"+ - "\u0000\u0000\u0000\u322E\u6838\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u682E\u0000\u6836"+ - "\u0000\u683D\u6837\u0000\u0000\u0000\u6835\u0000"+ - "\u0000\u0000\u0000\u6776\u0000\u0000\u6833\u0000"+ - "\u0000\u0000\u682F\u0000\u0000\u0000\u3450\u6831"+ - "\u683C\u0000\u6832\u0000\u0000\u0000\u0000\u0000"+ - "\u683E\u0000\u6830\u477C\u0000\u0000\u0000\u0000"+ - "\u0000\u4D69\u0000\u0000\u0000\u6839\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u684F\u0000\u0000"+ - "\u0000\u6847\u0000\u0000\u0000\u3F7B\u0000\u0000"+ - "\u0000\u0000\u3546\u0000\u365D\u0000\u6842\u0000"+ - "\u0000\u0000\u0000\u325B\u0000\u0000\u3E54\u0000"+ - "\u6845\u0000\u0000\u0000\u3A5A\u0000\u0000\u4551"+ - "\u684A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4A6E\u0000\u6841\u0000\u0000\u0000\u325A"+ - "\u3856\u4929\u684B\u0000\u683F\u0000\u0000\u6848"+ - "\u0000\u0000\u0000\u6852\u0000\u6843\u0000\u0000"+ - "\u0000\u0000\u0000\u6844\u463A\u0000\u0000\u6849"+ - "\u0000\u0000\u0000\u6846\u4B28\u684C\u3060\u0000"+ - "\u0000\u0000\u0000\u6840\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u684E\u0000\u684D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u476B\u6854\u0000\u685F\u0000\u0000\u0000"+ - "\u0000\u337E\u0000\u0000\u0000\u6862\u0000\u0000"+ - "\u6850\u0000\u0000\u0000\u6855\u4D6E\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u685E\u0000"+ - "\u0000\u4D55\u0000\u0000\u0000\u0000\u4E2A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4378"+ - "\u0000\u0000\u0000\u336B\u0000\u0000\u0000\u0000"+ - "\u0000\u4972\u6864\u4621\u0000\u0000\u3031\u0000"+ - "\u0000\u685D\u0000\u6859\u4172\u6853\u685B\u6860"+ - "\u0000\u472C\u0000\u0000\u0000\u302A\u0000\u6858"+ - "\u0000\u6861\u4978\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u685C\u0000\u6857\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3E55\u0000\u0000\u0000\u0000"+ - "\u3D2F\u0000\u0000\u0000\u3C2C\u0000\u0000\u0000"+ - "\u0000\u4C58\u0000\u0000\u4947\u0000\u0000\u6867"+ - "\u0000\u6870\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u685A\u0000\u0000"+ - "\u0000\u0000\u3377\u0000\u0000\u0000\u0000\u0000"+ - "\u3E78\u6865\u0000\u686A\u4173\u0000\u0000\u6866"+ - "\u0000\u686D\u0000\u0000\u435F\u0000\u686E\u0000"+ - "\u0000\u4D56\u6863\u3338\u0000\u6869\u0000\u0000"+ - "\u686C\u4C2C\u0000\u0000\u0000\u0000\u686F\u0000"+ - "\u0000\u6868\u686B\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4B29\u0000\u4F21\u0000"+ - "\u0000\u0000\u0000\u0000\u6873\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u687A\u0000\u0000\u6872"+ - "\u3C43\u0000\u0000\u0000\u0000\u0000\u6851\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4A4E\u0000\u4C22\u6879\u6878\u0000\u6874"+ - "\u6875\u0000\u3136\u0000\u0000\u0000\u0000\u6877"+ - "\u0000\u6871\u0000\u0000\u0000\u0000\u4455\u0000"+ - "\u0000\u0000\u0000\u0000\u6876\u307E\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4222\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4A43\u0000\u0000"+ - "\u687B\u6921\u0000\u4859\u0000\u0000\u0000\u0000"+ - "\u687E\u3E56\u3C49\u6923\u0000\u0000\u363E\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6924\u0000\u4979"+ - "\u687D\u0000\u6856\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u687C\u0000\u0000\u0000\u0000"+ - "\u4F4F\u4622\u4973\u0000\u0000\u692B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6931"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6932\u0000"+ - "\u6925\u0000\u0000\u0000\u4776\u0000\u0000\u692F"+ - "\u6927\u0000\u6929\u0000\u0000\u0000\u0000\u0000"+ - "\u6933\u6928\u0000\u0000\u692C\u0000\u0000\u3172"+ - "\u0000\u4665\u0000\u692D\u6930\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6926\u0000\u4126\u0000"+ - "\u692A\u3B27\u3F45\u3730\u4C74\u0000\u4C79\u3D72"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6937\u6935\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4F4E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6934\u0000\u0000\u0000\u4D75\u0000\u6936"+ - "\u6938\u0000\u0000\u0000\u0000\u6939\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u693C\u693A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4623\u693B\u0000\u0000"+ - "\u0000\u484D\u692E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3D73"+ - "\u0000\u693D\u6942\u4174\u0000\u0000\u6941\u0000"+ - "\u0000\u0000\u6922\u0000\u0000\u0000\u6943\u4149"+ - "\u0000\u0000\u693E\u6940\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u693F\u0000\u0000\u5D31\u5D22"+ - "\u0000\u0000\u6945\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6944\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4D76\u0000\u623C"+ - "\u6946\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6947"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6948\u3857\u0000"+ - "\u3554\u0000\u0000\u0000\u694A\u515D\u0000\u0000"+ - "\u0000\u0000\u3575\u0000\u4E3A\u0000\u3673\u694B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u694C"+ - "\u0000\u0000\u0000\u436E\u0000\u0000\u0000\u0000"+ - "\u0000\u694D\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u467A\u0000\u303A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3263\u6952\u6953\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u694E\u0000\u3B3D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u694F\u4742\u0000\u0000\u0000"+ - "\u0000\u6950\u6951\u695B\u0000\u0000\u0000\u6955"+ - "\u6958\u0000\u0000\u0000\u0000\u0000\u6954\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6956\u0000\u6957\u3C58"+ - "\u0000\u6959\u0000\u4341\u0000\u3756\u3342\u0000"+ - "\u0000\u0000\u0000\u0000\u695C\u0000\u0000\u0000"+ - "\u0000\u333F\u0000\u6961\u0000\u0000\u695D\u6960"+ - "\u0000\u0000\u0000\u0000\u483A\u0000\u0000\u0000"+ - "\u0000\u695E\u0000\u0000\u695F\u4948\u485A\u6962"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u427D\u696C\u0000\u6968\u0000\u0000\u326B\u0000"+ - "\u6966\u0000\u4B2A\u6967\u0000\u0000\u6964\u0000"+ - "\u6965\u696A\u696D\u0000\u0000\u696B\u0000\u0000"+ - "\u0000\u6969\u6963\u0000\u0000\u0000\u0000\u0000"+ - "\u4358\u0000\u6974\u0000\u4C2A\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6972\u0000\u0000"+ - "\u0000\u6973\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u696E\u0000\u0000\u6970"+ - "\u0000\u0000\u0000\u6971\u0000\u0000\u0000\u696F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4066\u0000\u4F39\u6978\u0000\u6979\u0000"+ - "\u0000\u0000\u0000\u6A21\u0000\u3F2A\u0000\u697B"+ - "\u0000\u697E\u0000\u0000\u0000\u0000\u0000\u6976"+ - "\u6975\u0000\u0000\u6A22\u0000\u0000\u325C\u0000"+ - "\u697C\u0000\u6A23\u0000\u0000\u0000\u697D\u0000"+ - "\u0000\u0000\u0000\u0000\u697A\u0000\u4433\u0000"+ - "\u6977\u0000\u0000\u0000\u0000\u0000\u0000\u4768"+ - "\u0000\u0000\u6A27\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4D3B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A26"+ - "\u0000\u0000\u6A25\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6A2E\u0000\u0000\u0000\u6A28"+ - "\u0000\u0000\u0000\u6A30\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4D66\u6A33\u0000\u6A2A\u0000\u0000"+ - "\u6A2B\u0000\u0000\u0000\u6A2F\u0000\u6A32\u6A31"+ - "\u0000\u0000\u0000\u6A29\u0000\u0000\u0000\u0000"+ - "\u6A2C\u0000\u6A3D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6A36\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A34"+ - "\u0000\u0000\u6A35\u0000\u0000\u0000\u6A3A\u6A3B"+ - "\u0000\u332A\u0000\u3542\u0000\u0000\u6A39\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6A24\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6A38\u6A3C\u6A37"+ - "\u0000\u6A3E\u0000\u0000\u0000\u6A40\u6A3F\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6A42\u6A41\u695A\u0000\u0000\u0000\u6A46"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6A43\u0000\u0000\u0000\u0000\u6A44\u0000"+ - "\u0000\u6A45\u0000\u6A47\u0000\u0000\u0000\u0000"+ - "\u376C\u0000\u6A49\u0000\u6A48\u0000\u3D30\u0000"+ - "\u0000\u0000\u0000\u0000\u3954\u5E27\u0000\u0000"+ - "\u0000\u0000\u6A4A\u3D51\u0000\u0000\u0000\u3339"+ - "\u0000\u6A4B\u0000\u3152\u0000\u3E57\u6A4C\u0000"+ - "\u0000\u3955\u6A4D\u3061\u0000\u0000\u0000\u0000"+ - "\u493D\u0000\u0000\u6A4E\u0000\u0000\u0000\u0000"+ - "\u3F6A\u0000\u6A55\u0000\u0000\u6A52\u0000\u436F"+ - "\u0000\u0000\u0000\u0000\u0000\u6A53\u6A50\u365E"+ - "\u0000\u6A4F\u6A56\u0000\u0000\u0000\u0000\u0000"+ - "\u3736\u0000\u0000\u425E\u0000\u6A5C\u0000\u0000"+ - "\u0000\u0000\u6A58\u0000\u0000\u0000\u4235\u6A57"+ - "\u0000\u6A5A\u0000\u0000\u0000\u0000\u6A51\u0000"+ - "\u0000\u0000\u6A5B\u0000\u6A5D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u486F\u0000\u0000\u6A59\u0000"+ - "\u6A5E\u6A60\u0000\u0000\u3853\u6A54\u0000\u3041"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A5F"+ - "\u0000\u3A5B\u4E76\u6A61\u6A62\u4175\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4E22"+ - "\u0000\u0000\u0000\u0000\u6A63\u4D35\u0000\u0000"+ - "\u6A64\u6A65\u0000\u0000\u4A64\u6A66\u0000\u3A40"+ - "\u0000\u4E23\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6A6B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6A6C\u3E58\u6A6A\u0000\u0000\u0000"+ - "\u4D67\u6A67\u0000\u0000\u6A69\u403D\u3F7E\u0000"+ - "\u0000\u0000\u6A68\u0000\u6A6D\u0000\u0000\u4A23"+ - "\u0000\u0000\u6A6F\u0000\u6A6E\u0000\u0000\u0000"+ - "\u336C\u0000\u4B2B\u6A70\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6A7C\u6A72\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6A73\u0000\u0000"+ - "\u0000\u0000\u6A74\u6A75\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6A79\u0000"+ - "\u6A7A\u0000\u0000\u6A78\u0000\u0000\u0000\u0000"+ - "\u0000\u6A76\u0000\u6A71\u6A77\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6A7B\u7037\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3228\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6A7E\u365F"+ - "\u6A7D\u0000\u0000\u0000\u6B22\u0000\u6B21\u0000"+ - "\u0000\u0000\u6B24\u0000\u0000\u6B23\u0000\u6B25"+ - "\u0000\u0000\u3D31\u0000\u6B26\u0000\u0000\u6B27"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6B28\u403E"+ - "\u0000\u4D57\u0000\u6B29\u0000\u0000\u4A24\u4746"+ - "\u6B2A\u0000\u6B2B\u382B\u0000\u0000\u0000\u352C"+ - "\u0000\u0000\u0000\u6B2C\u0000\u0000\u3B6B\u4741"+ - "\u6B2D\u0000\u3350\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6B2E\u0000\u0000\u0000\u0000\u6B30\u4D77"+ - "\u0000\u6B2F\u3F46\u0000\u6B31\u0000\u0000\u6B32"+ - "\u0000\u0000\u6B33\u3451\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6B34\u0000\u0000\u6B35\u0000\u6B36"+ - "\u6B37\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3351\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6B38\u0000\u6B39\u6B3A\u0000\u0000"+ - "\u0000\u0000\u0000\u3272\u0000\u0000\u3F28\u6B3B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6B3C\u0000\u0000\u0000"+ - "\u6B3D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3840\u0000\u447B\u6B3E\u0000\u0000\u0000\u0000"+ - "\u3757\u0000\u3F56\u0000\u6B41\u0000\u4624\u0000"+ - "\u6B40\u0000\u0000\u3731\u0000\u0000\u6B3F\u4277"+ - "\u352D\u0000\u0000\u6B42\u0000\u6B43\u0000\u3E59"+ - "\u0000\u0000\u0000\u376D\u0000\u6B44\u0000\u0000"+ - "\u0000\u0000\u4B2C\u0000\u0000\u405F\u0000\u0000"+ - "\u0000\u3576\u0000\u4C75\u414A\u0000\u6B45\u0000"+ - "\u0000\u0000\u3F47\u4370\u3E5A\u0000\u0000\u0000"+ - "\u0000\u6B46\u0000\u0000\u0000\u0000\u6B49\u0000"+ - "\u6B4A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3A3E\u4242\u6B48\u0000\u3E5B\u493E\u0000\u0000"+ - "\u0000\u0000\u0000\u6B47\u0000\u0000\u3B6C\u0000"+ - "\u3153\u0000\u6B4E\u3758\u0000\u0000\u3B6E\u0000"+ - "\u0000\u3B6D\u0000\u4F4D\u6B4D\u6B4C\u4127\u0000"+ - "\u354D\u4F43\u333A\u3E5C\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6B4B\u0000\u0000\u0000"+ - "\u0000\u0000\u6B50\u0000\u6B51\u6B4F\u0000\u3858"+ - "\u0000\u4D40\u0000\u0000\u3B6F\u4727\u0000\u0000"+ - "\u0000\u6B54\u0000\u4040\u0000\u4342\u0000\u0000"+ - "\u4D36\u0000\u6B57\u0000\u0000\u0000\u386C\u0000"+ - "\u403F\u6B53\u0000\u6B58\u386D\u6B55\u6B56\u0000"+ - "\u6B52\u0000\u0000\u0000\u4062\u4649\u0000\u0000"+ - "\u432F\u0000\u325D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4870\u0000\u0000\u3543\u0000\u0000\u4434"+ - "\u0000\u0000\u6B5B\u0000\u6B59\u0000\u0000\u434C"+ - "\u0000\u0000\u0000\u4041\u3452\u6B5A\u0000\u3F5B"+ - "\u0000\u0000\u4E4A\u0000\u0000\u0000\u4F40\u0000"+ - "\u0000\u0000\u6B5C\u6B67\u4435\u0000\u6B66\u0000"+ - "\u6B63\u6B6B\u6B64\u0000\u6B60\u0000\u447C\u6B5F"+ - "\u0000\u0000\u0000\u6B5D\u0000\u4D21\u3B70\u0000"+ - "\u0000\u6B61\u0000\u6B5E\u0000\u0000\u0000\u6B65"+ - "\u3D74\u0000\u3841\u0000\u0000\u0000\u427A\u0000"+ - "\u4B45\u315A\u3062\u0000\u4625\u0000\u0000\u6B69"+ - "\u0000\u0000\u0000\u0000\u6B68\u0000\u4666\u0000"+ - "\u6B6D\u0000\u0000\u0000\u6B62\u0000\u6B6C\u6B6E"+ - "\u0000\u382C\u6B6A\u3956\u0000\u3C55\u0000\u0000"+ - "\u6B6F\u4D58\u0000\u0000\u0000\u0000\u6B72\u0000"+ - "\u6B75\u0000\u0000\u6B73\u4935\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6B70\u0000\u0000\u0000\u0000"+ - "\u0000\u3660\u0000\u0000\u0000\u0000\u6B74\u0000"+ - "\u0000\u6B76\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6B7A\u0000\u0000\u6B77\u0000\u6B79\u6B78"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6B7B\u0000"+ - "\u3C31\u0000\u6B7D\u6B7C\u4968\u0000\u0000\u6C21"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3759\u0000"+ - "\u0000\u0000\u0000\u6B7E\u6C22\u0000\u0000\u6C23"+ - "\u3544\u6641\u3E79\u0000\u6C24\u0000\u0000\u386E"+ - "\u0000\u0000\u0000\u0000\u0000\u6C25\u0000\u0000"+ - "\u6C26\u0000\u0000\u3B3E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5A4E\u0000\u6C27\u0000\u6C28\u0000"+ - "\u3D32\u0000\u6C29\u6C2A\u0000\u0000\u6C2B\u0000"+ - "\u0000\u6C2C\u6C2D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u432B"+ - "\u0000\u0000\u6C2E\u0000\u0000\u0000\u0000\u6C30"+ - "\u0000\u6C2F\u0000\u0000\u0000\u0000\u4626\u0000"+ - "\u6C31\u0000\u4B2D\u0000\u6C32\u0000\u6C33\u0000"+ - "\u6C34\u0000\u0000\u0000\u0000\u6C35\u0000\u0000"+ - "\u0000\u0000\u465A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3E5D\u6C36\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u396B\u502E\u6C37\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6C38\u493F\u6C39\u0000\u6C41\u0000\u0000\u0000"+ - "\u0000\u0000\u6C3A\u0000\u0000\u6C3C\u0000\u0000"+ - "\u0000\u6C3B\u6C3D\u0000\u4B46\u6C3E\u6C3F\u0000"+ - "\u0000\u0000\u0000\u0000\u6C40\u0000\u0000\u0000"+ - "\u6C42\u0000\u0000\u0000\u0000\u332D\u4467\u0000"+ - "\u4969\u3A62\u3957\u0000\u0000\u0000\u0000\u494F"+ - "\u325F\u484E\u6C45\u3453\u4055\u6C44\u6C49\u4379"+ - "\u4C63\u0000\u6C47\u6C48\u352E\u0000\u6C4A\u4763"+ - "\u425F\u0000\u0000\u4871\u453D\u6C46\u0000\u4B47"+ - "\u326C\u6C4C\u4F28\u4442\u4F45\u0000\u0000\u3B71"+ - "\u6C4B\u0000\u4231\u0000\u0000\u6C5C\u4128\u0000"+ - "\u0000\u4678\u0000\u4950\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6C4F\u3B3F\u3B72\u0000\u3E5E\u0000"+ - "\u4765\u0000\u382D\u6C4E\u6C4D\u0000\u496A\u0000"+ - "\u0000\u0000\u3C41\u0000\u0000\u4552\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6C51\u6C52\u3958\u6C50\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6C53\u6C54\u0000\u6C56"+ - "\u4223\u0000\u6C55\u3466\u0000\u6C58\u0000\u6C57"+ - "\u6C59\u0000\u0000\u6C5B\u6C5D\u0000\u6C5E\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4056\u0000\u3C4F\u6C5F"+ - "\u0000\u0000\u0000\u3352\u0000\u6C60\u0000\u0000"+ - "\u4176\u6C61\u0000\u6C62\u496B\u0000\u0000\u352F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6C63\u0000\u0000\u0000\u4436\u0000\u0000"+ - "\u0000\u0000\u315B\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6C64\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3C71\u0000\u0000\u0000\u0000"+ - "\u3F76\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u422D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6C67\u0000\u0000\u0000\u6C66\u0000"+ - "\u0000\u0000\u6C65\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6C6D\u6C6B\u0000\u0000\u6C68"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6C6A\u0000"+ - "\u0000\u0000\u6C69\u6C6C\u0000\u3577\u0000\u6C70"+ - "\u0000\u4057\u0000\u6C71\u0000\u0000\u0000\u0000"+ - "\u3859\u0000\u6C6E\u6C6F\u0000\u0000\u0000\u4F29"+ - "\u0000\u0000\u0000\u4437\u0000\u4129\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6C72\u0000\u0000\u6C75"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6C73\u6C74\u4D59\u0000\u0000\u0000\u0000\u4627"+ - "\u6C78\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6C76\u6C77\u6C79"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6D29\u0000\u0000\u0000\u0000\u0000"+ - "\u6C7C\u0000\u0000\u0000\u6C7D\u6C7B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6C7A\u0000\u447D\u0000\u0000\u6D21"+ - "\u6D25\u6D22\u6C7E\u0000\u6D23\u0000\u0000\u0000"+ - "\u6D24\u0000\u0000\u0000\u0000\u6D2B\u0000\u0000"+ - "\u0000\u6D26\u0000\u0000\u0000\u0000\u0000\u4058"+ - "\u6D28\u0000\u0000\u6D2A\u6D27\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6D2D\u0000\u3D33\u0000\u6D2C\u0000"+ - "\u0000\u0000\u0000\u0000\u6D2E\u0000\u0000\u0000"+ - "\u0000\u6D2F\u0000\u0000\u6D32\u6D31\u0000\u6D30"+ - "\u0000\u0000\u6D34\u6D33\u0000\u4C76\u0000\u0000"+ - "\u0000\u6D36\u0000\u6D35\u6D37\u0000\u0000\u0000"+ - "\u0000\u6D38\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6D3A\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6D39\u3F48\u6D3B\u0000\u0000\u366D"+ - "\u6D3C\u6D3E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6D3F\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6D40\u6D3D\u0000"+ - "\u6D41\u0000\u3C56\u6D42\u3530\u3733\u0000\u0000"+ - "\u0000\u0000\u382E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6D43\u0000\u0000\u0000\u4670"+ - "\u0000\u0000\u453E\u6D44\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6D47\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3C34\u0000\u0000\u6D46\u6D45\u375A\u6D48\u0000"+ - "\u0000\u0000\u0000\u3353\u0000\u6D4A\u0000\u0000"+ - "\u0000\u3A5C\u6D49\u0000\u6D52\u0000\u0000\u0000"+ - "\u0000\u0000\u6D4C\u6D4E\u4A65\u6D4B\u0000\u0000"+ - "\u0000\u6D4D\u0000\u6D51\u6D4F\u3531\u0000\u6D50"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6D53\u0000"+ - "\u0000\u475A\u4E58\u0000\u0000\u0000\u0000\u3D34"+ - "\u0000\u0000\u0000\u6D54\u0000\u0000\u0000\u0000"+ - "\u4D22\u6D56\u0000\u6D55\u0000\u0000\u6D59\u4D41"+ - "\u0000\u0000\u6D58\u0000\u336D\u6D57\u6D5C\u0000"+ - "\u0000\u6D5B\u0000\u0000\u6D5A\u4532\u6D5D\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6D5E"+ - "\u0000\u0000\u0000\u0000\u6D5F\u0000\u0000\u396C"+ - "\u0000\u3725\u6D60\u6D61\u6D62\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3F49\u6D63\u0000\u3C2D\u6D64"+ - "\u0000\u0000\u0000\u6D65\u0000\u0000\u0000\u5221"+ - "\u517E\u0000\u0000\u0000\u0000\u6D66\u6570\u6D67"+ - "\u4324\u3F2B\u4740\u0000\u0000\u0000\u0000\u6D68"+ - "\u0000\u0000\u4A55\u4454\u397E\u0000\u0000\u4329"+ - "\u0000\u0000\u312A\u0000\u4B78\u3F57\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u375E\u0000"+ - "\u0000\u3661\u0000\u0000\u4A56\u0000\u0000\u0000"+ - "\u0000\u0000\u6D69\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6D6B\u0000\u0000\u6D6A\u3260\u0000"+ - "\u0000\u4676\u6D6C\u4777\u0000\u4533\u0000\u6D6D"+ - "\u3D52\u0000\u0000\u0000\u6D6F\u0000\u0000\u4C42"+ - "\u6D7E\u6D71\u6D72\u0000\u0000\u4449\u0000\u0000"; - - private final static String innerIndex5= - "\u4260\u4177\u0000\u4628\u0000\u6D70\u3555\u0000"+ - "\u0000\u0000\u0000\u6D79\u0000\u6D76\u6E25\u4629"+ - "\u4360\u6D73\u0000\u447E\u4553\u6D74\u6D78\u3F60"+ - "\u0000\u4767\u444C\u0000\u0000\u4042\u6D77\u422E"+ - "\u4224\u6D75\u3029\u4F22\u0000\u0000\u0000\u6D7A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4261\u0000"+ - "\u0000\u3D35\u3F4A\u0000\u0000\u6D7C\u6D7B\u0000"+ - "\u306F\u6D7D\u0000\u0000\u492F\u0000\u6E27\u0000"+ - "\u0000\u465B\u3F6B\u0000\u0000\u4359\u0000\u3678"+ - "\u0000\u6E26\u4D37\u313F\u0000\u4A57\u3261\u6E21"+ - "\u6E22\u6E23\u6E24\u463B\u4323\u3063\u6E28\u0000"+ - "\u6E29\u7423\u0000\u0000\u423D\u0000\u6E2A\u0000"+ - "\u3173\u414C\u0000\u382F\u0000\u4D5A\u0000\u0000"+ - "\u6E2B\u452C\u0000\u0000\u0000\u4178\u3C57\u6E2C"+ - "\u0000\u0000\u6E2F\u0000\u0000\u3D65\u6E2D\u412B"+ - "\u412A\u0000\u3064\u0000\u4E4B\u6E31\u0000\u4872"+ - "\u6E33\u6E32\u6E30\u6364\u3454\u0000\u0000\u6D6E"+ - "\u0000\u6E35\u6E34\u0000\u0000\u0000\u0000\u6E36"+ - "\u0000\u4D38\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4661\u0000\u0000\u4B2E\u0000"+ - "\u6E37\u0000\u3C59\u0000\u0000\u0000\u0000\u6E38"+ - "\u0000\u6E39\u0000\u0000\u0000\u6E3A\u0000\u0000"+ - "\u4521\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u306A\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3959\u0000\u0000\u0000\u4F3A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6E3E\u0000\u0000\u0000\u0000"+ - "\u0000\u3734\u6E3B\u0000\u6E3C\u0000\u0000\u0000"+ - "\u4974\u0000\u0000\u0000\u0000\u3354\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4D39\u0000\u363F"+ - "\u0000\u0000\u0000\u0000\u0000\u4554\u0000\u0000"+ - "\u0000\u0000\u6E3F\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6E40\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6E41\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4522\u0000\u0000"+ - "\u6E43\u0000\u6E42\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4653\u6E44\u3D36\u3C60\u475B\u4371\u0000"+ - "\u0000\u0000\u3C72\u0000\u3F6C\u0000\u6E45\u0000"+ - "\u6E46\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3F5D\u6E47\u0000\u6E48\u0000\u0000"+ - "\u0000\u6E49\u4D6F\u0000\u3D37\u0000\u0000\u0000"+ - "\u0000\u0000\u6E4B\u6E4A\u0000\u395A\u0000\u3973"+ - "\u3B40\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6E4E\u0000\u0000\u0000\u0000\u3D66"+ - "\u0000\u6E4D\u0000\u6E4C\u0000\u4269\u0000\u0000"+ - "\u386F\u0000\u4043\u0000\u0000\u0000\u0000\u4830"+ - "\u0000\u0000\u0000\u0000\u3D39\u0000\u0000\u0000"+ - "\u0000\u0000\u6E4F\u0000\u3E5F\u0000\u0000\u0000"+ - "\u0000\u0000\u6E52\u6E50\u0000\u0000\u0000\u6E51"+ - "\u0000\u0000\u0000\u0000\u6E54\u6E53\u0000\u0000"+ - "\u3E7A\u0000\u6E55\u0000\u0000\u0000\u0000\u0000"+ - "\u6E56\u6E57\u0000\u0000\u0000\u0000\u4850\u3A53"+ - "\u3C61\u6E58\u0000\u6E59\u4E24\u3D45\u4C6E\u4E4C"+ - "\u6E5A\u3662\u0000\u0000\u0000\u0000\u6E5B\u0000"+ - "\u4523\u0000\u0000\u6E5E\u3378\u3F4B\u0000\u6E5C"+ - "\u0000\u6E5D\u0000\u4460\u0000\u0000\u4B55\u367C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6E60\u6E61\u0000"+ - "\u0000\u0000\u0000\u0000\u6E5F\u0000\u0000\u6E63"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u465F\u3343\u0000"+ - "\u0000\u6E67\u0000\u0000\u6E64\u6E66\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6E62\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6F4F\u0000\u0000\u6E65\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4E6B\u0000\u0000\u385A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E6F"+ - "\u0000\u0000\u0000\u0000\u4534\u6E6A\u0000\u0000"+ - "\u6E6D\u6E6B\u0000\u6E70\u0000\u0000\u0000\u0000"+ - "\u6E71\u0000\u0000\u0000\u0000\u0000\u0000\u6E69"+ - "\u0000\u0000\u6E76\u3174\u0000\u0000\u6E68\u0000"+ - "\u0000\u0000\u482D\u0000\u6E6C\u0000\u3E60\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u395B\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4B48\u0000"+ - "\u3664\u0000\u0000\u3D46\u0000\u463C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u412D\u0000\u6E74\u0000\u6E6E\u6E73\u0000"+ - "\u4C43\u0000\u4438\u6E75\u6E72\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u412C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E79"+ - "\u0000\u6E78\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E77"+ - "\u0000\u0000\u4B2F\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3D7B\u0000\u0000\u0000"+ - "\u0000\u6E7A\u4A5F\u0000\u0000\u3154\u0000\u0000"+ - "\u0000\u0000\u4946\u4372\u0000\u0000\u0000\u0000"+ - "\u3578\u0000\u6E7C\u0000\u395D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3B2C\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E7B"+ - "\u3F6D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3F6E\u6F21\u6F23\u0000\u0000\u0000\u0000\u0000"+ - "\u3E7B\u0000\u6F22\u6F24\u0000\u0000\u3653\u0000"+ - "\u4945\u0000\u0000\u3C62\u4F23\u0000\u6E7E\u3A78"+ - "\u0000\u0000\u4F3F\u0000\u0000\u6F26\u0000\u0000"+ - "\u0000\u0000\u6F25\u6F27\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6E7D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4669\u0000\u4555\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4457\u0000\u6F2C\u0000"+ - "\u0000\u0000\u0000\u4343\u6F28\u0000\u0000\u0000"+ - "\u6F29\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u372D\u0000\u6F2B\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3830\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6F2A\u0000\u3E61\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3379\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6F30\u0000\u3A3F\u4179"+ - "\u0000\u0000\u444A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u333B"+ - "\u0000\u0000\u0000\u0000\u6F2E\u6F2F\u4443\u0000"+ - "\u6F2D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6F31\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6F37\u0000\u0000\u0000\u0000"+ - "\u6F3A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6F39\u452D\u0000\u0000\u0000\u0000\u6F32\u6F33"+ - "\u6F36\u0000\u0000\u0000\u0000\u6F38\u0000\u0000"+ - "\u0000\u3640\u0000\u0000\u6F3B\u6F35\u0000\u0000"+ - "\u6F34\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6F3F\u0000\u0000\u0000\u6F40"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6F41\u0000\u0000\u6F3E\u6F3D\u0000\u0000\u0000"+ - "\u3E62\u462A\u6F3C\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6F45\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6F43\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6F44\u6F42\u0000"+ - "\u4278\u0000\u6F46\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6F47\u0000\u0000\u6F49\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3455\u6F48\u4C7A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6F54\u6F4A\u0000\u0000\u6F4D\u0000"+ - "\u6F4B\u0000\u6F4C\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6F4E\u0000\u0000\u0000\u0000\u0000"+ - "\u6F50\u0000\u0000\u0000\u0000\u6F51\u0000\u6F52"+ - "\u0000\u0000\u0000\u0000\u6F55\u6F53\u6F56\u6F58"+ - "\u0000\u6F57\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4439"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4C67\u0000\u6F59\u412E\u0000\u0000\u0000\u6F5A"+ - "\u0000\u4A44\u6F5B\u332B\u0000\u0000\u0000\u313C"+ - "\u0000\u3457\u0000\u3456\u6F5C\u0000\u6F5D\u0000"+ - "\u6F5E\u6F5F\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6F60\u0000\u3458\u3355\u395E\u4836\u0000\u6F62"+ - "\u6F61\u0000\u0000\u0000\u0000\u6F63\u0000\u0000"+ - "\u0000\u0000\u315C\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6F66\u0000\u6F65\u6F64\u0000\u6F67\u0000"+ - "\u0000\u0000\u0000\u6F6A\u0000\u0000\u0000\u3047"+ - "\u0000\u0000\u6F68\u0000\u6F6C\u6F6B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6F6E\u6F6D\u6F6F\u0000"+ - "\u462E\u0000\u0000\u0000\u6F70\u0000\u0000\u0000"+ - "\u0000\u6F71\u6F73\u0000\u0000\u6F72\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u496C\u0000\u0000\u0000"+ - "\u0000\u6F74\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6F75\u0000\u3A65\u0000\u0000\u0000\u6F76\u6F77"+ - "\u0000\u0000\u4B49\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u414B\u0000\u0000\u0000\u3024"+ - "\u424B\u0000\u6F78\u0000\u496D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6F7B\u6F79\u395F\u0000\u6F7A"+ - "\u3842\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4A45\u6F7D\u7021\u6F7E\u7022"+ - "\u0000\u0000\u3121\u3F58\u3D7C\u3459\u7023\u0000"+ - "\u0000\u0000\u4766\u0000\u7025\u0000\u0000\u0000"+ - "\u3122\u0000\u7024\u4444\u0000\u4E4D\u462B\u6F7C"+ - "\u4E26\u0000\u3831\u0000\u0000\u4D5B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3679\u4E34\u0000"+ - "\u3728\u0000\u4262\u6721\u0000\u7026\u332C\u3F6F"+ - "\u0000\u0000\u0000\u0000\u3356\u7028\u0000\u7029"+ - "\u7027\u3764\u0000\u3A5D\u3E63\u0000\u0000\u0000"+ - "\u3123\u0000\u0000\u4E59\u0000\u0000\u0000\u702B"+ - "\u6E2E\u0000\u702A\u0000\u0000\u0000\u0000\u0000"+ - "\u702E\u702C\u702D\u0000\u702F\u0000\u7030\u4E6C"+ - "\u7031\u7032\u0000\u4049\u483B\u0000\u0000\u0000"+ - "\u3F7D\u3467\u0000\u0000\u4D3A\u326D\u3D38\u385B"+ - "\u0000\u7035\u0000\u7034\u3B73\u7036\u7033\u0000"+ - "\u0000\u3B28\u0000\u0000\u0000\u703A\u6A2D\u0000"+ - "\u0000\u5256\u0000\u3F77\u7038\u0000\u0000\u0000"+ - "\u0000\u0000\u4E25\u4671\u0000\u0000\u0000\u0000"+ - "\u312B\u0000\u4063\u3C36\u0000\u0000\u0000\u0000"+ - "\u4A37\u0000\u3140\u0000\u0000\u0000\u4E6D\u4D6B"+ - "\u0000\u703B\u0000\u4545\u0000\u0000\u0000\u0000"+ - "\u3C7B\u0000\u0000\u0000\u703C\u0000\u703D\u3F4C"+ - "\u703E\u0000\u4E6E\u0000\u0000\u7039\u7040\u7042"+ - "\u0000\u7041\u0000\u703F\u0000\u0000\u7043\u0000"+ - "\u0000\u7044\u0000\u0000\u417A\u0000\u3262\u0000"+ - "\u0000\u0000\u0000\u0000\u7045\u0000\u0000\u4C38"+ - "\u0000\u0000\u7046\u0000\u0000\u0000\u0000\u0000"+ - "\u7047\u0000\u4F2A\u0000\u0000\u0000\u0000\u0000"+ - "\u5B31\u7048\u0000\u0000\u0000\u7049\u704A\u0000"+ - "\u0000\u0000\u704E\u0000\u704B\u0000\u704C\u0000"+ - "\u704D\u704F\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4044\u0000\u0000\u0000\u4C77\u0000"+ - "\u0000\u4045\u0000\u0000\u7050\u0000\u4873\u0000"+ - "\u7051\u7353\u4C4C\u0000\u7052\u0000\u7053\u0000"+ - "\u7054\u3357\u0000\u7056\u0000\u3F59\u0000\u0000"+ - "\u0000\u7057\u0000\u0000\u3724\u0000\u0000\u0000"+ - "\u0000\u7058\u705C\u0000\u705A\u0000\u0000\u0000"+ - "\u0000\u705B\u0000\u0000\u3373\u7059\u705D\u0000"+ - "\u0000\u0000\u0000\u705E\u0000\u3048\u0000\u705F"+ - "\u7060\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3E64\u0000\u0000\u0000\u7061\u0000\u0000\u0000"+ - "\u3547\u0000\u0000\u7064\u0000\u0000\u7063\u0000"+ - "\u7062\u0000\u0000\u6B71\u0000\u4A5C\u0000\u0000"+ - "\u0000\u0000\u0000\u7065\u7066\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u7067\u0000\u0000\u7068\u0000"+ - "\u7069\u0000\u0000\u706A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u345A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u706B\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u706C\u4723\u0000"+ - "\u0000\u0000\u706E\u323B\u0000\u7071\u7070\u0000"+ - "\u0000\u0000\u0000\u3124\u0000\u0000\u0000\u3641"+ - "\u0000\u4A47\u443A\u3A22\u0000\u3960\u3D67\u0000"+ - "\u3F5C\u0000\u0000\u0000\u7073\u0000\u0000\u7072"+ - "\u4D42\u3468\u4852\u465C\u0000\u0000\u0000\u3F7C"+ - "\u4E4E\u0000\u375B\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u7076\u0000\u0000\u7075\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4B4B\u462C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3150\u0000\u0000\u7077"+ - "\u7074\u0000\u0000\u4951\u4D6A\u7078\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7079\u0000"+ - "\u0000\u0000\u0000\u707B\u426A\u335B\u335C\u707A"+ - "\u0000\u0000\u0000\u0000\u3469\u3832\u0000\u0000"+ - "\u346A\u0000\u0000\u453F\u0000\u0000\u4E60\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u385C"+ - "\u0000\u0000\u0000\u707C\u0000\u0000\u0000\u707D"+ - "\u707E\u7121\u0000\u7123\u7122\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4977\u0000\u7124\u0000\u0000\u0000\u0000\u7125"+ - "\u0000\u7126\u0000\u0000\u0000\u0000\u7127\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u7129\u7128\u0000\u712A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4874\u664C\u0000\u0000\u3F29"+ - "\u0000\u0000\u3532\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u712B\u0000\u712C\u0000\u522C\u5D3B\u4853"+ - "\u0000\u0000\u307B\u0000\u303B\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3B74\u4B30\u3E7E\u0000"+ - "\u0000\u0000\u0000\u712D\u0000\u4C5F\u0000\u0000"+ - "\u0000\u712E\u4D5C\u0000\u3142\u0000\u0000\u0000"+ - "\u3B41\u0000\u712F\u326E\u7130\u0000\u0000\u0000"+ - "\u7131\u0000\u0000\u0000\u0000\u7133\u7134\u0000"+ - "\u7136\u7132\u0000\u0000\u7135\u0000\u0000\u0000"+ - "\u345B\u0000\u0000\u0000\u7137\u0000\u7138\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7139\u713A\u0000"+ - "\u0000\u0000\u713B\u0000\u0000\u713D\u0000\u0000"+ - "\u0000\u713C\u0000\u713F\u7142\u0000\u0000\u0000"+ - "\u713E\u7140\u7141\u0000\u0000\u7143\u0000\u3642"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3C73\u7144"+ - "\u7145\u3961\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7146\u0000\u0000"+ - "\u333E\u0000\u0000\u0000\u474F\u7147\u7148\u0000"+ - "\u0000\u0000\u0000\u435A\u466B\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u7149\u0000\u0000\u0000"+ - "\u0000\u477D\u0000\u0000\u424C\u3158\u366E\u0000"+ - "\u366F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4373\u714E\u3670\u0000\u0000\u326F\u0000\u0000"+ - "\u714D\u0000\u0000\u714B\u0000\u714C\u0000\u714A"+ - "\u0000\u0000\u7158\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u714F\u7150\u0000"+ - "\u0000\u7151\u7152\u0000\u0000\u0000\u0000\u0000"+ - "\u7154\u0000\u0000\u7153\u0000\u0000\u0000\u3D59"+ - "\u0000\u7155\u0000\u0000\u0000\u7157\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3533\u7156"+ - "\u0000\u0000\u417B\u3833\u0000\u0000\u0000\u0000"+ - "\u0000\u7159\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u424D\u0000\u0000\u715A\u0000\u0000\u0000\u0000"+ - "\u462D\u0000\u0000\u0000\u0000\u0000\u0000\u715B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7160\u0000"+ - "\u715E\u0000\u715D\u715F\u0000\u715C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7162\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7161\u0000\u7164"+ - "\u0000\u0000\u3643\u7163\u0000\u0000\u0000\u7165"+ - "\u0000\u0000\u7166\u0000\u7168\u7167\u0000\u0000"+ - "\u0000\u7169\u716B\u716A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u397C\u0000\u0000\u0000\u0000\u716C\u0000\u0000"+ - "\u716D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u333C\u0000\u0000\u0000\u716E\u0000\u0000\u0000"+ - "\u716F\u0000\u0000\u0000\u3F71\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7170"+ - "\u0000\u7171\u0000\u7172\u7173\u0000\u0000\u0000"+ - "\u3962\u0000\u0000\u0000\u0000\u0000\u7174\u7175"+ - "\u0000\u0000\u7176\u7177\u0000\u0000\u7178\u0000"+ - "\u0000\u0000\u4831\u717A\u0000\u4926\u717B\u7179"+ - "\u0000\u717D\u0000\u0000\u717C\u0000\u0000\u717E"+ - "\u0000\u0000\u0000\u7221\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7222\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7223\u0000\u7224\u0000\u0000\u0000\u0000\u7225"+ - "\u0000\u0000\u7226\u7227\u0000\u7228\u0000\u7229"+ - "\u722A\u722B\u722C\u0000\u0000\u0000\u722D\u722E"+ - "\u0000\u5D35\u722F\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6478\u3534\u0000\u0000\u0000"+ - "\u0000\u3321\u3A32\u7231\u7230\u4C25\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7233\u7234\u7232"+ - "\u0000\u7235\u0000\u0000\u4B62\u0000\u0000\u0000"+ - "\u7236\u0000\u357B\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4F25"+ - "\u0000\u0000\u0000\u0000\u7237\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u7239\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u303E\u0000"+ - "\u0000\u723A\u4A2B\u7238\u0000\u0000\u723B\u723C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u723D"+ - "\u723E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u723F\u0000\u4B6E\u3B2D\u0000\u3A7A\u412F\u0000"+ - "\u0000\u0000\u0000\u0000\u7240\u0000\u0000\u0000"+ - "\u0000\u7243\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7241\u0000\u0000\u0000\u0000\u0000\u7244\u0000"+ - "\u0000\u3871\u7242\u0000\u0000\u0000\u0000\u7245"+ - "\u0000\u7246\u7247\u0000\u724B\u0000\u3B2A\u0000"+ - "\u0000\u0000\u0000\u4264\u0000\u0000\u0000\u0000"+ - "\u0000\u724C\u7249\u7248\u724A\u0000\u0000\u0000"+ - "\u375F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7250\u724F\u724E\u0000\u0000\u3033\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u725A\u0000\u7256\u0000"+ - "\u7257\u7253\u7259\u0000\u7255\u3362\u0000\u0000"+ - "\u4F4C\u0000\u7258\u7254\u7252\u7251\u0000\u0000"+ - "\u0000\u0000\u0000\u725C\u0000\u0000\u0000\u0000"+ - "\u0000\u725F\u0000\u0000\u725E\u725D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4949\u725B\u3073"+ - "\u7260\u0000\u7262\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u336F\u724D\u3137\u0000\u0000\u7264\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7263\u7261"+ - "\u432D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4B70\u0000\u0000\u0000\u0000\u4E5A"+ - "\u0000\u0000\u7265\u0000\u0000\u0000\u0000\u0000"+ - "\u7266\u0000\u0000\u0000\u0000\u0000\u0000\u7267"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7268\u0000"+ - "\u7269\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u443B\u0000\u726A"+ - "\u0000\u4837\u0000\u726F\u726B\u0000\u0000\u0000"+ - "\u726C\u0000\u0000\u4B31\u4C44\u0000\u4650\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u7270\u0000\u0000\u7271\u463E"+ - "\u726E\u726D\u0000\u0000\u0000\u0000\u322A\u0000"+ - "\u0000\u0000\u7279\u0000\u0000\u7278\u0000\u0000"+ - "\u0000\u0000\u0000\u3175\u0000\u0000\u0000\u7276"+ - "\u0000\u0000\u0000\u7275\u0000\u0000\u7273\u0000"+ - "\u337B\u0000\u7272\u3C32\u3229\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3963\u0000\u0000\u727C\u727B"+ - "\u0000\u727A\u0000\u0000\u7277\u0000\u727D\u0000"+ - "\u727E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7325\u7324\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u7326\u0000\u0000\u312D\u7321\u7322\u0000"+ - "\u3974\u4C39\u0000\u0000\u7323\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4B32\u0000\u0000\u732B"+ - "\u0000\u0000\u7327\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u732C\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7329"+ - "\u0000\u7328\u0000\u0000\u0000\u0000\u0000\u375C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u732D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u732E\u0000\u0000\u0000"+ - "\u0000\u732F\u0000\u732A\u0000\u0000\u0000\u7274"+ - "\u0000\u0000\u7330\u0000\u4461\u0000\u0000\u0000"+ - "\u7334\u0000\u7335\u7333\u0000\u0000\u0000\u0000"+ - "\u0000\u7332\u7338\u0000\u7331\u0000\u7336\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7337"+ - "\u0000\u0000\u0000\u733A\u0000\u0000\u0000\u0000"+ - "\u0000\u7339\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u733C\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u733D\u0000\u733E"+ - "\u0000\u0000\u4F49\u0000\u0000\u0000\u0000\u0000"+ - "\u733B\u426B\u3A6D\u0000\u0000\u733F\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u7340\u7341\u0000\u0000\u7342\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7343\u0000\u0000"+ - "\u3834\u7344\u0000\u0000\u0000\u7345\u0000\u3C2F"+ - "\u0000\u7346\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7347\u0000\u0000\u7348\u7349\u0000\u0000\u0000"+ - "\u0000\u734C\u734A\u4F3C\u0000\u734B\u0000\u4E6F"+ - "\u0000\u0000\u0000\u0000\u0000\u734D\u0000\u4E5B"+ - "\u0000\u0000\u0000\u0000\u0000\u734E\u477E\u0000"+ - "\u0000\u734F\u7351\u0000\u0000\u7352\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7350\u396D\u4C4D\u4B63\u5677\u0000\u5D60\u4B7B"+ - "\u0000\u0000\u0000\u0000\u322B\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u7354\u3550\u7355\u7356"+ - "\u7357\u0000\u3975\u0000\u7358\u0000\u0000\u0000"+ - "\u6054\u4C5B\u0000\u4263\u7359\u735B\u735A\u0000"+ - "\u735C\u0000\u0000\u0000\u0000\u735D\u0000\u0000"+ - "\u735E\u0000\u0000\u0000\u0000\u0000\u0000\u735F"+ - "\u0000\u0000\u0000\u0000\u7360\u0000\u7361\u7362"+ - "\u0000\u7363\u0000\u7364\u7365\u7366\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7367"+ - "\u7368\u0000\u0000\u0000\u0000\u0000\u4524\u0000"+ - "\u0000\u0000\u0000\u385D\u0000\u736A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u414D\u736B\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u736C\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4921\u0000\u0000\u736D\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u736E\u6337\u0000\u0000\u6C5A\u706D"+ - "\u0000\u0000\u736F\u0000\u7370\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7372"+ - "\u7373\u7374\u4E70\u7371\u0000\u0000\u7375\u7376"+ - "\u0000\u0000\u7378\u0000\u7377\u0000\u0000\u0000"+ - "\u0000\u0000\u737A\u0000\u0000\u0000\u737B\u7379"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4E36\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u737C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u737D\u6354\u0000\u0000"+ - "\u737E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"; - - private final static String innerIndex6= - "\u7521\u7522\u7523\u7524\u7525\u7526\u7527\u7528"+ - "\u7529\u752A\u752B\u752C\u752D\u752E\u752F\u7530"+ - "\u7531\u7532\u7533\u7534\u7535\u7536\u7537\u7538"+ - "\u7539\u753A\u753B\u753C\u753D\u753E\u753F\u7540"+ - "\u7541\u7542\u7543\u7544\u7545\u7546\u7547\u7548"+ - "\u7549\u754A\u754B\u754C\u754D\u754E\u754F\u7550"+ - "\u7551\u7552\u7553\u7554\u7555\u7556\u7557\u7558"+ - "\u7559\u755A\u755B\u755C\u755D\u755E\u755F\u7560"+ - "\u7561\u7562\u7563\u7564\u7565\u7566\u7567\u7568"+ - "\u7569\u756A\u756B\u756C\u756D\u756E\u756F\u7570"+ - "\u7571\u7572\u7573\u7574\u7575\u7576\u7577\u7578"+ - "\u7579\u757A\u757B\u757C\u757D\u757E\u7621\u7622"+ - "\u7623\u7624\u7625\u7626\u7627\u7628\u7629\u762A"+ - "\u762B\u762C\u762D\u762E\u762F\u7630\u7631\u7632"+ - "\u7633\u7634\u7635\u7636\u7637\u7638\u7639\u763A"+ - "\u763B\u763C\u763D\u763E\u763F\u7640\u7641\u7642"+ - "\u7643\u7644\u7645\u7646\u7647\u7648\u7649\u764A"+ - "\u764B\u764C\u764D\u764E\u764F\u7650\u7651\u7652"+ - "\u7653\u7654\u7655\u7656\u7657\u7658\u7659\u765A"+ - "\u765B\u765C\u765D\u765E\u765F\u7660\u7661\u7662"+ - "\u7663\u7664\u7665\u7666\u7667\u7668\u7669\u766A"+ - "\u766B\u766C\u766D\u766E\u766F\u7670\u7671\u7672"+ - "\u7673\u7674\u7675\u7676\u7677\u7678\u7679\u767A"+ - "\u767B\u767C\u767D\u767E\u7721\u7722\u7723\u7724"+ - "\u7725\u7726\u7727\u7728\u7729\u772A\u772B\u772C"+ - "\u772D\u772E\u772F\u7730\u7731\u7732\u7733\u7734"+ - "\u7735\u7736\u7737\u7738\u7739\u773A\u773B\u773C"+ - "\u773D\u773E\u773F\u7740\u7741\u7742\u7743\u7744"+ - "\u7745\u7746\u7747\u7748\u7749\u774A\u774B\u774C"+ - "\u774D\u774E\u774F\u7750\u7751\u7752\u7753\u7754"+ - "\u7755\u7756\u7757\u7758\u7759\u775A\u775B\u775C"+ - "\u775D\u775E\u775F\u7760\u7761\u7762\u7763\u7764"+ - "\u7765\u7766\u7767\u7768\u7769\u776A\u776B\u776C"+ - "\u776D\u776E\u776F\u7770\u7771\u7772\u7773\u7774"+ - "\u7775\u7776\u7777\u7778\u7779\u777A\u777B\u777C"+ - "\u777D\u777E\u7821\u7822\u7823\u7824\u7825\u7826"+ - "\u7827\u7828\u7829\u782A\u782B\u782C\u782D\u782E"+ - "\u782F\u7830\u7831\u7832\u7833\u7834\u7835\u7836"+ - "\u7837\u7838\u7839\u783A\u783B\u783C\u783D\u783E"+ - "\u783F\u7840\u7841\u7842\u7843\u7844\u7845\u7846"+ - "\u7847\u7848\u7849\u784A\u784B\u784C\u784D\u784E"+ - "\u784F\u7850\u7851\u7852\u7853\u7854\u7855\u7856"+ - "\u7857\u7858\u7859\u785A\u785B\u785C\u785D\u785E"+ - "\u785F\u7860\u7861\u7862\u7863\u7864\u7865\u7866"+ - "\u7867\u7868\u7869\u786A\u786B\u786C\u786D\u786E"+ - "\u786F\u7870\u7871\u7872\u7873\u7874\u7875\u7876"+ - "\u7877\u7878\u7879\u787A\u787B\u787C\u787D\u787E"+ - "\u7921\u7922\u7923\u7924\u7925\u7926\u7927\u7928"+ - "\u7929\u792A\u792B\u792C\u792D\u792E\u792F\u7930"+ - "\u7931\u7932\u7933\u7934\u7935\u7936\u7937\u7938"+ - "\u7939\u793A\u793B\u793C\u793D\u793E\u793F\u7940"+ - "\u7941\u7942\u7943\u7944\u7945\u7946\u7947\u7948"+ - "\u7949\u794A\u794B\u794C\u794D\u794E\u794F\u7950"+ - "\u7951\u7952\u7953\u7954\u7955\u7956\u7957\u7958"+ - "\u7959\u795A\u795B\u795C\u795D\u795E\u795F\u7960"+ - "\u7961\u7962\u7963\u7964\u7965\u7966\u7967\u7968"+ - "\u7969\u796A\u796B\u796C\u796D\u796E\u796F\u7970"+ - "\u7971\u7972\u7973\u7974\u7975\u7976\u7977\u7978"+ - "\u7979\u797A\u797B\u797C\u797D\u797E\u7A21\u7A22"+ - "\u7A23\u7A24\u7A25\u7A26\u7A27\u7A28\u7A29\u7A2A"+ - "\u7A2B\u7A2C\u7A2D\u7A2E\u7A2F\u7A30\u7A31\u7A32"+ - "\u7A33\u7A34\u7A35\u7A36\u7A37\u7A38\u7A39\u7A3A"+ - "\u7A3B\u7A3C\u7A3D\u7A3E\u7A3F\u7A40\u7A41\u7A42"+ - "\u7A43\u7A44\u7A45\u7A46\u7A47\u7A48\u7A49\u7A4A"+ - "\u7A4B\u7A4C\u7A4D\u7A4E\u7A4F\u7A50\u7A51\u7A52"+ - "\u7A53\u7A54\u7A55\u7A56\u7A57\u7A58\u7A59\u7A5A"+ - "\u7A5B\u7A5C\u7A5D\u7A5E\u7A5F\u7A60\u7A61\u7A62"+ - "\u7A63\u7A64\u7A65\u7A66\u7A67\u7A68\u7A69\u7A6A"+ - "\u7A6B\u7A6C\u7A6D\u7A6E\u7A6F\u7A70\u7A71\u7A72"+ - "\u7A73\u7A74\u7A75\u7A76\u7A77\u7A78\u7A79\u7A7A"+ - "\u7A7B\u7A7C\u7A7D\u7A7E\u7B21\u7B22\u7B23\u7B24"+ - "\u7B25\u7B26\u7B27\u7B28\u7B29\u7B2A\u7B2B\u7B2C"+ - "\u7B2D\u7B2E\u7B2F\u7B30\u7B31\u7B32\u7B33\u7B34"+ - "\u7B35\u7B36\u7B37\u7B38\u7B39\u7B3A\u7B3B\u7B3C"+ - "\u7B3D\u7B3E\u7B3F\u7B40\u7B41\u7B42\u7B43\u7B44"+ - "\u7B45\u7B46\u7B47\u7B48\u7B49\u7B4A\u7B4B\u7B4C"+ - "\u7B4D\u7B4E\u7B4F\u7B50\u7B51\u7B52\u7B53\u7B54"+ - "\u7B55\u7B56\u7B57\u7B58\u7B59\u7B5A\u7B5B\u7B5C"+ - "\u7B5D\u7B5E\u7B5F\u7B60\u7B61\u7B62\u7B63\u7B64"+ - "\u7B65\u7B66\u7B67\u7B68\u7B69\u7B6A\u7B6B\u7B6C"+ - "\u7B6D\u7B6E\u7B6F\u7B70\u7B71\u7B72\u7B73\u7B74"+ - "\u7B75\u7B76\u7B77\u7B78\u7B79\u7B7A\u7B7B\u7B7C"+ - "\u7B7D\u7B7E\u7C21\u7C22\u7C23\u7C24\u7C25\u7C26"+ - "\u7C27\u7C28\u7C29\u7C2A\u7C2B\u7C2C\u7C2D\u7C2E"+ - "\u7C2F\u7C30\u7C31\u7C32\u7C33\u7C34\u7C35\u7C36"+ - "\u7C37\u7C38\u7C39\u7C3A\u7C3B\u7C3C\u7C3D\u7C3E"+ - "\u7C3F\u7C40\u7C41\u7C42\u7C43\u7C44\u7C45\u7C46"+ - "\u7C47\u7C48\u7C49\u7C4A\u7C4B\u7C4C\u7C4D\u7C4E"+ - "\u7C4F\u7C50\u7C51\u7C52\u7C53\u7C54\u7C55\u7C56"+ - "\u7C57\u7C58\u7C59\u7C5A\u7C5B\u7C5C\u7C5D\u7C5E"+ - "\u7C5F\u7C60\u7C61\u7C62\u7C63\u7C64\u7C65\u7C66"+ - "\u7C67\u7C68\u7C69\u7C6A\u7C6B\u7C6C\u7C6D\u7C6E"+ - "\u7C6F\u7C70\u7C71\u7C72\u7C73\u7C74\u7C75\u7C76"+ - "\u7C77\u7C78\u7C79\u7C7A\u7C7B\u7C7C\u7C7D\u7C7E"+ - "\u7D21\u7D22\u7D23\u7D24\u7D25\u7D26\u7D27\u7D28"+ - "\u7D29\u7D2A\u7D2B\u7D2C\u7D2D\u7D2E\u7D2F\u7D30"+ - "\u7D31\u7D32\u7D33\u7D34\u7D35\u7D36\u7D37\u7D38"+ - "\u7D39\u7D3A\u7D3B\u7D3C\u7D3D\u7D3E\u7D3F\u7D40"+ - "\u7D41\u7D42\u7D43\u7D44\u7D45\u7D46\u7D47\u7D48"+ - "\u7D49\u7D4A\u7D4B\u7D4C\u7D4D\u7D4E\u7D4F\u7D50"+ - "\u7D51\u7D52\u7D53\u7D54\u7D55\u7D56\u7D57\u7D58"+ - "\u7D59\u7D5A\u7D5B\u7D5C\u7D5D\u7D5E\u7D5F\u7D60"+ - "\u7D61\u7D62\u7D63\u7D64\u7D65\u7D66\u7D67\u7D68"+ - "\u7D69\u7D6A\u7D6B\u7D6C\u7D6D\u7D6E\u7D6F\u7D70"+ - "\u7D71\u7D72\u7D73\u7D74\u7D75\u7D76\u7D77\u7D78"+ - "\u7D79\u7D7A\u7D7B\u7D7C\u7D7D\u7D7E\u7E21\u7E22"+ - "\u7E23\u7E24\u7E25\u7E26\u7E27\u7E28\u7E29\u7E2A"+ - "\u7E2B\u7E2C\u7E2D\u7E2E\u7E2F\u7E30\u7E31\u7E32"+ - "\u7E33\u7E34\u7E35\u7E36\u7E37\u7E38\u7E39\u7E3A"+ - "\u7E3B\u7E3C\u7E3D\u7E3E\u7E3F\u7E40\u7E41\u7E42"+ - "\u7E43\u7E44\u7E45\u7E46\u7E47\u7E48\u7E49\u7E4A"+ - "\u7E4B\u7E4C\u7E4D\u7E4E\u7E4F\u7E50\u7E51\u7E52"+ - "\u7E53\u7E54\u7E55\u7E56\u7E57\u7E58\u7E59\u7E5A"+ - "\u7E5B\u7E5C\u7E5D\u7E5E\u7E5F\u7E60\u7E61\u7E62"+ - "\u7E63\u7E64\u7E65\u7E66\u7E67\u7E68\u7E69\u7E6A"+ - "\u7E6B\u7E6C\u7E6D\u7E6E\u7E6F\u7E70\u7E71\u7E72"+ - "\u7E73\u7E74\u7E75\u7E76\u7E77\u7E78\u7E79\u7E7A"+ - "\u7E7B\u7E7C\u7E7D\u7E7E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u212A\u0000\u2174\u2170\u2173\u2175\u0000"+ - "\u214A\u214B\u2176\u215C\u2124\u215d\u2125\u213F"+ - "\u2330\u2331\u2332\u2333\u2334\u2335\u2336\u2337"+ - "\u2338\u2339\u2127\u2128\u2163\u2161\u2164\u2129"+ - "\u2177\u2341\u2342\u2343\u2344\u2345\u2346\u2347"+ - "\u2348\u2349\u234A\u234B\u234C\u234D\u234E\u234F"+ - "\u2350\u2351\u2352\u2353\u2354\u2355\u2356\u2357"+ - "\u2358\u2359\u235A\u214E\u2140\u214F\u2130\u2132"+ - "\u212E\u2361\u2362\u2363\u2364\u2365\u2366\u2367"+ - "\u2368\u2369\u236A\u236B\u236C\u236D\u236E\u236F"+ - "\u2370\u2371\u2372\u2373\u2374\u2375\u2376\u2377"+ - "\u2378\u2379\u237A\u2150\u2143\u2151\u0000\u0000"+ - "\u0000\u2123\u2156\u2157\u2122\u2126\u2572\u2521"+ - "\u2523\u2525\u2527\u2529\u2563\u2565\u2567\u2543"+ - "\u213c\u2522\u2524\u2526\u2528\u252a\u252b\u252d"+ - "\u252f\u2531\u2533\u2535\u2537\u2539\u253b\u253d"+ - "\u253f\u2541\u2544\u2546\u2548\u254a\u254b\u254c"+ - "\u254d\u254e\u254f\u2552\u2555\u2558\u255b\u255e"+ - "\u255f\u2560\u2561\u2562\u2564\u2566\u2568\u2569"+ - "\u256a\u256b\u256c\u256d\u256f\u2573\u212b\u212c"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2171\u2172\u224c\u2131\u0000\u216F\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"; - - protected final static short index1[] = { - 1, 0, 0, 2, 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, - 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 12, 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, 14, 15, - 16, 17, 18, 19, 20, 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, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 97, 98, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100 - }; - - protected final static String index2[] = { - innerIndex0, - innerIndex1, - innerIndex2, - innerIndex3, - innerIndex4, - innerIndex5, - innerIndex6 - }; -} diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_MS932_Decoder.java b/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_MS932_Decoder.java deleted file mode 100644 index 1288bf93156..00000000000 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_MS932_Decoder.java +++ /dev/null @@ -1,1048 +0,0 @@ -/* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.nio.cs.ext; - -import java.nio.charset.Charset; -import java.nio.charset.CharsetEncoder; - -class JIS_X_0208_MS932_Decoder -{ - private final static String innerIndex0= - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3000\u3001"+ - "\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01"+ - "\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F"+ - "\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006"+ - "\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225"+ - "\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08"+ - "\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008"+ - "\u3009\u300A\u300B\u300C\u300D\u300E\u300F\u3010"+ - "\u3011\uFF0B\uFF0D\u00B1\u00D7\u00F7\uFF1D\u2260"+ - "\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640"+ - "\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1"+ - "\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605"+ - "\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3"+ - "\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191"+ - "\u2193\u3013\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2208\u220B\u2286"+ - "\u2287\u2282\u2283\u222A\u2229\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2227\u2228\uFFE2"+ - "\u21D2\u21D4\u2200\u2203\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2220"+ - "\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B"+ - "\u221A\u223D\u221D\u2235\u222B\u222C\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u212B\u2030\u266F"+ - "\u266D\u266A\u2020\u2021\u00B6\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\u25EF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16"+ - "\uFF17\uFF18\uFF19\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26"+ - "\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E"+ - "\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36"+ - "\uFF37\uFF38\uFF39\uFF3A\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46"+ - "\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E"+ - "\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56"+ - "\uFF57\uFF58\uFF59\uFF5A\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048"+ - "\u3049\u304A\u304B\u304C\u304D\u304E\u304F\u3050"+ - "\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058"+ - "\u3059\u305A\u305B\u305C\u305D\u305E\u305F\u3060"+ - "\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068"+ - "\u3069\u306A\u306B\u306C\u306D\u306E\u306F\u3070"+ - "\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078"+ - "\u3079\u307A\u307B\u307C\u307D\u307E\u307F\u3080"+ - "\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088"+ - "\u3089\u308A\u308B\u308C\u308D\u308E\u308F\u3090"+ - "\u3091\u3092\u3093\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u30A1\u30A2"+ - "\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA"+ - "\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2"+ - "\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA"+ - "\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2"+ - "\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA"+ - "\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2"+ - "\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA"+ - "\u30DB\u30DC\u30DD\u30DE\u30DF\u30E0\u30E1\u30E2"+ - "\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA"+ - "\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2"+ - "\u30F3\u30F4\u30F5\u30F6\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\u0391\u0392\u0393\u0394"+ - "\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C"+ - "\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5"+ - "\u03A6\u03A7\u03A8\u03A9\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\u03B1\u03B2\u03B3\u03B4"+ - "\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC"+ - "\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5"+ - "\u03C6\u03C7\u03C8\u03C9\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\u0410\u0411\u0412\u0413\u0414\u0415"+ - "\u0401\u0416\u0417\u0418\u0419\u041A\u041B\u041C"+ - "\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424"+ - "\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C"+ - "\u042D\u042E\u042F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\u0430\u0431\u0432\u0433\u0434\u0435"+ - "\u0451\u0436\u0437\u0438\u0439\u043A\u043B\u043C"+ - "\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444"+ - "\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C"+ - "\u044D\u044E\u044F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C"+ - "\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B"+ - "\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F"+ - "\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2460\u2461"+ - "\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469"+ - "\u246A\u246B\u246C\u246D\u246E\u246F\u2470\u2471"+ - "\u2472\u2473\u2160\u2161\u2162\u2163\u2164\u2165"+ - "\u2166\u2167\u2168\u2169\uFFFD\u3349\u3314\u3322"+ - "\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D"+ - "\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E"+ - "\u338E\u338F\u33C4\u33A1\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\u337B\u301D\u301F\u2116"+ - "\u33CD\u2121\u32A4\u32A5\u32A6\u32A7\u32A8\u3231"+ - "\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B"+ - "\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235"+ - "\u2229\u222A\uFFFD\uFFFD\u4E9C\u5516\u5A03\u963F"+ - "\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50"+ - "\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893"+ - "\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62"+ - "\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309"+ - "\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D"+ - "\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF"+ - "\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB"+ - "\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A"+ - "\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00"+ - "\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141"+ - "\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB"+ - "\u80E4\u852D\u9662\u9670\u96A0\u97FB\u540B\u53F3"+ - "\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA"+ - "\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A"+ - "\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91"+ - "\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71"+ - "\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8"+ - "\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB"+ - "\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD"+ - "\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9"+ - "\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F"+ - "\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869"+ - "\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC"+ - "\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956"+ - "\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B"+ - "\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069"+ - "\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D"+ - "\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6"+ - "\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B"+ - "\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304"+ - "\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6"+ - "\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B"+ - "\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB"+ - "\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A"+ - "\u6094\u6062\u61D0\u6212\u62D0\u6539\u9B41\u6666"+ - "\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9"+ - "\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3"+ - "\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72"+ - "\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE"+ - "\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C"+ - "\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B"+ - "\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D"+ - "\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D"+ - "\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1"+ - "\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A"+ - "\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B"+ - "\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6"+ - "\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB"+ - "\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79"+ - "\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853"+ - "\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0"+ - "\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36"+ - "\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084"+ - "\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218"+ - "\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9"+ - "\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E"+ - "\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90"+ - "\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F"+ - "\u68CB\u68C4\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F"+ - "\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4"+ - "\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D"+ - "\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0"+ - "\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA"+ - "\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827"+ - "\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18"+ - "\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025"+ - "\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76"+ - "\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB"+ - "\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31"+ - "\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC"; - - private final static String innerIndex1= - "\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354"+ - "\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A"+ - "\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2"+ - "\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1"+ - "\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D"+ - "\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4"+ - "\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981"+ - "\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39"+ - "\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A"+ - "\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2"+ - "\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047"+ - "\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\u6398\u7A9F"+ - "\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817"+ - "\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4"+ - "\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211"+ - "\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84"+ - "\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F"+ - "\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B"+ - "\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD"+ - "\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483"+ - "\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74"+ - "\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065"+ - "\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA"+ - "\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC"+ - "\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19"+ - "\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78"+ - "\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384"+ - "\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B"+ - "\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27"+ - "\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1"+ - "\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867"+ - "\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F"+ - "\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E"+ - "\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF"+ - "\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A"+ - "\u53E3\u5411\u540E\u5589\u5751\u57A2\u597D\u5B54"+ - "\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A"+ - "\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B"+ - "\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F"+ - "\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F"+ - "\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF"+ - "\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B"+ - "\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4"+ - "\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7"+ - "\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B"+ - "\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344"+ - "\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC"+ - "\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068"+ - "\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A"+ - "\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6"+ - "\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF"+ - "\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9"+ - "\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73"+ - "\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E"+ - "\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750"+ - "\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4"+ - "\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B"+ - "\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F"+ - "\u685C\u9BAD\u7B39\u5319\u518A\u5237\u5BDF\u62F6"+ - "\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6"+ - "\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2"+ - "\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523"+ - "\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC"+ - "\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8"+ - "\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50"+ - "\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C"+ - "\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345"+ - "\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3"+ - "\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC"+ - "\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57"+ - "\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E"+ - "\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494"+ - "\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8"+ - "\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4"+ - "\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0"+ - "\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199"+ - "\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005"+ - "\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A"+ - "\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2"+ - "\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A"+ - "\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112"+ - "\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA"+ - "\u53CE\u5468\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE"+ - "\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F"+ - "\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B"+ - "\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93"+ - "\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283"+ - "\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E"+ - "\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC"+ - "\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89"+ - "\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187"+ - "\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6"+ - "\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9"+ - "\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F"+ - "\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617"+ - "\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A"+ - "\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C"+ - "\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F"+ - "\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167"+ - "\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11"+ - "\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3"+ - "\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266"+ - "\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57"+ - "\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5"+ - "\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8"+ - "\u8B72\u91B8\u9320\u5631\u57F4\u98FE\u62ED\u690D"+ - "\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755"+ - "\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD"+ - "\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B"+ - "\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33"+ - "\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032"+ - "\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B"+ - "\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25"+ - "\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782"+ - "\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870"+ - "\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07"+ - "\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919"+ - "\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16"+ - "\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81"+ - "\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816"+ - "\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0"+ - "\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752"+ - "\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A"+ - "\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A"+ - "\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5"+ - "\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76"+ - "\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02"+ - "\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9"+ - "\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F"+ - "\u7BAD\u7DDA\u7E4A\u7FA8\u817A\u821B\u8239\u85A6"+ - "\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583"+ - "\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55"+ - "\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD"+ - "\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97"+ - "\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7"+ - "\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D"+ - "\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F"+ - "\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15"+ - "\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C"+ - "\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70"+ - "\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E"+ - "\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373"+ - "\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E"+ - "\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58"+ - "\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A"+ - "\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1"+ - "\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE"+ - "\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF"+ - "\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000"+ - "\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C"+ - "\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85"+ - "\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438"+ - "\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\u53E9\u4F46"+ - "\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA"+ - "\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606"+ - "\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD"+ - "\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95"+ - "\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5"+ - "\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A"+ - "\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3"+ - "\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92"+ - "\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD"+ - "\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3"+ - "\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01"+ - "\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14"+ - "\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E"+ - "\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF"+ - "\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5"+ - "\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673"+ - "\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A"+ - "\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB"+ - "\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C"+ - "\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C"+ - "\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95"+ - "\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF"+ - "\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6"+ - "\u8E44\u9013\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458"+ - "\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA"+ - "\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B"+ - "\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2"+ - "\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E"+ - "\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C"+ - "\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825"+ - "\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A"+ - "\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95"+ - "\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC"+ - "\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53"+ - "\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230"; - - private final static String innerIndex2= - "\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003"+ - "\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5"+ - "\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5"+ - "\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97"+ - "\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC"+ - "\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6"+ - "\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566"+ - "\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948"+ - "\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A"+ - "\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF"+ - "\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1"+ - "\u8089\u8679\u5EFF\u65E5\u4E73\u5165\u5982\u5C3F"+ - "\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962"+ - "\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A"+ - "\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9"+ - "\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4"+ - "\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436"+ - "\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD"+ - "\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29"+ - "\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD"+ - "\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7"+ - "\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D"+ - "\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206"+ - "\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8"+ - "\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B"+ - "\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C"+ - "\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34"+ - "\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F"+ - "\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C"+ - "\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D"+ - "\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351"+ - "\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB"+ - "\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB"+ - "\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB"+ - "\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435"+ - "\u7709\u7F8E\u9F3B\u67CA\u7A17\u5339\u758B\u9AED"+ - "\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46"+ - "\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5"+ - "\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55"+ - "\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2"+ - "\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015"+ - "\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0"+ - "\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276"+ - "\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A"+ - "\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE"+ - "\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953"+ - "\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D"+ - "\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8"+ - "\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4"+ - "\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587"+ - "\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A"+ - "\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB"+ - "\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F"+ - "\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF"+ - "\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703"+ - "\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893"+ - "\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8"+ - "\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29"+ - "\u5E96\u62B1\u6367\u653E\u65B9\u670B\u6CD5\u6CE1"+ - "\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702"+ - "\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C"+ - "\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8"+ - "\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21"+ - "\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420"+ - "\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267"+ - "\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C"+ - "\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54"+ - "\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9"+ - "\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6"+ - "\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D"+ - "\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A"+ - "\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1"+ - "\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922"+ - "\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18"+ - "\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4"+ - "\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762"+ - "\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B"+ - "\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE"+ - "\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F"+ - "\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A"+ - "\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC"+ - "\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108"+ - "\u6CB9\u7652\u8AED\u8F38\u552F\u4F51\u512A\u52C7"+ - "\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA"+ - "\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98"+ - "\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59"+ - "\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9"+ - "\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B"+ - "\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9"+ - "\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291"+ - "\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA"+ - "\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D"+ - "\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D"+ - "\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483"+ - "\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387"+ - "\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409"+ - "\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E"+ - "\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE"+ - "\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7"+ - "\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1"+ - "\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A"+ - "\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E"+ - "\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2"+ - "\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62"+ - "\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B"+ - "\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\u84EE\u9023"+ - "\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732"+ - "\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A"+ - "\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE"+ - "\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C"+ - "\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99"+ - "\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897"+ - "\u8155\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\u5F0C\u4E10\u4E15\u4E2A"+ - "\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82"+ - "\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F"+ - "\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4"+ - "\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09"+ - "\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88"+ - "\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86"+ - "\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1"+ - "\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A"+ - "\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE"+ - "\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050"+ - "\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085"+ - "\u50B4\u50B2\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE"+ - "\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101"+ - "\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137"+ - "\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162"+ - "\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C"+ - "\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6"+ - "\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0"+ - "\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9"+ - "\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E"+ - "\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B"+ - "\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F"+ - "\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8"+ - "\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7"+ - "\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8"+ - "\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315"+ - "\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346"+ - "\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E"+ - "\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5"+ - "\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC"+ - "\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440"+ - "\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E"+ - "\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492"+ - "\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2"+ - "\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\u54AB\u54C2"+ - "\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514"+ - "\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563"+ - "\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533"+ - "\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E"+ - "\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8"+ - "\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614"+ - "\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650"+ - "\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F"+ - "\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F"+ - "\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3"+ - "\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9"+ - "\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713"+ - "\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E"+ - "\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F"+ - "\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3"+ - "\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B"+ - "\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0"+ - "\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA"+ - "\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7"+ - "\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA"+ - "\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B"+ - "\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2"+ - "\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967"+ - "\u596C\u5969\u5978\u5981\u599D\u4F5E\u4FAB\u59A3"+ - "\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25"+ - "\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49"+ - "\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB"+ - "\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA"+ - "\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36"+ - "\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B"+ - "\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A"+ - "\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4"+ - "\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0"+ - "\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20"+ - "\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53"; - - private final static String innerIndex3= - "\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79"+ - "\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC"+ - "\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA"+ - "\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F"+ - "\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C"+ - "\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84"+ - "\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7"+ - "\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB"+ - "\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36"+ - "\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F"+ - "\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F"+ - "\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\u5ED6\u5EE3"+ - "\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC"+ - "\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09"+ - "\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38"+ - "\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57"+ - "\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F"+ - "\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0"+ - "\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1"+ - "\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029"+ - "\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A"+ - "\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D"+ - "\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081"+ - "\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097"+ - "\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4"+ - "\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106"+ - "\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB"+ - "\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A"+ - "\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173"+ - "\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165"+ - "\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187"+ - "\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC"+ - "\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB"+ - "\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF"+ - "\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C"+ - "\u6214\u621B\u621E\u6221\u622A\u622E\u6230\u6232"+ - "\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268"+ - "\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4"+ - "\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6"+ - "\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B"+ - "\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF"+ - "\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E"+ - "\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5"+ - "\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9"+ - "\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426"+ - "\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476"+ - "\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC"+ - "\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1"+ - "\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C"+ - "\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C"+ - "\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536"+ - "\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E"+ - "\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F"+ - "\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2"+ - "\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603"+ - "\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644"+ - "\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F"+ - "\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698"+ - "\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\u66C4\u66B8"+ - "\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5"+ - "\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E"+ - "\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760"+ - "\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A"+ - "\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4"+ - "\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2"+ - "\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846"+ - "\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859"+ - "\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D"+ - "\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA"+ - "\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922"+ - "\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936"+ - "\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF"+ - "\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977"+ - "\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974"+ - "\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A"+ - "\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE"+ - "\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991"+ - "\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B"+ - "\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E"+ - "\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13"+ - "\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59"+ - "\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84"+ - "\u6AA2\u6AA3\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8"+ - "\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA"+ - "\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F"+ - "\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49"+ - "\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79"+ - "\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E"+ - "\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7"+ - "\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3"+ - "\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23"+ - "\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81"+ - "\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1"+ - "\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE"+ - "\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36"+ - "\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C"+ - "\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95"+ - "\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6"+ - "\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5"+ - "\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E"+ - "\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B"+ - "\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF"+ - "\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3"+ - "\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5"+ - "\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE"+ - "\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\u6F3E\u6F13"+ - "\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B"+ - "\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2"+ - "\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA"+ - "\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB"+ - "\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B"+ - "\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032"+ - "\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8"+ - "\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD"+ - "\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C"+ - "\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC"+ - "\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0"+ - "\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210"+ - "\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C"+ - "\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282"+ - "\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2"+ - "\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1"+ - "\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D"+ - "\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8"+ - "\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A"+ - "\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE"+ - "\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455"+ - "\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463"+ - "\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF"+ - "\u74D4\u73F1\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2"+ - "\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C"+ - "\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C"+ - "\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569"+ - "\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587"+ - "\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5"+ - "\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC"+ - "\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE"+ - "\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B"+ - "\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624"+ - "\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658"+ - "\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670"+ - "\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B"+ - "\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8"+ - "\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1"+ - "\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704"+ - "\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738"+ - "\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E"+ - "\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6"+ - "\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7"+ - "\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926"+ - "\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A"+ - "\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB"+ - "\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\u78E7\u78DA"+ - "\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B"+ - "\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A"+ - "\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3"+ - "\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3"+ - "\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31"+ - "\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62"+ - "\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95"+ - "\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4"+ - "\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3"+ - "\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0"+ - "\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E"+ - "\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B"+ - "\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71"+ - "\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A"+ - "\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC"+ - "\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6"+ - "\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17"+ - "\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B"+ - "\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58"+ - "\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90"+ - "\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2"+ - "\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8"+ - "\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6"+ - "\u7CFA\u7D06\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B"+ - "\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E"+ - "\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B"+ - "\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7"+ - "\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F"+ - "\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1"+ - "\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09"+ - "\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43"+ - "\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59"+ - "\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5"+ - "\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90"+ - "\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A"; - - private final static String innerIndex4= - "\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54"+ - "\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82"+ - "\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D"+ - "\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8"+ - "\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6"+ - "\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012"+ - "\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A"+ - "\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073"+ - "\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086"+ - "\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB"+ - "\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF"+ - "\u80F1\u811B\u8129\u8123\u812F\u814B\u968B\u8146"+ - "\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166"+ - "\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195"+ - "\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE"+ - "\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1"+ - "\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA"+ - "\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D"+ - "\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259"+ - "\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A"+ - "\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292"+ - "\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2"+ - "\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE"+ - "\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332"+ - "\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317"+ - "\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323"+ - "\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0"+ - "\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403"+ - "\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D"+ - "\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A"+ - "\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482"+ - "\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462"+ - "\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0"+ - "\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517"+ - "\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563"+ - "\u8558\u8548\u8541\u8602\u854B\u8555\u8580\u85A4"+ - "\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA"+ - "\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF"+ - "\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A"+ - "\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630"+ - "\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693"+ - "\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4"+ - "\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9"+ - "\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700"+ - "\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734"+ - "\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F"+ - "\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759"+ - "\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF"+ - "\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3"+ - "\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D"+ - "\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815"+ - "\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844"+ - "\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E"+ - "\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892"+ - "\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1"+ - "\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902"+ - "\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913"+ - "\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B"+ - "\u8936\u8938\u894C\u891D\u8960\u895E\u8966\u8964"+ - "\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988"+ - "\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF"+ - "\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD"+ - "\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B"+ - "\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48"+ - "\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8"+ - "\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD"+ - "\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14"+ - "\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A"+ - "\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26"+ - "\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49"+ - "\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74"+ - "\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99"+ - "\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50"+ - "\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85"+ - "\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD"+ - "\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1"+ - "\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05"+ - "\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD"+ - "\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99"+ - "\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB"+ - "\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09"+ - "\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30"+ - "\u8E34\u8E4A\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59"+ - "\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C"+ - "\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91"+ - "\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1"+ - "\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB"+ - "\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13"+ - "\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39"+ - "\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57"+ - "\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD"+ - "\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087"+ - "\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D"+ - "\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8"+ - "\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056"+ - "\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082"+ - "\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF"+ - "\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112"+ - "\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165"+ - "\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB"+ - "\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9"+ - "\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5"+ - "\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E"+ - "\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B"+ - "\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9"+ - "\u92B7\u92E9\u930F\u92FA\u9344\u932E\u9319\u9322"+ - "\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C"+ - "\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6"+ - "\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8"+ - "\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436"+ - "\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B"+ - "\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477"+ - "\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587"+ - "\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7"+ - "\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3"+ - "\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5"+ - "\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F"+ - "\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672"+ - "\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1"+ - "\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB"+ - "\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704"+ - "\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719"+ - "\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746"+ - "\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768"+ - "\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A"+ - "\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3"+ - "\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED"+ - "\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838"+ - "\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B"+ - "\u986F\u9870\u9871\u9874\u9873\u98AA\u98AF\u98B1"+ - "\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909"+ - "\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920"+ - "\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950"+ - "\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5"+ - "\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1"+ - "\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F"+ - "\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40"+ - "\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62"+ - "\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC"+ - "\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2"+ - "\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7"+ - "\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25"+ - "\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44"+ - "\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93"+ - "\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4"+ - "\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3"+ - "\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0"+ - "\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12"+ - "\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30"+ - "\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76"+ - "\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03"+ - "\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15"+ - "\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\u9D5D\u9D5E"+ - "\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB"+ - "\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1"+ - "\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3"+ - "\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E"+ - "\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92"+ - "\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD"+ - "\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE"+ - "\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7"+ - "\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15"+ - "\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F"+ - "\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72"+ - "\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464"+ - "\u51DC\u7199\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"+ - "\uFFFD\uFFFD\u7E8A\u891C\u9348\u9288\u84DC\u4FC9"+ - "\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1"+ - "\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A"+ - "\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070"+ - "\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE"+ - "\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307"+ - "\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A"+ - "\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7"+ - "\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D"+ - "\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC"+ - "\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42"+ - "\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7"; - - private final static String innerIndex5= - "\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2"+ - "\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460"+ - "\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E"+ - "\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699"+ - "\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB"+ - "\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14"+ - "\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2"+ - "\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04"+ - "\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC"+ - "\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5"+ - "\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C"+ - "\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324"+ - "\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407"+ - "\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F"+ - "\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17"+ - "\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18"+ - "\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C"+ - "\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6"+ - "\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7"+ - "\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0"+ - "\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7"+ - "\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4"+ - "\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE"+ - "\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE"+ - "\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C"+ - "\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278"+ - "\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3"+ - "\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302"+ - "\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445"+ - "\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B"+ - "\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A"+ - "\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75"+ - "\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D"+ - "\u9E19\u9ED1\uFFFD\uFFFD\u2170\u2171\u2172\u2173"+ - "\u2174\u2175\u2176\u2177\u2178\u2179\uFFE2\uFFE4"+ - "\uFF07\uFF02"; - - protected final static short index1[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 9, 0, 0, - 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, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 0, 0, 0, 0, 79, 80, 81, 82, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }; - - protected final static String index2[] = { - innerIndex0, - innerIndex1, - innerIndex2, - innerIndex3, - innerIndex4, - innerIndex5 - }; -} diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_MS932_Encoder.java b/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_MS932_Encoder.java deleted file mode 100644 index 467d0419152..00000000000 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_MS932_Encoder.java +++ /dev/null @@ -1,3244 +0,0 @@ -/* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.nio.cs.ext; - -import java.nio.charset.Charset; -import java.nio.charset.CharsetEncoder; - -class JIS_X_0208_MS932_Encoder -{ - private final static String innerIndex0= - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2178"+ - "\u212F\u0000\u0000\u2263\u0000\u0000\u0000\u2131"+ - "\u216B\u215E\u0000\u0000\u212D\u264c\u2279\u2126"+ - "\u2124\u0000\u0000\u2264\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u215F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2160"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2621\u2622\u2623\u2624\u2625\u2626\u2627"+ - "\u2628\u2629\u262A\u262B\u262C\u262D\u262E\u262F"+ - "\u2630\u2631\u0000\u2632\u2633\u2634\u2635\u2636"+ - "\u2637\u2638\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2641\u2642\u2643\u2644\u2645\u2646\u2647"+ - "\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F"+ - "\u2650\u2651\u0000\u2652\u2653\u2654\u2655\u2656"+ - "\u2657\u2658\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2727\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2721\u2722\u2723\u2724\u2725\u2726\u2728\u2729"+ - "\u272A\u272B\u272C\u272D\u272E\u272F\u2730\u2731"+ - "\u2732\u2733\u2734\u2735\u2736\u2737\u2738\u2739"+ - "\u273A\u273B\u273C\u273D\u273E\u273F\u2740\u2741"+ - "\u2751\u2752\u2753\u2754\u2755\u2756\u2758\u2759"+ - "\u275A\u275B\u275C\u275D\u275E\u275F\u2760\u2761"+ - "\u2762\u2763\u2764\u2765\u2766\u2767\u2768\u2769"+ - "\u276A\u276B\u276C\u276D\u276E\u276F\u2770\u2771"+ - "\u0000\u2757\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u213E\u0000\u0000\u0000\u0000\u213D\u0000\u0000"+ - "\u2146\u2147\u0000\u0000\u2148\u2149\u0000\u0000"+ - "\u2277\u2278\u0000\u0000\u0000\u2145\u2144\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2273\u0000\u216C\u216D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u2228\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u216E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u2D62\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2D64\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u2272\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2D35\u2D36\u2D37\u2D38\u2D39\u2D3A\u2D3B\u2D3C"+ - "\u2D3D\u2D3E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7C71\u7C72\u7C73\u7C74\u7C75\u7C76\u7C77\u7C78"+ - "\u7C79\u7C7A\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u222B\u222C\u222A\u222D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u224D\u0000\u224E\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u224F\u0000\u225F\u2250\u0000\u0000\u0000\u2260"+ - "\u223A\u0000\u0000\u223B\u0000\u0000\u0000\u0000"+ - "\u0000\u2D74\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u2D75\u0000\u0000\u2267\u2167\u2D78"+ - "\u225C\u0000\u0000\u0000\u0000\u2142\u0000\u224A"+ - "\u224B\u2241\u2240\u2D72\u226A\u0000\u2D73\u0000"+ - "\u0000\u0000\u0000\u0000\u2168\u2268\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u2266\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u2262\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2162\u2261\u0000\u0000\u0000\u0000\u2165\u2166"+ - "\u0000\u0000\u2263\u2264\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u223E\u223F\u0000\u0000\u223C\u223D"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u2D76\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2D79"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u225E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2D21\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27\u2D28"+ - "\u2D29\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F\u2D30"+ - "\u2D31\u2D32\u2D33\u2D34\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2821\u282C\u2822\u282D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2823\u0000\u0000\u282E"+ - "\u2824\u0000\u0000\u282F\u2826\u0000\u0000\u2831"+ - "\u2825\u0000\u0000\u2830\u2827\u283C\u0000\u0000"+ - "\u2837\u0000\u0000\u2832\u2829\u283E\u0000\u0000"+ - "\u2839\u0000\u0000\u2834\u2828\u0000\u0000\u2838"+ - "\u283D\u0000\u0000\u2833\u282A\u0000\u0000\u283A"+ - "\u283F\u0000\u0000\u2835\u282B\u0000\u0000\u283B"+ - "\u0000\u0000\u2840\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u2836\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2223\u2222\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u2225\u2224\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2227\u2226\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u2221\u217E"+ - "\u0000\u0000\u0000\u217B\u0000\u0000\u217D\u217C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u227E"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u217A\u2179\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u216A\u0000\u2169\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u2276\u0000\u0000\u2275\u0000\u2274"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2121\u2122\u2123\u2137\u0000\u2139\u213A\u213B"+ - "\u2152\u2153\u2154\u2155\u2156\u2157\u2158\u2159"+ - "\u215A\u215B\u2229\u222E\u214C\u214D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u2D60\u0000\u2D61"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2421\u2422\u2423\u2424\u2425\u2426\u2427"+ - "\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F"+ - "\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437"+ - "\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F"+ - "\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447"+ - "\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F"+ - "\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457"+ - "\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F"+ - "\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467"+ - "\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F"+ - "\u2470\u2471\u2472\u2473\u2574\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u212B\u212C\u2135\u2136\u0000"+ - "\u0000\u2521\u2522\u2523\u2524\u2525\u2526\u2527"+ - "\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F"+ - "\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537"+ - "\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F"+ - "\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547"+ - "\u2548\u2549\u254A\u254B\u254C\u254D\u254E\u254F"+ - "\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557"+ - "\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F"+ - "\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567"+ - "\u2568\u2569\u256A\u256B\u256C\u256D\u256E\u256F"+ - "\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u0000"+ - "\u0000\u0000\u0000\u2126\u213C\u2133\u2134\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2D6A\u2D6B\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2D6C\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2D65\u2D66\u2D67\u2D68"+ - "\u2D69\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u2D46\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u2D4A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2D41\u0000\u0000\u0000"+ - "\u2D44\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u2D42\u2D4C\u0000\u0000\u2D4B\u2D45"+ - "\u0000\u0000\u0000\u2D4D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u2D47\u0000"+ - "\u0000\u0000\u0000\u2D4F\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u2D40\u2D4E\u0000\u0000\u2D43\u0000\u0000"+ - "\u0000\u2D48\u0000\u0000\u0000\u0000\u0000\u2D49"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u2D5F\u2D6F\u2D6E\u2D6D\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u2D53\u2D54"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2D50\u2D51\u2D52\u0000"+ - "\u0000\u2D56\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u2D55\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u2D63\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u306C\u437A\u0000\u3C37\u0000\u0000\u0000\u4B7C"+ - "\u3E66\u3B30\u3E65\u323C\u0000\u4954\u4D3F\u0000"+ - "\u5022\u312F\u0000\u0000\u336E\u5023\u4024\u5242"+ - "\u3556\u4A3A\u0000\u0000\u0000\u0000\u3E67\u0000"+ - "\u0000\u4E3E\u0000\u0000\u0000\u0000\u4A42\u0000"+ - "\u792D\u0000\u5024\u0000\u0000\u4366\u0000\u0000"+ - "\u0000\u5025\u367A\u0000\u0000\u0000\u5026\u0000"+ - "\u345D\u4330\u0000\u3C67\u5027\u0000\u0000\u5028"+ - "\u0000\u0000\u5029\u4735\u0000\u3557\u0000\u0000"+ - "\u0000\u0000\u0000\u4737\u0000\u4663\u3843\u4B33"+ - "\u0000\u0000\u0000\u0000\u0000\u6949\u502A\u3E68"+ - "\u502B\u3235\u0000\u0000\u0000\u3665\u3870\u4C69"+ - "\u0000\u0000\u5626\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4D70\u0000\u467D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3425\u0000"+ - "\u3535\u0000\u502C\u0000\u0000\u502D\u4E3B\u0000"+ - "\u4D3D\u4168\u502F\u3B76\u4673\u0000\u5032\u0000"+ - "\u0000\u313E\u385F\u0000\u385E\u3066\u0000\u0000"+ - "\u4F4B\u4F4A\u0000\u3A33\u3021\u0000\u5033\u5034"+ - "\u5035\u4B34\u5036\u0000\u3872\u3067\u4B72\u0000"+ - "\u357C\u0000\u0000\u357D\u357E\u4462\u4E3C\u0000"+ - "\u5037\u0000\u0000\u5038\u0000\u0000\u5039\u0000"+ - "\u0000\u0000\u3F4D\u0000\u0000\u0000\u0000\u0000"+ - "\u3D3A\u3F4E\u503E\u0000\u503C\u0000\u503D\u3558"+ - "\u0000\u0000\u3A23\u3270\u0000\u503B\u503A\u4A29"+ - "\u0000\u0000\u0000\u0000\u3B46\u3B45\u423E\u503F"+ - "\u4955\u4067\u0000\u0000\u0000\u2138\u5040\u5042"+ - "\u0000\u792E\u0000\u4265\u4E61\u304A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5041\u323E\u0000"+ - "\u3644\u0000\u4367\u0000\u0000\u0000\u376F\u5043"+ - "\u0000\u0000\u0000\u4724\u792F\u0000\u0000\u0000"+ - "\u7930\u346B\u0000\u7931\u0000\u0000\u0000\u0000"+ - "\u0000\u5044\u304B\u0000\u0000\u3860\u346C\u497A"+ - "\u4832\u3559\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3271\u0000\u5067\u4541\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u476C"+ - "\u5046\u0000\u0000\u0000\u483C\u0000\u4E62\u0000"+ - "\u3F2D\u7932\u3B47\u0000\u3B77\u3240\u0000\u0000"+ - "\u0000\u0000\u0000\u4451\u0000\u0000\u4322\u504A"+ - "\u0000\u0000\u0000\u0000\u0000\u304C\u4463\u3D3B"+ - "\u3A34\u4D24\u0000\u424E\u0000\u323F\u7933\u5049"+ - "\u0000\u4D3E\u5045\u5047\u3A6E\u5048\u5524\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5050\u0000\u0000\u0000\u0000\u0000\u5053"+ - "\u5051\u0000\u0000\u3242\u0000\u4A3B\u504B\u0000"+ - "\u0000\u0000\u0000\u504F\u3873\u0000\u0000\u3B48"+ - "\u0000\u0000\u0000\u3426\u0000\u0000\u5054\u0000"+ - "\u504C\u0000\u7935\u4E63\u0000\u3B78\u0000\u504D"+ - "\u0000\u5052\u7934\u0000\u7937\u0000\u5055\u0000"+ - "\u504E\u0000\u7936\u3621\u0000\u304D\u0000\u0000"+ - "\u3622\u3241\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5525\u0000\u4B79\u496E\u3874"+ - "\u0000\u0000\u0000\u0000\u0000\u3F2F\u4E37\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4A58"+ - "\u0000\u0000\u3738\u4225\u3264\u0000\u0000\u0000"+ - "\u0000\u7926\u3D53\u0000\u0000\u7938\u5059\u0000"+ - "\u505E\u505C\u0000\u0000\u5057\u0000\u0000\u422F"+ - "\u505A\u0000\u505D\u505B\u0000\u4A5D\u0000\u5058"+ - "\u0000\u3F2E\u0000\u4B73\u505F\u5060\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3D24\u506D"+ - "\u0000\u0000\u0000\u4750\u0000\u4936\u5068\u0000"+ - "\u4A70\u0000\u3236\u0000\u0000\u0000\u506C\u793B"; - - private final static String innerIndex1= - "\u0000\u0000\u0000\u0000\u0000\u5066\u506F\u0000"+ - "\u0000\u4152\u0000\u3844\u0000\u475C\u0000\u6047"+ - "\u0000\u506E\u455D\u0000\u5063\u0000\u3876\u0000"+ - "\u0000\u3875\u5061\u0000\u0000\u0000\u793C\u3C5A"+ - "\u0000\u5069\u793A\u4A6F\u434D\u5065\u3771\u0000"+ - "\u5062\u506A\u5064\u4E51\u506B\u4F41\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3666\u0000"+ - "\u0000\u3770\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7939\u0000\u793F\u5070\u0000\u0000\u793D\u5071"+ - "\u5075\u304E\u0000\u0000\u0000\u0000\u0000\u4A50"+ - "\u5074\u0000\u0000\u0000\u0000\u5073\u5077\u0000"+ - "\u0000\u0000\u5076\u0000\u4464\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3772\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5078\u0000\u0000\u0000"+ - "\u793E\u0000\u3C45\u0000\u4226\u4465\u3676\u0000"+ - "\u5079\u0000\u0000\u0000\u0000\u3536\u0000\u0000"+ - "\u507A\u0000\u0000\u0000\u0000\u507C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4B35\u0000\u0000"+ - "\u0000\u3766\u0000\u0000\u7940\u0000\u0000\u0000"+ - "\u3B31\u4877\u507B\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3A45\u4D43\u0000\u0000"+ - "\u0000\u0000\u507E\u5123\u507D\u3A44\u0000\u3D7D"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3739\u0000"+ - "\u0000\u0000\u5124\u0000\u0000\u364F\u0000\u0000"+ - "\u0000\u5121\u5122\u0000\u0000\u462F\u0000\u417C"+ - "\u0000\u3623\u0000\u0000\u0000\u4B4D\u5125\u0000"+ - "\u7942\u0000\u4E3D\u0000\u0000\u0000\u5126\u0000"+ - "\u0000\u0000\u0000\u5129\u0000\u5127\u0000\u414E"+ - "\u0000\u0000\u0000\u0000\u0000\u5128\u512A\u0000"+ - "\u0000\u0000\u0000\u0000\u7941\u512C\u0000\u0000"+ - "\u0000\u512B\u0000\u4A48\u0000\u0000\u0000\u0000"+ - "\u3537\u512E\u512F\u0000\u322F\u0000\u0000\u0000"+ - "\u0000\u512D\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3C74\u0000\u5132\u5131\u5130\u0000"+ - "\u5056\u0000\u5133\u0000\u0000\u0000\u0000\u3D7E"+ - "\u0000\u5134\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4D25\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4C59\u0000\u0000\u0000\u0000\u5136"+ - "\u0000\u0000\u5135\u5138\u5137\u0000\u0000\u5139"+ - "\u513A\u3074\u0000\u3835\u373B\u3D3C\u437B\u3624"+ - "\u4068\u3877\u7943\u396E\u513C\u4C48\u4546\u0000"+ - "\u3B79\u0000\u513B\u0000\u513D\u0000\u0000\u0000"+ - "\u0000\u0000\u455E\u0000\u3375\u0000\u0000\u0000"+ - "\u0000\u0000\u513E\u0000\u7944\u467E\u0000\u0000"+ - "\u4134\u5140\u5141\u482C\u3878\u4F3B\u5142\u0000"+ - "\u0000\u3626\u0000\u0000\u0000\u4A3C\u4236\u3671"+ - "\u4535\u0000\u0000\u0000\u3773\u0000\u0000\u0000"+ - "\u5143\u0000\u5144\u0000\u0000\u4662\u315F\u0000"+ - "\u0000\u5147\u3A7D\u0000\u5146\u3A46\u0000\u5148"+ - "\u666E\u5149\u4B41\u514A\u0000\u514B\u514C\u3E69"+ - "\u0000\u3C4C\u0000\u0000\u0000\u7945\u0000\u0000"+ - "\u3427\u0000\u514F\u0000\u514D\u4C3D\u514E\u0000"+ - "\u495A\u5150\u5151\u5152\u455F\u0000\u0000\u0000"+ - "\u5156\u5154\u5155\u5153\u3A63\u5157\u4C6A\u4E64"+ - "\u0000\u0000\u0000\u0000\u0000\u5158\u7946\u0000"+ - "\u0000\u0000\u0000\u0000\u4028\u5159\u3D5A\u0000"+ - "\u0000\u515A\u0000\u437C\u4E3F\u4560\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5245\u0000"+ - "\u0000\u0000\u0000\u515B\u7425\u3645\u0000\u0000"+ - "\u515C\u4B5E\u0000\u0000\u0000\u0000\u3D68\u427C"+ - "\u0000\u515E\u4664\u0000\u7947\u515F\u0000\u0000"+ - "\u5160\u332E\u0000\u0000\u0000\u5161\u3627\u0000"+ - "\u464C\u317A\u3D50\u0000\u0000\u4821\u5162\u0000"+ - "\u4561\u0000\u0000\u3F4F\u5163\u0000\u4A2C\u405A"+ - "\u3422\u0000\u3429\u5164\u0000\u0000\u5166\u0000"+ - "\u0000\u373A\u0000\u0000\u5165\u7948\u0000\u4E73"+ - "\u0000\u0000\u0000\u0000\u0000\u3D69\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u483D\u4A4C\u0000\u5167"+ - "\u0000\u4D78\u5168\u0000\u0000\u0000\u5169\u0000"+ - "\u457E\u0000\u0000\u516A\u0000\u0000\u4029\u3A7E"+ - "\u3774\u516B\u3B49\u396F\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4466\u516D\u0000\u0000\u4227"+ - "\u0000\u0000\u3A6F\u516E\u516F\u4130\u0000\u516C"+ - "\u0000\u0000\u0000\u0000\u5171\u0000\u4B36\u0000"+ - "\u0000\u0000\u0000\u3964\u0000\u0000\u5170\u0000"+ - "\u0000\u0000\u0000\u3775\u3A5E\u476D\u0000\u0000"+ - "\u0000\u5174\u5172\u0000\u0000\u0000\u0000\u497B"+ - "\u3E6A\u517B\u3364\u5175\u5173\u414F\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5177\u0000\u5176"+ - "\u0000\u0000\u0000\u3344\u0000\u0000\u0000\u3760"+ - "\u517C\u4E2D\u0000\u0000\u0000\u5178\u0000\u0000"+ - "\u0000\u517D\u517A\u0000\u5179\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4E4F\u7949\u0000\u0000\u3879"+ - "\u3243\u0000\u0000\u4E74\u0000\u0000\u794A\u0000"+ - "\u0000\u3D75\u4558\u3965\u5222\u5223\u0000\u7B3C"+ - "\u0000\u4E65\u0000\u0000\u4F2B\u5225\u0000\u0000"+ - "\u0000\u387A\u0000\u0000\u5224\u0000\u332F\u0000"+ - "\u794B\u5226\u0000\u4B56\u0000\u443C\u0000\u4D26"+ - "\u0000\u4A59\u0000\u0000\u0000\u5227\u0000\u0000"+ - "\u0000\u0000\u7055\u0000\u0000\u4630\u0000\u5228"+ - "\u342A\u4C33\u0000\u794C\u0000\u3E21\u5229\u4A67"+ - "\u522D\u0000\u402A\u522A\u3650\u0000\u522B\u342B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u372E\u522E\u0000\u522F\u0000\u0000"+ - "\u5230\u5231\u3C5B\u0000\u0000\u0000\u387B\u4C5E"+ - "\u794D\u4C68\u4677\u0000\u0000\u4A71\u5232\u794E"+ - "\u5233\u0000\u0000\u0000\u0000\u5235\u0000\u5237"+ - "\u5236\u0000\u0000\u0000\u0000\u5238\u323D\u4B4C"+ - "\u0000\u3A7C\u5239\u0000\u0000\u4159\u0000\u0000"+ - "\u3E22\u3629\u0000\u523A\u794F\u0000\u0000\u0000"+ - "\u0000\u0000\u485B\u0000\u0000\u0000\u0000\u523B"+ - "\u0000\u523C\u0000\u523D\u0000\u0000\u0000\u0000"+ - "\u523E\u4924\u3668\u3065\u0000\u0000\u0000\u463F"+ - "\u523F\u3D3D\u0000\u4069\u0000\u5241\u5240\u3E23"+ - "\u3861\u5243\u483E\u0000\u0000\u5244\u0000\u0000"+ - "\u0000\u485C\u4234\u426E\u3628\u0000\u0000\u466E"+ - "\u4331\u0000\u476E\u0000\u4B4E\u0000\u5246\u0000"+ - "\u406A\u0000\u0000\u0000\u0000\u0000\u3735\u0000"+ - "\u0000\u5247\u0000\u0000\u0000\u0000\u5248\u312C"+ - "\u3075\u346D\u7950\u4228\u3551\u4D71\u0000\u524B"+ - "\u3237\u0000\u0000\u524A\u0000\u0000\u0000\u362A"+ - "\u0000\u0000\u524C\u0000\u4C71\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u7951\u0000\u0000\u524D\u0000"+ - "\u4E52\u0000\u387C\u0000\u0000\u0000\u0000\u3836"+ - "\u524E\u0000\u0000\u0000\u0000\u5250\u524F\u0000"+ - "\u3F5F\u3139\u0000\u0000\u0000\u315E\u5251\u0000"+ - "\u5252\u0000\u7952\u3837\u0000\u0000\u5253\u0000"+ - "\u0000\u0000\u0000\u356E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3B32\u5254\u0000\u0000\u0000\u0000"+ - "\u4B74\u3A35\u355A\u4D27\u4150\u483F\u3C7D\u0000"+ - "\u0000\u0000\u0000\u0000\u3D47\u0000\u3C68\u3C75"+ - "\u0000\u3D76\u0000\u4840\u0000\u7953\u0000\u5257"+ - "\u0000\u3143\u4151\u387D\u3845\u3667\u0000\u0000"+ - "\u525B\u4321\u427E\u362B\u3E24\u525C\u525A\u3244"+ - "\u4266\u3C38\u3B4B\u3126\u0000\u0000\u3370\u3966"+ - "\u3B4A\u0000\u525D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u525E\u0000\u3549\u3346\u0000\u0000\u0000"+ - "\u3967\u3548\u445F\u3125\u4631\u4C3E\u3921\u4D79"+ - "\u4547\u387E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u372F\u0000\u5267\u0000\u3663"+ - "\u4B4A\u0000\u0000\u0000\u0000\u0000\u485D\u0000"+ - "\u0000\u5266\u0000\u345E\u5261\u5262\u5264\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5265\u0000"+ - "\u355B\u3F61\u0000\u4A2D\u5263\u525F\u3863\u0000"+ - "\u5260\u0000\u4F24\u0000\u0000\u0000\u4A72\u0000"+ - "\u4468\u3862\u3970\u0000\u0000\u0000\u5268\u0000"+ - "\u0000\u465D\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u526C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3C7E\u0000\u3C76\u0000\u0000\u0000\u0000\u0000"+ - "\u526F\u526D\u0000\u4C23\u0000\u526A\u5273\u526E"+ - "\u0000\u0000\u0000\u5271\u3846\u4C3F\u0000\u0000"+ - "\u5272\u0000\u0000\u0000\u5274\u0000\u5276\u0000"+ - "\u0000\u0000\u7956\u3A70\u4F42\u0000\u526B\u5269"+ - "\u5275\u0000\u5270\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u7955\u0000\u0000\u0000"+ - "\u0000\u0000\u5278\u0000\u5323\u527A\u0000\u0000"+ - "\u527E\u7957\u0000\u5321\u527B\u0000\u0000\u533E"+ - "\u0000\u0000\u3A69\u3331\u0000\u0000\u0000\u0000"+ - "\u5279\u0000\u0000\u0000\u5325\u3076\u5324\u0000"+ - "\u3025\u494A\u5322\u0000\u527C\u0000\u0000\u5277"+ - "\u527D\u3A48\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5326\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3077\u532F\u0000\u0000\u5327\u5328\u0000"+ - "\u3E25\u4B69\u0000\u0000\u0000\u532D\u532C\u0000"+ - "\u0000\u0000\u452F\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u532E\u0000\u0000\u532B\u0000\u7958"+ - "\u0000\u0000\u0000\u0000\u3134\u0000\u3A36\u3F30"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5329"+ - "\u4562\u0000\u0000\u0000\u532A\u0000\u3022\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5334\u4D23"+ - "\u0000\u3E27\u0000\u533A\u0000\u0000\u0000\u0000"+ - "\u5339\u5330\u0000\u0000\u0000\u0000\u4243\u0000"+ - "\u5331\u0000\u0000\u0000\u426F\u5336\u3E26\u0000"+ - "\u0000\u0000\u0000\u0000\u5333\u0000\u0000\u4C64"+ - "\u0000\u0000\u0000\u373C\u0000\u0000\u5337\u5338"+ - "\u0000\u0000\u0000\u0000\u5335\u533B\u0000\u0000"+ - "\u0000\u0000\u0000\u5332\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5341\u5346\u0000\u5342\u0000"+ - "\u533D\u0000\u0000\u5347\u4131\u0000\u7959\u5349"+ - "\u0000\u3922\u533F\u437D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5343\u533C\u342D\u0000\u346E\u3365\u5344\u5340"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3776"+ - "\u534A\u5348\u4153\u354A\u362C\u0000\u5345\u0000"+ - "\u3674\u0000\u0000\u0000\u0000\u0000\u3144\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u534E\u534C\u0000\u5427"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5351\u0000\u0000\u0000"+ - "\u0000\u0000\u534B\u0000\u534F\u0000\u0000\u534D"+ - "\u0000\u0000\u0000\u3B4C\u5350\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5353"+ - "\u0000\u5358\u0000\u0000\u0000\u5356\u5355\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4332\u0000"+ - "\u0000\u3245\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5352\u0000\u5354\u3E28"+ - "\u3133\u0000\u0000\u5357\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u325E\u0000\u0000\u0000\u0000\u0000\u5362"+ - "\u0000\u3E7C\u535E\u0000\u535C\u0000\u535D\u0000"+ - "\u535F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u313D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4139\u0000\u5359\u0000"+ - "\u535A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u337A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5361\u0000\u0000\u0000"+ - "\u346F\u0000\u5364\u5360\u5363\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4A2E\u0000\u0000\u0000"+ - "\u4655\u0000\u4838\u0000\u0000\u0000\u0000\u0000"+ - "\u5366\u0000\u0000\u0000\u0000\u0000\u5365\u3345"+ - "\u0000\u0000\u5367\u0000\u0000\u0000\u0000\u536A"+ - "\u0000\u0000\u0000\u0000\u5369\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5368\u0000\u4739\u0000\u0000\u536B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u536C\u0000"+ - "\u0000\u0000\u0000\u0000\u536E\u0000\u536D\u0000"+ - "\u0000\u0000\u0000\u0000\u5370\u0000\u0000\u0000"+ - "\u5373\u5371\u536F\u5372\u0000\u0000\u0000\u0000"+ - "\u5374\u0000\u0000\u0000\u0000\u0000\u5375\u0000"+ - "\u0000\u5376\u0000\u5377\u0000\u0000\u0000\u5378"+ - "\u5145\u0000\u3C7C\u3B4D\u0000\u0000\u3273\u0000"+ - "\u3078\u0000\u0000\u4344\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5379\u0000"+ - "\u3A24\u0000\u304F\u3F5E\u0000\u0000\u0000\u0000"+ - "\u0000\u537A\u3847\u0000\u0000\u3971\u0000\u537C"+ - "\u537B\u0000\u0000\u4A60\u537D\u0000\u0000\u0000"+ - "\u5421\u537E\u0000\u5422\u0000\u5423\u0000\u3777"+ - "\u0000\u0000\u3160\u5424\u0000\u0000\u5426\u0000"+ - "\u5425\u0000\u0000\u0000\u5428\u0000\u0000\u455A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5429\u3035"+ - "\u3A5F\u0000\u0000\u0000\u0000\u373D\u0000\u0000"+ - "\u434F\u0000\u0000\u0000\u0000\u0000\u0000\u542A"+ - "\u542B\u0000\u0000\u542D\u0000\u0000\u0000\u0000"+ - "\u542E\u0000\u3A64\u0000\u0000\u0000\u0000\u3651"+ - "\u0000\u0000\u4B37\u0000\u0000\u0000\u542C\u542F"+ - "\u3A41\u3923\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u795A\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5433\u0000\u0000\u3A25\u795B\u4333\u0000"+ - "\u0000\u5430\u445A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5434"+ - "\u0000\u0000\u3F62\u0000\u0000\u0000\u0000\u0000"+ - "\u5432\u5435\u0000\u373F\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5436\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5437\u0000\u3924\u3340\u5439\u0000\u0000\u0000"+ - "\u0000\u0000\u543A\u0000\u795C\u0000\u0000\u0000"+ - "\u543B\u0000\u0000\u5438\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5431\u0000\u0000\u543C\u0000\u0000\u543D\u795E"+ - "\u795D\u0000\u0000\u4B64\u0000\u0000\u3E6B\u0000"+ - "\u0000\u0000\u543F\u5440\u543E\u0000\u5442\u0000"+ - "\u0000\u0000\u0000\u0000\u4738\u0000\u0000\u3068"+ - "\u4956\u0000\u0000\u5443\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3E7D\u0000\u0000\u3C39"+ - "\u0000\u475D\u3470\u0000\u3A6B\u0000\u0000\u0000"+ - "\u4B59\u0000\u4632\u0000\u0000\u3778\u424F\u0000"+ - "\u0000\u0000\u5441\u5444\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4244\u0000\u0000"+ - "\u0000\u5445\u0000\u0000\u0000\u5446\u0000\u0000"+ - "\u0000\u5448\u0000\u0000\u4469\u0000\u0000\u0000"+ - "\u0000\u0000\u342E\u0000\u0000\u0000\u0000\u7421"+ - "\u3161\u4A73\u0000\u0000\u3E6C\u4548\u0000\u0000"+ - "\u0000\u0000\u3A66\u0000\u0000\u544E\u0000\u0000"+ - "\u4A3D\u4E5D\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3274\u544A\u0000\u0000\u0000\u0000"+ - "\u0000\u413A\u544D\u0000\u4563\u0000\u0000\u4549"+ - "\u4564\u4839\u444D\u0000\u0000\u0000\u3A49\u0000"+ - "\u0000\u0000\u5449\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3176\u0000\u4536\u0000\u0000\u0000\u0000"+ - "\u544B\u0000\u5447\u0000\u0000\u3F50\u0000\u0000"+ - "\u0000\u544F\u0000\u0000\u0000\u0000\u3D4E\u0000"+ - "\u0000\u0000\u0000\u362D\u0000\u5450\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4A68\u0000\u0000\u0000\u417D"+ - "\u0000\u0000\u0000\u0000\u4446\u0000\u7961\u5452"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4B4F\u0000\u0000\u5453\u0000\u0000\u5458\u0000"+ - "\u0000\u0000\u7962\u4A2F\u0000\u0000\u0000\u0000"+ - "\u5457\u5451\u5454\u5456\u0000\u0000\u3A26\u0000"+ - "\u0000\u4A49\u0000\u0000\u0000\u5459\u0000\u4345"+ - "\u0000\u0000\u3275\u0000\u3E6D\u0000\u0000\u0000"+ - "\u0000\u545B\u0000\u545A\u0000\u3968\u0000\u545C"+ - "\u545E\u545D\u0000\u0000\u5460\u0000\u5455\u5462"+ - "\u0000\u0000\u0000\u0000\u5461\u545F\u0000\u0000"+ - "\u0000\u0000\u0000\u3B4E\u3F51\u0000\u4154\u5463"+ - "\u403C\u306D\u4764\u0000\u0000\u0000\u0000\u445B"+ - "\u0000\u5465\u5464\u5466\u5467\u5468\u0000\u0000"+ - "\u0000\u0000\u5469\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4A51\u546A\u7963\u0000\u0000\u0000\u3246"+ - "\u546B\u0000\u0000\u0000\u0000\u4D3C\u3330\u0000"+ - "\u5249\u3D48\u423F\u546C\u4C6B\u0000\u0000\u0000"+ - "\u0000\u0000\u4C34\u0000\u0000\u546E\u0000\u4267"+ - "\u0000\u4537\u4240\u4957\u546F\u5470\u317B\u0000"+ - "\u0000\u3C3A\u5471\u0000\u0000\u0000\u0000\u3050"+ - "\u5472\u0000\u0000\u0000\u0000\u0000\u5473\u0000"+ - "\u0000\u0000\u0000\u0000\u3162\u0000\u0000\u3471"+ - "\u4660\u4A74\u0000\u0000\u0000\u0000\u5477\u4155"+ - "\u5476\u3740\u0000\u7964\u4B5B\u5475\u0000\u4565"+ - "\u5479\u0000\u5478\u7965\u0000\u7966\u0000\u0000"+ - "\u547B\u0000\u547A\u7967\u0000\u317C\u0000\u547C"+ - "\u3E29\u547E\u4325\u0000\u547D\u0000\u4A33\u0000"+ - "\u0000\u0000\u0000\u3D77\u455B\u0000\u0000\u0000"+ - "\u5521\u0000\u0000\u0000\u0000\u3925\u0000\u0000"+ - "\u0000\u5522\u4721\u485E\u4C51\u0000\u0000\u0000"+ - "\u0000\u0000\u4725\u0000\u0000\u552B\u0000\u0000"+ - "\u0000\u0000\u0000\u3538\u0000\u0000\u4D45\u0000"+ - "\u0000\u4C2F\u0000\u562C\u0000\u5523\u0000\u0000"+ - "\u0000\u0000\u0000\u5526\u7968\u4245\u0000\u0000"+ - "\u4B38\u0000\u0000\u0000\u454A\u0000\u0000\u0000"+ - "\u0000\u0000\u5527\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4B65\u7969\u3A4A\u0000\u0000\u3E2A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5528\u0000"+ - "\u0000\u3B50\u0000\u3B4F\u0000\u0000\u0000\u0000"+ - "\u3039\u3848\u0000\u402B\u3051\u0000\u0000\u0000"+ - "\u0000\u552C\u552D\u0000\u552A\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3138\u342F\u0000"+ - "\u5529\u0000\u4C45\u4931\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3028\u0000"+ - "\u0000\u0000\u0000\u3079\u0000\u0000\u0000\u3B51"+ - "\u0000\u3052\u0000\u3023\u0000\u0000\u0000\u0000"+ - "\u0000\u5532\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5530\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4C3C\u0000\u5533\u0000\u5531\u0000\u0000\u552F"+ - "\u3F31\u0000\u0000\u0000\u0000\u552E\u0000\u0000"+ - "\u0000\u4A5A\u0000\u0000\u0000\u0000\u0000\u3864"+ - "\u0000\u0000\u0000\u0000\u0000\u5537\u5538\u0000"+ - "\u0000\u0000\u0000\u0000\u3E2B\u0000\u0000\u0000"+ - "\u5534\u4F2C\u0000\u0000\u0000\u0000\u474C\u0000"+ - "\u0000\u5536\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3A27\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5539\u0000\u0000\u0000\u4958\u0000"+ - "\u0000\u0000\u553A\u0000\u5535\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4C3B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u475E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u553B\u4932\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u553C\u5540\u553D\u0000"+ - "\u0000\u3247\u553F\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3C3B\u0000\u553E\u3779\u0000\u0000\u0000"+ - "\u554C\u0000\u0000\u0000\u0000\u0000\u5545\u5542"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4364\u0000\u5541\u0000\u0000\u5543\u0000"+ - "\u0000\u5544\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5546\u5547\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3472\u0000\u5549\u5548\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u554A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3E6E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u554D\u0000\u445C\u0000\u0000\u0000"+ - "\u3145\u0000\u554B\u0000\u0000\u0000\u554E\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u554F\u0000"+ - "\u5552\u0000\u0000\u5550\u0000\u5551\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3B52\u5553\u0000\u0000\u3926\u5554\u796A\u3B7A"+ - "\u4238\u0000\u5555\u5556\u3B5A\u3927\u0000\u4C52"+ - "\u0000\u0000\u0000\u3528\u3849\u5557\u3358\u0000"+ - "\u0000\u5558\u0000\u4239\u0000\u0000\u0000\u0000"+ - "\u5559\u5623\u0000\u555A\u0000\u555B\u0000\u0000"+ - "\u555C\u0000\u555E\u0000\u0000\u0000\u0000\u0000"+ - "\u555F\u0000\u0000\u5560\u0000\u4270\u0000\u3127"+ - "\u3C69\u3042\u0000\u4157\u3430\u3C35\u0000\u3928"+ - "\u0000\u0000\u0000\u0000\u0000\u4566\u0000\u3D21"+ - "\u3431\u4368\u446A\u3038\u3539\u4A75\u0000\u3C42"+ - "\u0000\u0000\u3552\u406B\u3C3C\u4D28\u5561\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u355C\u0000"+ - "\u3A4B\u0000\u0000\u3332\u3163\u3E2C\u3248\u0000"+ - "\u5562\u4D46\u0000\u0000\u0000\u0000\u0000\u3D49"+ - "\u796B\u0000\u3C64\u5563\u3473\u4652\u4C29\u5564"+ - "\u0000\u5565\u0000\u0000\u4959\u0000\u0000\u0000"+ - "\u5567\u0000\u3428\u3677\u5566\u0000\u0000\u0000"+ - "\u796D\u0000\u0000\u3432\u0000\u3F32\u556B\u3B21"+ - "\u0000\u3249\u556A\u0000\u5568\u556C\u5569\u472B"+ - "\u5C4D\u3F33\u0000\u556D\u796E\u0000\u4E40\u0000"+ - "\u556E\u0000\u0000\u5570\u0000\u437E\u556F\u0000"+ - "\u4023\u0000\u3B7B\u0000\u0000\u0000\u4250\u3C77"+ - "\u0000\u4975\u406C\u0000\u3C4D\u5571\u3E2D\u5572"+ - "\u5573\u3053\u423A\u3F52\u0000\u5574\u4633\u3E2E"+ - "\u0000\u3E2F\u0000\u5575\u0000\u0000\u406D\u0000"+ - "\u0000\u0000\u3E30\u0000\u0000\u0000\u796F\u0000"+ - "\u5576\u0000\u5577\u0000\u4C60\u0000\u0000\u0000"+ - "\u5578\u0000\u0000\u0000\u0000\u3646\u0000\u0000"+ - "\u0000\u3D22\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5579\u557A\u3C5C\u3F2C\u4674\u3F54\u4878\u4722"+ - "\u3649\u557B\u0000\u0000\u0000\u356F\u557C\u0000"+ - "\u367E\u0000\u464F\u3230\u0000\u3B53\u557D\u5622"+ - "\u5621\u367D\u0000\u557E\u0000\u4538\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4230\u0000"+ - "\u454B\u3C48\u0000\u0000\u4158\u4D7A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5624\u0000\u5625\u4656"+ - "\u0000\u3B33\u0000\u0000\u0000\u0000\u5627\u0000"+ - "\u0000\u5628\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5629\u0000\u0000\u0000"+ - "\u3474\u562A\u0000\u0000\u562B\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u322C\u0000\u0000\u0000\u0000\u7970\u0000"+ - "\u413B\u3464\u0000\u562D\u4C28\u0000\u0000\u0000"+ - "\u0000\u4252\u0000\u3359\u0000\u0000\u562F\u5631"+ - "\u345F\u0000\u7971\u562E\u5630\u0000\u5633\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5632\u0000\u5634"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5635\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u463D\u362E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3265\u5636\u563B\u0000\u0000\u5639\u0000\u4A77"+ - "\u4A76\u0000\u0000\u0000\u0000\u7972\u4567\u0000"+ - "\u0000\u0000\u5638\u3D54\u0000\u5637\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3F72"+ - "\u0000\u0000\u0000\u563C\u0000\u0000\u3A6A\u0000"+ - "\u0000\u5642\u0000\u0000\u5643\u563D\u3333\u563E"+ - "\u5647\u5646\u5645\u5641\u0000\u0000\u0000\u5640"+ - "\u0000\u0000\u5644\u0000\u0000\u0000\u0000\u7973"+ - "\u0000\u4A78\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u7976\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u564B\u5648\u0000\u564A\u0000"+ - "\u4D72\u0000\u5649\u7974\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u563F\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3F73\u0000\u0000\u564C\u7977\u0000\u3A37"+ - "\u0000\u0000\u0000\u564D\u0000\u0000\u564E\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5651\u0000\u5650\u0000\u0000\u564F"+ - "\u0000\u0000\u0000\u4568\u563A\u0000\u0000\u0000"+ - "\u5657\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5653\u0000\u0000"+ - "\u0000\u0000\u5652\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5654\u0000\u5655\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5658"+ - "\u7978\u7979\u4E66\u0000\u5659\u5656\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u565A\u0000\u0000\u3460\u565B\u0000\u0000"+ - "\u797A\u0000\u565D\u565C\u0000\u0000\u565E\u0000"+ - "\u0000\u0000\u0000\u565F\u0000\u406E\u3D23\u0000"+ - "\u0000\u3D64\u0000\u4163\u0000\u3929\u3A38\u392A"+ - "\u3570\u0000\u0000\u5660\u0000\u0000\u3A39\u0000"+ - "\u0000\u384A\u5661\u4C26\u4743\u5662\u0000\u392B"+ - "\u0000\u0000\u0000\u342C\u0000\u4327\u3652\u0000"+ - "\u0000\u0000\u3B54\u495B\u0000\u0000\u4841\u0000"+ - "\u0000\u0000\u0000\u5663\u3475\u0000\u0000\u0000"+ - "\u0000\u5666\u0000\u0000\u0000\u0000\u4421\u0000"+ - "\u0000\u5665\u5664\u5667\u0000\u446B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3F63\u0000\u0000"+ - "\u0000\u0000\u0000\u3B55\u0000\u404A\u0000\u4253"+ - "\u3522\u0000\u0000\u4422\u0000\u0000\u5668\u5669"+ - "\u3E6F\u0000\u0000\u0000\u0000\u4B39\u0000\u0000"+ - "\u566C\u0000\u0000\u566B\u566A\u497D\u0000\u5673"+ - "\u0000\u0000\u0000\u0000\u4B5A\u0000\u566D\u0000"+ - "\u0000\u0000\u0000\u0000\u566F\u4B6B\u0000\u566E"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u5670"+ - "\u0000\u4828\u5671\u4A3E\u5672\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3433\u4A3F\u472F\u5674\u5675\u0000"+ - "\u392C\u3434\u5676\u3838\u4D44\u4D29\u3476\u5678"+ - "\u0000\u4423\u0000\u392D\u3E31\u0000\u0000\u485F"+ - "\u0000\u0000\u3E32\u0000\u0000\u0000\u0000\u3D78"+ - "\u0000\u0000\u0000\u0000\u0000\u446C\u4A79\u4539"+ - "\u0000\u0000\u392E\u0000\u495C\u0000\u0000\u0000"+ - "\u5679\u0000\u0000\u0000\u0000\u0000\u4559\u3A42"+ - "\u0000\u0000\u0000\u384B\u0000\u446D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3043\u3D6E\u392F"+ - "\u4D47\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u567A\u567B\u4751\u0000\u0000\u0000\u0000"+ - "\u567C\u4E77\u4F2D\u0000\u0000\u0000\u0000\u567E"+ - "\u567D\u0000\u0000\u3347\u0000\u0000\u5721\u0000"+ - "\u0000\u0000\u5724\u5725\u0000\u5723\u0000\u4940"+ - "\u3E33\u5727\u5726\u5722\u0000\u0000\u0000\u0000"+ - "\u5728\u5729\u0000\u0000\u572A\u0000\u0000\u0000"+ - "\u572D\u572B\u0000\u572C\u572E\u0000\u3164\u446E"+ - "\u572F\u0000\u377A\u3276\u4736\u0000\u5730\u467B"+ - "\u0000\u4A5B\u0000\u5731\u4F2E\u0000\u0000\u0000"+ - "\u0000\u5732\u4A40\u5735\u5021\u5031\u0000\u3C30"+ - "\u4675\u5736\u0000\u355D\u4424\u307A\u5737\u4A26"+ - "\u3930\u0000\u0000\u4350\u0000\u0000\u0000\u446F"+ - "\u0000\u797B\u0000\u0000\u0000\u4C6F\u3839\u384C"+ - "\u0000\u5738\u0000\u0000\u0000\u5739\u0000\u573F"+ - "\u0000\u3C65\u0000\u0000\u797C\u4425\u0000\u362F"+ - "\u573A\u0000\u0000\u0000\u492B\u0000\u4346\u0000"+ - "\u0000\u573B\u0000\u0000\u0000\u792C\u0000\u0000"+ - "\u573C\u0000\u3630\u0000\u573D\u0000\u573E\u0000"+ - "\u0000\u5740\u0000\u4576\u0000\u0000\u5741\u5742"+ - "\u0000\u5743\u0000\u0000\u5734\u5733\u0000\u0000"+ - "\u0000\u5744\u3741\u0000\u0000\u0000\u4927\u797D"+ - "\u0000\u3A4C\u4937\u4426\u494B\u5745\u0000\u0000"+ - "\u3E34\u3146\u0000\u5746\u0000\u0000\u0000\u5747"+ - "\u0000\u4C72\u0000\u0000\u4860\u0000\u0000\u574A"+ - "\u317D\u402C\u5749\u5748\u3742\u4254\u0000\u574E"+ - "\u574C\u0000\u574B\u4E27\u3865\u0000\u0000\u0000"+ - "\u3D79\u574D\u454C\u3D3E\u0000\u0000\u0000\u4640"+ - "\u5751\u5750\u0000\u0000\u0000\u0000\u574F\u0000"+ - "\u5752\u3866\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5753\u497C\u3D5B\u0000\u0000\u5754\u4879\u0000"+ - "\u0000\u0000\u0000\u4641\u4427\u0000\u0000\u797E"+ - "\u0000\u4530\u0000\u0000\u5755\u352B\u0000\u0000"+ - "\u0000\u0000\u0000\u3F34\u0000\u492C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3477\u4726\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5756\u3B56"+ - "\u4B3A\u4B3B\u0000\u0000\u317E\u575B\u7A21\u0000"+ - "\u4369\u0000\u0000\u0000\u5758\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3277\u0000\u0000\u0000\u0000"+ - "\u582D\u575A\u0000\u0000\u0000\u4730\u0000\u0000"+ - "\u5759\u0000\u0000\u5757\u0000\u397A\u0000\u575D"; - - private final static String innerIndex2= - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5763\u5769"+ - "\u5761\u0000\u455C\u0000\u0000\u5766\u495D\u0000"+ - "\u0000\u5760\u0000\u5765\u4E67\u3B57\u0000\u0000"+ - "\u4255\u575E\u0000\u0000\u0000\u355E\u5768\u402D"+ - "\u3165\u5762\u3278\u5767\u0000\u0000\u0000\u3631"+ - "\u0000\u5764\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u576A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u576C\u5776\u5774\u0000\u0000\u5771\u0000"+ - "\u0000\u0000\u5770\u4E78\u0000\u5772\u0000\u0000"+ - "\u3632\u0000\u3931\u0000\u0000\u3D7A\u0000\u0000"+ - "\u0000\u5779\u576B\u0000\u0000\u7A22\u0000\u576F"+ - "\u575F\u0000\u327A\u5773\u5775\u4351\u0000\u0000"+ - "\u3A28\u3238\u576D\u5778\u5777\u3633\u0000\u4229"+ - "\u3366\u0000\u0000\u0000\u0000\u3743\u0000\u576E"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u577A\u0000\u577D\u5821\u7A23\u0000\u0000"+ - "\u0000\u3C3D\u7A24\u5827\u4470\u577B\u0000\u0000"+ - "\u0000\u0000\u5825\u0000\u3279\u0000\u5823\u5824"+ - "\u0000\u0000\u577E\u5822\u0000\u0000\u0000\u3867"+ - "\u4D2A\u0000\u0000\u3435\u0000\u0000\u3159\u5826"+ - "\u0000\u473A\u302D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4861\u575C\u582C\u5830\u4C65\u0000"+ - "\u5829\u0000\u0000\u0000\u4569\u582E\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3E70\u582F\u4657"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4F47\u0000\u582B\u0000\u7A26\u0000\u0000"+ - "\u5831\u0000\u397B\u0000\u404B\u0000\u7A25\u3054"+ - "\u582A\u5828\u0000\u415A\u0000\u0000\u0000\u577C"+ - "\u3B34\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4246\u583D\u7A28\u415B\u5838\u0000\u5835\u5836"+ - "\u0000\u3C66\u5839\u583C\u0000\u0000\u0000\u0000"+ - "\u5837\u3D25\u0000\u583A\u0000\u0000\u5834\u0000"+ - "\u4C7C\u4C7B\u0000\u0000\u0000\u583E\u583F\u3055"+ - "\u0000\u7A29\u0000\u0000\u0000\u5833\u0000\u0000"+ - "\u0000\u0000\u3672\u3026\u0000\u0000\u0000\u3436"+ - "\u7A27\u583B\u0000\u0000\u0000\u0000\u0000\u5843"+ - "\u5842\u0000\u0000\u0000\u5847\u0000\u0000\u0000"+ - "\u7A2B\u0000\u0000\u0000\u5848\u0000\u0000\u7A2A"+ - "\u0000\u0000\u0000\u0000\u5846\u5849\u5841\u5845"+ - "\u0000\u0000\u584A\u0000\u584B\u0000\u0000\u5840"+ - "\u3B7C\u0000\u5844\u4256\u3932\u5832\u3F35\u0000"+ - "\u0000\u0000\u0000\u5858\u0000\u4A69\u0000\u0000"+ - "\u584E\u584F\u5850\u0000\u0000\u5857\u0000\u5856"+ - "\u0000\u0000\u4B7D\u3437\u0000\u5854\u0000\u3745"+ - "\u3334\u0000\u0000\u5851\u0000\u0000\u4E38\u5853"+ - "\u3056\u5855\u0000\u584C\u5852\u5859\u3744\u584D"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4D5D\u0000"+ - "\u0000\u0000\u4D2B\u0000\u0000\u0000\u0000\u585C"+ - "\u0000\u0000\u5860\u0000\u0000\u0000\u417E\u0000"+ - "\u4E79\u5861\u0000\u0000\u585E\u0000\u585B\u0000"+ - "\u7A2C\u585A\u585F\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4A30\u0000\u0000\u4634"+ - "\u0000\u3746\u0000\u5862\u585D\u0000\u5863\u0000"+ - "\u0000\u0000\u377B\u0000\u0000\u0000\u3231\u0000"+ - "\u0000\u0000\u586B\u0000\u0000\u0000\u3438\u0000"+ - "\u0000\u0000\u0000\u5869\u0000\u0000\u586A\u3A29"+ - "\u5868\u5866\u5865\u586C\u5864\u586E\u0000\u0000"+ - "\u327B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5870\u0000\u0000\u586F\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4428\u0000\u5873\u0000\u5871\u5867"+ - "\u377C\u0000\u5872\u0000\u5876\u5875\u5877\u5874"+ - "\u5878\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5879\u587A\u4A6A\u0000\u587C\u587B\u3D3F\u0000"+ - "\u402E\u3266\u327C\u7A2D\u587D\u0000\u303F\u0000"+ - "\u0000\u0000\u404C\u587E\u0000\u6C43\u5921\u3761"+ - "\u0000\u5922\u0000\u0000\u0000\u0000\u406F\u0000"+ - "\u0000\u0000\u5923\u0000\u0000\u0000\u5924\u353A"+ - "\u5925\u0000\u5926\u5927\u4257\u0000\u0000\u0000"+ - "\u384D\u0000\u0000\u4C61\u0000\u0000\u0000\u4B3C"+ - "\u3D6A\u5928\u0000\u0000\u0000\u0000\u0000\u4070"+ - "\u6E3D\u4862\u0000\u3C6A\u0000\u3A4D\u5929\u0000"+ - "\u0000\u0000\u0000\u4247\u0000\u4A27\u0000\u0000"+ - "\u4271\u0000\u0000\u592C\u0000\u0000\u592A\u0000"+ - "\u592D\u0000\u0000\u592B\u0000\u0000\u0000\u0000"+ - "\u592E\u0000\u0000\u0000\u0000\u0000\u4A31\u0000"+ - "\u0000\u3037\u0000\u0000\u0000\u0000\u495E\u0000"+ - "\u0000\u4863\u0000\u0000\u592F\u0000\u5932\u3E35"+ - "\u353B\u0000\u5930\u5937\u3E36\u0000\u0000\u0000"+ - "\u0000\u5931\u4744\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4D5E\u5933\u5934\u5938\u456A\u5935\u3933"+ - "\u405E\u0000\u0000\u5946\u4834\u0000\u4272\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7A2E\u0000"+ - "\u0000\u0000\u0000\u4864\u5A2D\u0000\u0000\u0000"+ - "\u0000\u4A7A\u0000\u0000\u0000\u4471\u0000\u0000"+ - "\u0000\u4B75\u0000\u593B\u3221\u436A\u0000\u0000"+ - "\u0000\u0000\u5944\u0000\u0000\u4334\u593E\u5945"+ - "\u5940\u5947\u5943\u0000\u5942\u476F\u0000\u593C"+ - "\u327D\u593A\u3571\u4273\u5936\u0000\u0000\u5939"+ - "\u3934\u405B\u0000\u3E37\u5941\u4752\u0000\u0000"+ - "\u3572\u3348\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3367\u3F21\u5949\u594E"+ - "\u0000\u594A\u0000\u377D\u0000\u594F\u3B22\u3969"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3D26\u593D"+ - "\u0000\u3B7D\u594C\u0000\u0000\u0000\u0000\u3B58"+ - "\u594D\u3044\u0000\u0000\u5948\u0000\u0000\u0000"+ - "\u0000\u4429\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3573\u0000\u0000\u0000\u0000\u0000\u3634"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u594B"+ - "\u3027\u0000\u0000\u3A43\u0000\u0000\u0000\u3F36"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4472\u0000\u0000\u4854\u5951\u415E"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u422A\u0000\u0000\u3B2B\u5952\u0000\u5954"+ - "\u5950\u0000\u0000\u0000\u0000\u4A61\u0000\u443D"+ - "\u0000\u0000\u0000\u0000\u415C\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4A7B"+ - "\u3C4E\u5960\u0000\u595F\u0000\u0000\u3F78\u0000"+ - "\u0000\u0000\u377E\u0000\u0000\u0000\u5959\u3E39"+ - "\u0000\u0000\u4668\u4731\u0000\u0000\u0000\u0000"+ - "\u5957\u0000\u0000\u415D\u0000\u0000\u0000\u0000"+ - "\u3C78\u595C\u0000\u0000\u3E38\u0000\u5956\u595B"+ - "\u0000\u0000\u4753\u0000\u0000\u0000\u5955\u0000"+ - "\u3721\u0000\u0000\u335D\u0000\u0000\u0000\u595D"+ - "\u4E2B\u3A4E\u4335\u595A\u0000\u405C\u0000\u3935"+ - "\u3F64\u3166\u413C\u5958\u3545\u0000\u0000\u0000"+ - "\u0000\u0000\u3747\u0000\u444F\u595E\u0000\u0000"+ - "\u0000\u0000\u0000\u415F\u0000\u0000\u5961\u0000"+ - "\u5963\u0000\u0000\u4237\u5969\u0000\u5964\u0000"+ - "\u0000\u5966\u0000\u0000\u0000\u0000\u0000\u4941"+ - "\u4473\u0000\u5967\u0000\u0000\u0000\u4D2C\u0000"+ - "\u0000\u0000\u4D48\u3439\u0000\u0000\u0000\u0000"+ - "\u0000\u302E\u0000\u5965\u0000\u0000\u0000\u0000"+ - "\u0000\u5962\u0000\u0000\u0000\u0000\u3478\u0000"+ - "\u0000\u0000\u0000\u0000\u3167\u7A2F\u5968\u0000"+ - "\u0000\u0000\u4D49\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u596C\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u423B\u0000\u5973"+ - "\u0000\u0000\u0000\u596D\u0000\u0000\u596A\u5971"+ - "\u0000\u0000\u0000\u0000\u5953\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u596E\u0000"+ - "\u5972\u0000\u0000\u0000\u4842\u456B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u596B\u0000\u596F\u0000"+ - "\u0000\u0000\u3748\u0000\u0000\u0000\u3A71\u0000"+ - "\u0000\u0000\u405D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5977\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4526\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7A30\u0000\u0000\u0000\u0000\u0000\u0000\u5974"+ - "\u0000\u4B60\u0000\u0000\u0000\u0000\u0000\u5975"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5976\u0000"+ - "\u4C4E\u0000\u4022\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3762\u0000\u0000\u0000\u0000"+ - "\u597D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3B35\u597A\u0000\u5979\u0000\u0000"+ - "\u0000\u0000\u4732\u0000\u0000\u7A31\u4635\u0000"+ - "\u0000\u0000\u0000\u0000\u4531\u597B\u0000\u0000"+ - "\u0000\u597C\u0000\u496F\u0000\u4745\u3B23\u0000"+ - "\u4071\u0000\u4B50\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3349\u0000\u5A25\u597E\u0000\u0000\u0000"+ - "\u0000\u4D4A\u5A27\u0000\u0000\u5A23\u0000\u5A24"+ - "\u0000\u0000\u0000\u0000\u0000\u4160\u7A32\u0000"+ - "\u0000\u0000\u5A22\u0000\u593F\u0000\u0000\u0000"+ - "\u5A26\u0000\u5A21\u0000\u0000\u0000\u0000\u0000"+ - "\u5A2B\u5A2C\u4527\u5A2E\u0000\u0000\u3B24\u5A29"+ - "\u0000\u0000\u0000\u0000\u353C\u0000\u0000\u5A2F"+ - "\u0000\u5A28\u5A33\u0000\u5A32\u0000\u5A31\u0000"+ - "\u0000\u0000\u5A34\u0000\u0000\u5A36\u3E71\u0000"+ - "\u5A35\u0000\u0000\u0000\u0000\u5A39\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5A37\u0000\u0000\u0000\u5A38\u5970\u0000\u0000"+ - "\u0000\u0000\u0000\u5A3B\u5A3A\u0000\u0000\u0000"+ - "\u0000\u0000\u5978\u5A3C\u5A30\u0000\u0000\u3B59"+ - "\u0000\u0000\u0000\u0000\u5A3D\u5A3E\u5A40\u5A3F"+ - "\u5A41\u327E\u0000\u3936\u0000\u0000\u4A7C\u402F"+ - "\u0000\u0000\u0000\u0000\u0000\u384E\u0000\u0000"+ - "\u5A43\u0000\u0000\u0000\u0000\u5A46\u7A33\u4952"+ - "\u0000\u355F\u0000\u0000\u0000\u5A45\u5A44\u4754"+ - "\u5A47\u3635\u0000\u0000\u0000\u5A49\u5A48\u0000"+ - "\u0000\u0000\u343A\u3B36\u0000\u0000\u4658\u0000"+ - "\u0000\u0000\u0000\u0000\u3749\u0000\u0000\u0000"+ - "\u3F74\u0000\u5A4A\u0000\u4030\u4528\u0000\u495F"+ - "\u5A4B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5A4C\u5A4D\u0000\u0000\u0000\u4A38"+ - "\u555D\u4046\u0000\u0000\u494C\u0000\u3A58\u0000"+ - "\u4865\u4843\u0000\u0000\u0000\u0000\u0000\u454D"+ - "\u0000\u4E41\u0000\u5A4F\u3C50\u0000\u0000\u5A50"+ - "\u0000\u3036\u0000\u0000\u3654\u404D\u0000\u4960"+ - "\u0000\u0000\u0000\u5A51\u3B42\u4347\u0000\u3B5B"+ - "\u3F37\u0000\u0000\u0000\u0000\u0000\u0000\u5A52"+ - "\u0000\u4A7D\u0000\u0000\u3177\u3B5C\u0000\u0000"+ - "\u0000\u5A55\u0000\u5A53\u5A56\u4E39\u5A54\u0000"+ - "\u0000\u0000\u0000\u407B\u5A57\u0000\u0000\u4232"+ - "\u0000\u0000\u5A58\u0000\u0000\u0000\u0000\u347A"+ - "\u0000\u5A5A\u0000\u5A59\u0000\u0000\u0000\u0000"+ - "\u5A5B\u5A5C\u347B\u0000\u0000\u467C\u4336\u356C"+ - "\u3B5D\u4161\u0000\u0000\u3D5C\u3030\u0000\u0000"+ - "\u0000\u5A5D\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3222\u5A61\u0000\u0000\u0000\u0000"+ - "\u7A34\u0000\u3937\u5A60\u0000\u0000\u3A2B\u3E3A"+ - "\u0000\u7A37\u5A5F\u0000\u3E3B\u0000\u4C40\u3A2A"+ - "\u0000\u0000\u0000\u3057\u404E\u7A35\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5A66\u0000\u7A39\u4031"+ - "\u3147\u0000\u0000\u0000\u7A3A\u3D55\u0000\u4B66"+ - "\u3A72\u0000\u0000\u0000\u0000\u3E3C\u7A38\u4027"+ - "\u0000\u7928\u0000\u0000\u5A65\u5A63\u5A64\u0000"+ - "\u0000\u0000\u0000\u7A36\u436B\u0000\u0000\u5B26"+ - "\u0000\u5A6A\u3B7E\u3938\u5A68\u0000\u0000\u0000"+ - "\u0000\u5A69\u0000\u3F38\u0000\u0000\u0000\u5A67"+ - "\u0000\u0000\u3B2F\u0000\u0000\u0000\u0000\u7A3C"+ - "\u0000\u7A3D\u0000\u0000\u0000\u5A6C\u5A6B\u5A70"+ - "\u0000\u0000\u5A71\u0000\u5A6D\u7A3B\u3322\u5A6E"+ - "\u5A6F\u4855\u0000\u0000\u0000\u0000\u4961\u374A"+ - "\u5A72\u0000\u0000\u7A3F\u4032\u0000\u3E3D\u0000"+ - "\u0000\u0000\u4352\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3647\u0000\u5A73\u5A77\u0000\u0000\u324B"+ - "\u5A74\u5A76\u0000\u0000\u0000\u0000\u5A75\u0000"+ - "\u0000\u3D6B\u0000\u0000\u0000\u0000\u4348\u3045"+ - "\u5A78\u7A40\u0000\u0000\u0000\u5A79\u0000\u0000"+ - "\u7A41\u0000\u442A\u0000\u0000\u0000\u4E71\u0000"+ - "\u0000\u0000\u0000\u3B43\u0000\u0000\u4A6B\u0000"+ - "\u0000\u0000\u7A42\u0000\u4B3D\u0000\u0000\u0000"+ - "\u5B22\u5A7B\u0000\u0000\u5A7E\u0000\u5A7D\u7A43"+ - "\u0000\u5A7A\u0000\u0000\u5B21\u0000\u0000\u465E"+ - "\u0000\u5A7C\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5B23\u0000"+ - "\u0000\u3D6C\u5B24\u0000\u4D4B\u4778\u0000\u0000"+ - "\u5B25\u0000\u0000\u0000\u0000\u0000\u5B27\u0000"+ - "\u0000\u5B28\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5B29\u0000\u364A\u3148\u3939\u5B2A\u0000\u5B2B"+ - "\u3D71\u4162\u7A44\u792B\u5258\u413E\u413D\u4258"+ - "\u3A47\u0000\u0000\u5072\u0000\u0000\u0000\u0000"+ - "\u376E\u4D2D\u0000\u4A7E\u0000\u497E\u7A45\u5B2C"+ - "\u0000\u0000\u0000\u0000\u3A73\u443F\u5B2D\u4F2F"+ - "\u0000\u0000\u0000\u4B3E\u0000\u442B\u5B2E\u347C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5B2F\u5B30"+ - "\u4C5A\u0000\u4C24\u4B76\u4B5C\u3B25\u5B32\u0000"+ - "\u0000\u3C6B\u0000\u0000\u4B51\u0000\u5B34\u5B37"+ - "\u5B36\u0000\u3479\u0000\u0000\u3560\u0000\u5B33"+ - "\u0000\u5B35\u0000\u0000\u0000\u0000\u5B38\u0000"+ - "\u0000\u3F79\u0000\u0000\u0000\u0000\u4D7B\u3049"+ - "\u3A60\u423C\u0000\u3C5D\u0000\u0000\u3E73\u0000"+ - "\u0000\u5B3B\u0000\u0000\u454E\u0000\u5B39\u422B"+ - "\u5B3A\u3E72\u4C5D\u5B3C\u5B3D\u4D68\u7A47\u0000"+ - "\u0000\u0000\u5B42\u0000\u0000\u393A\u0000\u4755"+ - "\u5B3F\u456C\u5A5E\u5A62\u0000\u354F\u0000\u4747"+ - "\u0000\u0000\u0000\u0000\u5B41\u0000\u3E3E\u4844"+ - "\u0000\u0000\u0000\u0000\u0000\u5B47\u0000\u487A"+ - "\u0000\u5B3E\u0000\u5B44\u5B43\u0000\u0000\u0000"+ - "\u404F\u0000\u0000\u0000\u0000\u4B6D\u0000\u4E53"+ - "\u0000\u0000\u4B67\u0000\u324C\u3B5E\u0000\u0000"+ - "\u4F48\u5B46\u3F75\u0000\u0000\u0000\u5B45\u0000"+ - "\u0000\u5B40\u0000\u0000\u0000\u0000\u0000\u384F"+ - "\u0000\u0000\u0000\u5B4C\u5B4A\u0000\u324D\u5B48"+ - "\u5B4E\u5B54\u0000\u7A48\u0000\u0000\u0000\u0000"+ - "\u7A4A\u4248\u0000\u0000\u4A41\u0000\u5B56\u0000"+ - "\u0000\u0000\u4922\u0000\u0000\u0000\u5B55\u4770"+ - "\u4B3F\u343B\u0000\u4077\u3D40\u0000\u0000\u0000"+ - "\u4453\u0000\u4D2E\u0000\u0000\u5B51\u5B50\u0000"+ - "\u0000\u0000\u5B52\u0000\u5B4F\u0000\u0000\u5B57"+ - "\u0000\u5B4D\u0000\u0000\u5B4B\u0000\u5B53\u5B49"+ - "\u0000\u436C\u0000\u4C78\u3C46\u3A74\u0000\u0000"+ - "\u0000\u0000\u0000\u3A3A\u0000\u0000\u4B6F\u3341"+ - "\u0000\u7A4B\u444E\u464A\u3149\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4072\u0000\u0000\u4034\u372A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5B59\u0000"+ - "\u0000\u393B\u337C\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5B5B\u3374\u5B61\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5B5E\u0000\u4073\u0000\u0000\u0000"+ - "\u334B\u3A2C\u0000\u0000\u334A\u3A4F\u0000\u0000"+ - "\u5B5C\u3765\u374B\u456D\u7A4C\u0000\u5B5A\u0000"+ - "\u3046\u0000\u0000\u0000\u0000\u5B5D\u5B5F\u0000"+ - "\u364D\u372C\u7A49\u343C\u354B\u0000\u0000\u0000"+ - "\u0000\u5B62\u0000\u0000\u3A79\u4B71\u0000\u3B37"+ - "\u0000\u0000\u0000\u5B63\u0000\u0000\u0000\u4930"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5B6F\u0000\u3233\u5B64"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5B75\u5B65"+ - "\u0000\u4E42\u0000\u5B6C\u0000\u475F\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5B74\u0000\u5B67"+ - "\u0000\u0000\u0000\u3034\u5B69\u0000\u0000\u393C"+ - "\u0000\u0000\u0000\u5B6B\u0000\u5B6A\u0000\u5B66"+ - "\u5B71\u0000\u3E3F\u0000\u0000\u0000\u546D\u3868"+ - "\u4D7C\u0000\u0000\u0000\u0000\u5B68\u0000\u4474"+ - "\u3323\u3A2D\u0000\u5B60\u0000\u5B70\u3361\u0000"+ - "\u0000\u5B6E\u5B72\u0000\u456E\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u347E\u0000\u5C32\u0000"+ - "\u7929\u4C49\u5B77\u347D\u0000\u5B7E\u0000\u7A4D"+ - "\u0000\u0000\u4B40\u0000\u5C21\u5C23\u0000\u5C27"+ - "\u5B79\u0000\u432A\u0000\u0000\u0000\u0000\u456F"+ - "\u5C2B\u5B7C\u0000\u5C28\u0000\u0000\u0000\u5C22"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3F39\u5C2C"+ - "\u0000\u0000\u4033\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5C2A\u343D\u0000\u0000\u0000\u0000\u0000"+ - "\u4F50\u5B76\u0000\u0000\u5C26\u3058\u0000\u0000"+ - "\u5B78\u0000\u0000\u4C3A\u5B7D\u3F22\u4447\u5B73"+ - "\u0000\u0000\u5C25\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3F7A\u5C2F\u3371\u3821\u0000\u0000\u0000"+ - "\u0000\u5C31\u5B7A\u5C30\u0000\u5C29\u5B7B\u0000"+ - "\u5C2D\u0000\u5C2E\u0000\u0000\u0000\u0000\u0000"+ - "\u5C3F\u0000\u0000\u0000\u464E\u0000\u5C24\u0000"+ - "\u0000\u5C3B\u0000\u0000\u0000\u5C3D\u0000\u4458"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4D4C\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4976\u5C38\u424A\u0000\u0000"+ - "\u0000\u5C3E\u413F\u0000\u5C35\u5C42\u5C41\u0000"+ - "\u466F\u5C40\u466A\u0000\u0000\u0000\u0000\u0000"+ - "\u7A4F\u0000\u5C44\u5C37\u0000\u3648\u5C3A\u3D5D"+ - "\u0000\u0000\u0000\u4760\u5C3C\u364B\u0000\u5C34"+ - "\u5C36\u5C33\u0000\u0000\u4F30\u335A\u5C39\u0000"+ - "\u0000\u5C43\u3335\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3A67\u0000\u0000\u0000\u315D\u0000"+ - "\u0000\u5C54\u0000\u0000\u4F31\u5C57\u0000\u0000"+ - "\u7A51\u0000\u0000\u3F3A\u5C56\u0000\u0000\u0000"+ - "\u5C55\u0000\u0000\u0000\u0000\u0000\u0000\u5C52"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5C46\u0000"+ - "\u0000\u5C63\u5C45\u0000\u5C58\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5C50\u0000\u0000\u5C4B\u5C48"+ - "\u0000\u5C49\u0000\u5C51\u0000\u0000\u0000\u7422"+ - "\u0000\u0000\u5C4E\u393D\u4448\u4164\u5C4C\u0000"+ - "\u5C47\u0000\u0000\u5C4A\u0000\u0000\u0000\u0000"+ - "\u4D4D\u4B6A\u0000\u0000\u0000\u5C4F\u5C59\u0000"+ - "\u0000\u0000\u7A52\u0000\u0000\u0000\u0000\u5C61"+ - "\u5C5A\u0000\u0000\u5C67\u0000\u5C65\u0000\u0000"+ - "\u0000\u0000\u5C60\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5C5F\u0000\u4450\u0000\u4165\u0000\u5C5D"+ - "\u0000\u0000\u5C5B\u0000\u0000\u5C62\u0000\u0000"+ - "\u0000\u0000\u5C68\u4875\u5C6E\u0000\u0000\u0000"+ - "\u0000\u0000\u5C69\u5C6C\u5C66\u0000\u0000\u4374"+ - "\u0000\u4938\u0000\u5C5C\u0000\u0000\u5C64\u3E40"+ - "\u0000\u4C4F\u5C78\u5C6B\u0000\u0000\u0000\u0000"+ - "\u0000\u3822\u3223\u335F\u0000\u0000\u5C53\u0000"+ - "\u7A53\u0000\u0000\u0000\u0000\u3E41\u5C70\u0000"+ - "\u5C77\u3C79\u3372\u0000\u0000\u432E\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5C6D\u0000\u7A55\u5C72"+ - "\u5C76\u0000\u0000\u3636\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u354C\u5C74\u0000\u0000\u0000\u0000\u0000\u3521"+ - "\u0000\u464B\u5C73\u0000\u0000\u0000\u5C75\u0000"+ - "\u0000\u0000\u0000\u7A54\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5C6F\u7A56\u0000\u0000\u0000\u0000"+ - "\u5C71\u0000\u0000\u0000\u0000\u0000\u7A57\u3360"+ - "\u4349\u0000\u0000\u0000\u5C7C\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5C7A\u3869\u0000"+ - "\u5C79\u0000\u0000\u0000\u0000\u0000\u0000\u5D21"+ - "\u0000\u0000\u0000\u0000\u5B58\u0000\u0000\u0000"+ - "\u5C7B\u0000\u5C7D\u5C7E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5D2C\u0000\u5D28\u0000\u5B6D\u0000"+ - "\u0000\u0000\u0000\u5D27\u0000\u0000\u0000\u0000"+ - "\u5D26\u0000\u0000\u5D23\u0000\u0000\u0000\u0000"+ - "\u0000\u5C6A\u5D25\u5D24\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5D2A\u0000\u4F26\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5D2D\u367B\u0000\u0000\u5D29\u5D2B"+ - "\u0000\u0000\u7A58\u0000\u7A59\u0000\u0000\u0000"+ - "\u4827\u0000\u5D2E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5D32\u5D2F\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4D73\u5D30\u0000\u0000"+ - "\u0000\u0000\u5C5E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5D33\u0000\u0000\u0000\u5D34\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3135\u0000\u5D36"+ - "\u3767\u3C21\u0000\u3655\u0000\u0000\u0000\u3224"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4D5F\u0000\u0000\u0000\u0000\u5D38"+ - "\u5D37\u5D3A\u353D\u0000\u0000\u3656\u343E\u0000"+ - "\u0000\u0000\u0000\u5D3D\u0000\u0000\u0000\u5D3C"+ - "\u0000\u5D3E\u0000\u0000\u324E\u0000\u4337\u0000"+ - "\u5D3F\u0000\u0000\u343F\u5D41\u0000\u0000\u0000"+ - "\u0000\u5D40\u0000\u5D42\u0000\u0000\u0000\u5D43"+ - "\u0000\u5D44\u3B5F\u4035\u3A21\u0000\u4970\u0000"+ - "\u0000\u4A62\u4F44\u0000\u0000\u0000\u0000\u3B75"+ - "\u0000\u0000\u0000\u3A50\u4E72\u0000\u0000\u0000"+ - "\u5D45\u5D46\u0000\u3B60\u0000\u0000\u0000\u5D47"+ - "\u5D48\u0000\u0000\u5D4A\u5D49\u0000\u4B58\u0000"+ - "\u0000\u3D5E\u3C6C\u3B44\u0000\u5D4B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5D4D\u3F23\u0000"+ - "\u5D4C\u0000\u0000\u0000\u0000\u0000\u5D4E\u0000"+ - "\u0000\u0000\u0000\u0000\u5D4F\u0000\u0000\u0000"+ - "\u0000\u0000\u5D50\u5D51\u0000\u0000\u0000\u5D52"+ - "\u0000\u5D54\u5D53\u5D55\u3225\u434A\u0000\u5D56"+ - "\u0000\u0000\u3B26\u334C\u5D57\u0000\u0000\u4542"+ - "\u544C\u0000\u0000\u0000\u0000\u3523\u5D58\u0000"+ - "\u0000\u0000\u0000\u5D59\u0000\u4A6C\u4B68\u0000"+ - "\u0000\u0000\u4647\u5D5A\u4866\u0000\u7A5A\u0000"+ - "\u487B\u0000\u0000\u4C53\u0000\u0000\u0000\u5D5B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5D5D\u5D5C\u0000\u0000\u5D5F"+ - "\u0000\u0000\u0000\u5D5E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5D61\u0000\u0000\u0000\u0000\u0000\u0000\u3B61"+ - "\u0000\u4C31\u0000\u5D62\u5D63\u0000\u0000\u3524"+ - "\u0000\u0000\u0000\u5D64\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5D66\u5D65\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3F65\u0000\u0000\u4939"+ - "\u314A\u0000\u0000\u0000\u0000\u0000\u4845\u7A5B"+ - "\u4475\u3D41\u3561\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4846\u0000"+ - "\u3C2E\u0000\u0000\u0000\u0000\u5D68\u0000\u3440"+ - "\u0000\u0000\u3178\u0000\u7A5C\u4672\u5D67\u393E"+ - "\u4353\u0000\u5D69\u0000\u0000\u0000\u0000\u0000"+ - "\u5D71\u0000\u5D6A\u0000\u0000\u0000\u0000\u7A5E"+ - "\u4241\u0000\u3562\u5D72\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3768\u0000\u0000\u3525\u5D70\u0000"+ - "\u0000\u5D6E\u5D6B\u4D60\u0000\u0000\u7A5D\u0000"+ - "\u4440\u0000\u0000\u0000\u4659\u5D6C\u0000\u0000"+ - "\u5D74\u0000\u5D73\u3723\u0000\u0000\u322D\u0000"+ - "\u0000\u3A3B\u5D6D\u5D6F\u0000\u0000\u0000\u0000"+ - "\u0000\u4B57\u4274\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4B77\u0000\u0000\u5D7C\u0000"+ - "\u0000\u5D7D\u0000\u324F\u0000\u0000\u0000\u0000"+ - "\u4A28\u4C7D\u5E21\u3C23\u3E42\u5D78\u5D7E\u3168"+ - "\u0000\u3637\u0000\u0000\u5D75\u5D7A\u0000\u0000"+ - "\u0000\u4074\u4771\u0000\u4867\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5D77\u0000\u4B21\u0000\u5D79"+ - "\u0000\u5E24\u7A5F\u5E22\u0000\u5D7B\u0000\u0000"+ - "\u0000\u4B22\u4748\u3563\u0000\u4525\u0000\u0000"+ - "\u436D\u0000\u5E25\u0000\u0000\u0000\u0000\u5E23"+ - "\u4259\u5D76\u0000\u314B\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u7A60\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4D4E\u5E30\u0000\u0000\u0000"+ - "\u0000\u0000\u5E2F\u0000\u0000\u0000\u0000\u4076"+ - "\u0000\u5E2C\u0000\u4D6C\u0000\u0000\u4636\u5E26"+ - "\u0000\u0000\u0000\u0000\u0000\u4445\u0000\u0000"+ - "\u0000\u314C\u393F\u5E29\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3D27\u5E2E\u0000\u5E2D\u5E28\u0000"+ - "\u5E2B\u0000\u0000\u3368\u0000\u5E2A\u4749\u0000"+ - "\u0000\u4E2E\u0000\u0000\u3E74\u4075\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5E36\u5E34\u0000\u494D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5E31\u5E33\u0000\u313A\u0000"+ - "\u0000\u3940\u4F32\u0000\u333D\u0000\u4962\u7A62"+ - "\u0000\u0000\u0000\u0000\u4D61\u0000\u0000\u3324"+ - "\u3F3B\u5E35\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5E3A\u0000\u7A61"+ - "\u3E43\u0000\u0000\u0000\u4D30\u0000\u5E37\u0000"+ - "\u0000\u0000\u0000\u5E32\u0000\u5E38\u7A63\u0000"+ - "\u0000\u4E5E\u0000\u4573\u4642\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u7A64\u0000\u0000\u3336"+ - "\u0000\u0000\u3155\u0000\u0000\u5E3E\u0000\u0000"+ - "\u5E41\u0000\u0000\u0000\u4E43\u0000\u0000\u0000"+ - "\u4D64\u0000\u0000\u0000\u0000\u5E48\u5E42\u5E3F"+ - "\u0000\u0000\u0000\u4E54\u5E45\u0000\u0000\u7A65"+ - "\u0000\u3D4A\u5E47\u0000\u0000\u5E4C\u0000\u0000"+ - "\u4571\u5E4A\u0000\u0000\u0000\u0000\u5E44\u0000"+ - "\u0000\u4338\u0000\u0000\u5E4B\u0000\u5E40\u0000"+ - "\u5E46\u0000\u5E4D\u307C\u5E43\u0000\u5E4E\u0000"+ - "\u0000\u3F3C\u7A67\u3D5F\u0000\u4A25\u0000\u3A2E"+ - "\u7A66\u5E3B\u5E49\u453A\u7A68\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4036\u0000\u3369"+ - "\u3A51\u3E44\u5E3D\u3D42\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u374C\u0000\u5E3C\u0000\u0000"+ - "\u0000\u5E52\u3D6D\u383A\u0000\u5E61\u0000\u5E5B"+ - "\u3574\u454F\u0000\u5E56\u5E5F\u302F\u3132\u7A6B"+ - "\u0000\u3239\u0000\u5E58\u422C\u5E4F\u5E51\u3941"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5E62\u7A69\u5E5D\u0000\u7A6C\u0000\u5E55\u0000"+ - "\u0000\u0000\u0000\u5E5C\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4C2B\u0000\u0000\u5E5A\u5E5E\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3850\u0000"+ - "\u3E45\u0000\u0000\u4339\u7A6A\u0000\u0000\u5E54"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4D2F"+ - "\u0000\u0000\u0000\u5E57\u0000\u0000\u5E50\u4572"+ - "\u0000\u0000\u5E53\u0000\u0000\u0000\u5E59\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4F51\u3C3E"+ - "\u4B7E\u0000\u5E63\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u482E\u0000\u0000\u5E6F"+ - "\u383B\u0000\u0000\u0000\u0000\u0000\u3D60\u0000"+ - "\u5E65\u0000\u0000\u0000\u4E2F\u3942\u0000\u5E72"+ - "\u0000\u0000\u306E\u0000\u0000\u5E70\u0000\u0000"+ - "\u0000\u0000\u5E64\u0000\u0000\u0000\u0000\u5E6A"+ - "\u0000\u0000\u5E6C\u0000\u0000\u0000\u4D4F\u5E67"+ - "\u0000\u0000\u452E\u0000\u0000\u5E69\u0000\u7A6D"+ - "\u0000\u0000\u5E71\u0000\u5E6B\u4C47\u0000\u0000"+ - "\u0000\u5E66\u0000\u3C22\u5E7E\u0000\u0000\u0000"+ - "\u0000\u336A\u0000\u5E68\u5E6D\u5E6E\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u426C\u425A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5E76\u0000\u0000\u5E7C"+ - "\u0000\u0000\u5E7A\u0000\u4529\u0000\u0000\u5F23"+ - "\u5E77\u0000\u0000\u0000\u0000\u0000\u5E78\u5E60"+ - "\u0000\u3579\u493A\u0000\u0000\u0000\u3C3F\u0000"+ - "\u0000\u3977\u0000\u0000\u0000\u0000\u0000\u4F33"+ - "\u0000\u5E74\u0000\u5F22\u3169\u4166\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4779\u0000\u3441\u4E7A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4C21\u4452\u0000\u0000\u0000"+ - "\u0000\u5E7B\u5E7D\u0000\u0000\u0000\u0000\u0000"+ - "\u4132\u0000\u0000\u0000\u0000\u0000\u5F21\u5E79"+ - "\u0000\u5E73\u0000\u0000\u0000\u3443\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3769\u0000\u0000\u0000"+ - "\u5F2F\u0000\u0000\u5F2A\u4078\u0000\u0000\u3363"+ - "\u0000\u0000\u0000\u0000\u3D61\u0000\u5F33\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5F2C\u442C\u5F29"+ - "\u4459\u0000\u0000\u0000\u5F4C\u0000\u0000\u0000"+ - "\u5F26\u0000\u5F25\u0000\u5F2E\u0000\u0000\u0000"+ - "\u5F28\u5F27\u5F2D\u0000\u4021\u0000\u5F24\u0000"+ - "\u7A6E\u0000\u0000\u0000\u0000\u0000\u5F30\u0000"+ - "\u0000\u5F31\u0000\u0000\u0000\u0000\u0000\u3442"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5F36\u0000\u5F35\u5F37\u0000\u0000\u0000"+ - "\u0000\u0000\u5F3A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4543\u0000\u5F34\u0000\u7A6F\u0000\u0000"+ - "\u0000\u5F38\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3763\u4279\u5F32\u473B\u0000\u0000\u5F39\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5F3E\u5F3C\u0000\u0000"+ - "\u5F3F\u0000\u0000\u5F42\u0000\u0000\u0000\u5F3B"+ - "\u396A\u4728\u0000\u0000\u5E39\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4D74\u5F3D\u0000\u5F41\u4275"+ - "\u0000\u5F40\u0000\u5F2B\u0000\u7A70\u6F69\u0000"+ - "\u0000\u0000\u5F45\u0000\u0000\u0000\u5F49\u0000"; - - private final static String innerIndex3= - "\u0000\u5F47\u0000\u0000\u0000\u7A71\u0000\u7A72"+ - "\u0000\u5F43\u0000\u5F44\u0000\u0000\u0000\u5F48"+ - "\u0000\u5F46\u0000\u0000\u0000\u494E\u0000\u0000"+ - "\u5F4E\u0000\u5F4B\u5F4A\u0000\u5F4D\u4654\u5F4F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4375\u426D"+ - "\u7A73\u0000\u0000\u0000\u4025\u0000\u0000\u0000"+ - "\u5F50\u0000\u5F52\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u5F51\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5E75\u0000\u0000\u0000"+ - "\u0000\u5F53\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4667\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u5F54\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3250\u0000\u0000\u0000\u4574"+ - "\u3325\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3564\u0000\u0000\u0000\u3C5E\u3A52\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7A74\u0000\u0000"+ - "\u0000\u4F27\u3F66\u0000\u0000\u0000\u316A\u0000"+ - "\u0000\u0000\u5F56\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5F55\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u7A75\u5F59\u433A\u5F5C\u5F57"+ - "\u0000\u0000\u0000\u5F5B\u0000\u0000\u0000\u0000"+ - "\u5F5A\u4540\u3059\u7927\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4E75\u0000\u0000\u5F5E\u0000\u0000\u0000\u3128"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5F60\u0000\u0000\u0000\u5F5F\u0000\u5F5D"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5F58\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4B23\u0000\u0000\u0000\u5F62\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u7A77\u0000\u0000\u0000"+ - "\u0000\u5F61\u0000\u0000\u0000\u0000\u0000\u7A76"+ - "\u0000\u0000\u0000\u0000\u316B\u0000\u0000\u0000"+ - "\u0000\u5F64\u4A32\u0000\u5F63\u0000\u0000\u0000"+ - "\u0000\u4C35\u0000\u0000\u0000\u0000\u3E47\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4133\u0000"+ - "\u0000\u0000\u0000\u0000\u3E46\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7A79\u7A7A"+ - "\u0000\u4E7B\u0000\u0000\u5F6A\u0000\u4079\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5F66\u5F6B\u0000"+ - "\u0000\u316C\u0000\u0000\u7A78\u0000\u0000\u0000"+ - "\u0000\u0000\u5F69\u0000\u4761\u5F65\u5F68\u3E48"+ - "\u0000\u4851\u0000\u0000\u5F6C\u0000\u3C51\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u407A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u5F6F\u0000\u0000\u0000"+ - "\u5F67\u0000\u3727\u0000\u0000\u0000\u0000\u5F6D"+ - "\u0000\u0000\u0000\u0000\u4D50\u5F70\u0000\u0000"+ - "\u0000\u7426\u0000\u0000\u0000\u0000\u0000\u3D4F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u5F71\u0000\u0000\u0000\u5F72\u0000\u0000\u0000"+ - "\u0000\u472E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u5F74\u0000\u0000\u0000\u0000\u5F75\u0000"+ - "\u0000\u7A7C\u0000\u4733\u0000\u0000\u0000\u0000"+ - "\u4575\u5F77\u0000\u0000\u0000\u0000\u5F79\u0000"+ - "\u4E55\u0000\u5F76\u0000\u5F78\u316D\u0000\u5F73"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u535B"+ - "\u5F7A\u0000\u0000\u0000\u0000\u4167\u3B38\u5F7C"+ - "\u0000\u0000\u0000\u0000\u5F7B\u3F24\u5259\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u5F7D\u0000\u0000"+ - "\u0000\u6021\u0000\u5F6E\u5F7E\u0000\u7A7D\u6022"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u477A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6023\u0000\u0000"+ - "\u6024\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6025\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6026\u0000\u445E\u0000\u6028\u6027\u0000\u0000"+ - "\u6029\u0000\u602A\u0000\u0000\u3C5F\u4963\u0000"+ - "\u0000\u0000\u4C6C\u602B\u602C\u4156\u3C24\u602D"+ - "\u602E\u0000\u0000\u0000\u0000\u0000\u602F\u4A52"+ - "\u4847\u0000\u0000\u6030\u4757\u0000\u0000\u0000"+ - "\u0000\u0000\u442D\u0000\u0000\u0000\u0000\u0000"+ - "\u6031\u3267\u0000\u356D\u0000\u4C46\u0000\u4C36"+ - "\u0000\u3234\u4F34\u0000\u0000\u0000\u0000\u4B52"+ - "\u0000\u4A2A\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4037\u0000\u6032\u0000\u0000\u0000"+ - "\u0000\u4643\u0000\u0000\u0000\u3823\u6033\u0000"+ - "\u3A54\u6035\u6034\u0000\u0000\u0000\u0000\u6036"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6037\u0000\u0000\u0000\u6038\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u353E\u0000\u6039\u0000\u0000\u0000\u0000\u603A"+ - "\u0000\u0000\u0000\u0000\u3824\u0000\u0000\u4848"+ - "\u0000\u7A7E\u603C\u0000\u0000\u0000\u3E75\u0000"+ - "\u0000\u603B\u0000\u0000\u0000\u0000\u7B21\u0000"+ - "\u0000\u0000\u3638\u603D\u603F\u0000\u603E\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6040\u0000"+ - "\u3851\u0000\u6041\u0000\u0000\u0000\u0000\u3669"+ - "\u0000\u4140\u0000\u397D\u0000\u0000\u0000\u0000"+ - "\u6043\u6044\u6042\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3C6D\u0000\u0000\u4648\u3639\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6046"+ - "\u432C\u6045\u0000\u0000\u4F35\u4762\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6049\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u604B\u6048"+ - "\u0000\u0000\u0000\u4C54\u604A\u604C\u0000\u4E44"+ - "\u0000\u0000\u0000\u0000\u7B22\u6050\u0000\u0000"+ - "\u0000\u604F\u4376\u472D\u0000\u0000\u3825\u604E"+ - "\u0000\u0000\u0000\u0000\u604D\u0000\u4D31\u4D32"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6051\u316E"+ - "\u0000\u0000\u0000\u0000\u3976\u3B62\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6052\u6053"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6055"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3D43\u0000\u0000\u0000\u0000"+ - "\u6057\u0000\u6056\u0000\u0000\u0000\u0000\u0000"+ - "\u6058\u0000\u334D\u0000\u0000\u605A\u0000\u7B24"+ - "\u6059\u0000\u605C\u605B\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u383C\u0000\u0000\u4E28"+ - "\u0000\u364C\u0000\u3226\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u366A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3461\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4E68\u605E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6060\u0000\u7B25\u0000\u0000"+ - "\u6061\u0000\u3251\u0000\u0000\u0000\u0000\u0000"+ - "\u605D\u7B26\u3B39\u0000\u0000\u4441\u605F\u0000"+ - "\u0000\u0000\u7B29\u0000\u0000\u0000\u7B27\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6064\u0000"+ - "\u3C6E\u0000\u0000\u7B28\u0000\u6062\u0000\u0000"+ - "\u0000\u0000\u373E\u0000\u0000\u4849\u6063\u0000"+ - "\u0000\u607E\u0000\u0000\u0000\u7B2B\u0000\u0000"+ - "\u6069\u0000\u0000\u0000\u0000\u0000\u383D\u0000"+ - "\u0000\u0000\u0000\u3565\u0000\u6066\u4D7D\u7B2A"+ - "\u0000\u4E30\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4276\u0000\u0000\u6068\u7B2C\u0000"+ - "\u0000\u7B2E\u7B2D\u0000\u0000\u0000\u7B2F\u0000"+ - "\u0000\u0000\u606A\u4E56\u3657\u487C\u474A\u0000"+ - "\u0000\u0000\u606B\u0000\u0000\u0000\u0000\u606D"+ - "\u0000\u6070\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u606C\u0000\u0000"+ - "\u0000\u606F\u386A\u314D\u6071\u0000\u3F70\u606E"+ - "\u4E5C\u0000\u7B30\u6074\u7424\u0000\u0000\u0000"+ - "\u0000\u6072\u6075\u0000\u0000\u0000\u0000\u6067"+ - "\u6073\u0000\u0000\u3A3C\u0000\u0000\u6076\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6077\u0000"+ - "\u0000\u0000\u0000\u4D7E\u0000\u0000\u0000\u0000"+ - "\u0000\u7B31\u0000\u6078\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6079\u7B32"+ - "\u0000\u0000\u6065\u0000\u0000\u0000\u0000\u607A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3444\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3C25\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u607B\u0000\u0000\u0000\u0000\u607C"+ - "\u0000\u0000\u0000\u0000\u607D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u313B\u0000\u0000\u0000"+ - "\u6121\u0000\u493B\u6122\u0000\u0000\u3424\u6123"+ - "\u0000\u6124\u0000\u0000\u0000\u0000\u6125\u0000"+ - "\u6127\u6128\u6126\u0000\u0000\u0000\u4953\u612A"+ - "\u6129\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u7B33\u0000\u612C\u612B\u612D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u612E\u6130\u612F\u0000"+ - "\u0000\u3979\u0000\u6132\u0000\u6131\u0000\u0000"+ - "\u3445\u0000\u3F53\u0000\u453C\u0000\u6133\u4038"+ - "\u0000\u0000\u0000\u3B3A\u0000\u3179\u6134\u0000"+ - "\u4D51\u0000\u0000\u4A63\u6135\u0000\u0000\u796C"+ - "\u4544\u4D33\u3943\u3F3D\u0000\u0000\u0000\u434B"+ - "\u5234\u0000\u442E\u3268\u6136\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6137\u0000\u613C\u0000"+ - "\u0000\u613A\u6139\u5A42\u3326\u6138\u0000\u305A"+ - "\u0000\u482A\u0000\u0000\u484A\u0000\u0000\u0000"+ - "\u0000\u4E31\u613D\u613B\u435C\u4026\u0000\u0000"+ - "\u482B\u0000\u492D\u0000\u613F\u4E2C\u374D\u6140"+ - "\u0000\u613E\u4856\u6141\u0000\u6142\u0000\u7B34"+ - "\u305B\u0000\u0000\u3E76\u6147\u0000\u6144\u466D"+ - "\u6143\u0000\u0000\u0000\u0000\u0000\u0000\u3526"+ - "\u0000\u0000\u614A\u0000\u0000\u0000\u6145\u6146"+ - "\u0000\u6149\u6148\u4925\u0000\u0000\u4142\u4141"+ - "\u0000\u353F\u0000\u0000\u614B\u0000\u0000\u0000"+ - "\u0000\u0000\u614C\u0000\u0000\u614D\u0000\u0000"+ - "\u0000\u0000\u0000\u614F\u0000\u614E\u0000\u0000"+ - "\u0000\u0000\u0000\u3156\u0000\u0000\u0000\u0000"+ - "\u0000\u6157\u4868\u6151\u0000\u6153\u0000\u0000"+ - "\u6155\u3F3E\u0000\u0000\u6156\u6154\u3C40\u0000"+ - "\u0000\u0000\u6150\u6152\u0000\u4942\u0000\u3E49"+ - "\u0000\u0000\u6159\u0000\u0000\u6158\u0000\u0000"+ - "\u0000\u0000\u615A\u0000\u3C26\u3A2F\u0000\u0000"+ - "\u4577\u615B\u0000\u444B\u0000\u0000\u615D\u0000"+ - "\u0000\u0000\u4E21\u615C\u0000\u0000\u0000\u0000"+ - "\u0000\u4169\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6162\u0000\u6164\u6165\u4354\u0000\u0000\u0000"+ - "\u0000\u0000\u6163\u0000\u6160\u0000\u615E\u615F"+ - "\u0000\u6161\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6168\u0000\u6166\u0000\u6167\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6169"+ - "\u616B\u616C\u616D\u0000\u616E\u0000\u0000\u616A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6170\u0000\u0000\u0000\u616F\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6171\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4E45\u0000\u0000\u0000\u6174\u6172"+ - "\u6173\u0000\u0000\u0000\u3462\u0000\u0000\u0000"+ - "\u0000\u0000\u4C7E\u0000\u0000\u0000\u4A4A\u0000"+ - "\u6176\u0000\u0000\u0000\u6175\u0000\u0000\u0000"+ - "\u0000\u6177\u6178\u0000\u0000\u0000\u0000\u617C"+ - "\u6179\u617A\u617B\u0000\u617D\u0000\u0000\u0000"+ - "\u617E\u0000\u6221\u0000\u0000\u0000\u6222\u0000"+ - "\u6223\u0000\u482F\u4550\u6224\u4772\u4934\u0000"+ - "\u6225\u0000\u7B35\u6226\u452A\u0000\u3327\u3944"+ - "\u6227\u0000\u0000\u6228\u0000\u0000\u6229\u0000"+ - "\u3B29\u0000\u0000\u622B\u0000\u0000\u622A\u0000"+ - "\u0000\u622C\u622D\u7B38\u7B36\u0000\u7B37\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7B39\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4869\u0000"+ - "\u622E\u0000\u0000\u0000\u622F\u0000\u0000\u7369"+ - "\u6230\u6231\u6232\u0000\u0000\u0000\u0000\u3B2E"+ - "\u0000\u0000\u6233\u4756\u0000\u0000\u4B5F\u0000"+ - "\u314E\u0000\u3157\u0000\u0000\u6234\u0000\u0000"+ - "\u0000\u0000\u6236\u0000\u0000\u0000\u6235\u4570"+ - "\u0000\u0000\u0000\u4039\u5D39\u0000\u6237\u4C41"+ - "\u0000\u6238\u0000\u3446\u4857\u6239\u0000\u623A"+ - "\u0000\u0000\u623B\u0000\u0000\u0000\u4C5C\u0000"+ - "\u0000\u0000\u4C55\u0000\u443E\u0000\u0000\u0000"+ - "\u416A\u0000\u0000\u623D\u0000\u0000\u3D62\u0000"+ - "\u0000\u3E4A\u0000\u0000\u6240\u0000\u0000\u623F"+ - "\u623E\u487D\u0000\u3447\u3829\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6246\u0000\u0000\u6243\u3F3F"+ - "\u4C32\u0000\u0000\u0000\u6242\u6244\u6245\u0000"+ - "\u0000\u6241\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6247"+ - "\u6248\u0000\u442F\u0000\u3463\u0000\u0000\u0000"+ - "\u4365\u0000\u0000\u0000\u0000\u0000\u7B3B\u6249"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u624A\u624D\u0000\u0000\u0000\u0000"+ - "\u0000\u3F67\u0000\u4644\u0000\u624E\u4B53\u0000"+ - "\u624B\u0000\u0000\u624C\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6251\u0000\u0000\u0000\u0000\u6250\u624F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6253\u0000\u0000\u6252\u0000"+ - "\u0000\u6254\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6256\u0000"+ - "\u6255\u0000\u0000\u0000\u0000\u4A4D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3D56\u4E46\u0000\u0000"+ - "\u6257\u0000\u0000\u4637\u0000\u0000\u6258\u0000"+ - "\u0000\u6259\u0000\u625D\u625B\u625C\u0000\u625A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u625E"+ - "\u0000\u0000\u0000\u0000\u0000\u625F\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6260"+ - "\u0000\u0000\u6261\u4C37\u6262\u0000\u0000\u0000"+ - "\u0000\u0000\u4C70\u6263\u0000\u434E\u0000\u476A"+ - "\u0000\u366B\u0000\u0000\u0000\u433B\u6264\u363A"+ - "\u0000\u0000\u0000\u4050\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6265\u0000\u0000\u0000"+ - "\u0000\u0000\u3A3D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6266\u0000\u0000\u0000"+ - "\u0000\u0000\u6267\u0000\u3826\u3A55\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6269\u7B3D\u0000\u0000\u0000\u4556\u3A56\u354E"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4B24\u0000\u474B\u0000\u0000\u0000"+ - "\u0000\u0000\u4557\u0000\u0000\u0000\u0000\u395C"+ - "\u0000\u0000\u0000\u0000\u0000\u626B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7B3E\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3E4B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u7B3F\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4E32\u3945\u0000\u0000\u3827"+ - "\u0000\u0000\u4823\u0000\u626D\u0000\u0000\u0000"+ - "\u0000\u0000\u7B40\u0000\u626F\u0000\u0000\u0000"+ - "\u0000\u386B\u0000\u0000\u0000\u0000\u626E\u4476"+ - "\u0000\u0000\u0000\u0000\u6271\u3337\u626C\u0000"+ - "\u0000\u486A\u0000\u3130\u0000\u3A6C\u0000\u4F52"+ - "\u0000\u0000\u6270\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6272\u0000\u0000\u0000\u4A4B"+ - "\u0000\u4059\u6274\u0000\u0000\u0000\u0000\u6275"+ - "\u0000\u0000\u0000\u0000\u0000\u6273\u0000\u0000"+ - "\u0000\u0000\u334E\u0000\u627B\u0000\u627A\u0000"+ - "\u0000\u3C27\u0000\u0000\u0000\u627C\u6277\u0000"+ - "\u0000\u0000\u627D\u6278\u0000\u0000\u0000\u0000"+ - "\u4858\u6276\u0000\u0000\u6279\u0000\u0000\u0000"+ - "\u0000\u0000\u6322\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6321"+ - "\u4B61\u0000\u0000\u0000\u627E\u0000\u0000\u306B"+ - "\u0000\u0000\u0000\u0000\u6324\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6323\u0000\u0000"+ - "\u0000\u3E4C\u0000\u0000\u0000\u0000\u0000\u6325"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4143\u0000"+ - "\u0000\u6327\u6326\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6328\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6268\u0000"+ - "\u0000\u0000\u626A\u632A\u6329\u0000\u0000\u0000"+ - "\u7B41\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3C28\u0000\u4E69\u0000\u3C52\u0000"+ - "\u632B\u3737\u0000\u0000\u0000\u0000\u0000\u3540"+ - "\u3527\u3B63\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4D34\u0000\u0000\u6331\u0000\u6330\u4144\u632D"+ - "\u0000\u0000\u632F\u0000\u0000\u3D4B\u3F40\u632E"+ - "\u632C\u0000\u472A\u0000\u0000\u3E4D\u0000\u0000"+ - "\u493C\u0000\u0000\u0000\u0000\u3A57\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4578"+ - "\u0000\u0000\u6332\u0000\u0000\u0000\u0000\u6333"+ - "\u6349\u3658\u0000\u0000\u4F3D\u4135\u0000\u0000"+ - "\u0000\u0000\u6334\u0000\u0000\u3252\u4477\u4A21"+ - "\u0000\u0000\u0000\u0000\u7B45\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u7B47\u0000\u6335\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u357A\u6336"+ - "\u0000\u0000\u6338\u0000\u0000\u0000\u6339\u0000"+ - "\u4729\u0000\u0000\u633A\u0000\u0000\u0000\u0000"+ - "\u0000\u633B\u633C\u0000\u0000\u3659\u3253\u4645"+ - "\u3D28\u3B64\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u633D\u0000\u3D29\u0000\u0000\u0000\u0000"+ - "\u0000\u324A\u4943\u0000\u0000\u633E\u0000\u0000"+ - "\u486B\u0000\u0000\u0000\u0000\u0000\u0000\u4145"+ - "\u0000\u6341\u0000\u6342\u4769\u0000\u3F41\u633F"+ - "\u0000\u4361\u0000\u0000\u6340\u0000\u0000\u0000"+ - "\u3E4E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u305C\u0000\u0000\u0000\u0000"+ - "\u3529\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6343\u0000\u0000\u4478\u0000\u6344\u4047\u0000"+ - "\u0000\u0000\u0000\u0000\u4C2D\u0000\u0000\u4923"+ - "\u6345\u6346\u4355\u0000\u4E47\u0000\u0000\u6348"+ - "\u6347\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3C6F\u0000"+ - "\u0000\u634A\u3070\u0000\u0000\u0000\u0000\u634D"+ - "\u0000\u0000\u0000\u634B\u3254\u374E\u634C\u3946"+ - "\u3972\u0000\u4A66\u634E\u0000\u0000\u4B54\u0000"+ - "\u0000\u6350\u0000\u0000\u0000\u4051\u314F\u323A"+ - "\u302C\u0000\u0000\u0000\u0000\u0000\u0000\u634F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6351\u6352\u3E77\u0000\u0000\u0000\u0000"+ - "\u0000\u6353\u0000\u334F\u0000\u0000\u0000\u0000"+ - "\u6355\u0000\u0000\u0000\u376A\u0000\u3566\u0000"+ - "\u0000\u6356\u3675\u0000\u0000\u6357\u0000\u407C"+ - "\u0000\u464D\u0000\u4060\u3A75\u0000\u0000\u0000"+ - "\u6358\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4362\u416B\u0000\u635A\u635C\u6359"+ - "\u635B\u0000\u0000\u0000\u0000\u0000\u0000\u3722"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u635D\u3726\u0000\u0000\u0000\u3567\u4D52"+ - "\u635F\u0000\u0000\u0000\u0000\u0000\u6360\u0000"+ - "\u0000\u0000\u312E\u0000\u0000\u0000\u0000\u6363"+ - "\u0000\u0000\u0000\u3376\u6362\u6361\u0000\u6365"+ - "\u635E\u0000\u6366\u4E29\u0000\u6367\u0000\u6368"+ - "\u0000\u7B48\u5474\u636A\u0000\u6369\u0000\u0000"+ - "\u0000\u636B\u636C\u0000\u4E35\u636D\u0000\u706F"+ - "\u3E4F\u636E\u636F\u3D57\u0000\u4638\u6370\u7B49"+ - "\u0000\u0000\u4328\u7B4B\u0000\u6371\u0000\u433C"+ - "\u6372\u0000\u0000\u0000\u0000\u0000\u3625\u0000"+ - "\u513F\u435D\u3C33\u0000\u0000\u0000\u0000\u3448"+ - "\u0000\u0000\u6373\u0000\u6422\u0000\u6376\u0000"+ - "\u3568\u0000\u6375\u6424\u0000\u0000\u0000\u6374"+ - "\u0000\u3E50\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6378\u6379\u0000\u452B\u0000\u0000\u637A\u0000"+ - "\u335E\u0000\u0000\u0000\u0000\u3F5A\u4964\u0000"+ - "\u637C\u0000\u0000\u0000\u4268\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6377\u0000\u637B\u637D\u0000"+ - "\u0000\u3A7B\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6426\u492E\u0000"+ - "\u4826\u4579\u0000\u365A\u6425\u6423\u0000\u4835"+ - "\u637E\u435E\u457B\u0000\u457A\u0000\u3A76\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6438\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6428\u0000\u642A"+ - "\u0000\u0000\u0000\u0000\u642D\u0000\u642E\u0000"+ - "\u642B\u642C\u0000\u0000\u6429\u6427\u0000\u0000"+ - "\u0000\u0000\u6421\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4A4F\u3255"+ - "\u0000\u0000\u0000\u6435\u0000\u6432\u0000\u6437"+ - "\u0000\u0000\u6436\u0000\u4773\u4C27\u0000\u3B3B"+ - "\u6430\u6439\u6434\u0000\u6433\u642F\u7B4C\u6431"+ - "\u0000\u3449\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u433D\u0000\u0000\u407D\u0000\u0000"+ - "\u0000\u4822\u0000\u0000\u643E\u0000\u0000\u0000"+ - "\u4824\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4061\u643B\u0000\u0000\u484F\u0000\u643F\u4A53"+ - "\u0000\u435B\u0000\u643A\u643C\u0000\u0000\u643D"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6440\u0000\u0000"+ - "\u3C44\u0000\u0000\u0000\u4646\u6445\u6444\u0000"+ - "\u0000\u6441\u0000\u0000\u0000\u4F36\u0000\u0000"+ - "\u0000\u0000\u0000\u644A\u0000\u0000\u644E\u644B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6447\u0000\u0000\u0000\u0000\u0000\u0000\u6448"+ - "\u0000\u0000\u0000\u0000\u0000\u644D\u0000\u0000"+ - "\u0000\u6442\u5255\u6449\u6443\u0000\u0000\u644C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6452"+ - "\u0000\u344A\u0000\u644F\u0000\u0000\u0000\u6450"+ - "\u0000\u0000\u6451\u6454\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6453"+ - "\u4876\u0000\u0000\u0000\u0000\u6455\u4E7C\u4A6D"+ - "\u645A\u0000\u0000\u6457\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6456\u4052\u0000\u6459"+ - "\u645B\u0000\u0000\u0000\u6458\u0000\u645F\u0000"+ - "\u645C\u0000\u0000\u0000\u0000\u0000\u0000\u645D"+ - "\u6446\u0000\u0000\u0000\u645E\u6460\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6461\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4A46\u0000\u6462\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4C62\u0000"+ - "\u0000\u364E\u3729\u6463\u0000\u0000\u0000\u0000"+ - "\u0000\u4A34\u0000\u3F68\u0000\u4C30\u0000\u0000"+ - "\u6464\u0000\u4E33\u0000\u0000\u4774\u0000\u4146"+ - "\u4734\u0000\u0000\u3D4D\u0000\u0000\u0000\u3040"+ - "\u0000\u6469\u6467\u0000\u6465\u3421\u0000\u3E51"+ - "\u646A\u0000\u0000\u6468\u0000\u6466\u646E\u0000"+ - "\u0000\u646D\u646C\u646B\u0000\u0000\u0000\u0000"+ - "\u0000\u646F\u0000\u0000\u0000\u6470\u403A\u0000"+ - "\u6471\u0000\u6473\u0000\u0000\u6472\u0000\u0000"+ - "\u0000\u0000\u3852\u0000\u0000\u0000\u4138\u0000"+ - "\u0000\u0000\u6475\u0000\u0000\u0000\u457C\u0000"+ - "\u6474\u0000\u0000\u0000\u6476\u0000\u4A35\u416C"+ - "\u3947\u0000\u6477\u0000\u0000\u0000\u0000\u4E48"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6479"+ - "\u0000\u0000\u647A\u0000\u647B\u0000\u647C\u0000"+ - "\u3B65\u0000\u647D\u374F\u0000\u0000\u356A\u0000"+ - "\u352A\u0000\u6521\u0000\u4C73\u3948\u647E\u0000"+ - "\u0000\u0000\u6524\u4C66\u0000\u473C\u0000\u0000"+ - "\u4933\u0000\u0000\u0000\u3D63\u6523\u0000\u3C53"+ - "\u3949\u3B66\u3569\u4A36\u6522\u0000\u0000\u0000"+ - "\u4147\u4B42\u3A77\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3B67\u445D\u0000\u6527\u4E5F"+ - "\u3A59\u0000\u6528\u3F42\u0000\u652A\u0000\u0000"+ - "\u0000\u3E52\u3A30\u0000\u0000\u0000\u0000\u6529"+ - "\u0000\u0000\u3D2A\u383E\u4148\u6525\u652B\u0000"+ - "\u7B4E\u0000\u0000\u6526\u3750\u0000\u652E\u6532"+ - "\u376B\u0000\u0000\u0000\u0000\u0000\u652D\u0000"+ - "\u0000\u0000\u0000\u6536\u7B4F\u0000\u394A\u0000"+ - "\u0000\u4D6D\u303C\u6533\u0000\u0000\u356B\u0000"+ - "\u6530\u0000\u0000\u0000\u0000\u0000\u6531\u0000"+ - "\u0000\u457D\u652F\u652C\u0000\u3328\u4064\u0000"+ - "\u0000\u3828\u0000\u0000\u0000\u6538\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6535\u0000\u0000\u0000\u0000\u0000\u6537"+ - "\u0000\u0000\u0000\u6534\u0000\u0000\u0000\u0000"+ - "\u0000\u3751\u4233\u6539\u416E\u0000\u0000\u6546"+ - "\u7B51\u0000\u6542\u653C\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6540\u3C7A\u305D\u653B\u6543"+ - "\u6547\u394B\u4C56\u0000\u4456\u653D\u0000\u7B50"+ - "\u6545\u0000\u653A\u433E\u0000\u653F\u303D\u4C4A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u653E"+ - "\u0000\u0000\u365B\u486C\u0000\u0000\u0000\u416D"+ - "\u0000\u4E50\u3D6F\u0000\u0000\u656E\u7B52\u0000"+ - "\u6548\u0000\u407E\u0000\u6544\u6549\u654B\u0000"+ - "\u4479\u654E\u0000\u0000\u654A\u0000\u0000\u0000"+ - "\u4A54\u344B\u0000\u0000\u4C4B\u0000\u0000\u305E"+ - "\u0000\u0000\u654D\u0000\u4E7D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u654C\u0000\u0000\u0000\u0000"+ - "\u0000\u316F\u0000\u0000\u466C\u654F\u0000\u0000"+ - "\u0000\u6556\u6550\u6557\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6553\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u477B\u0000\u0000\u3C4A\u6555"+ - "\u0000\u6552\u6558\u6551\u0000\u0000\u3D44\u0000"+ - "\u0000\u0000\u0000\u4B25\u0000\u0000\u3D4C\u0000"+ - "\u0000\u6554\u6560\u0000\u0000\u655C\u0000\u655F"+ - "\u0000\u655D\u6561\u655B\u0000\u6541\u4053\u0000"+ - "\u0000\u484B\u0000\u655E\u0000\u0000\u6559\u0000"+ - "\u0000\u0000\u4121\u3752\u0000\u3D2B\u0000\u0000"+ - "\u0000\u0000\u7B53\u0000\u3F25\u4136\u6564\u0000"+ - "\u0000\u6566\u6567\u0000\u0000\u6563\u6565\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u655A\u6562"+ - "\u0000\u656A\u6569\u0000\u0000\u4B7A\u0000\u0000"+ - "\u372B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6568\u0000\u656C\u656B\u656F\u0000\u6571"+ - "\u0000\u0000\u3B3C\u656D\u0000\u0000\u0000\u0000"+ - "\u6572\u6573\u7921\u0000\u6574\u0000\u657A\u453B"+ - "\u6576\u0000\u6575\u6577\u6578\u0000\u6579\u0000"+ - "\u0000\u0000\u0000\u657B\u657C\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u344C\u0000"+ - "\u657D\u0000\u657E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6621\u0000\u7B54"+ - "\u0000\u0000\u0000\u0000\u6622\u6623\u6624\u0000"+ - "\u6625\u6626\u0000\u0000\u6628\u6627\u0000\u0000"+ - "\u6629\u0000\u0000\u0000\u0000\u0000\u0000\u662A"+ - "\u662B\u0000\u0000\u0000\u0000\u0000\u0000\u662E"+ - "\u662C\u662D\u3A61\u3753\u0000\u0000\u4356\u0000"+ - "\u4833\u0000\u3D70\u0000\u0000\u474D\u0000\u486D"+ - "\u662F\u586D\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6630\u6632\u0000\u4D65\u6631\u6634"+ - "\u6633\u0000\u4D53\u0000\u6635\u0000\u487E\u0000"+ - "\u0000\u0000\u0000\u0000\u6636\u0000\u0000\u0000"+ - "\u0000\u0000\u6639\u0000\u0000\u6638\u6637\u0000"+ - "\u0000\u7B55\u0000\u663A\u3732\u0000\u0000\u0000"+ - "\u4122\u3541\u0000\u0000\u0000\u0000\u663E\u663B"+ - "\u0000\u0000\u663C\u0000\u0000\u0000\u663F\u0000"+ - "\u6640\u663D\u0000\u0000\u0000\u3129\u0000\u0000"+ - "\u0000\u3227\u0000\u0000\u0000\u6642\u6643\u0000"+ - "\u0000\u0000\u6644\u0000\u4D62\u0000\u0000\u0000"+ - "\u0000\u0000\u3D2C\u0000\u6646\u6645\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3F69\u6647\u0000\u0000\u0000\u0000\u6648\u0000"+ - "\u0000\u6649\u0000\u3465\u0000\u0000\u0000\u0000"+ - "\u344D\u0000\u0000\u664A\u0000\u0000\u0000\u0000"+ - "\u0000\u664B\u0000\u4B5D\u4D63\u0000\u0000\u0000"; - - private final static String innerIndex4= - "\u4D54\u4F37\u0000\u394D\u664E\u3C54\u664D\u0000"+ - "\u0000\u0000\u0000\u664F\u3C29\u0000\u0000\u0000"+ - "\u4251\u0000\u6650\u0000\u0000\u394C\u0000\u4C57"+ - "\u6651\u6652\u0000\u0000\u6653\u0000\u0000\u0000"+ - "\u0000\u6654\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6655\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3C2A\u0000\u0000\u4C6D\u0000"+ - "\u0000\u0000\u0000\u6657\u0000\u433F\u0000\u6656"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6659\u0000"+ - "\u0000\u0000\u6658\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u665A\u0000\u0000\u0000\u403B\u0000"+ - "\u665B\u0000\u665C\u0000\u0000\u0000\u4A39\u665D"+ - "\u0000\u416F\u665E\u0000\u0000\u0000\u0000\u0000"+ - "\u665F\u0000\u0000\u0000\u0000\u0000\u0000\u4E7E"+ - "\u6662\u0000\u6661\u6660\u4430\u0000\u6663\u3F26"+ - "\u0000\u6664\u0000\u0000\u0000\u6665\u4F38\u6666"+ - "\u0000\u0000\u0000\u0000\u6667\u6669\u6668\u4825"+ - "\u0000\u4679\u0000\u4F3E\u4829\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u666B\u0000\u0000\u3E53\u0000"+ - "\u492A\u0000\u666C\u666A\u0000\u344E\u0000\u0000"+ - "\u0000\u3854\u3B68\u0000\u0000\u486E\u0000\u0000"+ - "\u0000\u382A\u4B43\u0000\u666F\u666D\u0000\u394E"+ - "\u0000\u394F\u3069\u0000\u3A68\u0000\u0000\u0000"+ - "\u0000\u0000\u4759\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u305F\u6674\u0000\u4340\u0000"+ - "\u0000\u0000\u0000\u0000\u4758\u0000\u425B\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6676\u0000"+ - "\u0000\u6672\u6675\u6670\u0000\u6673\u4B26\u0000"+ - "\u0000\u3855\u0000\u0000\u307D\u6671\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6678"+ - "\u0000\u6679\u0000\u0000\u4639\u0000\u0000\u0000"+ - "\u363B\u0000\u0000\u0000\u6726\u473D\u0000\u0000"+ - "\u0000\u0000\u3B69\u0000\u0000\u363C\u4048\u4F46"+ - "\u4C2E\u6677\u4054\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3553\u667A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u667C\u0000\u0000\u0000\u0000"+ - "\u0000\u667B\u0000\u0000\u0000\u0000\u0000\u667D"+ - "\u0000\u4326\u0000\u473E\u0000\u0000\u0000\u0000"+ - "\u0000\u4431\u0000\u0000\u0000\u0000\u6723\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6722\u0000"+ - "\u0000\u0000\u0000\u667E\u0000\u0000\u3F55\u0000"+ - "\u4965\u6725\u0000\u6724\u3950\u4F53\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6735"+ - "\u0000\u0000\u0000\u0000\u0000\u6729\u672A\u0000"+ - "\u0000\u0000\u0000\u3C70\u0000\u0000\u6728\u0000"+ - "\u3978\u6727\u0000\u0000\u672B\u0000\u0000\u0000"+ - "\u4432\u4A22\u4123\u0000\u0000\u0000\u0000\u425C"+ - "\u672F\u0000\u6730\u672C\u0000\u0000\u0000\u0000"+ - "\u672D\u0000\u672E\u0000\u0000\u0000\u0000\u3951"+ - "\u0000\u0000\u0000\u6736\u0000\u6732\u0000\u0000"+ - "\u0000\u0000\u4966\u0000\u4B6C\u4928\u0000\u0000"+ - "\u6731\u0000\u0000\u6734\u6733\u0000\u0000\u0000"+ - "\u4B44\u6737\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6738\u0000\u0000\u4137\u0000\u6739\u0000\u0000"+ - "\u673B\u0000\u673F\u0000\u0000\u673C\u673A\u473F"+ - "\u673D\u0000\u673E\u0000\u0000\u0000\u3232\u0000"+ - "\u6745\u6740\u0000\u0000\u0000\u6741\u0000\u0000"+ - "\u0000\u6742\u0000\u4221\u0000\u0000\u0000\u0000"+ - "\u6744\u6743\u6746\u0000\u0000\u0000\u0000\u6747"+ - "\u6748\u0000\u0000\u3F43\u0000\u3269\u0000\u6749"+ - "\u4E57\u0000\u3C2B\u0000\u0000\u3D2D\u0000\u0000"+ - "\u0000\u0000\u0000\u3B6A\u4357\u0000\u0000\u0000"+ - "\u0000\u0000\u674A\u674B\u3131\u0000\u674C\u0000"+ - "\u0000\u674D\u674E\u0000\u0000\u674F\u0000\u6750"+ - "\u363D\u5A2A\u6751\u0000\u4065\u6752\u3C4B\u0000"+ - "\u6753\u0000\u5030\u0000\u0000\u0000\u6754\u4A5E"+ - "\u345C\u0000\u0000\u4124\u3D58\u0000\u4971\u3D2E"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6755\u3952\u6756\u484C\u0000\u6764\u0000"+ - "\u0000\u0000\u0000\u6758\u0000\u4249\u4775\u383F"+ - "\u6757\u4125\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6759\u0000\u0000\u0000\u0000\u0000\u0000\u447A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u675B\u675A\u675D\u0000\u0000\u675C\u0000\u675E"+ - "\u0000\u0000\u6760\u0000\u675F\u0000\u344F\u0000"+ - "\u6761\u0000\u6762\u6763\u0000\u0000\u3A31\u4E49"+ - "\u0000\u6765\u3F27\u0000\u0000\u0000\u3170\u6766"+ - "\u6767\u0000\u0000\u0000\u0000\u0000\u6768\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3072\u0000\u6769\u0000\u0000"+ - "\u0000\u0000\u676A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4967\u0000\u0000\u0000\u3C47\u0000\u676C"+ - "\u0000\u0000\u0000\u0000\u0000\u3329\u3032\u0000"+ - "\u0000\u0000\u0000\u676B\u676E\u474E\u0000\u3F44"+ - "\u0000\u3256\u0000\u4B27\u0000\u0000\u0000\u0000"+ - "\u375D\u365C\u0000\u676D\u0000\u326A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3423\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3171\u6772\u4E6A\u425D\u0000\u0000\u4944"+ - "\u0000\u677E\u0000\u3257\u677C\u0000\u677A\u6771"+ - "\u0000\u676F\u0000\u6770\u0000\u3C63\u366C\u4377"+ - "\u0000\u0000\u0000\u4651\u0000\u0000\u0000\u0000"+ - "\u0000\u3151\u0000\u6774\u6773\u0000\u0000\u0000"+ - "\u0000\u6779\u6775\u6778\u0000\u0000\u0000\u0000"+ - "\u0000\u7B57\u4C50\u6777\u3258\u337D\u677B\u0000"+ - "\u0000\u677D\u0000\u0000\u0000\u0000\u3754\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6823\u682C"+ - "\u682D\u0000\u0000\u0000\u302B\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6834\u0000\u0000\u0000\u0000"+ - "\u3071\u0000\u0000\u682B\u0000\u0000\u0000\u682A"+ - "\u0000\u6825\u6824\u0000\u6822\u6821\u4363\u0000"+ - "\u427B\u6827\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6826\u0000\u0000\u0000\u0000\u6829\u0000\u0000"+ - "\u0000\u4170\u3755\u0000\u0000\u0000\u0000\u3141"+ - "\u6828\u0000\u3953\u0000\u0000\u0000\u0000\u0000"+ - "\u4171\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u7B58\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u683A\u0000\u683B\u0000\u3259"+ - "\u0000\u0000\u0000\u322E\u6838\u0000\u0000\u7B59"+ - "\u0000\u0000\u0000\u0000\u0000\u682E\u0000\u6836"+ - "\u0000\u683D\u6837\u0000\u0000\u0000\u6835\u0000"+ - "\u0000\u0000\u0000\u6776\u0000\u0000\u6833\u0000"+ - "\u0000\u0000\u682F\u0000\u0000\u0000\u3450\u6831"+ - "\u683C\u0000\u6832\u0000\u0000\u0000\u0000\u0000"+ - "\u683E\u0000\u6830\u477C\u0000\u0000\u0000\u0000"+ - "\u0000\u4D69\u0000\u0000\u0000\u6839\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u684F\u0000\u0000"+ - "\u0000\u6847\u0000\u0000\u0000\u3F7B\u0000\u7B5A"+ - "\u0000\u0000\u3546\u0000\u365D\u0000\u6842\u0000"+ - "\u0000\u0000\u0000\u325B\u0000\u0000\u3E54\u0000"+ - "\u6845\u0000\u0000\u0000\u3A5A\u0000\u0000\u4551"+ - "\u684A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4A6E\u0000\u6841\u0000\u0000\u0000\u325A"+ - "\u3856\u4929\u684B\u0000\u683F\u0000\u7B5B\u6848"+ - "\u0000\u0000\u0000\u6852\u0000\u6843\u0000\u0000"+ - "\u0000\u0000\u0000\u6844\u463A\u0000\u0000\u6849"+ - "\u0000\u0000\u0000\u6846\u4B28\u684C\u3060\u0000"+ - "\u0000\u0000\u0000\u6840\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u684E\u0000\u684D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u476B\u6854\u0000\u685F\u0000\u0000\u0000"+ - "\u0000\u337E\u0000\u0000\u0000\u6862\u0000\u0000"+ - "\u6850\u0000\u0000\u0000\u6855\u4D6E\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u685E\u0000"+ - "\u7B5C\u4D55\u0000\u0000\u0000\u0000\u4E2A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4378"+ - "\u0000\u0000\u0000\u336B\u0000\u0000\u0000\u0000"+ - "\u0000\u4972\u6864\u4621\u0000\u0000\u3031\u0000"+ - "\u0000\u685D\u0000\u6859\u4172\u6853\u685B\u6860"+ - "\u0000\u472C\u0000\u0000\u0000\u302A\u0000\u6858"+ - "\u0000\u6861\u4978\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u685C\u0000\u6857\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3E55\u0000\u0000\u0000\u0000"+ - "\u3D2F\u0000\u0000\u0000\u3C2C\u0000\u0000\u0000"+ - "\u0000\u4C58\u0000\u0000\u4947\u0000\u0000\u6867"+ - "\u0000\u6870\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u685A\u0000\u0000"+ - "\u0000\u0000\u3377\u0000\u7B5D\u0000\u0000\u0000"+ - "\u3E78\u6865\u0000\u686A\u4173\u0000\u0000\u6866"+ - "\u0000\u686D\u0000\u0000\u435F\u0000\u686E\u0000"+ - "\u0000\u4D56\u6863\u3338\u0000\u6869\u0000\u0000"+ - "\u686C\u4C2C\u0000\u0000\u0000\u0000\u686F\u0000"+ - "\u0000\u6868\u686B\u0000\u7925\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4B29\u0000\u4F21\u0000"+ - "\u0000\u0000\u0000\u0000\u6873\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u687A\u0000\u0000\u6872"+ - "\u3C43\u0000\u0000\u0000\u0000\u0000\u6851\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4A4E\u0000\u4C22\u6879\u6878\u0000\u6874"+ - "\u6875\u0000\u3136\u0000\u0000\u0000\u0000\u6877"+ - "\u0000\u6871\u0000\u0000\u0000\u0000\u4455\u0000"+ - "\u0000\u0000\u0000\u0000\u6876\u307E\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4222\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4A43\u0000\u0000"+ - "\u687B\u6921\u0000\u4859\u0000\u0000\u0000\u0000"+ - "\u687E\u3E56\u3C49\u6923\u0000\u0000\u363E\u0000"+ - "\u0000\u0000\u0000\u7B5E\u0000\u6924\u0000\u4979"+ - "\u687D\u7B5F\u6856\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u687C\u0000\u0000\u0000\u0000"+ - "\u4F4F\u4622\u4973\u7B60\u0000\u692B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6931"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6932\u0000"+ - "\u6925\u0000\u0000\u0000\u4776\u0000\u0000\u692F"+ - "\u6927\u0000\u6929\u0000\u0000\u0000\u0000\u0000"+ - "\u6933\u6928\u0000\u0000\u692C\u0000\u0000\u3172"+ - "\u0000\u4665\u0000\u692D\u6930\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6926\u0000\u4126\u0000"+ - "\u692A\u3B27\u3F45\u3730\u4C74\u0000\u4C79\u3D72"+ - "\u7B62\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6937\u6935\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4F4E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6934\u0000\u0000\u0000\u4D75\u0000\u6936"+ - "\u6938\u0000\u0000\u0000\u0000\u6939\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u693C\u693A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4623\u693B\u0000\u0000"+ - "\u0000\u484D\u692E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3D73"+ - "\u0000\u693D\u6942\u4174\u0000\u0000\u6941\u0000"+ - "\u0000\u0000\u6922\u0000\u0000\u0000\u6943\u4149"+ - "\u0000\u0000\u693E\u6940\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u693F\u0000\u0000\u5D31\u5D22"+ - "\u0000\u0000\u6945\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6944\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4D76\u0000\u623C"+ - "\u6946\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6947"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6948\u3857\u0000"+ - "\u3554\u0000\u0000\u0000\u694A\u515D\u0000\u0000"+ - "\u0000\u0000\u3575\u0000\u4E3A\u0000\u3673\u694B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u694C"+ - "\u0000\u0000\u0000\u436E\u0000\u0000\u0000\u0000"+ - "\u0000\u694D\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u467A\u0000\u303A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3263\u6952\u6953\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u694E\u0000\u3B3D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u694F\u4742\u0000\u0000\u0000"+ - "\u0000\u6950\u6951\u695B\u0000\u0000\u0000\u6955"+ - "\u6958\u0000\u0000\u0000\u0000\u0000\u6954\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6956\u0000\u6957\u3C58"+ - "\u0000\u6959\u0000\u4341\u0000\u3756\u3342\u0000"+ - "\u0000\u0000\u0000\u0000\u695C\u0000\u0000\u0000"+ - "\u0000\u333F\u0000\u6961\u0000\u0000\u695D\u6960"+ - "\u0000\u0000\u0000\u0000\u483A\u0000\u0000\u0000"+ - "\u0000\u695E\u0000\u0000\u695F\u4948\u485A\u6962"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u427D\u696C\u0000\u6968\u0000\u0000\u326B\u0000"+ - "\u6966\u0000\u4B2A\u6967\u0000\u0000\u6964\u0000"+ - "\u6965\u696A\u696D\u0000\u0000\u696B\u0000\u0000"+ - "\u0000\u6969\u6963\u0000\u0000\u0000\u0000\u0000"+ - "\u4358\u0000\u6974\u0000\u4C2A\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6972\u0000\u0000"+ - "\u0000\u6973\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u696E\u0000\u0000\u6970"+ - "\u0000\u0000\u0000\u6971\u0000\u0000\u0000\u696F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4066\u0000\u4F39\u6978\u0000\u6979\u0000"+ - "\u0000\u0000\u0000\u6A21\u0000\u3F2A\u0000\u697B"+ - "\u0000\u697E\u0000\u0000\u0000\u0000\u0000\u6976"+ - "\u6975\u0000\u0000\u6A22\u0000\u0000\u325C\u0000"+ - "\u697C\u0000\u6A23\u0000\u0000\u0000\u697D\u0000"+ - "\u0000\u0000\u0000\u0000\u697A\u0000\u4433\u0000"+ - "\u6977\u0000\u0000\u0000\u0000\u0000\u0000\u4768"+ - "\u0000\u0000\u6A27\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4D3B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A26"+ - "\u0000\u0000\u6A25\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6A2E\u0000\u0000\u0000\u6A28"+ - "\u0000\u0000\u0000\u6A30\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4D66\u6A33\u0000\u6A2A\u0000\u0000"+ - "\u6A2B\u0000\u0000\u0000\u6A2F\u0000\u6A32\u6A31"+ - "\u0000\u0000\u0000\u6A29\u0000\u0000\u0000\u0000"+ - "\u6A2C\u0000\u6A3D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6A36\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A34"+ - "\u0000\u0000\u6A35\u0000\u0000\u0000\u6A3A\u6A3B"+ - "\u0000\u332A\u0000\u3542\u0000\u0000\u6A39\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6A24\u0000\u7B65"+ - "\u0000\u0000\u0000\u0000\u0000\u6A38\u6A3C\u6A37"+ - "\u0000\u6A3E\u0000\u0000\u0000\u6A40\u6A3F\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6A42\u6A41\u695A\u0000\u0000\u0000\u6A46"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6A43\u0000\u0000\u0000\u0000\u6A44\u0000"+ - "\u0000\u6A45\u0000\u6A47\u0000\u0000\u0000\u0000"+ - "\u376C\u0000\u6A49\u0000\u6A48\u0000\u3D30\u0000"+ - "\u0000\u0000\u0000\u0000\u3954\u5E27\u0000\u0000"+ - "\u0000\u0000\u6A4A\u3D51\u0000\u0000\u0000\u3339"+ - "\u0000\u6A4B\u0000\u3152\u0000\u3E57\u6A4C\u0000"+ - "\u0000\u3955\u6A4D\u3061\u0000\u0000\u0000\u0000"+ - "\u493D\u0000\u0000\u6A4E\u0000\u0000\u0000\u0000"+ - "\u3F6A\u0000\u6A55\u0000\u0000\u6A52\u0000\u436F"+ - "\u0000\u0000\u0000\u0000\u0000\u6A53\u6A50\u365E"+ - "\u0000\u6A4F\u6A56\u0000\u0000\u0000\u0000\u0000"+ - "\u3736\u0000\u0000\u425E\u0000\u6A5C\u0000\u0000"+ - "\u0000\u0000\u6A58\u0000\u0000\u0000\u4235\u6A57"+ - "\u0000\u6A5A\u0000\u0000\u0000\u0000\u6A51\u0000"+ - "\u0000\u0000\u6A5B\u0000\u6A5D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u486F\u0000\u0000\u6A59\u0000"+ - "\u6A5E\u6A60\u0000\u0000\u3853\u6A54\u0000\u3041"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6A5F"+ - "\u0000\u3A5B\u4E76\u6A61\u6A62\u4175\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4E22"+ - "\u0000\u0000\u0000\u0000\u6A63\u4D35\u0000\u0000"+ - "\u6A64\u6A65\u0000\u0000\u4A64\u6A66\u0000\u3A40"+ - "\u0000\u4E23\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6A6B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6A6C\u3E58\u6A6A\u7B66\u0000\u0000"+ - "\u4D67\u6A67\u0000\u0000\u6A69\u403D\u3F7E\u0000"+ - "\u0000\u0000\u6A68\u0000\u6A6D\u0000\u0000\u4A23"+ - "\u0000\u0000\u6A6F\u0000\u6A6E\u0000\u0000\u0000"+ - "\u336C\u0000\u4B2B\u6A70\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u7922\u6A7C\u6A72\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6A73\u0000\u0000"+ - "\u0000\u0000\u6A74\u6A75\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6A79\u0000"+ - "\u6A7A\u0000\u0000\u6A78\u0000\u0000\u0000\u0000"+ - "\u0000\u6A76\u0000\u6A71\u6A77\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6A7B\u7037\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3228\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6A7E\u365F"+ - "\u6A7D\u0000\u0000\u0000\u6B22\u0000\u6B21\u0000"+ - "\u0000\u0000\u6B24\u0000\u0000\u6B23\u0000\u6B25"+ - "\u0000\u0000\u3D31\u0000\u6B26\u0000\u0000\u6B27"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6B28\u403E"+ - "\u0000\u4D57\u0000\u6B29\u0000\u0000\u4A24\u4746"+ - "\u6B2A\u0000\u6B2B\u382B\u0000\u0000\u0000\u352C"+ - "\u0000\u0000\u0000\u6B2C\u0000\u0000\u3B6B\u4741"+ - "\u6B2D\u0000\u3350\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6B2E\u0000\u0000\u0000\u0000\u6B30\u4D77"+ - "\u0000\u6B2F\u3F46\u0000\u6B31\u0000\u0000\u6B32"+ - "\u0000\u0000\u6B33\u3451\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6B34\u0000\u0000\u6B35\u0000\u6B36"+ - "\u6B37\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3351\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6B38\u0000\u6B39\u6B3A\u0000\u0000"+ - "\u0000\u0000\u0000\u3272\u0000\u0000\u3F28\u6B3B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6B3C\u0000\u0000\u0000"+ - "\u6B3D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3840\u0000\u447B\u6B3E\u0000\u0000\u0000\u0000"+ - "\u3757\u0000\u3F56\u0000\u6B41\u0000\u4624\u0000"+ - "\u6B40\u0000\u7B67\u3731\u0000\u0000\u6B3F\u4277"+ - "\u352D\u0000\u0000\u6B42\u0000\u6B43\u0000\u3E59"+ - "\u0000\u0000\u0000\u376D\u0000\u6B44\u0000\u0000"+ - "\u0000\u0000\u4B2C\u0000\u0000\u405F\u0000\u0000"+ - "\u0000\u3576\u0000\u4C75\u414A\u0000\u6B45\u7B68"+ - "\u0000\u0000\u3F47\u4370\u3E5A\u0000\u0000\u0000"+ - "\u0000\u6B46\u0000\u0000\u0000\u0000\u6B49\u0000"+ - "\u6B4A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3A3E\u4242\u6B48\u0000\u3E5B\u493E\u0000\u0000"+ - "\u0000\u0000\u0000\u6B47\u0000\u0000\u3B6C\u0000"+ - "\u3153\u0000\u6B4E\u3758\u0000\u0000\u3B6E\u0000"+ - "\u0000\u3B6D\u0000\u4F4D\u6B4D\u6B4C\u4127\u0000"+ - "\u354D\u4F43\u333A\u3E5C\u0000\u0000\u0000\u0000"+ - "\u0000\u7B69\u0000\u0000\u6B4B\u0000\u0000\u0000"+ - "\u0000\u0000\u6B50\u0000\u6B51\u6B4F\u0000\u3858"+ - "\u0000\u4D40\u0000\u0000\u3B6F\u4727\u0000\u0000"+ - "\u0000\u6B54\u0000\u4040\u0000\u4342\u0000\u0000"+ - "\u4D36\u0000\u6B57\u0000\u0000\u0000\u386C\u0000"+ - "\u403F\u6B53\u0000\u6B58\u386D\u6B55\u6B56\u7B6A"+ - "\u6B52\u0000\u0000\u0000\u4062\u4649\u0000\u0000"+ - "\u432F\u0000\u325D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4870\u0000\u0000\u3543\u0000\u7B6B\u4434"+ - "\u0000\u0000\u6B5B\u0000\u6B59\u0000\u0000\u434C"+ - "\u0000\u0000\u0000\u4041\u3452\u6B5A\u0000\u3F5B"+ - "\u0000\u0000\u4E4A\u0000\u0000\u0000\u4F40\u0000"+ - "\u0000\u0000\u6B5C\u6B67\u4435\u0000\u6B66\u7B6C"+ - "\u6B63\u6B6B\u6B64\u0000\u6B60\u0000\u447C\u6B5F"+ - "\u0000\u0000\u0000\u6B5D\u0000\u4D21\u3B70\u0000"+ - "\u0000\u6B61\u0000\u6B5E\u0000\u0000\u7B6E\u6B65"+ - "\u3D74\u0000\u3841\u0000\u0000\u0000\u427A\u0000"+ - "\u4B45\u315A\u3062\u0000\u4625\u0000\u0000\u6B69"+ - "\u0000\u0000\u0000\u0000\u6B68\u0000\u4666\u0000"+ - "\u6B6D\u0000\u0000\u0000\u6B62\u0000\u6B6C\u6B6E"+ - "\u0000\u382C\u6B6A\u3956\u0000\u3C55\u0000\u0000"+ - "\u6B6F\u4D58\u0000\u0000\u0000\u0000\u6B72\u0000"+ - "\u6B75\u0000\u0000\u6B73\u4935\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6B70\u0000\u0000\u0000\u0000"+ - "\u0000\u3660\u0000\u0000\u0000\u0000\u6B74\u0000"+ - "\u0000\u6B76\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6B7A\u0000\u0000\u6B77\u0000\u6B79\u6B78"+ - "\u0000\u0000\u0000\u7B6F\u0000\u0000\u6B7B\u0000"+ - "\u3C31\u0000\u6B7D\u6B7C\u4968\u0000\u0000\u6C21"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3759\u0000"+ - "\u0000\u0000\u0000\u6B7E\u6C22\u0000\u0000\u6C23"+ - "\u3544\u6641\u3E79\u0000\u6C24\u0000\u0000\u386E"+ - "\u0000\u0000\u0000\u0000\u0000\u6C25\u0000\u7B70"+ - "\u6C26\u0000\u0000\u3B3E\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u5A4E\u0000\u6C27\u0000\u6C28\u0000"+ - "\u3D32\u0000\u6C29\u6C2A\u0000\u0000\u6C2B\u0000"+ - "\u0000\u6C2C\u6C2D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u432B"+ - "\u0000\u0000\u6C2E\u0000\u0000\u0000\u0000\u6C30"+ - "\u0000\u6C2F\u0000\u0000\u0000\u0000\u4626\u0000"+ - "\u6C31\u0000\u4B2D\u0000\u6C32\u0000\u6C33\u0000"+ - "\u6C34\u0000\u0000\u0000\u0000\u6C35\u0000\u0000"+ - "\u0000\u0000\u465A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3E5D\u6C36\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u396B\u502E\u6C37\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6C38\u493F\u6C39\u0000\u6C41\u0000\u0000\u0000"+ - "\u0000\u0000\u6C3A\u0000\u0000\u6C3C\u0000\u0000"+ - "\u0000\u6C3B\u6C3D\u0000\u4B46\u6C3E\u6C3F\u0000"+ - "\u0000\u0000\u0000\u0000\u6C40\u0000\u0000\u0000"+ - "\u6C42\u0000\u0000\u0000\u0000\u332D\u4467\u0000"+ - "\u4969\u3A62\u3957\u0000\u0000\u0000\u0000\u494F"+ - "\u325F\u484E\u6C45\u3453\u4055\u6C44\u6C49\u4379"+ - "\u4C63\u0000\u6C47\u6C48\u352E\u0000\u6C4A\u4763"+ - "\u425F\u0000\u0000\u4871\u453D\u6C46\u0000\u4B47"+ - "\u326C\u6C4C\u4F28\u4442\u4F45\u0000\u0000\u3B71"+ - "\u6C4B\u0000\u4231\u0000\u0000\u6C5C\u4128\u0000"+ - "\u0000\u4678\u0000\u4950\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6C4F\u3B3F\u3B72\u0000\u3E5E\u0000"+ - "\u4765\u0000\u382D\u6C4E\u6C4D\u0000\u496A\u0000"+ - "\u0000\u0000\u3C41\u0000\u0000\u4552\u0000\u0000"+ - "\u7B71\u0000\u0000\u0000\u7B72\u0000\u0000\u0000"+ - "\u0000\u0000\u6C51\u6C52\u3958\u6C50\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6C53\u6C54\u0000\u6C56"+ - "\u4223\u0000\u6C55\u3466\u0000\u6C58\u0000\u6C57"+ - "\u6C59\u0000\u7B73\u6C5B\u6C5D\u0000\u6C5E\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4056\u0000\u3C4F\u6C5F"+ - "\u0000\u0000\u0000\u3352\u0000\u6C60\u0000\u0000"+ - "\u4176\u6C61\u0000\u6C62\u496B\u0000\u7B74\u352F"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6C63\u0000\u0000\u0000\u4436\u0000\u0000"+ - "\u0000\u0000\u315B\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6C64\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3C71\u0000\u0000\u0000\u0000"+ - "\u3F76\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u422D\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6C67\u0000\u0000\u0000\u6C66\u0000"+ - "\u0000\u0000\u6C65\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6C6D\u6C6B\u0000\u0000\u6C68"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6C6A\u0000"+ - "\u0000\u0000\u6C69\u6C6C\u0000\u3577\u0000\u6C70"+ - "\u0000\u4057\u0000\u6C71\u0000\u0000\u0000\u0000"+ - "\u3859\u0000\u6C6E\u6C6F\u0000\u0000\u0000\u4F29"+ - "\u0000\u0000\u0000\u4437\u0000\u4129\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6C72\u0000\u0000\u6C75"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6C73\u6C74\u4D59\u0000\u0000\u0000\u0000\u4627"+ - "\u6C78\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6C76\u6C77\u6C79"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6D29\u0000\u0000\u0000\u0000\u0000"+ - "\u6C7C\u0000\u0000\u0000\u6C7D\u6C7B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6C7A\u0000\u447D\u0000\u0000\u6D21"+ - "\u6D25\u6D22\u6C7E\u0000\u6D23\u0000\u0000\u0000"+ - "\u6D24\u0000\u0000\u0000\u0000\u6D2B\u0000\u0000"+ - "\u0000\u6D26\u0000\u0000\u0000\u0000\u0000\u4058"+ - "\u6D28\u0000\u0000\u6D2A\u6D27\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6D2D\u0000\u3D33\u0000\u6D2C\u0000"+ - "\u0000\u0000\u0000\u0000\u6D2E\u0000\u0000\u0000"+ - "\u0000\u6D2F\u0000\u0000\u6D32\u6D31\u0000\u6D30"+ - "\u0000\u0000\u6D34\u6D33\u0000\u4C76\u0000\u0000"+ - "\u0000\u6D36\u0000\u6D35\u6D37\u0000\u0000\u0000"+ - "\u0000\u6D38\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6D3A\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6D39\u3F48\u6D3B\u0000\u0000\u366D"+ - "\u6D3C\u6D3E\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6D3F\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6D40\u6D3D\u0000"+ - "\u6D41\u0000\u3C56\u6D42\u3530\u3733\u0000\u7B76"+ - "\u0000\u0000\u382E\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6D43\u0000\u0000\u0000\u4670"+ - "\u0000\u0000\u453E\u6D44\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6D47\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3C34\u0000\u0000\u6D46\u6D45\u375A\u6D48\u0000"+ - "\u0000\u0000\u0000\u3353\u0000\u6D4A\u0000\u0000"+ - "\u0000\u3A5C\u6D49\u0000\u6D52\u0000\u0000\u0000"+ - "\u0000\u0000\u6D4C\u6D4E\u4A65\u6D4B\u0000\u0000"+ - "\u0000\u6D4D\u0000\u6D51\u6D4F\u3531\u0000\u6D50"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6D53\u0000"+ - "\u0000\u475A\u4E58\u0000\u0000\u0000\u0000\u3D34"+ - "\u0000\u0000\u0000\u6D54\u0000\u0000\u0000\u0000"+ - "\u4D22\u6D56\u0000\u6D55\u0000\u0000\u6D59\u4D41"+ - "\u0000\u0000\u6D58\u0000\u336D\u6D57\u6D5C\u0000"+ - "\u0000\u6D5B\u0000\u0000\u6D5A\u4532\u6D5D\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6D5E"+ - "\u0000\u0000\u0000\u0000\u6D5F\u0000\u0000\u396C"+ - "\u0000\u3725\u6D60\u6D61\u6D62\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3F49\u6D63\u0000\u3C2D\u6D64"+ - "\u0000\u0000\u0000\u6D65\u0000\u0000\u0000\u5221"+ - "\u517E\u0000\u0000\u0000\u0000\u6D66\u6570\u6D67"+ - "\u4324\u3F2B\u4740\u0000\u0000\u0000\u0000\u6D68"+ - "\u0000\u0000\u4A55\u4454\u397E\u0000\u0000\u4329"+ - "\u0000\u0000\u312A\u0000\u4B78\u3F57\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u375E\u0000"+ - "\u0000\u3661\u0000\u0000\u4A56\u0000\u0000\u0000"+ - "\u0000\u0000\u6D69\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6D6B\u0000\u0000\u6D6A\u3260\u0000"+ - "\u0000\u4676\u6D6C\u4777\u0000\u4533\u0000\u6D6D"+ - "\u3D52\u0000\u0000\u0000\u6D6F\u0000\u0000\u4C42"+ - "\u6D7E\u6D71\u6D72\u0000\u0000\u4449\u0000\u0000"; - - private final static String innerIndex5= - "\u4260\u4177\u0000\u4628\u0000\u6D70\u3555\u0000"+ - "\u0000\u0000\u0000\u6D79\u0000\u6D76\u6E25\u4629"+ - "\u4360\u6D73\u0000\u447E\u4553\u6D74\u6D78\u3F60"+ - "\u0000\u4767\u444C\u0000\u0000\u4042\u6D77\u422E"+ - "\u4224\u6D75\u3029\u4F22\u0000\u0000\u0000\u6D7A"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u4261\u0000"+ - "\u0000\u3D35\u3F4A\u0000\u0000\u6D7C\u6D7B\u0000"+ - "\u306F\u6D7D\u0000\u0000\u492F\u0000\u6E27\u0000"+ - "\u0000\u465B\u3F6B\u0000\u0000\u4359\u0000\u3678"+ - "\u0000\u6E26\u4D37\u313F\u0000\u4A57\u3261\u6E21"+ - "\u6E22\u6E23\u6E24\u463B\u4323\u3063\u6E28\u0000"+ - "\u6E29\u7423\u0000\u0000\u423D\u0000\u6E2A\u0000"+ - "\u3173\u414C\u0000\u382F\u0000\u4D5A\u0000\u7B79"+ - "\u6E2B\u452C\u0000\u0000\u0000\u4178\u3C57\u6E2C"+ - "\u0000\u0000\u6E2F\u0000\u0000\u3D65\u6E2D\u412B"+ - "\u412A\u0000\u3064\u0000\u4E4B\u6E31\u0000\u4872"+ - "\u6E33\u6E32\u6E30\u6364\u3454\u0000\u0000\u6D6E"+ - "\u0000\u6E35\u6E34\u0000\u0000\u0000\u0000\u6E36"+ - "\u0000\u4D38\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4661\u0000\u0000\u4B2E\u0000"+ - "\u6E37\u0000\u3C59\u0000\u0000\u0000\u0000\u6E38"+ - "\u0000\u6E39\u0000\u0000\u0000\u6E3A\u0000\u0000"+ - "\u4521\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u306A\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3959\u0000\u0000\u0000\u4F3A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6E3E\u0000\u0000\u7B7A\u0000"+ - "\u0000\u3734\u6E3B\u0000\u6E3C\u0000\u0000\u0000"+ - "\u4974\u0000\u0000\u0000\u0000\u3354\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4D39\u0000\u363F"+ - "\u0000\u0000\u0000\u0000\u0000\u4554\u0000\u0000"+ - "\u0000\u0000\u6E3F\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6E40\u0000\u0000\u7B7C\u0000\u0000"+ - "\u0000\u6E41\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7B7D"+ - "\u0000\u0000\u0000\u0000\u0000\u4522\u0000\u0000"+ - "\u6E43\u0000\u6E42\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u4653\u6E44\u3D36\u3C60\u475B\u4371\u0000"+ - "\u0000\u0000\u3C72\u0000\u3F6C\u0000\u6E45\u0000"+ - "\u6E46\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u3F5D\u6E47\u0000\u6E48\u0000\u0000"+ - "\u0000\u6E49\u4D6F\u0000\u3D37\u0000\u0000\u0000"+ - "\u0000\u0000\u6E4B\u6E4A\u0000\u395A\u0000\u3973"+ - "\u3B40\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6E4E\u0000\u0000\u0000\u0000\u3D66"+ - "\u0000\u6E4D\u0000\u6E4C\u0000\u4269\u0000\u0000"+ - "\u386F\u0000\u4043\u0000\u0000\u0000\u0000\u4830"+ - "\u0000\u0000\u0000\u0000\u3D39\u0000\u0000\u0000"+ - "\u0000\u0000\u6E4F\u0000\u3E5F\u0000\u0000\u0000"+ - "\u0000\u0000\u6E52\u6E50\u0000\u0000\u0000\u6E51"+ - "\u0000\u0000\u0000\u0000\u6E54\u6E53\u0000\u0000"+ - "\u3E7A\u0000\u6E55\u0000\u0000\u0000\u0000\u0000"+ - "\u6E56\u6E57\u0000\u0000\u0000\u0000\u4850\u3A53"+ - "\u3C61\u6E58\u0000\u6E59\u4E24\u3D45\u4C6E\u4E4C"+ - "\u6E5A\u3662\u0000\u0000\u0000\u0000\u6E5B\u7C21"+ - "\u4523\u0000\u7B7E\u6E5E\u3378\u3F4B\u7C22\u6E5C"+ - "\u0000\u6E5D\u0000\u4460\u7C25\u7C26\u4B55\u367C"+ - "\u0000\u0000\u0000\u0000\u0000\u7C23\u7C24\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u6E60\u6E61\u0000"+ - "\u0000\u0000\u0000\u0000\u6E5F\u0000\u0000\u6E63"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7C27\u0000"+ - "\u0000\u0000\u7C29\u0000\u0000\u465F\u3343\u0000"+ - "\u7C28\u6E67\u0000\u0000\u6E64\u6E66\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u6E62\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6F4F\u0000\u0000\u6E65\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4E6B\u0000\u0000\u385A"+ - "\u0000\u7C30\u7C2A\u0000\u7C2C\u0000\u0000\u6E6F"+ - "\u7C2B\u0000\u0000\u0000\u4534\u6E6A\u0000\u0000"+ - "\u6E6D\u6E6B\u0000\u6E70\u0000\u0000\u7C2D\u0000"+ - "\u6E71\u7C2F\u0000\u0000\u0000\u0000\u0000\u6E69"+ - "\u0000\u7C2E\u6E76\u3174\u0000\u0000\u6E68\u0000"+ - "\u0000\u0000\u482D\u0000\u6E6C\u0000\u3E60\u7C31"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u395B\u0000\u0000\u0000\u0000\u0000\u7C33"+ - "\u7C34\u0000\u0000\u0000\u0000\u0000\u4B48\u0000"+ - "\u3664\u0000\u0000\u3D46\u0000\u463C\u0000\u0000"+ - "\u7924\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u412D\u0000\u6E74\u0000\u6E6E\u6E73\u0000"+ - "\u4C43\u0000\u4438\u6E75\u6E72\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7C32"+ - "\u0000\u0000\u0000\u0000\u0000\u412C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E79"+ - "\u0000\u6E78\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E77"+ - "\u7C38\u0000\u4B2F\u7C3C\u0000\u7C3A\u0000\u7C36"+ - "\u0000\u7C37\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7C3B\u0000\u0000\u0000\u3D7B\u0000\u0000\u7C35"+ - "\u0000\u6E7A\u4A5F\u0000\u0000\u3154\u0000\u0000"+ - "\u0000\u0000\u4946\u4372\u0000\u0000\u0000\u0000"+ - "\u3578\u792A\u6E7C\u7C3F\u395D\u0000\u0000\u7C42"+ - "\u0000\u0000\u7C44\u0000\u0000\u0000\u3B2C\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u6E7B"+ - "\u3F6D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3F6E\u6F21\u6F23\u0000\u0000\u7C43\u7C41\u0000"+ - "\u3E7B\u7C3E\u6F22\u6F24\u0000\u7C3D\u3653\u0000"+ - "\u4945\u0000\u0000\u3C62\u4F23\u0000\u6E7E\u3A78"+ - "\u0000\u0000\u4F3F\u0000\u0000\u6F26\u0000\u0000"+ - "\u0000\u0000\u6F25\u6F27\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6E7D\u0000\u0000\u0000"+ - "\u7923\u0000\u0000\u4669\u0000\u4555\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4457\u0000\u6F2C\u7C46"+ - "\u0000\u0000\u0000\u4343\u6F28\u0000\u0000\u0000"+ - "\u6F29\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u372D\u0000\u6F2B\u0000"+ - "\u7C45\u0000\u0000\u0000\u0000\u3830\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6F2A\u0000\u3E61\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3379\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6F30\u0000\u3A3F\u4179"+ - "\u0000\u0000\u444A\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u7C47\u0000\u0000\u333B"+ - "\u0000\u0000\u0000\u0000\u6F2E\u6F2F\u4443\u0000"+ - "\u6F2D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6F31\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6F37\u0000\u0000\u7C48\u0000"+ - "\u6F3A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6F39\u452D\u0000\u0000\u0000\u0000\u6F32\u6F33"+ - "\u6F36\u0000\u0000\u0000\u0000\u6F38\u7C49\u0000"+ - "\u0000\u3640\u0000\u0000\u6F3B\u6F35\u0000\u0000"+ - "\u6F34\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7C4A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6F3F\u0000\u0000\u0000\u6F40"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6F41\u0000\u0000\u6F3E\u6F3D\u0000\u0000\u0000"+ - "\u3E62\u462A\u6F3C\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6F45\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6F43\u0000\u0000\u0000\u0000"+ - "\u0000\u7C4B\u0000\u0000\u0000\u6F44\u6F42\u0000"+ - "\u4278\u0000\u6F46\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6F47\u0000\u0000\u6F49\u7C4C\u0000\u0000"+ - "\u7C4D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u3455\u6F48\u4C7A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6F54\u6F4A\u0000\u0000\u6F4D\u0000"+ - "\u6F4B\u0000\u6F4C\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u6F4E\u0000\u0000\u0000\u0000\u0000"+ - "\u6F50\u0000\u0000\u0000\u0000\u6F51\u0000\u6F52"+ - "\u0000\u0000\u0000\u0000\u6F55\u6F53\u6F56\u6F58"+ - "\u0000\u6F57\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4439"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4C67\u0000\u6F59\u412E\u0000\u0000\u0000\u6F5A"+ - "\u0000\u4A44\u6F5B\u332B\u0000\u0000\u0000\u313C"+ - "\u0000\u3457\u7C4E\u3456\u6F5C\u0000\u6F5D\u0000"+ - "\u6F5E\u6F5F\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6F60\u0000\u3458\u3355\u395E\u4836\u0000\u6F62"+ - "\u6F61\u0000\u0000\u0000\u0000\u6F63\u0000\u0000"+ - "\u0000\u0000\u315C\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u6F66\u0000\u6F65\u6F64\u0000\u6F67\u0000"+ - "\u0000\u0000\u0000\u6F6A\u0000\u0000\u0000\u3047"+ - "\u0000\u0000\u6F68\u0000\u6F6C\u6F6B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u6F6E\u6F6D\u6F6F\u0000"+ - "\u462E\u0000\u0000\u0000\u6F70\u0000\u0000\u0000"+ - "\u0000\u6F71\u6F73\u0000\u0000\u6F72\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u496C\u0000\u0000\u0000"+ - "\u0000\u6F74\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u6F75\u0000\u3A65\u0000\u0000\u0000\u6F76\u6F77"+ - "\u0000\u0000\u4B49\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u414B\u0000\u0000\u0000\u3024"+ - "\u424B\u0000\u6F78\u0000\u496D\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6F7B\u6F79\u395F\u0000\u6F7A"+ - "\u3842\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4A45\u6F7D\u7021\u6F7E\u7022"+ - "\u0000\u0000\u3121\u3F58\u3D7C\u3459\u7023\u0000"+ - "\u0000\u0000\u4766\u0000\u7025\u0000\u0000\u0000"+ - "\u3122\u0000\u7024\u4444\u0000\u4E4D\u462B\u6F7C"+ - "\u4E26\u0000\u3831\u0000\u0000\u4D5B\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u3679\u4E34\u0000"+ - "\u3728\u0000\u4262\u6721\u0000\u7026\u332C\u3F6F"+ - "\u0000\u0000\u0000\u0000\u3356\u7028\u0000\u7029"+ - "\u7027\u3764\u0000\u3A5D\u3E63\u7C51\u0000\u0000"+ - "\u3123\u0000\u0000\u4E59\u0000\u0000\u0000\u702B"+ - "\u6E2E\u0000\u702A\u0000\u0000\u0000\u0000\u7C52"+ - "\u702E\u702C\u702D\u0000\u702F\u0000\u7030\u4E6C"+ - "\u7031\u7032\u0000\u4049\u483B\u0000\u0000\u0000"+ - "\u3F7D\u3467\u0000\u0000\u4D3A\u326D\u3D38\u385B"+ - "\u0000\u7035\u0000\u7034\u3B73\u7036\u7033\u0000"+ - "\u0000\u3B28\u0000\u0000\u0000\u703A\u6A2D\u0000"+ - "\u0000\u5256\u0000\u3F77\u7038\u0000\u0000\u0000"+ - "\u0000\u0000\u4E25\u4671\u0000\u0000\u0000\u0000"+ - "\u312B\u0000\u4063\u3C36\u0000\u0000\u0000\u0000"+ - "\u4A37\u0000\u3140\u0000\u0000\u0000\u4E6D\u4D6B"+ - "\u0000\u703B\u0000\u4545\u0000\u0000\u0000\u0000"+ - "\u3C7B\u0000\u0000\u0000\u703C\u0000\u703D\u3F4C"+ - "\u703E\u0000\u4E6E\u0000\u0000\u7039\u7040\u7042"+ - "\u0000\u7041\u0000\u703F\u0000\u0000\u7043\u0000"+ - "\u0000\u7044\u0000\u0000\u417A\u0000\u3262\u0000"+ - "\u0000\u0000\u0000\u0000\u7045\u0000\u0000\u4C38"+ - "\u0000\u0000\u7046\u0000\u0000\u0000\u0000\u0000"+ - "\u7047\u0000\u4F2A\u7C53\u0000\u0000\u0000\u0000"+ - "\u5B31\u7048\u0000\u7C54\u0000\u7049\u704A\u0000"+ - "\u0000\u0000\u704E\u7C55\u704B\u0000\u704C\u0000"+ - "\u704D\u704F\u0000\u0000\u0000\u7C56\u0000\u7C57"+ - "\u0000\u7C58\u4044\u0000\u0000\u7C59\u4C77\u0000"+ - "\u0000\u4045\u0000\u0000\u7050\u0000\u4873\u0000"+ - "\u7051\u7353\u4C4C\u0000\u7052\u0000\u7053\u0000"+ - "\u7054\u3357\u0000\u7056\u0000\u3F59\u0000\u0000"+ - "\u0000\u7057\u0000\u0000\u3724\u0000\u0000\u0000"+ - "\u0000\u7058\u705C\u0000\u705A\u0000\u0000\u0000"+ - "\u0000\u705B\u0000\u0000\u3373\u7059\u705D\u0000"+ - "\u0000\u0000\u0000\u705E\u0000\u3048\u0000\u705F"+ - "\u7060\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u3E64\u0000\u0000\u0000\u7061\u0000\u0000\u0000"+ - "\u3547\u0000\u0000\u7064\u0000\u0000\u7063\u0000"+ - "\u7062\u0000\u0000\u6B71\u0000\u4A5C\u0000\u0000"+ - "\u0000\u0000\u0000\u7065\u7066\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u7067\u0000\u0000\u7068\u0000"+ - "\u7069\u0000\u0000\u706A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u345A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u706B\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u706C\u4723\u0000"+ - "\u0000\u0000\u706E\u323B\u0000\u7071\u7070\u0000"+ - "\u0000\u0000\u0000\u3124\u0000\u0000\u0000\u3641"+ - "\u0000\u4A47\u443A\u3A22\u0000\u3960\u3D67\u0000"+ - "\u3F5C\u0000\u0000\u0000\u7073\u0000\u0000\u7072"+ - "\u4D42\u3468\u4852\u465C\u0000\u0000\u0000\u3F7C"+ - "\u4E4E\u0000\u375B\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u7076\u0000\u0000\u7075\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u4B4B\u462C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3150\u0000\u0000\u7077"+ - "\u7074\u0000\u0000\u4951\u4D6A\u7078\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7079\u0000"+ - "\u0000\u0000\u0000\u707B\u426A\u335B\u335C\u707A"+ - "\u0000\u0000\u0000\u0000\u3469\u3832\u0000\u7C5A"+ - "\u346A\u0000\u0000\u453F\u0000\u0000\u4E60\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7C5B\u0000\u385C"+ - "\u0000\u0000\u0000\u707C\u0000\u0000\u0000\u707D"+ - "\u707E\u7121\u0000\u7123\u7122\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4977\u0000\u7124\u0000\u0000\u0000\u0000\u7125"+ - "\u0000\u7126\u0000\u0000\u0000\u0000\u7127\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u7129\u7128\u0000\u712A\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4874\u664C\u0000\u0000\u3F29"+ - "\u0000\u0000\u3532\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u712B\u0000\u712C\u0000\u522C\u5D3B\u4853"+ - "\u0000\u0000\u307B\u0000\u303B\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u3B74\u4B30\u3E7E\u0000"+ - "\u0000\u0000\u0000\u712D\u0000\u4C5F\u0000\u0000"+ - "\u0000\u712E\u4D5C\u0000\u3142\u0000\u0000\u0000"+ - "\u3B41\u0000\u712F\u326E\u7130\u0000\u0000\u0000"+ - "\u7131\u0000\u0000\u0000\u0000\u7133\u7134\u0000"+ - "\u7136\u7132\u0000\u0000\u7135\u0000\u0000\u7C5E"+ - "\u345B\u0000\u0000\u0000\u7137\u0000\u7138\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7139\u713A\u0000"+ - "\u0000\u0000\u713B\u0000\u0000\u713D\u0000\u0000"+ - "\u0000\u713C\u0000\u713F\u7142\u0000\u0000\u0000"+ - "\u713E\u7140\u7141\u0000\u0000\u7143\u0000\u3642"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3C73\u7144"+ - "\u7145\u3961\u0000\u0000\u0000\u0000\u7C60\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7146\u0000\u0000"+ - "\u333E\u0000\u0000\u0000\u474F\u7147\u7148\u0000"+ - "\u0000\u0000\u0000\u435A\u466B\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u7149\u0000\u0000\u0000"+ - "\u0000\u477D\u0000\u0000\u424C\u3158\u366E\u0000"+ - "\u366F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u4373\u714E\u3670\u0000\u0000\u326F\u0000\u0000"+ - "\u714D\u0000\u0000\u714B\u0000\u714C\u0000\u714A"+ - "\u0000\u0000\u7158\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u714F\u7150\u0000"+ - "\u0000\u7151\u7152\u0000\u0000\u0000\u0000\u0000"+ - "\u7154\u0000\u0000\u7153\u0000\u0000\u0000\u3D59"+ - "\u0000\u7155\u0000\u0000\u0000\u7157\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u3533\u7156"+ - "\u0000\u0000\u417B\u3833\u0000\u0000\u0000\u0000"+ - "\u0000\u7159\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u424D\u0000\u0000\u715A\u0000\u0000\u0000\u0000"+ - "\u462D\u0000\u0000\u0000\u0000\u0000\u0000\u715B"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7160\u0000"+ - "\u715E\u0000\u715D\u715F\u0000\u715C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7162\u7C61\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7161\u0000\u7164"+ - "\u0000\u0000\u3643\u7163\u0000\u0000\u0000\u7165"+ - "\u0000\u0000\u7166\u0000\u7168\u7167\u0000\u0000"+ - "\u0000\u7169\u716B\u716A\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u397C\u0000\u0000\u0000\u0000\u716C\u0000\u0000"+ - "\u716D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u333C\u0000\u0000\u0000\u716E\u0000\u0000\u0000"+ - "\u716F\u0000\u0000\u0000\u3F71\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7170"+ - "\u0000\u7171\u0000\u7172\u7173\u0000\u0000\u0000"+ - "\u3962\u7C62\u0000\u0000\u7C63\u0000\u7174\u7175"+ - "\u0000\u0000\u7176\u7177\u0000\u0000\u7178\u0000"+ - "\u0000\u0000\u4831\u717A\u0000\u4926\u717B\u7179"+ - "\u0000\u717D\u0000\u0000\u717C\u0000\u0000\u717E"+ - "\u0000\u0000\u0000\u7221\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7222\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7223\u0000\u7224\u0000\u0000\u0000\u0000\u7225"+ - "\u0000\u0000\u7226\u7227\u0000\u7228\u0000\u7229"+ - "\u722A\u722B\u722C\u0000\u0000\u0000\u722D\u722E"+ - "\u0000\u5D35\u722F\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u6478\u3534\u0000\u0000\u0000"+ - "\u0000\u3321\u3A32\u7231\u7230\u4C25\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7233\u7234\u7232"+ - "\u0000\u7235\u0000\u0000\u4B62\u0000\u0000\u0000"+ - "\u7236\u0000\u357B\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u4F25"+ - "\u0000\u0000\u7C65\u0000\u7237\u7C64\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u7239\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u303E\u7C66"+ - "\u0000\u723A\u4A2B\u7238\u0000\u0000\u723B\u723C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u723D"+ - "\u723E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u723F\u0000\u4B6E\u3B2D\u0000\u3A7A\u412F\u0000"+ - "\u0000\u7C67\u0000\u0000\u7240\u0000\u0000\u0000"+ - "\u0000\u7243\u0000\u7C68\u0000\u0000\u0000\u0000"+ - "\u7241\u0000\u0000\u0000\u0000\u0000\u7244\u0000"+ - "\u0000\u3871\u7242\u0000\u0000\u0000\u0000\u7245"+ - "\u0000\u7246\u7247\u0000\u724B\u0000\u3B2A\u0000"+ - "\u0000\u0000\u0000\u4264\u0000\u0000\u0000\u0000"+ - "\u0000\u724C\u7249\u7248\u724A\u0000\u0000\u0000"+ - "\u375F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7250\u724F\u724E\u0000\u0000\u3033\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7C69\u0000\u0000\u0000\u725A\u0000\u7256\u0000"+ - "\u7257\u7253\u7259\u0000\u7255\u3362\u0000\u0000"+ - "\u4F4C\u0000\u7258\u7254\u7252\u7251\u0000\u0000"+ - "\u0000\u0000\u0000\u725C\u0000\u0000\u0000\u0000"+ - "\u0000\u725F\u0000\u0000\u725E\u725D\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4949\u725B\u3073"+ - "\u7260\u0000\u7262\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u336F\u724D\u3137\u0000\u0000\u7264\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7263\u7261"+ - "\u432D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u4B70\u0000\u0000\u0000\u0000\u4E5A"+ - "\u0000\u0000\u7265\u0000\u0000\u0000\u0000\u0000"+ - "\u7266\u0000\u0000\u0000\u0000\u0000\u0000\u7267"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7268\u0000"+ - "\u7269\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u443B\u0000\u726A"+ - "\u0000\u4837\u0000\u726F\u726B\u0000\u0000\u0000"+ - "\u726C\u0000\u0000\u4B31\u4C44\u0000\u4650\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u7270\u0000\u0000\u7271\u463E"+ - "\u726E\u726D\u0000\u0000\u0000\u0000\u322A\u0000"+ - "\u0000\u0000\u7279\u0000\u0000\u7278\u0000\u0000"+ - "\u0000\u0000\u0000\u3175\u0000\u0000\u0000\u7276"+ - "\u0000\u0000\u0000\u7275\u0000\u0000\u7273\u0000"+ - "\u337B\u0000\u7272\u3C32\u3229\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u3963\u0000\u0000\u727C\u727B"+ - "\u0000\u727A\u0000\u0000\u7277\u0000\u727D\u0000"+ - "\u727E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7325\u7324\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u7326\u0000\u0000\u312D\u7321\u7322\u0000"+ - "\u3974\u4C39\u0000\u0000\u7323\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u7C6B\u4B32\u0000\u0000\u732B"+ - "\u7C6A\u0000\u7327\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u732C\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7329"+ - "\u0000\u7328\u0000\u0000\u0000\u0000\u0000\u375C"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u732D\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u732E\u0000\u0000\u0000"+ - "\u0000\u732F\u0000\u732A\u0000\u0000\u0000\u7274"+ - "\u0000\u0000\u7330\u0000\u4461\u0000\u0000\u0000"+ - "\u7334\u0000\u7335\u7333\u0000\u0000\u0000\u0000"+ - "\u0000\u7332\u7338\u0000\u7331\u0000\u7336\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7337"+ - "\u0000\u0000\u0000\u733A\u0000\u0000\u0000\u0000"+ - "\u0000\u7339\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u733C\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u733D\u0000\u733E"+ - "\u0000\u0000\u4F49\u0000\u0000\u0000\u0000\u0000"+ - "\u733B\u426B\u3A6D\u0000\u0000\u733F\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u7C6D\u7340\u7341\u0000\u0000\u7342\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u7343\u0000\u0000"+ - "\u3834\u7344\u0000\u0000\u0000\u7345\u0000\u3C2F"+ - "\u0000\u7346\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7347\u0000\u0000\u7348\u7349\u0000\u0000\u0000"+ - "\u0000\u734C\u734A\u4F3C\u0000\u734B\u0000\u4E6F"+ - "\u0000\u0000\u0000\u0000\u0000\u734D\u0000\u4E5B"+ - "\u0000\u0000\u0000\u0000\u0000\u734E\u477E\u0000"+ - "\u0000\u734F\u7351\u0000\u0000\u7352\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u7350\u396D\u4C4D\u4B63\u5677\u0000\u5D60\u4B7B"+ - "\u0000\u0000\u0000\u0000\u322B\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u7354\u3550\u7355\u7356"+ - "\u7357\u7C6E\u3975\u0000\u7358\u0000\u0000\u0000"+ - "\u6054\u4C5B\u0000\u4263\u7359\u735B\u735A\u0000"+ - "\u735C\u0000\u0000\u0000\u0000\u735D\u0000\u0000"+ - "\u735E\u0000\u0000\u0000\u0000\u0000\u0000\u735F"+ - "\u0000\u0000\u0000\u0000\u7360\u0000\u7361\u7362"+ - "\u0000\u7363\u0000\u7364\u7365\u7366\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7367"+ - "\u7368\u0000\u0000\u0000\u0000\u0000\u4524\u0000"+ - "\u0000\u0000\u0000\u385D\u0000\u736A\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u414D\u736B\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u736C\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u4921\u0000\u0000\u736D\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u736E\u6337\u0000\u0000\u6C5A\u706D"+ - "\u0000\u0000\u736F\u0000\u7370\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u7372"+ - "\u7373\u7374\u4E70\u7371\u0000\u0000\u7375\u7376"+ - "\u0000\u0000\u7378\u0000\u7377\u0000\u0000\u0000"+ - "\u0000\u0000\u737A\u0000\u0000\u0000\u737B\u7379"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u4E36\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u737C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u737D\u6354\u0000\u0000"+ - "\u737E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"; - - private final static String innerIndex6= - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u7A46\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u7C4F\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u7954\u795F"+ - "\u7960\u7975\u7A3E\u7A4E\u7A50\u7A7B\u7B23\u7B3A"+ - "\u7B42\u7B43\u7B44\u7B46\u7B4A\u7B4D\u7B56\u7B61"+ - "\u7B63\u7B64\u7B6D\u7B75\u7B77\u7B78\u7B7B\u7C39"+ - "\u7C40\u7C50\u7C5C\u7C5D\u7C5F\u7C6C\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u212A\u7C7E\u2174\u2170\u2173\u2175\u7C7D"+ - "\u214A\u214B\u2176\u215C\u2124\u215D\u2125\u213F"+ - "\u2330\u2331\u2332\u2333\u2334\u2335\u2336\u2337"+ - "\u2338\u2339\u2127\u2128\u2163\u2161\u2164\u2129"+ - "\u2177\u2341\u2342\u2343\u2344\u2345\u2346\u2347"+ - "\u2348\u2349\u234A\u234B\u234C\u234D\u234E\u234F"+ - "\u2350\u2351\u2352\u2353\u2354\u2355\u2356\u2357"+ - "\u2358\u2359\u235A\u214E\u2140\u214F\u2130\u2132"+ - "\u212E\u2361\u2362\u2363\u2364\u2365\u2366\u2367"+ - "\u2368\u2369\u236A\u236B\u236C\u236D\u236E\u236F"+ - "\u2370\u2371\u2372\u2373\u2374\u2375\u2376\u2377"+ - "\u2378\u2379\u237A\u2150\u2143\u2151\u2141\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u2171\u2172\u7C7B\u2131\u7C7C\u216F\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"; - - protected final static short index1[] = { - 1, 0, 0, 2, 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, - 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 12, 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, 14, 15, - 16, 17, 18, 19, 20, 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, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 0, 0, 0, 0, 98 - }; - - protected final static String index2[] = { - innerIndex0, - innerIndex1, - innerIndex2, - innerIndex3, - innerIndex4, - innerIndex5, - innerIndex6 - }; - -} diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_MS5022X_Decoder.java b/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_MS5022X_Decoder.java deleted file mode 100644 index 844429ae7f6..00000000000 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_MS5022X_Decoder.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.nio.cs.ext; - -import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.CharsetEncoder; - -class JIS_X_0212_MS5022X_Decoder extends JIS_X_0212_Decoder -{ - private int _start, _end; - - public JIS_X_0212_MS5022X_Decoder(Charset cs) { - super(cs); - _start = 0x21; - _end = 0x7E; - } - - protected char decodeDouble(int byte1, int byte2) { - if (((byte1 < 0) || (byte1 > _index1.length)) - || ((byte2 < _start) || (byte2 > _end))) - return REPLACE_CHAR; - int n = (_index1[byte1] & 0xf)*(_end - _start + 1) + (byte2 - _start); - char unicode = _index2[_index1[byte1] >> 4].charAt(n); - if (unicode == '\u0000') - return (super.decodeDouble(byte1, byte2)); - else - return unicode; - } - - private final static String _innerIndex0= - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u2170\u2171"+ - "\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\uFF07\uFF02\u0000\u0000\u0000\u70BB"+ - "\u4EFC\u50F4\u51EC\u5307\u5324\uFA0E\u548A\u5759"+ - "\uFA0F\uFA10\u589E\u5BEC\u5CF5\u5D53\uFA11\u5FB7"+ - "\u6085\u6120\u654E\u0000\u6665\uFA12\uF929\u6801"+ - "\uFA13\uFA14\u6A6B\u6AE2\u6DF8\u6DF2\u7028\uFA15"+ - "\uFA16\u7501\u7682\u769E\uFA17\u7930\uFA18\uFA19"+ - "\uFA1A\uFA1B\u7AE7\uFA1C\uFA1D\u7DA0\u7DD6\uFA1E"+ - "\u8362\uFA1F\u85B0\uFA20\uFA21\u8807\uFA22\u8B7F"+ - "\u8CF4\u8D76\uFA23\uFA24\uFA25\u90DE\uFA26\u9115"+ - "\uFA27\uFA28\u9592\uF9DC\uFA29\u973B\u0000\u9751"+ - "\uFA2A\uFA2B\uFA2C\u999E\u9AD9\u9B72\uFA2D\u9ED1"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u974D\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+ - "\u0000\u0000\uE3AC\uE3AD\uE3AE\uE3AF\uE3B0\uE3B1"+ - "\uE3B2\uE3B3\uE3B4\uE3B5\uE3B6\uE3B7\uE3B8\uE3B9"+ - "\uE3BA\uE3BB\uE3BC\uE3BD\uE3BE\uE3BF\uE3C0\uE3C1"+ - "\uE3C2\uE3C3\uE3C4\uE3C5\uE3C6\uE3C7\uE3C8\uE3C9"+ - "\uE3CA\uE3CB\uE3CC\uE3CD\uE3CE\uE3CF\uE3D0\uE3D1"+ - "\uE3D2\uE3D3\uE3D4\uE3D5\uE3D6\uE3D7\uE3D8\uE3D9"+ - "\uE3DA\uE3DB\uE3DC\uE3DD\uE3DE\uE3DF\uE3E0\uE3E1"+ - "\uE3E2\uE3E3\uE3E4\uE3E5\uE3E6\uE3E7\uE3E8\uE3E9"+ - "\uE3EA\uE3EB\uE3EC\uE3ED\uE3EE\uE3EF\uE3F0\uE3F1"+ - "\uE3F2\uE3F3\uE3F4\uE3F5\uE3F6\uE3F7\uE3F8\uE3F9"+ - "\uE3FA\uE3FB\uE3FC\uE3FD\uE3FE\uE3FF\uE400\uE401"+ - "\uE402\uE403\uE404\uE405\uE406\uE407\uE408\uE409"+ - "\uE40A\uE40B\uE40C\uE40D\uE40E\uE40F\uE410\uE411"+ - "\uE412\uE413\uE414\uE415\uE416\uE417\uE418\uE419"+ - "\uE41A\uE41B\uE41C\uE41D\uE41E\uE41F\uE420\uE421"+ - "\uE422\uE423\uE424\uE425\uE426\uE427\uE428\uE429"+ - "\uE42A\uE42B\uE42C\uE42D\uE42E\uE42F\uE430\uE431"+ - "\uE432\uE433\uE434\uE435\uE436\uE437\uE438\uE439"+ - "\uE43A\uE43B\uE43C\uE43D\uE43E\uE43F\uE440\uE441"+ - "\uE442\uE443\uE444\uE445\uE446\uE447\uE448\uE449"+ - "\uE44A\uE44B\uE44C\uE44D\uE44E\uE44F\uE450\uE451"+ - "\uE452\uE453\uE454\uE455\uE456\uE457\uE458\uE459"+ - "\uE45A\uE45B\uE45C\uE45D\uE45E\uE45F\uE460\uE461"+ - "\uE462\uE463\uE464\uE465\uE466\uE467\uE468\uE469"+ - "\uE46A\uE46B\uE46C\uE46D\uE46E\uE46F\uE470\uE471"+ - "\uE472\uE473\uE474\uE475\uE476\uE477\uE478\uE479"+ - "\uE47A\uE47B\uE47C\uE47D\uE47E\uE47F\uE480\uE481"+ - "\uE482\uE483\uE484\uE485\uE486\uE487\uE488\uE489"+ - "\uE48A\uE48B\uE48C\uE48D\uE48E\uE48F\uE490\uE491"+ - "\uE492\uE493\uE494\uE495\uE496\uE497\uE498\uE499"+ - "\uE49A\uE49B\uE49C\uE49D\uE49E\uE49F\uE4A0\uE4A1"+ - "\uE4A2\uE4A3\uE4A4\uE4A5\uE4A6\uE4A7\uE4A8\uE4A9"+ - "\uE4AA\uE4AB\uE4AC\uE4AD\uE4AE\uE4AF\uE4B0\uE4B1"+ - "\uE4B2\uE4B3\uE4B4\uE4B5\uE4B6\uE4B7\uE4B8\uE4B9"+ - "\uE4BA\uE4BB\uE4BC\uE4BD\uE4BE\uE4BF\uE4C0\uE4C1"+ - "\uE4C2\uE4C3\uE4C4\uE4C5\uE4C6\uE4C7\uE4C8\uE4C9"+ - "\uE4CA\uE4CB\uE4CC\uE4CD\uE4CE\uE4CF\uE4D0\uE4D1"+ - "\uE4D2\uE4D3\uE4D4\uE4D5\uE4D6\uE4D7\uE4D8\uE4D9"+ - "\uE4DA\uE4DB\uE4DC\uE4DD\uE4DE\uE4DF\uE4E0\uE4E1"+ - "\uE4E2\uE4E3\uE4E4\uE4E5\uE4E6\uE4E7\uE4E8\uE4E9"+ - "\uE4EA\uE4EB\uE4EC\uE4ED\uE4EE\uE4EF\uE4F0\uE4F1"+ - "\uE4F2\uE4F3\uE4F4\uE4F5\uE4F6\uE4F7\uE4F8\uE4F9"+ - "\uE4FA\uE4FB\uE4FC\uE4FD\uE4FE\uE4FF\uE500\uE501"+ - "\uE502\uE503\uE504\uE505\uE506\uE507\uE508\uE509"+ - "\uE50A\uE50B\uE50C\uE50D\uE50E\uE50F\uE510\uE511"+ - "\uE512\uE513\uE514\uE515\uE516\uE517\uE518\uE519"+ - "\uE51A\uE51B\uE51C\uE51D\uE51E\uE51F\uE520\uE521"+ - "\uE522\uE523\uE524\uE525\uE526\uE527\uE528\uE529"+ - "\uE52A\uE52B\uE52C\uE52D\uE52E\uE52F\uE530\uE531"+ - "\uE532\uE533\uE534\uE535\uE536\uE537\uE538\uE539"+ - "\uE53A\uE53B\uE53C\uE53D\uE53E\uE53F\uE540\uE541"+ - "\uE542\uE543\uE544\uE545\uE546\uE547\uE548\uE549"+ - "\uE54A\uE54B\uE54C\uE54D\uE54E\uE54F\uE550\uE551"+ - "\uE552\uE553\uE554\uE555\uE556\uE557\uE558\uE559"+ - "\uE55A\uE55B\uE55C\uE55D\uE55E\uE55F\uE560\uE561"+ - "\uE562\uE563\uE564\uE565\uE566\uE567\uE568\uE569"+ - "\uE56A\uE56B\uE56C\uE56D\uE56E\uE56F\uE570\uE571"+ - "\uE572\uE573\uE574\uE575\uE576\uE577\uE578\uE579"+ - "\uE57A\uE57B\uE57C\uE57D\uE57E\uE57F\uE580\uE581"+ - "\uE582\uE583\uE584\uE585\uE586\uE587\uE588\uE589"+ - "\uE58A\uE58B\uE58C\uE58D\uE58E\uE58F\uE590\uE591"+ - "\uE592\uE593\uE594\uE595\uE596\uE597\uE598\uE599"+ - "\uE59A\uE59B\uE59C\uE59D\uE59E\uE59F\uE5A0\uE5A1"+ - "\uE5A2\uE5A3\uE5A4\uE5A5\uE5A6\uE5A7\uE5A8\uE5A9"+ - "\uE5AA\uE5AB\uE5AC\uE5AD\uE5AE\uE5AF\uE5B0\uE5B1"+ - "\uE5B2\uE5B3\uE5B4\uE5B5\uE5B6\uE5B7\uE5B8\uE5B9"+ - "\uE5BA\uE5BB\uE5BC\uE5BD\uE5BE\uE5BF\uE5C0\uE5C1"+ - "\uE5C2\uE5C3\uE5C4\uE5C5\uE5C6\uE5C7\uE5C8\uE5C9"+ - "\uE5CA\uE5CB\uE5CC\uE5CD\uE5CE\uE5CF\uE5D0\uE5D1"+ - "\uE5D2\uE5D3\uE5D4\uE5D5\uE5D6\uE5D7\uE5D8\uE5D9"+ - "\uE5DA\uE5DB\uE5DC\uE5DD\uE5DE\uE5DF\uE5E0\uE5E1"+ - "\uE5E2\uE5E3\uE5E4\uE5E5\uE5E6\uE5E7\uE5E8\uE5E9"+ - "\uE5EA\uE5EB\uE5EC\uE5ED\uE5EE\uE5EF\uE5F0\uE5F1"+ - "\uE5F2\uE5F3\uE5F4\uE5F5\uE5F6\uE5F7\uE5F8\uE5F9"+ - "\uE5FA\uE5FB\uE5FC\uE5FD\uE5FE\uE5FF\uE600\uE601"+ - "\uE602\uE603\uE604\uE605\uE606\uE607\uE608\uE609"+ - "\uE60A\uE60B\uE60C\uE60D\uE60E\uE60F\uE610\uE611"+ - "\uE612\uE613\uE614\uE615\uE616\uE617\uE618\uE619"+ - "\uE61A\uE61B\uE61C\uE61D\uE61E\uE61F\uE620\uE621"+ - "\uE622\uE623\uE624\uE625\uE626\uE627\uE628\uE629"+ - "\uE62A\uE62B\uE62C\uE62D\uE62E\uE62F\uE630\uE631"+ - "\uE632\uE633\uE634\uE635\uE636\uE637\uE638\uE639"+ - "\uE63A\uE63B\uE63C\uE63D\uE63E\uE63F\uE640\uE641"+ - "\uE642\uE643\uE644\uE645\uE646\uE647\uE648\uE649"+ - "\uE64A\uE64B\uE64C\uE64D\uE64E\uE64F\uE650\uE651"+ - "\uE652\uE653\uE654\uE655\uE656\uE657\uE658\uE659"+ - "\uE65A\uE65B\uE65C\uE65D\uE65E\uE65F\uE660\uE661"+ - "\uE662\uE663\uE664\uE665\uE666\uE667\uE668\uE669"+ - "\uE66A\uE66B\uE66C\uE66D\uE66E\uE66F\uE670\uE671"+ - "\uE672\uE673\uE674\uE675\uE676\uE677\uE678\uE679"+ - "\uE67A\uE67B\uE67C\uE67D\uE67E\uE67F\uE680\uE681"+ - "\uE682\uE683\uE684\uE685\uE686\uE687\uE688\uE689"+ - "\uE68A\uE68B\uE68C\uE68D\uE68E\uE68F\uE690\uE691"+ - "\uE692\uE693\uE694\uE695\uE696\uE697\uE698\uE699"+ - "\uE69A\uE69B\uE69C\uE69D\uE69E\uE69F\uE6A0\uE6A1"+ - "\uE6A2\uE6A3\uE6A4\uE6A5\uE6A6\uE6A7\uE6A8\uE6A9"+ - "\uE6AA\uE6AB\uE6AC\uE6AD\uE6AE\uE6AF\uE6B0\uE6B1"+ - "\uE6B2\uE6B3\uE6B4\uE6B5\uE6B6\uE6B7\uE6B8\uE6B9"+ - "\uE6BA\uE6BB\uE6BC\uE6BD\uE6BE\uE6BF\uE6C0\uE6C1"+ - "\uE6C2\uE6C3\uE6C4\uE6C5\uE6C6\uE6C7\uE6C8\uE6C9"+ - "\uE6CA\uE6CB\uE6CC\uE6CD\uE6CE\uE6CF\uE6D0\uE6D1"+ - "\uE6D2\uE6D3\uE6D4\uE6D5\uE6D6\uE6D7\uE6D8\uE6D9"+ - "\uE6DA\uE6DB\uE6DC\uE6DD\uE6DE\uE6DF\uE6E0\uE6E1"+ - "\uE6E2\uE6E3\uE6E4\uE6E5\uE6E6\uE6E7\uE6E8\uE6E9"+ - "\uE6EA\uE6EB\uE6EC\uE6ED\uE6EE\uE6EF\uE6F0\uE6F1"+ - "\uE6F2\uE6F3\uE6F4\uE6F5\uE6F6\uE6F7\uE6F8\uE6F9"+ - "\uE6FA\uE6FB\uE6FC\uE6FD\uE6FE\uE6FF\uE700\uE701"+ - "\uE702\uE703\uE704\uE705\uE706\uE707\uE708\uE709"+ - "\uE70A\uE70B\uE70C\uE70D\uE70E\uE70F\uE710\uE711"+ - "\uE712\uE713\uE714\uE715\uE716\uE717\uE718\uE719"+ - "\uE71A\uE71B\uE71C\uE71D\uE71E\uE71F\uE720\uE721"+ - "\uE722\uE723\uE724\uE725\uE726\uE727\uE728\uE729"+ - "\uE72A\uE72B\uE72C\uE72D\uE72E\uE72F\uE730\uE731"+ - "\uE732\uE733\uE734\uE735\uE736\uE737\uE738\uE739"+ - "\uE73A\uE73B\uE73C\uE73D\uE73E\uE73F\uE740\uE741"+ - "\uE742\uE743\uE744\uE745\uE746\uE747\uE748\uE749"+ - "\uE74A\uE74B\uE74C\uE74D\uE74E\uE74F\uE750\uE751"+ - "\uE752\uE753\uE754\uE755\uE756\uE757"; - - private final static short _index1[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }; - - private final static String _index2[] = { - _innerIndex0 - }; - -} diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_MS5022X_Encoder.java b/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_MS5022X_Encoder.java deleted file mode 100644 index 2e60caa27fa..00000000000 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_MS5022X_Encoder.java +++ /dev/null @@ -1,1618 +0,0 @@ -/* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.nio.cs.ext; - -import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.CharsetEncoder; - -class JIS_X_0212_MS5022X_Encoder extends JIS_X_0212_Encoder -{ - public JIS_X_0212_MS5022X_Encoder(Charset cs) { - super(cs); - } - - protected int encodeSingle(char inputChar) { - return -1; - } - - protected int encodeDouble(char ch) { - int offset = _index1[((ch & 0xff00) >> 8 )] << 8; - int nativeCode = _index2[offset >> 12].charAt((offset & 0xFFF) + (ch & 0xFF)); - if (nativeCode == '\u0001') - return (super.encodeDouble(ch)); - else - return nativeCode; - } - - private final static String _innerIndex0= - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u7321\u7322\u7323\u7324\u7325\u7326\u7327\u7328"+ - "\u7329\u732A\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u733B\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u733C\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u733D\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u733E"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u733F\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u7341\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u7342\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u7345\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u7346\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u7347\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u7348\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u734A"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u734B\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u734C\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u734D\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"; - - private final static String _innerIndex1= - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u734F\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u7352\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u7355\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u7356\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u7358\u0001\u0001\u0001\u0001\u0001"+ - "\u7357\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u7359\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u733A\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u735C\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u735D\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u735E\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u7360\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u7365"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u7368\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u7369\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u736B\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u736D\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u7370"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u7372"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u7373\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u7374\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"; - - private final static String _innerIndex2= - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u7378\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u737A\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u737D\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u7422\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u7463\u0001\u0001"+ - "\u0001\u7424\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u7428\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u7429\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u742A\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u742C\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u7521\u7522\u7523\u7524"+ - "\u7525\u7526\u7527\u7528\u7529\u752A\u752B\u752C"+ - "\u752D\u752E\u752F\u7530\u7531\u7532\u7533\u7534"+ - "\u7535\u7536\u7537\u7538\u7539\u753A\u753B\u753C"+ - "\u753D\u753E\u753F\u7540\u7541\u7542\u7543\u7544"+ - "\u7545\u7546\u7547\u7548\u7549\u754A\u754B\u754C"+ - "\u754D\u754E\u754F\u7550\u7551\u7552\u7553\u7554"+ - "\u7555\u7556\u7557\u7558\u7559\u755A\u755B\u755C"+ - "\u755D\u755E\u755F\u7560\u7561\u7562\u7563\u7564"+ - "\u7565\u7566\u7567\u7568\u7569\u756A\u756B\u756C"+ - "\u756D\u756E\u756F\u7570\u7571\u7572\u7573\u7574"+ - "\u7575\u7576\u7577\u7578\u7579\u757A\u757B\u757C"+ - "\u757D\u757E\u7621\u7622\u7623\u7624\u7625\u7626"+ - "\u7627\u7628\u7629\u762A\u762B\u762C\u762D\u762E"+ - "\u762F\u7630\u7631\u7632\u7633\u7634\u7635\u7636"+ - "\u7637\u7638\u7639\u763A\u763B\u763C\u763D\u763E"+ - "\u763F\u7640\u7641\u7642\u7643\u7644\u7645\u7646"+ - "\u7647\u7648\u7649\u764A\u764B\u764C\u764D\u764E"+ - "\u764F\u7650\u7651\u7652\u7653\u7654\u7655\u7656"+ - "\u7657\u7658\u7659\u765A\u765B\u765C\u765D\u765E"+ - "\u765F\u7660\u7661\u7662\u7663\u7664\u7665\u7666"+ - "\u7667\u7668\u7669\u766A\u766B\u766C\u766D\u766E"+ - "\u766F\u7670\u7671\u7672\u7673\u7674\u7675\u7676"+ - "\u7677\u7678\u7679\u767A\u767B\u767C\u767D\u767E"+ - "\u7721\u7722\u7723\u7724\u7725\u7726\u7727\u7728"+ - "\u7729\u772A\u772B\u772C\u772D\u772E\u772F\u7730"+ - "\u7731\u7732\u7733\u7734\u7735\u7736\u7737\u7738"+ - "\u7739\u773A\u773B\u773C\u773D\u773E\u773F\u7740"+ - "\u7741\u7742\u7743\u7744\u7745\u7746\u7747\u7748"+ - "\u7749\u774A\u774B\u774C\u774D\u774E\u774F\u7750"+ - "\u7751\u7752\u7753\u7754\u7755\u7756\u7757\u7758"+ - "\u7759\u775A\u775B\u775C\u775D\u775E\u775F\u7760"+ - "\u7761\u7762\u7763\u7764\u7765\u7766\u7767\u7768"+ - "\u7769\u776A\u776B\u776C\u776D\u776E\u776F\u7770"+ - "\u7771\u7772\u7773\u7774\u7775\u7776\u7777\u7778"+ - "\u7779\u777A\u777B\u777C\u777D\u777E\u7821\u7822"+ - "\u7823\u7824\u7825\u7826\u7827\u7828\u7829\u782A"+ - "\u782B\u782C\u782D\u782E\u782F\u7830\u7831\u7832"+ - "\u7833\u7834\u7835\u7836\u7837\u7838\u7839\u783A"+ - "\u783B\u783C\u783D\u783E\u783F\u7840\u7841\u7842"+ - "\u7843\u7844\u7845\u7846\u7847\u7848\u7849\u784A"+ - "\u784B\u784C\u784D\u784E\u784F\u7850\u7851\u7852"+ - "\u7853\u7854\u7855\u7856\u7857\u7858\u7859\u785A"+ - "\u785B\u785C\u785D\u785E\u785F\u7860\u7861\u7862"+ - "\u7863\u7864\u7865\u7866\u7867\u7868\u7869\u786A"+ - "\u786B\u786C\u786D\u786E\u786F\u7870\u7871\u7872"+ - "\u7873\u7874\u7875\u7876\u7877\u7878\u7879\u787A"+ - "\u787B\u787C\u787D\u787E\u7921\u7922\u7923\u7924"+ - "\u7925\u7926\u7927\u7928\u7929\u792A\u792B\u792C"+ - "\u792D\u792E\u792F\u7930\u7931\u7932\u7933\u7934"+ - "\u7935\u7936\u7937\u7938\u7939\u793A\u793B\u793C"+ - "\u793D\u793E\u793F\u7940\u7941\u7942\u7943\u7944"+ - "\u7945\u7946\u7947\u7948\u7949\u794A\u794B\u794C"+ - "\u794D\u794E\u794F\u7950\u7951\u7952\u7953\u7954"+ - "\u7955\u7956\u7957\u7958\u7959\u795A\u795B\u795C"+ - "\u795D\u795E\u795F\u7960\u7961\u7962\u7963\u7964"+ - "\u7965\u7966\u7967\u7968\u7969\u796A\u796B\u796C"+ - "\u796D\u796E\u796F\u7970\u7971\u7972\u7973\u7974"+ - "\u7975\u7976\u7977\u7978\u7979\u797A\u797B\u797C"+ - "\u797D\u797E\u7A21\u7A22\u7A23\u7A24\u7A25\u7A26"+ - "\u7A27\u7A28\u7A29\u7A2A\u7A2B\u7A2C\u7A2D\u7A2E"+ - "\u7A2F\u7A30\u7A31\u7A32\u7A33\u7A34\u7A35\u7A36"+ - "\u7A37\u7A38\u7A39\u7A3A\u7A3B\u7A3C\u7A3D\u7A3E"+ - "\u7A3F\u7A40\u7A41\u7A42\u7A43\u7A44\u7A45\u7A46"+ - "\u7A47\u7A48\u7A49\u7A4A\u7A4B\u7A4C\u7A4D\u7A4E"+ - "\u7A4F\u7A50\u7A51\u7A52\u7A53\u7A54\u7A55\u7A56"+ - "\u7A57\u7A58\u7A59\u7A5A\u7A5B\u7A5C\u7A5D\u7A5E"+ - "\u7A5F\u7A60\u7A61\u7A62\u7A63\u7A64\u7A65\u7A66"+ - "\u7A67\u7A68\u7A69\u7A6A\u7A6B\u7A6C\u7A6D\u7A6E"+ - "\u7A6F\u7A70\u7A71\u7A72\u7A73\u7A74\u7A75\u7A76"+ - "\u7A77\u7A78\u7A79\u7A7A\u7A7B\u7A7C\u7A7D\u7A7E"+ - "\u7B21\u7B22\u7B23\u7B24\u7B25\u7B26\u7B27\u7B28"+ - "\u7B29\u7B2A\u7B2B\u7B2C\u7B2D\u7B2E\u7B2F\u7B30"+ - "\u7B31\u7B32\u7B33\u7B34\u7B35\u7B36\u7B37\u7B38"+ - "\u7B39\u7B3A\u7B3B\u7B3C\u7B3D\u7B3E\u7B3F\u7B40"+ - "\u7B41\u7B42\u7B43\u7B44\u7B45\u7B46\u7B47\u7B48"+ - "\u7B49\u7B4A\u7B4B\u7B4C\u7B4D\u7B4E\u7B4F\u7B50"+ - "\u7B51\u7B52\u7B53\u7B54\u7B55\u7B56\u7B57\u7B58"+ - "\u7B59\u7B5A\u7B5B\u7B5C\u7B5D\u7B5E\u7B5F\u7B60"+ - "\u7B61\u7B62\u7B63\u7B64\u7B65\u7B66\u7B67\u7B68"+ - "\u7B69\u7B6A\u7B6B\u7B6C\u7B6D\u7B6E\u7B6F\u7B70"+ - "\u7B71\u7B72\u7B73\u7B74\u7B75\u7B76\u7B77\u7B78"+ - "\u7B79\u7B7A\u7B7B\u7B7C\u7B7D\u7B7E\u7C21\u7C22"+ - "\u7C23\u7C24\u7C25\u7C26\u7C27\u7C28\u7C29\u7C2A"+ - "\u7C2B\u7C2C\u7C2D\u7C2E\u7C2F\u7C30\u7C31\u7C32"+ - "\u7C33\u7C34\u7C35\u7C36\u7C37\u7C38\u7C39\u7C3A"+ - "\u7C3B\u7C3C\u7C3D\u7C3E\u7C3F\u7C40\u7C41\u7C42"+ - "\u7C43\u7C44\u7C45\u7C46\u7C47\u7C48\u7C49\u7C4A"+ - "\u7C4B\u7C4C\u7C4D\u7C4E\u7C4F\u7C50\u7C51\u7C52"+ - "\u7C53\u7C54\u7C55\u7C56\u7C57\u7C58\u7C59\u7C5A"+ - "\u7C5B\u7C5C\u7C5D\u7C5E\u7C5F\u7C60\u7C61\u7C62"+ - "\u7C63\u7C64\u7C65\u7C66\u7C67\u7C68\u7C69\u7C6A"+ - "\u7C6B\u7C6C\u7C6D\u7C6E\u7C6F\u7C70\u7C71\u7C72"+ - "\u7C73\u7C74\u7C75\u7C76\u7C77\u7C78\u7C79\u7C7A"+ - "\u7C7B\u7C7C\u7C7D\u7C7E\u7D21\u7D22\u7D23\u7D24"+ - "\u7D25\u7D26\u7D27\u7D28\u7D29\u7D2A\u7D2B\u7D2C"+ - "\u7D2D\u7D2E\u7D2F\u7D30\u7D31\u7D32\u7D33\u7D34"+ - "\u7D35\u7D36\u7D37\u7D38\u7D39\u7D3A\u7D3B\u7D3C"+ - "\u7D3D\u7D3E\u7D3F\u7D40\u7D41\u7D42\u7D43\u7D44"+ - "\u7D45\u7D46\u7D47\u7D48\u7D49\u7D4A\u7D4B\u7D4C"+ - "\u7D4D\u7D4E\u7D4F\u7D50\u7D51\u7D52\u7D53\u7D54"+ - "\u7D55\u7D56\u7D57\u7D58\u7D59\u7D5A\u7D5B\u7D5C"+ - "\u7D5D\u7D5E\u7D5F\u7D60\u7D61\u7D62\u7D63\u7D64"+ - "\u7D65\u7D66\u7D67\u7D68\u7D69\u7D6A\u7D6B\u7D6C"+ - "\u7D6D\u7D6E\u7D6F\u7D70\u7D71\u7D72\u7D73\u7D74"+ - "\u7D75\u7D76\u7D77\u7D78\u7D79\u7D7A\u7D7B\u7D7C"+ - "\u7D7D\u7D7E\u7E21\u7E22\u7E23\u7E24\u7E25\u7E26"+ - "\u7E27\u7E28\u7E29\u7E2A\u7E2B\u7E2C\u7E2D\u7E2E"+ - "\u7E2F\u7E30\u7E31\u7E32\u7E33\u7E34\u7E35\u7E36"+ - "\u7E37\u7E38\u7E39\u7E3A\u7E3B\u7E3C\u7E3D\u7E3E"+ - "\u7E3F\u7E40\u7E41\u7E42\u7E43\u7E44\u7E45\u7E46"+ - "\u7E47\u7E48\u7E49\u7E4A\u7E4B\u7E4C\u7E4D\u7E4E"+ - "\u7E4F\u7E50\u7E51\u7E52\u7E53\u7E54\u7E55\u7E56"+ - "\u7E57\u7E58\u7E59\u7E5A\u7E5B\u7E5C\u7E5D\u7E5E"+ - "\u7E5F\u7E60\u7E61\u7E62\u7E63\u7E64\u7E65\u7E66"+ - "\u7E67\u7E68\u7E69\u7E6A\u7E6B\u7E6C\u7E6D\u7E6E"+ - "\u7E6F\u7E70\u7E71\u7E72\u7E73\u7E74\u7E75\u7E76"+ - "\u7E77\u7E78\u7E79\u7E7A\u7E7B\u7E7C\u7E7D\u7E7E"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u7351\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u737E\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u7340\u7343"+ - "\u7344\u7349\u7350\u7353\u7354\u735A\u735B\u735F"+ - "\u7361\u7362\u7363\u7364\u7366\u7367\u736A\u736C"+ - "\u736E\u736F\u7371\u7375\u7376\u7377\u7379\u737B"+ - "\u737C\u7421\u7425\u7426\u7427\u742B\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u7336\u0001\u0001\u0001\u0001\u7335"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"; - - private final static short _index1[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, - 3, 4, 0, 5, 6, 0, 0, 7, 8, 0, 0, 9, 10, 11, 0, 12, - 13, 14, 0, 0, 0, 15, 16, 0, 17, 0, 18, 0, 0, 19, 0, 0, - 20, 0, 0, 0, 0, 21, 22, 0, 0, 23, 24, 0, 0, 25, 0, 0, - 0, 0, 0, 26, 0, 27, 0, 0, 28, 0, 0, 29, 30, 31, 0, 0, - 32, 33, 0, 0, 0, 34, 0, 35, 0, 36, 37, 38, 0, 0, 39, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 41, 42, 43, 44, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 46, 0, 0, 0, 0, 47 - }; - - private final static String _index2[] = { - _innerIndex0, - _innerIndex1, - _innerIndex2 - }; - -} diff --git a/jdk/src/share/classes/sun/nio/cs/ext/MS50220.java b/jdk/src/share/classes/sun/nio/cs/ext/MS50220.java index 2ba26245e4a..fde9220dfd9 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/MS50220.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/MS50220.java @@ -26,6 +26,8 @@ package sun.nio.cs.ext; import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CharsetEncoder; public class MS50220 extends ISO2022_JP { @@ -34,6 +36,10 @@ public class MS50220 extends ISO2022_JP ExtendedCharsets.aliasesFor("x-windows-50220")); } + protected MS50220(String canonicalName, String[] aliases) { + super(canonicalName, aliases); + } + public String historicalName() { return "MS50220"; } @@ -44,29 +50,25 @@ public class MS50220 extends ISO2022_JP (cs instanceof MS50220); } - protected short[] getDecIndex1() { - return JIS_X_0208_MS5022X_Decoder.index1; + public CharsetDecoder newDecoder() { + return new Decoder(this, DEC0208, DEC0212); } - protected String[] getDecIndex2() { - return JIS_X_0208_MS5022X_Decoder.index2; + public CharsetEncoder newEncoder() { + return new Encoder(this, ENC0208, ENC0212, doSBKANA()); } - protected DoubleByteDecoder get0212Decoder() { - return new JIS_X_0212_MS5022X_Decoder(this); - } + private final static DoubleByte.Decoder DEC0208 = + (DoubleByte.Decoder)new JIS_X_0208_MS5022X().newDecoder(); - protected short[] getEncIndex1() { - return JIS_X_0208_MS5022X_Encoder.index1; - } + private final static DoubleByte.Decoder DEC0212 = + (DoubleByte.Decoder)new JIS_X_0212_MS5022X().newDecoder(); - protected String[] getEncIndex2() { - return JIS_X_0208_MS5022X_Encoder.index2; - } + private final static DoubleByte.Encoder ENC0208 = + (DoubleByte.Encoder)new JIS_X_0208_MS5022X().newEncoder(); - protected DoubleByteEncoder get0212Encoder() { - return new JIS_X_0212_MS5022X_Encoder(this); - } + private final static DoubleByte.Encoder ENC0212 = + (DoubleByte.Encoder)new JIS_X_0212_MS5022X().newEncoder(); protected boolean doSBKANA() { return false; diff --git a/jdk/src/share/classes/sun/nio/cs/ext/MS50221.java b/jdk/src/share/classes/sun/nio/cs/ext/MS50221.java index 035094ee117..26eb804b846 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/MS50221.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/MS50221.java @@ -27,7 +27,7 @@ package sun.nio.cs.ext; import java.nio.charset.Charset; -public class MS50221 extends ISO2022_JP +public class MS50221 extends MS50220 { public MS50221() { super("x-windows-50221", @@ -44,30 +44,6 @@ public class MS50221 extends ISO2022_JP (cs instanceof MS50221); } - protected short[] getDecIndex1() { - return JIS_X_0208_MS5022X_Decoder.index1; - } - - protected String[] getDecIndex2() { - return JIS_X_0208_MS5022X_Decoder.index2; - } - - protected DoubleByteDecoder get0212Decoder() { - return new JIS_X_0212_MS5022X_Decoder(this); - } - - protected short[] getEncIndex1() { - return JIS_X_0208_MS5022X_Encoder.index1; - } - - protected String[] getEncIndex2() { - return JIS_X_0208_MS5022X_Encoder.index2; - } - - protected DoubleByteEncoder get0212Encoder() { - return new JIS_X_0212_MS5022X_Encoder(this); - } - protected boolean doSBKANA() { return true; } diff --git a/jdk/src/share/classes/sun/nio/cs/ext/MSISO2022JP.java b/jdk/src/share/classes/sun/nio/cs/ext/MSISO2022JP.java index 02ac1e709ee..5cc0f583d3d 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/MSISO2022JP.java +++ b/jdk/src/share/classes/sun/nio/cs/ext/MSISO2022JP.java @@ -26,6 +26,8 @@ package sun.nio.cs.ext; import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CharsetEncoder; public class MSISO2022JP extends ISO2022_JP { @@ -43,31 +45,17 @@ public class MSISO2022JP extends ISO2022_JP (cs instanceof MSISO2022JP); } - protected short[] getDecIndex1() { - return JIS_X_0208_MS932_Decoder.index1; + public CharsetDecoder newDecoder() { + return new Decoder(this, DEC0208, null); } - protected String[] getDecIndex2() { - return JIS_X_0208_MS932_Decoder.index2; + public CharsetEncoder newEncoder() { + return new Encoder(this, ENC0208, null, true); } - protected DoubleByteDecoder get0212Decoder() { - return null; - } + private final static DoubleByte.Decoder DEC0208 = + (DoubleByte.Decoder)new JIS_X_0208_MS932().newDecoder(); - protected short[] getEncIndex1() { - return JIS_X_0208_MS932_Encoder.index1; - } - - protected String[] getEncIndex2() { - return JIS_X_0208_MS932_Encoder.index2; - } - - protected DoubleByteEncoder get0212Encoder() { - return null; - } - - protected boolean doSBKANA() { - return true; - } + private final static DoubleByte.Encoder ENC0208 = + (DoubleByte.Encoder)new JIS_X_0208_MS932().newEncoder(); } diff --git a/jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java b/jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java index f483fc2e71d..f92c66624ca 100644 --- a/jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java +++ b/jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java @@ -576,7 +576,7 @@ public class GSSCredentialImpl implements GSSCredential { if (element == null) throw new GSSExceptionImpl(GSSException.NO_CRED, "No credential found for: " + - mechOid + getElementStr(mechOid, + getElementStr(mechOid, initiate? INITIATE_ONLY : ACCEPT_ONLY)); return element; } diff --git a/jdk/src/share/classes/sun/security/jgss/krb5/Krb5NameElement.java b/jdk/src/share/classes/sun/security/jgss/krb5/Krb5NameElement.java index 1fb1bb0e689..e8b16765919 100644 --- a/jdk/src/share/classes/sun/security/jgss/krb5/Krb5NameElement.java +++ b/jdk/src/share/classes/sun/security/jgss/krb5/Krb5NameElement.java @@ -27,10 +27,8 @@ package sun.security.jgss.krb5; import org.ietf.jgss.*; import sun.security.jgss.spi.*; -import javax.security.auth.kerberos.*; import sun.security.krb5.PrincipalName; import sun.security.krb5.KrbException; -import sun.security.krb5.ServiceName; import java.io.UnsupportedEncodingException; import java.net.InetAddress; import java.net.UnknownHostException; @@ -119,8 +117,8 @@ public class Krb5NameElement hostName = components[1]; String principal = getHostBasedInstance(service, hostName); - principalName = new ServiceName(principal, - PrincipalName.KRB_NT_SRV_HST); + principalName = new PrincipalName(principal, + PrincipalName.KRB_NT_SRV_HST); } } diff --git a/jdk/src/share/classes/sun/security/krb5/Credentials.java b/jdk/src/share/classes/sun/security/krb5/Credentials.java index 1451910c5cf..bdb8f7c1045 100644 --- a/jdk/src/share/classes/sun/security/krb5/Credentials.java +++ b/jdk/src/share/classes/sun/security/krb5/Credentials.java @@ -464,8 +464,7 @@ public class Credentials { System.out.println(">>> DEBUG: ----Credentials----"); System.out.println("\tclient: " + c.client.toString()); System.out.println("\tserver: " + c.server.toString()); - System.out.println("\tticket: realm: " + c.ticket.realm.toString()); - System.out.println("\t sname: " + c.ticket.sname.toString()); + System.out.println("\tticket: sname: " + c.ticket.sname.toString()); if (c.startTime != null) { System.out.println("\tstartTime: " + c.startTime.getTime()); } diff --git a/jdk/src/share/classes/sun/security/krb5/KrbApReq.java b/jdk/src/share/classes/sun/security/krb5/KrbApReq.java index 4854cd3d825..52d62c83bea 100644 --- a/jdk/src/share/classes/sun/security/krb5/KrbApReq.java +++ b/jdk/src/share/classes/sun/security/krb5/KrbApReq.java @@ -179,7 +179,6 @@ public class KrbApReq { KrbApReq(APOptions apOptions, Ticket ticket, EncryptionKey key, - Realm crealm, PrincipalName cname, Checksum cksum, KerberosTime ctime, @@ -189,7 +188,7 @@ public class KrbApReq { throws Asn1Exception, IOException, KdcErrException, KrbCryptoException { - init(apOptions, ticket, key, crealm, cname, + init(apOptions, ticket, key, cname, cksum, ctime, subKey, seqNumber, authorizationData, KeyUsage.KU_PA_TGS_REQ_AUTHENTICATOR); @@ -208,7 +207,6 @@ public class KrbApReq { init(options, tgs_creds.ticket, tgs_creds.key, - tgs_creds.client.getRealm(), tgs_creds.client, cksum, ctime, @@ -221,7 +219,6 @@ public class KrbApReq { private void init(APOptions apOptions, Ticket ticket, EncryptionKey key, - Realm crealm, PrincipalName cname, Checksum cksum, KerberosTime ctime, @@ -232,7 +229,7 @@ public class KrbApReq { throws Asn1Exception, IOException, KdcErrException, KrbCryptoException { - createMessage(apOptions, ticket, key, crealm, cname, + createMessage(apOptions, ticket, key, cname, cksum, ctime, subKey, seqNumber, authorizationData, usage); obuf = apReqMessg.asn1Encode(); @@ -289,9 +286,6 @@ public class KrbApReq { ctime = authenticator.ctime; cusec = authenticator.cusec; authenticator.ctime.setMicroSeconds(authenticator.cusec); - authenticator.cname.setRealm(authenticator.crealm); - apReqMessg.ticket.sname.setRealm(apReqMessg.ticket.realm); - enc_ticketPart.cname.setRealm(enc_ticketPart.crealm); if (!authenticator.cname.equals(enc_ticketPart.cname)) throw new KrbApErrException(Krb5.KRB_AP_ERR_BADMATCH); @@ -457,7 +451,6 @@ public class KrbApReq { private void createMessage(APOptions apOptions, Ticket ticket, EncryptionKey key, - Realm crealm, PrincipalName cname, Checksum cksum, KerberosTime ctime, @@ -474,8 +467,7 @@ public class KrbApReq { seqno = new Integer(seqNumber.current()); authenticator = - new Authenticator(crealm, - cname, + new Authenticator(cname, cksum, ctime.getMicroSeconds(), ctime, diff --git a/jdk/src/share/classes/sun/security/krb5/KrbAppMessage.java b/jdk/src/share/classes/sun/security/krb5/KrbAppMessage.java index 32c4e3b683a..cf19cf98242 100644 --- a/jdk/src/share/classes/sun/security/krb5/KrbAppMessage.java +++ b/jdk/src/share/classes/sun/security/krb5/KrbAppMessage.java @@ -48,8 +48,7 @@ abstract class KrbAppMessage { HostAddress rAddress, boolean timestampRequired, boolean seqNumberRequired, - PrincipalName packetPrincipal, - Realm packetRealm) + PrincipalName packetPrincipal) throws KrbApErrException { if (!Krb5.AP_EMPTY_ADDRESSES_ALLOWED || sAddress != null) { diff --git a/jdk/src/share/classes/sun/security/krb5/KrbAsRep.java b/jdk/src/share/classes/sun/security/krb5/KrbAsRep.java index c2b0df30db4..4c7b9a7bdc8 100644 --- a/jdk/src/share/classes/sun/security/krb5/KrbAsRep.java +++ b/jdk/src/share/classes/sun/security/krb5/KrbAsRep.java @@ -152,11 +152,10 @@ class KrbAsRep extends KrbKdcRep { DerValue encoding = new DerValue(enc_as_rep_part); EncASRepPart enc_part = new EncASRepPart(encoding); - rep.ticket.sname.setRealm(rep.ticket.realm); rep.encKDCRepPart = enc_part; ASReq req = asReq.getMessage(); - check(req, rep); + check(true, req, rep); creds = new Credentials( rep.ticket, diff --git a/jdk/src/share/classes/sun/security/krb5/KrbAsReq.java b/jdk/src/share/classes/sun/security/krb5/KrbAsReq.java index 1c2dfdf94db..95d2b0d32f3 100644 --- a/jdk/src/share/classes/sun/security/krb5/KrbAsReq.java +++ b/jdk/src/share/classes/sun/security/krb5/KrbAsReq.java @@ -115,10 +115,8 @@ public class KrbAsReq { } if (sname == null) { - sname = new PrincipalName("krbtgt" + - PrincipalName.NAME_COMPONENT_SEPARATOR + - cname.getRealmAsString(), - PrincipalName.KRB_NT_SRV_INST); + String realm = cname.getRealmAsString(); + sname = PrincipalName.tgsService(realm, realm); } if (till == null) { @@ -128,7 +126,6 @@ public class KrbAsReq { // enc-authorization-data and additional-tickets never in AS-REQ KDCReqBody kdc_req_body = new KDCReqBody(options, cname, - cname.getRealm(), sname, from, till, diff --git a/jdk/src/share/classes/sun/security/krb5/KrbAsReqBuilder.java b/jdk/src/share/classes/sun/security/krb5/KrbAsReqBuilder.java index 23b4dd84f62..ece8dff29a1 100644 --- a/jdk/src/share/classes/sun/security/krb5/KrbAsReqBuilder.java +++ b/jdk/src/share/classes/sun/security/krb5/KrbAsReqBuilder.java @@ -99,9 +99,6 @@ public final class KrbAsReqBuilder { // Called by other constructors private void init(PrincipalName cname) throws KrbException { - if (cname.getRealm() == null) { - cname.setRealm(Config.getInstance().getDefaultRealm()); - } this.cname = cname; state = State.INIT; } diff --git a/jdk/src/share/classes/sun/security/krb5/KrbCred.java b/jdk/src/share/classes/sun/security/krb5/KrbCred.java index e263640e99e..7e2c645eea7 100644 --- a/jdk/src/share/classes/sun/security/krb5/KrbCred.java +++ b/jdk/src/share/classes/sun/security/krb5/KrbCred.java @@ -96,12 +96,11 @@ public class KrbCred { PrincipalName princ = delegatedCreds.getClient(); Realm realm = princ.getRealm(); PrincipalName tgService = delegatedCreds.getServer(); - Realm tgsRealm = tgService.getRealm(); - KrbCredInfo credInfo = new KrbCredInfo(sessionKey, realm, + KrbCredInfo credInfo = new KrbCredInfo(sessionKey, princ, delegatedCreds.flags, delegatedCreds.authTime, delegatedCreds.startTime, delegatedCreds.endTime, - delegatedCreds.renewTill, tgsRealm, tgService, + delegatedCreds.renewTill, tgService, delegatedCreds.cAddr); timeStamp = new KerberosTime(KerberosTime.NOW); @@ -138,19 +137,13 @@ public class KrbCred { KrbCredInfo credInfo = encPart.ticketInfo[0]; EncryptionKey credInfoKey = credInfo.key; - Realm prealm = credInfo.prealm; - // XXX PrincipalName can store realm + principalname or - // just principal name. PrincipalName pname = credInfo.pname; - pname.setRealm(prealm); TicketFlags flags = credInfo.flags; KerberosTime authtime = credInfo.authtime; KerberosTime starttime = credInfo.starttime; KerberosTime endtime = credInfo.endtime; KerberosTime renewTill = credInfo.renewTill; - Realm srealm = credInfo.srealm; PrincipalName sname = credInfo.sname; - sname.setRealm(srealm); HostAddresses caddr = credInfo.caddr; if (DEBUG) { diff --git a/jdk/src/share/classes/sun/security/krb5/KrbException.java b/jdk/src/share/classes/sun/security/krb5/KrbException.java index 5a0b0e730f0..28cff004b04 100644 --- a/jdk/src/share/classes/sun/security/krb5/KrbException.java +++ b/jdk/src/share/classes/sun/security/krb5/KrbException.java @@ -45,6 +45,10 @@ public class KrbException extends Exception { super(s); } + public KrbException(Throwable cause) { + super(cause); + } + public KrbException(int i) { returnCode = i; } diff --git a/jdk/src/share/classes/sun/security/krb5/KrbKdcRep.java b/jdk/src/share/classes/sun/security/krb5/KrbKdcRep.java index 78ed1f7f2fb..1100aadf506 100644 --- a/jdk/src/share/classes/sun/security/krb5/KrbKdcRep.java +++ b/jdk/src/share/classes/sun/security/krb5/KrbKdcRep.java @@ -35,28 +35,17 @@ import sun.security.krb5.internal.*; abstract class KrbKdcRep { static void check( + boolean isAsReq, KDCReq req, KDCRep rep ) throws KrbApErrException { - if (!req.reqBody.cname.equalsWithoutRealm(rep.cname)) { + if (isAsReq && !req.reqBody.cname.equals(rep.cname)) { rep.encKDCRepPart.key.destroy(); throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED); } - /**** XXX - if (!req.reqBody.crealm.equals(rep.crealm)) { - rep.encKDCRepPart.key.destroy(); - throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED); - } - *****/ - - if (!req.reqBody.sname.equalsWithoutRealm(rep.encKDCRepPart.sname)) { - rep.encKDCRepPart.key.destroy(); - throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED); - } - - if (!req.reqBody.crealm.equals(rep.encKDCRepPart.srealm)) { + if (!req.reqBody.sname.equals(rep.encKDCRepPart.sname)) { rep.encKDCRepPart.key.destroy(); throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED); } @@ -73,7 +62,6 @@ abstract class KrbKdcRep { throw new KrbApErrException(Krb5.KRB_AP_ERR_MODIFIED); } - for (int i = 1; i < 6; i++) { if (req.reqBody.kdcOptions.get(i) != rep.encKDCRepPart.flags.get(i)) { diff --git a/jdk/src/share/classes/sun/security/krb5/KrbPriv.java b/jdk/src/share/classes/sun/security/krb5/KrbPriv.java index bac278884e0..dc2cc0d69d9 100644 --- a/jdk/src/share/classes/sun/security/krb5/KrbPriv.java +++ b/jdk/src/share/classes/sun/security/krb5/KrbPriv.java @@ -89,8 +89,7 @@ class KrbPriv extends KrbAppMessage { raddr, timestampRequired, seqNumberRequired, - creds.client, - creds.client.getRealm() + creds.client ); } @@ -151,8 +150,7 @@ class KrbPriv extends KrbAppMessage { HostAddress rAddress, boolean timestampRequired, boolean seqNumberRequired, - PrincipalName cname, - Realm crealm + PrincipalName cname ) throws Asn1Exception, KdcErrException, KrbApErrException, IOException, KrbCryptoException { @@ -172,8 +170,7 @@ class KrbPriv extends KrbAppMessage { rAddress, timestampRequired, seqNumberRequired, - cname, - crealm + cname ); return enc_part.userData; diff --git a/jdk/src/share/classes/sun/security/krb5/KrbSafe.java b/jdk/src/share/classes/sun/security/krb5/KrbSafe.java index addb5c1be42..18c52f361f6 100644 --- a/jdk/src/share/classes/sun/security/krb5/KrbSafe.java +++ b/jdk/src/share/classes/sun/security/krb5/KrbSafe.java @@ -90,8 +90,7 @@ class KrbSafe extends KrbAppMessage { raddr, timestampRequired, seqNumberRequired, - creds.client, - creds.client.getRealm() + creds.client ); } @@ -154,8 +153,7 @@ class KrbSafe extends KrbAppMessage { HostAddress rAddress, boolean timestampRequired, boolean seqNumberRequired, - PrincipalName cname, - Realm crealm + PrincipalName cname ) throws Asn1Exception, KdcErrException, KrbApErrException, IOException, KrbCryptoException { @@ -177,8 +175,7 @@ class KrbSafe extends KrbAppMessage { rAddress, timestampRequired, seqNumberRequired, - cname, - crealm + cname ); return krb_safe.safeBody.userData; diff --git a/jdk/src/share/classes/sun/security/krb5/KrbTgsRep.java b/jdk/src/share/classes/sun/security/krb5/KrbTgsRep.java index 5812894de01..27fd55611d5 100644 --- a/jdk/src/share/classes/sun/security/krb5/KrbTgsRep.java +++ b/jdk/src/share/classes/sun/security/krb5/KrbTgsRep.java @@ -82,12 +82,11 @@ public class KrbTgsRep extends KrbKdcRep { byte[] enc_tgs_rep_part = rep.encPart.reset(enc_tgs_rep_bytes); ref = new DerValue(enc_tgs_rep_part); EncTGSRepPart enc_part = new EncTGSRepPart(ref); - rep.ticket.sname.setRealm(rep.ticket.realm); rep.encKDCRepPart = enc_part; - check(req, rep); + check(false, req, rep); - creds = new Credentials(rep.ticket, + this.creds = new Credentials(rep.ticket, req.reqBody.cname, rep.ticket.sname, enc_part.key, @@ -99,7 +98,6 @@ public class KrbTgsRep extends KrbKdcRep { enc_part.caddr ); this.rep = rep; - this.creds = creds; this.secondTicket = tgsReq.getSecondTicket(); } diff --git a/jdk/src/share/classes/sun/security/krb5/KrbTgsReq.java b/jdk/src/share/classes/sun/security/krb5/KrbTgsReq.java index 1021a7b10bd..c154ccb7ca0 100644 --- a/jdk/src/share/classes/sun/security/krb5/KrbTgsReq.java +++ b/jdk/src/share/classes/sun/security/krb5/KrbTgsReq.java @@ -148,7 +148,6 @@ public class KrbTgsReq { asCreds.key, ctime, princName, - princName.getRealm(), servName, from, till, @@ -214,7 +213,6 @@ public class KrbTgsReq { EncryptionKey key, KerberosTime ctime, PrincipalName cname, - Realm crealm, PrincipalName sname, KerberosTime from, KerberosTime till, @@ -273,8 +271,6 @@ public class KrbTgsReq { KDCReqBody reqBody = new KDCReqBody( kdc_options, cname, - // crealm, - sname.getRealm(), // TO sname, from, req_till, @@ -315,7 +311,6 @@ public class KrbTgsReq { new APOptions(), ticket, key, - crealm, cname, cksum, ctime, diff --git a/jdk/src/share/classes/sun/security/krb5/PrincipalName.java b/jdk/src/share/classes/sun/security/krb5/PrincipalName.java index d03e2fe3044..2a1e4753729 100644 --- a/jdk/src/share/classes/sun/security/krb5/PrincipalName.java +++ b/jdk/src/share/classes/sun/security/krb5/PrincipalName.java @@ -38,15 +38,25 @@ import java.util.Vector; import java.util.Locale; import java.io.IOException; import java.math.BigInteger; +import java.util.Arrays; import sun.security.krb5.internal.ccache.CCacheOutputStream; import sun.security.krb5.internal.util.KerberosString; /** - * This class encapsulates a Kerberos principal. + * Implements the ASN.1 PrincipalName type and its realm in a single class. + *

+ * Realm ::= KerberosString + * + * PrincipalName ::= SEQUENCE { + * name-type [0] Int32, + * name-string [1] SEQUENCE OF KerberosString + * } + * + * This class is immutable. + * @see Realm */ -public class PrincipalName - implements Cloneable { +public class PrincipalName implements Cloneable { //name types @@ -80,8 +90,6 @@ public class PrincipalName */ public static final int KRB_NT_UID = 5; - - /** * TGS Name */ @@ -96,98 +104,109 @@ public class PrincipalName public static final String NAME_REALM_SEPARATOR_STR = "@"; public static final String REALM_COMPONENT_SEPARATOR_STR = "."; - private int nameType; - private String[] nameStrings; // Principal names don't mutate often + // Instance fields. - private Realm nameRealm; // optional; a null realm means use default - // Note: the nameRealm is not included in the default ASN.1 encoding + /** + * The name type, from PrincipalName's name-type field. + */ + private final int nameType; - // cached salt, might be changed by KDC info, not used in clone - private String salt = null; + /** + * The name strings, from PrincipalName's name-strings field. This field + * must be neither null nor empty. Each entry of it must also be neither + * null nor empty. Make sure to clone the field when it's passed in or out. + */ + private final String[] nameStrings; - protected PrincipalName() { + /** + * The realm this principal belongs to. + */ + private final Realm nameRealm; // not null + + // cached default salt, not used in clone + private transient String salt = null; + + // There are 3 basic constructors. All other constructors must call them. + // All basic constructors must call validateNameStrings. + // 1. From name components + // 2. From name + // 3. From DER encoding + + /** + * Creates a PrincipalName. + */ + public PrincipalName(int nameType, String[] nameStrings, Realm nameRealm) { + if (nameRealm == null) { + throw new IllegalArgumentException("Null realm not allowed"); + } + validateNameStrings(nameStrings); + this.nameType = nameType; + this.nameStrings = nameStrings.clone(); + this.nameRealm = nameRealm; + } + + // This method is called by Windows NativeCred.c + public PrincipalName(String[] nameParts, String realm) throws RealmException { + this(KRB_NT_UNKNOWN, nameParts, new Realm(realm)); } public PrincipalName(String[] nameParts, int type) - throws IllegalArgumentException, IOException { - if (nameParts == null) { - throw new IllegalArgumentException("Null input not allowed"); - } - nameStrings = new String[nameParts.length]; - System.arraycopy(nameParts, 0, nameStrings, 0, nameParts.length); - nameType = type; - nameRealm = null; + throws IllegalArgumentException, RealmException { + this(type, nameParts, Realm.getDefault()); } - public PrincipalName(String[] nameParts) throws IOException { - this(nameParts, KRB_NT_UNKNOWN); + // Validate a nameStrings argument + private static void validateNameStrings(String[] ns) { + if (ns == null) { + throw new IllegalArgumentException("Null nameStrings not allowed"); + } + if (ns.length == 0) { + throw new IllegalArgumentException("Empty nameStrings not allowed"); + } + for (String s: ns) { + if (s == null) { + throw new IllegalArgumentException("Null nameString not allowed"); + } + if (s.isEmpty()) { + throw new IllegalArgumentException("Empty nameString not allowed"); + } + } } public Object clone() { try { PrincipalName pName = (PrincipalName) super.clone(); - // Re-assign mutable fields - if (nameStrings != null) { - pName.nameStrings = nameStrings.clone(); - } - if (nameRealm != null) { - pName.nameRealm = (Realm)nameRealm.clone(); - } + UNSAFE.putObject(this, NAME_STRINGS_OFFSET, nameStrings.clone()); return pName; } catch (CloneNotSupportedException ex) { throw new AssertionError("Should never happen"); } } - /* - * Added to workaround a bug where the equals method that takes a - * PrincipalName is not being called but Object.equals(Object) is - * being called. - */ + private static final long NAME_STRINGS_OFFSET; + private static final sun.misc.Unsafe UNSAFE; + static { + try { + sun.misc.Unsafe unsafe = sun.misc.Unsafe.getUnsafe(); + NAME_STRINGS_OFFSET = unsafe.objectFieldOffset( + PrincipalName.class.getDeclaredField("nameStrings")); + UNSAFE = unsafe; + } catch (ReflectiveOperationException e) { + throw new Error(e); + } + } + + @Override public boolean equals(Object o) { - if (o instanceof PrincipalName) - return equals((PrincipalName)o); - else - return false; - } - - public boolean equals(PrincipalName other) { - - - if (!equalsWithoutRealm(other)) { - return false; + if (this == o) { + return true; } - - if ((nameRealm != null && other.nameRealm == null) || - (nameRealm == null && other.nameRealm != null)) { - return false; + if (o instanceof PrincipalName) { + PrincipalName other = (PrincipalName)o; + return nameRealm.equals(other.nameRealm) && + Arrays.equals(nameStrings, other.nameStrings); } - - if (nameRealm != null && other.nameRealm != null) { - if (!nameRealm.equals(other.nameRealm)) { - return false; - } - } - - return true; - } - - boolean equalsWithoutRealm(PrincipalName other) { - - if ((nameStrings != null && other.nameStrings == null) || - (nameStrings == null && other.nameStrings != null)) - return false; - - if (nameStrings != null && other.nameStrings != null) { - if (nameStrings.length != other.nameStrings.length) - return false; - for (int i = 0; i < nameStrings.length; i++) - if (!nameStrings[i].equals(other.nameStrings[i])) - return false; - } - - return true; - + return false; } /** @@ -208,20 +227,23 @@ public class PrincipalName * http://www.ietf.org/rfc/rfc4120.txt. * * @param encoding a Der-encoded data. + * @param realm the realm for this name * @exception Asn1Exception if an error occurs while decoding * an ASN1 encoded data. * @exception Asn1Exception if there is an ASN1 encoding error * @exception IOException if an I/O error occurs * @exception IllegalArgumentException if encoding is null * reading encoded data. - * */ - public PrincipalName(DerValue encoding) - throws Asn1Exception, IOException { - nameRealm = null; + public PrincipalName(DerValue encoding, Realm realm) + throws Asn1Exception, IOException { + if (realm == null) { + throw new IllegalArgumentException("Null realm not allowed"); + } + nameRealm = realm; DerValue der; if (encoding == null) { - throw new IllegalArgumentException("Null input not allowed"); + throw new IllegalArgumentException("Null encoding not allowed"); } if (encoding.getTag() != DerValue.tag_Sequence) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); @@ -243,14 +265,12 @@ public class PrincipalName DerValue subSubDer; while(subDer.getData().available() > 0) { subSubDer = subDer.getData().getDerValue(); - v.addElement(new KerberosString(subSubDer).toString()); - } - if (v.size() > 0) { - nameStrings = new String[v.size()]; - v.copyInto(nameStrings); - } else { - nameStrings = new String[] {""}; + String namePart = new KerberosString(subSubDer).toString(); + v.addElement(namePart); } + nameStrings = new String[v.size()]; + v.copyInto(nameStrings); + validateNameStrings(nameStrings); } else { throw new Asn1Exception(Krb5.ASN1_BAD_ID); } @@ -267,32 +287,35 @@ public class PrincipalName * more marshaled value. * @param explicitTag tag number. * @param optional indicate if this data field is optional - * @return an instance of PrincipalName. - * + * @param realm the realm for the name + * @return an instance of PrincipalName, or null if the + * field is optional and missing. */ public static PrincipalName parse(DerInputStream data, byte explicitTag, boolean - optional) - throws Asn1Exception, IOException { + optional, + Realm realm) + throws Asn1Exception, IOException, RealmException { if ((optional) && (((byte)data.peekByte() & (byte)0x1F) != explicitTag)) return null; DerValue der = data.getDerValue(); - if (explicitTag != (der.getTag() & (byte)0x1F)) + if (explicitTag != (der.getTag() & (byte)0x1F)) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); - else { + } else { DerValue subDer = der.getData().getDerValue(); - return new PrincipalName(subDer); + if (realm == null) { + realm = Realm.getDefault(); + } + return new PrincipalName(subDer, realm); } } - // This is protected because the definition of a principal - // string is fixed // XXX Error checkin consistent with MIT krb5_parse_name // Code repetition, realm parsed again by class Realm - protected static String[] parseName(String name) { + private static String[] parseName(String name) { Vector tempStrings = new Vector<>(); String temp = name; @@ -312,13 +335,13 @@ public class PrincipalName continue; } else { - if (componentStart < i) { + if (componentStart <= i) { component = temp.substring(componentStart, i); tempStrings.addElement(component); } componentStart = i + 1; } - } else + } else { if (temp.charAt(i) == NAME_REALM_SEPARATOR) { /* * If this separator is escaped then don't treat it @@ -337,11 +360,11 @@ public class PrincipalName break; } } + } i++; } - if (i == temp.length()) - if (componentStart < i) { + if (i == temp.length()) { component = temp.substring(componentStart, i); tempStrings.addElement(component); } @@ -351,30 +374,26 @@ public class PrincipalName return result; } - public PrincipalName(String name, int type) - throws RealmException { + /** + * Constructs a PrincipalName from a string. + * @param name the name + * @param type the type + * @param realm the realm, null if not known. Note that when realm is not + * null, it will be always used even if there is a realm part in name. When + * realm is null, will read realm part from name, or try to map a realm + * (for KRB_NT_SRV_HST), or use the default realm, or fail + * @throws RealmException + */ + public PrincipalName(String name, int type, String realm) + throws RealmException { if (name == null) { throw new IllegalArgumentException("Null name not allowed"); } String[] nameParts = parseName(name); - Realm tempRealm = null; - String realmString = Realm.parseRealmAtSeparator(name); - - if (realmString == null) { - try { - Config config = Config.getInstance(); - realmString = config.getDefaultRealm(); - } catch (KrbException e) { - RealmException re = - new RealmException(e.getMessage()); - re.initCause(e); - throw re; - } + validateNameStrings(nameParts); + if (realm == null) { + realm = Realm.parseRealmAtSeparator(name); } - - if (realmString != null) - tempRealm = new Realm(realmString); - switch (type) { case KRB_NT_SRV_HST: if (nameParts.length >= 2) { @@ -401,18 +420,22 @@ public class PrincipalName } nameStrings = nameParts; nameType = type; + + if (realm != null) { + nameRealm = new Realm(realm); + } else { // We will try to get realm name from the mapping in // the configuration. If it is not specified // we will use the default realm. This nametype does // not allow a realm to be specified. The name string must of // the form service@host and this is internally changed into // service/host by Kerberos - - String mapRealm = mapHostToRealm(nameParts[1]); - if (mapRealm != null) { - nameRealm = new Realm(mapRealm); - } else { - nameRealm = tempRealm; + String mapRealm = mapHostToRealm(nameParts[1]); + if (mapRealm != null) { + nameRealm = new Realm(mapRealm); + } else { + nameRealm = Realm.getDefault(); + } } break; case KRB_NT_UNKNOWN: @@ -422,20 +445,34 @@ public class PrincipalName case KRB_NT_UID: nameStrings = nameParts; nameType = type; - nameRealm = tempRealm; + if (realm != null) { + nameRealm = new Realm(realm); + } else { + nameRealm = Realm.getDefault(); + } break; default: throw new IllegalArgumentException("Illegal name type"); } } + public PrincipalName(String name, int type) throws RealmException { + this(name, type, (String)null); + } + public PrincipalName(String name) throws RealmException { this(name, KRB_NT_UNKNOWN); } public PrincipalName(String name, String realm) throws RealmException { - this(name, KRB_NT_UNKNOWN); - nameRealm = new Realm(realm); + this(name, KRB_NT_UNKNOWN, realm); + } + + public static PrincipalName tgsService(String r1, String r2) + throws KrbException { + return new PrincipalName(PrincipalName.KRB_NT_SRV_INST, + new String[] {PrincipalName.TGS_DEFAULT_SRV_NAME, r1}, + new Realm(r2)); } public String getRealmAsString() { @@ -475,29 +512,17 @@ public class PrincipalName } public String getRealmString() { - if (nameRealm != null) - return nameRealm.toString(); - return null; + return nameRealm.toString(); } public Realm getRealm() { return nameRealm; } - public void setRealm(Realm new_nameRealm) throws RealmException { - nameRealm = new_nameRealm; - } - - public void setRealm(String realmsString) throws RealmException { - nameRealm = new Realm(realmsString); - } - public String getSalt() { if (salt == null) { StringBuffer salt = new StringBuffer(); - if (nameRealm != null) { - salt.append(nameRealm.toString()); - } + salt.append(nameRealm.toString()); for (int i = 0; i < nameStrings.length; i++) { salt.append(nameStrings[i]); } @@ -513,11 +538,8 @@ public class PrincipalName str.append("/"); str.append(nameStrings[i]); } - if (nameRealm != null) { - str.append("@"); - str.append(nameRealm.toString()); - } - + str.append("@"); + str.append(nameRealm.toString()); return str.toString(); } @@ -532,7 +554,8 @@ public class PrincipalName } /** - * Encodes a PrincipalName object. + * Encodes a PrincipalName object. Note that only the type and + * names are encoded. To encode the realm, call getRealm().asn1Encode(). * @return the byte array of the encoded PrncipalName object. * @exception Asn1Exception if an error occurs while decoding an ASN1 encoded data. * @exception IOException if an I/O error occurs while reading encoded data. @@ -597,12 +620,10 @@ public class PrincipalName public void writePrincipal(CCacheOutputStream cos) throws IOException { cos.write32(nameType); cos.write32(nameStrings.length); - if (nameRealm != null) { - byte[] realmBytes = null; - realmBytes = nameRealm.toString().getBytes(); - cos.write32(realmBytes.length); - cos.write(realmBytes, 0, realmBytes.length); - } + byte[] realmBytes = null; + realmBytes = nameRealm.toString().getBytes(); + cos.write32(realmBytes.length); + cos.write(realmBytes, 0, realmBytes.length); byte[] bytes = null; for (int i = 0; i < nameStrings.length; i++) { bytes = nameStrings[i].getBytes(); @@ -611,31 +632,6 @@ public class PrincipalName } } - /** - * Creates a KRB_NT_SRV_INST name from the supplied - * name components and realm. - * @param primary the primary component of the name - * @param instance the instance component of the name - * @param realm the realm - * @throws KrbException - */ - protected PrincipalName(String primary, String instance, String realm, - int type) - throws KrbException { - - if (type != KRB_NT_SRV_INST) { - throw new KrbException(Krb5.KRB_ERR_GENERIC, "Bad name type"); - } - - String[] nParts = new String[2]; - nParts[0] = primary; - nParts[1] = instance; - - this.nameStrings = nParts; - this.nameRealm = new Realm(realm); - this.nameType = type; - } - /** * Returns the instance component of a name. * In a multi-component name such as a KRB_NT_SRV_INST diff --git a/jdk/src/share/classes/sun/security/krb5/Realm.java b/jdk/src/share/classes/sun/security/krb5/Realm.java index f148f868049..bfb43e757a4 100644 --- a/jdk/src/share/classes/sun/security/krb5/Realm.java +++ b/jdk/src/share/classes/sun/security/krb5/Realm.java @@ -46,24 +46,29 @@ import sun.security.krb5.internal.util.KerberosString; * * Realm ::= GeneralString * + * This class is immutable. */ public class Realm implements Cloneable { - private String realm; + private final String realm; // not null nor empty private static boolean DEBUG = Krb5.DEBUG; - private Realm() { - } - public Realm(String name) throws RealmException { realm = parseRealm(name); } - public Object clone() { - Realm new_realm = new Realm(); - if (realm != null) { - new_realm.realm = new String(realm); + public static Realm getDefault() throws RealmException { + try { + return new Realm(Config.getInstance().getDefaultRealm()); + } catch (RealmException re) { + throw re; + } catch (KrbException ke) { + throw new RealmException(ke); } - return new_realm; + } + + // Immutable class, no need to clone + public Object clone() { + return this; } public boolean equals(Object obj) { @@ -76,21 +81,11 @@ public class Realm implements Cloneable { } Realm that = (Realm)obj; - if (this.realm != null && that.realm != null ) { - return this.realm.equals(that.realm); - } else { - return (this.realm == null && that.realm == null); - } + return this.realm.equals(that.realm); } public int hashCode() { - int result = 17 ; - - if( realm != null ) { - result = 37 * result + realm.hashCode(); - } - - return result; + return realm.hashCode(); } /** @@ -116,6 +111,7 @@ public class Realm implements Cloneable { return realm; } + // Extract realm from a string like dummy@REALM public static String parseRealmAtSeparator(String name) throws RealmException { if (name == null) { @@ -128,8 +124,12 @@ public class Realm implements Cloneable { while (i < temp.length()) { if (temp.charAt(i) == PrincipalName.NAME_REALM_SEPARATOR) { if (i == 0 || temp.charAt(i - 1) != '\\') { - if (i + 1 < temp.length()) + if (i + 1 < temp.length()) { result = temp.substring(i + 1, temp.length()); + } else { + throw new IllegalArgumentException + ("empty realm part not allowed"); + } break; } } @@ -219,7 +219,8 @@ public class Realm implements Cloneable { * @return an instance of Realm. * */ - public static Realm parse(DerInputStream data, byte explicitTag, boolean optional) throws Asn1Exception, IOException, RealmException { + public static Realm parse(DerInputStream data, byte explicitTag, boolean optional) + throws Asn1Exception, IOException, RealmException { if ((optional) && (((byte)data.peekByte() & (byte)0x1F) != explicitTag)) { return null; } diff --git a/jdk/src/share/classes/sun/security/krb5/RealmException.java b/jdk/src/share/classes/sun/security/krb5/RealmException.java index ccd7a230258..13c6caed66c 100644 --- a/jdk/src/share/classes/sun/security/krb5/RealmException.java +++ b/jdk/src/share/classes/sun/security/krb5/RealmException.java @@ -47,4 +47,7 @@ public class RealmException extends KrbException { super(i,s); } + public RealmException(Throwable cause) { + super(cause); + } } diff --git a/jdk/src/share/classes/sun/security/krb5/internal/ASRep.java b/jdk/src/share/classes/sun/security/krb5/internal/ASRep.java index fd4d8cea0d2..063d2cc427c 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/ASRep.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/ASRep.java @@ -42,11 +42,10 @@ public class ASRep extends KDCRep { public ASRep( PAData[] new_pAData, - Realm new_crealm, PrincipalName new_cname, Ticket new_ticket, EncryptedData new_encPart) throws IOException { - super(new_pAData, new_crealm, new_cname, new_ticket, + super(new_pAData, new_cname, new_ticket, new_encPart, Krb5.KRB_AS_REP); } diff --git a/jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java b/jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java index 67f70387a99..622013553e0 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/Authenticator.java @@ -61,7 +61,6 @@ import java.math.BigInteger; public class Authenticator { public int authenticator_vno; - public Realm crealm; public PrincipalName cname; Checksum cksum; //optional public int cusec; @@ -71,7 +70,6 @@ public class Authenticator { public AuthorizationData authorizationData; //optional public Authenticator( - Realm new_crealm, PrincipalName new_cname, Checksum new_cksum, int new_cusec, @@ -80,7 +78,6 @@ public class Authenticator { Integer new_seqNumber, AuthorizationData new_authorizationData) { authenticator_vno = Krb5.AUTHNETICATOR_VNO; - crealm = new_crealm; cname = new_cname; cksum = new_cksum; cusec = new_cusec; @@ -131,8 +128,8 @@ public class Authenticator { if (authenticator_vno != 5) { throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); } - crealm = Realm.parse(der.getData(), (byte) 0x01, false); - cname = PrincipalName.parse(der.getData(), (byte) 0x02, false); + Realm crealm = Realm.parse(der.getData(), (byte) 0x01, false); + cname = PrincipalName.parse(der.getData(), (byte) 0x02, false, crealm); cksum = Checksum.parse(der.getData(), (byte) 0x03, true); subDer = der.getData().getDerValue(); if ((subDer.getTag() & (byte) 0x1F) == 0x04) { @@ -180,7 +177,7 @@ public class Authenticator { DerOutputStream temp = new DerOutputStream(); temp.putInteger(BigInteger.valueOf(authenticator_vno)); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x00), temp.toByteArray())); - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x01), crealm.asn1Encode())); + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x01), cname.getRealm().asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x02), cname.asn1Encode())); if (cksum != null) { v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x03), cksum.asn1Encode())); diff --git a/jdk/src/share/classes/sun/security/krb5/internal/CredentialsUtil.java b/jdk/src/share/classes/sun/security/krb5/internal/CredentialsUtil.java index 3b3dacb30ac..cb059ab22c5 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/CredentialsUtil.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/CredentialsUtil.java @@ -72,23 +72,9 @@ rs. public static Credentials acquireServiceCreds( String service, Credentials ccreds) throws KrbException, IOException { - ServiceName sname = new ServiceName(service); + PrincipalName sname = new PrincipalName(service); String serviceRealm = sname.getRealmString(); String localRealm = ccreds.getClient().getRealmString(); - String defaultRealm = Config.getInstance().getDefaultRealm(); - - if (localRealm == null) { - PrincipalName temp = null; - if ((temp = ccreds.getServer()) != null) - localRealm = temp.getRealmString(); - } - if (localRealm == null) { - localRealm = defaultRealm; - } - if (serviceRealm == null) { - serviceRealm = localRealm; - sname.setRealm(serviceRealm); - } /* if (!localRealm.equalsIgnoreCase(serviceRealm)) { //do cross-realm auth entication @@ -128,13 +114,12 @@ rs. int i = 0, k = 0; Credentials cTgt = null, newTgt = null, theTgt = null; - ServiceName tempService = null; + PrincipalName tempService = null; String realm = null, newTgtRealm = null, theTgtRealm = null; for (cTgt = ccreds, i = 0; i < realms.length;) { - tempService = new ServiceName(PrincipalName.TGS_DEFAULT_SRV_NAME, - serviceRealm, realms[i]); + tempService = PrincipalName.tgsService(serviceRealm, realms[i]); if (DEBUG) { @@ -164,9 +149,7 @@ rs. newTgt == null && k > i; k--) { - tempService = new ServiceName( - PrincipalName.TGS_DEFAULT_SRV_NAME, - realms[k], realms[i]); + tempService = PrincipalName.tgsService(realms[k], realms[i]); if (DEBUG) { System.out.println(">>> Credentials acquireServiceCreds: inner loop: [" + k +"] tempService=" + tempService); @@ -306,7 +289,7 @@ rs. * This method does the real job to request the service credential. */ private static Credentials serviceCreds( - ServiceName service, Credentials ccreds) + PrincipalName service, Credentials ccreds) throws KrbException, IOException { return new KrbTgsReq(ccreds, service).sendAndGetCreds(); } diff --git a/jdk/src/share/classes/sun/security/krb5/internal/EncASRepPart.java b/jdk/src/share/classes/sun/security/krb5/internal/EncASRepPart.java index 7a8f3446704..7e5d037de5d 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/EncASRepPart.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/EncASRepPart.java @@ -46,7 +46,6 @@ public class EncASRepPart extends EncKDCRepPart { KerberosTime new_starttime, KerberosTime new_endtime, KerberosTime new_renewTill, - Realm new_srealm, PrincipalName new_sname, HostAddresses new_caddr) { super( @@ -59,7 +58,6 @@ public class EncASRepPart extends EncKDCRepPart { new_starttime, new_endtime, new_renewTill, - new_srealm, new_sname, new_caddr, Krb5.KRB_ENC_AS_REP_PART diff --git a/jdk/src/share/classes/sun/security/krb5/internal/EncKDCRepPart.java b/jdk/src/share/classes/sun/security/krb5/internal/EncKDCRepPart.java index 244af0e64a6..943869d60b8 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/EncKDCRepPart.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/EncKDCRepPart.java @@ -74,7 +74,6 @@ public class EncKDCRepPart { public KerberosTime starttime; //optional public KerberosTime endtime; public KerberosTime renewTill; //optional - public Realm srealm; public PrincipalName sname; public HostAddresses caddr; //optional public int msgType; //not included in sequence @@ -89,7 +88,6 @@ public class EncKDCRepPart { KerberosTime new_starttime, KerberosTime new_endtime, KerberosTime new_renewTill, - Realm new_srealm, PrincipalName new_sname, HostAddresses new_caddr, int new_msgType) { @@ -102,7 +100,6 @@ public class EncKDCRepPart { starttime = new_starttime; endtime = new_endtime; renewTill = new_renewTill; - srealm = new_srealm; sname = new_sname; caddr = new_caddr; msgType = new_msgType; @@ -158,8 +155,8 @@ public class EncKDCRepPart { starttime = KerberosTime.parse(der.getData(), (byte) 0x06, true); endtime = KerberosTime.parse(der.getData(), (byte) 0x07, false); renewTill = KerberosTime.parse(der.getData(), (byte) 0x08, true); - srealm = Realm.parse(der.getData(), (byte) 0x09, false); - sname = PrincipalName.parse(der.getData(), (byte) 0x0A, false); + Realm srealm = Realm.parse(der.getData(), (byte) 0x09, false); + sname = PrincipalName.parse(der.getData(), (byte) 0x0A, false, srealm); if (der.getData().available() > 0) { caddr = HostAddresses.parse(der.getData(), (byte) 0x0B, true); } @@ -206,7 +203,7 @@ public class EncKDCRepPart { true, (byte) 0x08), renewTill.asn1Encode()); } bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, - true, (byte) 0x09), srealm.asn1Encode()); + true, (byte) 0x09), sname.getRealm().asn1Encode()); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x0A), sname.asn1Encode()); if (caddr != null) { diff --git a/jdk/src/share/classes/sun/security/krb5/internal/EncTGSRepPart.java b/jdk/src/share/classes/sun/security/krb5/internal/EncTGSRepPart.java index 8770bc45a6e..cdca881ebe4 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/EncTGSRepPart.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/EncTGSRepPart.java @@ -45,7 +45,6 @@ public class EncTGSRepPart extends EncKDCRepPart { KerberosTime new_starttime, KerberosTime new_endtime, KerberosTime new_renewTill, - Realm new_srealm, PrincipalName new_sname, HostAddresses new_caddr) { super( @@ -58,7 +57,6 @@ public class EncTGSRepPart extends EncKDCRepPart { new_starttime, new_endtime, new_renewTill, - new_srealm, new_sname, new_caddr, Krb5.KRB_ENC_TGS_REP_PART); diff --git a/jdk/src/share/classes/sun/security/krb5/internal/EncTicketPart.java b/jdk/src/share/classes/sun/security/krb5/internal/EncTicketPart.java index 240e2d1f5b3..3b43f606214 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/EncTicketPart.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/EncTicketPart.java @@ -65,7 +65,6 @@ public class EncTicketPart { public TicketFlags flags; public EncryptionKey key; - public Realm crealm; public PrincipalName cname; public TransitedEncoding transited; public KerberosTime authtime; @@ -78,7 +77,6 @@ public class EncTicketPart { public EncTicketPart( TicketFlags new_flags, EncryptionKey new_key, - Realm new_crealm, PrincipalName new_cname, TransitedEncoding new_transited, KerberosTime new_authtime, @@ -89,7 +87,6 @@ public class EncTicketPart { AuthorizationData new_authorizationData) { flags = new_flags; key = new_key; - crealm = new_crealm; cname = new_cname; transited = new_transited; authtime = new_authtime; @@ -151,8 +148,8 @@ public class EncTicketPart { } flags = TicketFlags.parse(der.getData(), (byte) 0x00, false); key = EncryptionKey.parse(der.getData(), (byte) 0x01, false); - crealm = Realm.parse(der.getData(), (byte) 0x02, false); - cname = PrincipalName.parse(der.getData(), (byte) 0x03, false); + Realm crealm = Realm.parse(der.getData(), (byte) 0x02, false); + cname = PrincipalName.parse(der.getData(), (byte) 0x03, false, crealm); transited = TransitedEncoding.parse(der.getData(), (byte) 0x04, false); authtime = KerberosTime.parse(der.getData(), (byte) 0x05, false); starttime = KerberosTime.parse(der.getData(), (byte) 0x06, true); @@ -186,7 +183,7 @@ public class EncTicketPart { bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x01), key.asn1Encode()); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, - true, (byte) 0x02), crealm.asn1Encode()); + true, (byte) 0x02), cname.getRealm().asn1Encode()); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x03), cname.asn1Encode()); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, diff --git a/jdk/src/share/classes/sun/security/krb5/internal/KDCRep.java b/jdk/src/share/classes/sun/security/krb5/internal/KDCRep.java index 5ff8da2e3aa..5c4ca1e8f0d 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/KDCRep.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/KDCRep.java @@ -61,7 +61,6 @@ import java.math.BigInteger; */ public class KDCRep { - public Realm crealm; public PrincipalName cname; public Ticket ticket; public EncryptedData encPart; @@ -73,7 +72,6 @@ public class KDCRep { public KDCRep( PAData[] new_pAData, - Realm new_crealm, PrincipalName new_cname, Ticket new_ticket, EncryptedData new_encPart, @@ -90,7 +88,6 @@ public class KDCRep { } } } - crealm = new_crealm; cname = new_cname; ticket = new_ticket; encPart = new_encPart; @@ -174,8 +171,8 @@ public class KDCRep { } else { pAData = null; } - crealm = Realm.parse(der.getData(), (byte) 0x03, false); - cname = PrincipalName.parse(der.getData(), (byte) 0x04, false); + Realm crealm = Realm.parse(der.getData(), (byte) 0x03, false); + cname = PrincipalName.parse(der.getData(), (byte) 0x04, false, crealm); ticket = Ticket.parse(der.getData(), (byte) 0x05, false); encPart = EncryptedData.parse(der.getData(), (byte) 0x06, false); if (der.getData().available() > 0) { @@ -212,7 +209,7 @@ public class KDCRep { true, (byte) 0x02), temp); } bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, - true, (byte) 0x03), crealm.asn1Encode()); + true, (byte) 0x03), cname.getRealm().asn1Encode()); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte) 0x04), cname.asn1Encode()); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, diff --git a/jdk/src/share/classes/sun/security/krb5/internal/KDCReqBody.java b/jdk/src/share/classes/sun/security/krb5/internal/KDCReqBody.java index a23d452885d..83178b6cc4c 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/KDCReqBody.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/KDCReqBody.java @@ -72,7 +72,6 @@ import java.math.BigInteger; public class KDCReqBody { public KDCOptions kdcOptions; public PrincipalName cname; //optional in ASReq only - public Realm crealm; public PrincipalName sname; //optional public KerberosTime from; //optional public KerberosTime till; @@ -87,7 +86,6 @@ public class KDCReqBody { public KDCReqBody( KDCOptions new_kdcOptions, PrincipalName new_cname, //optional in ASReq only - Realm new_crealm, PrincipalName new_sname, //optional KerberosTime new_from, //optional KerberosTime new_till, @@ -100,7 +98,6 @@ public class KDCReqBody { ) throws IOException { kdcOptions = new_kdcOptions; cname = new_cname; - crealm = new_crealm; sname = new_sname; from = new_from; till = new_till; @@ -142,12 +139,22 @@ public class KDCReqBody { throw new Asn1Exception(Krb5.ASN1_BAD_ID); } kdcOptions = KDCOptions.parse(encoding.getData(), (byte)0x00, false); - cname = PrincipalName.parse(encoding.getData(), (byte)0x01, true); + + // cname only appears in AS-REQ and it shares the realm field with + // sname. This is the only place where realm comes after the name. + // We first give cname a fake realm and reassign it the correct + // realm after the realm field is read. + cname = PrincipalName.parse(encoding.getData(), (byte)0x01, true, + new Realm("PLACEHOLDER")); if ((msgType != Krb5.KRB_AS_REQ) && (cname != null)) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); } - crealm = Realm.parse(encoding.getData(), (byte)0x02, false); - sname = PrincipalName.parse(encoding.getData(), (byte)0x03, true); + Realm realm = Realm.parse(encoding.getData(), (byte)0x02, false); + if (cname != null) { + cname = new PrincipalName( + cname.getNameType(), cname.getNameStrings(), realm); + } + sname = PrincipalName.parse(encoding.getData(), (byte)0x03, true, realm); from = KerberosTime.parse(encoding.getData(), (byte)0x04, true); till = KerberosTime.parse(encoding.getData(), (byte)0x05, false); rtime = KerberosTime.parse(encoding.getData(), (byte)0x06, true); @@ -223,9 +230,11 @@ public class KDCReqBody { v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), cname.asn1Encode())); } } - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), crealm.asn1Encode())); if (sname != null) { + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), sname.getRealm().asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), sname.asn1Encode())); + } else if (cname != null) { + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), cname.getRealm().asn1Encode())); } if (from != null) { v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x04), from.asn1Encode())); diff --git a/jdk/src/share/classes/sun/security/krb5/internal/KRBError.java b/jdk/src/share/classes/sun/security/krb5/internal/KRBError.java index a8b117ebc67..f22719a2f88 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/KRBError.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/KRBError.java @@ -90,9 +90,7 @@ public class KRBError implements java.io.Serializable { private KerberosTime sTime; private Integer suSec; private int errorCode; - private Realm crealm; //optional private PrincipalName cname; //optional - private Realm realm; private PrincipalName sname; private String eText; //optional private byte[] eData; //optional @@ -128,9 +126,7 @@ public class KRBError implements java.io.Serializable { KerberosTime new_sTime, Integer new_suSec, int new_errorCode, - Realm new_crealm, PrincipalName new_cname, - Realm new_realm, PrincipalName new_sname, String new_eText, byte[] new_eData @@ -142,9 +138,7 @@ public class KRBError implements java.io.Serializable { sTime = new_sTime; suSec = new_suSec; errorCode = new_errorCode; - crealm = new_crealm; cname = new_cname; - realm = new_realm; sname = new_sname; eText = new_eText; eData = new_eData; @@ -159,9 +153,7 @@ public class KRBError implements java.io.Serializable { KerberosTime new_sTime, Integer new_suSec, int new_errorCode, - Realm new_crealm, PrincipalName new_cname, - Realm new_realm, PrincipalName new_sname, String new_eText, byte[] new_eData, @@ -174,9 +166,7 @@ public class KRBError implements java.io.Serializable { sTime = new_sTime; suSec = new_suSec; errorCode = new_errorCode; - crealm = new_crealm; cname = new_cname; - realm = new_realm; sname = new_sname; eText = new_eText; eData = new_eData; @@ -359,10 +349,10 @@ public class KRBError implements java.io.Serializable { errorCode = subDer.getData().getBigInteger().intValue(); } else throw new Asn1Exception(Krb5.ASN1_BAD_ID); - crealm = Realm.parse(der.getData(), (byte)0x07, true); - cname = PrincipalName.parse(der.getData(), (byte)0x08, true); - realm = Realm.parse(der.getData(), (byte)0x09, false); - sname = PrincipalName.parse(der.getData(), (byte)0x0A, false); + Realm crealm = Realm.parse(der.getData(), (byte)0x07, true); + cname = PrincipalName.parse(der.getData(), (byte)0x08, true, crealm); + Realm realm = Realm.parse(der.getData(), (byte)0x09, false); + sname = PrincipalName.parse(der.getData(), (byte)0x0A, false, realm); eText = null; eData = null; eCksum = null; @@ -403,15 +393,9 @@ public class KRBError implements java.io.Serializable { System.out.println("\t suSec is " + suSec); System.out.println("\t error code is " + errorCode); System.out.println("\t error Message is " + Krb5.getErrorMessage(errorCode)); - if (crealm != null) { - System.out.println("\t crealm is " + crealm.toString()); - } if (cname != null) { System.out.println("\t cname is " + cname.toString()); } - if (realm != null) { - System.out.println("\t realm is " + realm.toString()); - } if (sname != null) { System.out.println("\t sname is " + sname.toString()); } @@ -458,14 +442,12 @@ public class KRBError implements java.io.Serializable { temp.putInteger(BigInteger.valueOf(errorCode)); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), temp); - if (crealm != null) { - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), crealm.asn1Encode()); - } if (cname != null) { + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), cname.getRealm().asn1Encode()); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), cname.asn1Encode()); } - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x09), realm.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x09), sname.getRealm().asn1Encode()); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x0A), sname.asn1Encode()); if (eText != null) { @@ -506,9 +488,7 @@ public class KRBError implements java.io.Serializable { isEqual(sTime, other.sTime) && isEqual(suSec, other.suSec) && errorCode == other.errorCode && - isEqual(crealm, other.crealm) && isEqual(cname, other.cname) && - isEqual(realm, other.realm) && isEqual(sname, other.sname) && isEqual(eText, other.eText) && java.util.Arrays.equals(eData, other.eData) && @@ -528,9 +508,7 @@ public class KRBError implements java.io.Serializable { if (sTime != null) result = 37 * result + sTime.hashCode(); if (suSec != null) result = 37 * result + suSec.hashCode(); result = 37 * result + errorCode; - if (crealm != null) result = 37 * result + crealm.hashCode(); if (cname != null) result = 37 * result + cname.hashCode(); - if (realm != null) result = 37 * result + realm.hashCode(); if (sname != null) result = 37 * result + sname.hashCode(); if (eText != null) result = 37 * result + eText.hashCode(); result = 37 * result + Arrays.hashCode(eData); diff --git a/jdk/src/share/classes/sun/security/krb5/internal/KrbCredInfo.java b/jdk/src/share/classes/sun/security/krb5/internal/KrbCredInfo.java index 63ebe03d3c6..4acf451cc6c 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/KrbCredInfo.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/KrbCredInfo.java @@ -63,14 +63,12 @@ import java.io.IOException; public class KrbCredInfo { public EncryptionKey key; - public Realm prealm; //optional public PrincipalName pname; //optional public TicketFlags flags; //optional public KerberosTime authtime; //optional public KerberosTime starttime; //optional public KerberosTime endtime; //optional public KerberosTime renewTill; //optional - public Realm srealm; //optional public PrincipalName sname; //optional public HostAddresses caddr; //optional @@ -79,26 +77,22 @@ public class KrbCredInfo { public KrbCredInfo( EncryptionKey new_key, - Realm new_prealm, PrincipalName new_pname, TicketFlags new_flags, KerberosTime new_authtime, KerberosTime new_starttime, KerberosTime new_endtime, KerberosTime new_renewTill, - Realm new_srealm, PrincipalName new_sname, HostAddresses new_caddr ) { key = new_key; - prealm = new_prealm; pname = new_pname; flags = new_flags; authtime = new_authtime; starttime = new_starttime; endtime = new_endtime; renewTill = new_renewTill; - srealm = new_srealm; sname = new_sname; caddr = new_caddr; } @@ -115,21 +109,20 @@ public class KrbCredInfo { if (encoding.getTag() != DerValue.tag_Sequence) { throw new Asn1Exception(Krb5.ASN1_BAD_ID); } - prealm = null; pname = null; flags = null; authtime = null; starttime = null; endtime = null; renewTill = null; - srealm = null; sname = null; caddr = null; key = EncryptionKey.parse(encoding.getData(), (byte)0x00, false); + Realm prealm = null, srealm = null; if (encoding.getData().available() > 0) prealm = Realm.parse(encoding.getData(), (byte)0x01, true); if (encoding.getData().available() > 0) - pname = PrincipalName.parse(encoding.getData(), (byte)0x02, true); + pname = PrincipalName.parse(encoding.getData(), (byte)0x02, true, prealm); if (encoding.getData().available() > 0) flags = TicketFlags.parse(encoding.getData(), (byte)0x03, true); if (encoding.getData().available() > 0) @@ -143,7 +136,7 @@ public class KrbCredInfo { if (encoding.getData().available() > 0) srealm = Realm.parse(encoding.getData(), (byte)0x08, true); if (encoding.getData().available() > 0) - sname = PrincipalName.parse(encoding.getData(), (byte)0x09, true); + sname = PrincipalName.parse(encoding.getData(), (byte)0x09, true, srealm); if (encoding.getData().available() > 0) caddr = HostAddresses.parse(encoding.getData(), (byte)0x0A, true); if (encoding.getData().available() > 0) @@ -159,10 +152,10 @@ public class KrbCredInfo { public byte[] asn1Encode() throws Asn1Exception, IOException { Vector v = new Vector<>(); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), key.asn1Encode())); - if (prealm != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), prealm.asn1Encode())); - if (pname != null) + if (pname != null) { + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), pname.getRealm().asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), pname.asn1Encode())); + } if (flags != null) v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), flags.asn1Encode())); if (authtime != null) @@ -173,10 +166,10 @@ public class KrbCredInfo { v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x06), endtime.asn1Encode())); if (renewTill != null) v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x07), renewTill.asn1Encode())); - if (srealm != null) - v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), srealm.asn1Encode())); - if (sname != null) + if (sname != null) { + v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x08), sname.getRealm().asn1Encode())); v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x09), sname.asn1Encode())); + } if (caddr != null) v.addElement(new DerValue(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x0A), caddr.asn1Encode())); DerValue der[] = new DerValue[v.size()]; @@ -190,8 +183,6 @@ public class KrbCredInfo { KrbCredInfo kcred = new KrbCredInfo(); kcred.key = (EncryptionKey)key.clone(); // optional fields - if (prealm != null) - kcred.prealm = (Realm)prealm.clone(); if (pname != null) kcred.pname = (PrincipalName)pname.clone(); if (flags != null) @@ -204,8 +195,6 @@ public class KrbCredInfo { kcred.endtime = (KerberosTime)endtime.clone(); if (renewTill != null) kcred.renewTill = (KerberosTime)renewTill.clone(); - if (srealm != null) - kcred.srealm = (Realm)srealm.clone(); if (sname != null) kcred.sname = (PrincipalName)sname.clone(); if (caddr != null) diff --git a/jdk/src/share/classes/sun/security/krb5/internal/TGSRep.java b/jdk/src/share/classes/sun/security/krb5/internal/TGSRep.java index 62bb06ed15c..3defc39ad95 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/TGSRep.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/TGSRep.java @@ -42,12 +42,11 @@ public class TGSRep extends KDCRep { public TGSRep( PAData[] new_pAData, - Realm new_crealm, PrincipalName new_cname, Ticket new_ticket, EncryptedData new_encPart ) throws IOException { - super(new_pAData, new_crealm, new_cname, new_ticket, + super(new_pAData, new_cname, new_ticket, new_encPart, Krb5.KRB_TGS_REP); } diff --git a/jdk/src/share/classes/sun/security/krb5/internal/Ticket.java b/jdk/src/share/classes/sun/security/krb5/internal/Ticket.java index cadb334d0ae..0f1c3d9af15 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/Ticket.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/Ticket.java @@ -60,7 +60,6 @@ import java.math.BigInteger; public class Ticket implements Cloneable { public int tkt_vno; - public Realm realm; public PrincipalName sname; public EncryptedData encPart; @@ -69,7 +68,6 @@ public class Ticket implements Cloneable { public Object clone() { Ticket new_ticket = new Ticket(); - new_ticket.realm = (Realm)realm.clone(); new_ticket.sname = (PrincipalName)sname.clone(); new_ticket.encPart = (EncryptedData)encPart.clone(); new_ticket.tkt_vno = tkt_vno; @@ -77,12 +75,10 @@ public class Ticket implements Cloneable { } public Ticket( - Realm new_realm, PrincipalName new_sname, EncryptedData new_encPart ) { tkt_vno = Krb5.TICKET_VNO; - realm = new_realm; sname = new_sname; encPart = new_encPart; } @@ -123,8 +119,8 @@ public class Ticket implements Cloneable { tkt_vno = subDer.getData().getBigInteger().intValue(); if (tkt_vno != Krb5.TICKET_VNO) throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); - realm = Realm.parse(der.getData(), (byte)0x01, false); - sname = PrincipalName.parse(der.getData(), (byte)0x02, false); + Realm srealm = Realm.parse(der.getData(), (byte)0x01, false); + sname = PrincipalName.parse(der.getData(), (byte)0x02, false, srealm); encPart = EncryptedData.parse(der.getData(), (byte)0x03, false); if (der.getData().available() > 0) throw new Asn1Exception(Krb5.ASN1_BAD_ID); @@ -142,7 +138,7 @@ public class Ticket implements Cloneable { DerValue der[] = new DerValue[4]; temp.putInteger(BigInteger.valueOf(tkt_vno)); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x00), temp); - bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), realm.asn1Encode()); + bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x01), sname.getRealm().asn1Encode()); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x02), sname.asn1Encode()); bytes.write(DerValue.createTag(DerValue.TAG_CONTEXT, true, (byte)0x03), encPart.asn1Encode()); temp = new DerOutputStream(); diff --git a/jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java b/jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java index ef7088f371b..2f35f894cf2 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/ccache/CCacheInputStream.java @@ -114,7 +114,6 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC // made public for KinitOptions to call directly public PrincipalName readPrincipal(int version) throws IOException, RealmException { int type, length, namelength, kret; - PrincipalName p; String[] pname = null; String realm; /* Read principal type */ @@ -144,11 +143,13 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC realm = result[0]; pname = new String[length]; System.arraycopy(result, 1, pname, 0, length); - p = new PrincipalName(pname, type); - p.setRealm(realm); + return new PrincipalName(type, pname, new Realm(realm)); + } + try { + return new PrincipalName(result, type); + } catch (RealmException re) { + return null; } - else p = new PrincipalName(result, type); - return p; } /* @@ -342,10 +343,10 @@ public class CCacheInputStream extends KrbDataInputStream implements FileCCacheC Credentials readCred(int version) throws IOException,RealmException, KrbApErrException, Asn1Exception { PrincipalName cpname = readPrincipal(version); if (DEBUG) - System.out.println(">>>DEBUG client principal is " + cpname.toString()); + System.out.println(">>>DEBUG client principal is " + cpname); PrincipalName spname = readPrincipal(version); if (DEBUG) - System.out.println(">>>DEBUG server principal is " + spname.toString()); + System.out.println(">>>DEBUG server principal is " + spname); EncryptionKey key = readKey(version); if (DEBUG) System.out.println(">>>DEBUG key type: " + key.getEType()); diff --git a/jdk/src/share/classes/sun/security/krb5/internal/ccache/Credentials.java b/jdk/src/share/classes/sun/security/krb5/internal/ccache/Credentials.java index e040788c68e..f27a1588ec3 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/ccache/Credentials.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/ccache/Credentials.java @@ -36,9 +36,7 @@ import sun.security.krb5.internal.*; public class Credentials { PrincipalName cname; - Realm crealm; PrincipalName sname; - Realm srealm; EncryptionKey key; KerberosTime authtime; KerberosTime starttime;//optional @@ -67,15 +65,7 @@ public class Credentials { Ticket new_ticket, Ticket new_secondTicket) { cname = (PrincipalName) new_cname.clone(); - if (new_cname.getRealm() != null) { - crealm = (Realm) new_cname.getRealm().clone(); - } - sname = (PrincipalName) new_sname.clone(); - if (new_sname.getRealm() != null) { - srealm = (Realm) new_sname.getRealm().clone(); - } - key = (EncryptionKey) new_key.clone(); authtime = (KerberosTime) new_authtime.clone(); @@ -110,7 +100,6 @@ public class Credentials { { return; } - crealm = (Realm) kdcRep.crealm.clone(); cname = (PrincipalName) kdcRep.cname.clone(); ticket = (Ticket) kdcRep.ticket.clone(); key = (EncryptionKey) kdcRep.encKDCRepPart.key.clone(); @@ -123,7 +112,6 @@ public class Credentials { if (kdcRep.encKDCRepPart.renewTill != null) { renewTill = (KerberosTime) kdcRep.encKDCRepPart.renewTill.clone(); } - srealm = (Realm) kdcRep.encKDCRepPart.srealm.clone(); sname = (PrincipalName) kdcRep.encKDCRepPart.sname.clone(); caddr = (HostAddresses) kdcRep.encKDCRepPart.caddr.clone(); secondTicket = (Ticket) new_secondTicket.clone(); @@ -138,17 +126,7 @@ public class Credentials { public Credentials(KDCRep kdcRep, Ticket new_ticket) { sname = (PrincipalName) kdcRep.encKDCRepPart.sname.clone(); - srealm = (Realm) kdcRep.encKDCRepPart.srealm.clone(); - try { - sname.setRealm(srealm); - } catch (RealmException e) { - } cname = (PrincipalName) kdcRep.cname.clone(); - crealm = (Realm) kdcRep.crealm.clone(); - try { - cname.setRealm(crealm); - } catch (RealmException e) { - } key = (EncryptionKey) kdcRep.encKDCRepPart.key.clone(); authtime = (KerberosTime) kdcRep.encKDCRepPart.authtime.clone(); if (kdcRep.encKDCRepPart.starttime != null) { @@ -202,9 +180,6 @@ public class Credentials { } public PrincipalName getServicePrincipal() throws RealmException { - if (sname.getRealm() == null) { - sname.setRealm(srealm); - } return sname; } diff --git a/jdk/src/share/classes/sun/security/krb5/internal/ccache/CredentialsCache.java b/jdk/src/share/classes/sun/security/krb5/internal/ccache/CredentialsCache.java index 3d0511071b3..8c61ed395c0 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/ccache/CredentialsCache.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/ccache/CredentialsCache.java @@ -120,6 +120,6 @@ public abstract class CredentialsCache { public abstract void save() throws IOException, KrbException; public abstract Credentials[] getCredsList(); public abstract Credentials getDefaultCreds(); - public abstract Credentials getCreds(PrincipalName sname, Realm srealm) ; - public abstract Credentials getCreds(LoginOptions options, PrincipalName sname, Realm srealm) ; + public abstract Credentials getCreds(PrincipalName sname); + public abstract Credentials getCreds(LoginOptions options, PrincipalName sname); } diff --git a/jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java b/jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java index 803d0ae1436..c985887a1ef 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java @@ -59,7 +59,6 @@ public class FileCredentialsCache extends CredentialsCache public int version; public Tag tag; // optional public PrincipalName primaryPrincipal; - public Realm primaryRealm; private Vector credentialsList; private static String dir; private static boolean DEBUG = Krb5.DEBUG; @@ -79,7 +78,6 @@ public class FileCredentialsCache extends CredentialsCache } if (principal != null) { fcc.primaryPrincipal = principal; - fcc.primaryRealm = principal.getRealm(); } fcc.load(cacheName); return fcc; @@ -153,7 +151,6 @@ public class FileCredentialsCache extends CredentialsCache synchronized void init(PrincipalName principal, String name) throws IOException, KrbException { primaryPrincipal = principal; - primaryRealm = principal.getRealm(); CCacheOutputStream cos = new CCacheOutputStream(new FileOutputStream(name)); version = KRB5_FCC_FVNO_3; @@ -183,7 +180,6 @@ public class FileCredentialsCache extends CredentialsCache } } else primaryPrincipal = p; - primaryRealm = primaryPrincipal.getRealm(); credentialsList = new Vector (); while (cis.available() > 0) { Credentials cred = cis.readCred(version); @@ -291,18 +287,16 @@ public class FileCredentialsCache extends CredentialsCache } - public Credentials getCreds(LoginOptions options, - PrincipalName sname, Realm srealm) { + public Credentials getCreds(LoginOptions options, PrincipalName sname) { if (options == null) { - return getCreds(sname, srealm); + return getCreds(sname); } else { Credentials[] list = getCredsList(); if (list == null) { return null; } else { for (int i = 0; i < list.length; i++) { - if (sname.match(list[i].sname) && - (srealm.toString().equals(list[i].srealm.toString()))) { + if (sname.match(list[i].sname)) { if (list[i].flags.match(options)) { return list[i]; } @@ -317,16 +311,14 @@ public class FileCredentialsCache extends CredentialsCache /** * Gets a credentials for a specified service. * @param sname service principal name. - * @param srealm the realm that the service belongs to. */ - public Credentials getCreds(PrincipalName sname, Realm srealm) { + public Credentials getCreds(PrincipalName sname) { Credentials[] list = getCredsList(); if (list == null) { return null; } else { for (int i = 0; i < list.length; i++) { - if (sname.match(list[i].sname) && - (srealm.toString().equals(list[i].srealm.toString()))) { + if (sname.match(list[i].sname)) { return list[i]; } } @@ -343,7 +335,7 @@ public class FileCredentialsCache extends CredentialsCache if (list[i].sname.toString().startsWith("krbtgt")) { String[] nameStrings = list[i].sname.getNameStrings(); // find the TGT for the current realm krbtgt/realm@realm - if (nameStrings[1].equals(list[i].srealm.toString())) { + if (nameStrings[1].equals(list[i].sname.getRealm().toString())) { return list[i]; } } diff --git a/jdk/src/share/classes/sun/security/krb5/internal/ccache/MemoryCredentialsCache.java b/jdk/src/share/classes/sun/security/krb5/internal/ccache/MemoryCredentialsCache.java index c01260a61a4..2f1f37926b1 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/ccache/MemoryCredentialsCache.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/ccache/MemoryCredentialsCache.java @@ -64,7 +64,7 @@ public abstract class MemoryCredentialsCache extends CredentialsCache { public abstract Credentials[] getCredsList(); - public abstract Credentials getCreds(PrincipalName sname, Realm srealm) ; + public abstract Credentials getCreds(PrincipalName sname) ; public abstract PrincipalName getPrimaryPrincipal(); diff --git a/jdk/src/share/classes/sun/security/krb5/internal/ktab/KeyTabInputStream.java b/jdk/src/share/classes/sun/security/krb5/internal/ktab/KeyTabInputStream.java index a0bbd1eb641..5f42242496f 100644 --- a/jdk/src/share/classes/sun/security/krb5/internal/ktab/KeyTabInputStream.java +++ b/jdk/src/share/classes/sun/security/krb5/internal/ktab/KeyTabInputStream.java @@ -83,8 +83,7 @@ public class KeyTabInputStream extends KrbDataInputStream implements KeyTabConst } int nameType = read(4); index -= 4; - PrincipalName service = new PrincipalName(nameParts, nameType); - service.setRealm(realm); + PrincipalName service = new PrincipalName(nameType, nameParts, realm); KerberosTime timeStamp = readTimeStamp(); int keyVersion = read() & 0xff; diff --git a/jdk/src/share/classes/sun/security/pkcs/PKCS7.java b/jdk/src/share/classes/sun/security/pkcs/PKCS7.java index 657842c0017..523c5d39f8d 100644 --- a/jdk/src/share/classes/sun/security/pkcs/PKCS7.java +++ b/jdk/src/share/classes/sun/security/pkcs/PKCS7.java @@ -882,7 +882,7 @@ public class PKCS7 { PKCS7 tsToken = tsReply.getToken(); TimestampToken tst = tsReply.getTimestampToken(); - if (!tst.getHashAlgorithm().getName().equals("SHA")) { + if (!tst.getHashAlgorithm().getName().equals("SHA-1")) { throw new IOException("Digest algorithm not SHA-1 in " + "timestamp token"); } diff --git a/jdk/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java b/jdk/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java index e4ba4252590..5939a482df7 100644 --- a/jdk/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java +++ b/jdk/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java @@ -1298,11 +1298,9 @@ public final class PKCS12KeyStore extends KeyStoreSpi { try { String algName = macData.getDigestAlgName().toUpperCase(Locale.ENGLISH); - if (algName.equals("SHA") || - algName.equals("SHA1") || - algName.equals("SHA-1")) { - algName = "SHA1"; - } + + // Change SHA-1 to SHA1 + algName = algName.replace("-", ""); // generate MAC (MAC key is created within JCE) Mac m = Mac.getInstance("HmacPBE" + algName); diff --git a/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java b/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java index b9f22993198..06d396a6b7b 100644 --- a/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java +++ b/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java @@ -1576,11 +1576,9 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl { Throwable cachedThrowable = null; try { switch (state) { - /* - * java.net code sometimes closes sockets "early", when - * we can't actually do I/O on them. - */ case cs_START: + // unconnected socket or handshaking has not been initialized + closeSocket(selfInitiated); break; /* diff --git a/jdk/src/share/classes/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java b/jdk/src/share/classes/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java index 7e220bc06eb..cde473fcf1d 100644 --- a/jdk/src/share/classes/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java +++ b/jdk/src/share/classes/sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.java @@ -163,7 +163,7 @@ public final class KerberosClientKeyExchangeImpl EncryptedData encPart = t.encPart; PrincipalName ticketSname = t.sname; - Realm ticketRealm = t.realm; + Realm ticketRealm = t.sname.getRealm(); String serverPrincipal = serverKeys[0].getPrincipal().getName(); @@ -175,8 +175,7 @@ public final class KerberosClientKeyExchangeImpl */ // Check that ticket Sname matches serverPrincipal - String ticketPrinc = ticketSname.toString().concat("@" + - ticketRealm.toString()); + String ticketPrinc = ticketSname.toString(); if (!ticketPrinc.equals(serverPrincipal)) { if (debug != null && Debug.isOn("handshake")) System.out.println("Service principal in Ticket does not" @@ -224,7 +223,6 @@ public final class KerberosClientKeyExchangeImpl if (debug != null && Debug.isOn("handshake")) { System.out.println("server principal: " + serverPrincipal); - System.out.println("realm: " + encTicketPart.crealm.toString()); System.out.println("cname: " + encTicketPart.cname.toString()); } } catch (IOException e) { diff --git a/jdk/src/share/classes/sun/security/x509/AlgorithmId.java b/jdk/src/share/classes/sun/security/x509/AlgorithmId.java index 0504707fa8a..d4ca7959970 100644 --- a/jdk/src/share/classes/sun/security/x509/AlgorithmId.java +++ b/jdk/src/share/classes/sun/security/x509/AlgorithmId.java @@ -242,10 +242,7 @@ public class AlgorithmId implements Serializable, DerEncoder { AlgorithmId paramsId = AlgorithmId.parse(new DerValue(getEncodedParams())); String paramsName = paramsId.getName(); - if (paramsName.equals("SHA")) { - paramsName = "SHA1"; - } - algName = paramsName + "withECDSA"; + algName = makeSigAlg(paramsName, "EC"); } catch (IOException e) { // ignore } @@ -876,11 +873,11 @@ public class AlgorithmId implements Serializable, DerEncoder { nameTable = new HashMap(); nameTable.put(MD5_oid, "MD5"); nameTable.put(MD2_oid, "MD2"); - nameTable.put(SHA_oid, "SHA"); - nameTable.put(SHA224_oid, "SHA224"); - nameTable.put(SHA256_oid, "SHA256"); - nameTable.put(SHA384_oid, "SHA384"); - nameTable.put(SHA512_oid, "SHA512"); + nameTable.put(SHA_oid, "SHA-1"); + nameTable.put(SHA224_oid, "SHA-224"); + nameTable.put(SHA256_oid, "SHA-256"); + nameTable.put(SHA384_oid, "SHA-384"); + nameTable.put(SHA512_oid, "SHA-512"); nameTable.put(RSAEncryption_oid, "RSA"); nameTable.put(RSA_oid, "RSA"); nameTable.put(DH_oid, "Diffie-Hellman"); @@ -917,11 +914,8 @@ public class AlgorithmId implements Serializable, DerEncoder { * name and a encryption algorithm name. */ public static String makeSigAlg(String digAlg, String encAlg) { - digAlg = digAlg.replace("-", "").toUpperCase(Locale.ENGLISH); - if (digAlg.equalsIgnoreCase("SHA")) digAlg = "SHA1"; - - encAlg = encAlg.toUpperCase(Locale.ENGLISH); - if (encAlg.equals("EC")) encAlg = "ECDSA"; + digAlg = digAlg.replace("-", ""); + if (encAlg.equalsIgnoreCase("EC")) encAlg = "ECDSA"; return digAlg + "with" + encAlg; } diff --git a/jdk/src/share/lib/security/java.security b/jdk/src/share/lib/security/java.security index 52f3067408d..e8ca7bd7eea 100644 --- a/jdk/src/share/lib/security/java.security +++ b/jdk/src/share/lib/security/java.security @@ -1,6 +1,28 @@ # # This is the "master security properties file". # +# An alternate java.security properties file may be specified +# from the command line via the system property +# +# -Djava.security.properties= +# +# This properties file appends to the master security properties file. +# If both properties files specify values for the same key, the value +# from the command-line properties file is selected, as it is the last +# one loaded. +# +# Also, if you specify +# +# -Djava.security.properties== (2 equals), +# +# then that properties file completely overrides the master security +# properties file. +# +# To disable the ability to specify an additional properties file from +# the command line, set the key security.overridePropertiesFile +# to false in the master security properties file. It is set to true +# by default. + # In this file, various security properties are set for use by # java.security classes. This is where users can statically register # Cryptography Package Providers ("providers" for short). The term diff --git a/jdk/src/share/lib/security/java.security-macosx b/jdk/src/share/lib/security/java.security-macosx index 6c16c2ca0d6..1c04236e5d6 100644 --- a/jdk/src/share/lib/security/java.security-macosx +++ b/jdk/src/share/lib/security/java.security-macosx @@ -1,6 +1,28 @@ # # This is the "master security properties file". # +# An alternate java.security properties file may be specified +# from the command line via the system property +# +# -Djava.security.properties= +# +# This properties file appends to the master security properties file. +# If both properties files specify values for the same key, the value +# from the command-line properties file is selected, as it is the last +# one loaded. +# +# Also, if you specify +# +# -Djava.security.properties== (2 equals), +# +# then that properties file completely overrides the master security +# properties file. +# +# To disable the ability to specify an additional properties file from +# the command line, set the key security.overridePropertiesFile +# to false in the master security properties file. It is set to true +# by default. + # In this file, various security properties are set for use by # java.security classes. This is where users can statically register # Cryptography Package Providers ("providers" for short). The term diff --git a/jdk/src/share/lib/security/java.security-solaris b/jdk/src/share/lib/security/java.security-solaris index 1191aff8403..87a6f1ea5b4 100644 --- a/jdk/src/share/lib/security/java.security-solaris +++ b/jdk/src/share/lib/security/java.security-solaris @@ -1,6 +1,28 @@ # # This is the "master security properties file". # +# An alternate java.security properties file may be specified +# from the command line via the system property +# +# -Djava.security.properties= +# +# This properties file appends to the master security properties file. +# If both properties files specify values for the same key, the value +# from the command-line properties file is selected, as it is the last +# one loaded. +# +# Also, if you specify +# +# -Djava.security.properties== (2 equals), +# +# then that properties file completely overrides the master security +# properties file. +# +# To disable the ability to specify an additional properties file from +# the command line, set the key security.overridePropertiesFile +# to false in the master security properties file. It is set to true +# by default. + # In this file, various security properties are set for use by # java.security classes. This is where users can statically register # Cryptography Package Providers ("providers" for short). The term diff --git a/jdk/src/share/lib/security/java.security-windows b/jdk/src/share/lib/security/java.security-windows index 3793e79be29..e7c36d8c470 100644 --- a/jdk/src/share/lib/security/java.security-windows +++ b/jdk/src/share/lib/security/java.security-windows @@ -1,6 +1,28 @@ # # This is the "master security properties file". # +# An alternate java.security properties file may be specified +# from the command line via the system property +# +# -Djava.security.properties= +# +# This properties file appends to the master security properties file. +# If both properties files specify values for the same key, the value +# from the command-line properties file is selected, as it is the last +# one loaded. +# +# Also, if you specify +# +# -Djava.security.properties== (2 equals), +# +# then that properties file completely overrides the master security +# properties file. +# +# To disable the ability to specify an additional properties file from +# the command line, set the key security.overridePropertiesFile +# to false in the master security properties file. It is set to true +# by default. + # In this file, various security properties are set for use by # java.security classes. This is where users can statically register # Cryptography Package Providers ("providers" for short). The term diff --git a/jdk/src/share/native/java/io/io_util.h b/jdk/src/share/native/java/io/io_util.h index fd7862a718b..31088a9467d 100644 --- a/jdk/src/share/native/java/io/io_util.h +++ b/jdk/src/share/native/java/io/io_util.h @@ -25,9 +25,6 @@ #include "jni.h" #include "jni_util.h" -#ifdef MACOSX -char* convertToNFDIfNeeded(const char *origPath, char *buf, size_t bufsize); -#endif extern jfieldID IO_fd_fdID; extern jfieldID IO_handle_fdID; @@ -59,7 +56,6 @@ void fileOpen(JNIEnv *env, jobject this, jstring path, jfieldID fid, int flags); void throwFileNotFoundException(JNIEnv *env, jstring path); - /* * Macros for managing platform strings. The typical usage pattern is: * @@ -88,35 +84,6 @@ void throwFileNotFoundException(JNIEnv *env, jstring path); * declares a unique variable. */ -#ifdef MACOSX - -#define WITH_PLATFORM_STRING(env, strexp, var) \ - if (1) { \ - const char *var; \ - jstring _##var##str = (strexp); \ - if (_##var##str == NULL) { \ - JNU_ThrowNullPointerException((env), NULL); \ - goto _##var##end; \ - } \ - const char *temp_var = JNU_GetStringPlatformChars((env), _##var##str, NULL); \ - if (temp_var == NULL) goto _##var##end; \ - char buf[MAXPATHLEN]; \ - var = convertToNFDIfNeeded(temp_var, buf, sizeof(buf)); - -#define WITH_FIELD_PLATFORM_STRING(env, object, id, var) \ - WITH_PLATFORM_STRING(env, \ - ((object == NULL) \ - ? NULL \ - : (*(env))->GetObjectField((env), (object), (id))), \ - var) - -#define END_PLATFORM_STRING(env, var) \ - JNU_ReleaseStringPlatformChars(env, _##var##str, temp_var); \ - _##var##end: ; \ - } else ((void)NULL) - -#else - #define WITH_PLATFORM_STRING(env, strexp, var) \ if (1) { \ const char *var; \ @@ -140,8 +107,6 @@ void throwFileNotFoundException(JNIEnv *env, jstring path); _##var##end: ; \ } else ((void)NULL) -#endif - /* Macros for transforming Java Strings into native Unicode strings. * Works analogously to WITH_PLATFORM_STRING. diff --git a/jdk/src/share/native/sun/awt/image/cvutils/img_globals.c b/jdk/src/share/native/sun/awt/image/cvutils/img_globals.c index 7183f372902..e7ecd3f49c0 100644 --- a/jdk/src/share/native/sun/awt/image/cvutils/img_globals.c +++ b/jdk/src/share/native/sun/awt/image/cvutils/img_globals.c @@ -31,7 +31,6 @@ #include "img_globals.h" #include "java_awt_image_IndexColorModel.h" -#include "java_awt_image_DirectColorModel.h" #include "java_awt_Transparency.h" /* diff --git a/jdk/src/share/native/sun/java2d/opengl/OGLBlitLoops.c b/jdk/src/share/native/sun/java2d/opengl/OGLBlitLoops.c index e27604a08eb..539143430a4 100644 --- a/jdk/src/share/native/sun/java2d/opengl/OGLBlitLoops.c +++ b/jdk/src/share/native/sun/java2d/opengl/OGLBlitLoops.c @@ -393,7 +393,16 @@ OGLBlitSwToTexture(SurfaceDataRasInfo *srcInfo, OGLPixelFormat *pf, OGLSDOps *dstOps, jint dx1, jint dy1, jint dx2, jint dy2) { + jboolean adjustAlpha = (pf != NULL && !pf->hasAlpha); j2d_glBindTexture(dstOps->textureTarget, dstOps->textureID); + + if (adjustAlpha) { + // if the source surface does not have an alpha channel, + // we need to ensure that the alpha values are forced to 1.0f + j2d_glPixelTransferf(GL_ALPHA_SCALE, 0.0f); + j2d_glPixelTransferf(GL_ALPHA_BIAS, 1.0f); + } + // in case pixel stride is not a multiple of scanline stride the copy // has to be done line by line (see 6207877) if (srcInfo->scanStride % srcInfo->pixelStride != 0) { @@ -413,6 +422,11 @@ OGLBlitSwToTexture(SurfaceDataRasInfo *srcInfo, OGLPixelFormat *pf, dx1, dy1, dx2-dx1, dy2-dy1, pf->format, pf->type, srcInfo->rasBase); } + if (adjustAlpha) { + // restore scale/bias to their original values + j2d_glPixelTransferf(GL_ALPHA_SCALE, 1.0f); + j2d_glPixelTransferf(GL_ALPHA_BIAS, 0.0f); + } } /** diff --git a/jdk/src/solaris/classes/sun/awt/motif/X11JIS0201.java b/jdk/src/solaris/classes/sun/awt/motif/X11JIS0201.java index 0b1681e9092..29700b92a51 100644 --- a/jdk/src/solaris/classes/sun/awt/motif/X11JIS0201.java +++ b/jdk/src/solaris/classes/sun/awt/motif/X11JIS0201.java @@ -25,12 +25,19 @@ package sun.awt.motif; -import java.nio.charset.Charset; -import java.nio.charset.CharsetEncoder; -import java.nio.charset.CharsetDecoder; +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.*; +import sun.nio.cs.*; import sun.nio.cs.ext.JIS_X_0201; +import static sun.nio.cs.CharsetMapping.*; public class X11JIS0201 extends Charset { + + private static Charset jis0201 = new JIS_X_0201(); + private static SingleByte.Encoder enc = + (SingleByte.Encoder)jis0201.newEncoder(); + public X11JIS0201 () { super("X11JIS0201", null); } @@ -40,16 +47,17 @@ public class X11JIS0201 extends Charset { } public CharsetDecoder newDecoder() { - return new JIS_X_0201.Decoder(this); + return jis0201.newDecoder(); } public boolean contains(Charset cs) { return cs instanceof X11JIS0201; } - private class Encoder extends JIS_X_0201.Encoder { + private class Encoder extends CharsetEncoder { + public Encoder(Charset cs) { - super(cs); + super(cs, 1.0f, 1.0f); } public boolean canEncode(char c){ @@ -60,5 +68,42 @@ public class X11JIS0201 extends Charset { } return false; } + + private Surrogate.Parser sgp; + protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) { + char[] sa = src.array(); + int sp = src.arrayOffset() + src.position(); + int sl = src.arrayOffset() + src.limit(); + + byte[] da = dst.array(); + int dp = dst.arrayOffset() + dst.position(); + int dl = dst.arrayOffset() + dst.limit(); + CoderResult cr = CoderResult.UNDERFLOW; + if ((dl - dp) < (sl - sp)) { + sl = sp + (dl - dp); + cr = CoderResult.OVERFLOW; + } + try { + while (sp < sl) { + char c = sa[sp]; + int b = enc.encode(c); + if (b == UNMAPPABLE_ENCODING) { + if (Character.isSurrogate(c)) { + if (sgp == null) + sgp = new Surrogate.Parser(); + if (sgp.parse(c, sa, sp, sl) >= 0) + return CoderResult.unmappableForLength(2); + } + return CoderResult.unmappableForLength(1); + } + da[dp++] = (byte)b; + sp++; + } + return cr; + } finally { + src.position(sp - src.arrayOffset()); + dst.position(dp - dst.arrayOffset()); + } + } } } diff --git a/jdk/src/solaris/classes/sun/awt/motif/X11JIS0208.java b/jdk/src/solaris/classes/sun/awt/motif/X11JIS0208.java index 2aa794e5d6d..fa9b316e272 100644 --- a/jdk/src/solaris/classes/sun/awt/motif/X11JIS0208.java +++ b/jdk/src/solaris/classes/sun/awt/motif/X11JIS0208.java @@ -28,20 +28,22 @@ package sun.awt.motif; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; import java.nio.charset.CharsetDecoder; -import sun.nio.cs.ext.JIS_X_0208_Encoder; -import sun.nio.cs.ext.JIS_X_0208_Decoder; +import sun.nio.cs.ext.JIS_X_0208; public class X11JIS0208 extends Charset { + + private static Charset jis0208 = new JIS_X_0208(); + public X11JIS0208 () { super("X11JIS0208", null); } public CharsetEncoder newEncoder() { - return new JIS_X_0208_Encoder(this); + return jis0208.newEncoder(); } public CharsetDecoder newDecoder() { - return new JIS_X_0208_Decoder(this); + return jis0208.newDecoder(); } public boolean contains(Charset cs) { diff --git a/jdk/src/solaris/classes/sun/awt/motif/X11JIS0212.java b/jdk/src/solaris/classes/sun/awt/motif/X11JIS0212.java index 02bad696d74..f64ca8607aa 100644 --- a/jdk/src/solaris/classes/sun/awt/motif/X11JIS0212.java +++ b/jdk/src/solaris/classes/sun/awt/motif/X11JIS0212.java @@ -28,20 +28,20 @@ package sun.awt.motif; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; import java.nio.charset.CharsetDecoder; -import sun.nio.cs.ext.JIS_X_0212_Encoder; -import sun.nio.cs.ext.JIS_X_0212_Decoder; +import sun.nio.cs.ext.JIS_X_0212; public class X11JIS0212 extends Charset { + private static Charset jis0212 = new JIS_X_0212(); + public X11JIS0212 () { super("X11JIS0212", null); } public CharsetEncoder newEncoder() { - return new JIS_X_0212_Encoder(this); + return jis0212.newEncoder(); } public CharsetDecoder newDecoder() { - return new JIS_X_0212_Decoder(this); + return jis0212.newDecoder(); } - public boolean contains(Charset cs) { return cs instanceof X11JIS0212; } diff --git a/jdk/src/solaris/classes/sun/nio/fs/BsdNativeDispatcher.java b/jdk/src/solaris/classes/sun/nio/fs/BsdNativeDispatcher.java index 74b8cc28135..83b668cc23f 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/BsdNativeDispatcher.java +++ b/jdk/src/solaris/classes/sun/nio/fs/BsdNativeDispatcher.java @@ -33,7 +33,7 @@ import java.security.PrivilegedAction; */ class BsdNativeDispatcher extends UnixNativeDispatcher { - private BsdNativeDispatcher() { } + protected BsdNativeDispatcher() { } /** * struct fsstat_iter *getfsstat(); @@ -55,11 +55,6 @@ class BsdNativeDispatcher extends UnixNativeDispatcher { private static native void initIDs(); static { - AccessController.doPrivileged(new PrivilegedAction() { - public Void run() { - System.loadLibrary("nio"); - return null; - }}); - initIDs(); + initIDs(); } } diff --git a/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java b/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java index 9f8d479831e..f0947c2745c 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java +++ b/jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java @@ -69,7 +69,7 @@ public class DefaultFileSystemProvider { if (osname.equals("Linux")) return createProvider("sun.nio.fs.LinuxFileSystemProvider"); if (osname.equals("Darwin") || osname.contains("OS X")) - return createProvider("sun.nio.fs.BsdFileSystemProvider"); + return createProvider("sun.nio.fs.MacOSXFileSystemProvider"); throw new AssertionError("Platform not recognized"); } } diff --git a/jdk/src/solaris/classes/sun/nio/fs/LinuxUserDefinedFileAttributeView.java b/jdk/src/solaris/classes/sun/nio/fs/LinuxUserDefinedFileAttributeView.java index 586e4b3fad1..46e7f2cf6f9 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/LinuxUserDefinedFileAttributeView.java +++ b/jdk/src/solaris/classes/sun/nio/fs/LinuxUserDefinedFileAttributeView.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -55,7 +55,7 @@ class LinuxUserDefinedFileAttributeView name = USER_NAMESPACE + name; byte[] bytes = name.getBytes(); if (bytes.length > XATTR_NAME_MAX) { - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, "'" + name + "' is too big"); } return bytes; @@ -116,7 +116,7 @@ class LinuxUserDefinedFileAttributeView buffer = NativeBuffers.getNativeBuffer(size); continue; } - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, "Unable to get list of extended attributes: " + x.getMessage()); } @@ -138,7 +138,7 @@ class LinuxUserDefinedFileAttributeView // fgetxattr returns size if called with size==0 return fgetxattr(fd, nameAsBytes(file,name), 0L, 0); } catch (UnixException x) { - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, "Unable to get size of extended attribute '" + name + "': " + x.getMessage()); } finally { @@ -191,7 +191,7 @@ class LinuxUserDefinedFileAttributeView } catch (UnixException x) { String msg = (x.errno() == ERANGE) ? "Insufficient space in buffer" : x.getMessage(); - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, "Error reading extended attribute '" + name + "': " + msg); } finally { close(fd); @@ -243,7 +243,7 @@ class LinuxUserDefinedFileAttributeView src.position(pos + rem); return rem; } catch (UnixException x) { - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, "Error writing extended attribute '" + name + "': " + x.getMessage()); } finally { @@ -264,7 +264,7 @@ class LinuxUserDefinedFileAttributeView try { fremovexattr(fd, nameAsBytes(file,name)); } catch (UnixException x) { - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, "Unable to delete extended attribute '" + name + "': " + x.getMessage()); } finally { close(fd); diff --git a/jdk/src/solaris/classes/sun/nio/fs/LinuxWatchService.java b/jdk/src/solaris/classes/sun/nio/fs/LinuxWatchService.java index 6b71a65cfd7..123fab5b3ea 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/LinuxWatchService.java +++ b/jdk/src/solaris/classes/sun/nio/fs/LinuxWatchService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -246,7 +246,7 @@ class LinuxWatchService return x.asIOException(dir); } if (!attrs.isDirectory()) { - return new NotDirectoryException(dir.getPathForExecptionMessage()); + return new NotDirectoryException(dir.getPathForExceptionMessage()); } // register with inotify (replaces existing mask if already registered) diff --git a/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystem.java b/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystem.java new file mode 100644 index 00000000000..ab9888e7d07 --- /dev/null +++ b/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystem.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.nio.fs; + +import java.nio.file.*; +import java.io.IOException; +import java.util.*; +import java.util.regex.Pattern; +import java.security.AccessController; +import sun.security.action.GetPropertyAction; + +import static sun.nio.fs.MacOSXNativeDispatcher.*; + +/** + * MacOS implementation of FileSystem + */ + +class MacOSXFileSystem extends BsdFileSystem { + + MacOSXFileSystem(UnixFileSystemProvider provider, String dir) { + super(provider, dir); + } + + // match in unicode canon_eq + Pattern compilePathMatchPattern(String expr) { + return Pattern.compile(expr, Pattern.CANON_EQ) ; + } + + char[] normalizeNativePath(char[] path) { + for (char c : path) { + if (c > 0x80) + return normalizepath(path, kCFStringNormalizationFormD); + } + return path; + } + + String normalizeJavaPath(String path) { + for (int i = 0; i < path.length(); i++) { + if (path.charAt(i) > 0x80) + return new String(normalizepath(path.toCharArray(), + kCFStringNormalizationFormC)); + } + return path; + } + +} diff --git a/jdk/src/share/classes/sun/security/krb5/ServiceName.java b/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystemProvider.java similarity index 58% rename from jdk/src/share/classes/sun/security/krb5/ServiceName.java rename to jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystemProvider.java index 7bbaff2c9d3..5e48c0052c7 100644 --- a/jdk/src/share/classes/sun/security/krb5/ServiceName.java +++ b/jdk/src/solaris/classes/sun/nio/fs/MacOSXFileSystemProvider.java @@ -1,4 +1,5 @@ /* + * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,36 +23,23 @@ * questions. */ -/* - * - * (C) Copyright IBM Corp. 1999 All Rights Reserved. - * Copyright 1997 The Open Group Research Institute. All rights reserved. +package sun.nio.fs; + +import java.nio.file.*; +import java.nio.file.attribute.*; +import java.io.IOException; + +/** + * MacOSX implementation of FileSystemProvider */ -package sun.security.krb5; - -import java.net.InetAddress; -import java.net.UnknownHostException; - -public class ServiceName extends PrincipalName { - - public ServiceName(String name, int type) throws RealmException { - super(name, type); - - } - public ServiceName(String name) throws RealmException { - this(name, PrincipalName.KRB_NT_UNKNOWN); +public class MacOSXFileSystemProvider extends BsdFileSystemProvider { + public MacOSXFileSystemProvider() { + super(); } - public ServiceName(String name, String realm) throws RealmException { - this(name, PrincipalName.KRB_NT_UNKNOWN); - setRealm(realm); + @Override + MacOSXFileSystem newFileSystem(String dir) { + return new MacOSXFileSystem(this, dir); } - - public ServiceName (String service, String instance, String realm) - throws KrbException - { - super(service, instance, realm, PrincipalName.KRB_NT_SRV_INST); - } - } diff --git a/jdk/src/solaris/classes/sun/nio/fs/MacOSXNativeDispatcher.java b/jdk/src/solaris/classes/sun/nio/fs/MacOSXNativeDispatcher.java new file mode 100644 index 00000000000..d591857a7ef --- /dev/null +++ b/jdk/src/solaris/classes/sun/nio/fs/MacOSXNativeDispatcher.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.nio.fs; + +import java.security.AccessController; +import java.security.PrivilegedAction; + +/** + * MacOSX specific system calls. + */ + +class MacOSXNativeDispatcher extends BsdNativeDispatcher { + private MacOSXNativeDispatcher() { } + + static final int kCFStringNormalizationFormC = 2; + static final int kCFStringNormalizationFormD = 0; + static native char[] normalizepath(char[] path, int form); +} diff --git a/jdk/src/solaris/classes/sun/nio/fs/SolarisAclFileAttributeView.java b/jdk/src/solaris/classes/sun/nio/fs/SolarisAclFileAttributeView.java index b27f937b8d7..54023bf8265 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/SolarisAclFileAttributeView.java +++ b/jdk/src/solaris/classes/sun/nio/fs/SolarisAclFileAttributeView.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -324,7 +324,7 @@ class SolarisAclFileAttributeView return decode(address, n); } catch (UnixException x) { if ((x.errno() == ENOSYS) || !isAclsEnabled(fd)) { - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, x.getMessage() + " (file system does not support NFSv4 ACLs)"); } x.rethrowAsIOException(file); @@ -355,7 +355,7 @@ class SolarisAclFileAttributeView facl(fd, ACE_SETACL, n, address); } catch (UnixException x) { if ((x.errno() == ENOSYS) || !isAclsEnabled(fd)) { - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, x.getMessage() + " (file system does not support NFSv4 ACLs)"); } if (x.errno() == EINVAL && (n < 3)) diff --git a/jdk/src/solaris/classes/sun/nio/fs/SolarisUserDefinedFileAttributeView.java b/jdk/src/solaris/classes/sun/nio/fs/SolarisUserDefinedFileAttributeView.java index c48ecef63b0..2412e04d987 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/SolarisUserDefinedFileAttributeView.java +++ b/jdk/src/solaris/classes/sun/nio/fs/SolarisUserDefinedFileAttributeView.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,7 +49,7 @@ class SolarisUserDefinedFileAttributeView if (bytes.length <= 1 || (bytes.length == 2 && bytes[1] == '.')) { - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, "'" + name + "' is not a valid name"); } } @@ -96,7 +96,7 @@ class SolarisUserDefinedFileAttributeView } return Collections.unmodifiableList(list); } catch (UnixException x) { - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, "Unable to get list of extended attributes: " + x.getMessage()); } @@ -126,7 +126,7 @@ class SolarisUserDefinedFileAttributeView close(afd); } } catch (UnixException x) { - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, "Unable to get size of extended attribute '" + name + "': " + x.getMessage()); } @@ -165,7 +165,7 @@ class SolarisUserDefinedFileAttributeView fc.close(); } } catch (UnixException x) { - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, "Unable to read extended attribute '" + name + "': " + x.getMessage()); } @@ -201,7 +201,7 @@ class SolarisUserDefinedFileAttributeView fc.close(); } } catch (UnixException x) { - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, "Unable to write extended attribute '" + name + "': " + x.getMessage()); } @@ -224,7 +224,7 @@ class SolarisUserDefinedFileAttributeView close(dfd); } } catch (UnixException x) { - throw new FileSystemException(file.getPathForExecptionMessage(), + throw new FileSystemException(file.getPathForExceptionMessage(), null, "Unable to delete extended attribute '" + name + "': " + x.getMessage()); } finally { diff --git a/jdk/src/solaris/classes/sun/nio/fs/SolarisWatchService.java b/jdk/src/solaris/classes/sun/nio/fs/SolarisWatchService.java index 171dbfe0de2..fb5c4301d73 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/SolarisWatchService.java +++ b/jdk/src/solaris/classes/sun/nio/fs/SolarisWatchService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -288,7 +288,7 @@ class SolarisWatchService return x.asIOException(dir); } if (!attrs.isDirectory()) { - return new NotDirectoryException(dir.getPathForExecptionMessage()); + return new NotDirectoryException(dir.getPathForExceptionMessage()); } // return existing watch key after updating events if already diff --git a/jdk/src/solaris/classes/sun/nio/fs/UnixCopyFile.java b/jdk/src/solaris/classes/sun/nio/fs/UnixCopyFile.java index 08aa82211dd..c35133b202a 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/UnixCopyFile.java +++ b/jdk/src/solaris/classes/sun/nio/fs/UnixCopyFile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -383,8 +383,8 @@ class UnixCopyFile { } catch (UnixException x) { if (x.errno() == EXDEV) { throw new AtomicMoveNotSupportedException( - source.getPathForExecptionMessage(), - target.getPathForExecptionMessage(), + source.getPathForExceptionMessage(), + target.getPathForExceptionMessage(), x.errorString()); } x.rethrowAsIOException(source, target); @@ -420,7 +420,7 @@ class UnixCopyFile { return; // nothing to do as files are identical if (!flags.replaceExisting) { throw new FileAlreadyExistsException( - target.getPathForExecptionMessage()); + target.getPathForExceptionMessage()); } // attempt to delete target @@ -436,7 +436,7 @@ class UnixCopyFile { (x.errno() == EEXIST || x.errno() == ENOTEMPTY)) { throw new DirectoryNotEmptyException( - target.getPathForExecptionMessage()); + target.getPathForExceptionMessage()); } x.rethrowAsIOException(target); } @@ -489,7 +489,7 @@ class UnixCopyFile { (x.errno() == EEXIST || x.errno() == ENOTEMPTY)) { throw new DirectoryNotEmptyException( - source.getPathForExecptionMessage()); + source.getPathForExceptionMessage()); } x.rethrowAsIOException(source); } @@ -542,7 +542,7 @@ class UnixCopyFile { return; // nothing to do as files are identical if (!flags.replaceExisting) throw new FileAlreadyExistsException( - target.getPathForExecptionMessage()); + target.getPathForExceptionMessage()); try { if (targetAttrs.isDirectory()) { rmdir(target); @@ -555,7 +555,7 @@ class UnixCopyFile { (x.errno() == EEXIST || x.errno() == ENOTEMPTY)) { throw new DirectoryNotEmptyException( - target.getPathForExecptionMessage()); + target.getPathForExceptionMessage()); } x.rethrowAsIOException(target); } diff --git a/jdk/src/solaris/classes/sun/nio/fs/UnixException.java b/jdk/src/solaris/classes/sun/nio/fs/UnixException.java index 48137b5ae4c..b4925c35da7 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/UnixException.java +++ b/jdk/src/solaris/classes/sun/nio/fs/UnixException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -97,8 +97,8 @@ class UnixException extends Exception { } void rethrowAsIOException(UnixPath file, UnixPath other) throws IOException { - String a = (file == null) ? null : file.getPathForExecptionMessage(); - String b = (other == null) ? null : other.getPathForExecptionMessage(); + String a = (file == null) ? null : file.getPathForExceptionMessage(); + String b = (other == null) ? null : other.getPathForExceptionMessage(); IOException x = translateToIOException(a, b); throw x; } @@ -108,6 +108,6 @@ class UnixException extends Exception { } IOException asIOException(UnixPath file) { - return translateToIOException(file.getPathForExecptionMessage(), null); + return translateToIOException(file.getPathForExceptionMessage(), null); } } diff --git a/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java b/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java index 28276e134ad..33ec2ba7bb2 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java +++ b/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystem.java @@ -302,7 +302,8 @@ abstract class UnixFileSystem } // return matcher - final Pattern pattern = Pattern.compile(expr); + final Pattern pattern = compilePathMatchPattern(expr); + return new PathMatcher() { @Override public boolean matches(Path path) { @@ -310,11 +311,10 @@ abstract class UnixFileSystem } }; } + private static final String GLOB_SYNTAX = "glob"; private static final String REGEX_SYNTAX = "regex"; - - @Override public final UserPrincipalLookupService getUserPrincipalLookupService() { return LookupService.instance; @@ -339,4 +339,23 @@ abstract class UnixFileSystem }; } + // Override if the platform has different path match requrement, such as + // case insensitive or Unicode canonical equal on MacOSX + Pattern compilePathMatchPattern(String expr) { + return Pattern.compile(expr); + } + + // Override if the platform uses different Unicode normalization form + // for native file path. For example on MacOSX, the native path is stored + // in Unicode NFD form. + char[] normalizeNativePath(char[] path) { + return path; + } + + // Override if the native file path use non-NFC form. For example on MacOSX, + // the native path is stored in Unicode NFD form, the path need to be + // normalized back to NFC before passed back to Java level. + String normalizeJavaPath(String path) { + return path; + } } diff --git a/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java b/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java index ea9df0c1fdc..49f69a54648 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java +++ b/jdk/src/solaris/classes/sun/nio/fs/UnixFileSystemProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -238,7 +238,7 @@ public abstract class UnixFileSystemProvider // DirectoryNotEmptyException if not empty if (attrs != null && attrs.isDirectory() && (x.errno() == EEXIST || x.errno() == ENOTEMPTY)) - throw new DirectoryNotEmptyException(file.getPathForExecptionMessage()); + throw new DirectoryNotEmptyException(file.getPathForExceptionMessage()); x.rethrowAsIOException(file); return false; @@ -401,7 +401,7 @@ public abstract class UnixFileSystemProvider return new UnixDirectoryStream(dir, ptr, filter); } catch (UnixException x) { if (x.errno() == ENOTDIR) - throw new NotDirectoryException(dir.getPathForExecptionMessage()); + throw new NotDirectoryException(dir.getPathForExceptionMessage()); x.rethrowAsIOException(dir); } } @@ -421,7 +421,7 @@ public abstract class UnixFileSystemProvider if (dfd2 != -1) UnixNativeDispatcher.close(dfd2); if (x.errno() == UnixConstants.ENOTDIR) - throw new NotDirectoryException(dir.getPathForExecptionMessage()); + throw new NotDirectoryException(dir.getPathForExceptionMessage()); x.rethrowAsIOException(dir); } return new UnixSecureDirectoryStream(dir, dp, dfd2, filter); @@ -490,7 +490,7 @@ public abstract class UnixFileSystemProvider return new UnixPath(link.getFileSystem(), target); } catch (UnixException x) { if (x.errno() == UnixConstants.EINVAL) - throw new NotLinkException(link.getPathForExecptionMessage()); + throw new NotLinkException(link.getPathForExceptionMessage()); x.rethrowAsIOException(link); return null; // keep compiler happy } diff --git a/jdk/src/solaris/classes/sun/nio/fs/UnixPath.java b/jdk/src/solaris/classes/sun/nio/fs/UnixPath.java index 52b88416eb7..b9410b4ee60 100644 --- a/jdk/src/solaris/classes/sun/nio/fs/UnixPath.java +++ b/jdk/src/solaris/classes/sun/nio/fs/UnixPath.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -68,7 +68,7 @@ class UnixPath UnixPath(UnixFileSystem fs, String input) { // removes redundant slashes and checks for invalid characters - this(fs, encode(normalizeAndCheck(input))); + this(fs, encode(fs, normalizeAndCheck(input))); } // package-private @@ -116,7 +116,7 @@ class UnixPath } // encodes the given path-string into a sequence of bytes - private static byte[] encode(String input) { + private static byte[] encode(UnixFileSystem fs, String input) { SoftReference ref = encoder.get(); CharsetEncoder ce = (ref != null) ? ref.get() : null; if (ce == null) { @@ -126,7 +126,7 @@ class UnixPath encoder.set(new SoftReference(ce)); } - char[] ca = input.toCharArray(); + char[] ca = fs.normalizeNativePath(input.toCharArray()); // size output buffer for worse-case size byte[] ba = new byte[(int)(ca.length * (double)ce.maxBytesPerChar())]; @@ -179,7 +179,7 @@ class UnixPath } // use this message when throwing exceptions - String getPathForExecptionMessage() { + String getPathForExceptionMessage() { return toString(); } @@ -728,7 +728,7 @@ class UnixPath if (c1 != c2) { return c1 - c2; } - k++; + k++; } return len1 - len2; } @@ -757,8 +757,9 @@ class UnixPath @Override public String toString() { // OK if two or more threads create a String - if (stringValue == null) - stringValue = new String(path); // platform encoding + if (stringValue == null) { + stringValue = fs.normalizeJavaPath(new String(path)); // platform encoding + } return stringValue; } @@ -780,7 +781,7 @@ class UnixPath x.setError(ELOOP); if (x.errno() == ELOOP) - throw new FileSystemException(getPathForExecptionMessage(), null, + throw new FileSystemException(getPathForExceptionMessage(), null, x.getMessage() + " or unable to access attributes of symbolic link"); x.rethrowAsIOException(this); diff --git a/jdk/src/solaris/native/java/io/UnixFileSystem_md.c b/jdk/src/solaris/native/java/io/UnixFileSystem_md.c index 5ea55d81b35..4309ffb06a9 100644 --- a/jdk/src/solaris/native/java/io/UnixFileSystem_md.c +++ b/jdk/src/solaris/native/java/io/UnixFileSystem_md.c @@ -38,6 +38,7 @@ #include "jlong.h" #include "jvm.h" #include "io_util.h" +#include "io_util_md.h" #include "java_io_FileSystem.h" #include "java_io_UnixFileSystem.h" @@ -80,7 +81,11 @@ Java_java_io_UnixFileSystem_canonicalize0(JNIEnv *env, jobject this, canonicalPath, JVM_MAXPATHLEN) < 0) { JNU_ThrowIOExceptionWithLastError(env, "Bad pathname"); } else { +#ifdef MACOSX + rv = newStringPlatform(env, canonicalPath); +#else rv = JNU_NewStringPlatform(env, canonicalPath); +#endif } } END_PLATFORM_STRING(env, path); return rv; @@ -311,7 +316,11 @@ Java_java_io_UnixFileSystem_list(JNIEnv *env, jobject this, if (JNU_CopyObjectArray(env, rv, old, len) < 0) goto error; (*env)->DeleteLocalRef(env, old); } +#ifdef MACOSX + name = newStringPlatform(env, ptr->d_name); +#else name = JNU_NewStringPlatform(env, ptr->d_name); +#endif if (name == NULL) goto error; (*env)->SetObjectArrayElement(env, rv, len++, name); (*env)->DeleteLocalRef(env, name); diff --git a/jdk/src/solaris/native/java/io/io_util_md.c b/jdk/src/solaris/native/java/io/io_util_md.c index 1d9abffe8d5..646e1305c5c 100644 --- a/jdk/src/solaris/native/java/io/io_util_md.c +++ b/jdk/src/solaris/native/java/io/io_util_md.c @@ -34,37 +34,32 @@ #include -static inline char *convertToNFD(const char *path, char *buf, size_t bufsize) -{ - CFMutableStringRef mutable = CFStringCreateMutable(NULL, 0); - CFStringAppendCString(mutable, path, kCFStringEncodingUTF8); - CFStringNormalize(mutable, kCFStringNormalizationFormD); - - CFStringGetCString(mutable, buf, bufsize, kCFStringEncodingUTF8); - - CFRelease(mutable); - return buf; -} - -/* Converts the path to NFD form if it was in NFC form. Returns a pointer to - * the converting string which could be buf (if the converstion took place) or - * origPath if no conversion was needed - */ __private_extern__ -char* convertToNFDIfNeeded(const char *origPath, char *buf, size_t bufsize) +jstring newStringPlatform(JNIEnv *env, const char* str) { - const char *current = origPath; - int c; - for (c = *current; c != 0; current++, c = *current) { - if (c < 0) { - // Need to convert - return convertToNFD(origPath, buf, bufsize); + jstring rv = NULL; + CFMutableStringRef csref = CFStringCreateMutable(NULL, 0); + if (csref == NULL) { + JNU_ThrowOutOfMemoryError(env, "native heap"); + } else { + CFStringAppendCString(csref, str, kCFStringEncodingUTF8); + CFStringNormalize(csref, kCFStringNormalizationFormC); + int clen = CFStringGetLength(csref); + int ulen = (clen + 1) * 2; // utf16 + zero padding + char* chars = malloc(ulen); + if (chars == NULL) { + CFRelease(csref); + JNU_ThrowOutOfMemoryError(env, "native heap"); + } else { + if (CFStringGetCString(csref, chars, ulen, kCFStringEncodingUTF16)) { + rv = (*env)->NewString(env, (jchar*)chars, clen); + } + free(chars); + CFRelease(csref); } } - - return (char *)origPath; + return rv; } - #endif void diff --git a/jdk/src/solaris/native/java/io/io_util_md.h b/jdk/src/solaris/native/java/io/io_util_md.h index 5c116049462..fbf8172b2c7 100644 --- a/jdk/src/solaris/native/java/io/io_util_md.h +++ b/jdk/src/solaris/native/java/io/io_util_md.h @@ -72,3 +72,7 @@ * IO helper function(s) */ void fileClose(JNIEnv *env, jobject this, jfieldID fid); + +#ifdef MACOSX +jstring newStringPlatform(JNIEnv *env, const char* str); +#endif diff --git a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c index a6f7ddc1a00..84f739ed50e 100644 --- a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c +++ b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c @@ -196,7 +196,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, struct addrinfo *next = (struct addrinfo*) malloc(sizeof(struct addrinfo)); if (!next) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); ret = NULL; goto cleanupAndReturn; } @@ -465,7 +465,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, struct addrinfo *next = (struct addrinfo*) malloc(sizeof(struct addrinfo)); if (!next) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); ret = NULL; goto cleanupAndReturn; } diff --git a/jdk/src/solaris/native/java/net/Inet6AddressImpl.c b/jdk/src/solaris/native/java/net/Inet6AddressImpl.c index 63addd9fb70..17be097e9e3 100644 --- a/jdk/src/solaris/native/java/net/Inet6AddressImpl.c +++ b/jdk/src/solaris/native/java/net/Inet6AddressImpl.c @@ -267,7 +267,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, struct addrinfo *next = (struct addrinfo*) malloc(sizeof(struct addrinfo)); if (!next) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); ret = NULL; goto cleanupAndReturn; } diff --git a/jdk/src/solaris/native/java/net/NetworkInterface.c b/jdk/src/solaris/native/java/net/NetworkInterface.c index b952626cb82..69780f7bc16 100644 --- a/jdk/src/solaris/native/java/net/NetworkInterface.c +++ b/jdk/src/solaris/native/java/net/NetworkInterface.c @@ -804,7 +804,7 @@ static netif *enumInterfaces(JNIEnv *env) { do{ \ _pointer = (_type)malloc( _size ); \ if (_pointer == NULL) { \ - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); \ + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); \ return ifs; /* return untouched list */ \ } \ } while(0) diff --git a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c index 382ec4c83bc..a508d43e0cc 100644 --- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c +++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c @@ -485,7 +485,7 @@ Java_java_net_PlainDatagramSocketImpl_send(JNIEnv *env, jobject this, fullPacket = (char *)malloc(packetBufferLen); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Send buffer native heap allocation failed"); return; } else { mallocedPacket = JNI_TRUE; @@ -714,7 +714,7 @@ Java_java_net_PlainDatagramSocketImpl_peekData(JNIEnv *env, jobject this, fullPacket = (char *)malloc(packetBufferLen); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Peek buffer native heap allocation failed"); return -1; } else { mallocedPacket = JNI_TRUE; @@ -874,7 +874,7 @@ Java_java_net_PlainDatagramSocketImpl_receive0(JNIEnv *env, jobject this, fullPacket = (char *)malloc(packetBufferLen); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Receive buffer native heap allocation failed"); return; } else { mallocedPacket = JNI_TRUE; diff --git a/jdk/src/solaris/native/sun/awt/fontpath.c b/jdk/src/solaris/native/sun/awt/fontpath.c index 214ecd0b073..412c6317a1c 100644 --- a/jdk/src/solaris/native/sun/awt/fontpath.c +++ b/jdk/src/solaris/native/sun/awt/fontpath.c @@ -1240,7 +1240,7 @@ Java_sun_font_FontConfigManager_getFontConfig FC_CHARSET, 0, &charset); if (result != FcResultMatch) { free(family); - free(family); + free(fullname); free(styleStr); free(file); (*FcPatternDestroy)(pattern); diff --git a/jdk/src/solaris/native/sun/nio/ch/DatagramDispatcher.c b/jdk/src/solaris/native/sun/nio/ch/DatagramDispatcher.c index c37686bf962..594ef9ffed4 100644 --- a/jdk/src/solaris/native/sun/nio/ch/DatagramDispatcher.c +++ b/jdk/src/solaris/native/sun/nio/ch/DatagramDispatcher.c @@ -34,6 +34,7 @@ #include #include #include +#include #include "nio_util.h" #include diff --git a/jdk/src/solaris/native/sun/nio/ch/Net.c b/jdk/src/solaris/native/sun/nio/ch/Net.c index 45c09c35929..2f01af33efa 100644 --- a/jdk/src/solaris/native/sun/nio/ch/Net.c +++ b/jdk/src/solaris/native/sun/nio/ch/Net.c @@ -39,83 +39,6 @@ #include "nio_util.h" #include "nio.h" -/** - * Definitions for source-specific multicast to allow for building - * with older header files. - */ - -#ifdef __solaris__ - -#ifndef IP_BLOCK_SOURCE - -#define IP_BLOCK_SOURCE 0x15 -#define IP_UNBLOCK_SOURCE 0x16 -#define IP_ADD_SOURCE_MEMBERSHIP 0x17 -#define IP_DROP_SOURCE_MEMBERSHIP 0x18 - -#define MCAST_BLOCK_SOURCE 0x2b -#define MCAST_UNBLOCK_SOURCE 0x2c -#define MCAST_JOIN_SOURCE_GROUP 0x2d -#define MCAST_LEAVE_SOURCE_GROUP 0x2e - -#endif /* IP_BLOCK_SOURCE */ - -struct my_ip_mreq_source { - struct in_addr imr_multiaddr; - struct in_addr imr_sourceaddr; - struct in_addr imr_interface; -}; - -/* - * Use #pragma pack() construct to force 32-bit alignment on amd64. - */ -#if defined(amd64) -#pragma pack(4) -#endif - -struct my_group_source_req { - uint32_t gsr_interface; /* interface index */ - struct sockaddr_storage gsr_group; /* group address */ - struct sockaddr_storage gsr_source; /* source address */ -}; - -#if defined(amd64) -#pragma pack() -#endif - -#endif /* __solaris__ */ - - -#ifdef __linux__ - -#ifndef IP_BLOCK_SOURCE - -#define IP_BLOCK_SOURCE 38 -#define IP_UNBLOCK_SOURCE 37 -#define IP_ADD_SOURCE_MEMBERSHIP 39 -#define IP_DROP_SOURCE_MEMBERSHIP 40 - -#define MCAST_BLOCK_SOURCE 43 -#define MCAST_UNBLOCK_SOURCE 44 -#define MCAST_JOIN_SOURCE_GROUP 42 -#define MCAST_LEAVE_SOURCE_GROUP 45 - -#endif /* IP_BLOCK_SOURCE */ - -struct my_ip_mreq_source { - struct in_addr imr_multiaddr; - struct in_addr imr_interface; - struct in_addr imr_sourceaddr; -}; - -struct my_group_source_req { - uint32_t gsr_interface; /* interface index */ - struct sockaddr_storage gsr_group; /* group address */ - struct sockaddr_storage gsr_source; /* source address */ -}; - -#endif /* __linux__ */ - #ifdef _ALLBSD_SOURCE #ifndef IP_BLOCK_SOURCE @@ -155,7 +78,12 @@ struct my_group_source_req { struct sockaddr_storage gsr_source; /* source address */ }; -#endif /* _ALLBSD_SOURCE */ +#else /* _ALLBSD_SOURCE */ + +#define my_ip_mreq_source ip_mreq_source +#define my_group_source_req group_source_req + +#endif #define COPY_INET6_ADDRESS(env, source, target) \ @@ -576,8 +504,8 @@ Java_sun_nio_ch_Net_joinOrDrop6(JNIEnv *env, jobject this, jboolean join, jobjec optval = (void*)&mreq6; optlen = sizeof(mreq6); } else { -#if defined (__linux__) || defined(MACOSX) - /* Include-mode filtering broken on Mac OS & Linux at least to 2.6.24 */ +#ifdef MACOSX + /* no IPv6 include-mode filtering for now */ return IOS_UNAVAILABLE; #else initGroupSourceReq(env, group, index, source, &req); diff --git a/jdk/src/solaris/native/sun/nio/fs/MacOSXNativeDispatcher.c b/jdk/src/solaris/native/sun/nio/fs/MacOSXNativeDispatcher.c new file mode 100644 index 00000000000..50c5e2101a0 --- /dev/null +++ b/jdk/src/solaris/native/sun/nio/fs/MacOSXNativeDispatcher.c @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include "jni.h" +#include "jni_util.h" +#include "jvm.h" +#include "jlong.h" + +#include +#include + +#include + +JNIEXPORT jcharArray JNICALL +Java_sun_nio_fs_MacOSXNativeDispatcher_normalizepath(JNIEnv* env, jclass this, + jcharArray path, + jint form) +{ + jcharArray result = NULL; + char chars_buf[(PATH_MAX + 1) * 2]; // utf16 + zero padding + CFMutableStringRef csref = CFStringCreateMutable(NULL, 0); + if (csref == NULL) { + JNU_ThrowOutOfMemoryError(env, "native heap"); + } else { + char *chars = (char*)(*env)->GetPrimitiveArrayCritical(env, path, 0); + jsize len = (*env)->GetArrayLength(env, path); + CFStringAppendCharacters(csref, (const UniChar*)chars, len); + (*env)->ReleasePrimitiveArrayCritical(env, path, chars, 0); + CFStringNormalize(csref, form); + len = CFStringGetLength(csref); + if (len < PATH_MAX) { + if (CFStringGetCString(csref, chars_buf, sizeof(chars_buf), kCFStringEncodingUTF16)) { + result = (*env)->NewCharArray(env, len); + (*env)->SetCharArrayRegion(env, result, 0, len, (jchar*)&chars_buf); + } + } else { + int ulen = (len + 1) * 2; + chars = malloc(ulen); + if (chars == NULL) { + CFRelease(csref); + JNU_ThrowOutOfMemoryError(env, "native heap"); + return result; + } else { + if (CFStringGetCString(csref, chars, ulen, kCFStringEncodingUTF16)) { + result = (*env)->NewCharArray(env, len); + (*env)->SetCharArrayRegion(env, result, 0, len, (jchar*)chars); + } + free(chars); + } + } + CFRelease(csref); + } + return result; +} diff --git a/jdk/src/windows/classes/sun/security/krb5/internal/tools/Kinit.java b/jdk/src/windows/classes/sun/security/krb5/internal/tools/Kinit.java index 41354c88a74..eb748684557 100644 --- a/jdk/src/windows/classes/sun/security/krb5/internal/tools/Kinit.java +++ b/jdk/src/windows/classes/sun/security/krb5/internal/tools/Kinit.java @@ -206,9 +206,7 @@ public class Kinit { System.out.println(">>> Kinit realm name is " + realm); } - PrincipalName sname = new PrincipalName("krbtgt" + "/" + realm, - PrincipalName.KRB_NT_SRV_INST); - sname.setRealm(realm); + PrincipalName sname = PrincipalName.tgsService(realm, realm); builder.setTarget(sname); if (DEBUG) { diff --git a/jdk/src/windows/classes/sun/security/krb5/internal/tools/KinitOptions.java b/jdk/src/windows/classes/sun/security/krb5/internal/tools/KinitOptions.java index 05b674bf950..abde927cda6 100644 --- a/jdk/src/windows/classes/sun/security/krb5/internal/tools/KinitOptions.java +++ b/jdk/src/windows/classes/sun/security/krb5/internal/tools/KinitOptions.java @@ -146,15 +146,6 @@ class KinitOptions { "Principal name: " + p + e.getMessage()); } - if (principal.getRealm() == null) { - String realm = - Config.getInstance().getDefault("default_realm", - "libdefaults"); - if (realm != null) { - principal.setRealm(realm); - } else throw new IllegalArgumentException("invalid " + - "Realm name"); - } } else if (this.password == null) { // Have already processed a Principal, this must be a password password = args[i].toCharArray(); @@ -175,16 +166,6 @@ class KinitOptions { } PrincipalName getDefaultPrincipal() { - String cname; - String realm = null; - try { - realm = Config.getInstance().getDefaultRealm(); - } catch (KrbException e) { - System.out.println ("Can not get default realm " + - e.getMessage()); - e.printStackTrace(); - return null; - } // get default principal name from the cachename if it is // available. @@ -204,10 +185,6 @@ class KinitOptions { } PrincipalName p = cis.readPrincipal(version); cis.close(); - String temp = p.getRealmString(); - if (temp == null) { - p.setRealm(realm); - } if (DEBUG) { System.out.println(">>>KinitOptions principal name from "+ "the cache is :" + p); @@ -230,19 +207,15 @@ class KinitOptions { System.out.println(">>>KinitOptions default username is :" + username); } - if (realm != null) { - try { - PrincipalName p = new PrincipalName(username); - if (p.getRealm() == null) - p.setRealm(realm); - return p; - } catch (RealmException e) { - // ignore exception , return null - if (DEBUG) { - System.out.println ("Exception in getting principal " + - "name " + e.getMessage()); - e.printStackTrace(); - } + try { + PrincipalName p = new PrincipalName(username); + return p; + } catch (RealmException e) { + // ignore exception , return null + if (DEBUG) { + System.out.println ("Exception in getting principal " + + "name " + e.getMessage()); + e.printStackTrace(); } } return null; diff --git a/jdk/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java b/jdk/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java index fe29462add5..9feacdf4d63 100644 --- a/jdk/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java +++ b/jdk/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java @@ -273,9 +273,6 @@ public class Ktab { PrincipalName pname = null; try { pname = new PrincipalName(principal); - if (pname.getRealm() == null) { - pname.setRealm(Config.getInstance().getDefaultRealm()); - } } catch (KrbException e) { System.err.println("Failed to add " + principal + " to keytab."); @@ -382,9 +379,6 @@ public class Ktab { PrincipalName pname = null; try { pname = new PrincipalName(principal); - if (pname.getRealm() == null) { - pname.setRealm(Config.getInstance().getDefaultRealm()); - } if (!forced) { String answer; BufferedReader cis = diff --git a/jdk/src/windows/native/java/net/DualStackPlainDatagramSocketImpl.c b/jdk/src/windows/native/java/net/DualStackPlainDatagramSocketImpl.c index 6521e1e5f42..0077c37aaa2 100644 --- a/jdk/src/windows/native/java/net/DualStackPlainDatagramSocketImpl.c +++ b/jdk/src/windows/native/java/net/DualStackPlainDatagramSocketImpl.c @@ -265,7 +265,7 @@ JNIEXPORT jint JNICALL Java_java_net_DualStackPlainDatagramSocketImpl_socketRece } fullPacket = (char *)malloc(packetBufferLen); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); return -1; } } else { @@ -427,7 +427,7 @@ JNIEXPORT void JNICALL Java_java_net_DualStackPlainDatagramSocketImpl_socketSend } fullPacket = (char *)malloc(length); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); return; } } else { diff --git a/jdk/src/windows/native/java/net/Inet6AddressImpl.c b/jdk/src/windows/native/java/net/Inet6AddressImpl.c index efdcd54662b..b98b6411b01 100644 --- a/jdk/src/windows/native/java/net/Inet6AddressImpl.c +++ b/jdk/src/windows/native/java/net/Inet6AddressImpl.c @@ -197,7 +197,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, struct addrinfo *next = (struct addrinfo*) malloc(sizeof(struct addrinfo)); if (!next) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); ret = NULL; goto cleanupAndReturn; } diff --git a/jdk/src/windows/native/java/net/NetworkInterface.c b/jdk/src/windows/native/java/net/NetworkInterface.c index 8dbeb925029..570eac30812 100644 --- a/jdk/src/windows/native/java/net/NetworkInterface.c +++ b/jdk/src/windows/native/java/net/NetworkInterface.c @@ -270,7 +270,7 @@ int enumInterfaces(JNIEnv *env, netif **netifPP) } } if (curr == NULL) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failure"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failure"); free_netif(netifP); free(tableP); return -1; @@ -370,7 +370,7 @@ int enumAddresses_win(JNIEnv *env, netif *netifP, netaddr **netaddrPP) netaddr *curr = (netaddr *)malloc(sizeof(netaddr)); if (curr == NULL) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failure"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failure"); free_netaddr(netaddrP); free(tableP); return -1; diff --git a/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c b/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c index 161017754ca..dc6fdf41c47 100644 --- a/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c +++ b/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c @@ -243,7 +243,7 @@ jboolean exceedSizeLimit(JNIEnv *env, jint fd, jint addr, jint size) addrList = curr; } LeaveCriticalSection(&sizeCheckLock); - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); return JNI_TRUE; } curr->addr = htonl((*addrp)->S_un.S_addr); @@ -740,7 +740,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_send(JNIEnv *env, jobject this, */ fullPacket = (char *)malloc(packetBufferLen); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Send buf native heap allocation failed"); return; } } else { @@ -1003,7 +1003,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_peekData(JNIEnv *env, jobject thi */ fullPacket = (char *)malloc(packetBufferLen); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Native heap allocation failed"); return -1; } } else { @@ -1287,7 +1287,7 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_receive0(JNIEnv *env, jobject thi */ fullPacket = (char *)malloc(packetBufferLen); if (!fullPacket) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); + JNU_ThrowOutOfMemoryError(env, "Receive buf native heap allocation failed"); return; } } else { diff --git a/jdk/src/windows/native/sun/font/lcdglyph.c b/jdk/src/windows/native/sun/font/lcdglyph.c index f909c4de2f2..4f408d17021 100644 --- a/jdk/src/windows/native/sun/font/lcdglyph.c +++ b/jdk/src/windows/native/sun/font/lcdglyph.c @@ -409,7 +409,7 @@ Java_sun_font_FileFontStrike__1getGlyphImageFromWindows */ imageSize = bytesWidth*height; glyphInfo = (GlyphInfo*)malloc(sizeof(GlyphInfo)+imageSize); - if (malloc == NULL) { + if (glyphInfo == NULL) { FREE_AND_RETURN; } glyphInfo->cellInfo = NULL; diff --git a/jdk/src/windows/native/sun/security/krb5/NativeCreds.c b/jdk/src/windows/native/sun/security/krb5/NativeCreds.c index 91ed2cb84bb..72e5d5acb49 100644 --- a/jdk/src/windows/native/sun/security/krb5/NativeCreds.c +++ b/jdk/src/windows/native/sun/security/krb5/NativeCreds.c @@ -67,7 +67,6 @@ jmethodID encryptionKeyConstructor = 0; jmethodID ticketFlagsConstructor = 0; jmethodID kerberosTimeConstructor = 0; jmethodID krbcredsConstructor = 0; -jmethodID setRealmMethod = 0; /* * Function prototypes for internal routines @@ -279,7 +278,7 @@ JNIEXPORT jint JNICALL JNI_OnLoad( } principalNameConstructor = (*env)->GetMethodID(env, principalNameClass, - "", "([Ljava/lang/String;)V"); + "", "([Ljava/lang/String;Ljava/lang/String;)V"); if (principalNameConstructor == 0) { printf("LSA: Couldn't find PrincipalName constructor\n"); return JNI_ERR; @@ -318,14 +317,6 @@ JNIEXPORT jint JNICALL JNI_OnLoad( printf("LSA: Found KerberosTime constructor\n"); } - // load the setRealm method in PrincipalName - setRealmMethod = (*env)->GetMethodID(env, principalNameClass, - "setRealm", "(Ljava/lang/String;)V"); - if (setRealmMethod == 0) { - printf("LSA: Couldn't find setRealm in PrincipalName\n"); - return JNI_ERR; - } - if (native_debug) { printf("LSA: Finished OnLoad processing\n"); } @@ -952,13 +943,12 @@ jobject BuildPrincipal(JNIEnv *env, PKERB_EXTERNAL_NAME principalName, // Do I have to worry about storage reclamation here? } - principal = (*env)->NewObject(env, principalNameClass, - principalNameConstructor, stringArray); - // now set the realm in the principal realmLen = (ULONG)wcslen((PWCHAR)realm); realmStr = (*env)->NewString(env, (PWCHAR)realm, (USHORT)realmLen); - (*env)->CallVoidMethod(env, principal, setRealmMethod, realmStr); + + principal = (*env)->NewObject(env, principalNameClass, + principalNameConstructor, stringArray, realmStr); // free local resources LocalFree(realm); diff --git a/jdk/src/windows/native/sun/windows/awt_Component.cpp b/jdk/src/windows/native/sun/windows/awt_Component.cpp index 9cc2f76e90b..d7b265c44e3 100644 --- a/jdk/src/windows/native/sun/windows/awt_Component.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Component.cpp @@ -1474,9 +1474,7 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) ::GetClientRect( GetHWnd(), &r ); mr = WmSize(static_cast(wParam), r.right - r.left, r.bottom - r.top); //mr = WmSize(wParam, LOWORD(lParam), HIWORD(lParam)); - if (ImmGetContext() != NULL) { - SetCompositionWindow(r); - } + SetCompositionWindow(r); break; } case WM_SIZING: @@ -1535,7 +1533,10 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) // When the window is deactivated, send WM_IME_ENDCOMPOSITION // message to deactivate the composition window so that // it won't receive keyboard input focus. - if (ImmGetContext() != NULL) { + HIMC hIMC; + HWND hwnd = ImmGetHWnd(); + if ((hIMC = ImmGetContext(hwnd)) != NULL) { + ImmReleaseContext(hwnd, hIMC); DefWindowProc(WM_IME_ENDCOMPOSITION, 0, 0); } } @@ -1718,11 +1719,9 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) case WM_IME_SETCONTEXT: // lParam is passed as pointer and it can be modified. mr = WmImeSetContext(static_cast(wParam), &lParam); - CallProxyDefWindowProc(message, wParam, lParam, retValue, mr); break; case WM_IME_NOTIFY: mr = WmImeNotify(wParam, lParam); - CallProxyDefWindowProc(message, wParam, lParam, retValue, mr); break; case WM_IME_STARTCOMPOSITION: mr = WmImeStartComposition(); @@ -3723,12 +3722,14 @@ MsgRouting AwtComponent::WmPaste() // support IME Composition messages void AwtComponent::SetCompositionWindow(RECT& r) { - HIMC hIMC = ImmGetContext(); + HWND hwnd = ImmGetHWnd(); + HIMC hIMC = ImmGetContext(hwnd); if (hIMC == NULL) { return; } COMPOSITIONFORM cf = {CFS_DEFAULT, {0, 0}, {0, 0, 0, 0}}; ImmSetCompositionWindow(hIMC, &cf); + ImmReleaseContext(hwnd, hIMC); } void AwtComponent::OpenCandidateWindow(int x, int y) @@ -3742,16 +3743,16 @@ void AwtComponent::OpenCandidateWindow(int x, int y) SetCandidateWindow(iCandType, x-rc.left, y-rc.top); } if (m_bitsCandType != 0) { - HWND proxy = GetProxyFocusOwner(); // REMIND: is there any chance GetProxyFocusOwner() returns NULL here? - ::DefWindowProc((proxy != NULL) ? proxy : GetHWnd(), + ::DefWindowProc(ImmGetHWnd(), WM_IME_NOTIFY, IMN_OPENCANDIDATE, m_bitsCandType); } } void AwtComponent::SetCandidateWindow(int iCandType, int x, int y) { - HIMC hIMC = ImmGetContext(); + HWND hwnd = ImmGetHWnd(); + HIMC hIMC = ImmGetContext(hwnd); CANDIDATEFORM cf; cf.dwIndex = iCandType; cf.dwStyle = CFS_CANDIDATEPOS; @@ -3759,17 +3760,20 @@ void AwtComponent::SetCandidateWindow(int iCandType, int x, int y) cf.ptCurrentPos.y = y; ImmSetCandidateWindow(hIMC, &cf); + ImmReleaseContext(hwnd, hIMC); } MsgRouting AwtComponent::WmImeSetContext(BOOL fSet, LPARAM *lplParam) { // If the Windows input context is disabled, do not let Windows // display any UIs. - HIMC hIMC = ImmGetContext(); + HWND hwnd = ImmGetHWnd(); + HIMC hIMC = ImmGetContext(hwnd); if (hIMC == NULL) { *lplParam = 0; return mrDoDefault; } + ImmReleaseContext(hwnd, hIMC); if (fSet) { LPARAM lParam = *lplParam; @@ -3824,11 +3828,13 @@ MsgRouting AwtComponent::WmImeComposition(WORD wChar, LPARAM flags) AwtInputTextInfor* textInfor = NULL; try { - HIMC hIMC = ImmGetContext(); + HWND hwnd = ImmGetHWnd(); + HIMC hIMC = ImmGetContext(hwnd); DASSERT(hIMC!=0); textInfor = new AwtInputTextInfor; textInfor->GetContextData(hIMC, flags); + ImmReleaseContext(hwnd, hIMC); jstring jtextString = textInfor->GetText(); /* The conditions to send the input method event to AWT EDT are: @@ -4012,16 +4018,15 @@ void AwtComponent::InquireCandidatePosition() DASSERT(!safe_ExceptionOccurred(env)); } -HIMC AwtComponent::ImmGetContext() +HWND AwtComponent::ImmGetHWnd() { HWND proxy = GetProxyFocusOwner(); - return ::ImmGetContext((proxy != NULL) ? proxy : GetHWnd()); + return (proxy != NULL) ? proxy : GetHWnd(); } HIMC AwtComponent::ImmAssociateContext(HIMC himc) { - HWND proxy = GetProxyFocusOwner(); - return ::ImmAssociateContext((proxy != NULL) ? proxy : GetHWnd(), himc); + return ::ImmAssociateContext(ImmGetHWnd(), himc); } HWND AwtComponent::GetProxyFocusOwner() diff --git a/jdk/src/windows/native/sun/windows/awt_Component.h b/jdk/src/windows/native/sun/windows/awt_Component.h index 3257c517516..75c1b3c9384 100644 --- a/jdk/src/windows/native/sun/windows/awt_Component.h +++ b/jdk/src/windows/native/sun/windows/awt_Component.h @@ -464,7 +464,7 @@ public: int caretPos, int visiblePos); void InquireCandidatePosition(); INLINE LPARAM GetCandidateType() { return m_bitsCandType; } - HIMC ImmGetContext(); + HWND ImmGetHWnd(); HIMC ImmAssociateContext(HIMC himc); HWND GetProxyFocusOwner(); diff --git a/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp b/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp index abd6e120451..d60fbd329b1 100644 --- a/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp +++ b/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp @@ -156,6 +156,7 @@ FileDialogHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam) HIMC hIMC = ::ImmGetContext(hdlg); if (hIMC != NULL) { ::ImmNotifyIME(hIMC, NI_COMPOSITIONSTR, CPS_CANCEL, 0); + ::ImmReleaseContext(hdlg, hIMC); } WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(parent, NativeDialogWndProcProp)); diff --git a/jdk/src/windows/native/sun/windows/awt_Frame.cpp b/jdk/src/windows/native/sun/windows/awt_Frame.cpp index 76811dfec03..da1df839535 100644 --- a/jdk/src/windows/native/sun/windows/awt_Frame.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Frame.cpp @@ -319,8 +319,6 @@ LRESULT AwtFrame::ProxyWindowProc(UINT message, WPARAM wParam, LPARAM lParam, Ms case WM_IME_STARTCOMPOSITION: case WM_IME_ENDCOMPOSITION: case WM_IME_COMPOSITION: - case WM_IME_SETCONTEXT: - case WM_IME_NOTIFY: case WM_IME_CONTROL: case WM_IME_COMPOSITIONFULL: case WM_IME_SELECT: diff --git a/jdk/src/windows/native/sun/windows/awt_TextComponent.cpp b/jdk/src/windows/native/sun/windows/awt_TextComponent.cpp index 17d7c68088c..5ba2efca861 100644 --- a/jdk/src/windows/native/sun/windows/awt_TextComponent.cpp +++ b/jdk/src/windows/native/sun/windows/awt_TextComponent.cpp @@ -336,7 +336,8 @@ AwtTextComponent::WmPaste() //im --- override to over the spot composition void AwtTextComponent::SetCompositionWindow(RECT& rc) { - HIMC hIMC = ImmGetContext(); + HWND hwnd = ImmGetHWnd(); + HIMC hIMC = ImmGetContext(hwnd); // rc is not used for text component. COMPOSITIONFORM cf = { CFS_FORCE_POSITION, {0,0}, {0,0,0,0} }; GetCaretPos(&(cf.ptCurrentPos)); @@ -348,6 +349,7 @@ void AwtTextComponent::SetCompositionWindow(RECT& rc) LOGFONT lf; GetObject(m_hFont, sizeof(LOGFONT), &lf); ImmSetCompositionFont(hIMC, &lf); + ImmReleaseContext(hwnd, hIMC); } //im --- end diff --git a/jdk/test/ProblemList.txt b/jdk/test/ProblemList.txt index 81154df8c20..fa314010413 100644 --- a/jdk/test/ProblemList.txt +++ b/jdk/test/ProblemList.txt @@ -122,9 +122,6 @@ # jdk_lang -# 7123972 -java/lang/annotation/loaderLeak/Main.java generic-all - # 6944188 java/lang/management/ThreadMXBean/ThreadStateTest.java generic-all @@ -161,9 +158,6 @@ java/lang/Math/WorstCaseTests.java generic-all # 6988950 demo/jvmti/compiledMethodLoad/CompiledMethodLoadTest.java generic-all -# Need to be marked othervm, or changed to be samevm safe -com/sun/jndi/rmi/registry/RegistryContext/UnbindIdempotent.java generic-all - # 7162111 demo/jvmti/mtrace/TraceJFrame.java macosx-all javax/script/CauseExceptionTest.java macosx-all @@ -197,9 +191,6 @@ com/sun/net/httpserver/Test9a.java generic-all # 7079145 java/net/ipv6tests/UdpTest.java hang at IPv6 only data exchange java/net/ipv6tests/UdpTest.java linux-all -# 7081476 -java/net/InetSocketAddress/B6469803.java generic-all - # 7102670 java/net/InetAddress/CheckJNI.java linux-all @@ -268,28 +259,15 @@ java/nio/channels/Selector/OutOfBand.java macosx-all # jdk_rmi -# 7140992 -java/rmi/server/Unreferenced/finiteGCLatency/FiniteGCLatency.java generic-all - -# 6948101 -java/rmi/transport/pinLastArguments/PinLastArguments.java generic-all - # 7146541 java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java linux-all # 7132247 java/rmi/registry/readTest/readTest.sh windows-all - -# 7142596 -java/rmi/transport/pinClientSocketFactory/PinClientSocketFactory.java generic-all - ############################################################################ # jdk_security -# 7177556 -com/sun/crypto/provider/KeyFactory/TestProviderLeak.java generic-all - # 7147060 com/sun/org/apache/xml/internal/security/transforms/ClassLoaderTest.java generic-all @@ -406,8 +384,4 @@ java/util/concurrent/locks/ReentrantLock/CancelledLockLoops.java generic-all # 7041639, Solaris DSA keypair generation bug java/util/TimeZone/TimeZoneDatePermissionCheck.sh solaris-all -# 7150557 -java/util/prefs/RemoveReadOnlyNode.java macosx-all -java/util/prefs/RemoveUnregedListener.java macosx-all - ############################################################################ diff --git a/jdk/test/TEST.ROOT b/jdk/test/TEST.ROOT index 8aa398f60bb..e6d8dfca678 100644 --- a/jdk/test/TEST.ROOT +++ b/jdk/test/TEST.ROOT @@ -9,4 +9,4 @@ keys=2d dnd i18n othervm.dirs=java/rmi sun/rmi javax/management # Tests that cannot run concurrently -exclusiveAccess.dirs=java/rmi sun/rmi sun/management/jmxremote sun/tools/jstatd +exclusiveAccess.dirs=java/rmi/Naming sun/management/jmxremote sun/tools/jstatd diff --git a/jdk/test/com/sun/crypto/provider/KeyFactory/TestProviderLeak.java b/jdk/test/com/sun/crypto/provider/KeyFactory/TestProviderLeak.java index 1c1c0e0de0a..04fa96a9813 100644 --- a/jdk/test/com/sun/crypto/provider/KeyFactory/TestProviderLeak.java +++ b/jdk/test/com/sun/crypto/provider/KeyFactory/TestProviderLeak.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,50 +28,111 @@ * LoginContext * @author Brad Wetmore * - * @run main/othervm -Xmx2m -XX:OldSize=1m -XX:NewSize=512k TestProviderLeak + * @run main/othervm -Xmx20m TestProviderLeak * - * The original test invocation is below, but had to use the above - * workaround for bug 6923123. - * - * run main/othervm -Xmx2m TestProviderLeak */ /* - * We force the leak to become a problem by specifying the minimum - * size heap we can (above). In current runs on a server and client - * machine, it took roughly 220-240 iterations to have the memory leak - * shut down other operations. It complained about "Unable to verify - * the SunJCE provider." + * We force the leak to become a problem by eating up most JVM free memory. + * In current runs on a server and client machine, it took roughly 50-150 + * iterations to have the memory leak or time-out shut down other operations. + * It complained about "JCE cannot authenticate the provider SunJCE" or timed + * out. */ import javax.crypto.*; import javax.crypto.spec.*; +import java.util.*; +import java.util.concurrent.*; + public class TestProviderLeak { + private static final int MB = 1024 * 1024; + // Currently, 3MB heap size is reserved for running testing iterations. + // It is tweaked to make sure the test quickly triggers the memory leak + // or throws out TimeoutException. + private static final int RESERVATION = 3; + // The maximum time, 5 seconds, to wait for each iteration. + private static final int TIME_OUT = 5; + + private static Deque eatupMemory() throws Exception { + dumpMemoryStats("Before memory allocation"); + + Deque data = new ArrayDeque(); + boolean hasException = false; + while (!hasException) { + byte [] megaByte; + try { + megaByte = new byte [MB]; + data.add(megaByte); + } catch (OutOfMemoryError e) { + System.out.println("OOME is thrown when allocating " + + data.size() + "MB memory."); + megaByte = null; + + for (int j = 0; j < RESERVATION && !data.isEmpty(); j++) { + data.removeLast(); + } + System.gc(); + hasException = true; + } + } + dumpMemoryStats("After memory allocation"); + + return data; + } + private static void dumpMemoryStats(String s) throws Exception { Runtime rt = Runtime.getRuntime(); - System.out.println(s + ":\t" + - rt.freeMemory() + " bytes free"); + System.out.println(s + ":\t" + + rt.freeMemory() + " bytes free"); } public static void main(String [] args) throws Exception { - SecretKeyFactory skf = + // Eat up memory + Deque dummyData = eatupMemory(); + assert (dummyData != null); + + // Prepare the test + final SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1", "SunJCE"); - PBEKeySpec pbeKS = new PBEKeySpec( + final PBEKeySpec pbeKS = new PBEKeySpec( "passPhrase".toCharArray(), new byte [] { 0 }, 5, 512); - for (int i = 0; i <= 1000; i++) { - try { - skf.generateSecret(pbeKS); + + ExecutorService executor = Executors.newSingleThreadExecutor(); + Callable task = new Callable() { + @Override + public SecretKey call() throws Exception { + return skf.generateSecret(pbeKS); + } + }; + + // Start testing iteration + try { + for (int i = 0; i <= 1000; i++) { if ((i % 20) == 0) { - // Calling gc() isn't dependable, but doesn't hurt. - // Gives better output in leak cases. + // Calling gc() isn't dependable, but doesn't hurt. + // Gives better output in leak cases. System.gc(); dumpMemoryStats("Iteration " + i); } - } catch (Exception e) { - dumpMemoryStats("\nException seen at iteration " + i); - throw e; + + Future future = executor.submit(task); + + try { + future.get(TIME_OUT, TimeUnit.SECONDS); + } catch (Exception e) { + dumpMemoryStats("\nException seen at iteration " + i); + throw e; + } } + } finally { + // JTReg will time out after two minutes. Proactively release + // the memory to avoid JTReg time-out situation. + dummyData = null; + System.gc(); + dumpMemoryStats("Memory dereference"); + executor.shutdownNow(); } } } diff --git a/jdk/test/com/sun/jndi/ldap/InvalidLdapFilters.java b/jdk/test/com/sun/jndi/ldap/InvalidLdapFilters.java index a28b2d99299..e846964819c 100644 --- a/jdk/test/com/sun/jndi/ldap/InvalidLdapFilters.java +++ b/jdk/test/com/sun/jndi/ldap/InvalidLdapFilters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -171,7 +171,21 @@ public class InvalidLdapFilters { // env.put(Context.SECURITY_CREDENTIALS,"root"); // create initial context - DirContext context = new InitialDirContext(env); + DirContext context = null; + int i = 0; + while (true) { + try { + context = new InitialDirContext(env); + break; + } catch (NamingException ne) { + // may be a connection or read timeout, try again + // no more than 5 times + if (i++ > 5) { + throw new Exception( + "Maybe timeout during context initialization", ne); + } + } + } // searching SearchControls scs = new SearchControls(); diff --git a/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/ContextWithNullProperties.java b/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/ContextWithNullProperties.java index f8706df0caf..edd15ae2338 100644 --- a/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/ContextWithNullProperties.java +++ b/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/ContextWithNullProperties.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,26 +25,21 @@ * @test * @bug 6676075 * @summary RegistryContext (com.sun.jndi.url.rmi.rmiURLContext) coding problem + * @library ../../../../../../java/rmi/testlibrary + * @build TestLibrary + * @run main ContextWithNullProperties */ -import java.rmi.RemoteException; -import java.rmi.registry.LocateRegistry; - -import com.sun.jndi.rmi.registry.*; +import com.sun.jndi.rmi.registry.RegistryContext; +import java.rmi.registry.Registry; public class ContextWithNullProperties { - public static void main(String[] args) throws Exception { - - // Create registry on port 1099 if one is not already running. - try { - LocateRegistry.createRegistry(1099); - } catch (RemoteException e) { - } - + Registry registry = TestLibrary.createRegistryOnUnusedPort(); + int registryPort = TestLibrary.getRegistryPort(registry); System.out.println("Connecting to the default Registry..."); // Connect to the default Registry. // Pass null as the JNDI environment properties (see final argument) - RegistryContext ctx = new RegistryContext(null, -1, null); + RegistryContext ctx = new RegistryContext(null, registryPort, null); } } diff --git a/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/UnbindIdempotent.java b/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/UnbindIdempotent.java index 35753b82d59..692c7fd5cab 100644 --- a/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/UnbindIdempotent.java +++ b/jdk/test/com/sun/jndi/rmi/registry/RegistryContext/UnbindIdempotent.java @@ -1,26 +1,52 @@ +/* + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + /* * @test * @bug 4278121 * @summary Ensure that calling unbind() on an unbound name returns * successfully. + * @library ../../../../../../java/rmi/testlibrary + * @build TestLibrary + * @run main UnbindIdempotent */ -import javax.naming.*; +import java.rmi.registry.Registry; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NameNotFoundException; +import javax.naming.NamingException; public class UnbindIdempotent { public static void main(String[] args) throws Exception { - - // Create registry on port 1099 if one is not already running. - try { - java.rmi.registry.LocateRegistry.createRegistry(1099); - } catch (java.rmi.RemoteException e) { - } - - Context ictx = new InitialContext(); + Registry registry = TestLibrary.createRegistryOnUnusedPort(); + int registryPort = TestLibrary.getRegistryPort(registry); + InitialContext ictx = new InitialContext(); Context rctx; + try { - rctx = (Context)ictx.lookup("rmi://localhost:1099"); + rctx = (Context)ictx.lookup("rmi://localhost:" + Integer.toString(registryPort)); } catch (NamingException e) { // Unable to set up for test. return; diff --git a/jdk/test/java/awt/FontMetrics/StyledSpaceAdvance.java b/jdk/test/java/awt/FontMetrics/StyledSpaceAdvance.java new file mode 100644 index 00000000000..cc5b0a3a207 --- /dev/null +++ b/jdk/test/java/awt/FontMetrics/StyledSpaceAdvance.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7183458 + * @summary Verify advance of space is not overly widened by bold styling. + * @run main StyledSpaceAdvance + */ +import java.awt.Font; +import java.awt.font.FontRenderContext; +import java.awt.geom.Rectangle2D; +import java.util.Locale; + +public class StyledSpaceAdvance { + + static String name = "Gulim"; + + public static void main(String args[]) { + for (int sz=9;sz<18;sz++) { + test(sz); + } + } + + static void test(int sz) { + Font reg = new Font(name, Font.PLAIN, sz); + Font bold = new Font(name, Font.BOLD, sz); + //System.out.println("reg="+reg); + //System.out.println("bold="+bold); + FontRenderContext frc = new FontRenderContext(null, false, false); + if (reg.getFontName(Locale.ENGLISH).equals(name) && + bold.getFontName(Locale.ENGLISH).equals(name)) { + Rectangle2D rb = reg.getStringBounds(" ", frc); + Rectangle2D bb = bold.getStringBounds(" ", frc); + if (bb.getWidth() > rb.getWidth() + 1.01f) { + System.err.println("reg="+reg+" bds = " + rb); + System.err.println("bold="+bold+" bds = " + bb); + throw new RuntimeException("Advance difference too great."); + } + } else { + System.out.println("Skipping test because fonts aren't as expected"); + } + } +} diff --git a/jdk/test/java/awt/Frame/7024749/bug7024749.java b/jdk/test/java/awt/Frame/7024749/bug7024749.java new file mode 100644 index 00000000000..5eb28b6723d --- /dev/null +++ b/jdk/test/java/awt/Frame/7024749/bug7024749.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7024749 + * @summary JDK7 b131---a crash in: Java_sun_awt_windows_ThemeReader_isGetThemeTransitionDurationDefined+0x75 + * @library ../../../regtesthelpers + * @build Util + * @author Oleg Pekhovskiy: area=awt.toplevel + @run main bug7024749 + */ + +import java.awt.*; +import test.java.awt.regtesthelpers.Util; + +public class bug7024749 { + public static void main(String[] args) { + final Frame f = new Frame("F"); + f.setBounds(0,0,200,200); + f.setEnabled(false); // <- disable the top-level + f.setVisible(true); + + Window w = new Window(f); + w.setBounds(300,300,300,300); + w.add(new TextField(20)); + w.setVisible(true); + + Robot robot = Util.createRobot(); + robot.setAutoDelay(1000); + Util.waitForIdle(robot); + robot.delay(1000); + Util.clickOnTitle(f, robot); + Util.waitForIdle(robot); + + f.dispose(); + System.out.println("Test passed!"); + } +} diff --git a/jdk/test/java/awt/Frame/HideMaximized/HideMaximized.java b/jdk/test/java/awt/Frame/HideMaximized/HideMaximized.java new file mode 100644 index 00000000000..9e64b2d97f5 --- /dev/null +++ b/jdk/test/java/awt/Frame/HideMaximized/HideMaximized.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + @test + @bug 7177173 + @summary The maximized state shouldn't be reset upon hiding a frame + @author anthony.petrov@oracle.com: area=awt.toplevel + @run main HideMaximized +*/ + +import java.awt.*; + +public class HideMaximized { + public static void main(String[] args) { + if (!Toolkit.getDefaultToolkit().isFrameStateSupported(Frame.MAXIMIZED_BOTH)) { + // Nothing to test + return; + } + + // First test a decorated frame + Frame frame = new Frame("test"); + test(frame); + + // Now test an undecorated frames + frame = new Frame("undecorated test"); + frame.setUndecorated(true); + test(frame); + } + + private static void test(Frame frame) { + frame.setExtendedState(Frame.MAXIMIZED_BOTH); + frame.setVisible(true); + + try { Thread.sleep(1000); } catch (Exception ex) {} + + if (frame.getExtendedState() != Frame.MAXIMIZED_BOTH) { + throw new RuntimeException("The maximized state has not been applied"); + } + + // This will hide the frame, and also clean things up for safe exiting + frame.dispose(); + + try { Thread.sleep(1000); } catch (Exception ex) {} + + if (frame.getExtendedState() != Frame.MAXIMIZED_BOTH) { + throw new RuntimeException("The maximized state has been reset"); + } + } +} diff --git a/jdk/test/java/io/File/MacPathTest.java b/jdk/test/java/io/File/MacPathTest.java new file mode 100644 index 00000000000..9b310c18dfe --- /dev/null +++ b/jdk/test/java/io/File/MacPathTest.java @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 7130915 + * @summary Tests file path with nfc/nfd forms on MacOSX + * @build MacPathTest + * @run shell MacPathTest.sh + */ + +import java.io.*; +import java.text.*; +import java.util.*; + +public class MacPathTest { + + public static void main(String args[]) throws Throwable { + String osname = System.getProperty("os.name"); + if (!osname.contains("OS X") && !osname.contains("Darwin")) + return; + + // English + test("TestDir_apple", // test dir + "dir_macosx", // dir + "file_macosx"); // file + + // Japanese composite character + test("TestDir_\u30c8\u30a4\u30e4\u30cb\u30ca\u30eb/", + "dir_\u30a4\u30c1\u30b4\u306e\u30b1\u30fc\u30ad", + "file_\u30a4\u30c1\u30b4\u306e\u30b1\u30fc\u30ad"); + + // latin-1 supplementory + test("TestDir_K\u00f6rperlich\u00e4\u00df/", + "dir_Entt\u00e4uschung", + "file_Entt\u00e4uschung"); + + test("TestDir_K\u00f6rperlich\u00e4\u00df/", + "dir_Entt\u00c4uschung", + "file_Entt\u00c4uschung"); + + // Korean syblla + test("TestDir_\uac00\uac01\uac02", + "dir_\uac20\uac21\uac22", + "file_\uacc0\uacc1\uacc2"); + } + + private static void removeAll(File file) throws Throwable { + if (file.isDirectory()) { + for (File f : file.listFiles()) { + removeAll(f); + } + } + file.delete(); + } + + private static boolean equal(Object x, Object y) { + return x == null ? y == null : x.equals(y); + } + + private static boolean match(File target, File src) { + if (target.equals(src)) { + String fname = target.toString(); + System.out.printf(" ->matched : [%s], length=%d%n", fname, fname.length()); + return true; + } + return false; + } + + private static void open_read(String what, File file) throws Throwable { + try (FileInputStream fis = new FileInputStream(file)) { + byte[] bytes = new byte[10]; + fis.read(bytes); + System.out.printf(" %s:%s%n", what, new String(bytes)); + } + } + + private static void test(String testdir, String dname, String fname_nfc) + throws Throwable + { + String fname = null; + String dname_nfd = Normalizer.normalize(dname, Normalizer.Form.NFD); + String fname_nfd = Normalizer.normalize(fname_nfc, Normalizer.Form.NFD); + + System.out.printf("%n%n--------Testing...----------%n"); + File base = new File(testdir); + File dir = new File(base, dname); + File dir_nfd = new File(base, dname_nfd); + File file_nfc = new File(base, fname_nfc); + File file_nfd = new File(base, fname_nfd); + + System.out.printf("base :[%s][len=%d]%n", testdir, testdir.length()); + System.out.printf("dir :[%s][len=%d]%n", dname, dname.length()); + System.out.printf("fname_nfc :[%s][len=%d]%n", fname_nfc, fname_nfc.length()); + System.out.printf("fname_nfd :[%s][len=%d]%n", fname_nfd, fname_nfd.length()); + + fname = file_nfc.toString(); + System.out.printf("file_nfc ->[%s][len=%d]%n", fname, fname.length()); + fname = file_nfd.toString(); + System.out.printf("file_nfd ->[%s][len=%d]%n%n", fname, fname.length()); + + removeAll(base); + dir.mkdirs(); + + fname = dir.toString(); + System.out.printf(":Directory [%s][len=%d] created%n", fname, fname.length()); + + ////////////////////////////////////////////////////////////// + if (!dir.isDirectory() || !dir_nfd.isDirectory()) { + throw new RuntimeException("File.isDirectory() failed"); + } + + ////////////////////////////////////////////////////////////// + // write to via nfd + try (FileOutputStream fos = new FileOutputStream(file_nfd)) { + fos.write('n'); fos.write('f'); fos.write('d'); + } + open_read("read in with nfc (from nfd)", file_nfc); + file_nfd.delete(); + + ////////////////////////////////////////////////////////////// + // write to with nfc + try (FileOutputStream fos = new FileOutputStream(file_nfc)) { + fos.write('n'); fos.write('f'); fos.write('c'); + } + open_read("read in with nfd (from nfc)", file_nfd); + //file_nfc.delete(); + + ////////////////////////////////////////////////////////////// + boolean found_dir = false; + boolean found_file_nfc = false; + boolean found_file_nfd = false; + + for (File f : base.listFiles()) { + fname = f.toString(); + System.out.printf("Found : [%s], length=%d%n", fname, fname.length()); + found_dir |= match(dir, f); + found_file_nfc |= match(file_nfc, f); + found_file_nfd |= match(file_nfd, f); + } + + if (!found_dir || !found_file_nfc || !found_file_nfc) { + throw new RuntimeException("File.equal() failed"); + } + removeAll(base); + } +} diff --git a/jdk/makefiles/mkdemo/jvmti/mapfile-vers b/jdk/test/java/io/File/MacPathTest.sh similarity index 68% rename from jdk/makefiles/mkdemo/jvmti/mapfile-vers rename to jdk/test/java/io/File/MacPathTest.sh index 5d5740463bc..ebba514afcd 100644 --- a/jdk/makefiles/mkdemo/jvmti/mapfile-vers +++ b/jdk/test/java/io/File/MacPathTest.sh @@ -1,12 +1,12 @@ +#! /bin/sh + # -# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. +# published by the Free Software Foundation. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -22,13 +22,18 @@ # or visit www.oracle.com if you need additional information or have any # questions. # +# +OS=`uname -s` +case "$OS" in + Darwin ) ;; + * ) + exit 0 + ;; +esac -# Define public interface for a Java JVMTI agent library (Solaris & Linux). +if [ "x$TESTJAVA" = x ]; then + TESTJAVA=$1; shift + TESTCLASSES=. +fi -SUNWprivate_1.1 { - global: - Agent_OnLoad; - Agent_OnUnload; - local: - *; -}; +export LC_ALL=en_US.UTF-8 ;${TESTJAVA}/bin/java -cp ${TESTCLASSES} MacPathTest diff --git a/jdk/test/java/lang/annotation/loaderLeak/Main.java b/jdk/test/java/lang/annotation/loaderLeak/Main.java index dc835a9dcd0..fceda8195ff 100644 --- a/jdk/test/java/lang/annotation/loaderLeak/Main.java +++ b/jdk/test/java/lang/annotation/loaderLeak/Main.java @@ -57,9 +57,17 @@ public class Main { System.gc(); System.gc(); loader = null; - System.gc(); - System.gc(); - if (c.get() != null) throw new AssertionError(); + + // Might require multiple calls to System.gc() for weak-references + // processing to be complete. If the weak-reference is not cleared as + // expected we will hang here until timed out by the test harness. + while (true) { + System.gc(); + Thread.sleep(20); + if (c.get() == null) { + break; + } + } } } diff --git a/jdk/test/java/net/CookieHandler/TestHttpCookie.java b/jdk/test/java/net/CookieHandler/TestHttpCookie.java index cf93df935e9..98bf852836f 100644 --- a/jdk/test/java/net/CookieHandler/TestHttpCookie.java +++ b/jdk/test/java/net/CookieHandler/TestHttpCookie.java @@ -243,10 +243,6 @@ public class TestHttpCookie { test("set-cookie2: Customer = \"WILE_E_COYOTE\"; Version = \"1\"; Path = \"/acme\"") .n("Customer").v("WILE_E_COYOTE").ver(1).p("/acme"); - // $NAME is reserved; result should be null - test("set-cookie2: $Customer = \"WILE_E_COYOTE\"; Version = \"1\"; Path = \"/acme\"") - .nil(); - // a 'full' cookie test("set-cookie2: Customer=\"WILE_E_COYOTE\"" + ";Version=\"1\"" + diff --git a/jdk/test/java/net/DatagramPacket/ReuseBuf.java b/jdk/test/java/net/DatagramPacket/ReuseBuf.java index a5dc044e523..001ad2fde90 100644 --- a/jdk/test/java/net/DatagramPacket/ReuseBuf.java +++ b/jdk/test/java/net/DatagramPacket/ReuseBuf.java @@ -29,7 +29,6 @@ * @summary DatagramPacket spec needs clarification (reuse buf) */ import java.net.*; -import java.io.*; public class ReuseBuf { static String msgs[] = {"Hello World", "Java", "Good Bye"}; @@ -74,7 +73,7 @@ public class ReuseBuf { DatagramPacket dp = new DatagramPacket(b,b.length); for (int i = 0; i < msgs.length; i++) { ds.send(new DatagramPacket(msgs[i].getBytes(),msgs[i].length(), - InetAddress.getByName("LocalHost"), + InetAddress.getLocalHost(), port)); ds.receive(dp); if (!msgs[i].equals(new String(dp.getData(), dp.getOffset(), dp.getLength()))) { diff --git a/jdk/test/java/net/HttpCookie/IllegalCookieNameTest.java b/jdk/test/java/net/HttpCookie/IllegalCookieNameTest.java new file mode 100644 index 00000000000..235db2bdf55 --- /dev/null +++ b/jdk/test/java/net/HttpCookie/IllegalCookieNameTest.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 7183292 + */ +import java.net.*; +import java.util.*; +import java.io.*; +import com.sun.net.httpserver.*; + +public class IllegalCookieNameTest { + public static void main(String[] args) throws IOException { + HttpServer s = null; + try { + InetSocketAddress addr = new InetSocketAddress(0); + s = HttpServer.create(addr, 10); + s.createContext("/", new HHandler()); + s.start(); + String u = "http://127.0.0.1:" + s.getAddress().getPort() + "/"; + CookieHandler.setDefault(new TestCookieHandler()); + URL url = new URL(u); + HttpURLConnection c = (HttpURLConnection) url.openConnection(); + c.getHeaderFields(); + System.out.println ("OK"); + } finally { + s.stop(1); + } + } +} + +class TestCookieHandler extends CookieHandler { + @Override + public Map> get(URI uri, Map> requestHeaders) { + return new HashMap>(); + } + + @Override + public void put(URI uri, Map> responseHeaders) { + } +} + +class HHandler implements HttpHandler { + public void handle (HttpExchange e) { + try { + Headers h = e.getResponseHeaders(); + h.set ("Set-Cookie", "domain=; expires=Mon, 01-Jan-1990 00:00:00 GMT; path=/; domain=.foo.com"); + e.sendResponseHeaders(200, -1); + e.close(); + } catch (Exception ex) { + System.out.println (ex); + } + } +} diff --git a/jdk/test/java/nio/channels/AsynchronousSocketChannel/Leaky.java b/jdk/test/java/nio/channels/AsynchronousSocketChannel/Leaky.java index 39b50187242..776542bf164 100644 --- a/jdk/test/java/nio/channels/AsynchronousSocketChannel/Leaky.java +++ b/jdk/test/java/nio/channels/AsynchronousSocketChannel/Leaky.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,9 +22,9 @@ */ /* @test - * @bug 4607272 6999915 + * @bug 4607272 6999915 7185340 * @summary Unit test for AsynchronousSocketChannel - * @run main/othervm -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=64m Leaky + * @run main/othervm -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=75m Leaky */ import java.nio.ByteBuffer; diff --git a/jdk/test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java b/jdk/test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java index 8e6251d953c..3591e83451e 100644 --- a/jdk/test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java +++ b/jdk/test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java @@ -22,10 +22,11 @@ */ /* @test - * @bug 4527345 7026376 + * @bug 4527345 7026376 6633549 * @summary Unit test for DatagramChannel's multicast support * @build MulticastSendReceiveTests NetworkConfiguration * @run main MulticastSendReceiveTests + * @run main/othervm -Djava.net.preferIPv4Stack=true MulticastSendReceiveTests */ import java.nio.ByteBuffer; @@ -186,6 +187,10 @@ public class MulticastSendReceiveTests { id = sendDatagram(source, nif, group, port); receiveDatagram(dc, source, id); } catch (UnsupportedOperationException x) { + String os = System.getProperty("os.name"); + // Exclude-mode filtering supported on these platforms so UOE should never be thrown + if (os.equals("SunOS") || os.equals("Linux")) + throw x; System.out.println("Exclude-mode filtering not supported!"); } @@ -212,6 +217,10 @@ public class MulticastSendReceiveTests { id = sendDatagram(source, nif, group, port); receiveDatagram(dc, source, id); } catch (UnsupportedOperationException x) { + String os = System.getProperty("os.name"); + // Include-mode filtering supported on these platforms so UOE should never be thrown + if (os.equals("SunOS") || os.equals("Linux")) + throw x; System.out.println("Include-mode filtering not supported!"); } } diff --git a/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java b/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java index e0f18084744..ce455dd2ed1 100644 --- a/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java +++ b/jdk/test/java/nio/charset/Charset/NIOCharsetAvailabilityTest.java @@ -68,6 +68,11 @@ public class NIOCharsetAvailabilityTest { charsets.remove(Class.forName("sun.nio.cs.ext.ISO2022")); charsets.remove(Class.forName("sun.nio.cs.ext.ISO2022_CN_GB")); charsets.remove(Class.forName("sun.nio.cs.ext.ISO2022_CN_CNS")); + charsets.remove(Class.forName("sun.nio.cs.ext.JIS_X_0208_Solaris")); + charsets.remove(Class.forName("sun.nio.cs.ext.JIS_X_0208_MS932")); + charsets.remove(Class.forName("sun.nio.cs.ext.JIS_X_0212_MS5022X")); + charsets.remove(Class.forName("sun.nio.cs.ext.JIS_X_0212_Solaris")); + charsets.remove(Class.forName("sun.nio.cs.ext.JIS_X_0208_MS5022X")); // report the charsets that are implemented but not available iter = charsets.iterator(); diff --git a/jdk/test/java/nio/file/Path/MacPathTest.java b/jdk/test/java/nio/file/Path/MacPathTest.java new file mode 100644 index 00000000000..3bfa14a682c --- /dev/null +++ b/jdk/test/java/nio/file/Path/MacPathTest.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 7130915 + * @summary Tests file path with nfc/nfd forms on MacOSX + * @library ../ + * @build MacPathTest + * @run shell MacPathTest.sh + */ + +import java.nio.file.*; +import java.nio.file.attribute.*; +import java.text.*; +import java.util.*; +import java.util.regex.*; + +public class MacPathTest { + + public static void main(String args[]) throws Throwable { + String osname = System.getProperty("os.name"); + if (!osname.contains("OS X") && !osname.contains("Darwin")) + return; + System.out.printf("sun.jnu.encoding=%s, file.encoding=%s%n", + System.getProperty("file.encoding"), + System.getProperty("sun.jnu.encoding")); + // English + test("TestDir_apple", // test dir + "dir_macosx", // dir + "file_macosx"); // file + + // Japanese composite character + test("TestDir_\u30c8\u30a4\u30e4\u30cb\u30ca\u30eb/", + "dir_\u30a4\u30c1\u30b4\u306e\u30b1\u30fc\u30ad", + "file_\u30a4\u30c1\u30b4\u306e\u30b1\u30fc\u30ad"); + + // latin-1 supplementory + test("TestDir_K\u00f6rperlich\u00e4\u00df/", + "dir_Entt\u00e4uschung", + "file_Entt\u00e4uschung"); + + test("TestDir_K\u00f6rperlich\u00e4\u00df/", + "dir_Entt\u00c4uschung", + "file_Entt\u00c4uschung"); + + // Korean syblla + test("TestDir_\uac00\uac01\uac02", + "dir_\uac20\uac21\uac22", + "file_\uacc0\uacc1\uacc2"); + } + + private static boolean equal(Object x, Object y) { + return x == null ? y == null : x.equals(y); + } + + private static boolean match(Path target, Path src) { + String fname = target.toString(); + System.out.printf(" --> Trying [%s], length=%d...", fname, fname.length()); + if (target.equals(src)) { + System.out.println(" MATCHED!"); + return true; + } else { + System.out.println(" NOT MATCHED!"); + } + return false; + } + + private static void test(String testdir, String dname, String fname_nfc) + throws Throwable + { + String fname = null; + String dname_nfd = Normalizer.normalize(dname, Normalizer.Form.NFD); + String fname_nfd = Normalizer.normalize(fname_nfc, Normalizer.Form.NFD); + + System.out.printf("%n%n--------Testing...----------%n"); + Path bpath = Paths.get(testdir); + Path dpath = Paths.get(testdir, dname); + Path dpath_nfd = Paths.get(testdir, dname_nfd); + Path fpath_nfc = Paths.get(testdir, fname_nfc); + Path fpath_nfd = Paths.get(testdir, fname_nfd); + + if (Files.exists(bpath)) + TestUtil.removeAll(bpath); + Files.createDirectories(dpath); + + fname = dpath.toString(); + System.out.printf(":Directory [%s][len=%d] created%n", fname, fname.length()); + + ////////////////////////////////////////////////////////////// + if (!Files.isDirectory(dpath) || !Files.isDirectory(dpath_nfd)) { + throw new RuntimeException("Files.isDirectory(...) failed"); + } + + ////////////////////////////////////////////////////////////// + // write out with nfd, read in with nfc + case + Files.write(fpath_nfd, new byte[] { 'n', 'f', 'd'}); + System.out.println(" read in with nfc (from nfd):" + new String(Files.readAllBytes(fpath_nfc))); + + // check attrs with nfc + case + Set pfp = Files.getPosixFilePermissions(fpath_nfd); + if (!equal(pfp, Files.getPosixFilePermissions(fpath_nfc)) ) { + throw new RuntimeException("Files.getPosixfilePermission(...) failed"); + } + Files.delete(fpath_nfd); + + // write out with nfc, read in with nfd + case + Files.write(fpath_nfc, new byte[] { 'n', 'f', 'c'}); + System.out.println(" read in with nfd (from nfc):" + new String(Files.readAllBytes(fpath_nfd))); + + // check attrs with nfc + case + pfp = Files.getPosixFilePermissions(fpath_nfc); + if (!equal(pfp, Files.getPosixFilePermissions(fpath_nfd))) { + throw new RuntimeException("Files.getPosixfilePermission(...) failed"); + } + ////////////////////////////////////////////////////////////// + boolean found_dir = false; + boolean found_file_nfc = false; + boolean found_file_nfd = false; + try (DirectoryStream stream = Files.newDirectoryStream(bpath)) { + for (Path path: stream) { + fname = path.toString(); + System.out.printf("Found : [%s], length=%d%n", fname, fname.length()); + found_dir |= match(dpath, path); + found_file_nfc |= match(fpath_nfc, path); + found_file_nfd |= match(fpath_nfd, path); + } + } + if (!found_dir || !found_file_nfc || !found_file_nfd) { + throw new RuntimeException("File.equal() failed"); + } + // glob + String glob = "*" + fname_nfd.substring(2); // remove leading "FI" from "FILE..." + System.out.println("glob=" + glob); + boolean globmatched = false; + try (DirectoryStream stream = Files.newDirectoryStream(bpath, glob)) { + for (Path path: stream) { + fname = path.toString(); + System.out.printf("PathMatch : [%s], length=%d%n", fname, fname.length()); + globmatched |= match(fpath_nfc, path); + } + } + if (!globmatched) { + //throw new RuntimeException("path matcher failed"); + // it appears we have a regex.anon_eq bug in hangul syllable handling + System.out.printf("pathmatcher failed, glob=[%s]%n", glob); + System.out.printf(" -> fname_nfd.matches(fname_nfc)=%b%n", + Pattern.compile(fname_nfd, Pattern.CANON_EQ) + .matcher(fname_nfc) + .matches()); + System.out.printf(" -> fname_nfc.matches(fname_nfd)=%b%n", + Pattern.compile(fname_nfc, Pattern.CANON_EQ) + .matcher(fname_nfd) + .matches()); + } + TestUtil.removeAll(bpath); + } +} diff --git a/jdk/makefiles/sun/security/pkcs11/FILES_c.gmk b/jdk/test/java/nio/file/Path/MacPathTest.sh similarity index 64% rename from jdk/makefiles/sun/security/pkcs11/FILES_c.gmk rename to jdk/test/java/nio/file/Path/MacPathTest.sh index 328547a3f4a..e81c62ae906 100644 --- a/jdk/makefiles/sun/security/pkcs11/FILES_c.gmk +++ b/jdk/test/java/nio/file/Path/MacPathTest.sh @@ -1,12 +1,12 @@ +#! /bin/sh + # -# Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. +# published by the Free Software Foundation. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -22,20 +22,18 @@ # or visit www.oracle.com if you need additional information or have any # questions. # +# +OS=`uname -s` +case "$OS" in + Darwin ) ;; + * ) + exit 0 + ;; +esac -FILES_c = \ - j2secmod.c \ - j2secmod_md.c \ - p11_convert.c \ - p11_crypt.c \ - p11_digest.c \ - p11_dual.c \ - p11_general.c \ - p11_keymgmt.c \ - p11_mutex.c \ - p11_objmgmt.c \ - p11_sessmgmt.c \ - p11_sign.c \ - p11_util.c \ - p11_md.c +if [ "x$TESTJAVA" = x ]; then + TESTJAVA=$1; shift + TESTCLASSES=. +fi +export LC_ALL=en_US.UTF-8; ${TESTJAVA}/bin/java -cp ${TESTCLASSES} MacPathTest diff --git a/jdk/test/java/rmi/Naming/LookupNameWithColon.java b/jdk/test/java/rmi/Naming/LookupNameWithColon.java index 15b9663ee8e..e3865fd1239 100644 --- a/jdk/test/java/rmi/Naming/LookupNameWithColon.java +++ b/jdk/test/java/rmi/Naming/LookupNameWithColon.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,10 +25,13 @@ * @bug 4387038 * @summary Ensure that java.rmi.Naming.lookup functions properly for names * containing embedded ':' characters. + * + * @library ../testlibrary + * @build TestLibrary + * @run main LookupNameWithColon */ import java.rmi.Naming; -import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class LookupNameWithColon { @@ -38,15 +41,12 @@ public class LookupNameWithColon { "multiple:colons:in:name" }; - Registry reg; - try { - reg = LocateRegistry.createRegistry(Registry.REGISTRY_PORT); - } catch (Exception ex) { - reg = LocateRegistry.getRegistry(); - } + Registry reg = TestLibrary.createRegistryOnUnusedPort(); + int port = TestLibrary.getRegistryPort(reg); + for (int i = 0; i < names.length; i++) { reg.rebind(names[i], reg); - Naming.lookup("rmi://localhost/" + names[i]); + Naming.lookup("rmi://localhost:" + port + "/" + names[i]); } } } diff --git a/jdk/test/java/rmi/Naming/RmiIsNoScheme.java b/jdk/test/java/rmi/Naming/RmiIsNoScheme.java index 9edebe33aae..865a07c995d 100644 --- a/jdk/test/java/rmi/Naming/RmiIsNoScheme.java +++ b/jdk/test/java/rmi/Naming/RmiIsNoScheme.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,9 +39,6 @@ import java.rmi.*; import java.rmi.registry.*; public class RmiIsNoScheme implements Remote, Serializable { - - private static final int REGISTRY_PORT = 2002; - private RmiIsNoScheme() {} public static void main(String[] args) { @@ -49,10 +46,11 @@ public class RmiIsNoScheme implements Remote, Serializable { System.err.println("\nRegression test for bug 4626311\n"); try { - LocateRegistry.createRegistry(REGISTRY_PORT); - Naming.rebind("//:" + REGISTRY_PORT + "/RmiIsNoScheme", + Registry registry = TestLibrary.createRegistryOnUnusedPort(); + int registryPort = TestLibrary.getRegistryPort(registry); + Naming.rebind("//:" + registryPort + "/RmiIsNoScheme", new RmiIsNoScheme()); - String name = Naming.list("//:" + REGISTRY_PORT)[0]; + String name = Naming.list("//:" + registryPort)[0]; System.err.println("name = " + name); if (name.startsWith("rmi:", 0) == false) { System.err.println("TEST PASSED: rmi scheme not present"); diff --git a/jdk/test/java/rmi/Naming/UnderscoreHost.java b/jdk/test/java/rmi/Naming/UnderscoreHost.java index 1dd81c3f247..0d7375693c4 100644 --- a/jdk/test/java/rmi/Naming/UnderscoreHost.java +++ b/jdk/test/java/rmi/Naming/UnderscoreHost.java @@ -1,37 +1,37 @@ -/* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ + /* + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ -/* - * @test - * @bug 5083594 - * @summary Ensure that Naming.java correctly parses host names with '_' in - * them. - * @author Vinod Johnson - * - * @library ../testlibrary - * @build TestLibrary - * @build UnderscoreHost UnderscoreHost_Stub - * @run main/othervm UnderscoreHost + /* + * @test + * @bug 5083594 + * @summary Ensure that Naming.java correctly parses host names with '_' in + * them. + * @author Vinod Johnson + * + * @library ../testlibrary + * @build TestLibrary + * @build UnderscoreHost UnderscoreHost_Stub + * @run main/othervm UnderscoreHost */ import java.io.IOException; @@ -77,11 +77,12 @@ public class UnderscoreHost extends UnicastRemoteObject implements Remote { try { HostVerifyingSocketFactory hvf = new HostVerifyingSocketFactory(); RMISocketFactory.setSocketFactory(hvf); - Registry r = LocateRegistry.createRegistry(Registry.REGISTRY_PORT); + Registry r = TestLibrary.createRegistryOnUnusedPort(); + int port = TestLibrary.getRegistryPort(r); t = new UnderscoreHost(); r.rebind(NAME, t); Naming.lookup("rmi://" + HOSTNAME + - ":" + Registry.REGISTRY_PORT + "/" + NAME); + ":" + port + "/" + NAME); /* * This test is coded to pass whether java.net.URI obeys * RFC 2396 or RFC 3986 (see 5085902, 6394131, etc.). diff --git a/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java b/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java index 8ac8bdb8294..0d367974b2e 100644 --- a/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java +++ b/jdk/test/java/rmi/Naming/legalRegistryNames/LegalRegistryNames.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,7 +45,9 @@ import java.util.Vector; /** * Ensure that all legal forms of Naming URLs operate with the - * java.rmi.Naming interface + * java.rmi.Naming interface. This test requires using the default RMI Registry + * port as it tests all of the RMI naming URL's, including the ones which do not + * take a port (and therefore uses the default port). */ public class LegalRegistryNames extends UnicastRemoteObject implements Legal diff --git a/jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy b/jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy index 078b8a76a8d..f33bc8511f5 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/checkActivateRef/security.policy @@ -29,11 +29,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // Needed to create an activation group permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy b/jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy index b6e691b60d6..e13da7fa21b 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/checkAnnotations/security.policy @@ -21,11 +21,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // required for test to create an ActivationGroup permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy b/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy index 8b7ec7c17ab..b66dd8c464d 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/checkImplClassLoader/security.policy @@ -32,11 +32,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // required for test to create an ActivationGroup permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy b/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy index d1d1b626811..f78e1068d7d 100644 --- a/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/checkRegisterInLog/security.policy @@ -21,17 +21,18 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // Needed to create an activation group permission java.lang.RuntimePermission "setFactory"; // allow exporting of remote objects on an arbitrary port. - permission java.net.SocketPermission "*:1024-", "connect,accept"; + permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; // allow exporting object with non-public remote interface permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe"; diff --git a/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy b/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy index e6178a5b213..f78e1068d7d 100644 --- a/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/security.policy @@ -21,11 +21,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // Needed to create an activation group permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy index e4948a96f08..657881b337e 100644 --- a/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/downloadParameterClass/security.policy @@ -31,11 +31,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // allow exporting of remote objects on an arbitrary port. permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; diff --git a/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy b/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy index ede8bd032fe..3d1c7693eee 100644 --- a/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/elucidateNoSuchMethod/security.policy @@ -30,11 +30,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // Needed to create an activation group permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/security.policy b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/security.policy index c5b33d9d8a1..7eb3072002d 100644 --- a/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/extLoadedImpl/security.policy @@ -17,11 +17,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // allow exporting of remote objects on an arbitrary port. permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; diff --git a/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy b/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy index e6178a5b213..f78e1068d7d 100644 --- a/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/forceLogSnapshot/security.policy @@ -21,11 +21,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // Needed to create an activation group permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy b/jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy index d1d1b626811..f78e1068d7d 100644 --- a/jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/inactiveGroup/security.policy @@ -21,17 +21,18 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // Needed to create an activation group permission java.lang.RuntimePermission "setFactory"; // allow exporting of remote objects on an arbitrary port. - permission java.net.SocketPermission "*:1024-", "connect,accept"; + permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; // allow exporting object with non-public remote interface permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe"; diff --git a/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java b/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java index 03d3c173896..eee264f2985 100644 --- a/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java +++ b/jdk/test/java/rmi/activation/Activatable/lookupActivationSystem/LookupActivationSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,7 +58,7 @@ public class LookupActivationSystem implements Remote, Serializable { System.err.println("look up activation system"); Registry rmidRegistry = - LocateRegistry.getRegistry(ActivationSystem.SYSTEM_PORT); + LocateRegistry.getRegistry(rmid.getPort()); ActivationSystem system = (ActivationSystem) rmidRegistry.lookup(NAME); diff --git a/jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy b/jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy index c08ff330c4f..7972e5c5955 100644 --- a/jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/nestedActivate/security.policy @@ -21,17 +21,18 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // Needed to create an activation group permission java.lang.RuntimePermission "setFactory"; // allow exporting of remote objects on an arbitrary port. - permission java.net.SocketPermission "*:1024-", "connect,accept"; + permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; // allow exporting of non-public remote interface permission java.rmi.RMIPermission "exportRemoteInterface.ActivateMe"; diff --git a/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy b/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy index 63f23067649..99feddab0c8 100644 --- a/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/nonExistentActivatable/security.policy @@ -21,11 +21,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // Needed to create an activation group permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy b/jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy index fe05fcad444..881781b1cc1 100644 --- a/jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/restartCrashedService/security.policy @@ -21,11 +21,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // Needed to create an activation group permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy b/jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy index a96acd77295..0e70b29b694 100644 --- a/jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/restartLatecomer/security.policy @@ -21,11 +21,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // Used in remote impl of Activator.inactive; by the method // "restartThread.dispose()"when it calls thread.interrupt() diff --git a/jdk/test/java/rmi/activation/Activatable/restartService/security.policy b/jdk/test/java/rmi/activation/Activatable/restartService/security.policy index a96acd77295..0e70b29b694 100644 --- a/jdk/test/java/rmi/activation/Activatable/restartService/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/restartService/security.policy @@ -21,11 +21,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // Used in remote impl of Activator.inactive; by the method // "restartThread.dispose()"when it calls thread.interrupt() diff --git a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy index 6f393613689..693ce51a1a9 100644 --- a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/security.policy @@ -21,11 +21,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // allow exporting of remote objects on an arbitrary port. permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; diff --git a/jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy b/jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy index ff2ecca4f44..749e1425aa5 100644 --- a/jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy +++ b/jdk/test/java/rmi/activation/Activatable/unregisterInactive/security.policy @@ -21,11 +21,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // Needed to create an activation group permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/security.policy b/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/security.policy index b6e691b60d6..e13da7fa21b 100644 --- a/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/security.policy +++ b/jdk/test/java/rmi/activation/ActivateFailedException/activateFails/security.policy @@ -21,11 +21,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // required for test to create an ActivationGroup permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/activation/ActivationSystem/activeGroup/security.policy b/jdk/test/java/rmi/activation/ActivationSystem/activeGroup/security.policy index a9431dc456c..fe0112569ef 100644 --- a/jdk/test/java/rmi/activation/ActivationSystem/activeGroup/security.policy +++ b/jdk/test/java/rmi/activation/ActivationSystem/activeGroup/security.policy @@ -15,11 +15,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // test needs to export rmid and communicate with objects on arbitrary ports permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; diff --git a/jdk/test/java/rmi/activation/ActivationSystem/modifyDescriptor/security.policy b/jdk/test/java/rmi/activation/ActivationSystem/modifyDescriptor/security.policy index b6e691b60d6..e13da7fa21b 100644 --- a/jdk/test/java/rmi/activation/ActivationSystem/modifyDescriptor/security.policy +++ b/jdk/test/java/rmi/activation/ActivationSystem/modifyDescriptor/security.policy @@ -21,11 +21,12 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // required for test to create an ActivationGroup permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/StubClassesPermitted.java b/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/StubClassesPermitted.java index eb4e4f06ce2..cc7810407eb 100644 --- a/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/StubClassesPermitted.java +++ b/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/StubClassesPermitted.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -61,7 +61,7 @@ public class StubClassesPermitted extends Activatable implements Runnable, CanCreateStubs { public static boolean sameGroup = false; - + private static int registryPort = -1; private static CanCreateStubs canCreateStubs = null; private static Registry registry = null; @@ -76,8 +76,8 @@ public class StubClassesPermitted try { TestLibrary.suggestSecurityManager("java.lang.SecurityManager"); - registry = java.rmi.registry.LocateRegistry. - createRegistry(TestLibrary.REGISTRY_PORT); + registry = TestLibrary.createRegistryOnUnusedPort(); + registryPort = TestLibrary.getRegistryPort(registry); // must run with java.lang.SecurityManager or the test // result will be nullified if running with a build where @@ -192,7 +192,7 @@ public class StubClassesPermitted // obtain reference to the test registry registry = java.rmi.registry.LocateRegistry. - getRegistry(TestLibrary.REGISTRY_PORT); + getRegistry(registryPort); } /** diff --git a/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/security.policy b/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/security.policy index b6e691b60d6..b6f6ef254bd 100644 --- a/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/security.policy +++ b/jdk/test/java/rmi/activation/ActivationSystem/stubClassesPermitted/security.policy @@ -21,15 +21,22 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // required for test to create an ActivationGroup permission java.lang.RuntimePermission "setFactory"; + // required for test to get the registry port + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.registry"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.server"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.tcp"; + // test needs to export rmid and communicate with objects on arbitrary ports permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; }; diff --git a/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/UnregisterGroup.java b/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/UnregisterGroup.java index 02cfe29c4d6..a2b4076495a 100644 --- a/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/UnregisterGroup.java +++ b/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/UnregisterGroup.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,36 +45,29 @@ import java.rmi.registry.*; import java.util.Properties; class Callback extends UnicastRemoteObject implements CallbackInterface { + public int num_deactivated = 0; - public static int num_deactivated = 0; + public Callback() throws RemoteException { super(); } - public Callback() throws RemoteException { super(); } - - public void inc() throws RemoteException { - incNumDeactivated(); - } - - public synchronized int getNumDeactivated() throws RemoteException { - return(num_deactivated); - } - - public synchronized void incNumDeactivated() { - num_deactivated++; - } + public synchronized void inc() throws RemoteException { + num_deactivated++; + } + public synchronized int getNumDeactivated() throws RemoteException { + return num_deactivated; + } } public class UnregisterGroup extends Activatable implements ActivateMe, Runnable { - private static Exception exception = null; private static String error = null; private static boolean done = false; private static ActivateMe lastResortExitObj = null; private static final int NUM_OBJECTS = 10; - private static int PORT = 2006; + private static int registryPort = -1; public UnregisterGroup(ActivationID id, MarshalledObject mobj) throws Exception @@ -104,36 +97,47 @@ public class UnregisterGroup } /** - * Thread to deactivate object. First attempts to make object - * inactive (via the inactive method). If that fails (the - * object may still have pending/executing calls), then - * unexport the object forcibly. + * Thread to deactivate object. Get the callback object from the registry, + * call inc() on it, and finally call deactivate(). The call to + * deactivate() causes this JVM to be destroyed, so anything following + * might not be executed. */ public void run() { + String regPortStr = System.getProperty("unregisterGroup.port"); + int regPort = -1; - ActivationLibrary.deactivate(this, getID()); - System.err.println("\tActivationLibrary.deactivate returned"); + if (regPortStr != null) { + regPort = Integer.parseInt(regPortStr); + } try { CallbackInterface cobj = - (CallbackInterface)Naming.lookup("//:" + PORT + "/Callback"); + (CallbackInterface)Naming.lookup("//:" + regPort + "/Callback"); cobj.inc(); + System.err.println("cobj.inc called and returned ok"); } catch (Exception e) { System.err.println("cobj.inc exception"); e.printStackTrace(); } + ActivationLibrary.deactivate(this, getID()); + System.err.println("\tActivationLibrary.deactivate returned"); } - public static void main(String[] args) { - - Registry registry; - + public static void main(String[] args) throws RemoteException { System.err.println("\nRegression test for bug 4134233\n"); - TestLibrary.suggestSecurityManager("java.rmi.RMISecurityManager"); RMID rmid = null; + // Create registry and export callback object so they're + // available to the objects that are activated below. + // TODO: see if we can use RMID's registry instead of + // creating one here. + Registry registry = TestLibrary.createRegistryOnUnusedPort(); + registryPort = TestLibrary.getRegistryPort(registry); + Callback robj = new Callback(); + registry.rebind("Callback", robj); + try { RMID.removeLog(); rmid = RMID.createRMID(); @@ -149,8 +153,7 @@ public class UnregisterGroup TestParams.defaultGroupPolicy); p.put("java.security.manager", TestParams.defaultSecurityManager); - - //final int NUM_OBJECTS = 10; + p.put("unregisterGroup.port", Integer.toString(registryPort)); Thread t = new Thread() { public void run () { @@ -219,8 +222,6 @@ public class UnregisterGroup } else { System.err.println("Test passed"); } - - } catch (Exception e) { TestLibrary.bomb("test failed", e); } finally { @@ -233,12 +234,6 @@ public class UnregisterGroup // Wait for the object deactivation to take place first try { - - // create reg and export callback object - registry = LocateRegistry.createRegistry(PORT); - Callback robj = new Callback(); - registry.bind("Callback", robj); - //get the callback object int maxwait=30; int nd = robj.getNumDeactivated(); diff --git a/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/group.security.policy b/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/group.security.policy index 440910b3732..e596baae478 100644 --- a/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/group.security.policy +++ b/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/group.security.policy @@ -7,4 +7,5 @@ grant { // test needs to communicate with the activation system permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + permission java.util.PropertyPermission "unregisterGroup.port", "read"; }; diff --git a/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/rmid.security.policy b/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/rmid.security.policy index 0e43c5d37ab..fa1bc1e9f83 100644 --- a/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/rmid.security.policy +++ b/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/rmid.security.policy @@ -1,4 +1,5 @@ grant { permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.manager=default"; permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=*"; + permission com.sun.rmi.rmid.ExecOptionPermission "-DunregisterGroup.port=*"; }; diff --git a/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/security.policy b/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/security.policy index b6e691b60d6..d1828e5f3ed 100644 --- a/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/security.policy +++ b/jdk/test/java/rmi/activation/ActivationSystem/unregisterGroup/security.policy @@ -21,15 +21,22 @@ grant { permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; - // used by TestLibrary to determine test environment + // used by TestLibrary to determine test environment permission java.util.PropertyPermission "test.classes", "read"; permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // required for test to create an ActivationGroup permission java.lang.RuntimePermission "setFactory"; // test needs to export rmid and communicate with objects on arbitrary ports permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; + + // required for test to get the registry port + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.registry"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.server"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.tcp"; }; diff --git a/jdk/test/java/rmi/activation/CommandEnvironment/SetChildEnv.java b/jdk/test/java/rmi/activation/CommandEnvironment/SetChildEnv.java index cbee67ca4cb..d89450d6151 100644 --- a/jdk/test/java/rmi/activation/CommandEnvironment/SetChildEnv.java +++ b/jdk/test/java/rmi/activation/CommandEnvironment/SetChildEnv.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,31 +53,37 @@ public class SetChildEnv public static void main(String argv[]) throws Exception { + int runningPort = TestLibrary.getUnusedRandomPort(); + System.out.println("java.compiler=" + System.getProperty("java.compiler")); // don't embed spaces in any of the test args/props, because // they won't be parsed properly - runwith (new String[0], new String[0]); + runwith (new String[0], new String[0], runningPort); runwith ( new String[] { "-verbosegc" }, new String[] { "foo.bar=SetChildEnvTest", - "sun.rmi.server.doSomething=true" } + "sun.rmi.server.doSomething=true" }, + runningPort ); runwith ( new String[] { }, - new String[] { "parameter.count=zero" } + new String[] { "parameter.count=zero" }, + runningPort ); runwith ( new String[] { "-Xmx32m" }, - new String[] { } + new String[] { }, + runningPort ); } private static void runwith( String[] params, // extra args - String[] props // extra system properties + String[] props, // extra system properties + int port // port on which to communicate ) throws Exception { @@ -89,7 +95,8 @@ public class SetChildEnv RMID.removeLog(); RMID rmid = RMID.createRMID(watcher.otherEnd(), watcher.otherEnd(), - true); // debugExec turned on + true, // debugExec turned on + true, port); rmid.start(); @@ -195,7 +202,7 @@ public class SetChildEnv actsys.unregisterGroup(gid); Thread.sleep(5000); - rmid.destroy(); + ActivationLibrary.rmidCleanup(rmid); } public static class DebugExecWatcher @@ -243,7 +250,19 @@ public class SetChildEnv System.err.println(line); } } catch (IOException e) { - e.printStackTrace(); + /* During termination of distant rmid, StreamPipes will be broken when + * distant vm terminates. A "Pipe broken" exception is expected because + * DebugExecWatcher points to the same streams as StreamPipes used by RMID. + * If we get this exception. We just terminate the thread. + */ + if (e.getMessage().equals("Pipe broken")) { + try { + str.close(); + } catch (IOException ioe) {} + } + else { + e.printStackTrace(); + } } } } diff --git a/jdk/test/java/rmi/activation/CommandEnvironment/security.policy b/jdk/test/java/rmi/activation/CommandEnvironment/security.policy index 14df213a3c0..fd455a6cd43 100644 --- a/jdk/test/java/rmi/activation/CommandEnvironment/security.policy +++ b/jdk/test/java/rmi/activation/CommandEnvironment/security.policy @@ -27,6 +27,7 @@ grant { permission java.util.PropertyPermission "test.src", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; // required for test to create an ActivationGroup permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java index 70e98c61a36..345aca33a60 100644 --- a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java +++ b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/InheritedChannelNotServerSocket.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,8 +31,7 @@ * @library ../../testlibrary * @build RMID ActivationLibrary * @build InheritedChannelNotServerSocket - * @run main/othervm/timeout=240 -Djava.rmi.activation.port=5398 - * InheritedChannelNotServerSocket + * @run main/othervm/timeout=240 InheritedChannelNotServerSocket */ import java.io.IOException; @@ -55,8 +54,6 @@ import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; public class InheritedChannelNotServerSocket { - - private static final int PORT = 5398; private static final Object lock = new Object(); private static boolean notified = false; @@ -79,7 +76,8 @@ public class InheritedChannelNotServerSocket { public static void main(String[] args) throws Exception { System.err.println("\nRegression test for bug 6261402\n"); - + System.setProperty("java.rmi.activation.port", + Integer.toString(TestLibrary.INHERITEDCHANNELNOTSERVERSOCKET_ACTIVATION_PORT)); RMID rmid = null; Callback obj = null; try { @@ -91,7 +89,8 @@ public class InheritedChannelNotServerSocket { Callback proxy = (Callback) UnicastRemoteObject.exportObject(obj, 0); Registry registry = - LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT); + LocateRegistry.createRegistry( + TestLibrary.INHERITEDCHANNELNOTSERVERSOCKET_REGISTRY_PORT); registry.bind("Callback", proxy); /* @@ -99,7 +98,8 @@ public class InheritedChannelNotServerSocket { */ System.err.println("start rmid with inherited channel"); RMID.removeLog(); - rmid = RMID.createRMID(System.out, System.err, true, true, PORT); + rmid = RMID.createRMID(System.out, System.err, true, true, + TestLibrary.INHERITEDCHANNELNOTSERVERSOCKET_ACTIVATION_PORT); rmid.addOptions(new String[]{ "-Djava.nio.channels.spi.SelectorProvider=" + "InheritedChannelNotServerSocket$SP"}); @@ -122,7 +122,7 @@ public class InheritedChannelNotServerSocket { if (obj != null) { UnicastRemoteObject.unexportObject(obj, true); } - ActivationLibrary.rmidCleanup(rmid, PORT); + ActivationLibrary.rmidCleanup(rmid); } } @@ -175,7 +175,7 @@ public class InheritedChannelNotServerSocket { try { System.err.println("notify test..."); Registry registry = - LocateRegistry.getRegistry(TestLibrary.REGISTRY_PORT); + LocateRegistry.getRegistry(TestLibrary.INHERITEDCHANNELNOTSERVERSOCKET_REGISTRY_PORT); Callback obj = (Callback) registry.lookup("Callback"); obj.notifyTest(); } catch (NotBoundException nbe) { diff --git a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java index 170e1716d77..008b391acc4 100644 --- a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java +++ b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,8 @@ * @library ../../testlibrary * @build RMID ActivationLibrary * @build RmidViaInheritedChannel - * @run main/othervm/timeout=240 -Djava.rmi.activation.port=5398 RmidViaInheritedChannel + * @build TestLibrary + * @run main/othervm/timeout=240 RmidViaInheritedChannel */ import java.io.IOException; @@ -48,8 +49,6 @@ import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; public class RmidViaInheritedChannel implements Callback { - - private static final int PORT = 5398; private static final Object lock = new Object(); private static boolean notified = false; @@ -64,7 +63,8 @@ public class RmidViaInheritedChannel implements Callback { } public static void main(String[] args) throws Exception { - + System.setProperty("java.rmi.activation.port", + Integer.toString(TestLibrary.RMIDVIAINHERITEDCHANNEL_ACTIVATION_PORT)); RMID rmid = null; Callback obj = null; @@ -77,7 +77,8 @@ public class RmidViaInheritedChannel implements Callback { Callback proxy = (Callback) UnicastRemoteObject.exportObject(obj, 0); Registry registry = - LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT); + LocateRegistry.createRegistry( + TestLibrary.RMIDVIAINHERITEDCHANNEL_REGISTRY_PORT); registry.bind("Callback", proxy); /* @@ -85,7 +86,8 @@ public class RmidViaInheritedChannel implements Callback { */ System.err.println("start rmid with inherited channel"); RMID.removeLog(); - rmid = RMID.createRMID(System.out, System.err, true, false, PORT); + rmid = RMID.createRMID(System.out, System.err, true, false, + TestLibrary.RMIDVIAINHERITEDCHANNEL_ACTIVATION_PORT); rmid.addOptions(new String[]{ "-Djava.nio.channels.spi.SelectorProvider=RmidViaInheritedChannel$RmidSelectorProvider"}); rmid.start(); @@ -108,7 +110,7 @@ public class RmidViaInheritedChannel implements Callback { if (obj != null) { UnicastRemoteObject.unexportObject(obj, true); } - ActivationLibrary.rmidCleanup(rmid, PORT); + ActivationLibrary.rmidCleanup(rmid); } } @@ -166,7 +168,8 @@ public class RmidViaInheritedChannel implements Callback { channel = ServerSocketChannel.open(); ServerSocket serverSocket = channel.socket(); serverSocket.bind( - new InetSocketAddress(InetAddress.getLocalHost(), PORT)); + new InetSocketAddress(InetAddress.getLocalHost(), + TestLibrary.RMIDVIAINHERITEDCHANNEL_ACTIVATION_PORT)); System.err.println("serverSocket = " + serverSocket); /* @@ -175,7 +178,7 @@ public class RmidViaInheritedChannel implements Callback { try { System.err.println("notify test..."); Registry registry = - LocateRegistry.getRegistry(TestLibrary.REGISTRY_PORT); + LocateRegistry.getRegistry(TestLibrary.RMIDVIAINHERITEDCHANNEL_REGISTRY_PORT); Callback obj = (Callback) registry.lookup("Callback"); obj.notifyTest(); } catch (NotBoundException nbe) { diff --git a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/rmid.security.policy b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/rmid.security.policy index ceee4d7a868..9ddb55603a0 100644 --- a/jdk/test/java/rmi/activation/rmidViaInheritedChannel/rmid.security.policy +++ b/jdk/test/java/rmi/activation/rmidViaInheritedChannel/rmid.security.policy @@ -2,4 +2,5 @@ grant { permission java.lang.RuntimePermission "selectorProvider"; permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch"; permission java.net.SocketPermission "*", "connect,accept"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; }; diff --git a/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java b/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java index 2436920a753..15b98fc851b 100644 --- a/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java +++ b/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ * @author Laird Dornin * * @library ../../testlibrary - * @build StreamPipe TestParams TestLibrary JavaVM + * @build StreamPipe TestParams TestLibrary JavaVM RMID * @build AltSecurityManager TestSecurityManager * @run main/othervm AltSecurityManager */ @@ -41,23 +41,41 @@ * if registry and rmid take too long to exit. */ public class AltSecurityManager implements Runnable { - + private final int regPort; // variable to hold registry and rmid children static JavaVM vm = null; // names of utilities static String utilityToStart = null; - static String registry = "sun.rmi.registry.RegistryImpl"; - static String rmid = "sun.rmi.server.Activation"; + static final String REGISTRY_IMPL = "sun.rmi.registry.RegistryImpl"; + static final String ACTIVATION = "sun.rmi.server.Activation"; // children should exit in at least this time. static long TIME_OUT = 15000; + public AltSecurityManager(int port) { + if (port <= 0) { + TestLibrary.bomb("Port must be greater then 0."); + } + + this.regPort = port; + } + public void run() { try { - vm = new JavaVM(utilityToStart, - " -Djava.security.manager=TestSecurityManager", - ""); + if (utilityToStart.equals(REGISTRY_IMPL)) { + vm = new JavaVM(utilityToStart, + " -Djava.security.manager=TestSecurityManager", + Integer.toString(regPort)); + } else if (utilityToStart.contains(ACTIVATION)) { + vm = new JavaVM(utilityToStart, + " -Djava.security.manager=TestSecurityManager", + "-port " + Integer.toString(regPort)); + } else { + TestLibrary.bomb("Utility to start must be " + REGISTRY_IMPL + + " or " + ACTIVATION); + } + System.err.println("starting " + utilityToStart); vm.start(); vm.getVM().waitFor(); @@ -75,7 +93,8 @@ public class AltSecurityManager implements Runnable { utilityToStart = utility; try { - Thread thread = new Thread(new AltSecurityManager()); + int port = TestLibrary.getUnusedRandomPort(); + Thread thread = new Thread(new AltSecurityManager(port)); System.err.println("expecting RuntimeException for " + "checkListen in child process"); long start = System.currentTimeMillis(); @@ -90,8 +109,8 @@ public class AltSecurityManager implements Runnable { // dont pollute other tests; increase the likelihood // that rmid will go away if it did not exit already. - if (utility.equals(rmid)) { - RMID.shutdown(); + if (utility.equals(ACTIVATION)) { + RMID.shutdown(port); } TestLibrary.bomb(utilityToStart + @@ -111,10 +130,10 @@ public class AltSecurityManager implements Runnable { System.err.println("\nRegression test for bug 4183202\n"); // make sure the registry exits early. - ensureExit(registry); + ensureExit(REGISTRY_IMPL); // make sure rmid exits early - ensureExit(rmid); + ensureExit(ACTIVATION); System.err.println("test passed"); diff --git a/jdk/test/java/rmi/registry/classPathCodebase/ClassPathCodebase.java b/jdk/test/java/rmi/registry/classPathCodebase/ClassPathCodebase.java index 10534e1b2d3..9e8cbba8bf6 100644 --- a/jdk/test/java/rmi/registry/classPathCodebase/ClassPathCodebase.java +++ b/jdk/test/java/rmi/registry/classPathCodebase/ClassPathCodebase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ * @author Peter Jones * * @library ../../testlibrary - * @build ClassPathCodebase Dummy + * @build ClassPathCodebase Dummy TestLibrary * @run main/othervm/policy=security.policy ClassPathCodebase */ @@ -83,11 +83,12 @@ public class ClassPathCodebase { System.getProperty("java.home") + File.separator + "bin" + File.separator + "rmiregistry"; + int port = TestLibrary.getUnusedRandomPort(); String cmdarray[] = new String[] { rmiregistryCommand, "-J-Denv.class.path=.", "-J-Djava.rmi.server.codebase=" + exportCodebaseURL, - Integer.toString(TestLibrary.REGISTRY_PORT) }; + Integer.toString(port) }; System.err.println("\nCommand used to spawn rmiregistry process:"); System.err.println("\t" + Arrays.asList(cmdarray).toString()); @@ -118,7 +119,7 @@ public class ClassPathCodebase { * dummy object to it. */ Registry registry = LocateRegistry.getRegistry( - "localhost", TestLibrary.REGISTRY_PORT); + "localhost", port); try { registry.bind(dummyBinding, dummyObject); @@ -133,7 +134,7 @@ public class ClassPathCodebase { { System.err.println( "Error: another registry running on port " + - TestLibrary.REGISTRY_PORT + "?"); + port + "?"); } throw e; } diff --git a/jdk/test/java/rmi/registry/emptyName/EmptyName.java b/jdk/test/java/rmi/registry/emptyName/EmptyName.java index c3e9f59daf6..d572b8f8a35 100644 --- a/jdk/test/java/rmi/registry/emptyName/EmptyName.java +++ b/jdk/test/java/rmi/registry/emptyName/EmptyName.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,6 +24,8 @@ /* @test * @bug 4399304 * @summary check that registry allows empty names + * @library ../../testlibrary + * @build TestLibrary * @run main/othervm EmptyName */ import java.rmi.registry.LocateRegistry; @@ -32,7 +34,7 @@ import java.rmi.server.RemoteObject; public class EmptyName { public static void main(String[] args) throws Exception { - Registry impl = LocateRegistry.createRegistry(0); + Registry impl = TestLibrary.createRegistryOnUnusedPort(); Registry stub = (Registry) RemoteObject.toStub(impl); stub.bind("", stub); stub.lookup(""); diff --git a/jdk/test/java/rmi/registry/interfaceHash/InterfaceHash.java b/jdk/test/java/rmi/registry/interfaceHash/InterfaceHash.java index a3605f5b5f1..77824125719 100644 --- a/jdk/test/java/rmi/registry/interfaceHash/InterfaceHash.java +++ b/jdk/test/java/rmi/registry/interfaceHash/InterfaceHash.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,8 +35,10 @@ * "interface hash": 4905912898345647071L. * * @author Peter Jones + * @library ../../testlibrary * @build InterfaceHash * @build ReferenceRegistryStub + * @build TestLibrary * @run main/othervm InterfaceHash */ @@ -58,7 +60,7 @@ import sun.rmi.transport.tcp.TCPEndpoint; public class InterfaceHash { - private static final int PORT = 2020; + private static final int PORT = TestLibrary.getUnusedRandomPort(); private static final String NAME = "WMM"; public static void main(String[] args) throws Exception { diff --git a/jdk/test/java/rmi/registry/multipleRegistries/MultipleRegistries.java b/jdk/test/java/rmi/registry/multipleRegistries/MultipleRegistries.java index 198aa63c00d..e75a60989d7 100644 --- a/jdk/test/java/rmi/registry/multipleRegistries/MultipleRegistries.java +++ b/jdk/test/java/rmi/registry/multipleRegistries/MultipleRegistries.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,8 @@ * @summary Can't run multiple registries in the same VM * @author Ann Wollrath * + * @library ../../testlibrary + * @build TestLibrary * @build MultipleRegistries * @run main/othervm/timeout=240 MultipleRegistries */ @@ -58,12 +60,13 @@ public class MultipleRegistries implements RemoteInterface { System.err.println("proxy = " + proxy); System.err.println("export registries"); - Registry registryImpl1 = LocateRegistry.createRegistry(2030); - Registry registryImpl2 = LocateRegistry.createRegistry(2040); - + Registry registryImpl1 = TestLibrary.createRegistryOnUnusedPort(); + int port1 = TestLibrary.getRegistryPort(registryImpl1); + Registry registryImpl2 = TestLibrary.createRegistryOnUnusedPort(); + int port2 = TestLibrary.getRegistryPort(registryImpl2); System.err.println("bind remote object in registries"); - Registry registry1 = LocateRegistry.getRegistry(2030); - Registry registry2 = LocateRegistry.getRegistry(2040); + Registry registry1 = LocateRegistry.getRegistry(port1); + Registry registry2 = LocateRegistry.getRegistry(port2); registry1.bind(NAME, proxy); registry2.bind(NAME, proxy); diff --git a/jdk/test/java/rmi/registry/readTest/readTest.java b/jdk/test/java/rmi/registry/readTest/readTest.java index 8942b0c0e5e..95cd9c0a6ed 100644 --- a/jdk/test/java/rmi/registry/readTest/readTest.java +++ b/jdk/test/java/rmi/registry/readTest/readTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,18 +29,19 @@ import java.rmi.server.UnicastRemoteObject; public class readTest { public static void main(String args[]) throws Exception { - int port = 7491; try { testPkg.Server obj = new testPkg.Server(); testPkg.Hello stub = (testPkg.Hello) UnicastRemoteObject.exportObject(obj, 0); // Bind the remote object's stub in the registry - Registry registry = LocateRegistry.getRegistry(port); + Registry registry = + LocateRegistry.getRegistry(TestLibrary.READTEST_REGISTRY_PORT); registry.bind("Hello", stub); System.err.println("Server ready"); // now, let's test client - testPkg.Client client = new testPkg.Client(port); + testPkg.Client client = + new testPkg.Client(TestLibrary.READTEST_REGISTRY_PORT); String testStubReturn = client.testStub(); if(!testStubReturn.equals(obj.hello)) { throw new RuntimeException("Test Fails : unexpected string from stub call"); diff --git a/jdk/test/java/rmi/registry/readTest/readTest.sh b/jdk/test/java/rmi/registry/readTest/readTest.sh index cb600d5c12d..4490a48c4c7 100644 --- a/jdk/test/java/rmi/registry/readTest/readTest.sh +++ b/jdk/test/java/rmi/registry/readTest/readTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,8 @@ # @test # @bug 7102369 7094468 7100592 +# @library ../../testlibrary +# @build TestLibrary # @summary remove java.rmi.server.codebase property parsing from registyimpl # @run shell readTest.sh @@ -44,22 +46,24 @@ case "$OS" in ;; esac +TEST_CLASSPATH=.:$TESTCLASSES cp -r ${TESTSRC}${FS}* . ${TESTJAVA}${FS}bin${FS}javac testPkg${FS}*java -${TESTJAVA}${FS}bin${FS}javac readTest.java +${TESTJAVA}${FS}bin${FS}javac -cp $TEST_CLASSPATH readTest.java mkdir rmi_tmp RMIREG_OUT=rmi.out #start rmiregistry without any local classes on classpath cd rmi_tmp -${TESTJAVA}${FS}bin${FS}rmiregistry 7491 > ..${FS}${RMIREG_OUT} 2>&1 & +# NOTE: This RMI Registry port must match TestLibrary.READTEST_REGISTRY_PORT +${TESTJAVA}${FS}bin${FS}rmiregistry 64005 > ..${FS}${RMIREG_OUT} 2>&1 & RMIREG_PID=$! # allow some time to start sleep 3 cd .. # trailing / after code base is important for rmi codebase property. -${TESTJAVA}${FS}bin${FS}java -Djava.rmi.server.codebase=${FILEURL}`pwd`/ readTest > OUT.TXT 2>&1 & +${TESTJAVA}${FS}bin${FS}java -cp $TEST_CLASSPATH -Djava.rmi.server.codebase=${FILEURL}`pwd`/ readTest > OUT.TXT 2>&1 & TEST_PID=$! #bulk of testcase - let it run for a while sleep 5 diff --git a/jdk/test/java/rmi/registry/reexport/Reexport.java b/jdk/test/java/rmi/registry/reexport/Reexport.java index be716328393..042088e65af 100644 --- a/jdk/test/java/rmi/registry/reexport/Reexport.java +++ b/jdk/test/java/rmi/registry/reexport/Reexport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,22 +49,21 @@ import java.rmi.registry.*; import java.rmi.server.*; public class Reexport { - static public final int regport = TestLibrary.REGISTRY_PORT; - static public void main(String[] argv) { Registry reg = null; + int regPort = TestLibrary.getUnusedRandomPort(); try { System.err.println("\nregression test for 4120329\n"); // establish the registry (we hope) - System.err.println("Starting registry on port " + regport); - Reexport.makeRegistry(regport); + System.err.println("Starting registry on port " + regPort); + Reexport.makeRegistry(regPort); // Get a handle to the registry System.err.println("Creating duplicate registry, this should fail..."); - reg = createReg(true); + reg = createReg(true, regPort); if (reg != null) { TestLibrary.bomb("failed was able to duplicate the registry?!?"); @@ -73,7 +72,7 @@ public class Reexport { // Kill the first registry. System.err.println("Bringing down the first registry"); try { - Reexport.killRegistry(); + Reexport.killRegistry(regPort); } catch (Exception foo) { } @@ -81,7 +80,7 @@ public class Reexport { System.err.println("Trying again to start our own " + "registry... this should work"); - reg = createReg(false); + reg = createReg(false, regPort); if (reg == null) { TestLibrary.bomb("Could not create registry on second try"); @@ -93,17 +92,17 @@ public class Reexport { TestLibrary.bomb(e); } finally { // dont leave the registry around to affect other tests. - killRegistry(); + killRegistry(regPort); reg = null; } } - static Registry createReg(boolean remoteOk) { + static Registry createReg(boolean remoteOk, int port) { Registry reg = null; try { - reg = LocateRegistry.createRegistry(regport); + reg = LocateRegistry.createRegistry(port); } catch (Throwable e) { if (remoteOk) { System.err.println("EXPECTING PORT IN USE EXCEPTION:"); @@ -140,10 +139,10 @@ public class Reexport { } private static Process subreg = null; - public static void killRegistry() { + public static void killRegistry(int port) { if (Reexport.subreg != null) { - RegistryRunner.requestExit(); + RegistryRunner.requestExit(port); try { Reexport.subreg.waitFor(); diff --git a/jdk/test/java/rmi/reliability/juicer/AppleUserImpl.java b/jdk/test/java/rmi/reliability/juicer/AppleUserImpl.java index 775ca5d455a..2ed30c65ab8 100644 --- a/jdk/test/java/rmi/reliability/juicer/AppleUserImpl.java +++ b/jdk/test/java/rmi/reliability/juicer/AppleUserImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -59,19 +59,21 @@ * @build Apple AppleEvent AppleImpl AppleUserImpl * @build Orange OrangeEcho OrangeEchoImpl OrangeImpl * @build ApplicationServer + * @build TestLibrary * * @run main/othervm/policy=security.policy AppleUserImpl -seconds 30 * * @author Peter Jones, Nigel Daley */ -import java.rmi.RemoteException; import java.rmi.NoSuchObjectException; -import java.rmi.server.UnicastRemoteObject; +import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.rmi.server.UnicastRemoteObject; import java.util.Random; -import java.util.logging.Logger; import java.util.logging.Level; +import java.util.logging.Logger; /** * The AppleUserImpl class implements the behavior of the remote @@ -80,7 +82,7 @@ import java.util.logging.Level; * AppleUserThread is created for each apple. */ public class AppleUserImpl extends UnicastRemoteObject implements AppleUser { - + private static int registryPort = -1; private static final Logger logger = Logger.getLogger("reliability.appleuser"); private static int threadNum = 0; @@ -308,8 +310,10 @@ public class AppleUserImpl extends UnicastRemoteObject implements AppleUser { synchronized (user) { // create new registry and bind new AppleUserImpl in registry - LocateRegistry.createRegistry(2006); - LocateRegistry.getRegistry(2006).rebind("AppleUser",user); + Registry registry = TestLibrary.createRegistryOnUnusedPort(); + registryPort = TestLibrary.getRegistryPort(registry); + LocateRegistry.getRegistry(registryPort).rebind("AppleUser", + user); // start the other server if applicable if (othervm) { @@ -318,7 +322,9 @@ public class AppleUserImpl extends UnicastRemoteObject implements AppleUser { "started in separate process"); } else { Class app = Class.forName("ApplicationServer"); - server = new Thread((Runnable) app.newInstance()); + java.lang.reflect.Constructor appConstructor = + app.getDeclaredConstructor(new Class[] {Integer.TYPE}); + server = new Thread((Runnable) appConstructor.newInstance(registryPort)); logger.log(Level.INFO, "Starting application server " + "in same process"); server.start(); diff --git a/jdk/test/java/rmi/reliability/juicer/ApplicationServer.java b/jdk/test/java/rmi/reliability/juicer/ApplicationServer.java index 1d1beb266e1..9e4b404dd35 100644 --- a/jdk/test/java/rmi/reliability/juicer/ApplicationServer.java +++ b/jdk/test/java/rmi/reliability/juicer/ApplicationServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,18 +38,21 @@ public class ApplicationServer implements Runnable { private static final int LOOKUP_ATTEMPTS = 5; private static final int DEFAULT_NUMAPPLES = 10; private static final String DEFAULT_REGISTRYHOST = "localhost"; + private static final int DEFAULT_REGISTRYPORT = -1; private final int numApples; private final String registryHost; + private final int registryPort; private final Apple[] apples; private AppleUser user; - ApplicationServer() { - this(DEFAULT_NUMAPPLES, DEFAULT_REGISTRYHOST); + ApplicationServer(int registryPort) { + this(DEFAULT_NUMAPPLES, DEFAULT_REGISTRYHOST, registryPort); } - ApplicationServer(int numApples, String registryHost) { + ApplicationServer(int numApples, String registryHost, int registryPort) { this.numApples = numApples; this.registryHost = registryHost; + this.registryPort = registryPort; apples = new Apple[numApples]; } @@ -71,7 +74,7 @@ public class ApplicationServer implements Runnable { for (i = 0; i < LOOKUP_ATTEMPTS; i++) { try { Registry registry = LocateRegistry.getRegistry( - registryHost, 2006); + registryHost, registryPort); user = (AppleUser) registry.lookup("AppleUser"); user.startTest(); break; //successfully obtained AppleUser @@ -120,16 +123,20 @@ public class ApplicationServer implements Runnable { private static void usage() { System.err.println("Usage: ApplicationServer [-numApples ]"); System.err.println(" [-registryHost ]"); + System.err.println(" -registryPort "); System.err.println(" numApples The number of apples (threads) to use."); System.err.println(" The default is 10 apples."); System.err.println(" host The host running rmiregistry " + "which contains AppleUser."); System.err.println(" The default is \"localhost\"."); + System.err.println(" port The port the rmiregistry is running" + + "on."); System.err.println(); } public static void main(String[] args) { int num = DEFAULT_NUMAPPLES; + int port = -1; String host = DEFAULT_REGISTRYHOST; // parse command line args @@ -142,17 +149,25 @@ public class ApplicationServer implements Runnable { } else if (arg.equals("-registryHost")) { i++; host = args[i]; + } else if (arg.equals("-registryPort")) { + i++; + port = Integer.parseInt(args[i]); } else { usage(); } } + + if (port == -1) { + usage(); + throw new RuntimeException("Port must be specified."); + } } catch (Throwable t) { usage(); throw new RuntimeException("TEST FAILED: Bad argument"); } // start the client server - Thread server = new Thread(new ApplicationServer(num,host)); + Thread server = new Thread(new ApplicationServer(num,host,port)); server.start(); // main should exit once all exported remote objects are gc'd } diff --git a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/EchoImpl.java b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/EchoImpl.java index f71180554db..209be45911b 100644 --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/EchoImpl.java +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/EchoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -128,8 +128,9 @@ public class EchoImpl ActivationGroup.createGroup(groupID, groupDesc, 0); EchoImpl impl = new EchoImpl(protocol); - System.out.println("EchoServer: binding in registry"); - Naming.rebind("//:" + UseCustomSocketFactory.REGISTRY_PORT + + int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port")); + System.out.println("EchoServer: binding in registry on port:" + registryPort); + Naming.rebind("//:" + registryPort + "/EchoServer", impl); System.out.println("EchoServer ready."); } catch (Exception e) { diff --git a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/UseCustomSocketFactory.java b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/UseCustomSocketFactory.java index 49a24b7cbbe..5868c583b28 100644 --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/UseCustomSocketFactory.java +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/UseCustomSocketFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,7 @@ * @build EchoImpl * @build EchoImpl_Stub * @build UseCustomSocketFactory + * @build TestLibrary * @run main/othervm/policy=security.policy/timeout=360 UseCustomSocketFactory */ @@ -42,8 +43,8 @@ import java.rmi.server.*; import java.rmi.registry.*; public class UseCustomSocketFactory { + static final int REGISTRY_PORT = TestLibrary.getUnusedRandomPort(); - final static int REGISTRY_PORT = 2006; static String[] protocol = new String[] { "", "compress", "xor" }; public static void main(String[] args) { @@ -68,7 +69,7 @@ public class UseCustomSocketFactory { " -C-Djava.security.manager=java.rmi.RMISecurityManager "}); rmid.start(); - Echo[] echo = spawnAndTest(); + Echo[] echo = spawnAndTest(rmid.getPort()); reactivateAndTest(echo); } catch (IOException e) { TestLibrary.bomb("creating rmid", e); @@ -78,17 +79,20 @@ public class UseCustomSocketFactory { } } - private static Echo[] spawnAndTest() { + private static Echo[] spawnAndTest(int rmidPort) { System.err.println("\nCreate Test-->"); Echo[] echo = new Echo[protocol.length]; for (int i = 0; i < protocol.length; i++) { - JavaVM serverVM = new JavaVM("EchoImpl", "-Djava.security.policy=" + - TestParams.defaultPolicy, + TestParams.defaultPolicy + + " -Drmi.registry.port=" + + REGISTRY_PORT + + " -Djava.rmi.activation.port=" + + rmidPort, protocol[i]); System.err.println("\nusing protocol: " + diff --git a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/security.policy b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/security.policy index 57bd984e132..ffc9b1e8143 100644 --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/security.policy +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/activatable/security.policy @@ -30,6 +30,9 @@ grant { permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "rmi.registry.port", "read"; + permission java.util.PropertyPermission "java.rmi.activation.port", "write"; + // required for test to create an ActivationGroup permission java.lang.RuntimePermission "setFactory"; diff --git a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/HelloImpl.java b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/HelloImpl.java index 17cc832fcf9..e2dde858b05 100644 --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/HelloImpl.java +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/HelloImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -65,8 +65,9 @@ public class HelloImpl if (args.length >= 1) protocol = args[0]; + int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port")); registry = java.rmi.registry.LocateRegistry. - getRegistry("localhost", TestLibrary.REGISTRY_PORT, + getRegistry("localhost", registryPort, new Compress.CompressRMIClientSocketFactory()); UseCustomSocketFactory.checkStub(registry, "RMIClientSocket"); hello = (Hello) registry.lookup("/HelloServer"); diff --git a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/UseCustomSocketFactory.java b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/UseCustomSocketFactory.java index 5fb383d9a64..ba610688369 100644 --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/UseCustomSocketFactory.java +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/UseCustomSocketFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,7 @@ * @build Hello * @build HelloImpl * @build HelloImpl_Stub + * @build TestLibrary * @build UseCustomSocketFactory * @build Compress * @run main/othervm/policy=security.policy/timeout=240 UseCustomSocketFactory @@ -58,6 +59,7 @@ public class UseCustomSocketFactory { System.out.println("\nRegression test for bug 4148850\n"); TestLibrary.suggestSecurityManager("java.rmi.RMISecurityManager"); + int registryPort = TestLibrary.getUnusedRandomPort(); try { impl = new HelloImpl(); @@ -67,7 +69,7 @@ public class UseCustomSocketFactory { * allow the rmiregistry to be secure. */ registry = LocateRegistry. - createRegistry(TestLibrary.REGISTRY_PORT, + createRegistry(registryPort, new Compress.CompressRMIClientSocketFactory(), new Compress.CompressRMIServerSocketFactory()); registry.rebind("/HelloServer", impl); @@ -77,8 +79,12 @@ public class UseCustomSocketFactory { TestLibrary.bomb("creating registry", e); } - JavaVM serverVM = new JavaVM("HelloImpl", "-Djava.security.policy=" + - TestParams.defaultPolicy, ""); + JavaVM serverVM = new JavaVM("HelloImpl", + "-Djava.security.policy=" + + TestParams.defaultPolicy + + " -Drmi.registry.port=" + + registryPort, + ""); try { diff --git a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/security.policy b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/security.policy index 31d3bc5293e..7567ae1918e 100644 --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/security.policy +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/registry/security.policy @@ -22,6 +22,8 @@ grant { permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "rmi.registry.port", "read"; + permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; diff --git a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/EchoImpl.java b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/EchoImpl.java index 0dd30c5437b..d1b4d062531 100644 --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/EchoImpl.java +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/EchoImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -64,8 +64,9 @@ public class EchoImpl System.out.println("EchoServer: creating remote object"); EchoImpl impl = new EchoImpl(protocol); + int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port")); System.out.println("EchoServer: binding in registry"); - Naming.rebind("//:" + TestLibrary.REGISTRY_PORT + + Naming.rebind("//:" + registryPort + "/EchoServer", impl); System.out.println("EchoServer ready."); } catch (Exception e) { diff --git a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/UseCustomSocketFactory.java b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/UseCustomSocketFactory.java index 20d00dfe444..13766abd848 100644 --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/UseCustomSocketFactory.java +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/UseCustomSocketFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,6 +46,8 @@ public class UseCustomSocketFactory { public static void main(String[] args) { + int registryPort = -1; + String[] protocol = new String[] { "", "compress", "xor" }; System.out.println("\nRegression test for bug 4127826\n"); @@ -53,7 +55,8 @@ public class UseCustomSocketFactory { TestLibrary.suggestSecurityManager("java.rmi.RMISecurityManager"); try { - LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT); + Registry registry = TestLibrary.createRegistryOnUnusedPort(); + registryPort = TestLibrary.getRegistryPort(registry); } catch (Exception e) { TestLibrary.bomb("creating registry", e); } @@ -65,7 +68,9 @@ public class UseCustomSocketFactory { JavaVM serverVM = new JavaVM("EchoImpl", "-Djava.security.policy=" + - TestParams.defaultPolicy, + TestParams.defaultPolicy + + " -Drmi.registry.port=" + + registryPort, protocol[i]); System.err.println("\nusing protocol: " + (protocol[i] == "" ? "none" : protocol[i])); @@ -79,7 +84,7 @@ public class UseCustomSocketFactory { Echo obj = null; do { try { - obj = (Echo) Naming.lookup("//:" + TestLibrary.REGISTRY_PORT + + obj = (Echo) Naming.lookup("//:" + registryPort + "/EchoServer"); break; } catch (NotBoundException e) { @@ -109,7 +114,7 @@ public class UseCustomSocketFactory { } finally { serverVM.destroy(); try { - Naming.unbind("//:" + TestLibrary.REGISTRY_PORT + + Naming.unbind("//:" + registryPort + "/EchoServer"); } catch (Exception e) { TestLibrary.bomb("unbinding EchoServer", e); diff --git a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/security.policy b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/security.policy index 31d3bc5293e..d1b5073ed0d 100644 --- a/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/security.policy +++ b/jdk/test/java/rmi/server/RMISocketFactory/useSocketFactory/unicast/security.policy @@ -22,9 +22,18 @@ grant { permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "rmi.registry.port", "read"; + permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; + // used by TestLibrary to get the RMI Registry port + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.registry"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.server"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.proxy"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.tcp"; + // test needs to export rmid and communicate with objects on arbitrary ports permission java.net.SocketPermission "*:1024-", "connect,accept,listen"; }; diff --git a/jdk/test/java/rmi/server/RemoteServer/AddrInUse.java b/jdk/test/java/rmi/server/RemoteServer/AddrInUse.java index ad88f98c827..9ab8e50d65b 100644 --- a/jdk/test/java/rmi/server/RemoteServer/AddrInUse.java +++ b/jdk/test/java/rmi/server/RemoteServer/AddrInUse.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,7 @@ * @summary retryServerSocket should not retry on BindException * @author Ann Wollrath * + * @library ../../testlibrary * @build AddrInUse * @run main/othervm AddrInUse */ @@ -36,7 +37,7 @@ import java.rmi.server.ExportException; public class AddrInUse implements Runnable { - private static final int PORT = 9999; + private static int port = -1; private static final long TIMEOUT = 10000; private boolean exportSucceeded = false; @@ -49,7 +50,7 @@ public class AddrInUse implements Runnable { * has already been bound, and record the result. */ try { - LocateRegistry.createRegistry(PORT); + LocateRegistry.createRegistry(port); synchronized (this) { exportSucceeded = true; notifyAll(); @@ -68,8 +69,9 @@ public class AddrInUse implements Runnable { /* * Bind a server socket to a port. */ - System.err.println("create a ServerSocket on port " + PORT + "..."); - ServerSocket server = new ServerSocket(PORT); + ServerSocket server = new ServerSocket(0); + port = server.getLocalPort(); + System.err.println("Created a ServerSocket on port " + port + "..."); /* * Start a thread that creates a registry on the same port, diff --git a/jdk/test/java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/KeepAliveDuringCall.java b/jdk/test/java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/KeepAliveDuringCall.java index 28679859e8f..dbe2ffe2157 100644 --- a/jdk/test/java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/KeepAliveDuringCall.java +++ b/jdk/test/java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/KeepAliveDuringCall.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -82,15 +82,17 @@ public class KeepAliveDuringCall implements ShutdownMonitor { UnicastRemoteObject.exportObject(obj); System.err.println("exported shutdown monitor"); - Registry localRegistry = - LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT); + Registry localRegistry = TestLibrary.createRegistryOnUnusedPort(); + int registryPort = TestLibrary.getRegistryPort(localRegistry); System.err.println("created local registry"); localRegistry.bind(BINDING, obj); System.err.println("bound shutdown monitor in local registry"); System.err.println("starting remote ShutdownImpl VM..."); - (new JavaVM("ShutdownImpl")).start(); + (new JavaVM("ShutdownImpl", + "-Drmi.registry.port=" + + registryPort, "")).start(); Shutdown s; synchronized (obj.lock) { diff --git a/jdk/test/java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/ShutdownImpl.java b/jdk/test/java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/ShutdownImpl.java index 6ab0dc66cd2..7a3d0406aaf 100644 --- a/jdk/test/java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/ShutdownImpl.java +++ b/jdk/test/java/rmi/server/UnicastRemoteObject/keepAliveDuringCall/ShutdownImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -68,8 +68,9 @@ public class ShutdownImpl implements Shutdown { public static void main(String[] args) { try { + int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port")); Registry registry = - LocateRegistry.getRegistry("", TestLibrary.REGISTRY_PORT); + LocateRegistry.getRegistry("", registryPort); ShutdownMonitor monitor = (ShutdownMonitor) registry.lookup(KeepAliveDuringCall.BINDING); System.err.println("(ShutdownImpl) retrieved shutdown monitor"); diff --git a/jdk/test/java/rmi/server/UnicastRemoteObject/unexportObject/UnexportLeak.java b/jdk/test/java/rmi/server/UnicastRemoteObject/unexportObject/UnexportLeak.java index ed0008076a9..60325dcaa1e 100644 --- a/jdk/test/java/rmi/server/UnicastRemoteObject/unexportObject/UnexportLeak.java +++ b/jdk/test/java/rmi/server/UnicastRemoteObject/unexportObject/UnexportLeak.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,8 +28,10 @@ * * @author Ann Wollrath * + * @library ../../../testlibrary * @build UnexportLeak * @build UnexportLeak_Stub + * @build TestLibrary * @build Ping * @run main/othervm UnexportLeak */ @@ -40,20 +42,18 @@ import java.rmi.server.*; import java.rmi.registry.*; public class UnexportLeak implements Ping { - - private static int PORT = 2006; - public void ping() { } public static void main(String[] args) { try { System.err.println("\nRegression test for bug 4331349\n"); - LocateRegistry.createRegistry(PORT); + Registry registry = TestLibrary.createRegistryOnUnusedPort(); + int registryPort = TestLibrary.getRegistryPort(registry); Remote obj = new UnexportLeak(); WeakReference wr = new WeakReference(obj); UnicastRemoteObject.exportObject(obj); - LocateRegistry.getRegistry(PORT).rebind("UnexportLeak", obj); + LocateRegistry.getRegistry(registryPort).rebind("UnexportLeak", obj); UnicastRemoteObject.unexportObject(obj, true); obj = null; flushRefs(); diff --git a/jdk/test/java/rmi/server/Unreferenced/finiteGCLatency/FiniteGCLatency.java b/jdk/test/java/rmi/server/Unreferenced/finiteGCLatency/FiniteGCLatency.java index b60dcc5fb11..7b7317a8d9b 100644 --- a/jdk/test/java/rmi/server/Unreferenced/finiteGCLatency/FiniteGCLatency.java +++ b/jdk/test/java/rmi/server/Unreferenced/finiteGCLatency/FiniteGCLatency.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,6 +37,7 @@ * @library ../../../testlibrary * @build FiniteGCLatency * @build FiniteGCLatency_Stub + * @build TestLibrary * @run main/othervm/timeout=120 FiniteGCLatency */ @@ -78,11 +79,11 @@ public class FiniteGCLatency implements Remote, Unreferenced { try { UnicastRemoteObject.exportObject(obj); System.err.println("exported remote object"); - - LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT); + Registry registry1 = TestLibrary.createRegistryOnUnusedPort(); + int port = TestLibrary.getRegistryPort(registry1); System.err.println("created registry"); - Registry registry = LocateRegistry.getRegistry("", TestLibrary.REGISTRY_PORT); + Registry registry = LocateRegistry.getRegistry("", port); registry.bind(BINDING, obj); System.err.println("bound remote object in registry"); diff --git a/jdk/test/java/rmi/server/Unreferenced/leaseCheckInterval/LeaseCheckInterval.java b/jdk/test/java/rmi/server/Unreferenced/leaseCheckInterval/LeaseCheckInterval.java index fb8e8750ebe..c1d5c579624 100644 --- a/jdk/test/java/rmi/server/Unreferenced/leaseCheckInterval/LeaseCheckInterval.java +++ b/jdk/test/java/rmi/server/Unreferenced/leaseCheckInterval/LeaseCheckInterval.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -87,8 +87,9 @@ public class LeaseCheckInterval implements Remote, Unreferenced { UnicastRemoteObject.exportObject(obj); System.err.println("exported remote object"); + int registryPort = TestLibrary.getUnusedRandomPort(); Registry localRegistry = - LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT); + LocateRegistry.createRegistry(registryPort); System.err.println("created local registry"); localRegistry.bind(BINDING, obj); @@ -96,7 +97,8 @@ public class LeaseCheckInterval implements Remote, Unreferenced { synchronized (obj.lock) { System.err.println("starting remote client VM..."); - (new JavaVM("SelfTerminator")).start(); + (new JavaVM("SelfTerminator", "-Drmi.registry.port=" + + registryPort, "")).start(); System.err.println("waiting for unreferenced() callback..."); obj.lock.wait(TIMEOUT); diff --git a/jdk/test/java/rmi/server/Unreferenced/leaseCheckInterval/SelfTerminator.java b/jdk/test/java/rmi/server/Unreferenced/leaseCheckInterval/SelfTerminator.java index 5bb579f556e..4875634dbb3 100644 --- a/jdk/test/java/rmi/server/Unreferenced/leaseCheckInterval/SelfTerminator.java +++ b/jdk/test/java/rmi/server/Unreferenced/leaseCheckInterval/SelfTerminator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,8 +33,10 @@ public class SelfTerminator { public static void main(String[] args) { try { + int registryPort = + Integer.parseInt(System.getProperty("rmi.registry.port")); Registry registry = - LocateRegistry.getRegistry("", TestLibrary.REGISTRY_PORT); + LocateRegistry.getRegistry("", registryPort); Remote stub = registry.lookup(LeaseCheckInterval.BINDING); Runtime.getRuntime().halt(0); } catch (Exception e) { diff --git a/jdk/test/java/rmi/server/Unreferenced/unreferencedContext/UnreferencedContext.java b/jdk/test/java/rmi/server/Unreferenced/unreferencedContext/UnreferencedContext.java index 38ce2605396..eb9d1928773 100644 --- a/jdk/test/java/rmi/server/Unreferenced/unreferencedContext/UnreferencedContext.java +++ b/jdk/test/java/rmi/server/Unreferenced/unreferencedContext/UnreferencedContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,6 +41,7 @@ * @library ../../../testlibrary * @build UnreferencedContext * @build UnreferencedContext_Stub + * @build TestLibrary * @run main/othervm/timeout=120 UnreferencedContext */ @@ -119,10 +120,11 @@ public class UnreferencedContext implements Remote, Unreferenced, Runnable { UnicastRemoteObject.exportObject(obj); System.err.println("exported remote object"); - LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT); + Registry registry1 = TestLibrary.createRegistryOnUnusedPort(); + int port = TestLibrary.getRegistryPort(registry1); System.err.println("created registry"); - Registry registry = LocateRegistry.getRegistry("", TestLibrary.REGISTRY_PORT); + Registry registry = LocateRegistry.getRegistry("", port); registry.bind(BINDING, obj); System.err.println("bound remote object in registry"); diff --git a/jdk/test/java/rmi/server/useCustomRef/UseCustomRef.java b/jdk/test/java/rmi/server/useCustomRef/UseCustomRef.java index f42aa05b0ce..059c9a849c3 100644 --- a/jdk/test/java/rmi/server/useCustomRef/UseCustomRef.java +++ b/jdk/test/java/rmi/server/useCustomRef/UseCustomRef.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,6 +35,7 @@ * @build Ping * @build UseCustomRef_Stub * @build UseCustomRef_Skel + * @build TestLibrary * @run main/othervm/policy=security.policy/secure=java.rmi.RMISecurityManager/timeout=120 UseCustomRef * * This test was failing to run because the synthetic access @@ -84,8 +85,9 @@ public class UseCustomRef TestLibrary.suggestSecurityManager("java.rmi.RMISecurityManager"); System.err.println("creating Registry..."); - registry = LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT); + registry = TestLibrary.createRegistryOnUnusedPort(); + int port = TestLibrary.getRegistryPort(registry); /* * create object with custom ref and bind in registry */ @@ -97,7 +99,7 @@ public class UseCustomRef "instanceof CustomServerRef"); } - String name = "//:" + TestLibrary.REGISTRY_PORT + "/UseCustomRef"; + String name = "//:" + port + "/UseCustomRef"; // String name = "UseCustomRef"; System.err.println("binding object in registry..."); Naming.rebind(name, cr); diff --git a/jdk/test/java/rmi/server/useCustomRef/security.policy b/jdk/test/java/rmi/server/useCustomRef/security.policy index c2a4b084ed4..7be818a2a6d 100644 --- a/jdk/test/java/rmi/server/useCustomRef/security.policy +++ b/jdk/test/java/rmi/server/useCustomRef/security.policy @@ -8,8 +8,11 @@ grant codeBase "file:${java.home}/lib/ext/*" { grant { // the test uses a class in the package sun.rmi.server + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.registry"; permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.server"; permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.proxy"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.tcp"; permission java.util.PropertyPermission "package.restrict.access.sun", "read"; permission java.util.PropertyPermission "package.restrict.access.sun.rmi", "read"; diff --git a/jdk/test/java/rmi/testlibrary/ActivationLibrary.java b/jdk/test/java/rmi/testlibrary/ActivationLibrary.java index 86c1744ef71..5d21a4a32d4 100644 --- a/jdk/test/java/rmi/testlibrary/ActivationLibrary.java +++ b/jdk/test/java/rmi/testlibrary/ActivationLibrary.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -169,37 +169,10 @@ public class ActivationLibrary { return false; } - /** - * Check to see if an arry of Strings contains a given string. - */ - private static boolean - containsString(String[] strings, String contained) - { - if (strings == null) { - if (contained == null) { - return true; - } - return false; - } - - for (int i = 0 ; i < strings.length ; i ++ ) { - if ((strings[i] != null) && - (strings[i].indexOf(contained) >= 0)) - { - return true; - } - } - return false; - } - /** cleanup after rmid */ public static void rmidCleanup(RMID rmid) { - rmidCleanup(rmid, TestLibrary.RMID_PORT); - } - - public static void rmidCleanup(RMID rmid, int port) { if (rmid != null) { - if (!ActivationLibrary.safeDestroy(rmid, port, SAFE_WAIT_TIME)) { + if (!ActivationLibrary.safeDestroy(rmid, SAFE_WAIT_TIME)) { TestLibrary.bomb("rmid not destroyed in: " + SAFE_WAIT_TIME + " milliseconds"); @@ -215,8 +188,8 @@ public class ActivationLibrary { * @return whether or not shutdown completed succesfully in the * timeAllowed */ - private static boolean safeDestroy(RMID rmid, int port, long timeAllowed) { - DestroyThread destroyThread = new DestroyThread(rmid, port); + private static boolean safeDestroy(RMID rmid, long timeAllowed) { + DestroyThread destroyThread = new DestroyThread(rmid); destroyThread.start(); try { @@ -236,9 +209,9 @@ public class ActivationLibrary { private final int port; private boolean succeeded = false; - DestroyThread(RMID rmid, int port) { + DestroyThread(RMID rmid) { this.rmid = rmid; - this.port = port; + this.port = rmid.getPort(); this.setDaemon(true); } diff --git a/jdk/test/java/rmi/testlibrary/RMID.java b/jdk/test/java/rmi/testlibrary/RMID.java index 8a8ac3978ca..e963c45c976 100644 --- a/jdk/test/java/rmi/testlibrary/RMID.java +++ b/jdk/test/java/rmi/testlibrary/RMID.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ import java.io.*; import java.rmi.*; import java.rmi.activation.*; -import java.util.Properties; /** * Utility class that creates an instance of rmid with a policy @@ -133,7 +132,7 @@ public class RMID extends JavaVM { boolean debugExec) { return createRMID(out, err, debugExec, true, - TestLibrary.RMID_PORT); + TestLibrary.getUnusedRandomPort()); } public static RMID createRMID(OutputStream out, OutputStream err, @@ -208,7 +207,7 @@ public class RMID extends JavaVM { // if rmid is already running, then the test will fail with // a well recognized exception (port already in use...). - mesg("starting rmid..."); + mesg("starting rmid on port #" + port + "..."); super.start(); int slopFactor = 1; @@ -235,6 +234,14 @@ public class RMID extends JavaVM { // Checking if rmid is present if (ActivationLibrary.rmidRunning(port)) { + /** + * We need to set the java.rmi.activation.port value as the + * activation system will use the property to determine the + * port #. The activation system will use this value if set. + * If it isn't set, the activation system will set it to an + * incorrect value. + */ + System.setProperty("java.rmi.activation.port", Integer.toString(port)); mesg("finished starting rmid."); return; } @@ -259,10 +266,6 @@ public class RMID extends JavaVM { * Shutdown does not nullify possible references to the rmid * process object (destroy does though). */ - public static void shutdown() { - shutdown(TestLibrary.RMID_PORT); - } - public static void shutdown(int port) { try { @@ -301,9 +304,7 @@ public class RMID extends JavaVM { * if rmid is a child process of the current VM. */ public void destroy() { - - // attempt graceful shutdown of the activation system on - // TestLibrary.RMID_PORT + // attempt graceful shutdown of the activation system shutdown(port); if (vm != null) { @@ -357,4 +358,6 @@ public class RMID extends JavaVM { vm = null; } } + + public int getPort() {return port;} } diff --git a/jdk/test/java/rmi/testlibrary/RegistryRunner.java b/jdk/test/java/rmi/testlibrary/RegistryRunner.java index 20fd38b8be6..6290c79f98f 100644 --- a/jdk/test/java/rmi/testlibrary/RegistryRunner.java +++ b/jdk/test/java/rmi/testlibrary/RegistryRunner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -56,12 +56,13 @@ public class RegistryRunner extends UnicastRemoteObject * Request that the registry process exit and handle * related exceptions. */ - public static void requestExit() { + public static void requestExit(int port) { + try { RemoteExiter exiter = (RemoteExiter) Naming.lookup("rmi://localhost:" + - TestLibrary.REGISTRY_PORT + + port + "/RemoteExiter"); try { exiter.exit(); @@ -84,7 +85,7 @@ public class RegistryRunner extends UnicastRemoteObject System.err.println("Usage: "); System.exit(0); } - int port = TestLibrary.REGISTRY_PORT; + int port = -1; try { port = Integer.parseInt(args[0]); } catch (NumberFormatException nfe) { diff --git a/jdk/test/java/rmi/testlibrary/StreamPipe.java b/jdk/test/java/rmi/testlibrary/StreamPipe.java index 9278539bfdf..d2641abd465 100644 --- a/jdk/test/java/rmi/testlibrary/StreamPipe.java +++ b/jdk/test/java/rmi/testlibrary/StreamPipe.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 1999, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -113,7 +113,9 @@ public class StreamPipe extends Thread { w.flush(); line = r.readLine(); } - + } catch (InterruptedIOException iioe) { + // Thread interrupted during IO operation. Terminate StreamPipe. + return; } catch (IOException e) { System.err.println("*** IOException in StreamPipe.run:"); e.printStackTrace(); diff --git a/jdk/test/java/rmi/testlibrary/TestLibrary.java b/jdk/test/java/rmi/testlibrary/TestLibrary.java index 7c82cd94b3e..734d8050918 100644 --- a/jdk/test/java/rmi/testlibrary/TestLibrary.java +++ b/jdk/test/java/rmi/testlibrary/TestLibrary.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,37 +36,62 @@ * not make use of packages. */ +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; -import java.io.OutputStream; import java.io.PrintStream; -import java.net.URL; import java.net.MalformedURLException; -import java.rmi.activation.Activatable; -import java.rmi.activation.ActivationID; +import java.net.ServerSocket; +import java.net.URL; import java.rmi.NoSuchObjectException; -import java.rmi.registry.Registry; import java.rmi.Remote; +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.rmi.server.RemoteRef; import java.rmi.server.UnicastRemoteObject; import java.util.Enumeration; -import java.util.Hashtable; import java.util.Properties; -import java.io.ByteArrayOutputStream; -import java.security.AccessController; -import java.security.PrivilegedAction; +import sun.rmi.registry.RegistryImpl; +import sun.rmi.server.UnicastServerRef; +import sun.rmi.transport.Endpoint; +import sun.rmi.transport.LiveRef; +import sun.rmi.transport.tcp.TCPEndpoint; /** * Class of utility/library methods (i.e. procedures) that assist with * the writing and maintainance of rmi regression tests. */ public class TestLibrary { - - /** standard test port number for registry */ - public final static int REGISTRY_PORT = 2006; - /** port for rmid necessary: not used to actually start rmid */ - public final static int RMID_PORT = 1098; + /** + * IMPORTANT! + * + * RMI tests are run concurrently and port conflicts result when a single + * port number is used by multiple tests. When needing a port, use + * getUnusedRandomPort() wherever possible. If getUnusedRandomPort() cannot + * be used, reserve and specify a port to use for your test here. This + * will ensure there are no port conflicts amongst the RMI tests. The + * port numbers specified here may also be specified in the respective + * tests. Do not change the reserved port numbers here without also + * changing the port numbers in the respective tests. + * + * When needing an instance of the RMIRegistry, use + * createRegistryOnUnusedPort wherever possible to prevent port conflicts. + * + * Reserved port range: FIXED_PORT_MIN to FIXED_PORT_MAX (inclusive) for + * tests which cannot use a random port. If new fixed ports are added below + * FIXED_PORT_MIN or above FIXED_PORT_MAX, then adjust + * FIXED_PORT_MIN/MAX appropriately. + */ + public final static int FIXED_PORT_MIN = 64001; + public final static int FIXED_PORT_MAX = 64010; + public final static int RMIDVIAINHERITEDCHANNEL_ACTIVATION_PORT = 64001; + public final static int RMIDVIAINHERITEDCHANNEL_REGISTRY_PORT = 64002; + public final static int INHERITEDCHANNELNOTSERVERSOCKET_ACTIVATION_PORT = 64003; + public final static int INHERITEDCHANNELNOTSERVERSOCKET_REGISTRY_PORT = 64004; + public final static int READTEST_REGISTRY_PORT = 64005; static void mesg(Object mesg) { System.err.println("TEST_LIBRARY: " + mesg.toString()); @@ -339,6 +364,83 @@ public class TestLibrary { } } + /** + * Creates an RMI {@link Registry} on a random, un-reserved port. + * + * @returns an RMI Registry, using a random port. + * @throws RemoteException if there was a problem creating a Registry. + */ + public static Registry createRegistryOnUnusedPort() throws RemoteException { + return LocateRegistry.createRegistry(getUnusedRandomPort()); + } + + /** + * Returns the port number the RMI {@link Registry} is running on. + * + * @param registry the registry to find the port of. + * @return the port number the registry is using. + * @throws RuntimeException if there was a problem getting the port number. + */ + public static int getRegistryPort(Registry registry) { + int port = -1; + + try { + RemoteRef remoteRef = ((RegistryImpl)registry).getRef(); + LiveRef liveRef = ((UnicastServerRef)remoteRef).getLiveRef(); + Endpoint endpoint = liveRef.getChannel().getEndpoint(); + TCPEndpoint tcpEndpoint = (TCPEndpoint) endpoint; + port = tcpEndpoint.getPort(); + } catch (Exception ex) { + throw new RuntimeException("Error getting registry port.", ex); + } + + return port; + } + + /** + * Returns an unused random port number which is not a reserved port. Will + * try up to 10 times to get a random port before giving up and throwing a + * RuntimeException. + * + * @return an unused random port number. + * @throws RuntimeException if there was a problem getting a port. + */ + public static int getUnusedRandomPort() { + int numTries = 0; + int unusedRandomPort = FIXED_PORT_MIN; + Exception ex = null; + + while (numTries++ < 10) { + ex = null; //reset + + try (ServerSocket ss = new ServerSocket(0)) { + unusedRandomPort = ss.getLocalPort(); + } catch (Exception e) { + ex = e; + } + + if (!isReservedPort(unusedRandomPort)) { + return unusedRandomPort; + } + } + + // If we're here, then either an exception was thrown or the port is + // a reserved port. + throw new RuntimeException("Error getting unused random port.", ex); + } + + /** + * Determines if a port is one of the reserved port numbers. + * + * @param port the port to test. + * @return {@code true} if the port is a reserved port, otherwise + * {@code false}. + */ + public static boolean isReservedPort(int port) { + return ((port >= FIXED_PORT_MIN) && (port <= FIXED_PORT_MAX) || + (port == 1099)); + } + /** * Method to capture the stack trace of an exception and return it * as a string. diff --git a/jdk/test/java/rmi/transport/checkFQDN/CheckFQDN.java b/jdk/test/java/rmi/transport/checkFQDN/CheckFQDN.java index 880b700710f..006de5b6c89 100644 --- a/jdk/test/java/rmi/transport/checkFQDN/CheckFQDN.java +++ b/jdk/test/java/rmi/transport/checkFQDN/CheckFQDN.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,6 +34,7 @@ * * @library ../../testlibrary * @build CheckFQDN CheckFQDNClient CheckFQDN_Stub TellServerName + * @build TestLibrary * @run main/othervm/timeout=120 CheckFQDN */ @@ -63,7 +64,7 @@ import java.io.*; */ public class CheckFQDN extends UnicastRemoteObject implements TellServerName { - + public static int REGISTRY_PORT =-1; static String propertyBeingTested = null; static String propertyBeingTestedValue = null; @@ -77,8 +78,8 @@ public class CheckFQDN extends UnicastRemoteObject System.err.println ("\nRegression test for bug/rfe 4115683\n"); - Registry registry = java.rmi.registry.LocateRegistry. - createRegistry(TestLibrary.REGISTRY_PORT); + Registry registry = TestLibrary.createRegistryOnUnusedPort(); + REGISTRY_PORT = TestLibrary.getRegistryPort(registry); registry.bind("CheckFQDN", checkFQDN); /* test the host name scheme in different environments.*/ @@ -117,7 +118,9 @@ public class CheckFQDN extends UnicastRemoteObject JavaVM jvm = new JavaVM("CheckFQDNClient", propOption + property + equal + - propertyValue + extraProp, + propertyValue + extraProp + + " -Drmi.registry.port=" + + REGISTRY_PORT, ""); propertyBeingTested=property; diff --git a/jdk/test/java/rmi/transport/checkFQDN/CheckFQDNClient.java b/jdk/test/java/rmi/transport/checkFQDN/CheckFQDNClient.java index c1666f49ec3..37d9b973260 100644 --- a/jdk/test/java/rmi/transport/checkFQDN/CheckFQDNClient.java +++ b/jdk/test/java/rmi/transport/checkFQDN/CheckFQDNClient.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,8 +58,9 @@ public class CheckFQDNClient implements Runnable { System.err.println("Client host name: " + hostname); + int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port")); tell = (TellServerName) Naming.lookup("rmi://:" + - TestLibrary.REGISTRY_PORT + registryPort + "/CheckFQDN"); tell.tellServerName(hostname); System.err.println("client has exited"); diff --git a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java index 34dd9c99eda..0ab00577dc8 100644 --- a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java +++ b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ * * @library ../../testlibrary * @build CheckLeaseLeak CheckLeaseLeak_Stub LeaseLeakClient LeaseLeak + * @build TestLibrary * @run main/othervm/timeout=240 CheckLeaseLeak * */ @@ -57,7 +58,6 @@ import java.lang.reflect.*; import java.rmi.registry.*; public class CheckLeaseLeak extends UnicastRemoteObject implements LeaseLeak { - public CheckLeaseLeak() throws RemoteException { } public void ping () throws RemoteException { } @@ -87,8 +87,8 @@ public class CheckLeaseLeak extends UnicastRemoteObject implements LeaseLeak { try { Registry registry = - java.rmi.registry.LocateRegistry. - createRegistry(TestLibrary.REGISTRY_PORT); + TestLibrary.createRegistryOnUnusedPort(); + int registryPort = TestLibrary.getRegistryPort(registry); leakServer = new CheckLeaseLeak(); registry.rebind("/LeaseLeak", leakServer); @@ -99,7 +99,10 @@ public class CheckLeaseLeak extends UnicastRemoteObject implements LeaseLeak { JavaVM jvm = new JavaVM("LeaseLeakClient", " -Djava.security.policy=" + - TestParams.defaultPolicy, ""); + TestParams.defaultPolicy + + " -Drmi.registry.port=" + + registryPort, + ""); jvm.start(); if (jvm.getVM().waitFor() == 1 ) { diff --git a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/LeaseLeakClient.java b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/LeaseLeakClient.java index c8e5c75c478..d9cf9fa9e96 100644 --- a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/LeaseLeakClient.java +++ b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/LeaseLeakClient.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,11 +31,11 @@ public class LeaseLeakClient { try { LeaseLeak leaseLeak = null; + int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port")); // put a reference on a remote object. Registry registry = - java.rmi.registry.LocateRegistry.getRegistry( - TestLibrary.REGISTRY_PORT); + java.rmi.registry.LocateRegistry.getRegistry(registryPort); leaseLeak = (LeaseLeak) registry.lookup("/LeaseLeak"); leaseLeak.ping(); diff --git a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/security.policy b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/security.policy index 8dd6d5d6f2c..cc5811f85e2 100644 --- a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/security.policy +++ b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/security.policy @@ -19,6 +19,7 @@ grant { permission java.util.PropertyPermission "user.dir", "read"; permission java.util.PropertyPermission "java.home", "read"; + permission java.util.PropertyPermission "rmi.registry.port", "read"; permission java.util.PropertyPermission "java.security.policy", "read"; permission java.util.PropertyPermission "java.security.manager", "read"; diff --git a/jdk/test/java/rmi/transport/closeServerSocket/CloseServerSocket.java b/jdk/test/java/rmi/transport/closeServerSocket/CloseServerSocket.java index 1feb5978947..69c51de8074 100644 --- a/jdk/test/java/rmi/transport/closeServerSocket/CloseServerSocket.java +++ b/jdk/test/java/rmi/transport/closeServerSocket/CloseServerSocket.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,8 @@ * the local port is released). * @author Peter Jones * - * @build CloseServerSocket + * @library ../../testlibrary + * @build CloseServerSocket TestLibrary * @run main/othervm CloseServerSocket */ @@ -44,8 +45,7 @@ import java.rmi.server.RMIServerSocketFactory; import java.rmi.server.UnicastRemoteObject; public class CloseServerSocket implements Remote { - - private static final int PORT = 2020; + private static final int PORT = TestLibrary.getUnusedRandomPort(); private CloseServerSocket() { } @@ -88,7 +88,7 @@ public class CloseServerSocket implements Remote { } private static void verifyPortFree(int port) throws IOException { - ServerSocket ss = new ServerSocket(PORT); + ServerSocket ss = new ServerSocket(port); ss.close(); System.err.println("- port " + port + " is free"); } diff --git a/jdk/test/java/rmi/transport/dgcDeadLock/DGCDeadLock.java b/jdk/test/java/rmi/transport/dgcDeadLock/DGCDeadLock.java index 2d530db910f..97ad31dc99d 100644 --- a/jdk/test/java/rmi/transport/dgcDeadLock/DGCDeadLock.java +++ b/jdk/test/java/rmi/transport/dgcDeadLock/DGCDeadLock.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,7 @@ * @build Test * @build TestImpl * @build TestImpl_Stub + * @build TestLibrary * @run main/othervm/policy=security.policy/timeout=360 DGCDeadLock */ @@ -53,7 +54,7 @@ import java.rmi.*; import java.io.*; public class DGCDeadLock implements Runnable { - + private static final int REGISTRY_PORT = TestLibrary.getUnusedRandomPort(); final static public int HOLD_TARGET_TIME = 25000; public static int TEST_FAIL_TIME = HOLD_TARGET_TIME + 30000; public static boolean finished = false; @@ -75,7 +76,9 @@ public class DGCDeadLock implements Runnable { TestParams.defaultPolicy + " -Djava.rmi.dgc.leaseValue=500000" + " -Dsun.rmi.dgc.checkInterval=" + - (HOLD_TARGET_TIME - 5000) + ""; + (HOLD_TARGET_TIME - 5000) + + " -Drmi.registry.port=" + REGISTRY_PORT + + "" ; testImplVM = new JavaVM("TestImpl", options, ""); testImplVM.start(); @@ -112,7 +115,7 @@ public class DGCDeadLock implements Runnable { // create a test client Test foo = (Test) Naming.lookup("rmi://:" + - TestLibrary.REGISTRY_PORT + + REGISTRY_PORT + "/Foo"); echo = foo.echo("Hello world"); System.err.println("Test object created."); @@ -131,7 +134,7 @@ public class DGCDeadLock implements Runnable { //import "Bar" Test bar = (Test) Naming.lookup("rmi://:" + - TestLibrary.REGISTRY_PORT + + REGISTRY_PORT + "/Bar"); /* infinite loop to show the liveness of Client, diff --git a/jdk/test/java/rmi/transport/dgcDeadLock/TestImpl.java b/jdk/test/java/rmi/transport/dgcDeadLock/TestImpl.java index e9a734db202..774e38ae6db 100644 --- a/jdk/test/java/rmi/transport/dgcDeadLock/TestImpl.java +++ b/jdk/test/java/rmi/transport/dgcDeadLock/TestImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,7 +36,6 @@ import java.rmi.server.*; public class TestImpl extends UnicastRemoteObject implements Test { - static Thread locker = null; static TestImpl foo = null; static TestImpl bar = null; @@ -57,20 +56,21 @@ public class TestImpl extends UnicastRemoteObject Registry registry = null; try { + int registryPort = Integer.parseInt(System.getProperty("rmi.registry.port")); registry = java.rmi.registry.LocateRegistry. - createRegistry(TestLibrary.REGISTRY_PORT); + createRegistry(registryPort); //export "Foo" foo = new TestImpl(); Naming.rebind("rmi://:" + - TestLibrary.REGISTRY_PORT + registryPort + "/Foo", foo); try { //export "Bar" after leases have been expired. bar = new TestImpl(); Naming.rebind("rmi://localhost:" + - TestLibrary.REGISTRY_PORT + registryPort + "/Bar", bar); } catch (Exception e) { throw new RemoteException(e.getMessage()); diff --git a/jdk/test/java/rmi/transport/handshakeFailure/HandshakeFailure.java b/jdk/test/java/rmi/transport/handshakeFailure/HandshakeFailure.java index f379baa4f34..df04070f138 100644 --- a/jdk/test/java/rmi/transport/handshakeFailure/HandshakeFailure.java +++ b/jdk/test/java/rmi/transport/handshakeFailure/HandshakeFailure.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,8 @@ * java.rmi.ConnectException or ConnectIOException, not a MarshalException. * @author Peter Jones * - * @build HandshakeFailure + * @library ../../testlibrary + * @build HandshakeFailure TestLibrary * @run main/othervm HandshakeFailure */ @@ -44,7 +45,7 @@ import java.rmi.registry.Registry; public class HandshakeFailure { - private static final int PORT = 2020; + private static final int PORT = TestLibrary.getUnusedRandomPort(); private static final int TIMEOUT = 10000; public static void main(String[] args) throws Exception { diff --git a/jdk/test/java/rmi/transport/handshakeTimeout/HandshakeTimeout.java b/jdk/test/java/rmi/transport/handshakeTimeout/HandshakeTimeout.java index 13cffe6d382..304c175772b 100644 --- a/jdk/test/java/rmi/transport/handshakeTimeout/HandshakeTimeout.java +++ b/jdk/test/java/rmi/transport/handshakeTimeout/HandshakeTimeout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,7 +33,8 @@ * this point (because no data for the invocation has yet been written). * @author Peter Jones * - * @build HandshakeTimeout + * @library ../../testlibrary + * @build HandshakeTimeout TestLibrary * @run main/othervm HandshakeTimeout */ @@ -46,7 +47,7 @@ import java.rmi.registry.Registry; public class HandshakeTimeout { - private static final int PORT = 2020; + private static final int PORT = TestLibrary.getUnusedRandomPort(); private static final int TIMEOUT = 10000; public static void main(String[] args) throws Exception { diff --git a/jdk/test/java/rmi/transport/httpSocket/HttpSocketTest.java b/jdk/test/java/rmi/transport/httpSocket/HttpSocketTest.java index c9b4d4e8790..1004bfb86ed 100644 --- a/jdk/test/java/rmi/transport/httpSocket/HttpSocketTest.java +++ b/jdk/test/java/rmi/transport/httpSocket/HttpSocketTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ * @author Dana Burns * * @library ../../testlibrary - * @build HttpSocketTest HttpSocketTest_Stub + * @build HttpSocketTest HttpSocketTest_Stub TestLibrary * @run main/othervm/policy=security.policy HttpSocketTest */ @@ -56,10 +56,7 @@ interface MyRemoteInterface extends Remote { public class HttpSocketTest extends UnicastRemoteObject implements MyRemoteInterface { - private static final String NAME = "HttpSocketTest"; - private static final String REGNAME = - "//:" + TestLibrary.REGISTRY_PORT + "/" + NAME; public HttpSocketTest() throws RemoteException{} @@ -76,21 +73,20 @@ public class HttpSocketTest extends UnicastRemoteObject // Set the socket factory. System.err.println("installing socket factory"); RMISocketFactory.setSocketFactory(new RMIHttpToPortSocketFactory()); + int registryPort = -1; try { - System.err.println("Starting registry"); - registry = LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT); - + registry = TestLibrary.createRegistryOnUnusedPort(); + registryPort = TestLibrary.getRegistryPort(registry); } catch (Exception e) { TestLibrary.bomb(e); } try { - registry.rebind( NAME, new HttpSocketTest() ); MyRemoteInterface httpTest = - (MyRemoteInterface)Naming.lookup( REGNAME ); + (MyRemoteInterface)Naming.lookup("//:" + registryPort + "/" + NAME); httpTest.setRemoteObject( new HttpSocketTest() ); Remote r = httpTest.getRemoteObject(); diff --git a/jdk/test/java/rmi/transport/httpSocket/security.policy b/jdk/test/java/rmi/transport/httpSocket/security.policy index 476bbaabdb5..a0e932009e6 100644 --- a/jdk/test/java/rmi/transport/httpSocket/security.policy +++ b/jdk/test/java/rmi/transport/httpSocket/security.policy @@ -4,6 +4,10 @@ grant codeBase "file:${java.home}/lib/ext/*" { grant { permission java.net.SocketPermission "*:1024-", "accept,connect,listen"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.registry"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.server"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport"; permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.proxy"; + permission java.lang.RuntimePermission "accessClassInPackage.sun.rmi.transport.tcp"; permission java.lang.RuntimePermission "setFactory"; }; diff --git a/jdk/test/java/rmi/transport/pinClientSocketFactory/PinClientSocketFactory.java b/jdk/test/java/rmi/transport/pinClientSocketFactory/PinClientSocketFactory.java index ef179602444..99357ffdb0b 100644 --- a/jdk/test/java/rmi/transport/pinClientSocketFactory/PinClientSocketFactory.java +++ b/jdk/test/java/rmi/transport/pinClientSocketFactory/PinClientSocketFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,8 @@ * should become unreachable too (through the RMI implementation). * @author Peter Jones * + * @library ../../testlibrary + * @build TestLibrary * @run main/othervm -Dsun.rmi.transport.connectionTimeout=2000 * PinClientSocketFactory */ @@ -56,7 +58,7 @@ import java.util.concurrent.atomic.AtomicInteger; public class PinClientSocketFactory { - private static final int PORT = 2345; + private static final int PORT = TestLibrary.getUnusedRandomPort(); private static final int SESSIONS = 50; public interface Factory extends Remote { diff --git a/jdk/test/java/rmi/transport/pinLastArguments/PinLastArguments.java b/jdk/test/java/rmi/transport/pinLastArguments/PinLastArguments.java index 445bdf389ba..f82560236c6 100644 --- a/jdk/test/java/rmi/transport/pinLastArguments/PinLastArguments.java +++ b/jdk/test/java/rmi/transport/pinLastArguments/PinLastArguments.java @@ -78,10 +78,15 @@ public class PinLastArguments { } impl = null; - System.gc(); - - if (ref.get() != null) { - throw new Error("TEST FAILED: impl not garbage collected"); + // Might require multiple calls to System.gc() for weak-references + // processing to be complete. If the weak-reference is not cleared as + // expected we will hang here until timed out by the test harness. + while (true) { + System.gc(); + Thread.sleep(20); + if (ref.get() == null) { + break; + } } System.err.println("TEST PASSED"); diff --git a/jdk/test/java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java b/jdk/test/java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java index 9e722bac12b..5b21da8680a 100644 --- a/jdk/test/java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java +++ b/jdk/test/java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,8 @@ * procedure (which sleeps 10 seconds after 10 rapid failures). * @author Peter Jones * - * @build RapidExportUnexport + * @library ../../testlibrary + * @build TestLibrary RapidExportUnexport * @run main/othervm RapidExportUnexport */ @@ -39,9 +40,7 @@ import java.rmi.Remote; import java.rmi.server.UnicastRemoteObject; public class RapidExportUnexport { - - private static final int PORT = 2055; - + private static final int PORT = TestLibrary.getUnusedRandomPort(); private static final int REPS = 100; private static final long TIMEOUT = 60000; diff --git a/jdk/test/java/rmi/transport/reuseDefaultPort/ReuseDefaultPort.java b/jdk/test/java/rmi/transport/reuseDefaultPort/ReuseDefaultPort.java index d75257e75cb..decec588d01 100644 --- a/jdk/test/java/rmi/transport/reuseDefaultPort/ReuseDefaultPort.java +++ b/jdk/test/java/rmi/transport/reuseDefaultPort/ReuseDefaultPort.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,7 +33,8 @@ * continue to work because existing applications might depend on it. * @author Peter Jones * - * @build ReuseDefaultPort + * @library ../../testlibrary + * @build ReuseDefaultPort TestLibrary * @run main/othervm ReuseDefaultPort */ @@ -48,7 +49,7 @@ import java.rmi.server.UnicastRemoteObject; public class ReuseDefaultPort implements Remote { - private static final int PORT = 2223; + private static final int PORT = TestLibrary.getUnusedRandomPort(); private ReuseDefaultPort() { } diff --git a/jdk/test/java/util/prefs/AddNodeChangeListener.java b/jdk/test/java/util/prefs/AddNodeChangeListener.java new file mode 100644 index 00000000000..8b506dc7e18 --- /dev/null +++ b/jdk/test/java/util/prefs/AddNodeChangeListener.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + /* @test + * @bug 7160252 + * @summary Checks if events are delivered to a listener + * when a child node is added or removed + */ + +import java.util.prefs.*; + + public class AddNodeChangeListener { + + private static boolean failed = false; + private static Preferences userRoot, N2; + private static NodeChangeListenerAdd ncla; + + public static void main(String[] args) + throws BackingStoreException, InterruptedException + { + userRoot = Preferences.userRoot(); + ncla = new NodeChangeListenerAdd(); + userRoot.addNodeChangeListener(ncla); + //Should initiate a node added event + addNode(); + // Should not initiate a node added event + addNode(); + //Should initate a child removed event + removeNode(); + + if (failed) + throw new RuntimeException("Failed"); + } + + private static void addNode() + throws BackingStoreException, InterruptedException + { + N2 = userRoot.node("N2"); + userRoot.flush(); + Thread.sleep(3000); + if (ncla.getAddNumber() != 1) + failed = true; + } + + private static void removeNode() + throws BackingStoreException, InterruptedException + { + N2.removeNode(); + userRoot.flush(); + Thread.sleep(3000); + if (ncla.getAddNumber() != 0) + failed = true; + } + + private static class NodeChangeListenerAdd implements NodeChangeListener { + private int totalNode = 0; + + @Override + public void childAdded(NodeChangeEvent evt) { + totalNode++; + } + + @Override + public void childRemoved(NodeChangeEvent evt) { + totalNode--; + } + + public int getAddNumber(){ + return totalNode; + } + } + } diff --git a/jdk/test/javax/swing/SwingUtilities/7170657/bug7170657.java b/jdk/test/javax/swing/SwingUtilities/7170657/bug7170657.java new file mode 100644 index 00000000000..e28ce7ab9b9 --- /dev/null +++ b/jdk/test/javax/swing/SwingUtilities/7170657/bug7170657.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Frame; +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseWheelEvent; + +import javax.swing.SwingUtilities; +import javax.swing.event.MenuDragMouseEvent; + +/** + * @test + * @bug 7170657 + * @author Sergey Bylokhov + */ +public final class bug7170657 { + + private static boolean FAILED; + + public static void main(final String[] args) { + final int mask = InputEvent.META_DOWN_MASK | InputEvent.CTRL_MASK; + + Frame f = new Frame(); + + MouseEvent mwe = new MouseWheelEvent(f, 1, 1, mask, 1, 1, 1, 1, 1, true, + 1, 1, 1); + MouseEvent mdme = new MenuDragMouseEvent(f, 1, 1, mask, 1, 1, 1, 1, 1, + true, null, null); + MouseEvent me = new MouseEvent(f, 1, 1, mask, 1, 1, 1, 1, 1, true, + MouseEvent.NOBUTTON); + + test(f, mwe); + test(f, mdme); + test(f, me); + + if (FAILED) { + throw new RuntimeException("Wrong mouse event"); + } + } + + + private static void test(final Frame frame, final MouseEvent me) { + MouseEvent newme = SwingUtilities.convertMouseEvent(frame, me, frame); + if (me.getModifiersEx() != newme.getModifiersEx() + || me.getModifiers() != newme.getModifiers()) { + fail(me, newme); + } + } + + private static void fail(final MouseEvent exp, final MouseEvent act) { + System.err.println("Expected: " + exp); + System.err.println("Actual: " + act); + FAILED = true; + } +} diff --git a/jdk/test/javax/swing/border/Test7022041.java b/jdk/test/javax/swing/border/Test7022041.java new file mode 100644 index 00000000000..cccd90ed1ec --- /dev/null +++ b/jdk/test/javax/swing/border/Test7022041.java @@ -0,0 +1,133 @@ +/* + * Copyright 2012 Red Hat, Inc. All Rights Reserved. + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +import java.awt.Color; +import java.awt.Font; + +import javax.swing.border.EmptyBorder; +import javax.swing.border.TitledBorder; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; + +/* @test + * @bug 7022041 + * @summary This test check the behaviour of getTitleFont() and getTitleColor() + * methods of the TitledBorder class. + * @author Pavel Tisnovsky + */ +public class Test7022041 { + + public static void main(String[] args) throws Exception { + UIManager.LookAndFeelInfo[] installedLookAndFeels = UIManager.getInstalledLookAndFeels(); + // try to test all installed Look and Feels + for (UIManager.LookAndFeelInfo lookAndFeel : installedLookAndFeels) { + String name = lookAndFeel.getName(); + System.out.println("Testing " + name); + // Some Look and Feels work only when test is run in a GUI environment + // (GTK+ LAF is an example) + try { + UIManager.setLookAndFeel(lookAndFeel.getClassName()); + checkTitleColor(); + System.out.println(" titleColor test ok"); + checkTitleFont(); + System.out.println(" titleFont test ok"); + } + catch (UnsupportedLookAndFeelException e) { + System.out.println(" Note: LookAndFeel " + name + + " is not supported on this configuration"); + } + } + } + + /** + * Check behaviour of method TitledBorder.getTitleColor() + */ + private static void checkTitleColor() { + TitledBorder titledBorder = new TitledBorder(new EmptyBorder(1, 1, 1, 1)); + Color defaultColor = UIManager.getLookAndFeelDefaults().getColor("TitledBorder.titleColor"); + Color titledBorderColor = titledBorder.getTitleColor(); + + // check default configuration + if (defaultColor == null) { + if (titledBorderColor == null) { + return; + } + else { + throw new RuntimeException("TitledBorder default color should be null"); + } + } + if (!defaultColor.equals(titledBorderColor)) { + throw new RuntimeException("L&F default color " + defaultColor.toString() + + " differs from TitledBorder color " + titledBorderColor.toString()); + } + + // title color is explicitly specified + Color color = Color.green; + titledBorder.setTitleColor(color); + if (!color.equals(titledBorder.getTitleColor())) { + throw new RuntimeException("TitledBorder color should be " + color.toString()); + } + + // title color is unspecified + titledBorder.setTitleColor(null); + if (!defaultColor.equals(titledBorder.getTitleColor())) { + throw new RuntimeException("L&F default color " + defaultColor.toString() + + " differs from TitledBorder color " + titledBorderColor.toString()); + } + } + + /** + * Check behaviour of method TitledBorder.getTitleFont() + */ + private static void checkTitleFont() { + TitledBorder titledBorder = new TitledBorder(new EmptyBorder(1, 1, 1, 1)); + Font defaultFont = UIManager.getLookAndFeelDefaults().getFont("TitledBorder.font"); + Font titledBorderFont = titledBorder.getTitleFont(); + + // check default configuration + if (defaultFont == null) { + if (titledBorderFont == null) { + return; + } + else { + throw new RuntimeException("TitledBorder default font should be null"); + } + } + if (!defaultFont.equals(titledBorderFont)) { + throw new RuntimeException("L&F default font " + defaultFont.toString() + + " differs from TitledBorder font " + titledBorderFont.toString()); + } + + // title font is explicitly specified + Font font = new Font("Dialog", Font.PLAIN, 10); + titledBorder.setTitleFont(font); + if (!font.equals(titledBorder.getTitleFont())) { + throw new RuntimeException("TitledBorder font should be " + font.toString()); + } + + // title Font is unspecified + titledBorder.setTitleFont(null); + if (!defaultFont.equals(titledBorder.getTitleFont())) { + throw new RuntimeException("L&F default font " + defaultFont.toString() + + " differs from TitledBorder font " + titledBorderFont.toString()); + } + } +} + diff --git a/jdk/test/sun/java2d/OpenGL/bug7181438.java b/jdk/test/sun/java2d/OpenGL/bug7181438.java new file mode 100644 index 00000000000..3aa67387bf8 --- /dev/null +++ b/jdk/test/sun/java2d/OpenGL/bug7181438.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsEnvironment; +import java.awt.Transparency; +import java.awt.image.BufferedImage; +import java.awt.image.VolatileImage; + +/** + * @test + * @bug 7181438 + * @summary Verifies that we get correct alpha, when we draw opaque + * BufferedImage to non opaque VolatileImage via intermediate opaque texture. + * @author Sergey Bylokhov + * @run main/othervm -Dsun.java2d.accthreshold=0 bug7181438 + */ +public final class bug7181438 { + + private static final int SIZE = 500; + + public static void main(final String[] args) { + + final BufferedImage bi = createBufferedImage(); + final VolatileImage vi = createVolatileImage(); + final Graphics s2dVi = vi.getGraphics(); + + //sw->texture->surface blit + s2dVi.drawImage(bi, 0, 0, null); + + final BufferedImage results = vi.getSnapshot(); + for (int i = 0; i < SIZE; ++i) { + for (int j = 0; j < SIZE; ++j) { + //Image should be opaque: (black color and alpha = 255) + if (results.getRGB(i, j) != 0xFF000000) { + throw new RuntimeException("Failed: Wrong alpha"); + } + } + } + System.out.println("Passed"); + } + + + private static VolatileImage createVolatileImage() { + final GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + final GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration(); + return gc.createCompatibleVolatileImage(SIZE, SIZE, + Transparency.TRANSLUCENT); + } + + private static BufferedImage createBufferedImage() { + final BufferedImage bi = new BufferedImage(SIZE, SIZE, + BufferedImage.TYPE_INT_RGB); + final Graphics bg = bi.getGraphics(); + //Black color and alpha = 0 + bg.setColor(new Color(0, 0, 0, 0)); + bg.fillRect(0, 0, SIZE, SIZE); + bg.dispose(); + return bi; + } +} diff --git a/jdk/test/sun/nio/cs/OLD/DoubleByteDecoder.java b/jdk/test/sun/nio/cs/OLD/DoubleByteDecoder.java index 4de99096b49..7565a4d3be3 100644 --- a/jdk/test/sun/nio/cs/OLD/DoubleByteDecoder.java +++ b/jdk/test/sun/nio/cs/OLD/DoubleByteDecoder.java @@ -26,7 +26,6 @@ /* */ -//package sun.nio.cs.ext; import java.nio.ByteBuffer; import java.nio.CharBuffer; diff --git a/jdk/test/sun/nio/cs/OLD/DoubleByteEncoder.java b/jdk/test/sun/nio/cs/OLD/DoubleByteEncoder.java index 42c276d1957..ca04fae671e 100644 --- a/jdk/test/sun/nio/cs/OLD/DoubleByteEncoder.java +++ b/jdk/test/sun/nio/cs/OLD/DoubleByteEncoder.java @@ -26,7 +26,6 @@ /* */ -//package sun.nio.cs.ext; import java.nio.ByteBuffer; import java.nio.CharBuffer; @@ -95,7 +94,7 @@ public abstract class DoubleByteEncoder try { while (sp < sl) { char c = sa[sp]; - if (Surrogate.is(c)) { + if (Character.isSurrogate(c)) { if (sgp.parse(c, sa, sp, sl) < 0) return sgp.error(); if (sl - sp < 2) @@ -153,7 +152,7 @@ public abstract class DoubleByteEncoder try { while (src.hasRemaining()) { char c = src.get(); - if (Surrogate.is(c)) { + if (Character.isSurrogate(c)) { int surr; if ((surr = sgp.parse(c, src)) < 0) return sgp.error(); diff --git a/jdk/test/sun/nio/cs/OLD/EUC_JP_LINUX_OLD.java b/jdk/test/sun/nio/cs/OLD/EUC_JP_LINUX_OLD.java new file mode 100644 index 00000000000..121e5b35849 --- /dev/null +++ b/jdk/test/sun/nio/cs/OLD/EUC_JP_LINUX_OLD.java @@ -0,0 +1,367 @@ +/* + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + */ + +import java.nio.*; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CharsetEncoder; +import java.nio.charset.CoderResult; +import sun.nio.cs.HistoricallyNamedCharset; +import sun.nio.cs.Surrogate; + +public class EUC_JP_LINUX_OLD + extends Charset + implements HistoricallyNamedCharset +{ + public EUC_JP_LINUX_OLD() { + super("x-euc-jp-linux_OLD", null); + } + + public String historicalName() { + return "EUC_JP_LINUX"; + } + + public boolean contains(Charset cs) { + return ((cs instanceof JIS_X_0201_OLD) + || (cs.name().equals("US-ASCII")) + || (cs instanceof EUC_JP_LINUX_OLD)); + } + + public CharsetDecoder newDecoder() { + return new Decoder(this); + } + + public CharsetEncoder newEncoder() { + return new Encoder(this); + } + + private static class Decoder extends CharsetDecoder { + JIS_X_0201_OLD.Decoder decoderJ0201; + protected final char REPLACE_CHAR='\uFFFD'; + + private static final int start = 0xa1; + private static final int end = 0xfe; + private static final short[] jis0208Index1 = + JIS_X_0208_Decoder.getIndex1(); + private static final String[] jis0208Index2 = + JIS_X_0208_Decoder.getIndex2(); + + private Decoder(Charset cs) { + super(cs, 1.0f, 1.0f); + decoderJ0201 = new JIS_X_0201_OLD.Decoder(cs); + } + + protected char convSingleByte(int b) { + if (b < 0 || b > 0x7f) + return REPLACE_CHAR; + return decoderJ0201.decode(b); + } + + protected char decodeDouble(int byte1, int byte2) { + if (byte1 == 0x8e) { + return decoderJ0201.decode(byte2 - 256); + } + + if (((byte1 < 0) || (byte1 > jis0208Index1.length)) + || ((byte2 < start) || (byte2 > end))) + return REPLACE_CHAR; + + int n = (jis0208Index1[byte1 - 0x80] & 0xf) * (end - start + 1) + + (byte2 - start); + return jis0208Index2[jis0208Index1[byte1 - 0x80] >> 4].charAt(n); + } + + private CoderResult decodeArrayLoop(ByteBuffer src, + CharBuffer dst) + { + byte[] sa = src.array(); + int sp = src.arrayOffset() + src.position(); + int sl = src.arrayOffset() + src.limit(); + assert (sp <= sl); + sp = (sp <= sl ? sp : sl); + + char[] da = dst.array(); + int dp = dst.arrayOffset() + dst.position(); + int dl = dst.arrayOffset() + dst.limit(); + assert (dp <= dl); + dp = (dp <= dl ? dp : dl); + + int b1 = 0, b2 = 0; + int inputSize = 0; + char outputChar = REPLACE_CHAR; // U+FFFD; + + try { + while (sp < sl) { + b1 = sa[sp] & 0xff; + inputSize = 1; + if ((b1 & 0x80) == 0) { + outputChar = (char)b1; + } + else { // Multibyte char + if ((b1 & 0xff) == 0x8f) { // JIS0212 + if (sp + 3 > sl) + return CoderResult.UNDERFLOW; + inputSize = 3; + return CoderResult.unmappableForLength(inputSize); // substitute + } else { + // JIS0208 + if (sp + 2 > sl) + return CoderResult.UNDERFLOW; + b2 = sa[sp + 1] & 0xff; + inputSize = 2; + outputChar = decodeDouble(b1, b2); + } + } + if (outputChar == REPLACE_CHAR) { // can't be decoded + return CoderResult.unmappableForLength(inputSize); + } + if (dp + 1 > dl) + return CoderResult.OVERFLOW; + da[dp++] = outputChar; + sp += inputSize; + } + return CoderResult.UNDERFLOW; + } finally { + src.position(sp - src.arrayOffset()); + dst.position(dp - dst.arrayOffset()); + } + } + + private CoderResult decodeBufferLoop(ByteBuffer src, + CharBuffer dst) + { + int mark = src.position(); + char outputChar = REPLACE_CHAR; // U+FFFD; + + try { + while (src.hasRemaining()) { + int b1 = src.get() & 0xff; + int inputSize = 1; + + if ((b1 & 0x80) == 0) { + outputChar = (char)b1; + } else { // Multibyte char + + if ((b1 & 0xff) == 0x8f) { // JIS0212 not supported + if (src.remaining() < 2) + return CoderResult.UNDERFLOW; + return CoderResult.unmappableForLength(3); + } else { + // JIS0208 + if (src.remaining() < 1) + return CoderResult.UNDERFLOW; + int b2 = src.get() & 0xff; + inputSize++; + outputChar = decodeDouble(b1, b2); + } + } + + if (outputChar == REPLACE_CHAR) + return CoderResult.unmappableForLength(inputSize); + if (dst.remaining() < 1) + return CoderResult.OVERFLOW; + dst.put(outputChar); + mark += inputSize; + } + return CoderResult.UNDERFLOW; + } finally { + src.position(mark); + } + } + + protected CoderResult decodeLoop(ByteBuffer src, + CharBuffer dst) + { + if (src.hasArray() && dst.hasArray()) + return decodeArrayLoop(src, dst); + else + return decodeBufferLoop(src, dst); + } + } + + + private static class Encoder extends CharsetEncoder { + + JIS_X_0201_OLD.Encoder encoderJ0201; + + private final Surrogate.Parser sgp = new Surrogate.Parser(); + private static final short[] jis0208Index1 = + JIS_X_0208_Encoder.getIndex1(); + private static final String[] jis0208Index2 = + JIS_X_0208_Encoder.getIndex2(); + + private Encoder(Charset cs) { + super(cs, 2.0f, 2.0f); + encoderJ0201 = new JIS_X_0201_OLD.Encoder(cs); + } + + public boolean canEncode(char c) { + byte[] encodedBytes = new byte[2]; + + if (encodeSingle(c, encodedBytes) == 0) { //doublebyte + if (encodeDouble(c) == 0) + return false; + } + return true; + } + + protected int encodeSingle(char inputChar, byte[] outputByte) { + byte b; + + if (inputChar == 0) { + outputByte[0] = (byte)0; + return 1; + } + + if ((b = encoderJ0201.encode(inputChar)) == 0) + return 0; + + if (b > 0 && b < 128) { + outputByte[0] = b; + return 1; + } + outputByte[0] = (byte)0x8e; + outputByte[1] = b; + return 2; + } + + protected int encodeDouble(char ch) { + int offset = jis0208Index1[((ch & 0xff00) >> 8 )] << 8; + int r = jis0208Index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff)); + if (r != 0) + return r + 0x8080; + return r; + } + + private CoderResult encodeArrayLoop(CharBuffer src, + ByteBuffer dst) + { + char[] sa = src.array(); + int sp = src.arrayOffset() + src.position(); + int sl = src.arrayOffset() + src.limit(); + assert (sp <= sl); + sp = (sp <= sl ? sp : sl); + byte[] da = dst.array(); + int dp = dst.arrayOffset() + dst.position(); + int dl = dst.arrayOffset() + dst.limit(); + assert (dp <= dl); + dp = (dp <= dl ? dp : dl); + + final byte[] outputByte = new byte[2]; + + try { + while (sp < sl) { + char c = sa[sp]; + + if (Character.isSurrogate(c)) { + if (sgp.parse(c, sa, sp, sl) < 0) + return sgp.error(); + return sgp.unmappableResult(); + } + + int outputSize = encodeSingle(c, outputByte); + if (outputSize == 0) { // DoubleByte + int ncode = encodeDouble(c); + if (ncode != 0 && ((ncode & 0xFF0000) == 0)) { + outputByte[0] = (byte) ((ncode & 0xff00) >> 8); + outputByte[1] = (byte) (ncode & 0xff); + outputSize = 2; + } else { + return CoderResult.unmappableForLength(1); + } + } + + if (dl - dp < outputSize) + return CoderResult.OVERFLOW; + // Put the byte in the output buffer + for (int i = 0; i < outputSize; i++) { + da[dp++] = outputByte[i]; + } + sp++; + } + return CoderResult.UNDERFLOW; + } finally { + src.position(sp - src.arrayOffset()); + dst.position(dp - dst.arrayOffset()); + } + } + + private CoderResult encodeBufferLoop(CharBuffer src, + ByteBuffer dst) + { + final byte[] outputByte = new byte[4]; + int mark = src.position(); + + try { + while (src.hasRemaining()) { + char c = src.get(); + if (Character.isSurrogate(c)) { + if (sgp.parse(c, src) < 0) + return sgp.error(); + return sgp.unmappableResult(); + } + + int outputSize = encodeSingle(c, outputByte); + if (outputSize == 0) { // DoubleByte + int ncode = encodeDouble(c); + if (ncode != 0 ) { + if ((ncode & 0xFF0000) == 0) { + outputByte[0] = (byte) ((ncode & 0xff00) >> 8); + outputByte[1] = (byte) (ncode & 0xff); + outputSize = 2; + } + } else { + return CoderResult.unmappableForLength(1); + } + } + + if (dst.remaining() < outputSize) + return CoderResult.OVERFLOW; + + // Put the byte in the output buffer + for (int i = 0; i < outputSize; i++) { + dst.put(outputByte[i]); + } + mark++; + } + return CoderResult.UNDERFLOW; + } finally { + src.position(mark); + } + } + + protected CoderResult encodeLoop(CharBuffer src, + ByteBuffer dst) + { + if (src.hasArray() && dst.hasArray()) + return encodeArrayLoop(src, dst); + else + return encodeBufferLoop(src, dst); + } + } +} diff --git a/jdk/test/sun/nio/cs/OLD/EUC_JP_OLD.java b/jdk/test/sun/nio/cs/OLD/EUC_JP_OLD.java new file mode 100644 index 00000000000..96d93634f8e --- /dev/null +++ b/jdk/test/sun/nio/cs/OLD/EUC_JP_OLD.java @@ -0,0 +1,420 @@ +/* + * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + */ + +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CharsetEncoder; +import java.nio.charset.CoderResult; +import sun.nio.cs.HistoricallyNamedCharset; +import sun.nio.cs.Surrogate; + +public class EUC_JP_OLD + extends Charset + implements HistoricallyNamedCharset +{ + public EUC_JP_OLD() { + super("EUC-JP_OLD", null); + } + + public String historicalName() { + return "EUC_JP"; + } + + public boolean contains(Charset cs) { + return ((cs.name().equals("US-ASCII")) + || (cs instanceof JIS_X_0201_OLD) + || (cs instanceof JIS_X_0208_OLD) + || (cs instanceof JIS_X_0212_OLD) + || (cs instanceof EUC_JP_OLD)); + } + + public CharsetDecoder newDecoder() { + return new Decoder(this); + } + + public CharsetEncoder newEncoder() { + + // Need to force the replacement byte to 0x3f + // because JIS_X_0208_Encoder defines its own + // alternative 2 byte substitution to permit it + // to exist as a self-standing Encoder + + byte[] replacementBytes = { (byte)0x3f }; + return new Encoder(this).replaceWith(replacementBytes); + } + + + static class Decoder extends JIS_X_0208_Decoder { + + JIS_X_0201_OLD.Decoder decoderJ0201; + JIS_X_0212_Decoder decoderJ0212; + + private static final short[] j0208Index1 = + JIS_X_0208_Decoder.getIndex1(); + private static final String[] j0208Index2 = + JIS_X_0208_Decoder.getIndex2(); + + protected Decoder(Charset cs) { + super(cs); + decoderJ0201 = new JIS_X_0201_OLD.Decoder(cs); + decoderJ0212 = new JIS_X_0212_Decoder(cs); + start = 0xa1; + end = 0xfe; + } + protected char decode0212(int byte1, int byte2) { + return decoderJ0212.decodeDouble(byte1, byte2); + } + + protected char decodeDouble(int byte1, int byte2) { + if (byte1 == 0x8e) { + return decoderJ0201.decode(byte2 - 256); + } + // Fix for bug 4121358 - similar fix for bug 4117820 put + // into ByteToCharDoubleByte.getUnicode() + if (((byte1 < 0) || (byte1 > getIndex1().length)) + || ((byte2 < start) || (byte2 > end))) + return REPLACE_CHAR; + + int n = (j0208Index1[byte1 - 0x80] & 0xf) * (end - start + 1) + + (byte2 - start); + return j0208Index2[j0208Index1[byte1 - 0x80] >> 4].charAt(n); + } + + private CoderResult decodeArrayLoop(ByteBuffer src, + CharBuffer dst) + { + byte[] sa = src.array(); + int sp = src.arrayOffset() + src.position(); + int sl = src.arrayOffset() + src.limit(); + assert (sp <= sl); + sp = (sp <= sl ? sp : sl); + + char[] da = dst.array(); + int dp = dst.arrayOffset() + dst.position(); + int dl = dst.arrayOffset() + dst.limit(); + assert (dp <= dl); + dp = (dp <= dl ? dp : dl); + + int b1 = 0, b2 = 0; + int inputSize = 0; + char outputChar = REPLACE_CHAR; // U+FFFD; + + try { + while (sp < sl) { + b1 = sa[sp] & 0xff; + inputSize = 1; + + if ((b1 & 0x80) == 0) { + outputChar = (char)b1; + } + else { // Multibyte char + if ((b1 & 0xff) == 0x8f) { // JIS0212 + if (sp + 3 > sl) + return CoderResult.UNDERFLOW; + b1 = sa[sp + 1] & 0xff; + b2 = sa[sp + 2] & 0xff; + inputSize += 2; + outputChar = decode0212(b1-0x80, b2-0x80); + } else { + // JIS0208 + if (sp + 2 > sl) + return CoderResult.UNDERFLOW; + b2 = sa[sp + 1] & 0xff; + inputSize++; + outputChar = decodeDouble(b1, b2); + } + } + if (outputChar == REPLACE_CHAR) { // can't be decoded + return CoderResult.unmappableForLength(inputSize); + } + if (dp + 1 > dl) + return CoderResult.OVERFLOW; + da[dp++] = outputChar; + sp += inputSize; + } + return CoderResult.UNDERFLOW; + } finally { + src.position(sp - src.arrayOffset()); + dst.position(dp - dst.arrayOffset()); + } + } + + private CoderResult decodeBufferLoop(ByteBuffer src, + CharBuffer dst) + { + int mark = src.position(); + int b1 = 0, b2 = 0; + int inputSize = 0; + + char outputChar = REPLACE_CHAR; // U+FFFD; + + try { + while (src.hasRemaining()) { + b1 = src.get() & 0xff; + inputSize = 1; + + if ((b1 & 0x80) == 0) { + outputChar = (char)b1; + } else { // Multibyte char + if ((b1 & 0xff) == 0x8f) { // JIS0212 + if (src.remaining() < 2) + return CoderResult.UNDERFLOW; + b1 = src.get() & 0xff; + b2 = src.get() & 0xff; + inputSize += 2; + outputChar = decode0212(b1-0x80, b2-0x80); + } else { + // JIS0208 + if (src.remaining() < 1) + return CoderResult.UNDERFLOW; + b2 = src.get() & 0xff; + inputSize++; + outputChar = decodeDouble(b1, b2); + } + } + + if (outputChar == REPLACE_CHAR) { + return CoderResult.unmappableForLength(inputSize); + } + if (dst.remaining() < 1) + return CoderResult.OVERFLOW; + dst.put(outputChar); + mark += inputSize; + } + return CoderResult.UNDERFLOW; + } finally { + src.position(mark); + } + } + + // Make some protected methods public for use by JISAutoDetect + public CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) { + if (src.hasArray() && dst.hasArray()) + return decodeArrayLoop(src, dst); + else + return decodeBufferLoop(src, dst); + } + public void implReset() { + super.implReset(); + } + public CoderResult implFlush(CharBuffer out) { + return super.implFlush(out); + } + } + + + static class Encoder extends JIS_X_0208_Encoder { + + JIS_X_0201_OLD.Encoder encoderJ0201; + JIS_X_0212_Encoder encoderJ0212; + + private static final short[] j0208Index1 = + JIS_X_0208_Encoder.getIndex1(); + private static final String[] j0208Index2 = + JIS_X_0208_Encoder.getIndex2(); + + private final Surrogate.Parser sgp = new Surrogate.Parser(); + + protected Encoder(Charset cs) { + super(cs, 3.0f, 3.0f); + encoderJ0201 = new JIS_X_0201_OLD.Encoder(cs); + encoderJ0212 = new JIS_X_0212_Encoder(cs); + } + + public boolean canEncode(char c) { + byte[] encodedBytes = new byte[3]; + + if (encodeSingle(c, encodedBytes) == 0) { //doublebyte + if (encodeDouble(c) == 0) + return false; + } + return true; + } + + protected int encodeSingle(char inputChar, byte[] outputByte) { + byte b; + + if (inputChar == 0) { + outputByte[0] = (byte)0; + return 1; + } + + if ((b = encoderJ0201.encode(inputChar)) == 0) + return 0; + + if (b > 0 && b < 128) { + outputByte[0] = b; + return 1; + } + + outputByte[0] = (byte)0x8e; + outputByte[1] = b; + return 2; + } + + protected int encodeDouble(char ch) { + int offset = j0208Index1[((ch & 0xff00) >> 8 )] << 8; + int r = j0208Index2[offset >> 12].charAt((offset & 0xfff) + + (ch & 0xff)); + if (r != 0) + return r + 0x8080; + r = encoderJ0212.encodeDouble(ch); + if (r == 0) + return r; + return r + 0x8F8080; + } + + private CoderResult encodeArrayLoop(CharBuffer src, + ByteBuffer dst) + { + char[] sa = src.array(); + int sp = src.arrayOffset() + src.position(); + int sl = src.arrayOffset() + src.limit(); + assert (sp <= sl); + sp = (sp <= sl ? sp : sl); + byte[] da = dst.array(); + int dp = dst.arrayOffset() + dst.position(); + int dl = dst.arrayOffset() + dst.limit(); + assert (dp <= dl); + dp = (dp <= dl ? dp : dl); + + int outputSize = 0; + byte[] outputByte; + int inputSize = 0; // Size of input + byte[] tmpBuf = new byte[3]; + + try { + while (sp < sl) { + outputByte = tmpBuf; + char c = sa[sp]; + + if (Character.isSurrogate(c)) { + if (sgp.parse(c, sa, sp, sl) < 0) + return sgp.error(); + return sgp.unmappableResult(); + } + + outputSize = encodeSingle(c, outputByte); + + if (outputSize == 0) { // DoubleByte + int ncode = encodeDouble(c); + if (ncode != 0 ) { + if ((ncode & 0xFF0000) == 0) { + outputByte[0] = (byte) ((ncode & 0xff00) >> 8); + outputByte[1] = (byte) (ncode & 0xff); + outputSize = 2; + } else { + outputByte[0] = (byte) 0x8f; + outputByte[1] = (byte) ((ncode & 0xff00) >> 8); + outputByte[2] = (byte) (ncode & 0xff); + outputSize = 3; + } + } else { + return CoderResult.unmappableForLength(1); + } + } + if (dl - dp < outputSize) + return CoderResult.OVERFLOW; + // Put the byte in the output buffer + for (int i = 0; i < outputSize; i++) { + da[dp++] = outputByte[i]; + } + sp++; + } + return CoderResult.UNDERFLOW; + } finally { + src.position(sp - src.arrayOffset()); + dst.position(dp - dst.arrayOffset()); + } + } + + private CoderResult encodeBufferLoop(CharBuffer src, + ByteBuffer dst) + { + int outputSize = 0; + byte[] outputByte; + int inputSize = 0; // Size of input + byte[] tmpBuf = new byte[3]; + + int mark = src.position(); + + try { + while (src.hasRemaining()) { + outputByte = tmpBuf; + char c = src.get(); + if (Character.isSurrogate(c)) { + if (sgp.parse(c, src) < 0) + return sgp.error(); + return sgp.unmappableResult(); + } + + outputSize = encodeSingle(c, outputByte); + if (outputSize == 0) { // DoubleByte + int ncode = encodeDouble(c); + if (ncode != 0 ) { + if ((ncode & 0xFF0000) == 0) { + outputByte[0] = (byte) ((ncode & 0xff00) >> 8); + outputByte[1] = (byte) (ncode & 0xff); + outputSize = 2; + } else { + outputByte[0] = (byte) 0x8f; + outputByte[1] = (byte) ((ncode & 0xff00) >> 8); + outputByte[2] = (byte) (ncode & 0xff); + outputSize = 3; + } + } else { + return CoderResult.unmappableForLength(1); + } + } + + if (dst.remaining() < outputSize) + return CoderResult.OVERFLOW; + // Put the byte in the output buffer + for (int i = 0; i < outputSize; i++) { + dst.put(outputByte[i]); + } + mark++; + } + return CoderResult.UNDERFLOW; + } finally { + src.position(mark); + } + } + + protected CoderResult encodeLoop(CharBuffer src, + ByteBuffer dst) + { + if (src.hasArray() && dst.hasArray()) + return encodeArrayLoop(src, dst); + else + return encodeBufferLoop(src, dst); + } + } +} diff --git a/jdk/test/sun/nio/cs/OLD/EUC_JP_Open_OLD.java b/jdk/test/sun/nio/cs/OLD/EUC_JP_Open_OLD.java new file mode 100644 index 00000000000..910e962b288 --- /dev/null +++ b/jdk/test/sun/nio/cs/OLD/EUC_JP_Open_OLD.java @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + */ + +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.Charset; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CharsetEncoder; +import java.nio.charset.CoderResult; +import sun.nio.cs.HistoricallyNamedCharset; +import sun.nio.cs.Surrogate; + +public class EUC_JP_Open_OLD + extends Charset + implements HistoricallyNamedCharset +{ + public EUC_JP_Open_OLD() { + super("x-eucJP-Open_OLD", null); + } + + public String historicalName() { + return "EUC_JP_Solaris"; + } + + public boolean contains(Charset cs) { + return ((cs.name().equals("US-ASCII")) + || (cs instanceof JIS_X_0201_OLD) + || (cs instanceof EUC_JP_OLD)); + } + + public CharsetDecoder newDecoder() { + return new Decoder(this); + } + + public CharsetEncoder newEncoder() { + + // Need to force the replacement byte to 0x3f + // because JIS_X_0208_Encoder defines its own + // alternative 2 byte substitution to permit it + // to exist as a self-standing Encoder + + byte[] replacementBytes = { (byte)0x3f }; + return new Encoder(this).replaceWith(replacementBytes); + } + + private static class Decoder extends EUC_JP_OLD.Decoder { + JIS_X_0201_OLD.Decoder decoderJ0201; + JIS_X_0212_Solaris_Decoder decodeMappingJ0212; + JIS_X_0208_Solaris_Decoder decodeMappingJ0208; + + private static final short[] j0208Index1 = + JIS_X_0208_Solaris_Decoder.getIndex1(); + private static final String[] j0208Index2 = + JIS_X_0208_Solaris_Decoder.getIndex2(); + private static final int start = 0xa1; + private static final int end = 0xfe; + + protected final char REPLACE_CHAR='\uFFFD'; + + private Decoder(Charset cs) { + super(cs); + decoderJ0201 = new JIS_X_0201_OLD.Decoder(cs); + decodeMappingJ0212 = new JIS_X_0212_Solaris_Decoder(cs); + } + + + protected char decode0212(int byte1, int byte2) { + return decodeMappingJ0212.decodeDouble(byte1, byte2); + + } + + protected char decodeDouble(int byte1, int byte2) { + if (byte1 == 0x8e) { + return decoderJ0201.decode(byte2 - 256); + } + + if (((byte1 < 0) + || (byte1 > j0208Index1.length)) + || ((byte2 < start) + || (byte2 > end))) + return REPLACE_CHAR; + + char result = super.decodeDouble(byte1, byte2); + if (result != '\uFFFD') { + return result; + } else { + int n = (j0208Index1[byte1 - 0x80] & 0xf) * + (end - start + 1) + + (byte2 - start); + return j0208Index2[j0208Index1[byte1 - 0x80] >> 4].charAt(n); + } + } + } + + + private static class Encoder extends EUC_JP_OLD.Encoder { + + JIS_X_0201_OLD.Encoder encoderJ0201; + JIS_X_0212_Solaris_Encoder encoderJ0212; + + private static final short[] j0208Index1 = + JIS_X_0208_Solaris_Encoder.getIndex1(); + private static final String[] j0208Index2 = + JIS_X_0208_Solaris_Encoder.getIndex2(); + + private final Surrogate.Parser sgp = new Surrogate.Parser(); + + private Encoder(Charset cs) { + super(cs); + encoderJ0201 = new JIS_X_0201_OLD.Encoder(cs); + encoderJ0212 = new JIS_X_0212_Solaris_Encoder(cs); + } + + protected int encodeSingle(char inputChar, byte[] outputByte) { + byte b; + + if (inputChar == 0) { + outputByte[0] = (byte)0; + return 1; + } + + if ((b = encoderJ0201.encode(inputChar)) == 0) + return 0; + + if (b > 0 && b < 128) { + outputByte[0] = b; + return 1; + } + + outputByte[0] = (byte)0x8e; + outputByte[1] = b; + return 2; + } + + protected int encodeDouble(char ch) { + int r = super.encodeDouble(ch); + if (r != 0) { + return r; + } + else { + int offset = j0208Index1[((ch & 0xff00) >> 8 )] << 8; + r = j0208Index2[offset >> 12].charAt((offset & 0xfff) + + (ch & 0xFF)); + if (r > 0x7500) + return 0x8F8080 + encoderJ0212.encodeDouble(ch); + } + return (r==0 ? 0: r + 0x8080); + } + } +} diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0201.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0201_OLD.java similarity index 97% rename from jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0201.java rename to jdk/test/sun/nio/cs/OLD/JIS_X_0201_OLD.java index 7b528e6eef6..a8ce6a47d92 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0201.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0201_OLD.java @@ -26,25 +26,22 @@ /* */ -package sun.nio.cs.ext; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; -import sun.nio.cs.SingleByteEncoder; -import sun.nio.cs.SingleByteDecoder; -public class JIS_X_0201 +public class JIS_X_0201_OLD extends Charset { - public JIS_X_0201() { - super("JIS_X0201", ExtendedCharsets.aliasesFor("JIS_X0201")); + public JIS_X_0201_OLD() { + super("JIS_X0201_OLD", null); } public boolean contains(Charset cs) { return ((cs.name().equals("US-ASCII")) - || (cs instanceof JIS_X_0201)); + || (cs instanceof JIS_X_0201_OLD)); } public CharsetDecoder newDecoder() { diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_Decoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Decoder.java similarity index 99% rename from jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_Decoder.java rename to jdk/test/sun/nio/cs/OLD/JIS_X_0208_Decoder.java index ae70911ee38..59ee58ef783 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_Decoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Decoder.java @@ -26,7 +26,6 @@ /* */ -package sun.nio.cs.ext; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_Encoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Encoder.java similarity index 99% rename from jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_Encoder.java rename to jdk/test/sun/nio/cs/OLD/JIS_X_0208_Encoder.java index e4407a5a229..bbdea5f41e8 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_Encoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Encoder.java @@ -26,7 +26,6 @@ /* */ -package sun.nio.cs.ext; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_OLD.java similarity index 90% rename from jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208.java rename to jdk/test/sun/nio/cs/OLD/JIS_X_0208_OLD.java index ab7726d88df..7e211f61347 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_OLD.java @@ -26,22 +26,21 @@ /* */ -package sun.nio.cs.ext; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; -public class JIS_X_0208 +public class JIS_X_0208_OLD extends Charset { - public JIS_X_0208() { - super("x-JIS0208", ExtendedCharsets.aliasesFor("x-JIS0208")); + public JIS_X_0208_OLD() { + super("x-JIS0208_OLD", null); } public boolean contains(Charset cs) { - return (cs instanceof JIS_X_0208); + return (cs instanceof JIS_X_0208_OLD); } public CharsetDecoder newDecoder() { diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_Solaris_Decoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Decoder.java similarity index 99% rename from jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_Solaris_Decoder.java rename to jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Decoder.java index 65a51c5f356..69643357505 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_Solaris_Decoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Decoder.java @@ -26,7 +26,6 @@ /* */ -package sun.nio.cs.ext; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_Solaris_Encoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Encoder.java similarity index 99% rename from jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_Solaris_Encoder.java rename to jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Encoder.java index b25223b63b0..cde51b70f1a 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0208_Solaris_Encoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0208_Solaris_Encoder.java @@ -26,7 +26,6 @@ /* */ -package sun.nio.cs.ext; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_Decoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Decoder.java similarity index 99% rename from jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_Decoder.java rename to jdk/test/sun/nio/cs/OLD/JIS_X_0212_Decoder.java index 4838ffc02d8..92e388fc01b 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_Decoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Decoder.java @@ -26,7 +26,6 @@ /* */ -package sun.nio.cs.ext; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_Encoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Encoder.java similarity index 99% rename from jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_Encoder.java rename to jdk/test/sun/nio/cs/OLD/JIS_X_0212_Encoder.java index fd9c82677c2..fc155081da7 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_Encoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Encoder.java @@ -26,7 +26,6 @@ /* */ -package sun.nio.cs.ext; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_OLD.java similarity index 90% rename from jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212.java rename to jdk/test/sun/nio/cs/OLD/JIS_X_0212_OLD.java index a78f06ac69c..adb19f161b9 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_OLD.java @@ -26,22 +26,21 @@ /* */ -package sun.nio.cs.ext; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; -public class JIS_X_0212 +public class JIS_X_0212_OLD extends Charset { - public JIS_X_0212() { - super("JIS_X0212-1990", ExtendedCharsets.aliasesFor("JIS_X0212-1990")); + public JIS_X_0212_OLD() { + super("JIS_X0212-1990_OLD", null); } public boolean contains(Charset cs) { - return (cs instanceof JIS_X_0212); + return (cs instanceof JIS_X_0212_OLD); } public CharsetDecoder newDecoder() { diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_Solaris_Decoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Decoder.java similarity index 99% rename from jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_Solaris_Decoder.java rename to jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Decoder.java index 21bf704272f..dac98b2fb09 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_Solaris_Decoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Decoder.java @@ -26,7 +26,6 @@ /* */ -package sun.nio.cs.ext; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; diff --git a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_Solaris_Encoder.java b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Encoder.java similarity index 99% rename from jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_Solaris_Encoder.java rename to jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Encoder.java index 2bd596b57f1..716e4020a8e 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/JIS_X_0212_Solaris_Encoder.java +++ b/jdk/test/sun/nio/cs/OLD/JIS_X_0212_Solaris_Encoder.java @@ -26,7 +26,6 @@ /* */ -package sun.nio.cs.ext; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; diff --git a/jdk/test/sun/nio/cs/OLD/MS932_OLD.java b/jdk/test/sun/nio/cs/OLD/MS932_OLD.java index 7da7cab07b2..46307e2a613 100644 --- a/jdk/test/sun/nio/cs/OLD/MS932_OLD.java +++ b/jdk/test/sun/nio/cs/OLD/MS932_OLD.java @@ -45,7 +45,7 @@ public class MS932_OLD extends Charset implements HistoricallyNamedCharset public boolean contains(Charset cs) { return ((cs.name().equals("US-ASCII")) - || (cs instanceof JIS_X_0201) + || (cs instanceof JIS_X_0201_OLD) || (cs instanceof MS932_OLD)); } @@ -61,11 +61,11 @@ public class MS932_OLD extends Charset implements HistoricallyNamedCharset // implements DelegatableDecoder { - JIS_X_0201.Decoder jisDec0201; + JIS_X_0201_OLD.Decoder jisDec0201; private Decoder(Charset cs) { super(cs); - jisDec0201 = new JIS_X_0201.Decoder(cs); + jisDec0201 = new JIS_X_0201_OLD.Decoder(cs); } protected char decodeSingle(int b) { @@ -90,12 +90,12 @@ public class MS932_OLD extends Charset implements HistoricallyNamedCharset private static class Encoder extends MS932DB.Encoder { - private JIS_X_0201.Encoder jisEnc0201; + private JIS_X_0201_OLD.Encoder jisEnc0201; private Encoder(Charset cs) { super(cs); - jisEnc0201 = new JIS_X_0201.Encoder(cs); + jisEnc0201 = new JIS_X_0201_OLD.Encoder(cs); } protected int encodeSingle(char inputChar) { diff --git a/jdk/src/share/classes/sun/nio/cs/ext/PCK.java b/jdk/test/sun/nio/cs/OLD/PCK_OLD.java similarity index 91% rename from jdk/src/share/classes/sun/nio/cs/ext/PCK.java rename to jdk/test/sun/nio/cs/OLD/PCK_OLD.java index f048d254146..d2cc0c43a30 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/PCK.java +++ b/jdk/test/sun/nio/cs/OLD/PCK_OLD.java @@ -26,8 +26,6 @@ /* */ -package sun.nio.cs.ext; - import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; @@ -36,13 +34,13 @@ import java.nio.ByteBuffer; import java.nio.CharBuffer; import sun.nio.cs.HistoricallyNamedCharset; -public class PCK +public class PCK_OLD extends Charset implements HistoricallyNamedCharset { - public PCK() { - super("x-PCK", ExtendedCharsets.aliasesFor("x-PCK")); + public PCK_OLD() { + super("x-PCK_OLD", null); } public String historicalName() { @@ -51,8 +49,8 @@ public class PCK public boolean contains(Charset cs) { return ((cs.name().equals("US-ASCII")) - || (cs instanceof JIS_X_0201) - || (cs instanceof PCK)); + || (cs instanceof JIS_X_0201_OLD) + || (cs instanceof PCK_OLD)); } public CharsetDecoder newDecoder() { @@ -70,7 +68,7 @@ public class PCK return new Encoder(this).replaceWith(replacementBytes); } - private static class Decoder extends SJIS.Decoder { + private static class Decoder extends SJIS_OLD.Decoder { JIS_X_0208_Solaris_Decoder jis0208; private static final char REPLACE_CHAR='\uFFFD'; @@ -98,9 +96,9 @@ public class PCK } } - private static class Encoder extends SJIS.Encoder { + private static class Encoder extends SJIS_OLD.Encoder { - private JIS_X_0201.Encoder jis0201; + private JIS_X_0201_OLD.Encoder jis0201; private static final short[] j0208Index1 = JIS_X_0208_Solaris_Encoder.getIndex1(); @@ -109,7 +107,7 @@ public class PCK private Encoder(Charset cs) { super(cs); - jis0201 = new JIS_X_0201.Encoder(cs); + jis0201 = new JIS_X_0201_OLD.Encoder(cs); } protected int encodeDouble(char ch) { diff --git a/jdk/src/share/classes/sun/nio/cs/ext/SJIS.java b/jdk/test/sun/nio/cs/OLD/SJIS_OLD.java similarity index 89% rename from jdk/src/share/classes/sun/nio/cs/ext/SJIS.java rename to jdk/test/sun/nio/cs/OLD/SJIS_OLD.java index 308c25adc97..5cc9e2cc5cc 100644 --- a/jdk/src/share/classes/sun/nio/cs/ext/SJIS.java +++ b/jdk/test/sun/nio/cs/OLD/SJIS_OLD.java @@ -26,23 +26,20 @@ /* */ -package sun.nio.cs.ext; - -import java.nio.ByteBuffer; -import java.nio.CharBuffer; +import java.nio.*; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; import java.nio.charset.CoderResult; import sun.nio.cs.HistoricallyNamedCharset; -public class SJIS +public class SJIS_OLD extends Charset implements HistoricallyNamedCharset { - public SJIS() { - super("Shift_JIS", ExtendedCharsets.aliasesFor("Shift_JIS")); + public SJIS_OLD() { + super("Shift_JIS_OLD", null); } public String historicalName() { @@ -51,9 +48,9 @@ public class SJIS public boolean contains(Charset cs) { return ((cs.name().equals("US-ASCII")) - || (cs instanceof JIS_X_0201) - || (cs instanceof SJIS) - || (cs instanceof JIS_X_0208)); + || (cs instanceof JIS_X_0201_OLD) + || (cs instanceof SJIS_OLD) + || (cs instanceof JIS_X_0208_OLD)); } public CharsetDecoder newDecoder() { @@ -71,14 +68,13 @@ public class SJIS return new Encoder(this).replaceWith(replacementBytes); } - static class Decoder extends JIS_X_0208_Decoder - implements DelegatableDecoder { + static class Decoder extends JIS_X_0208_Decoder { - JIS_X_0201.Decoder jis0201; + JIS_X_0201_OLD.Decoder jis0201; protected Decoder(Charset cs) { super(cs); - jis0201 = new JIS_X_0201.Decoder(cs); + jis0201 = new JIS_X_0201_OLD.Decoder(cs); } protected char decodeSingle(int b) { @@ -112,7 +108,7 @@ public class SJIS static class Encoder extends JIS_X_0208_Encoder { - private JIS_X_0201.Encoder jis0201; + private JIS_X_0201_OLD.Encoder jis0201; private static final short[] j0208Index1 = JIS_X_0208_Encoder.getIndex1(); @@ -121,7 +117,7 @@ public class SJIS protected Encoder(Charset cs) { super(cs); - jis0201 = new JIS_X_0201.Encoder(cs); + jis0201 = new JIS_X_0201_OLD.Encoder(cs); } protected int encodeSingle(char inputChar) { diff --git a/jdk/src/share/classes/sun/nio/cs/SingleByteDecoder.java b/jdk/test/sun/nio/cs/OLD/SingleByteDecoder.java similarity index 99% rename from jdk/src/share/classes/sun/nio/cs/SingleByteDecoder.java rename to jdk/test/sun/nio/cs/OLD/SingleByteDecoder.java index 77f20baa32c..3c59f224825 100644 --- a/jdk/src/share/classes/sun/nio/cs/SingleByteDecoder.java +++ b/jdk/test/sun/nio/cs/OLD/SingleByteDecoder.java @@ -26,7 +26,6 @@ /* */ -package sun.nio.cs; import java.nio.ByteBuffer; import java.nio.CharBuffer; diff --git a/jdk/src/share/classes/sun/nio/cs/SingleByteEncoder.java b/jdk/test/sun/nio/cs/OLD/SingleByteEncoder.java similarity index 99% rename from jdk/src/share/classes/sun/nio/cs/SingleByteEncoder.java rename to jdk/test/sun/nio/cs/OLD/SingleByteEncoder.java index e88b0fa457b..d3fa9282af7 100644 --- a/jdk/src/share/classes/sun/nio/cs/SingleByteEncoder.java +++ b/jdk/test/sun/nio/cs/OLD/SingleByteEncoder.java @@ -26,7 +26,6 @@ /* */ -package sun.nio.cs; import java.nio.ByteBuffer; import java.nio.CharBuffer; diff --git a/jdk/test/sun/nio/cs/OLD/TestIBMDB.java b/jdk/test/sun/nio/cs/OLD/TestIBMDB.java index 571bf0c6532..72d6720e75a 100644 --- a/jdk/test/sun/nio/cs/OLD/TestIBMDB.java +++ b/jdk/test/sun/nio/cs/OLD/TestIBMDB.java @@ -24,8 +24,8 @@ /* * @test * @bug 6843578 - * @summary Test IBM DB charsets - * @build IBM930_OLD IBM933_OLD IBM935_OLD IBM937_OLD IBM939_OLD IBM942_OLD IBM943_OLD IBM948_OLD IBM949_OLD IBM950_OLD IBM970_OLD IBM942C_OLD IBM943C_OLD IBM949C_OLD IBM1381_OLD IBM1383_OLD EUC_CN_OLD EUC_KR_OLD GBK_OLD Johab_OLD MS932_OLD MS936_OLD MS949_OLD MS950_OLD + * @summary Test old and new implementation of db charsets + * @build IBM930_OLD IBM933_OLD IBM935_OLD IBM937_OLD IBM939_OLD IBM942_OLD IBM943_OLD IBM948_OLD IBM949_OLD IBM950_OLD IBM970_OLD IBM942C_OLD IBM943C_OLD IBM949C_OLD IBM1381_OLD IBM1383_OLD EUC_CN_OLD EUC_KR_OLD GBK_OLD Johab_OLD MS932_OLD MS936_OLD MS949_OLD MS950_OLD SJIS_OLD PCK_OLD EUC_JP_OLD EUC_JP_LINUX_OLD EUC_JP_Open_OLD * @run main TestIBMDB */ @@ -490,6 +490,7 @@ if (sOld.charAt(0) == 0 && sNew.charAt(0) == 0xfffd) } static String[] csnames = new String[] { + "IBM930", "IBM933", "IBM935", @@ -515,12 +516,20 @@ if (sOld.charAt(0) == 0 && sNew.charAt(0) == 0xfffd) "MS936", "MS949", "MS950", + + "EUC_JP", + "EUC_JP_LINUX", + "EUC_JP_Open", + "SJIS", + "PCK", }; public static void main(String[] args) throws Exception { for (String csname: csnames) { System.out.printf("-----------------------------------%n"); String oldname = csname + "_OLD"; + if ("EUC_JP_Open".equals(csname)) + csname = "eucjp-open"; checkInit(csname); Charset csOld = (Charset)Class.forName(oldname).newInstance(); Charset csNew = Charset.forName(csname); diff --git a/jdk/test/sun/nio/cs/StrCodingBenchmark.java b/jdk/test/sun/nio/cs/StrCodingBenchmark.java index 9c97d4715ad..1d28ba5aaa9 100644 --- a/jdk/test/sun/nio/cs/StrCodingBenchmark.java +++ b/jdk/test/sun/nio/cs/StrCodingBenchmark.java @@ -75,7 +75,7 @@ public class StrCodingBenchmark { return nanoss; } - public static void time(Job ... jobs) throws Throwable { + public static long[] time(Job ... jobs) throws Throwable { long[] warmup = time0(jobs); // Warm up run long[] nanoss = time0(jobs); // Real timing run @@ -110,6 +110,7 @@ public class StrCodingBenchmark { // Print out absolute and relative times, calibrated against first job for (int i = 0; i < jobs.length; i++) System.out.printf(format, jobs[i].name(), milliss[i], ratios[i]); + return milliss; } public static Job[] filter(Pattern filter, Job[] jobs) { diff --git a/jdk/test/sun/nio/cs/StrCodingBenchmarkDB.java b/jdk/test/sun/nio/cs/StrCodingBenchmarkDB.java new file mode 100644 index 00000000000..bb7210227f8 --- /dev/null +++ b/jdk/test/sun/nio/cs/StrCodingBenchmarkDB.java @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.util.*; +import java.nio.*; +import java.nio.charset.*; +import java.util.concurrent.*; +import java.util.regex.Pattern; + +public class StrCodingBenchmarkDB extends StrCodingBenchmark { + + + public static void main(String[] args) throws Throwable { + final int itrs = Integer.getInteger("iterations", 100000); + //final int itrs = Integer.getInteger("iterations", 12); + final int size = Integer.getInteger("size", 2048); + final int subsize = Integer.getInteger("subsize", 128); + final int maxchar = Integer.getInteger("maxchar", 128); + final String regex = System.getProperty("filter"); + final Pattern filter = (regex == null) ? null : Pattern.compile(regex); + final boolean useSecurityManager = Boolean.getBoolean("SecurityManager"); + if (useSecurityManager) + System.setSecurityManager(new PermissiveSecurityManger()); + final Random rnd = new Random(); + + String[] csns = new String[] { + "Big5", + "Johab", + "EUC_CN", + "EUC_KR", + "MS932", + "MS936", + "MS949", + "MS950", + "GBK", + + "Big5_HKSCS", + "Big5_HKSCS_2001", + "Big5_Solaris", + "MS950_HKSCS", + "MS950_HKSCS_XP", + "IBM1364", + "IBM1381", + "IBM1383", + "IBM930", + "IBM933", + "IBM935", + "IBM937", + "IBM939", + "IBM942", + "IBM943", + "IBM948", + "IBM949", + "IBM950", + "IBM970", + }; + + ArrayList sum = new ArrayList<>(); + + for (final String csn : csns) { + final Charset cs = Charset.forName(csn); + List cps = new ArrayList<>(0x4000); + int off = 0; + int cp = 0; + int n = 0; + CharsetEncoder enc = cs.newEncoder(); + while (cp < 0x10000 && n < cps.size()) { + if (enc.canEncode((char)cp)) { + cps.add(cp); + n++; + } + cp++; + } + Collections.shuffle(cps); + char[] ca = new char[cps.size()]; + for (int i = 0; i < cps.size(); i++) + ca[i] = (char)(int)cps.get(i); + + + System.out.printf("%n--------%s---------%n", csn); + for (int sz = 8; sz <= 2048; sz *= 2) { + System.out.printf(" [len=%d]%n", sz); + + final char[] chars = Arrays.copyOf(ca, sz); + final String str = new String(chars); + final byte[] bs = str.getBytes(cs); + + Job[] jobs = { + + new Job("String decode: csn") { + public void work() throws Throwable { + for (int i = 0; i < itrs; i++) + new String(bs, csn); + }}, + + new Job("String decode: cs") { + public void work() throws Throwable { + for (int i = 0; i < itrs; i++) + new String(bs, cs); + }}, + + new Job("String encode: csn") { + public void work() throws Throwable { + for (int i = 0; i < itrs; i++) + str.getBytes(csn); + }}, + + new Job("String encode: cs") { + public void work() throws Throwable { + for (int i = 0; i < itrs; i++) + str.getBytes(cs); + }}, + }; + sum.add(time(jobs)); + + } + } + } +} diff --git a/jdk/test/sun/nio/cs/TestStringCoding.java b/jdk/test/sun/nio/cs/TestStringCoding.java index 09e61444889..76f31d8897b 100644 --- a/jdk/test/sun/nio/cs/TestStringCoding.java +++ b/jdk/test/sun/nio/cs/TestStringCoding.java @@ -24,7 +24,7 @@ */ /* @test - @bug 6636323 6636319 7040220 7096080 + @bug 6636323 6636319 7040220 7096080 7183053 @summary Test if StringCoding and NIO result have the same de/encoding result * @run main/othervm/timeout=2000 TestStringCoding */ @@ -70,11 +70,62 @@ public class TestStringCoding { } test(cs, Arrays.copyOf(bmpCA, clen), Arrays.copyOf(sbBA, blen)); } + + testMixed(cs); System.out.println("done!"); } } } + static void testMixed(Charset cs) throws Throwable { + CharsetDecoder dec = cs.newDecoder() + .onMalformedInput(CodingErrorAction.REPLACE) + .onUnmappableCharacter(CodingErrorAction.REPLACE); + CharsetEncoder enc = cs.newEncoder() + .onMalformedInput(CodingErrorAction.REPLACE) + .onUnmappableCharacter(CodingErrorAction.REPLACE); + List cps = new ArrayList<>(0x10000); + int off = 0; + int cp = 0; + while (cp < 0x10000) { + if (enc.canEncode((char)cp)) { + cps.add(cp); + } + cp++; + } + Collections.shuffle(cps); + char[] bmpCA = new char[cps.size()]; + for (int i = 0; i < cps.size(); i++) + bmpCA[i] = (char)(int)cps.get(i); + String bmpStr = new String(bmpCA); + //getBytes(csn); + byte[] bmpBA = bmpStr.getBytes(cs.name()); + ByteBuffer bf = enc.reset().encode(CharBuffer.wrap(bmpCA)); + byte[] baNIO = new byte[bf.limit()]; + bf.get(baNIO, 0, baNIO.length); + if (!Arrays.equals(bmpBA, baNIO)) { + throw new RuntimeException("getBytes(csn) failed -> " + cs.name()); + } + + //getBytes(cs); + bmpBA = bmpStr.getBytes(cs); + if (!Arrays.equals(bmpBA, baNIO)) + throw new RuntimeException("getBytes(cs) failed -> " + cs.name()); + + //new String(csn); + String strSC = new String(bmpBA, cs.name()); + String strNIO = dec.reset().decode(ByteBuffer.wrap(bmpBA)).toString(); + if(!strNIO.equals(strSC)) { + throw new RuntimeException("new String(csn) failed -> " + cs.name()); + } + + //new String(cs); + strSC = new String(bmpBA, cs); + if (!strNIO.equals(strSC)) + throw new RuntimeException("new String(cs) failed -> " + cs.name()); + + } + static void test(Charset cs, char[] bmpCA, byte[] sbBA) throws Throwable { String bmpStr = new String(bmpCA); CharsetDecoder dec = cs.newDecoder() @@ -100,6 +151,7 @@ public class TestStringCoding { //new String(csn); String strSC = new String(sbBA, cs.name()); String strNIO = dec.reset().decode(ByteBuffer.wrap(sbBA)).toString(); + if(!strNIO.equals(strSC)) throw new RuntimeException("new String(csn) failed -> " + cs.name()); @@ -112,7 +164,7 @@ public class TestStringCoding { if (enc instanceof sun.nio.cs.ArrayEncoder && cs.contains(Charset.forName("ASCII"))) { if (cs.name().equals("UTF-8") || // utf8 handles surrogates - cs.name().equals("CESU-8")) // utf8 handles surrogates + cs.name().equals("CESU-8")) // utf8 handles surrogates return; enc.replaceWith(new byte[] { (byte)'A'}); sun.nio.cs.ArrayEncoder cae = (sun.nio.cs.ArrayEncoder)enc; @@ -137,12 +189,16 @@ public class TestStringCoding { cs.name()))) throw new RuntimeException("encode3(surrogates) failed -> " + cs.name()); + /* sun.nio.cs.ArrayDeEncoder works on the assumption that the + invoker (StringCoder) allocates enough output buf, utf8 + and double-byte coder does not check the output buffer limit. ba = new byte[str.length() - 1]; n = cae.encode(str.toCharArray(), 0, str.length(), ba); - if (n != 7 || !"abABABc".equals(new String(ba, 0, n, - cs.name()))) + if (n != 7 || !"abABABc".equals(new String(ba, 0, n, cs.name()))) { throw new RuntimeException("encode4(surrogates) failed -> " + cs.name()); + } + */ } } diff --git a/jdk/test/sun/nio/cs/TestX11JIS0201.java b/jdk/test/sun/nio/cs/TestX11JIS0201.java index e42105bf21f..6b9c58978a3 100644 --- a/jdk/test/sun/nio/cs/TestX11JIS0201.java +++ b/jdk/test/sun/nio/cs/TestX11JIS0201.java @@ -50,5 +50,20 @@ public class TestX11JIS0201 { if (! cs.name().equals("X11JIS0201")){ throw new Exception("X11JIS0201 does not work correctly"); } + CharsetEncoder enc = cs.newEncoder(); + char[] cc = new char[0xffff]; + for (char c = 0; c < 0xffff; c++) { + cc[c] = c; + if (enc.canEncode(c) != + ((c >= 0xff61 && c <= 0xff9f) || c == 0x203e || c == 0xa5)) { + throw new RuntimeException("x11jis0201 canEncod() failed!"); + } + } + String s = new String(cc); + byte[] bb_x11 = s.getBytes(cs); + byte[] bb = s.getBytes("jis0201"); + if (!java.util.Arrays.equals(bb, bb_x11)) { + throw new RuntimeException("x11jis0201 encoding failed"); + } } } diff --git a/jdk/test/sun/rmi/rmic/newrmic/equivalence/AppleUserImpl.java b/jdk/test/sun/rmi/rmic/newrmic/equivalence/AppleUserImpl.java index 041aa33b10f..ee34213340d 100644 --- a/jdk/test/sun/rmi/rmic/newrmic/equivalence/AppleUserImpl.java +++ b/jdk/test/sun/rmi/rmic/newrmic/equivalence/AppleUserImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ import java.rmi.RemoteException; import java.rmi.Naming; import java.rmi.server.UnicastRemoteObject; import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; import java.util.Random; import java.util.ArrayList; import java.util.Date; @@ -249,11 +250,12 @@ public class AppleUserImpl } synchronized (user) { + int port = -1; // create new registry and bind new AppleUserImpl in registry try { - LocateRegistry.createRegistry(1099); //TestLibrary.REGISTRY_PORT); - Naming.rebind("rmi://localhost:1099/AppleUser",user); - //TestLibrary.REGISTRY_PORT + "/AppleUser", user); + Registry registry = TestLibrary.createRegistryOnUnusedPort(); + port = TestLibrary.getRegistryPort(registry); + Naming.rebind("rmi://localhost:" + port + "/AppleUser",user); } catch (RemoteException e) { //TestLibrary.bomb("Failed to bind AppleUser", e); } catch (java.net.MalformedURLException e) { @@ -263,10 +265,9 @@ public class AppleUserImpl // start the other server if available try { Class app = Class.forName("ApplicationServer"); - server = new Thread((Runnable) app.newInstance()); - logger.log(Level.INFO, "Starting application server " + - "in same process"); - server.start(); + java.lang.reflect.Constructor appConstructor = + app.getDeclaredConstructor(new Class[] {Integer.TYPE}); + server = new Thread((Runnable) appConstructor.newInstance(port)); } catch (ClassNotFoundException e) { // assume the other server is running in a separate process logger.log(Level.INFO, "Application server must be " + diff --git a/jdk/test/sun/rmi/rmic/newrmic/equivalence/run.sh b/jdk/test/sun/rmi/rmic/newrmic/equivalence/run.sh index 839c0ce8dff..8d4f419d346 100644 --- a/jdk/test/sun/rmi/rmic/newrmic/equivalence/run.sh +++ b/jdk/test/sun/rmi/rmic/newrmic/equivalence/run.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,8 @@ # @summary This test verifies that the new implementation of rmic # generates equivalent classes as the old implementation, for a set # of sample input classes. +# @library ../../../../../java/rmi/testlibrary +# @build TestLibrary # @author Peter Jones # # @build AgentServerImpl diff --git a/jdk/test/sun/rmi/runtime/Log/6409194/NoConsoleOutput.java b/jdk/test/sun/rmi/runtime/Log/6409194/NoConsoleOutput.java index cd1541ccbb7..e5e19fe12dd 100644 --- a/jdk/test/sun/rmi/runtime/Log/6409194/NoConsoleOutput.java +++ b/jdk/test/sun/rmi/runtime/Log/6409194/NoConsoleOutput.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -90,7 +90,6 @@ public class NoConsoleOutput { } public static class DoRMIStuff { - private static final int PORT = 2020; private interface Foo extends Remote { Object echo(Object obj) throws RemoteException; } @@ -99,8 +98,9 @@ public class NoConsoleOutput { public Object echo(Object obj) { return obj; } } public static void main(String[] args) throws Exception { - LocateRegistry.createRegistry(PORT); - Registry reg = LocateRegistry.getRegistry("", PORT); + Registry registry = TestLibrary.createRegistryOnUnusedPort(); + int registryPort = TestLibrary.getRegistryPort(registry); + Registry reg = LocateRegistry.getRegistry("", registryPort); FooImpl fooimpl = new FooImpl(); UnicastRemoteObject.exportObject(fooimpl, 0); reg.rebind("foo", fooimpl); diff --git a/jdk/test/sun/rmi/runtime/Log/checkLogging/CheckLogging.java b/jdk/test/sun/rmi/runtime/Log/checkLogging/CheckLogging.java index 7039c1364c0..77c236d4371 100644 --- a/jdk/test/sun/rmi/runtime/Log/checkLogging/CheckLogging.java +++ b/jdk/test/sun/rmi/runtime/Log/checkLogging/CheckLogging.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -77,8 +77,9 @@ import java.rmi.registry.Registry; * logger output is non-null. */ public class CheckLogging { - private static final String LOCATION = - "rmi://localhost:" + TestLibrary.REGISTRY_PORT + "/"; + private static int REGISTRY_PORT = -1; + private static String LOCATION; + private static final ByteArrayOutputStream clientCallOut = new ByteArrayOutputStream(); @@ -100,7 +101,9 @@ public class CheckLogging { private static Registry registry; static { try { - registry = LocateRegistry.createRegistry(TestLibrary.REGISTRY_PORT); + registry = TestLibrary.createRegistryOnUnusedPort(); + REGISTRY_PORT = TestLibrary.getRegistryPort(registry); + LOCATION = "rmi://localhost:" + REGISTRY_PORT + "/"; } catch (Exception e) { TestLibrary.bomb("could not create registry"); } diff --git a/jdk/test/sun/rmi/transport/proxy/EagerHttpFallback.java b/jdk/test/sun/rmi/transport/proxy/EagerHttpFallback.java index 049ed1ad376..1f54e2cb845 100644 --- a/jdk/test/sun/rmi/transport/proxy/EagerHttpFallback.java +++ b/jdk/test/sun/rmi/transport/proxy/EagerHttpFallback.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,8 @@ * @bug 4290727 * @summary Verify that ConnectException will trigger HTTP fallback if * sun.rmi.transport.proxy.eagerHttpFallback system property is set. + * @library ../../../../java/rmi/testlibrary + * @build TestLibrary * @run main/othervm EagerHttpFallback */ @@ -33,8 +35,8 @@ import java.rmi.registry.*; public class EagerHttpFallback { - static final int INITIAL_PORT = 7070; - static final int FALLBACK_PORT = 7071; + static final int INITIAL_PORT = TestLibrary.getUnusedRandomPort(); + static final int FALLBACK_PORT = TestLibrary.getUnusedRandomPort(); public static void main(String[] args) throws Exception { System.setProperty("http.proxyHost", "127.0.0.1"); diff --git a/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java b/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java index 533c4aa0993..1372b03feab 100644 --- a/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java +++ b/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,7 +58,7 @@ import java.rmi.registry.*; import java.rmi.server.*; public class DeadCachedConnection { - static public final int regport = 17340; + static public final int regport = TestLibrary.getUnusedRandomPort(); static public void main(String[] argv) throws Exception { diff --git a/jdk/test/sun/security/krb5/auto/BadKdc.java b/jdk/test/sun/security/krb5/auto/BadKdc.java index 86a464a4fe6..be8259d3538 100644 --- a/jdk/test/sun/security/krb5/auto/BadKdc.java +++ b/jdk/test/sun/security/krb5/auto/BadKdc.java @@ -67,7 +67,7 @@ public class BadKdc { * This is tough. * c. Feed the KDC a UDP packet first. The current "solution". */ - public static void go(int[]... expected) + public static void go(String... expected) throws Exception { try { go0(expected); @@ -83,7 +83,7 @@ public class BadKdc { } } - public static void go0(int[]... expected) + public static void go0(String... expected) throws Exception { System.setProperty("sun.security.krb5.debug", "true"); @@ -148,8 +148,9 @@ public class BadKdc { return k; } - private static void test(int... expected) throws Exception { + private static void test(String expected) throws Exception { ByteArrayOutputStream bo = new ByteArrayOutputStream(); + System.out.println("----------------- TEST -----------------"); try { test0(bo, expected); } catch (Exception e) { @@ -164,31 +165,34 @@ public class BadKdc { * One round of test for max_retries and timeout. * @param expected the expected kdc# timeout kdc# timeout... */ - private static void test0(ByteArrayOutputStream bo, int... expected) + private static void test0(ByteArrayOutputStream bo, String expected) throws Exception { PrintStream oldout = System.out; + boolean failed = false; System.setOut(new PrintStream(bo)); try { Context.fromUserPass(OneKDC.USER, OneKDC.PASS, false); + } catch (Exception e) { + failed = true; } finally { System.setOut(oldout); } String[] lines = new String(bo.toByteArray()).split("\n"); - System.out.println("----------------- TEST -----------------"); - int count = 0; + StringBuilder sb = new StringBuilder(); for (String line: lines) { Matcher m = re.matcher(line); if (m.find()) { System.out.println(line); - if (Integer.parseInt(m.group(1)) != expected[count++] || - Integer.parseInt(m.group(2)) != expected[count++]) { - throw new Exception("Fail here"); - } + sb.append(m.group(1)).append(m.group(2)); } } - if (count != expected.length) { - throw new Exception("Less rounds"); + if (failed) sb.append('-'); + + String output = sb.toString(); + System.out.println("Expected: " + expected + ", actual " + output); + if (!output.matches(expected)) { + throw new Exception("Does not match"); } } } diff --git a/jdk/test/sun/security/krb5/auto/BadKdc1.java b/jdk/test/sun/security/krb5/auto/BadKdc1.java index a4f52b490e2..bc96d056d71 100644 --- a/jdk/test/sun/security/krb5/auto/BadKdc1.java +++ b/jdk/test/sun/security/krb5/auto/BadKdc1.java @@ -37,16 +37,16 @@ public class BadKdc1 { throws Exception { Security.setProperty("krb5.kdc.bad.policy", "tryLess"); BadKdc.go( - new int[]{1,2,1,2,1,2,2,2,2,2,2,2,3,2,1,2,2,2,3,2}, // 1, 2 - // The above line means try kdc1 for 2 seconds, then kdc1 - // for 2 seconds,..., finally kdc3 for 2 seconds. - new int[]{1,2,2,2,3,2,1,2,2,2,3,2}, // 1, 2 + "121212222222(32){1,2}1222(32){1,2}", // 1 2 + // The above line means try kdc1 for 2 seconds then kdc1 + // for 2 seconds... finally kdc3 for 2 seconds. + "1222(32){1,2}1222(32){1,2}", // 1 2 // refresh - new int[]{1,2,1,2,1,2,2,2,2,2,2,2,3,2,1,2,2,2,3,2}, // 1, 2 - // k3 off, k2 on - new int[]{1,2,2,2,1,2,2,2}, // 1 + "121212222222(32){1,2}1222(32){1,2}", // 1 2 + // k3 off k2 on + "(122212(22){1,2}|1222323232-)", // 1 // k1 on - new int[]{1,2,1,2} // empty + "(12(12){1,2}|122232-)" // empty ); } } diff --git a/jdk/test/sun/security/krb5/auto/BadKdc2.java b/jdk/test/sun/security/krb5/auto/BadKdc2.java index 9a556429293..26e001bcc70 100644 --- a/jdk/test/sun/security/krb5/auto/BadKdc2.java +++ b/jdk/test/sun/security/krb5/auto/BadKdc2.java @@ -37,14 +37,14 @@ public class BadKdc2 { throws Exception { Security.setProperty("krb5.kdc.bad.policy", "tryLess:2,1000"); BadKdc.go( - new int[]{1,2,1,2,1,2,2,2,2,2,2,2,3,2,1,1,1,1,2,1,2,1,3,2}, // 1, 2 - new int[]{1,1,1,1,2,1,2,1,3,2,1,1,1,1,2,1,2,1,3,2}, // 1, 2 + "121212222222(32){1,2}11112121(32){1,2}", // 1 2 + "11112121(32){1,2}11112121(32){1,2}", // 1 2 // refresh - new int[]{1,2,1,2,1,2,2,2,2,2,2,2,3,2,1,1,1,1,2,1,2,1,3,2}, // 1, 2 - // k3 off, k2 on - new int[]{1,1,1,1,2,1,1,1,1,1,2,2}, // 1 + "121212222222(32){1,2}11112121(32){1,2}", // 1 2 + // k3 off k2 on + "1111(21){1,2}1111(22){1,2}", // 1 // k1 on - new int[]{1,1,1,2} // empty + "(11){1,2}(12){1,2}" // empty ); } } diff --git a/jdk/test/sun/security/krb5/auto/BadKdc3.java b/jdk/test/sun/security/krb5/auto/BadKdc3.java index c9ce4db3827..83816027a55 100644 --- a/jdk/test/sun/security/krb5/auto/BadKdc3.java +++ b/jdk/test/sun/security/krb5/auto/BadKdc3.java @@ -37,14 +37,14 @@ public class BadKdc3 { throws Exception { Security.setProperty("krb5.kdc.bad.policy", "tryLast"); BadKdc.go( - new int[]{1,2,1,2,1,2,2,2,2,2,2,2,3,2,3,2}, // 1, 2 - new int[]{3,2,3,2}, // 1, 2 + "121212222222(32){2,4}", // 1 2 + "(32){2,4}", // 1 2 // refresh - new int[]{1,2,1,2,1,2,2,2,2,2,2,2,3,2,3,2}, // 1, 2 - // k3 off, k2 on - new int[]{3,2,3,2,3,2,1,2,1,2,1,2,2,2,2,2}, // 1, 3 + "121212222222(32){2,4}", // 1 2 + // k3 off k2 on + "323232121212(22){2,4}", // 1 3 // k1 on - new int[]{2,2,2,2} // 1, 3 + "(22){2,4}" // 1 3 ); } } diff --git a/jdk/test/sun/security/krb5/auto/BadKdc4.java b/jdk/test/sun/security/krb5/auto/BadKdc4.java index eef77f282c4..bbd40471fb1 100644 --- a/jdk/test/sun/security/krb5/auto/BadKdc4.java +++ b/jdk/test/sun/security/krb5/auto/BadKdc4.java @@ -37,14 +37,14 @@ public class BadKdc4 { throws Exception { Security.setProperty("krb5.kdc.bad.policy", ""); BadKdc.go( - new int[]{1,2,1,2,1,2,2,2,2,2,2,2,3,2,1,2,1,2,1,2,2,2,2,2,2,2,3,2}, - new int[]{1,2,1,2,1,2,2,2,2,2,2,2,3,2,1,2,1,2,1,2,2,2,2,2,2,2,3,2}, + "121212222222(32){1,2}121212222222(32){1,2}", + "121212222222(32){1,2}121212222222(32){1,2}", // refresh - new int[]{1,2,1,2,1,2,2,2,2,2,2,2,3,2,1,2,1,2,1,2,2,2,2,2,2,2,3,2}, - // k3 off, k2 on - new int[]{1,2,1,2,1,2,2,2,1,2,1,2,1,2,2,2}, + "121212222222(32){1,2}121212222222(32){1,2}", + // k3 off k2 on + "121212(22){1,2}121212(22){1,2}", // k1 on - new int[]{1,2,1,2} + "(12){2,4}" ); } } diff --git a/jdk/test/sun/security/krb5/auto/KDC.java b/jdk/test/sun/security/krb5/auto/KDC.java index 05efabdcb09..716e2fa0e07 100644 --- a/jdk/test/sun/security/krb5/auto/KDC.java +++ b/jdk/test/sun/security/krb5/auto/KDC.java @@ -606,9 +606,8 @@ public class KDC { TGSReq tgsReq = new TGSReq(in); PrincipalName service = tgsReq.reqBody.sname; if (options.containsKey(KDC.Option.RESP_NT)) { - service = new PrincipalName(service.getNameStrings(), - (int)options.get(KDC.Option.RESP_NT)); - service.setRealm(service.getRealm()); + service = new PrincipalName((int)options.get(KDC.Option.RESP_NT), + service.getNameStrings(), service.getRealm()); } try { System.out.println(realm + "> " + tgsReq.reqBody.cname + @@ -632,7 +631,6 @@ public class KDC { EncryptedData ed = apReq.authenticator; tkt = apReq.ticket; int te = tkt.encPart.getEType(); - tkt.sname.setRealm(tkt.realm); EncryptionKey kkey = keyForUser(tkt.sname, te, true); byte[] bb = tkt.encPart.decrypt(kkey, KeyUsage.KU_TICKET); DerInputStream derIn = new DerInputStream(bb); @@ -693,7 +691,6 @@ public class KDC { EncTicketPart enc = new EncTicketPart( tFlags, key, - etp.crealm, etp.cname, new TransitedEncoding(1, new byte[0]), // TODO new KerberosTime(new Date()), @@ -709,7 +706,6 @@ public class KDC { throw new KrbException(Krb5.KDC_ERR_SUMTYPE_NOSUPP); // TODO } Ticket t = new Ticket( - body.crealm, service, new EncryptedData(skey, enc.asn1Encode(), KeyUsage.KU_TICKET) ); @@ -725,7 +721,6 @@ public class KDC { new KerberosTime(new Date()), body.from, till, body.rtime, - body.crealm, service, body.addresses != null // always set caddr ? body.addresses @@ -734,7 +729,6 @@ public class KDC { ); EncryptedData edata = new EncryptedData(ckey, enc_part.asn1Encode(), KeyUsage.KU_ENC_TGS_REP_PART_SESSKEY); TGSRep tgsRep = new TGSRep(null, - etp.crealm, etp.cname, t, edata); @@ -756,8 +750,8 @@ public class KDC { new KerberosTime(new Date()), 0, ke.returnCode(), - body.crealm, body.cname, - new Realm(getRealm()), service, + body.cname, + service, KrbException.errorMessage(ke.returnCode()), null); } @@ -780,7 +774,6 @@ public class KDC { if (options.containsKey(KDC.Option.RESP_NT)) { service = new PrincipalName(service.getNameStrings(), (int)options.get(KDC.Option.RESP_NT)); - service.setRealm(service.getRealm()); } try { System.out.println(realm + "> " + asReq.reqBody.cname + @@ -788,7 +781,6 @@ public class KDC { service); KDCReqBody body = asReq.reqBody; - body.cname.setRealm(getRealm()); eTypes = KDCReqBodyDotEType(body); int eType = eTypes[0]; @@ -971,7 +963,6 @@ public class KDC { EncTicketPart enc = new EncTicketPart( tFlags, key, - body.crealm, body.cname, new TransitedEncoding(1, new byte[0]), new KerberosTime(new Date()), @@ -980,7 +971,6 @@ public class KDC { body.addresses, null); Ticket t = new Ticket( - body.crealm, service, new EncryptedData(skey, enc.asn1Encode(), KeyUsage.KU_TICKET) ); @@ -996,14 +986,12 @@ public class KDC { new KerberosTime(new Date()), body.from, till, body.rtime, - body.crealm, service, body.addresses ); EncryptedData edata = new EncryptedData(ckey, enc_part.asn1Encode(), KeyUsage.KU_ENC_AS_REP_PART); ASRep asRep = new ASRep( outPAs.toArray(new PAData[outPAs.size()]), - body.crealm, body.cname, t, edata); @@ -1024,7 +1012,6 @@ public class KDC { asRep.encKDCRepPart = enc_part; sun.security.krb5.internal.ccache.Credentials credentials = new sun.security.krb5.internal.ccache.Credentials(asRep); - asReq.reqBody.cname.setRealm(getRealm()); CredentialsCache cache = CredentialsCache.create(asReq.reqBody.cname, ccache); if (cache == null) { @@ -1059,8 +1046,8 @@ public class KDC { new KerberosTime(new Date()), 0, ke.returnCode(), - body.crealm, body.cname, - new Realm(getRealm()), service, + body.cname, + service, KrbException.errorMessage(ke.returnCode()), eData); } diff --git a/jdk/test/sun/security/krb5/name/Constructors.java b/jdk/test/sun/security/krb5/name/Constructors.java new file mode 100644 index 00000000000..71243e71c32 --- /dev/null +++ b/jdk/test/sun/security/krb5/name/Constructors.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + * @test + * @bug 6966259 + * @summary Make PrincipalName and Realm immutable + * @run main/othervm Constructors + */ + +import java.util.Arrays; +import sun.security.krb5.*; + +public class Constructors { + public static void main(String[] args) throws Exception { + + int type; + boolean testNoDefaultDomain; + + // Part 1: on format + + // Good ones + type = PrincipalName.KRB_NT_UNKNOWN; + checkName("a", type, "R", "R", "a"); + checkName("a@R2", type, "R", "R", "a"); + checkName("a/b", type, "R", "R", "a", "b"); + checkName("a/b@R2", type, "R", "R", "a", "b"); + checkName("a/b/c", type, "R", "R", "a", "b", "c"); + checkName("a/b/c@R2", type, "R", "R", "a", "b", "c"); + // Weird ones + checkName("a\\/b", type, "R", "R", "a/b"); + checkName("a\\/b\\/c", type, "R", "R", "a/b/c"); + checkName("a\\/b\\@R2", type, "R", "R", "a/b@R2"); + // Bad ones + checkName("a", type, "", null); + checkName("a/", type, "R", null); + checkName("/a", type, "R", null); + checkName("a//b", type, "R", null); + checkName("a@", type, null, null); + type = PrincipalName.KRB_NT_SRV_HST; + + // Part 2: on realm choices + + // When there is no default realm + System.setProperty("java.security.krb5.conf", + System.getProperty("test.src", ".") + "/empty.conf"); + Config.refresh(); + + // A Windows client login to AD always has a default realm + try { + Realm r = Realm.getDefault(); + System.out.println("testNoDefaultDomain = false. Realm is " + r); + testNoDefaultDomain = false; + } catch (RealmException re) { + // Great. This is what we expected + testNoDefaultDomain = true; + } + + if (testNoDefaultDomain) { + type = PrincipalName.KRB_NT_UNKNOWN; + checkName("a", type, "R1", "R1", "a"); // arg + checkName("a@R1", type, null, "R1", "a"); // or r in name + checkName("a@R2", type, "R1", "R1", "a"); // arg over r + checkName("a", type, null, null); // fail if none + checkName("a/b@R1", type, null, "R1", "a", "b"); + type = PrincipalName.KRB_NT_SRV_HST; + // Let's pray "b.h" won't be canonicalized + checkName("a/b.h", type, "R1", "R1", "a", "b.h"); // arg + checkName("a/b.h@R1", type, null, "R1", "a", "b.h"); // or r in name + checkName("a/b.h@R1", type, "R2", "R2", "a", "b.h"); // arg over r + checkName("a/b.h", type, null, null); // fail if none + } + + // When there is default realm + System.setProperty("java.security.krb5.conf", + System.getProperty("test.src", ".") + "/krb5.conf"); + Config.refresh(); + + type = PrincipalName.KRB_NT_UNKNOWN; + checkName("a", type, "R1", "R1", "a"); // arg + checkName("a@R1", type, null, "R1", "a"); // or r in name + checkName("a@R2", type, "R1", "R1", "a"); // arg over r + checkName("a", type, null, "R", "a"); // default + checkName("a/b", type, null, "R", "a", "b"); + type = PrincipalName.KRB_NT_SRV_HST; + checkName("a/b.h3", type, "R1", "R1", "a", "b.h3"); // arg + checkName("a/b.h@R1", type, null, "R1", "a", "b.h"); // or r in name + checkName("a/b.h3@R2", type, "R1", "R1", "a", "b.h3"); // arg over r + checkName("a/b.h2", type, "R1", "R1", "a", "b.h2"); // arg over map + checkName("a/b.h2@R1", type, null, "R1", "a", "b.h2"); // r over map + checkName("a/b.h2", type, null, "R2", "a", "b.h2"); // map + checkName("a/b.h", type, null, "R", "a", "b.h"); // default + } + + // Check if the creation matches the expected output. + // Note: realm == null means creation failure + static void checkName(String n, int t, String s, + String realm, String... parts) + throws Exception { + PrincipalName pn = null; + try { + pn = new PrincipalName(n, t, s); + } catch (Exception e) { + if (realm == null) { + return; // This is expected + } else { + throw e; + } + } + if (!pn.getRealmAsString().equals(realm) + || !Arrays.equals(pn.getNameStrings(), parts)) { + throw new Exception(pn.toString() + " vs " + + Arrays.toString(parts) + "@" + realm); + } + } +} diff --git a/jdk/test/sun/security/krb5/name/empty.conf b/jdk/test/sun/security/krb5/name/empty.conf new file mode 100644 index 00000000000..e11f6e345a0 --- /dev/null +++ b/jdk/test/sun/security/krb5/name/empty.conf @@ -0,0 +1,2 @@ +[libdefaults] +dns_fallback = false diff --git a/jdk/test/sun/security/krb5/name/krb5.conf b/jdk/test/sun/security/krb5/name/krb5.conf new file mode 100644 index 00000000000..e9c34054987 --- /dev/null +++ b/jdk/test/sun/security/krb5/name/krb5.conf @@ -0,0 +1,10 @@ +[libdefaults] +default_realm = R + +[realms] +R = { + kdc = kdc +} + +[domain_realm] +.h2 = R2 diff --git a/jdk/test/sun/security/mscapi/ShortRSAKey1024.sh b/jdk/test/sun/security/mscapi/ShortRSAKey1024.sh index 9caeed46c39..1e01377ed29 100644 --- a/jdk/test/sun/security/mscapi/ShortRSAKey1024.sh +++ b/jdk/test/sun/security/mscapi/ShortRSAKey1024.sh @@ -27,7 +27,9 @@ # @test # @bug 7106773 # @summary 512 bits RSA key cannot work with SHA384 and SHA512 -# @run shell ShortRSAKey1024.sh +# @run shell ShortRSAKey1024.sh 1024 +# @run shell ShortRSAKey1024.sh 768 +# @run shell ShortRSAKey1024.sh 512 # set a few environment variables so that the shell-script can run stand-alone # in the source directory @@ -55,17 +57,27 @@ case "$OS" in ;; esac +BITS=$1 + case "$OS" in Windows* | CYGWIN* ) + echo "Removing the keypair if it already exists (for unknown reason)..." + ${TESTJAVA}${FS}bin${FS}keytool \ + -delete \ + -storetype Windows-My \ + -debug \ + -alias 7106773.$BITS + echo "Creating a temporary RSA keypair in the Windows-My store..." ${TESTJAVA}${FS}bin${FS}keytool \ -genkeypair \ -storetype Windows-My \ -keyalg RSA \ - -alias 7106773.1024 \ - -keysize 1024 \ + -alias 7106773.$BITS \ + -keysize $BITS \ -dname "cn=localhost,c=US" \ + -debug \ -noprompt if [ "$?" -ne "0" ]; then @@ -77,7 +89,7 @@ case "$OS" in echo "Running the test..." ${TESTJAVA}${FS}bin${FS}javac -d . \ ${TESTSRC}${FS}ShortRSAKeyWithinTLS.java - ${TESTJAVA}${FS}bin${FS}java ShortRSAKeyWithinTLS 7106773.1024 1024 \ + ${TESTJAVA}${FS}bin${FS}java ShortRSAKeyWithinTLS 7106773.$BITS $BITS \ TLSv1.2 TLS_DHE_RSA_WITH_AES_128_CBC_SHA rc=$? @@ -87,7 +99,8 @@ case "$OS" in ${TESTJAVA}${FS}bin${FS}keytool \ -delete \ -storetype Windows-My \ - -alias 7106773.1024 + -debug \ + -alias 7106773.$BITS echo "Done". exit $rc diff --git a/jdk/test/sun/security/mscapi/ShortRSAKey512.sh b/jdk/test/sun/security/mscapi/ShortRSAKey512.sh deleted file mode 100644 index b8cb84076a3..00000000000 --- a/jdk/test/sun/security/mscapi/ShortRSAKey512.sh +++ /dev/null @@ -1,101 +0,0 @@ -#!/bin/sh - -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - -# @test -# @bug 7106773 -# @summary 512 bits RSA key cannot work with SHA384 and SHA512 -# @run shell ShortRSAKey512.sh - -# set a few environment variables so that the shell-script can run stand-alone -# in the source directory -if [ "${TESTSRC}" = "" ] ; then - TESTSRC="." -fi - -if [ "${TESTCLASSES}" = "" ] ; then - TESTCLASSES="." -fi - -if [ "${TESTJAVA}" = "" ] ; then - echo "TESTJAVA not set. Test cannot execute." - echo "FAILED!!!" - exit 1 -fi - -OS=`uname -s` -case "$OS" in - SunOS | Linux | Darwin | CYGWIN* ) - FS="/" - ;; - Windows_* ) - FS="\\" - ;; -esac - -case "$OS" in - Windows* | CYGWIN* ) - - echo "Creating a temporary RSA keypair in the Windows-My store..." - ${TESTJAVA}${FS}bin${FS}keytool \ - -genkeypair \ - -storetype Windows-My \ - -keyalg RSA \ - -alias 7106773.512 \ - -keysize 512 \ - -dname "cn=localhost,c=US" \ - -noprompt - - if [ "$?" -ne "0" ]; then - echo "Unable to generate key pair in Windows-My keystore" - exit 1 - fi - - echo - echo "Running the test..." - ${TESTJAVA}${FS}bin${FS}javac -d . \ - ${TESTSRC}${FS}ShortRSAKeyWithinTLS.java - ${TESTJAVA}${FS}bin${FS}java ShortRSAKeyWithinTLS 7106773.512 512 \ - TLSv1.2 TLS_DHE_RSA_WITH_AES_128_CBC_SHA - - - rc=$? - - echo - echo "Removing the temporary RSA keypair from the Windows-My store..." - ${TESTJAVA}${FS}bin${FS}keytool \ - -delete \ - -storetype Windows-My \ - -alias 7106773.512 - - echo "Done". - exit $rc - ;; - - * ) - echo "This test is not intended for '$OS' - passing test" - exit 0 - ;; -esac diff --git a/jdk/test/sun/security/mscapi/ShortRSAKey768.sh b/jdk/test/sun/security/mscapi/ShortRSAKey768.sh deleted file mode 100644 index 0732f9a1029..00000000000 --- a/jdk/test/sun/security/mscapi/ShortRSAKey768.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/bin/sh - -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code 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 -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - - -# @test -# @bug 7106773 -# @summary 512 bits RSA key cannot work with SHA384 and SHA512 -# @run shell ShortRSAKey768.sh - -# set a few environment variables so that the shell-script can run stand-alone -# in the source directory -if [ "${TESTSRC}" = "" ] ; then - TESTSRC="." -fi - -if [ "${TESTCLASSES}" = "" ] ; then - TESTCLASSES="." -fi - -if [ "${TESTJAVA}" = "" ] ; then - echo "TESTJAVA not set. Test cannot execute." - echo "FAILED!!!" - exit 1 -fi - -OS=`uname -s` -case "$OS" in - SunOS | Linux | Darwin | CYGWIN* ) - FS="/" - ;; - Windows_* ) - FS="\\" - ;; -esac - -case "$OS" in - Windows* | CYGWIN* ) - - echo "Creating a temporary RSA keypair in the Windows-My store..." - ${TESTJAVA}${FS}bin${FS}keytool \ - -genkeypair \ - -storetype Windows-My \ - -keyalg RSA \ - -alias 7106773.768 \ - -keysize 768 \ - -dname "cn=localhost,c=US" \ - -noprompt - - if [ "$?" -ne "0" ]; then - echo "Unable to generate key pair in Windows-My keystore" - exit 1 - fi - - echo - echo "Running the test..." - ${TESTJAVA}${FS}bin${FS}javac -d . \ - ${TESTSRC}${FS}ShortRSAKeyWithinTLS.java - ${TESTJAVA}${FS}bin${FS}java ShortRSAKeyWithinTLS 7106773.768 768 \ - TLSv1.2 TLS_DHE_RSA_WITH_AES_128_CBC_SHA - - rc=$? - - echo - echo "Removing the temporary RSA keypair from the Windows-My store..." - ${TESTJAVA}${FS}bin${FS}keytool \ - -delete \ - -storetype Windows-My \ - -alias 7106773.768 - - echo "Done". - exit $rc - ;; - - * ) - echo "This test is not intended for '$OS' - passing test" - exit 0 - ;; -esac diff --git a/jdk/test/sun/security/pkcs11/PKCS11Test.java b/jdk/test/sun/security/pkcs11/PKCS11Test.java index d47c30e6cac..3fc5d86f423 100644 --- a/jdk/test/sun/security/pkcs11/PKCS11Test.java +++ b/jdk/test/sun/security/pkcs11/PKCS11Test.java @@ -245,6 +245,10 @@ public abstract class PKCS11Test { osMap.put("SunOS-amd64-64", "/usr/lib/mps/64/"); osMap.put("Linux-i386-32", "/usr/lib/"); osMap.put("Linux-amd64-64", "/usr/lib64/"); + osMap.put("Windows-x86-32", + PKCS11_BASE + "/nss/lib/windows-i586/".replace('/', SEP)); + osMap.put("Windows-amd64-64", + PKCS11_BASE + "/nss/lib/windows-amd64/".replace('/', SEP)); } private final static char[] hexDigits = "0123456789abcdef".toCharArray(); diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/freebl3.chk b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/freebl3.chk new file mode 100644 index 00000000000..f661c20fec9 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/freebl3.chk differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/freebl3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/freebl3.dll new file mode 100644 index 00000000000..0532e8f6726 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/freebl3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.dll new file mode 100644 index 00000000000..b33221e9099 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.lib b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.lib new file mode 100644 index 00000000000..829407c7b54 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libnspr4.lib differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.dll new file mode 100644 index 00000000000..dbf13dafab9 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.lib b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.lib new file mode 100644 index 00000000000..145179e605c Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplc4.lib differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.dll new file mode 100644 index 00000000000..6d44edb6766 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.lib b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.lib new file mode 100644 index 00000000000..9c552e43603 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/libplds4.lib differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nss3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nss3.dll new file mode 100644 index 00000000000..67423e79cd1 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nss3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nss3.lib b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nss3.lib new file mode 100644 index 00000000000..a3bb1af1a45 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nss3.lib differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssckbi.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssckbi.dll new file mode 100644 index 00000000000..273bee642fc Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssckbi.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssdbm3.chk b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssdbm3.chk new file mode 100644 index 00000000000..4c91f8af39e Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssdbm3.chk differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssdbm3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssdbm3.dll new file mode 100644 index 00000000000..e0e93a79c88 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssdbm3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssutil3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssutil3.dll new file mode 100644 index 00000000000..55b12f1f603 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssutil3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssutil3.lib b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssutil3.lib new file mode 100644 index 00000000000..3fee97a2e92 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/nssutil3.lib differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/softokn3.chk b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/softokn3.chk new file mode 100644 index 00000000000..5e80c45c525 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/softokn3.chk differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/softokn3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/softokn3.dll new file mode 100644 index 00000000000..f489b0109bf Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/softokn3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/sqlite3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/sqlite3.dll new file mode 100644 index 00000000000..72e3b2f397c Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/sqlite3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/ssl3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/ssl3.dll new file mode 100644 index 00000000000..372fa2e2c2a Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/ssl3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/ssl3.lib b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/ssl3.lib new file mode 100644 index 00000000000..811f6abca4c Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-amd64/ssl3.lib differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/freebl3.chk b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/freebl3.chk new file mode 100644 index 00000000000..3059a8e9908 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/freebl3.chk differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/freebl3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/freebl3.dll new file mode 100644 index 00000000000..8b393ac621a Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/freebl3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.dll new file mode 100644 index 00000000000..1bbbeb90c18 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.lib b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.lib new file mode 100644 index 00000000000..912c5cde67f Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libnspr4.lib differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.dll new file mode 100644 index 00000000000..ca184553e32 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.lib b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.lib new file mode 100644 index 00000000000..2125d3d328e Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplc4.lib differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.dll new file mode 100644 index 00000000000..b529a679d29 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.lib b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.lib new file mode 100644 index 00000000000..33f42622f2f Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/libplds4.lib differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nss3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nss3.dll new file mode 100644 index 00000000000..a496bd308c7 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nss3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nss3.lib b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nss3.lib new file mode 100644 index 00000000000..6025426986c Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nss3.lib differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssckbi.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssckbi.dll new file mode 100644 index 00000000000..0d42ee245bb Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssckbi.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssdbm3.chk b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssdbm3.chk new file mode 100644 index 00000000000..7aaa0c022f1 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssdbm3.chk differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssdbm3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssdbm3.dll new file mode 100644 index 00000000000..343d8037cd7 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssdbm3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssutil3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssutil3.dll new file mode 100644 index 00000000000..3b73a1811e9 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssutil3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssutil3.lib b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssutil3.lib new file mode 100644 index 00000000000..397bd3e6cc7 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/nssutil3.lib differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/softokn3.chk b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/softokn3.chk new file mode 100644 index 00000000000..ab0a78508b2 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/softokn3.chk differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/softokn3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/softokn3.dll new file mode 100644 index 00000000000..735b38f1ec0 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/softokn3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/sqlite3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/sqlite3.dll new file mode 100644 index 00000000000..4530107d310 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/sqlite3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/ssl3.dll b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/ssl3.dll new file mode 100644 index 00000000000..e9961ca1a13 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/ssl3.dll differ diff --git a/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/ssl3.lib b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/ssl3.lib new file mode 100644 index 00000000000..7383dee323a Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/lib/windows-i586/ssl3.lib differ diff --git a/jdk/test/sun/security/pkcs11/nss/src/MD5SUMS b/jdk/test/sun/security/pkcs11/nss/src/MD5SUMS new file mode 100644 index 00000000000..5ca246935d6 --- /dev/null +++ b/jdk/test/sun/security/pkcs11/nss/src/MD5SUMS @@ -0,0 +1 @@ +1390c8a35c667e05e542 nss-3.13.1.tar.gz diff --git a/jdk/test/sun/security/pkcs11/nss/src/SHA1SUMS b/jdk/test/sun/security/pkcs11/nss/src/SHA1SUMS new file mode 100644 index 00000000000..1381f4e83d8 --- /dev/null +++ b/jdk/test/sun/security/pkcs11/nss/src/SHA1SUMS @@ -0,0 +1 @@ +d8e7ee9f9f1e0bfa2ea8b72d25727634fea130a6 nss-3.13.1.tar.gz diff --git a/jdk/test/sun/security/pkcs11/nss/src/nss-3.13.1.tar.gz b/jdk/test/sun/security/pkcs11/nss/src/nss-3.13.1.tar.gz new file mode 100644 index 00000000000..14ebb669e78 Binary files /dev/null and b/jdk/test/sun/security/pkcs11/nss/src/nss-3.13.1.tar.gz differ diff --git a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java index f9cd5185b33..aeaf5792cb9 100644 --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineBadBufferArrayAccess.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -287,18 +287,27 @@ public class SSLEngineBadBufferArrayAccess { if (serverClose) { serverEngine.closeOutbound(); } + } + + if (closed && isEngineClosed(serverEngine)) { serverIn.flip(); /* * A sanity check to ensure we got what was sent. */ if (serverIn.remaining() != clientMsg.length) { - throw new Exception("Client: Data length error"); + throw new Exception("Client: Data length error -" + + " IF THIS FAILS, PLEASE REPORT THIS TO THE" + + " SECURITY TEAM. WE HAVE BEEN UNABLE TO" + + " RELIABLY DUPLICATE."); } for (int i = 0; i < clientMsg.length; i++) { if (clientMsg[i] != serverIn.get()) { - throw new Exception("Client: Data content error"); + throw new Exception("Client: Data content error -" + + " IF THIS FAILS, PLEASE REPORT THIS TO THE" + + " SECURITY TEAM. WE HAVE BEEN UNABLE TO" + + " RELIABLY DUPLICATE."); } } serverIn.compact(); diff --git a/jdk/test/sun/security/util/Oid/S11N.sh b/jdk/test/sun/security/util/Oid/S11N.sh index 6d3c30c1ebe..48a37114563 100644 --- a/jdk/test/sun/security/util/Oid/S11N.sh +++ b/jdk/test/sun/security/util/Oid/S11N.sh @@ -71,7 +71,7 @@ case "$OS" in i[3-6]86 ) PF="linux-i586" ;; - amd64* ) + amd64* | x86_64 ) PF="linux-amd64" ;; * ) @@ -97,15 +97,29 @@ case "$OS" in ;; esac +echo "===================================================" +echo "Try to set ALT_JAVA_RE_JDK if you see timeout error" +echo "===================================================" + # the test code ${TESTJAVA}${FS}bin${FS}javac -target 1.4 -source 1.4 \ -d . ${TESTSRC}${FS}SerialTest.java || exit 10 +# You can set ALT_JAVA_RE_JDK to another location that contains the +# binaries for older JDK releases. You can set it to a non-existent +# directory to skip the interop tests between different versions. + +if [ "$ALT_JAVA_RE_JDK" = "" ]; then + JAVA_RE_JDK=/java/re/j2se +else + JAVA_RE_JDK=$ALT_JAVA_RE_JDK +fi + OLDJAVA=" - /java/re/j2se/1.6.0/latest/binaries/${PF} - /java/re/j2se/1.5.0/latest/binaries/${PF} - /java/re/j2se/1.4.2/latest/binaries/${PF} + $JAVA_RE_JDK/1.6.0/latest/binaries/${PF} + $JAVA_RE_JDK/1.5.0/latest/binaries/${PF} + $JAVA_RE_JDK/1.4.2/latest/binaries/${PF} " SMALL=" diff --git a/jdk/test/sun/security/x509/AlgorithmId/NonStandardNames.java b/jdk/test/sun/security/x509/AlgorithmId/NonStandardNames.java new file mode 100644 index 00000000000..9870db335f5 --- /dev/null +++ b/jdk/test/sun/security/x509/AlgorithmId/NonStandardNames.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7180907 + * @summary Jarsigner -verify fails if rsa file used sha-256 with authenticated attributes + */ + +import java.security.MessageDigest; +import java.security.Signature; +import java.security.cert.X509Certificate; +import sun.security.pkcs.ContentInfo; +import sun.security.pkcs.PKCS7; +import sun.security.pkcs.PKCS9Attribute; +import sun.security.pkcs.PKCS9Attributes; +import sun.security.pkcs.SignerInfo; +import sun.security.tools.CertAndKeyGen; +import sun.security.x509.AlgorithmId; +import sun.security.x509.X500Name; + +public class NonStandardNames { + + public static void main(String[] args) throws Exception { + + byte[] data = "Hello".getBytes(); + X500Name n = new X500Name("cn=Me"); + + CertAndKeyGen cakg = new CertAndKeyGen("RSA", "SHA256withRSA"); + cakg.generate(1024); + X509Certificate cert = cakg.getSelfCertificate(n, 1000); + + MessageDigest md = MessageDigest.getInstance("SHA-256"); + PKCS9Attributes authed = new PKCS9Attributes(new PKCS9Attribute[]{ + new PKCS9Attribute(PKCS9Attribute.CONTENT_TYPE_OID, ContentInfo.DATA_OID), + new PKCS9Attribute(PKCS9Attribute.MESSAGE_DIGEST_OID, md.digest(data)), + }); + + Signature s = Signature.getInstance("SHA256withRSA"); + s.initSign(cakg.getPrivateKey()); + s.update(authed.getDerEncoding()); + byte[] sig = s.sign(); + + SignerInfo signerInfo = new SignerInfo( + n, + cert.getSerialNumber(), + AlgorithmId.get("SHA-256"), + authed, + AlgorithmId.get("SHA256withRSA"), + sig, + null + ); + + PKCS7 pkcs7 = new PKCS7( + new AlgorithmId[] {signerInfo.getDigestAlgorithmId()}, + new ContentInfo(data), + new X509Certificate[] {cert}, + new SignerInfo[] {signerInfo}); + + if (pkcs7.verify(signerInfo, data) == null) { + throw new Exception("Not verified"); + } + } +} diff --git a/jdk/test/tools/pack200/RepackTest.java b/jdk/test/tools/pack200/RepackTest.java new file mode 100644 index 00000000000..774e0d66eb3 --- /dev/null +++ b/jdk/test/tools/pack200/RepackTest.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +/* + * @test + * @bug 7184145 + * @summary tests repacking of a simple named jarfile. + * @compile -XDignore.symbol.file Utils.java RepackTest.java + * @run main RepackTest + * @author ksrini + */ +public class RepackTest { + + public static void main(String... args) throws Exception { + testRepack(); + } + + /* + * there are two cases we need to test, where the file in question is + * orpaned, ie. without a parent ie. not qualified by a parent path + * relative nor absolute + * case 1: src and dest are the same + * case 2: src and dest are different + */ + static void testRepack() throws IOException { + + // make a copy of the test specimen to local directory + File testFile = new File("src_tools.jar"); + Utils.copyFile(Utils.locateJar("golden.jar"), testFile); + List cmdsList = new ArrayList<>(); + + // case 1: + cmdsList.add(Utils.getPack200Cmd()); + cmdsList.add("--repack"); + cmdsList.add(testFile.getName()); + Utils.runExec(cmdsList); + + // case 2: + File dstFile = new File("dst_tools.jar"); + cmdsList.clear(); + cmdsList.add(Utils.getPack200Cmd()); + cmdsList.add("--repack"); + cmdsList.add(dstFile.getName()); + cmdsList.add(testFile.getName()); + Utils.runExec(cmdsList); + + // tidy up + testFile.delete(); + dstFile.delete(); + } +} diff --git a/langtools/.hgtags b/langtools/.hgtags index cee894b8d9b..60fbcb29fc2 100644 --- a/langtools/.hgtags +++ b/langtools/.hgtags @@ -166,3 +166,8 @@ a9f547c218d957306dfc0cdd710be041bb62a555 jdk8-b39 02c5a3575539e737a1855b31287654e843edd6da jdk8-b42 f8c64d835b2806293b8e924b44f0e32b20657ed3 jdk8-b43 59cbead12ff46dbb397120bd26635bcd7d41ff21 jdk8-b44 +e111e4587ccada8eb93f72e834e378c76256f4b7 jdk8-b45 +4ca5994971724731233735f055f33d4936fd11d3 jdk8-b46 +7e6be2f239c9a4ac6dec280bd18ec296dd78e464 jdk8-b47 +afb0a523155727d42b1c773f783ff3a7cfab8e86 jdk8-b48 +c72c164ced676d3c360d99b1c52cc80940fc3122 jdk8-b49 diff --git a/langtools/make/tools/genstubs/GenStubs.java b/langtools/make/tools/genstubs/GenStubs.java index f43df55365f..95ffa021b39 100644 --- a/langtools/make/tools/genstubs/GenStubs.java +++ b/langtools/make/tools/genstubs/GenStubs.java @@ -201,7 +201,7 @@ public class GenStubs { */ public void visitTopLevel(JCCompilationUnit tree) { super.visitTopLevel(tree); - tree.docComments = Collections.emptyMap(); + tree.docComments = null; } /** diff --git a/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java b/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java index 31c8be9f789..27d7ff914de 100644 --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java @@ -746,6 +746,7 @@ public class Flow { pendingExits = prevPendingExits; alive = true; scanStat(tree.finalizer); + tree.finallyCanCompleteNormally = alive; if (!alive) { // discard exits and exceptions from try and finally thrown = chk.union(thrown, thrownPrev); @@ -764,7 +765,6 @@ public class Flow { } alive = aliveEnd; } - tree.finallyCanCompleteNormally = alive; } else { thrown = chk.union(thrown, chk.diff(thrownInTry, caughtInTry)); alive = aliveEnd; diff --git a/jdk/test/sun/security/krb5/ServiceNameClone.java b/langtools/test/tools/javac/DefiniteAssignment/T7181578.java similarity index 63% rename from jdk/test/sun/security/krb5/ServiceNameClone.java rename to langtools/test/tools/javac/DefiniteAssignment/T7181578.java index 81b3b038537..d25d0d19733 100644 --- a/jdk/test/sun/security/krb5/ServiceNameClone.java +++ b/langtools/test/tools/javac/DefiniteAssignment/T7181578.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -20,22 +20,27 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ + /* * @test - * @bug 6856069 - * @summary PrincipalName.clone() does not invoke super.clone() + * @bug 7181578 + * @summary javac reports uninitialized variable with nested try...finally blocks + * + * @compile T7181578.java */ - -import sun.security.krb5.ServiceName; - -public class ServiceNameClone { - public static void main(String[] args) throws Exception { - ServiceName sn = new ServiceName("me@HERE"); - if (sn.clone().getClass() != ServiceName.class) { - throw new Exception("ServiceName's clone is not a ServiceName"); - } - if (!sn.clone().equals(sn)) { - throw new Exception("ServiceName's clone changed"); - } +class T7181578 { + String test(boolean cond) { + final String s; + try { + if (cond) { + try { + s = ""; + return s; + } finally { } + } else { + s = ""; + } + return s; // bug occurs here: mapping is always initialized + } finally { } } } diff --git a/make/scripts/hgforest.sh b/make/scripts/hgforest.sh index aa67490c351..5906f721c87 100644 --- a/make/scripts/hgforest.sh +++ b/make/scripts/hgforest.sh @@ -98,7 +98,8 @@ for i in ${repos} ; do ( ( if [ "${command}" = "clone" -o "${command}" = "fclone" ] ; then - cline="hg clone ${pull_default}/${i} ${i}" + pull_newrepo="`echo ${pull_default}/${i} | sed -e 's@\([^:]/\)//*@\1@g'`" + cline="hg clone ${pull_newrepo} ${i}" echo "# ${cline}" ( eval "${cline}" ) else @@ -121,7 +122,8 @@ if [ "${repos_extra}" != "" ] ; then n=`expr ${n} '+' 1` ( ( - cline="hg clone ${pull_extra}/${i} ${i}" + pull_newextrarepo="`echo ${pull_extra}/${i} | sed -e 's@\([^:]/\)//*@\1@g'`" + cline="hg clone ${pull_newextrarepo} ${i}" echo "# ${cline}" ( eval "${cline}" ) echo "# exit code $?"